Repository navigation
feat(donut): mark group slices with an outward chevron - #1111
Merged
KnifeLemon merged 1 commit intoNov 4, 2026
Merged
Conversation
A group slice draws a small chevron by its outer edge, pointing to where its ring fans out, so a group can be told from a preset at a glance, even where "Group of N" has no room. - DonutMenu.DrawSliceLabel draws a slice's text and mark for the ring, the old face, the collapse and the drop preview; a group's name moves in to leave the mark room. - The mark's size follows the donut's. It takes the secondary text colour, the highlight's text colour when lit, and half strength when the group is disabled. - The Donut toolbar page marks its group slices and the slice of a group being dragged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
KnifeLemon
approved these changes
Nov 4, 2026
KnifeLemon
left a comment
Owner
There was a problem hiding this comment.
Thanks, @lightscape-jm. This does all five things #868 asks. The mark stays on the slice's own radius, so hit-testing is unchanged, and at radius 110–220 with the hole at 42% and 65% and long names and captions, it didn't overlap the top slice's text. The side-slice overlap you disclosed belongs to #870, so I'm fine leaving it. The 13 test cases pass locally and CI is green. Merging.
Two small things for a follow-up, neither blocks this:
DonutMenu.cs:1111:DrawGroupMarkbuilds a newStreamGeometryfor each group slice on every frame while the donut animates. The comment atDonutMenu.cs:1279says slice shapes are kept and reused to avoid exactly that, so the mark could be cached like_wedges.ToolbarPage.axaml.cs:251: the tests check the chip'sIsGroupproperty, but the real drags in the file all start from slices. So the table's "on a real drag" isn't quite covered for chips, and a chip drag assertingPreviewIsGroupwould close that.
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 free
to 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.
What does this change?
Closes #868, the first of the donut visuals chain planned in #856. A group slice now has a small chevron by its outer edge, pointing to where its ring fans out, so a group can be told from a preset at a glance, in any language, even where "Group of N" has no room. No setting, and no new strings.
OuterRadius).DonutItem.Children = []is the documented "group with nothing to fan out"; everything that fans a group out, or reserves room for its ring, already skips edit mode, so the preview's size doesn't change.How it's built:
DonutMenu.DrawSliceLabeldraws a slice's text and mark. The ring, the old face during a flip, the collapse and the drop preview all use it, so they can't drift apart.SetDropPreviewhas a new optionalgroup, fixed when the drag starts (DragState.IsGroup,PaletteChip.IsGroup), likeCanAdd.Known limit: the name moves in along the slice, so it clears the chevron at the top and bottom. On a side slice, a long name on a donut of 4 to 6 slices can still touch it. #870, next but one in the chain, keeps every label inside its slice and clear of the chevron, as that issue says.
Type of change
How was it tested?
dotnet format --verify-no-changesdotnet test: on macOS, the App tests that fail do so on unmodifiedmaintoo (the engine-page renders, and the flakyA_lost_animation_frame…). The Donut, Radial and Toolbar tests pass on Windows 11 ARM64. In an Ubuntu 24.04 container the whole App suite fails only the twoUpdateAsync_on_linux…tests, which fail there on unmodifiedmaintoo; after the last changes to the tests, the Donut, Radial and Toolbar tests pass there apart fromBrowserDropTests.Other_text…, which also fails now and then on unmodifiedmainon my Mac.main, dark): the Images donut's front and back faces, Tab to flip, the Rotate group opened and lit, the chevron on its slice with the ring beside it; in Settings → Donut toolbar, the PDF donut's back face, the Edit group dragged one place along, its chevron going with it. No errors in the log.New tests,
DonutGroupMarkTests(12, one of them with two cases); each was checked by removing what it covers and seeing it fail:Screenshots (UI changes)
The Images donut's back face, and Rotate lit with its ring open:
Settings → Donut toolbar, the PDF donut's back face:
Checklist
src/Filee.App/Assets/i18n/*.jsonfiles (none needed)THIRD-PARTY-NOTICES.md(none)🤖 Generated with Claude Code