Commit Graph
7468 Commits
Author SHA1 Message Date
BFlat 24be60b506 Merge pull request #4961 from el-j/perf/canvas-decoupled-worker-pipeline
perf(canvas): zero-copy texture upload and progressive worker frame acceptance (#4615)
2026-11-02 14:56:23 +07:00
BFlat 78fe4014e3 Merge pull request #4898 from WadahBadawi/fix/path-average
fix(path): recurse into groups and compound paths for path.average
2026-11-02 14:56:04 +07:00
BFlat 95e0783697 Merge pull request #4001 from Silvertree2010/fix/h1948-export-for-screens-date-parser-i
Validate hyphen placement and days in month in parse_date
2026-11-02 14:55:45 +07:00
BFlat 0b78753bb9 Merge pull request #5032 from dotCooCoo/feat/export-preset-files-r
Asset Export: Import Preset and Export Preset read and write preset files
2026-11-02 14:55:23 +07:00
BFlat 31b9990c49 Merge pull request #4277 from dotCooCoo/fix/bitmap-paste-off-ui-thread
Clipboard: a bitmap pasted from another app is decoded off the UI thread
2026-11-02 14:55:08 +07:00
BFlat 36c35b3961 Merge pull request #5031 from dotCooCoo/feat/pen-tilt-bearing-rotation-r
Brushes: Calligraphic and Scatter values follow pen tilt, bearing and rotation
2026-11-02 14:54:50 +07:00
BFlat 7afb83e991 Merge pull request #5038 from dotCooCoo/feat/new-toolbar-r
Toolbars: New Toolbar makes a named toolbar filled from the All Tools drawer
2026-11-02 14:54:33 +07:00
BFlat b511c25530 Merge pull request #5216 from dotCooCoo/feat/arrange-a
Window: Arrange > Tile shows every open document side by side
2026-11-02 14:54:04 +07:00
BFlat 0f1f08989e Merge pull request #5206 from dotCooCoo/feat/tate-chu-yoko-settings
Type: Tate-chu-yoko Settings move a block up, down, left or right
2026-11-02 14:53:50 +07:00
BFlat b119278490 Merge pull request #5209 from dotCooCoo/fix/ai-no-layer-files-read
.ai import: legacy files without layers open through the format reader
2026-11-02 14:53:32 +07:00
BFlat 5310276a86 Merge pull request #5210 from dotCooCoo/fix/drag-outline-overlay-limit
Selection: a drag with Real-time Drawing off shows the bounds of a selection too big to outline
2026-11-02 14:53:19 +07:00
BFlat 00f15967c2 Merge pull request #5208 from dotCooCoo/fix/bounding-box-moves-with-rtd-off
Selection: with Real-time Drawing off, the bounding box moves with a move drag
2026-11-02 14:53:07 +07:00
BFlat c4516d8821 Merge pull request #5207 from dotCooCoo/fix/tabs-above-min-width
Tabs: Above Text keeps the ruler at the zoom when the panel comes out wider
2026-11-02 14:52:50 +07:00
BFlat a3907f835f Merge pull request #5215 from dotCooCoo/fix/issue-5161
Fix #5161: Shape Builder merges across a line under a merged shape's edge
2026-11-02 14:52:34 +07:00
BFlat d0afe59fdf Merge pull request #5187 from dotCooCoo/fix/ai-os22-g2
.ai import: placed EPS files in the version 7 form are read
2026-11-02 14:52:23 +07:00
BFlat cfc386601c Merge pull request #5198 from dotCooCoo/fix/ai-open-group-at-end
.ai import: a group still open at the end of the art is an error
2026-11-02 14:52:06 +07:00
BFlat a816e28ce8 Merge pull request #5192 from dotCooCoo/feat/save-load-actions
Actions: Save Actions… and Load Actions… save a set to a file and load it back
2026-11-02 14:51:50 +07:00
BFlat f2faa0c484 Merge pull request #5194 from dotCooCoo/fix/shortcuts-commands-that-need-params
Keyboard Shortcuts: commands a key cannot run without a value are not listed
2026-11-02 14:51:33 +07:00
BFlat 0bffec57ce Merge pull request #5199 from dotCooCoo/fix/fonts-in-symbol-definitions
Fonts: Find Font and Replace Missing Fonts reach the type in symbols
2026-11-02 14:51:18 +07:00
BFlat 03e1af5a37 Merge pull request #5185 from dotCooCoo/fix/rtl-manual-kerning-moves-neighbor
Type: manual kerning in right-to-left text spaces the pair it is set on
2026-11-02 14:51:03 +07:00
BFlat a181262663 Merge pull request #5155 from dotCooCoo/fix/ai-os12
.ai import: the document's graphic styles open in the panel with their objects linked
2026-11-02 14:50:48 +07:00
BFlat 522280da7f Merge pull request #5176 from dotCooCoo/fix/ai-os19
.ai import: placed files are found by the folder they keep relative to the document
2026-11-02 14:50:30 +07:00
BFlat af9378b539 Merge pull request #5174 from dotCooCoo/fix/ai-os23-1671
.ai import: a line width of 0 draws as a hairline
2026-11-02 14:50:14 +07:00
BFlat 7dc14ebb8f Merge pull request #5148 from dotCooCoo/fix/ai-os10-path
.ai import: Offset Path, Outline Object and Outline Stroke open live
2026-11-02 14:49:47 +07:00
BFlat 9dbbc0e327 Merge pull request #5147 from dotCooCoo/feat/save-variable-library
Variables: Save Variable Library… writes the variables and data sets as an XML library
2026-11-02 14:49:06 +07:00
BFlat 99620be2eb Merge pull request #5172 from dotCooCoo/feat/action-options-rename
Actions: the panel menu's Action Options… renames the selected action
2026-11-02 14:48:37 +07:00
BFlat a74811c161 Merge pull request #5169 from dotCooCoo/fix/actions-current-set-after-restart
Actions: the current set is kept after a restart
2026-11-02 14:48:19 +07:00
BFlat 2fab3de7b3 Merge pull request #5162 from dotCooCoo/fix/issue-4995
Fix #4995: Above Text moves a Tabs panel that already floats
2026-11-02 14:48:03 +07:00
BFlat 0a5264d56a Merge pull request #5167 from dotCooCoo/fix/issue-785
Fix #785: commands refuse an id that isn't an object id instead of using the selection
2026-11-02 14:47:53 +07:00
el-j 601ab957e6 perf(canvas): zero-copy texture upload and progressive worker frame acceptance (#4615)
Squashed from #4961 onto main.
2026-11-02 14:36:07 +07:00
Wadah Badawi 66e22f4ba1 M2.1: recurse into groups and compound paths for path.average 2026-11-02 14:36:07 +07:00
NetterSilverandClaude Sonnet 5.5 88d8a7839e fix: validate parse_date calendar dates with chrono
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-02 14:36:06 +07:00
NetterSilverandClaude Haiku 5.5 83ed70acce Validate hyphen placement and days in month in parse_date
Found while testing crates/engine/src/cmd/fileio/naming.rs:103

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-02 14:36:06 +07:00
dotCooCoo 2fafe25c27 Asset Export: Import Preset and Export Preset read and write preset files
Squashed from #5032 onto main.
2026-11-02 14:33:29 +07:00
bflatastic 57a76f4f8d Paste: translate the two paste messages into Catalan 2026-11-02 14:33:02 +07:00
dotCooCoo e8e09af782 Brushes: Calligraphic and Scatter values follow pen tilt, bearing and rotation
Squashed from #5031 onto main.
2026-11-02 14:33:02 +07:00
dotCooCoo b1c98821d6 Clipboard: a bitmap pasted from another app is decoded off the UI thread
Squashed from #4277 onto main.
2026-11-02 14:33:02 +07:00
dotCooCoo 6d369d013c Toolbars: New Toolbar makes a named toolbar filled from the All Tools drawer
Squashed from #5038 onto main.
2026-11-02 14:33:01 +07:00
dotCooCoo adc3e75be4 Window: Arrange > Tile shows every open document side by side
Window > Arrange > Tile (window.arrange.tile) splits the document area
into one pane per open document, edge to edge, in a grid with as many
columns as the square root of the number of documents, rounded up. Each
document is fitted to its pane, and fitted again when its pane changes
size (a document opened or closed, the window resized) unless it was
zoomed or scrolled since. The current document's pane is the canvas;
the other panes draw their documents with their artboards, guides,
selected objects and Pixel Preview, and a press in one makes its
document the current one, as a click on its tab does. Window > Arrange >
Consolidate All Windows (window.arrange.consolidateAllWindows) goes back
to one document under its tab. It works the same on the desktop and the
web, and the arrangement is not saved.

Tile is enabled with two or more open documents, and Consolidate All
Windows while documents are tiled. ui.inspect reports tiled and the
panes.
2026-11-02 14:33:00 +07:00
bflatastic d5edca7452 Type: the East Asian character settings get their own method 2026-11-02 14:32:59 +07:00
dotCooCoo e13cf73ae0 Type: Tate-chu-yoko Settings move a block up, down, left or right
Squashed from #5206 onto main.
2026-11-02 14:32:59 +07:00
dotCooCoo f69f7976b7 .ai import: legacy files without layers open through the format reader
Squashed from #5209 onto main.
2026-11-02 14:32:58 +07:00
dotCooCoo ec0a98a77b Selection: a drag with Real-time Drawing off shows the bounds of a selection too big to outline
With Real-time Drawing and Editing off, a drag drew one outline per selected
object with no limit, so a selection with hundreds of thousands of points
built the overlay mesh that the canvas's 100,000-point limit keeps it from
drawing at rest (#525, #2460). Past the same number of points the drag now
draws the moved selection's bounds, as the canvas does for the selection at
rest.
2026-11-02 14:32:58 +07:00
dotCooCoo c4dfe6bfc2 Selection: with Real-time Drawing off, the bounding box moves with a move drag
With Preferences › Performance › Real-time Drawing and Editing off, a
Selection tool move drag leaves the object in place until release, and
the bounding box was hidden for the whole drag. The box, with its
handles, now follows the pointer during the drag (Session::deferred_move
gives the offset the document has not taken yet). Scale and rotate
drags, and drags with Real-time Drawing on, hide the box as before.

Docs: docs/target-app-parity.md.
2026-11-02 14:32:58 +07:00
dotCooCoo 5685cc256c Tabs: Above Text keeps the ruler at the zoom when the panel comes out wider
Position Panel Above Text sizes the Tabs panel so its ruler spans the
text at the canvas zoom. A floating panel is at least 220 pt wide, so
for narrow text at a low zoom the panel comes out wider than asked, and
the ruler stretched the text's width across the whole panel. Its marks
then no longer sat over the text.

After Above Text, while the same text in the same document is selected
and the panel floats no wider than the narrowest panel, the ruler now
draws the text at its screen scale and runs on past the text's width.
Any other ruler fits the span to its width as before.
2026-11-02 14:32:58 +07:00
dotCooCoo 79c5218f8a Fix #5161: Shape Builder merges across a line under a merged shape's edge
Where a line lies under the outline of a closed path in front of it (such as
a shape an earlier merge made, which takes the place of the art in front of
the lines), the planar map gave that stretch only to the closed path, so the
line had no piece there. A merge or an erase across it left the line whole,
and the next map split the new shape along it into two regions.

- pathops: each planar edge records every input it lies on, and
  BuilderArrangement::lines_under holds the lines' pieces under a closed
  outline in front of them. lines, edges and Live Paint are unchanged.
- tools: BuilderMap adds those pieces to its lines, so a merge or an erase
  removes the stretch between the regions it takes, as it does elsewhere.
  An Alt-click where a line lies under an edge hits the one in front.
2026-11-02 14:32:57 +07:00
bflatastic 8913ba2440 Tests: the placed-files fuzz fixture goes in after the noted path 2026-11-02 14:32:57 +07:00
dotCooCoo 2a41c74690 .ai import: a group still open at the end of the art is an error
A group (`u`), clipping group (`q`) or compound path (`*u`) opened after
the last layer and never closed was accepted, and the art inside it was
dropped without a message. The reader now stops with "it ends inside a
group or compound path", as it already does for data that ends inside a
layer. Pattern and symbol definitions, which are read inside a group of
their own, are not affected.
2026-11-02 14:32:56 +07:00
bflatastic 71d706fdcc .ai import: a placed file's tick operator gets its own method 2026-11-02 14:32:56 +07:00
dotCooCoo 01bc69cc80 .ai import: placed EPS files in the version 7 form are read
Squashed from #5187 onto main.
2026-11-02 14:32:56 +07:00