Commit Graph
12834 Commits
Author SHA1 Message Date
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
dotCooCoo bf4ec4253d Merge main into fix/save-screens-unknown-options 2026-11-08 18:13:32 -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
Don Omondi 8c8d88e286 Merge remote-tracking branch 'upstream/main' into feat/ai-import-stacked-fills
# Conflicts:
#	crates/eps/src/import/ai/tests.rs
#	docs/file-format-parity.md
2026-11-08 21:08:47 -05: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
dotCooCoo d56a598c88 Merge main into fix/issue-3526-docs 2026-11-08 18:05:41 -08:00
ruchirguitarandCursor 8782c14e59 M2.1: expect a cut Pen segment to leave independent path pieces (#3380)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-11-09 07:35:23 +05:30
dotCooCoo 0fc62c2cf3 Merge main into feat/jxl-import 2026-11-08 18:04:51 -08:00
dotCooCoo e064698086 Merge main into feat/jxl-import 2026-11-08 18:04:45 -08:00
dotCooCoo ec3f0a2288 Merge main into feat/plugin-effect-paint 2026-11-08 17:59:42 -08:00
dotCooCoo bd5ea2a1bf Merge main into feat/plugin-effect-paint 2026-11-08 17:59:33 -08:00
BFlat f6b29a6e72 Merge pull request #5213 from dotCooCoo/fix/shape-escape-restores-options
Drawing tools: Escape on a polygon, star or rounded rectangle drag puts back the option it changed
2026-11-09 09:52:16 +08:00
dotCooCoo e82ed4642e Merge main into feat/plugin-filter-inputs 2026-11-08 17:50:28 -08:00
dotCooCoo b4003e6e07 Merge main into fix/plugin-stale-grant 2026-11-08 17:49:21 -08:00
dotCooCoo 0f002e7625 Plug-ins: tests cover each route that cannot approve an install
Add tests that an action step running plugin.install with grant is
refused, that ui.key, ui.click and ui.pointer sent through the control
path at the open approval dialog approve nothing, with OK focused too,
that MCP answer_dialog reports the app's refusal, that ui.installPlugin
given grant or allowHeavy approves nothing, and that a module recorded
in grants.json installs from a session with that store and no flag
while other bytes under its id are refused.

The batch assertion now checks the refusal's message. The docs and
comments state that Enter confirms the dialog only when OK has the
keyboard focus.
2026-11-08 17:47:02 -08:00
BFlat 196a6e815c Merge pull request #6007 from mockydevs/fix/ai-import-brushes
.ai import: Art brushes in the older form of their objects come into the Brushes panel
2026-11-09 09:47:00 +08:00
dotCooCoo 969d1cb725 Merge main into fix/plugin-stale-grant 2026-11-08 17:45:48 -08:00
dotCooCoo e1798597f3 Fix as_png calls after merging main 2026-11-08 17:43:33 -08:00
dotCooCoo c603030252 Merge main into feat/visibility-variables-drive-locked-art 2026-11-08 17:31:05 -08:00
dotCooCoo 3ccc919936 Merge main into feat/visibility-variables-drive-locked-art 2026-11-08 17:30:32 -08:00
BFlat 9ddcd40098 Merge pull request #6220 from dotCooCoo/fix/ai-writer-object-limit-2
.ai save: the editing copy stops at the reader's object limit
2026-11-09 09:28:24 +08:00
BFlat bd92fd78cd Merge pull request #6189 from dotCooCoo/feat/js-builtins-core
JavaScript: vectorcraft-js adds ES5 Object, Array, Math, JSON and Function.prototype.bind
2026-11-09 09:28:15 +08:00
dotCooCoo d6a91b6142 Merge main into feat/plugin-effect-paint 2026-11-08 17:26:35 -08:00
dotCooCoo e20610a2d8 Merge main into fix/plugin-stale-grant 2026-11-08 17:25:30 -08:00
dotCooCoo bd71f24da8 Merge main into feat/recolor-reports-skipped-art 2026-11-08 17:25:13 -08:00
dotCooCoo b79e89de1d Plug-ins: a grant that can't be removed keeps the module it covers
plugin.install of a module that lists no permissions ignored the result
of removing the id's grant. When grants.json could not be updated, the
formerly approved bytes could still be installed without approval. The
store now gets the old module back, so the grant and the module it
covers stay together. The new module stays when the old one can't be
read back and when grants.json can't be read, since such a file approves
nothing. Deleting the last grant now reports a failure.

plugin.remove had the same fault. It now moves the settings and cache
aside and removes the grant before anything is deleted. When the grant
can't be removed, the folder is moved back, the command returns an
error and the plug-in stays installed.
2026-11-08 17:25:09 -08:00
BFlat b652599548 Merge pull request #6264 from dotCooCoo/feat/plugin-importers
Plug-ins: importer plug-ins open file types VectorCraft does not read
2026-11-09 09:24:07 +08:00
BFlat 59e485614c Merge pull request #6267 from slafebre/fix/6252-new-art-follows-selection
Fix #6252: selecting an object gives new art its fill, stroke and weight
2026-11-09 09:23:02 +08:00
BFlat 636ffe78ce Merge pull request #5070 from dotCooCoo/feat/kinsoku-shori-type
Paragraph: Kinsoku Shori Type chooses Push In First, Push Out First or Push Out Only
2026-11-09 09:22:52 +08:00
dotCooCoo b9f735dd9a i18n: Dutch, Danish and Indonesian rows for Copies per Sheet
main now lists nl, da and id as complete-menu catalogs, so the Print
dialog's Copies per Sheet label needs a row in each. Gutter: already
has one.
2026-11-08 17:22:46 -08:00
dotCooCoo b1236c469b Print: Copies per Sheet prints as many copies of each artboard as fit the sheet
File › Print printed each artboard on a sheet of its own. A 2 × 3.5 in
card on Letter printed once in the middle of the page, and Print had no
option to fill the sheet with copies.

The Print dialog's General section has Copies per Sheet (off by
default) and a Gutter. With it on, a sheet holds as many copies of the
artboard as fit the imageable area, each with its bleed and marks,
across then down, gutter pt apart. The card prints 4 × 3 on Letter,
and 3 × 3 with an 18 pt gutter. The copies are not turned, and the
placement places the whole grid as it places one copy. An artboard
that does not fit prints one copy per sheet with a warning, and more
than 1,000 copies on a sheet is an error. Tiling leaves the option
out. The PDF and PostScript writers draw the art and the marks once
per copy, the PDF TrimBox holds every copy, the preview draws each
copy, and print.preview lists them as `copies`. With the option off,
the layout lists no copies and the writers draw the page as before.

Docs: docs/mcp.md (Print, Printing), docs/target-app-parity.md.
2026-11-08 17:22:46 -08:00
dotCooCoo 2d7bfa8b60 Merge main into fix/plugin-grant-app-approval 2026-11-08 17:20:07 -08:00