Repository navigation
Interface editor: typed edits, tree, multiselect, versioning - #36
Merged
Merged
Conversation
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013K2j7WKJ3rVme2h7LSfvc6
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013K2j7WKJ3rVme2h7LSfvc6
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013K2j7WKJ3rVme2h7LSfvc6
…marquee Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013K2j7WKJ3rVme2h7LSfvc6
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013K2j7WKJ3rVme2h7LSfvc6
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013K2j7WKJ3rVme2h7LSfvc6
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013K2j7WKJ3rVme2h7LSfvc6
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013K2j7WKJ3rVme2h7LSfvc6
… sizes Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013K2j7WKJ3rVme2h7LSfvc6
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013K2j7WKJ3rVme2h7LSfvc6
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013K2j7WKJ3rVme2h7LSfvc6
Member
Author
|
CI Generated by Claude Code |
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013K2j7WKJ3rVme2h7LSfvc6
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013K2j7WKJ3rVme2h7LSfvc6
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013K2j7WKJ3rVme2h7LSfvc6
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013K2j7WKJ3rVme2h7LSfvc6
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013K2j7WKJ3rVme2h7LSfvc6
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013K2j7WKJ3rVme2h7LSfvc6
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013K2j7WKJ3rVme2h7LSfvc6
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013K2j7WKJ3rVme2h7LSfvc6
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013K2j7WKJ3rVme2h7LSfvc6
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013K2j7WKJ3rVme2h7LSfvc6
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013K2j7WKJ3rVme2h7LSfvc6
The caret, selection and IME composition underline are drawn from the text layout's glyph geometry instead of | and [..] in the text. A click or drag places the caret by character index. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
UiFx (authored 'fx' edit plus Opacity/OffsetX/OffsetY/Rotation props) is visual only and composes with the anchor transform through margins and insets. Design sessions can freeze an animation at a time (protocol 37). Adds a GPU matrix test for viewport, DPI and safe area. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Fixes checkbox toggle tests and the hierarchy's Ctrl/Shift multiselect. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
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.
Requested by Treetrain1 · project thread
Before: The Interface workspace still rewrote the whole document with
set_interfacefor adding, deleting, duplicating and most inspector fields. It had a flat hierarchy list, single selection, no schema version, and every commit reloaded the world.After: Those actions are typed, undoable edits in the begin/update/commit transaction used by move and resize, also available from shell and MCP. The hierarchy is a searchable tree with editor-only Lock and Hide. Widgets can be multiselected (Shift-click, marquee), moved as a group, aligned and distributed. The interface document is versioned, and committing with a design preview open no longer reloads the world.
What changed:
UiEdits:Create,Delete,Duplicate(remaps parents and scroll targets inside the copy),Batch(all or nothing),SetDocument,SetClass;SetPropertynow covers range, style, class, bindings, items, tooltip, scroll target, tab page and transition.interface-propertieslists every property path with label, group, type and applicable kinds; a test keeps it in step with the edit enum.UiDocument.version(1); old documents migrate on load, newer ones are refused rather than rewritten.InterfaceDesign.hidden(protocol 36) hides widgets in the preview only.docs/interface-editor-plan.mdis updated against recent master changes and lists what remains;AGENTS.mdhas an Interface editor section.How: core in
blockloom-core/src/ui_framework.rs, backend incommands.rs/dispatch.rs/shell.rs, runtime hide inui_design.rs, UI inUiDesigner.qml.Tested locally: core and runtime design-session tests, protocol tests, the backend interface transaction tests, clippy
-D warningsand fmt. QML lints clean.just qml-testhas now run: 169 pass;PhysicsInspector::test_aConflictNeedsTheConversionBeforeApplyingfails independently of this PR.Follow-up on this branch (verified on a Qt 6 + RTX 5080 machine):
onToggled, and the hierarchy's Ctrl/Shift multiselect never received modifiers (it read amouseargumentItemDelegate.onClickedlacks).input_caret.rs, parley geometry), and click/drag places the caret by character index. The|and[..]marks in the text are gone.Opacity,OffsetX,OffsetY,Rotationtracks plus an authoredfxproperty. Offset rides margins/insets and rotation the transform's rotation, so the anchor's translation is untouched; opacity multiplies down the tree (slider tracks and fills are not faded yet). The timeline has Preview and a scrub slider viaInterfaceDesign.animation(protocol 37); editing pauses while previewing and nothing is saved.interface_design_geometry_follows_viewport_dpi_and_safe_area(six viewport/DPI/safe-area/scale cases) passes through the embedded runtime. Still open: process runtime matrix, real image/font loading, presentation timing, screenshot baselines.cargo test --workspace: all pass exceptscreen::shell::tests::keys_type_their_keycode_and_unknown_ones_are_refused, which passes alone and looks load-sensitive. Clippy is clean for this branch's code.🤖 Generated with Claude Code
https://claude.ai/code/session_013K2j7WKJ3rVme2h7LSfvc6