- dock_hover_pending is an Option<HoverPending> (Reveal / Hide) instead
of a nested Option.
- dock_float_frame returns a FloatFrame with width() and bar_x(), so the
floating menu no longer repeats the frame-width formula.
- Put dock_reveal's doc comment back on dock_reveal, and the group-move
comment back above the match it describes.
No behaviour change.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_013RyGiMXcsf9HTKfqDxaQGt
Remove floating groups: a floating window is a single pallet once more,
and the Pallets submenu is gone from its title-bar menu. Kept: the menu
opens at the pointer with Allow docking, Dock left and Dock right;
close / pin show only while the bar is hovered; content is clipped to
its frame. A config saved by the floating-group build still loads, its
windows floating their first pallet. Drops the unused Pallets string.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_013RyGiMXcsf9HTKfqDxaQGt
- The floating title bar's right-click menu opens where the pointer is,
flipped to stay on screen; the Pallets submenu sits beside it.
- Close and pin on a floating title bar only show while it is hovered,
as on docked title bars.
- New Allow docking check in that menu: off, dragging the window (or a
pallet out of it) only floats it, never docks it on an edge.
- Floating windows and stacked pallets clip their content, so a pallet
sized below its content no longer draws outside its frame.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_013RyGiMXcsf9HTKfqDxaQGt
- A docked group floats as one window: drag its edge band over the
drawing or double-click the band. Floating windows hold a stack of
pallets with splitters; the vertical title bar shows each pallet's
icon (press one to drag that pallet out). Dragging the bar moves the
whole window; dropping it on an edge docks or joins it as a group.
- Right-click a floating title bar: Pallets submenu (add or hide
pallets in the window), Dock left, Dock right.
- Close on a floating bar closes every pallet in the window; its pin
sets auto-hide for the whole window.
- Older configs with single floating pallets still load.
- Translate the new dock texts (Auto-hide, Dock left/right, New group,
Pallets, Browser, Node Graph) in all 21 languages.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_013RyGiMXcsf9HTKfqDxaQGt
- LAYERS ribbon button runs a command that opens the Layer Manager pallet;
the ribbon no longer keeps it highlighted.
- Layer Manager: search box stays right-aligned, the column header fills
the row, no stray contour lines when the pallet is taller than its rows.
- Auto-hidden edges don't show the shown-group accent bar.
- Auto-hide reveal and hide wait 150 ms of rest, so passing over the
strip doesn't flash groups open.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_013RyGiMXcsf9HTKfqDxaQGt
draw_axes projected with raw project_point3, so a behind-camera axis endpoint wrapped to a finite mirrored point (proven: clip.w=-100 projected to screen centre). Extracted shared project_point with the eye-plane guard (grid_segments delegates verbatim) and axes now skip when an end is unprojectable plus clip_seg. Legacy canvas offset preserved pixel-identically; remaining raw project_point3 sites elsewhere are out of scope. Tests: project_point_rejects_behind_eye plus axes_segments geometry pins. Full suite: 2024 passed / 0 failed / 25 ignored.
Fixes:
- Hover state no longer drops when the pointer moves up from one strip
icon, group grip or title bar to the one above: iced handles the
element above first, so the old element's "left" (None) cleared the
hover just set. Leave messages now carry the element and only clear
their own hover.
- The drop preview used the pallets' own widths; it now uses the
group's width, matching where the pallet lands.
- Group indexes from messages (group grab, splitter) are looked up
safely, so a message from before a layout change no longer panics.
- Floating placements read from the config are healed (finite, positive,
at least the minimum size), like the group weights already were.
- The shown group's edge bar is centred in its row: a stack takes its
height from its first layer, and the icon column was shorter than the
row. The "Drag to move group" tooltip is removed.
Simplifications (no behaviour change):
- dock_open_at_default / dock_unpeek replace seven copies of "dock on
the right if unplaced, then reveal" and four of "stop peeking".
- The drop target takes the grab offset as a parameter, so a drag
update stores its state once.
- dock_set_open, ensure_settings, the shown-index bookkeeping after a
group is removed and the on-screen width clamp each lose duplication.
- VBarLabel drops options its single caller never varied.
- The drop preview's landing computation is one helper.
Naming and consistency: pallet names in the + menu, the drag ghost and
the floating title bar go through t!(); StripHit::Tab becomes
StripHit::Join; stale comments updated.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_013RyGiMXcsf9HTKfqDxaQGt
- The dock's state handling and drawing move out of update/dialog.rs and
view/mod.rs into src/app/dock/ (update.rs, view.rs, tests.rs). The
overlay view_main stacked over the workspace (floating pallets, + menu,
drag preview, pointer capture) becomes one `dock_overlay` call. Code is
moved, not changed.
- Strip icons no longer show the pallet name on hover.
- Tests trimmed where they overlapped: the top / bottom half drops are
one test, the two hover tests are one, and the in-group icon reorder,
raise-float, empty floating title bar and slot-span tests are dropped
(each is covered by another test).
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_013RyGiMXcsf9HTKfqDxaQGt
LayerPanel.editing and color_picker_row were positional indices, so a sort/sync/filter between start and commit retargeted renames and swatches. Both are Option<String> now; commit resolves fresh with graceful no-op on deleted layers. Existing rename tests migrated. Tests: layer_rename_commit_follows_name_across_resort (RED first) plus deleted/empty no-op and picker-resort pins. Full suite: 2019 passed / 0 failed / 25 ignored.
No intended behaviour change except the fixes noted below.
- One drag state: a single `DockDrag` (move pallet / group, width,
splitter, floating size, Layer Manager column) replaces nine fields
(dragging, dragging group, resizing, split, float resizing, origin,
target, grab offset, layer column flag) that had to be kept in sync.
- `dock_expanded` becomes `dock_peek` with one meaning: a pallet revealed
although it auto-hides. `dock_reveal(id)` shows a pallet's group and
peeks it; commands that open a pallet now use it, so opening a pallet
also switches its edge to that pallet's group.
- Each group stores its own width (falling back to its widest pallet's
width until first sized), instead of every pallet's width being kept in
sync. Pallet widths now only size floating pallets and new groups.
- One `dock_set_open(id, open)` holds every pallet's open and close path.
- Leftovers removed: the tab-group config format that never reached main,
the multi-tab drag ghost header, the separate icon-hover message.
Fixes:
- Hovering a strip icon reveals an auto-hiding edge again (the icons had
lost the hover message in the option B strip). Covered by a test that
moves the pointer over the icon in the real view.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_013RyGiMXcsf9HTKfqDxaQGt
- Double-clicking a docked or floating title bar did nothing. iced keeps
a widget's state (including the first click of a double-click) only
while the widget tree keeps its shape, and pressing a title bar starts
a possible drag that wrapped the workspace in an extra pointer-capture
layer, rebuilding the title bar and forgetting the first click. The
workspace is now always inside the same stack and mouse area; the
capture handlers are only attached while dragging. A test drives the
real view through iced's UserInterface (keeping its cache between
events, as the runtime does) and fails without this fix.
- The shown group's edge bar was shorter than its row (the tooltip
around the edge band sized it to its content), so it looked off
centre. Band and bar now have explicit heights.
- Picking a pallet in the + menu closes the menu.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_013RyGiMXcsf9HTKfqDxaQGt
The icon strip follows the agreed "option B" concept:
- Flat 40 px strip; groups are rows of their pallets' icons separated by
hairline dividers, with no grip lines. The + button is a small round
button under the last group.
- The shown group is marked by a blue bar on its window-side edge and
brighter icons. That 8 px edge band is the group grip: hovering it
widens and lights the bar, tints the row, shows a grab cursor and a
"Drag to move group" tooltip; dragging it moves the whole group.
- Icons still drag single pallets: within their group or into another
group (between its icons), or onto a divider to start a new group.
Hovering an icon gives it a soft background and shows its name.
- Drop feedback: a short accent line with end caps between icons means
"join this group here" (the target group's bar lights up); a
full-width line on a divider with a "+ New group" badge means "new
group here". The dragged icon (or whole group) fades in place and a
ghost follows the pointer.
- The zone around a divider (a few px into the icons on either side)
starts a new group; the lower half of a group's last icon still joins
that group at the end.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_013RyGiMXcsf9HTKfqDxaQGt
rename_style_storage and rename_symbol rewrote entities and table rows but left dimtxsty stale, so the next Apply resolved a NULL handle. The follow now lives in both shared functions; the plugin workaround is removed as redundant. Tests: text_rename_follows_dimtxsty drives the manager path (RED first); pre-existing plugin rename test stays green via the shared path. Full suite: 2015 passed / 0 failed / 25 ignored.
Dragging a pallet over its own group (e.g. the block palette, alone on
the right edge) targeted joining that group. Joining first detached the
pallet, which removed the now-empty group, then indexed it: an
out-of-bounds panic, hit already by the live drop preview. A pallet alone
in the group it would join now just stays put.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_013RyGiMXcsf9HTKfqDxaQGt
StyleKey::TableStyle only updated the ribbon mirror, so inserts kept using the header value and resync re-seeded from the mirror. The arm now writes current_table_style_name plus dirty when the style exists, and sync_ribbon_styles seeds from the document like Text/Dim. Tests: tablestyle_ribbon_pick_writes_header_and_dirties plus pick_flows_into_table_insert covering pick-to-dialog (both RED first). Full suite: 1996 passed / 0 failed / 25 ignored.
- Auto-hide is a setting of the left / right edge rather than of each
pallet: the pin on any docked pallet turns it on for its whole edge,
which then shows only its icon strip until an icon is hovered. A
floating pallet keeps its own auto-hide.
- Hovering the strip icons only shows a group while the edge auto-hides;
otherwise groups switch on click.
- The + menu checks only the pallets open on that edge. Picking one that
is open elsewhere (the other edge, floating) moves it to this edge;
unchecking a checked one hides it.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_013RyGiMXcsf9HTKfqDxaQGt
A group is now a set of pallets shown together, stacked top to bottom,
and an edge shows one group at a time. The icon strip lists every group
(grip bar over its pallets' icons, the shown group on a grey
background); clicking any icon of a group shows that whole group.
- Dropping a pallet on the top / bottom half of a pallet in the shown
group stacks it above / below; dropping on the strip's icons places it
in that group at that spot, and on a grip or below the last group
starts a new group (which is then shown).
- Splitters set the heights of the pallets within a group; double-click
makes them equal again.
- Each group keeps its own width; the divider sizes only the group it
belongs to, and switching groups switches width.
- A group whose pallets all auto-hide shows only while hovered.
- Layouts saved by older builds load with their stacked pallets as one
group.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_013RyGiMXcsf9HTKfqDxaQGt
A lofted surface's region cross sections are recorded as the curve round
each region, as the reference records them; a region recorded as a
region made the reference refuse to open the drawing.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
The reference writes none; a draft distance on an extruded surface made
it re-extrude the surface with a taper when the profile changed.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
The polyline round a region is written about the region's normal in its
object coordinates with an identity transform, as the reference writes
it; a rebuild from the history placed a polyline given in plane
coordinates with a frame at the wrong place once the region moved. Arcs
of one circle making a whole turn are recorded as that circle.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Each dock edge now has a vertical icon strip along the window edge in
place of the horizontal tab row and the auto-hide rail.
- Every shown group gets a grip bar with its pallets' icons below it;
the shown pallet's icon has a grey background. Clicking an icon shows
that pallet in its group; hovering the icons of an auto-hiding group
opens it.
- Dragging an icon within the strip reorders it or moves it into
another group; dropping it on a grip or below the last group makes it
a new group there. On the pallet area, the top / bottom bands still
start a new group above / below and the middle joins the group.
- Dragging a grip moves the whole group to another position or edge.
- A + button under the groups opens the pallet menu (icon, name, check
mark). Opening a pallet from it docks it on that edge as a new group,
or in its existing group there; a checked pallet is hidden.
- Groups keep their width when moved; the divider against the viewport
sizes the whole edge column.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_013RyGiMXcsf9HTKfqDxaQGt
A swept, extruded or revolved surface made from a region records the
region as the curve round it, as the reference does: a lone circle or
whole ellipse as itself, a loop of lines and arcs as a closed polyline in
the region's plane. A region recorded as a region made the reference
refuse to open the drawing (modeling error 58000).
A region read by an associative action carries the step its edge names
belong to (ACAD_STEPID), so the reference finds the edges again and the
surface follows the region.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- The tab row shows only when at least two pallets share a slot.
- Tab icons are larger (18 px). The shown tab gets the grey background
without a border; other tabs have no background.
- The pallet menu was drawn by a dropdown that squeezed it to one icon
wide. It is now its own overlay hanging under the menu button, laid
out like the right-click menu: pallet icon, name, and a check mark on
the right for the pallets shown in this slot. Any click outside closes
it.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_013RyGiMXcsf9HTKfqDxaQGt
The surface extrusion, the extrusion along a path, revolve history and
embedded profiles refused a region whenever it had more than one display
wire, which a region of several edges always has. They now refuse only a
region with holes, and a region's loops for a solid extrusion come from
its modeler edges.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- LAYERS opens the Layer Manager as a dockable pallet instead of a modal
dialog with a darkened backdrop. It floats over the middle of the
drawing the first time and keeps its place after that; LAYERS again
(or its close button) hides it. The table keeps its natural width and
scrolls sideways when the pallet is narrower, and the Name column
divider now drags through the dock's pointer capture. Ctrl+A selects
all layers while a layer row is selected in the open pallet.
- The Layer Manager is listed in the tab-row pallet menu like the others.
- Double-clicking a docked title bar floats the panel beside its edge;
double-clicking a floating title bar docks the panel on the side its
title bar faces.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_013RyGiMXcsf9HTKfqDxaQGt
A region keeps one display wire per edge, so a region of several edges
gave no polygon and could not be extruded (solid or surface), and a
circle region was extruded from its display polygon. Profiles of a region
with one boundary loop now come from the region's modeler edges.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- Dropping on a docked pallet now stacks it above or below over the top
and bottom 35 % of the slot; only the middle 30 % makes it a tab.
- Tabs show the pallet icon (title as tooltip), aligned to the left.
Every docked slot has the tab row, so its menu is always reachable.
- A menu button at the right of the tab row lists every pallet with a
check mark for those shown in this slot. Checking one opens it as a
tab here (moving it from wherever it was docked); unchecking hides it
and keeps its tab for next time.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_013RyGiMXcsf9HTKfqDxaQGt
A region of several edges kept its display wires one per edge, so the
surface extrusion found no polygon and refused it.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
A new drawing carries the visual styles the reference's new drawing has
in its visual style dictionary. -VIEW sEttings Visual style offers them
(2dWireframe as "2D Wireframe") and a saved view starts with the 2D
Wireframe style.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
A swept, extruded, revolved or lofted surface made from a region now
reads the region through one geometry dependency per edge, each naming
its edge by a persistent subentity id recorded in the drawing's
subentity manager, so the surface follows the region. A lofted surface
keeps one continuity and bulge value per cross section.
Co-Authored-By: Claude Opus 5.5 <[email protected]>