UI suite: a convenient background entry and reactive layout containers (ME-84, ME-85) - #634
Merged
Merged
Conversation
added 2 commits
August 28, 2026 07:08
Options and setters on Panel, Button and ProgressBar now take a colour, a
texture, an atlas region or a full descriptor. A texture becomes a nine-slice
whose slices default to a third of the source per axis; a colour becomes a fill
override, so the skin's corner radius and border survive it. A new sprite
background variant stretches or tiles flat art, and ProgressBar.fillMode decides
whether the bar's art is cut to the value ('clip', the default) or squashed with
it ('scale') - a fill is painted at the value's width either way, which keeps the
stock bar clear of the render barrier a clip imposes.
Stack re-flows itself when a child is added, removed, reordered or resized and when direction, spacing, padding or align is set, so a caller never has to pull layout() after a change the container can observe. Alignment places items on the cross axis (stretch resizes them to it), and setGrow hands the leftover space along the flow direction to the growing children once the stack has an explicit box. The new DockContainer pins children to top, right, bottom or left and gives the rest to the centre. Containers gained a protected _onChildListChanged hook and widgets a _requestParentLayout bubble, since neither the child list nor a descendant's size change was observable from outside before.
Exoridus
enabled auto-merge (squash)
August 28, 2026 05:52
Bundle ReportChanges will increase total bundle size by 76.03kB (0.25%) ⬆️. This is within the configured threshold ✅ Detailed changes
Affected Assets, Files, and Routes:view changes for bundle: exo-full-iife-min-Exo-iifeAssets Changed:
view changes for bundle: exo-esm-modules-esmAssets Changed:
view changes for bundle: exo-iife-Exo-iifeAssets Changed:
view changes for bundle: exo-iife-min-Exo-iifeAssets Changed:
view changes for bundle: exo-esm-esmAssets Changed:
view changes for bundle: exo-full-iife-Exo-iifeAssets Changed:
|
Codecov Report❌ Patch coverage is
📢 Thoughts on this report? Let us know! |
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.
Group E, packages E1 and E2.
ME-84 - the convenient entry
backgroundnow takes the form a caller has it in:Color | Texture | TextureRegion | UIBackground, in options and setters onPanel,Button(askinentry per state) andProgressBar(track and bar). Getters and the theme keep returning normalised descriptors.createUIBackgroundnormalises a texture into a nine-slice, defaulting its slices to a third of the source per axis (a side under 3 px degenerates to a plain stretch).spritebackground variant for flat art, stretched or tiled, painted byRepeatingSprite.ProgressBar.fillMode: 'scale' | 'clip', default'clip': the bar's art is cut to the value instead of squashed. A fill has nothing to distort and is painted at the value's width in either mode, which keeps the stock bar clear of the render barrier a clip imposes.ME-85 - reactive layout
Stackre-flows itself when a child is added, removed, reordered or resized, and whendirection,spacing,paddingoralignis set - no manuallayout()call.alignplaces items on the cross axis ('stretch'resizes them to it), andsetGrow(child, factor)distributes the leftover main-axis space once the stack has an explicit box.New
DockContainerpins children totop/right/bottom/leftand gives the rest tocenter; bands are taken in docking order.Two internal seams this needed: a protected
Container._onChildListChangedhook and aWidgetlayout-request bubble, since neither the child list nor a descendant's size change was observable from outside.Validation
test/ui(169) andtest/core(1355) green,gates typecheck/lint/sync/sitegreen,typecheck:guidesandtypecheck:examplesgreen,git diff --checkclean. API reference regenerated, root-index snapshots updated, guide extended with "Textured skins" and "Docking to the edges".