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.
43 lines
1.3 KiB
C#
43 lines
1.3 KiB
C#
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;
|
|
}
|
|
}
|