Commit Graph
8225 Commits
Author SHA1 Message Date
BFlat bb0d913d50 Merge pull request #5614 from FractalEncrypt/fix/new-doc-units-per-template
New Document: units belong to the chosen preset, not the whole tab
2026-11-04 21:56:32 +07:00
BFlat ff9c3f585f Merge pull request #5617 from dotCooCoo/fix/angle-rail-set-value
Accessibility: screen readers can set a dialog slider's number
2026-11-04 21:56:14 +07:00
BFlat 6b59723677 Merge pull request #5616 from dotCooCoo/fix/kerning-manual-parentheses
Character: Kerning reads (10+5) with a manual value too
2026-11-04 21:55:58 +07:00
BFlat 55d3588e5c Merge pull request #5615 from dotCooCoo/fix/opening-test-handshake
Tests: the opening queue tests wait on the worker's signal instead of the clock
2026-11-04 21:55:42 +07:00
BFlat 89af74f345 Merge pull request #5613 from mockydevs/fix/huge-font-library-5483
Fix #5483: a large font library no longer keeps the window from opening
2026-11-04 21:55:26 +07:00
FractalEncryptandDevin dc9b2f087f Contributors: credit FractalEncrypt by their GitHub profile name
Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-11-04 21:38:01 +07:00
FractalEncryptandDevin 985ef69cb7 New Document: units belong to the chosen preset, not the whole tab
Choosing units in Preset Details restyled every preset card in the Recent
and Saved tabs, so switching between inches and millimetres rewrote all the
user's templates at once. The pane's options apply to the selected preset
(helpx, "Create and save custom document presets"), so only the chosen card
follows the chosen units now; the others keep the units their document or
preset was made in, and clicking one brings its units back. The built-in
category tabs still show the chosen units (#2078).

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-11-04 21:38:01 +07:00
dotCooCoo 69ef2a4e50 Accessibility: a whole-number dialog slider rounds a set value 2026-11-04 21:37:57 +07:00
dotCooCoo c743662add Accessibility: a set-value request without a number leaves a dialog slider as it is 2026-11-04 21:37:57 +07:00
dotCooCoo 07e598c636 Accessibility: a set value in another unit keeps a number past the rail
A dialog slider whose field shows another unit, such as Transform Each's
Move in millimeters, converted the number back to points and held it to
the rail's range, so a set value past the rail that the field holds came
back as the rail's end.
2026-11-04 21:37:57 +07:00
dotCooCoo d1e69239a7 Accessibility: a set value can reach a field's number past the rail
The range screen readers get for a dialog slider takes in a field's number
past the rail's end, and the set-value action now accepts that range too.
2026-11-04 21:37:57 +07:00
dotCooCoo 0417367532 Accessibility: screen readers can set a dialog slider's number
Dialog sliders and the Blob Brush tip preview offered screen readers only
the increment and decrement actions. They now also offer the set-value
action: the last request in a frame sets the number within the slider's
range, rounded to the places its field shows, and a value that is not a
finite number leaves it as it is.
2026-11-04 21:37:57 +07:00
dotCooCoo 84f528f5bb Character: Kerning reads (10+5) with a manual value too
Kerning read one pair of parentheses around its text only while it
showed an automatic value as (12), so typing (10+5) over a manual value
committed nothing. spin_kerning now reads that pair in both states;
the field still shows parentheses only for an automatic value, and
(10+5)*2 is still refused.
2026-11-04 21:37:54 +07:00
dotCooCoo 21be9e6b6e Tests: the opening queue tests wait on the worker's signal instead of the clock
The opening tests waited 400 or 500 ms of wall-clock time for files read off
the UI thread, and up to 30 s in loops that polled until the queue emptied.
Under load a read could take longer, and
a_file_that_opens_and_asks_holds_back_the_next_one_ready failed.

wait_read now blocks on each pending file's own result channel and keeps the
result for poll, and open_ready waits and then polls once. The background save
in long_operation_busy_while_a_file_opens_or_a_background_save_runs waits with
background::wait_all, and its job waits on the release channel without a
timeout. Shipped code is unchanged.
2026-11-04 21:37:51 +07:00
Don Omondi b8269d7bdf Native menu: read the menus again when the fonts change
On macOS the menu bar is native and is read again only when its state
hash changes. Type > Font now lists the loaded fonts until the installed
ones are scanned, so the hash takes the font generation and whether the
scan has ended. The tests that wait for process-wide generations to
hold still wait for the fonts too.
2026-11-04 21:37:48 +07:00
Don Omondi 0143e0f706 Fix #5483: a large font library no longer keeps the window from opening
The menu bar builds Type > Font in every frame, the first included, and
its family list waited for the scan of every installed font. When that
scan took longer than the 20 s first-frame watchdog (thousands of fonts
on a slow disk, or each file checked by antivirus), the app took the
graphics adapter for hung and started again without it, until none was
left and no window ever showed.

The menu now lists the fonts already loaded until the scan ends, then
all of them (FontDb::menu_family_list_now, installed_fonts_ready).
2026-11-04 21:37:48 +07:00
BFlat 0a311b6d20 Merge pull request #5611 from dotCooCoo/fix/tabs-ctrl-drag-no-op
Tabs: setting the stops a paragraph already has records no undo step
2026-11-04 21:13:40 +07:00
BFlat b1cb969ac9 Merge pull request #5610 from dotCooCoo/fix/appearance-add-params-text
Appearance: Add New Fill and Add New Stroke params text match the code
2026-11-04 21:13:22 +07:00
BFlat 328b4283ab Merge pull request #5609 from dotCooCoo/fix/shape-builder-options-refuses-alpha
Shape Builder Tool Options: a highlight color with an alpha part is refused
2026-11-04 21:13:06 +07:00
BFlat 3013a85faa Merge pull request #5608 from dotCooCoo/fix/escape-binding-after-cancel
Shortcuts: an Escape that cancels a Tools or ruler move runs no Escape command
2026-11-04 21:12:49 +07:00
BFlat d36ef3e436 Merge pull request #5607 from dotCooCoo/fix/package-status-english
i18n: the package status stays English until the status bar shows it
2026-11-04 21:12:33 +07:00
BFlat 33d2784c35 Merge pull request #5606 from dotCooCoo/fix/kerning-optical-check-manual
Type: Kerning menu checks neither method for a manual value
2026-11-04 21:12:15 +07:00
dotCooCoo be52e4e8af Tabs: setting the stops a paragraph already has records no undo step
text.tabs.set and text.tabs.clear return without an edit when every
targeted paragraph already holds the stops. A Ctrl-drag that the 0 pt
bound keeps from moving, or a drag released where it started, no longer
adds an undo step that changes nothing. When one targeted paragraph
holds other stops, the command still sets them all.
2026-11-04 20:51:10 +07:00
dotCooCoo 535d423d6c Appearance: Add New Fill and Add New Stroke params text match the code
appearance.addFill copies the active fill row only when the call has no
`ids`, no `id` and no `target: "contents"`; the params text now names
`id` too. appearance.addStroke gives the new stroke at least 1 pt, so a
0.5 pt top stroke gives a 1 pt stroke; the params text now says so.

Tests pin both: `id` alone leaves the active row alone and puts the new
fill on top, and Add New Stroke on a 0.5 pt stroke adds a 1 pt one.
2026-11-04 20:51:07 +07:00
dotCooCoo 88aeee8f8e Shape Builder Tool Options: a highlight color with an alpha part is refused
OK in Shape Builder Tool Options sent highlightColor to tool.setOption,
which keeps only #rrggbb, so #ff000080 was applied as #ff0000 with no
error. OK now gives the same error as the Live Paint tool options for a
hex color with an alpha part (#rrggbbaa or #rgba), the dialog stays open
and the tool's options do not change. The tool.options params text,
docs/mcp.md and the progress doc say so.
2026-11-04 20:51:03 +07:00
dotCooCoo db6a0d786e Shortcuts: an Escape that cancels a Tools or ruler move runs no Escape command
A command bound to plain Escape no longer runs when that Escape
cancels a floating Tools panel move or a ruler-origin drag, nor on the
key repeats while Escape stays held. The next separate Escape press
runs it as before. A test binds Select None to Escape and holds Escape
through both cancels.
2026-11-04 20:51:00 +07:00
dotCooCoo 49616e0a16 i18n: the package status stays English until the status bar shows it
File > Package stored its status line in the interface language, so after
a language switch the status bar kept the old language, and the control
channel and MCP read a translated message. The status line and its notes
are now English, and only the "Package created" dialog is translated when
it is shown. Each catalog gets message rows for the notes, so the status
bar translates them too. On the desktop, where the dialog names every font
left out, a long font list is cut short in the status line so the line
stays short enough to translate.
2026-11-04 20:50:55 +07:00
dotCooCoo 336b1271dd Type: Kerning menu checks neither method for a manual value
A number typed into the Kerning field after Optical keeps the Optical
flag on the type, and the manual value sets the spacing. The Kerning
menu still checked Optical. It now checks neither Auto nor Optical
while a manual value is set.
2026-11-04 20:50:50 +07:00
BFlat bd8cc893da Merge pull request #5605 from dotCooCoo/fix/freeform-spot-warning
PDF export: freeform gradients without points warn about spot stops
2026-11-04 20:49:36 +07:00
BFlat c90c52cd12 Merge pull request #5604 from dotCooCoo/fix/render-threads-test-cap
Tests: the Render Threads restart test stays within the preference's range
2026-11-04 20:49:25 +07:00
dotCooCoo dd41552c30 PDF export: warn about spot stops in freeform gradients without points
A freeform gradient whose field has no points of its own takes its
colors from the stops, so spot-linked stops in it are written in
process colors too. The export now warns in that case, as it does for
the other gradients drawn as images.
2026-11-04 20:36:11 +07:00
dotCooCoo 9a2f1e5eb7 Tests: the Render Threads restart test stays within the preference's range
VECTORCRAFT_RENDER_THREADS can make default_threads() return more than 64,
the largest value prefs.set accepts for renderThreads. The test now caps
the value at 64, so it passes with the variable set to 100.
2026-11-04 20:36:07 +07:00
BFlat 7ba7b1cb27 Merge pull request #5600 from dotCooCoo/feat/actions-playback-options
Actions: Playback Options plays actions accelerated, step by step or with a pause between steps
2026-11-04 20:34:33 +07:00
BFlat cf9872c48c Merge pull request #5072 from mockydevs/feat/batch-trace-4921
Fix #4921: Image Trace > Batch Trace Folder
2026-11-04 20:34:15 +07:00
BFlat ae1b6a98b4 Merge pull request #5085 from mockydevs/feat/copy-paste-guides-3226
Fix #3226: copy and paste ruler guides
2026-11-04 20:33:56 +07:00
BFlat a0594a350a Merge pull request #5603 from dotCooCoo/fix/color-param-refuses-alpha
Commands: a color param with an alpha part is refused instead of losing its alpha
2026-11-04 20:33:38 +07:00
BFlat 301516eab5 Merge pull request #5100 from mockydevs/feat/paragraph-vertical-align-3759
Fix #3759: vertical alignment buttons for area type in the Properties and Control panels
2026-11-04 20:33:18 +07:00
BFlat eb00ca9e72 Merge pull request #5602 from mockydevs/fix/area-options-each-frame
Area Type Options: applying to several frames keeps each frame's own options
2026-11-04 20:32:59 +07:00
dotCooCoo c5d65ed893 i18n: French rows keep the no-break space before punctuation 2026-11-04 20:12:14 +07:00
dotCooCoo 88f1e4e337 Actions: control requests run before a paced playback's next step
A Stop or a document switch sent through the control channel in the
frame a step comes due now takes effect before that step runs. An
action played through the control channel at Pause For starts its first
pause in the next frame, as the panel's Play does.
2026-11-04 20:12:14 +07:00
dotCooCoo e6e08af9ae Actions: test that closing the playing document ends a paced playback
Step by Step with the only document closed, and Pause For with the playing
document closed while another stays open: when the next step is due the
playback ends with its status and no further step runs.
2026-11-04 20:12:14 +07:00
dotCooCoo f06b8040eb Actions: Step by Step runs each step after the window shows the one before
A Step by Step playback now waits after each step until a UI pass that the window shows has drawn it. A logic-only iteration, a pass in a minimized or covered window and a discarded pass do not count, so a hidden window no longer runs the steps unseen and does not ask for frames while it waits.
2026-11-04 20:12:14 +07:00
dotCooCoo 7f79568233 Actions: Pause For starts each pause in the frame after the step 2026-11-04 20:12:14 +07:00
dotCooCoo 22f8be1c5d Actions: ui.action.play's doc comment names what each playback speed returns 2026-11-04 20:12:14 +07:00
dotCooCoo 64c9bfa720 Actions: a paced playback ends when a step comes due in another document
Step by Step and Pause For remember the document that was active after each step. When the next step is due and a different document is active (another one was made active, or that one was closed), the playback ends with a status and the rest of the steps do not run. A step that makes another document active itself does not end the playback.
2026-11-04 20:12:14 +07:00
dotCooCoo f5f3ca4286 Actions: Step by Step draws the first step, and recorded batches play as their steps
Step by Step holds the frame after Play, so the first step's result is drawn before the
second step runs, also when the panel's Play button runs after the canvas drew.

An action step recorded as command.batch (an action played while recording, including one
playing at Step by Step or Pause For, or a panel operation that runs as one batch) now plays
as its own steps in Play and Batch..., instead of failing with "batches cannot nest".
2026-11-04 20:12:13 +07:00
dotCooCoo 9d8be643f4 Actions: Playback Options plays actions accelerated, step by step or with a pause between steps
The Actions panel menu's Playback Options... sets how actions play (ui.action.playbackOptions {speed?, seconds?}). Accelerated, the default, plays every step at once as one undo step, as before. Step by Step plays one step per frame so the canvas draws each step's result, and Pause For waits 1 to 60 seconds between steps; each paced step is its own undo step. Stop Playing/Recording ends a paced playback, and another action does not play while one is paced. The setting is kept with the UI preferences. Batch... plays at full speed.
2026-11-04 20:12:13 +07:00
Don Omondi 33b57fb581 Batch Trace Folder: move to Object › Plug-ins as an add-on
Batch Trace Folder replaces a script, so it is now a Document Tools
add-on command, addon.document.batchTraceFolder, under Object ›
Plug-ins › Document Tools (as Export All Open Documents is), and no
longer in Object › Image Trace. Behaviour, caps and the refusal of a
folder too big to list in full are unchanged; the tests move with it.

The status messages have @msgplural rows in every catalog, as does the
menu label. When some images trace and some don't, the status is one
counted message ("Traced {n} images; not traced: {failed}") so it
translates as a whole.
2026-11-04 20:12:07 +07:00
Don Omondi 7790c37eb3 Batch Trace Folder: refuse a folder too big to list in full
list_dir cuts its listing before sorting, so a cut listing could skip any image. The batch now
stops with an error instead of tracing part of the folder.
2026-11-04 20:12:06 +07:00
Don Omondi 7c04fd8973 Fix #4921: Image Trace > Batch Trace Folder
imageTrace.batchFolder opens each image in a folder, traces it with a
preset (optionally expanded), saves it into a destination folder under
its own name (vectorcraft, svg, pdf, ai or eps; taken names numbered so
nothing is replaced) and closes it again whether it traced or not; the
active document stays active. Object > Image Trace > Batch Trace Folder
asks for both folders. Not on the web.
2026-11-04 20:12:05 +07:00