Uh oh!
There was an error while loading. Please reload this page.
Fold the style groups away, and join a divider's parts into one figure - #18
Merged
ZombieHDGaming merged 3 commits intoAug 25, 2026
Merged
Conversation
…hidden A StyleEditor is the tallest thing in the section editor -- a font, a size, a fill with its stops, an outline, a shadow, an alignment -- and a bridged row with subtitles stacks five of them between the placement rows and the entry table. That is the scroll the folding groups were added to end; the style groups were simply left out of that first pass. So CollapsibleGroup grows the checkbox it was originally written to avoid, and keeps the two readings apart by putting them side by side: the checkbox says whether the style applies, the disclosure triangle beside it says whether the settings are on screen, and neither moves the other. Switched off, a group greys its settings where they are exactly as the checkable QGroupBox it replaces did -- taking them away at the moment somebody is deciding whether they want them is the opposite of helpful. The two have separate signals, so tidying the pane never marks the document dirty. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014u65jyFXUpurpneq2TBTHk
… each other Every join in a Section Divider was a gap floored at zero, so a composed divider read as a row of separate marks however carefully its shapes were picked -- an arrowhead here, a stub of rule there, a diamond floating in the middle of it. Two settings answer that, and they compose. The gaps reach below zero, where they stop holding two parts apart and push them into each other instead. That is not a second setting with a name of its own: a cap overlapping its rule by six pixels is the same edit as one clearing it by six, and one spin box running through zero is what says so. A join between two pieces of a stack is bounded at half the narrower of them -- pushed together, never through each other -- and the bound is worked out once in the measure pass and carried to the place pass, since two passes deciding it separately would be two chances to disagree about a width the section below is positioned from. `dividerConnect` runs the rule the whole way through: one unbroken arm from the middle of one cap to the middle of the other, passing behind the centre rather than breaking either side of it, so a diamond sits *on* the line the way an ornamental rule is actually composed. The middle of the outermost piece rather than the stack's outer edge, because that point is inside every cap's silhouette whatever the cap is -- run to the edge and the rule pokes a blunt nose out of a tapering arrowhead. None of it needed new painting machinery, which is the point: every tinted part of a divider already goes into one silhouette and is inked once, so an overlap unions seamlessly rather than showing a seam, a doubled outline or a restarted gradient. What it did need was the arms placed before the stacks rather than after, so a piece is drawn over the rule it sits on -- invisible for tinted artwork, but a custom picture left in its own colours is painted straight to the strip, and a rule across the front of it is not the ornament anybody placed. Whatever a join is set to, the arms stay inside the section's own box. Off by default, which is the divider every existing document already draws. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014u65jyFXUpurpneq2TBTHk
The check runs clang-format 19.1.1 over every file a pull request changes, and these six were already non-conforming under it on master -- so the failure arrives the moment a branch touches one of them, while master itself stays green because nothing changed there for the check to look at. Every hunk is the formatter's own output: line wrapping, argument alignment, and one place where two statements had ended up sharing a line separated by a tab. Nothing here was written by hand and nothing changes what any of it does; the test run is unchanged at 71 suites and 4558 checks. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014u65jyFXUpurpneq2TBTHk
Uh oh!
There was an error while loading. Please reload this page.
ZombieHDGaming
deleted the
claude/credit-designer-properties-headers-7nwjfa
branch
August 25, 2026 01:08
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Two things in the Credit Designer, plus a formatting fix the CI asked for.
1. The style groups fold away
A
StyleEditoris the tallest thing in the section editor — a font, a size, a fill with its stops, an outline, a shadow, an alignment — and a bridged row with subtitles stacks five of them between the placement rows and the entry table. That is exactly the scroll the folding groups were added to end; the style groups were simply left out of that first pass.All five now fold:
QGroupBoxCollapsibleGroupQGroupBoxCollapsibleGroupQGroupBoxCollapsibleGroupQGroupBoxCollapsibleGroupQGroupBoxCollapsibleGroupEntriesandDivider Piecesare deliberately untouched: they are the tables that already take the pane's leftover height, and folding the thing you came to the pane to edit is not a convenience.The checkbox
CollapsibleGroupwas written to avoidIts original note argued a checkbox on a group reads as switching the group off, which is what the checkable groups in this editor already mean — so it offered only a disclosure triangle. Two of the style groups need both readings at once, so the class now carries both, side by side rather than one standing in for the other:
useSecondaryStyle/useBridgeStyleround trip;Neither moves the other. Switched off, a group greys its settings where they are, exactly as the checkable
QGroupBoxit replaces did. Separate signals (toggled,expandedChanged) mean folding a group never marks the document dirty.setHeaderToolTipcame with it: a tooltip set on the group reached only the strip of it no child covered, which on an expanded group is almost nowhere.2. A divider's parts can be joined into one figure
Every join in a Section Divider was a gap floored at zero, so a composed divider read as a row of separate marks however carefully its shapes were picked. Two settings answer that, and they compose:
dividerGapanddividerPieceGapstop holding two parts apart and push them into each other instead. Not a second setting with a name of its own — a cap overlapping its rule by six pixels is the same edit as one clearing it by six, and one spin box running through zero says so. A join between two pieces of a stack is bounded at half the narrower of them, so pieces are pushed together but never through each other.dividerConnectruns the rule the whole way through. One unbroken arm from the middle of one cap to the middle of the other, passing behind the centre rather than breaking either side of it, so a diamond sits on the line. The middle of the outermost piece rather than the stack's outer edge, because that point is inside every cap's silhouette whatever the cap is — run to the edge and the rule pokes a blunt nose out of a tapering arrowhead.The new
dividers-joinedscene shows all three states: held apart, run through, and closed up by hand.What made it cheap
No new painting machinery. Every tinted part of a divider already goes into one silhouette and is inked once, so an overlap unions seamlessly rather than showing a seam, a doubled outline or a restarted gradient — the mechanism that was already giving you one outline around the whole divider.
Two things did need care:
MeasuredStack::gapsto the place pass. Two passes working the bound out separately would be two chances to disagree about a width the section below is positioned from.Whatever a join is set to, the arms stay inside the section's own box.
Compatibility
dividerConnectdefaults off and is absent from every existing document, so every roll draws exactly as it did. The loader still tells a stored zero apart from a missing key for both gaps, and now bounds them on the negative side atkMaxDividerJoin— the same figure the designer's spin boxes offer.3. A formatting commit, and why it is here
The third commit is nothing but
clang-formatoutput. TheCheck Formatting 🔍job installsobsproject/tools/clang-format@19and runs it over every file a pull request changes, and six of the files this branch touches were already non-conforming under 19.1.1 onmaster:origin/mastersrc/model/CreditsModel.cppsrc/render/StripRenderer.cppsrc/ui/SectionEditor.cpptests/harness/Fixtures.cpptests/suites/Dividers.cpptests/suites/Persistence.cppBecause the check only looks at changed files,
masternever trips it — the failure appears the moment any branch touches one of these. So the drift is cleared here rather than left to fail every future PR that goes near them. Every hunk is the formatter's own output: line wrapping and argument alignment, plus one spot inSectionEditor.cppwhere two statements had ended up sharing a line separated by a tab. Nothing changes what any of it does.It is a separate commit so it can be read (or dropped) independently of the two changes above.
Testing
cmake -S . -B build -DENABLE_TESTS=ON && cmake --build build— plugin and test binary build clean, no new warnings../build/tests/closing-time-tests— 71 suites, 4558 checks, 0 failures (was 68 / 4498 before), unchanged by the formatting commit.divider_connected_rule— a divider held apart has columns with no ink in them; the same divider joined has none, at the same width and height, and the end gap makes no difference once it is not consulted.divider_negative_join— measured on a centre stack with no arm, where the ink is the stack's width: a positive gap opens both joins by exactly what was asked, and an unbounded overlap takes back exactly one piece width across the two joins rather than however much was typed.divider_join_stays_inside— a join dragged to its far end leaves no ink outside the section's box.Persistence—divider_connectround-trips, absent means off, and a hostile-1e9gap off a file is bounded on the negative side rather than rejected for being negative.clang-format19.1.1 (the versionbuild-aux/run-clang-formatrequires) reports every changed file clean.The section editor itself has no offscreen coverage — it needs a window — so the UI behaviour in part 1 was verified by reading, not by a test. Worth a look in a real OBS build before merge.