Commit Graph
9968 Commits
Author SHA1 Message Date
dotCooCoo 5635abd00a Merge main into fix/plugin-stale-grant 2026-11-08 19:52:08 -08:00
BFlat 36f83042e6 Merge pull request #6272 from dotCooCoo/fix/plugin-remove-revision-under-lock
Plug-ins: removing a plug-in moves the revision while it holds the set
2026-11-09 11:47:33 +08:00
BFlat cc369817fd Merge pull request #6273 from dotCooCoo/fix/tool-options-reload-keep-drag
Tools: setting another tool's option leaves a drag's options alone
2026-11-09 11:43:23 +08:00
dotCooCoo 3b1f901202 Merge main into fix/plugin-stale-grant 2026-11-08 19:38:35 -08:00
dotCooCoo 623d8fdd83 Plug-ins: the settings file test passes remove_plugin_storage its callback 2026-11-08 19:37:01 -08:00
BFlat c040fa7a55 Merge pull request #2279 from dotCooCoo/feat/color-wheel-panel
Part of #978: Window › Color Wheel picks colors on a hue ring and a saturation and brightness square
2026-11-09 11:30:27 +08:00
dotCooCoo 9f9cf9e7ea Merge main into fix/plugin-stale-grant 2026-11-08 19:29:45 -08:00
dotCooCoo 93f98257e4 Plug-ins: test a grants file over its size limit and the unread case
The unread grants test replaces the plain module it installed earlier,
as plugin.install now asks. A grants file over 1 MiB approves nothing,
so the new module stays in the store.
2026-11-08 19:27:47 -08:00
BFlat fcdc591e39 Merge pull request #6270 from dotCooCoo/fix/docs-plugin-grant-without-permissions
Docs: a plug-in with no permissions list needs no grant
2026-11-09 11:26:18 +08:00
BFlat dc654af50a Merge pull request #6274 from dotCooCoo/fix/push-in-keeps-inline-art-gap
Type: a pushed-in line leaves the gap after inline art open
2026-11-09 11:22:12 +08:00
BFlat 8eb3d4166a Merge pull request #2552 from dotCooCoo/feat/print-copies-per-sheet
Print: Copies per Sheet prints as many copies of each artboard as fit the sheet
2026-11-09 11:17:48 +08:00
BFlat 0089e494f5 Merge pull request #6269 from dotCooCoo/fix/plugin-storage-kept-settings
Plug-ins: settings and the cache total stay in memory between storage calls
2026-11-09 11:13:41 +08:00
Dylan M. Taylor 9879909976 Merge pull request #6271 from dotCooCoo/fix/updates-install-at-exit
Updates: the updater reports installing, ready, installed and failed, and installs at exit
2026-11-08 22:09:52 -05:00
BFlat 4d8d2fb8ef Merge pull request #5036 from dotCooCoo/fix/linux-title-bar-r
Linux: VECTORCRAFT_TITLEBAR takes precedence over System Title Bar for the run it is set in
2026-11-09 11:08:44 +08:00
dotCooCoo e1281c0266 Merge main into fix/plugin-stale-grant 2026-11-08 18:59:23 -08:00
dotCooCoo 63a483492b Plug-ins: a grants file that can't be read keeps the grant it may hold
A grants file that can't be opened or read may name the old module once
it reads again. plugin.remove and an install of a module listing no
permissions now fail on it and keep the module. A file over 1 MiB or one
that doesn't hold a list still approves nothing and doesn't stop them.
2026-11-08 18:59:22 -08:00
dotCooCoo d8dd718d90 Merge main into fix/plugin-remove-revision-under-lock
# Conflicts:
#	docs/mcp.md
2026-11-08 18:57:28 -08:00
BFlat 3b92bef27c Merge pull request #2606 from dotCooCoo/feat/jxl-import
File formats: JPEG XL (.jxl) images open and place
2026-11-09 10:50:56 +08:00
BFlat c5c1913f48 Merge pull request #6265 from dotCooCoo/feat/plugin-effect-paint
Plug-ins: live effects at API level 2 can paint the pieces they return
2026-11-09 10:50:46 +08:00
dotCooCoo 36622feda4 Tools: setting another tool's option leaves a drag's options alone
tool.setOption on another tool reloaded every saved option of the active tool. During a shape drag that reload rewrote the options Escape restores, so Escape kept a side count an arrow key had changed. The active tool now reloads only the stores it shares with the tool that was set.
2026-11-08 18:48:41 -08:00
dotCooCoo 6e8e1e213e Type: a pushed-in line leaves the gap after inline art open
Kinsoku push-in room does not count a gap after inline art or inside a list marker, but the squeeze also closed those gaps. The squeeze now applies only to the gaps the room counts.
2026-11-08 18:47:54 -08:00
BFlat 8ace539ac8 Merge pull request #5042 from dotCooCoo/fix/issue-3526-docs
Fix #3526: the bounding box follows a resize drag
2026-11-09 10:46:34 +08:00
dotCooCoo 5f3d118e60 MCP docs: remove the duplicate open_file row
The second row left out HEIC and HEIF, which the engine reads.
2026-11-08 18:45:32 -08:00
dotCooCoo 8a774d344a Plug-ins: removing a plug-in moves the revision while it holds the set
registry::remove released the plug-in set before it moved the revision, as install does not. A removal that finished just before another thread took the set could still move the revision while that thread held it, which made an_install_changes_the_revision_only_while_it_holds_the_set fail intermittently.
2026-11-08 18:45:31 -08:00
dotCooCoo 0c6e971371 i18n: Color Wheel rows in Georgian, Turkish, Hindi and Bosnian
The four complete catalogs get the panel's five rows.
2026-11-08 18:43:50 -08:00
dotCooCoo 66d7d9315a Color Wheel: the remembered hue stays with its appearance item, characters and gradient
The wheel kept the hue of its last pick while the selected objects, the
proxy, the slot and the color were unchanged. Switching to another fill
row in the Appearance panel, another range of characters in the Type
tool, or a new gradient with the same stop color kept that hue too, so a
pick there could paint the earlier hue. The wheel now also checks the
active appearance item, the selected characters and the gradient.
2026-11-08 18:43:49 -08:00
dotCooCoo ae8f0c3a14 Color Wheel: a screen reader's huge hue value wraps like any other hue
A set value on the hue ring above the f32 range became infinite before it
was wrapped into 0 to 360 degrees, so the ring dropped it. The value is
now wrapped first. Catalan, now a complete catalog, gets the panel's rows.
2026-11-08 18:43:49 -08:00
dotCooCoo acde2ab30e Color Wheel: the remembered hue resets when the color settings change the color's display
The wheel kept the HSB picked last while the objects and the color were unchanged, even after a
change of the working RGB space or the document's profile made the same color display differently.
It now also stores the display sRGB of the color it picked, and shows the color's own HSB when that
no longer matches.
2026-11-08 18:43:49 -08:00
dotCooCoo 0a8446514b Color Wheel: a step past the edge of the square leaves the color as it is
An arrow key or a screen reader's step outward at the edge of the
square returned the clamped point, which equals the current one, and the
wheel picked it again. For a CMYK fill the pick separated the color
again, so one step at 100% saturation turned C100 into C71 M16 and added
an undo step. color_field now returns no point when the clamped point is
unchanged; with no marker a key or an action still sets a color.
2026-11-08 18:43:49 -08:00
dotCooCoo 22a439edb7 Color Wheel: screen readers' actions move the square's saturation
The saturation and brightness square, and the Color Picker's color field
it shares `widgets::color_field` with, gave screen readers its name and
both values but took none of their actions, so an increment, decrement
or set-value on it left the color as it was.

The field is now a slider over its first component (saturation on the
Color Wheel), from 0 to that component's units with a step of 1, as the
hue ring is from 0 to 360. Increment and decrement move it one unit as
→ and ← do, and set-value sets it; the second component stays where it
is. Without a marker the value reads 0 and a set value still applies, as
on the ring.

`screen_readers_read_and_move_the_ring_and_the_square` checks the
square's range, step and actions, an increment, a set value and a
decrement, and `the_color_pickers_field_takes_the_arrow_keys` checks an
increment on the Color Picker's field.
2026-11-08 18:43:49 -08:00
dotCooCoo ab7d97ad28 Color Wheel: with no solid color the arrow keys and screen readers set one
With None, a pattern or a mixed paint the hue ring and the square drew
no marker and also ignored the arrow keys and screen readers' increment,
decrement and set-value actions, so only a pointer could set a color.
They now step from the last solid color the panel shows; the marker and
the values screen readers read still need a solid color.
2026-11-08 18:43:49 -08:00
dotCooCoo 0fb0243a4f Docs: the Color Wheel's progress line says scores and estimates are unchanged 2026-11-08 18:43:49 -08:00
dotCooCoo 9bd585ae47 i18n: Color Wheel panel rows for el, bg, sv, pt-br, nl, da, id and fi
main now treats these catalogs as complete, so the panel's labels and
screen-reader names need a row in each.
2026-11-08 18:43:49 -08:00
dotCooCoo 31769bd8ad Part of #978: Window › Color Wheel picks colors on a hue ring and a saturation and brightness square
Window › Color Wheel opens a new panel: the Fill and Stroke proxy
beside a hue ring around a square with saturation across and
brightness up at the ring's hue. It edits what the Color panel's
sliders edit (the active proxy's color, the selected gradient stop or
freeform point) through the same paint commands, and a drag is one
undo step. Alt paints the other proxy, and Shift steps the ring by
45°. The Color panel does not change.

A pick is display sRGB and goes into the working RGB space through the
color settings. An RGB, CMYK or Lab color keeps its model, and a Gray
color or a tint of a global swatch becomes a process color in the
document's color mode. The wheel keeps the hue of the last pick while
the objects, the proxy and the color are unchanged, so a drag through
a gray and back keeps the hue.

A press gives the ring or the square the keyboard focus. The arrow
keys then step the hue by 1° or the saturation and brightness by 1%.
With Shift a press steps ten times as far, and with Cmd/Ctrl it steps
a tenth as far. Each press makes one undo step, and Escape or a click
elsewhere gives the keys back to the tools. Screen readers
read the ring as a slider from 0 to 360 with increment, decrement and
set-value actions, and the square as its name and both values. The
Color Picker's color field is the same widget, so it takes the same
keys and reports its name and values.

Color::to_hsb and Color::from_hsb now call the new rgb_to_hsb and
hsb_to_rgb, which the panel uses on display sRGB numbers.
2026-11-08 18:43:48 -08:00
dotCooCoo 3734368ec7 Updates: craft-update comes from storytold/craft-libs
The pin stays at the head of storytold/craft-libs#696. The commit is reachable from storytold, so the dependency no longer names the fork.
2026-11-08 18:33:48 -08:00
dotCooCoo 124cbb55fa Docs: the permissions line says a grant applies to a plug-in that lists permissions 2026-11-08 18:33:23 -08:00
dotCooCoo 6b2559b63e Docs: a delete of the last setting removes the settings file 2026-11-08 18:33:23 -08:00
dotCooCoo 81149bb945 Linux: VECTORCRAFT_TITLEBAR takes precedence over System Title Bar for one run
On Linux and the BSDs, VECTORCRAFT_TITLEBAR=app now uses the app bar as the title bar with System Title Bar on. Before, System Title Bar kept the desktop's frame while the Preferences note said the variable chooses the title bar.

While the variable is set, Preferences dims System Title Bar, and the note that System Title Bar takes precedence over VectorCraft Title Bar on Every Desktop does not show. macOS and Windows do not read the variable.
2026-11-08 18:31:31 -08:00
BFlat bf0ceb661f Merge pull request #2780 from dotCooCoo/feat/visibility-variables-drive-locked-art
Variables: a visibility variable shows and hides locked art
2026-11-09 10:25:00 +08:00
dotCooCoo 000daef5a6 Print: the page boxes of a Copies per Sheet page hold only the copies on the paper
When the placement moved some copies off the paper, each of those copies counted as the whole page, so the TrimBox and BleedBox became the paper. They now hold the copies that print, and the whole page only when no copy is on it.
2026-11-08 18:22:13 -08:00
dotCooCoo 9f2fb7a915 Print: test that print presets keep Copies per Sheet and older presets leave it off 2026-11-08 18:22:12 -08:00
dotCooCoo 62fd5964da i18n: drop the Gutter: rows main now carries in ru and pt-br 2026-11-08 18:22:11 -08:00
dotCooCoo 359cd3a4b8 Print: set the symbol's dynamic flag in the copies test after merging main 2026-11-08 18:22:10 -08:00
dotCooCoo 134520402b PDF/print: import Vec2 in the export writer after merging main 2026-11-08 18:22:08 -08:00
dotCooCoo 967d77919f Print: every copy on a sheet draws the same symbol instances
Each copy on a sheet draws within an equal share of the symbol objects the
export has left (MAX_SYMBOL_NODES), so a document near the limit leaves out
the same instances in every copy instead of dropping them from the later
copies. The limit stays export-wide; one copy per page draws as before.
2026-11-08 18:22:08 -08:00
BFlat c09c597e75 Merge pull request #4536 from dotCooCoo/feat/recolor-reports-skipped-art
Recolor: report the locked and hidden art a recolor of everything left out
2026-11-09 10:12:57 +08:00
dotCooCoo ac076655db Updates: the updater reports installing, ready, installed and failed, and installs at exit
craft-update moves from c5a1cbfb to the head of storytold/craft-libs#696.
The check result window now shows for every status but idle, so the first
start after an update reports that it installed or why it failed. Restart
to Update on a ready update asks the app to close.

The install helper now starts when the app exits. on_exit calls
Updater::start_pending_update through VectorcraftApp, because the macOS
exit in end_before_teardown ends the process without dropping the app.
2026-11-08 18:12:22 -08:00
BFlat 04aedc87e5 Merge pull request #6268 from dotCooCoo/fix/freeform-mixes-in-point-model
Gradients: freeform points that share a color model mix in that model
2026-11-09 10:08:22 +08:00
dotCooCoo 9a2cb3b257 Docs: a plug-in with no permissions list needs no grant
The Plug-in grants cover one module line said every module with other bytes needs a new approval. A module whose permissions list is missing or empty needs no grant, and without the list it gets its kind's implied permissions.
2026-11-08 18:06:46 -08:00
dotCooCoo 3de6da24be Docs: a delete of a key with no value writes no settings file 2026-11-08 18:06:41 -08:00