Fixes bugs where unnecessary Draw operations were happening in LayoutAndDraw. In some cases causing everything to always be drawn.

Refactored `NeedsDraw` logic into a modular implementation in `View.NeedsDraw.cs`, introducing methods to manage drawing states more effectively. Updated `Menus.cs` event handlers to include null checks for robustness. Improved margin drawing logic in `Margin.cs` with better performance and debugging assertions.

Added comprehensive unit tests in `NeedsDrawTests.cs` and `StaticDrawTests.cs` to validate the new drawing logic, including edge cases and static `View.Draw` behavior. Removed redundant tests from `ViewDrawingFlowTests.cs`.

Refactored diagnostic flags handling in `UICatalogRunnable.cs` for clarity. Performed general code cleanup, leveraging modern C# features and improving maintainability.
This commit is contained in:
Tig
2025-12-04 12:20:44 -07:00
parent 6a334bbf2e
commit 193a5873d1
8 changed files with 704 additions and 495 deletions

View File

@@ -253,7 +253,13 @@ public class Menus : Scenario
// The source of truth is our status CB; any time it changes, update the menu item
var enableOverwriteMenuItemCb = menuBar.GetMenuItemsWithTitle ("Overwrite").FirstOrDefault ()?.CommandView as CheckBox;
enableOverwriteStatusCb.CheckedStateChanged += (_, _) => enableOverwriteMenuItemCb!.CheckedState = enableOverwriteStatusCb.CheckedState;
enableOverwriteStatusCb.CheckedStateChanged += (_, _) =>
{
if (enableOverwriteMenuItemCb is { })
{
enableOverwriteMenuItemCb.CheckedState = enableOverwriteStatusCb.CheckedState;
}
};
menuBar.Accepted += (o, args) =>
{
@@ -298,7 +304,13 @@ public class Menus : Scenario
// The source of truth is our status CB; any time it changes, update the menu item
var editModeMenuItemCb = menuBar.GetMenuItemsWithTitle ("EditMode").FirstOrDefault ()?.CommandView as CheckBox;
editModeStatusCb.CheckedStateChanged += (_, _) => editModeMenuItemCb!.CheckedState = editModeStatusCb.CheckedState;
editModeStatusCb.CheckedStateChanged += (_, _) =>
{
if (editModeMenuItemCb is { })
{
editModeMenuItemCb.CheckedState = editModeStatusCb.CheckedState;
}
};
menuBar.Accepted += (o, args) =>
{

View File

@@ -289,24 +289,31 @@ public class UICatalogRunnable : Runnable
_diagnosticFlagsSelector = new ()
{
Styles = SelectorStyles.ShowNoneFlag,
CanFocus = true
CanFocus =true
};
_diagnosticFlagsSelector.UsedHotKeys.Add (Key.D);
_diagnosticFlagsSelector.AssignHotKeys = true;
_diagnosticFlagsSelector.Value = Diagnostics;
_diagnosticFlagsSelector.ValueChanged += (sender, args) =>
{
_diagnosticFlags = (ViewDiagnosticFlags)_diagnosticFlagsSelector.Value;
Diagnostics = _diagnosticFlags;
};
_diagnosticFlagsSelector.Selecting += (sender, args) =>
{
_diagnosticFlags = (ViewDiagnosticFlags)((int)args.Context!.Source!.Data!);// (ViewDiagnosticFlags)_diagnosticFlagsSelector.Value;
Diagnostics = _diagnosticFlags;
};
menuItems.Add (
new MenuItem
{
CommandView = _diagnosticFlagsSelector,
HelpText = "View Diagnostics"
});
MenuItem diagFlagMenuItem = new MenuItem ()
{
CommandView = _diagnosticFlagsSelector,
HelpText = "View Diagnostics"
};
diagFlagMenuItem.Accepting += (sender, args) =>
{
//_diagnosticFlags = (ViewDiagnosticFlags)_diagnosticFlagsSelector.Value;
//Diagnostics = _diagnosticFlags;
//args.Handled = true;
};
menuItems.Add (diagFlagMenuItem);
menuItems.Add (new Line ());