From 8745977da504bd4066a5476f6b783959ddf7c0b3 Mon Sep 17 00:00:00 2001 From: DonislawDev Date: Tue, 29 Sep 2026 15:26:10 +0200 Subject: [PATCH] Draw the plan sheet cheaper: a shadow under it, commands in one field past twenty W6 of the performance series, report items G-6 and G-7. The shadow is a sibling under the sheet rather than an effect on it. An effect takes its whole subtree as input, so every caret blink in the confirmation box and every tick of a run made WPF blur the sheet again - where WPF draws in software, as over Remote Desktop, a third to half of a core while the box held the keyboard. As a sibling it measures the same as no shadow at all, and the sheet's text gets ClearType back. PlanSheetFrame carries the shape both wear, so the shadow can only be cast by the sheet. Past twenty lines a block of commands stands in one read-only text box instead of a box, a scroller and a Copy button per line. A stop over a whole scope printed 334 of those as 5013 of the sheet's 7185 elements. The new CommandBlock type answers what a block holds, how it is shown and what Copy all carries, for both the commands and the way back, and replaces six properties on Planned. Each section of commands binds its block as its data, so the Copy all button's name, content, tip, tag and visibility move into its style. ChromelessBox is split out of SearchFieldBox, since the field is the second box that stands in a frame drawn by something else. Entries the machine does not work without are named in one sentence per kind over the confirmation box, rather than one sentence per plan - on a scope stop those sentences took the footer to 465 of 551 units and left the steps one unit tall. Gathered in the window, not in the core, because the core's warnings reach the JSON of --dry-run. The warning about a process that takes others with it is not gathered, since its sentence names one entry. Measured after the build with the same probe: a scope stop's sheet has 2534 elements instead of 7185, its body 221 units instead of 1, and opens in about 300-410 ms instead of 460-800. With the caret in the box and software rendering the sheet costs 2-6 ms of processor a second, against 207-262 for the look before this change in the same process. The markup ceiling comes down to 176 now that PlanView.xaml is 174. The catalogue guard for tall samples asks every sample instead of PlanSheet, which is no longer tall once its margin moved to the cell. Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 11 + src/Bws.Gui/PlanView.xaml | 80 +++--- src/Bws.Gui/PlanView.xaml.cs | 21 +- src/Bws.Gui/Themes/Plan.xaml | 128 +++++++++- src/Bws.Gui/Themes/PlanLines.xaml | 18 +- src/Bws.Gui/Themes/SearchField.xaml | 24 +- src/Bws.Gui/Themes/Spacing.xaml | 3 + src/Bws.Gui/ViewModels/CommandBlock.cs | 88 +++++++ src/Bws.Gui/ViewModels/PlanWords.cs | 43 ++++ src/Bws.Gui/ViewModels/Planned.Forcing.cs | 6 +- src/Bws.Gui/ViewModels/Planned.Sections.cs | 69 +++--- src/Bws.Gui/ViewModels/Planned.cs | 27 +- tests/Bws.Architecture.Tests/SizeCeilings.cs | 12 +- tests/Bws.Gui.Tests/CatalogueGuards.cs | 22 +- tests/Bws.Gui.Tests/ContrastGuards.cs | 3 +- .../CriticalEntryWindowGuards.cs | 68 ++++++ tests/Bws.Gui.Tests/PlanSheetCostGuards.cs | 231 ++++++++++++++++++ tests/Bws.Gui.Tests/PlanSheetListsTests.cs | 64 +++++ 18 files changed, 806 insertions(+), 112 deletions(-) create mode 100644 src/Bws.Gui/ViewModels/CommandBlock.cs create mode 100644 tests/Bws.Gui.Tests/PlanSheetCostGuards.cs diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f0b0bc..b559c82 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,17 @@ is not part of this repository. signature again. It keeps what it already knows about files whose path has not changed and verifies only new or changed ones. F5 still verifies everything again, so a file replaced by someone else in the meantime shows its new verdict after the next F5. +- The text on the plan sheet is sharper - it is drawn with ClearType like the rest of the window. + The sheet's shadow looks the same, but it no longer makes the whole sheet redraw with every blink + of the cursor. Where the window is drawn without the graphics card, as it is over Remote Desktop, + that cost a third to half of a processor core for as long as the box a name is typed into was + waiting. +- A plan with more than twenty commands shows them in one field that can be selected and copied, + instead of a box and a Copy button for every line. *Copy all* still takes all of them. The same + goes for the way back after a run. A plan over a whole scope opens noticeably faster. +- When a plan touches several entries this machine does not work without, the sheet names them all + in one sentence instead of one sentence each. On a plan over a whole scope those sentences used + to push every step off the sheet. ## [0.3.0] - 2026-09-25 diff --git a/src/Bws.Gui/PlanView.xaml b/src/Bws.Gui/PlanView.xaml index 96ec07c..73e5e1c 100644 --- a/src/Bws.Gui/PlanView.xaml +++ b/src/Bws.Gui/PlanView.xaml @@ -71,8 +71,18 @@ THE WIDTH IS A NAME SINCE 2026-09-15 and was a raw 560 here for a fortnight - the same family as backlog 352, a dimension written where no guard reads it. The number did not move, only where it lives. + + A CELL WITH TWO THINGS IN IT SINCE 2026-09-29: the shadow under, the sheet on top, both + filling the one rectangle the cell is given - so the shadow cannot part from the sheet + at any height of the footer. Why the shadow stopped being an effect ON the sheet is + beside PlanSheetShadow in Themes/Plan.xaml, with the measurement. The place and the size + are attributes rather than a style, because the catalogue builds samples of styles and + has nothing to build a Grid from. --> - + + + @@ -180,15 +190,10 @@ - + + Visibility="{Binding Any, Converter={StaticResource WhenTrue}}"> -