refactor(settings): a pull-out drawer, with Zoom as a category — and the menu moves to the wordmark
Creator directive, 2026-11-01. Settings stopped being a centred modal. - **Drawer** (Controls/SettingsDrawer): hosted in PreviewPane's pull-out stack, 320px, the same animated-width pattern as Stream Settings / YPP / Socials / TEST, opened by the gear rail tab on a single left click. SettingsDrawerOpen is exclusive with the other four, both directions. This also removes the modal's MaxHeight-700 scroll problem for good: the drawer is the height of the preview. - **Categories**: headings with controls indented beneath them. Zoom now owns *Zoom view shape* (Circle / Phone / Tablet) and *Zoom box follows*; Recordings, Brand logo and Scene transition are their own categories. - **The app menu moved to the LlamaCasty wordmark** (right-click → Report Bug / Feature Request / About). Left-click still opens About. The gear tab no longer carries a menu at all, so clicking it does exactly one thing. OverlayHost keeps only the Bug / Feature / About panels; its brand-logo handlers and the dev-panel injection moved with the settings block. BrandLogoPreviewTests follows the control (same assertions, new path). Release 0 warnings; 15 tests pass across brand logo, zoom, entitlement and preview history.
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
namespace ytLive.ViewModels;
|
||||
|
||||
/// <summary>
|
||||
/// App Settings as a right-edge drawer (creator ruling 2026-11-01): the gear rail tab opens it
|
||||
/// immediately, in the same exclusive-slide pattern as Stream Settings / YPP / Socials / TEST.
|
||||
///
|
||||
/// <para>It is a separate flag from <see cref="IsSettingsOpen"/> because the overlay shell now
|
||||
/// only carries Report Bug / Feature Request / About — settings stopped being a modal.</para>
|
||||
/// </summary>
|
||||
public partial class MainViewModel
|
||||
{
|
||||
private bool _settingsDrawerOpen;
|
||||
|
||||
public bool SettingsDrawerOpen
|
||||
{
|
||||
get => _settingsDrawerOpen;
|
||||
private set => SetProperty(ref _settingsDrawerOpen, value);
|
||||
}
|
||||
|
||||
internal void ToggleSettingsDrawer()
|
||||
{
|
||||
if (_settingsDrawerOpen)
|
||||
{
|
||||
SettingsDrawerOpen = false;
|
||||
return;
|
||||
}
|
||||
|
||||
// One drawer at a time, like the rail's other tabs.
|
||||
BroadcastForm.IsDrawerOpen = false;
|
||||
Ypp.IsDrawerOpen = false;
|
||||
TestSession.IsDrawerOpen = false;
|
||||
if (SocialsDrawerOpen) CloseSocialsDrawer();
|
||||
|
||||
SettingsDrawerOpen = true;
|
||||
}
|
||||
|
||||
/// <summary>Called by the other drawers when they open, so settings yields to them.</summary>
|
||||
private void CloseSettingsDrawerIfOpen()
|
||||
{
|
||||
if (_settingsDrawerOpen) SettingsDrawerOpen = false;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user