Commit Graph
388 Commits
Author SHA1 Message Date
ruchirguitarandFredApps 243bdb3f63 Fix #5713: resizable icon flyouts and bottom-aligned panel footers (#5973)
* Fix #5713: resize icon flyouts and anchor panel footers

* Fix #5713: reconcile parity evidence with upstream docs

* Fix #5713: keep Actions rows above the pinned footer

* Fix #5713: align documentation dates and regression claims

* Fix #5713: keep short Glyphs grids above the footer

* Fix #5713: pin craft-ui host minimum-size correction

---------

Co-authored-by: FredApps <153173854+FredApps@users.noreply.github.com>
2026-11-10 13:40:55 +01:00
dotCooCoo a0c2dbb6da View: Outline draws on a white canvas, with artboards as their edges
In Outline the canvas kept the Preview pasteboard color and filled each
artboard with white paper. Paths and type draw as black hairlines, so
art on the pasteboard was close to invisible in the dark interface
brightnesses.

In Outline the whole canvas is now white in every interface brightness
and Canvas Color, pasteboard included. The artboards draw no paper and
show as their edges, so Simulate Colored Paper, an artboard's background
color and the paper of View > Hide Artboards no longer show in Outline.
The artboard names and the ruler origin's crosshair draw in dark gray
there. In split views and floating windows the artboard names follow
that window's own Outline setting, as the canvas already did.
2026-11-09 23:34:14 -08:00
dotCooCoo f0dd3dc585 Merge main into fix/number-wheel-panel-scroll 2026-11-09 20:28:30 -08:00
BFlat a4a53e5ca6 Merge pull request #6328 from makesomethingshit/fix/6307-spinner-hold-pr
#6307: Keep numeric spinner arrows repeating while held
2026-11-10 11:25:06 +07:00
dotCooCoo b62a4d901a Merge main into fix/number-wheel-panel-scroll 2026-11-09 20:07:02 -08:00
dotCooCoo 2c6a0b88db Number fields: a panel scrolled past a number field keeps scrolling
A number field took every wheel turn that came while the pointer was
over it. When a panel scrolled a field under a still pointer, the field
stepped its value with each turn that reached it.

Number fields now follow the rule #6375 gave the closed font family
field. A field takes the wheel only when the wheel stream began over
it and the pointer was moved onto it, or pressed on it, after the field
last moved or was covered by a window or overlay. A stream that began
anywhere else stays there until 0.5 s pass with no wheel input or the
pointer is pressed on a field. A stream that leaves its field does not
return to it. It leaves when the pointer moves off the field or out of
the window, and when the field moves or misses a layout pass. Trackpad
momentum never starts a stream on a field. When some of a frame's wheel
turns land on the field and some land elsewhere, the field takes none
of them and the panel scrolls with all of them. The rule and its 0.5 s
are VectorCraft's own.

Moving the pointer from one number field to another within 0.5 s of
the last wheel turn now scrolls the panel until the wheel pauses or the
pointer is pressed on the new field.

The stream state and the 0.5 s gap move to widgets/wheel_stream.rs,
which both kinds of field use.
2026-11-09 19:18:09 -08:00
dotCooCoo 4f4a447b05 Font menu: a font field covered by an overlay needs the pointer moved again
A closed font family field stayed ready for the wheel as long as it kept
its place and drew in each pass. Coverage was checked only when a pointer
move or wheel turn arrived. When a window, modal or popup covered a still
pointer and went away with no input in between, the next plain wheel
turn changed the selected type's font.

The field now stops being ready, and a wheel stream it held ends, in any
pass where the last pointer position is over the field but on another
layer. The pointer has to move onto the field again before the wheel
steps the font.
2026-11-09 18:47:38 -08:00
BFlat 008595aa69 Merge pull request #6375 from dotCooCoo/fix/font-wheel-panel-scroll
Font menu: a panel scrolled past a closed font field keeps scrolling
2026-11-10 09:21:14 +07:00
dotCooCoo 138bdd77e4 Font menu: a panel scrolled past a closed font field keeps scrolling
Since #5331, a closed font family field in Character, Properties or the
Control bar took every plain vertical wheel turn while the pointer was
over it. When a panel scrolled the field under a still pointer, the
field took the rest of the turns: the panel stopped scrolling and each
turn changed the selected type's font.

The field now takes the wheel only when the pointer was moved onto it
after the field last moved, and the wheel stream began there. A stream
that began anywhere else, a sideways scroll included, stays there until
0.5 s pass with no wheel input. A stream that leaves its field does not
return to it. It leaves when the pointer moves off the field or out of
the window, when the field moves or misses a layout pass, and when a
turn arrives while an overlay covers the field. Trackpad momentum stays
with the stream it follows and never starts one on a field. The rule and
its 0.5 s are VectorCraft's own.

Wheel turns the field does not take stay in the input in their order.
Moving the pointer onto the field and turning the wheel still steps the
font, as #5253 asks, in floating panel windows too. When the pointer was
moved onto the field while a window or overlay covered it, the pointer
has to move again after the cover goes away before the wheel steps the
font.
2026-11-09 17:32:58 -08:00
dotCooCoo 28fc436ef3 Measure: both ends land on glyph guides with Snap to Glyph on
The Measure and Measure & Inspect tools ignored View › Snap to Glyph:
their press and end points snapped only to targets that hold no glyph
guides.

With Snap to Glyph, Smart Guides and Alignment Guides on, and Snap to
Grid and Snap to Pixel off, a drag's press and end land within the
snapping tolerance on the guides of live type that the Character
panel's options allow, except Anchor Point. A Shift-drag's end slides
along its 45° step to them, and the guide shows during the drag. With
Snap to Glyph off, the tools snap to the same targets as before and
show no guide. The targets are kept while the document, the window and
the snapping options stay the same, so a drag lays out the type once.
2026-11-09 16:59:54 -08:00
makesomethingshit 898db5d72d #6307: Keep spinner evidence separate from shared status lines 2026-11-10 00:53:11 +09:00
makesomethingshit 5bf0f337df #6307: Keep numeric spinner arrows repeating while held 2026-11-10 00:45:55 +09:00
Ahmed Gomaa 5c64c074ca Merge remote-tracking branch 'upstream/main' into fix/macos-native-cursor-delivery 2026-11-09 15:02:19 +02:00
Ahmed Gomaa aec326b6c6 macOS: deliver canvas cursors through AppKit pending a winit fix
On macOS the canvas paints tool cursor glyphs into the frame, so they
trail the pointer by a frame or more (#2292). This interim adapter
delivers the same glyphs as native NSCursors, which AppKit moves
independently of canvas redraws.

ui-egui prepares cached 1x/2x RGBA requests from the existing cursor
rasterizer and hotspots (transparent padding only) and keeps returning
a visible system fallback icon. The desktop host builds NSImage/NSCursor
objects with point-sized images and hotspots, owns cursor-rectangle
suspension and restoration, and hands the cursor back on menu tracking,
focus loss, empty passes, cursor overrides and shutdown.

Windows/X11, Wayland and web delivery are unchanged. No artwork, no
production unsafe, no new dependency package: only four AppKit features
are enabled on the already-shipped objc2-app-kit. Remove once the pinned
winit sizes macOS cursor images and hotspots in points.

Addresses #2292.
2026-11-09 13:44:32 +02:00
Ahmed Gomaa aad040f012 Merge remote-tracking branch 'upstream/main' into codex/snapping-quick-access 2026-11-09 12:27:27 +02:00
ruchirguitarandCursor e342a1ce0c M2.1: merge main and keep path-deletion evidence (#3380)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-11-09 11:43:22 +05:30
ruchirguitar e0aade5229 Merge remote-tracking branch 'origin/main' into SidePanelCollapseArrow
Co-authored-by: Cursor <cursoragent@cursor.com>

# Conflicts:
#	docs/gaps.md
#	docs/roadmap.md
#	docs/target-app-parity.md
#	docs/ui-parity.md
2026-11-09 10:00:54 +05:30
ruchirguitarandCursor 3deac491ca M2.1: merge current main and keep path-deletion evidence (#3380)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-11-09 09:03:17 +05:30
BFlat 2fe33b1fc6 Merge pull request #5355 from dotCooCoo/feat/help-bar-visibility
UI: show or hide the Help Bar independently
2026-11-09 08:02:10 +08:00
BFlat ab0cadc924 Merge pull request #6113 from ruchirguitar/fix/5949-hover-numeric-wheel
Numeric fields: step on wheel hover without taking focus
2026-11-09 07:57:18 +08:00
dotCooCoo e2beb714b0 Merge main into feat/help-bar-visibility 2026-11-08 14:56:29 -08:00
ruchirguitarandCursor 46cc28b299 M2.1: merge current main and keep path-deletion evidence (#3380)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-11-09 04:09:05 +05:30
ruchirguitar 7185ef4844 Merge remote-tracking branch 'origin/main' into SidePanelCollapseArrow
Co-authored-by: Cursor <cursoragent@cursor.com>

# Conflicts:
#	docs/gaps.md
#	docs/roadmap.md
#	docs/target-app-parity.md
#	docs/ui-parity.md
2026-11-09 03:31:09 +05:30
dotCooCoo 623f7449bc Type: the Escape return target is also cleared when another document or window becomes active
Switching documents, or windows of a document, deactivates the Type tool, which clears the tool its double-click came from, so Escape after a later edit goes to the Selection tool. The field's comment and the two checklist rows now say so.
2026-11-08 13:45:14 -08:00
ruchirguitar 84c2e61a82 Merge origin/main into fix/5949-hover-numeric-wheel
Keep hover wheel stepping and the canvas zoom-glide regression together with current main.
2026-11-09 03:09:19 +05:30
dotCooCoo 48fdfeffd8 Type: docs say Escape returns to the tool whose double-click chose the Type tool
Only a double-click on type from another tool records the tool Escape and
Cmd+Enter return to, and the Type tool keeps it until another tool is
chosen. Choosing the Type tool from the toolbar records none, so Escape
goes to the Selection tool. The type and UI checklists and the doc
comments on prev_tool, end_editing and claims_key now say so.

docs/type-parity.md held four copies of the point, area and path type
row, three of them with older Escape wording. They are one row again,
with the Type Orientation sentence that only one copy had.
2026-11-08 13:17:38 -08:00
ruchirguitar 2c80836bd5 M2.1: merge main and preserve path-deletion evidence (#3380) 2026-11-09 01:47:48 +05:30
Alex d8d3f43642 Text styles: double-click opens Character Style Options in a scrolling window
Two problems in the Character Styles panel and its options dialog.

Opening the options took the panel menu's item, which is easy to miss; a double-click on a style's
row did nothing beyond applying the style a second time. A double-click on a user character style's
row now opens its Character Style Options (`ui.charStyleOptions`), as the menu item does. A single
click still applies the style, the second click of the double-click does not apply it again (the
Normal style's included), and with Shift, Cmd/Ctrl or Alt held the double-click only follows the
click rules. The built-in Normal style opens no dialog. Double-clicking a paragraph style's row similarly opens
its options, which are the rename dialog the Paragraph Styles panel menu opens (`ui.paramDialog`
running `paraStyle.rename`): paragraph styles have no full options window yet.

The dialog then grew with its content: the General section lists every attribute of the style, so
the window covered the screen and its buttons could sit below it. The content now scrolls both ways
inside a window at most 420 points tall (less on a short screen) and never wider than the points
left beside the section list, with one scroll offset per section. The dialog keeps a fixed width of
720 points, enough for the widest section's controls, in every section. The content's height is the
space the footer leaves, measured from the footer drawn last frame, so a large interface scale's
taller footer is reserved too and OK and Cancel stay visible. The section list stays outside the
scroll area, so scrolling a long section never moves the navigation; the section is read after the
list handles a click, so a newly picked section gets its own scroll offset in the same frame.

Tests:
`panels::text_styles::tests::double_clicking_a_character_style_row_opens_its_options` selects text,
double-clicks a character style's row and checks the dialog opens with the style's name, one apply
ran from the first click and the second click applied nothing; a paragraph style's row opens none.
`double_clicking_the_normal_style_opens_no_options` checks the Normal style opens none and is
applied once.
`dialogs::char_style_options::tests::the_sections_scroll_in_a_window_shorter_than_the_general_list`
draws the dialog on a 900 by 560 point screen and checks OK and Cancel stay on it, the dialog keeps
its 720-point width in two sections, and the General list is taller than its scroll area.
`every_section_and_the_buttons_fit_the_smallest_window` checks the app's minimum 800 by 500 point
window in all five sections: every section label, OK and Cancel are on the screen.
`a_scrolled_section_keeps_its_offset_after_switching_away_and_back` scrolls General, clicks Basic
Character Formats and then General again, and checks General''s content returns to the same place:
the section is read after the list handles the click, so no other section stores its offset.
`every_section_and_the_buttons_fit_the_smallest_window_at_twice_the_scale` checks the same in the
400 by 250 points the minimum window holds at 2x UI scale, before and after a wheel scrolls the
content.
Docs: type-parity (a panel row and the revision history), ui-parity (a panel row and the revision
history), target-app-parity (two evidence bullets and the revision history) and roadmap (the
revision history), with the status lines updated.
2026-11-09 02:03:07 +07:00
Sven Lafebre 91a0ba4231 Pen: Copy and Cut take the anchors a Cmd-lent Direct Selection picked (#6123)
With the Pen or Curvature tool, Copy and Cut ignore the anchor selection,
so that the last anchor the Pen leaves selected doesn't make Copy take just
that anchor (#2122). Anchors picked with the Direct Selection that Cmd/Ctrl
lends those tools were ignored too, and the whole path was copied.

The session now remembers the selection the lent tool leaves when it gives
the tool back. While that is still the selection, Copy and Cut take the
picked anchors and segments, as with Direct Selection chosen.
2026-11-09 02:03:05 +07:00
Sven Lafebre e15965199f Fix #5188: the docs say how other corners are added after the first pick 2026-11-09 02:03:04 +07:00
dotCooCoo a9cd473a75 Merge main into feat/help-bar-visibility 2026-11-08 09:57:25 -08:00
dotCooCoo 41d3ac15e0 Type: docs say Escape returns to the tool active before type editing began 2026-11-09 00:34:51 +07:00
dotCooCoo bf4a9d00ab Type: docs say Escape returns to the tool that double-clicked into the type
Escape and Cmd+Enter (Ctrl+Enter on Windows and Linux) end text editing
and switch back to the tool that double-clicked into the type, or to the
Selection tool when there was none (`TypeTool::end_editing`). The
evidence lines in docs/type-parity.md, docs/ui-parity.md and
docs/target-app-parity.md, and the doc comments on `prev_tool` and
`claims_key`, said they always switch to the Selection tool.
2026-11-09 00:34:50 +07:00
dotCooCoo 657a99b629 Actions: Load Actions… reads action sets saved as .aia files
Squashed from #6149 onto main.
2026-11-09 00:28:25 +07:00
dotCooCoo 434c032f9e Symbols: Direct Selection sets the solid fill and stroke of one object in a dynamic instance
Squashed from #5962 onto main.
2026-11-09 00:26:11 +07:00
dotCooCoo 671e833913 Merge main into feat/help-bar-visibility 2026-11-08 09:10:51 -08:00
bflatastic 5de9fc2954 Docs: drop the header lines and rows the older PRs repeated 2026-11-08 23:51:57 +07:00
bflatastic 08f03e606d Docs: one status line in the roadmap and UI parity docs, with #5313's entry 2026-11-08 23:51:51 +07:00
dotCooCoo 3405620151 Docs: update marquee feature status and revision history 2026-11-08 23:51:23 +07:00
dotCooCoo 6d87514055 Selection: show marquee rules and offer enclosed and directional modes 2026-11-08 23:51:12 +07:00
ruchirguitar 3984874728 M2.1: avoid discarded path copies during deletion (#3380) 2026-11-08 19:35:48 +05:30
ruchirguitar 655a16fa67 #5925: add collapse arrows to floating panels and rail flyouts 2026-11-08 17:02:29 +05:30
ruchirguitar 2dc6991cf3 M2.1: retain gradient placement when deletion splits paths (#3380) 2026-11-08 03:51:00 +05:30
Ahmed Gomaa cdd00ff3bc G13: expose glyph and alignment toggles in Snapping (#6164) 2026-11-07 22:51:09 +02:00
ruchirguitar c232919dd3 M2.1: clarify deletion evidence and function documentation (#3380) 2026-11-08 02:02:31 +05:30
ruchirguitar 349bdfa867 5949: step numeric fields on wheel hover 2026-11-07 19:57:54 +05:30
ruchirguitar e6a899857f M2.1: split disconnected path pieces after deletion (#3380) 2026-11-07 15:20:14 +05:30
dotCooCoo 0bc150c51e UI: save the Help Bar setting to preference files that lack it
A preferences file from before the Help Bar setting gets `help_bar` from
`status_bar` when it is read. A save that changed only the status bar
left `help_bar` out of the file, so the next start hid the Help Bar with
the status bar. A save now writes `help_bar` whenever the file lacks it,
and keeps a value another window saved.

Docs: the UI evidence list, the UI checklist and the M14 row record
Window > Help Bar.
2026-11-07 00:18:45 -08:00
FractalEncrypt 10724077bc docs: the shape-tool status lines name no other branch's change
The roadmap's status line and revision history now record the shape tools'
centre-point move and corner rotate (#5477), and the parity status line no
longer names the Transform tab-order fix, which is its own pull request.
2026-11-07 05:15:05 +07:00
FractalEncrypt 1c345d8e6a Shape tools: drawing another shape from the selected one's centre moves it
A press on the centre point of the selected shape now moves the selection, as
asked (#5477), so the Constrain Angle test's repeated draws from the same point
moved the polygon drawn before them. It deselects first: nothing selected, the
press draws.
2026-11-07 05:15:03 +07:00