Commit Graph
4305 Commits
Author SHA1 Message Date
BFlat 398d2e19de Merge pull request #3163 from Matoo125/fix/polygon-sides-from-file
Live shapes: a polygon read from a file has 3 to 1000 sides
2026-10-20 05:45:38 +07:00
BFlat 0567752448 Merge pull request #3162 from danngreen/feat/libraries-panel-scroll-reorder
Libraries panel: scrolling, and drag to reorder items and groups
2026-10-20 05:36:04 +07:00
Martin Vlach 38e73060a7 Live shapes: a polygon read from a file has 3 to 1000 sides
Every command keeps a live polygon's side count in 3..=1000
(shape.polygon, object.setLiveShape, the Polygon tool), but reading a
document took `sides` as any u32. Selecting such a polygon builds its
Live Corners: LiveShape::polygon_outline makes one point per side and
set_corners resizes the corner radii and kinds to the side count. A
document a few bytes long ("sides": 4000000000) makes the app allocate
tens of gigabytes and abort or stall, and the unsaved work in other
documents is lost with it. Transforming such a polygon with cut
corners regenerates the same outline.

`sides` is now clamped to 3..=1000 when it is deserialized, so a
polygon from any document that is read (opened, placed, packaged or
taken from a library) keeps the limit the commands keep, and the code
that uses the count needs no check of its own.

The test reads polygons with 0, 5, 1000 and 4,000,000,000 sides,
checks they come out with 3, 5, 1000 and 1000, and that the clamped
one's outline has 1000 anchors.

Reported-by: BS.ehlas.cz
2026-10-20 05:28:32 +07:00
Dan Green 6bed87b5fb Libraries panel: the list scrolls; items and groups reorder by dragging, items drag into groups
The list fills the panel down to its bottom bar and scrolls, also while a drag nears its top or
bottom edge (in the dock and in a flyout, as the Layers panel does).

Dragging in the list:
- an item (colour, text style or graphic) dropped on another of its kind lands just before or
  after it, by the pointer's half, an accent line showing where, and joins that item's group;
- dropped elsewhere on a group (its header too, even collapsed) it goes into that group, and on
  the ungrouped items out of its group, the section outlined; with every item grouped, a
  "Drop here to take it out of its group" strip shows while one is dragged;
- a group dragged by its header goes before or after another group.
Colours and graphics still drag onto art and the canvas as before.

Engine: library.moveItem takes `before` / `after` (an item of the same kind) to place the item
in its kind's order, which the panel shows; the new library.moveGroup {group, to} moves a group.
Text styles drag as PanelDrag::LibraryItem, groups as PanelDrag::LibraryGroup, and a library
colour's Paint drag names its library item, so the panel tells it from a swatch dragged in.

Tests: reordering and moving in the engine, the commands in the library fuzz test, and panel
tests that drop styles and group headers and check the list scrolls and scrolls while dragging.
Strings translated in the 23 catalogs; docs/mcp.md and the parity row updated.
2026-10-20 05:28:17 +07:00
BFlat 6f3c974984 Merge pull request #3056 from nrq6993-a11y/stream/vc-feat1-g5-art-brush-overlap
G5: Art brush Overlap option in Brush Options
2026-10-20 05:17:39 +07:00
bflatastic cade497b79 fmt (#3056) 2026-10-20 05:06:37 +07:00
nrq6993-a11yandCursor feda1c062f G5: Add Overlap to complete i18n catalogs for art brush options.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-20 05:05:51 +07:00
nrq6993-a11yandCursor b929561fc3 G5: Art brush Overlap option bends art per corner run
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-20 05:05:50 +07:00
BFlat 4be63905b1 Merge pull request #2990 from nrq6993-a11y/stream/vc-feat-g2-sketch-plaster
G2: Effect › Sketch › Plaster raster filter
2026-10-20 05:04:06 +07:00
bflatastic 8a7a1cf199 i18n: Plaster in every catalog that has the Sketch filters (#2990) 2026-10-20 04:52:37 +07:00
MarekSpodBiedry b560b97616 G2: Effect › Sketch › Plaster raster filter
Squashed from #2990 onto Chrome.
2026-10-20 04:52:26 +07:00
BFlat d21f3e0667 Merge pull request #3159 from odgrim/fix/pdf-import-invisible-text
Keep a PDF's invisible text (a scanned page's OCR layer) as type, and save it invisible (#2675)
2026-10-20 04:50:38 +07:00
Brian TorresandClaude Opus 5.5 ac7f0eebf8 PDF import and export: keep invisible text (rendering mode 3) as type (#2675)
Text drawn in rendering mode 3 (3 Tr), which is how a scanned page carries
its recognized OCR text, was left out on open (since #2988, with a warning),
so a scanned PDF opened and saved again lost its searchable text.

Import: an invisible glyph now comes in as type with neither fill nor
stroke. It skips the glyph-outline checks that guard how visible type looks,
and it joins only other invisible text on a line (Look::takes no longer
lets it into a stroke-only run). INVISIBLE_TEXT_NOTE now only reports text
that can't be type (text opened as outlines, Type 3 fonts), and
tests_reader_compat::invisible_text_is_reported_when_left_out expects the
invisible line as unpainted type when text opens as type.

Export and print: characters with no fill and no stroke are written as real
text inside a form marked Mark::Invisible; forms::finish sets that form's
text rendering mode to 3, so it draws nothing but stays selectable and
searchable (PDF/X-1a and PDF/A-2b too). The writer has no invisible mode of
its own, so this reuses the marked-form mechanism used for layers and
overprint.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 04:43:11 +07:00
BFlat 498d17f72e Merge pull request #2985 from nrq6993-a11y/stream/vc-feat-g2-sketch-chrome
G2: Effect › Sketch › Chrome raster filter
2026-10-20 04:32:36 +07:00
bflatastic 326b1c3139 i18n: Chrome in every catalog that has the Sketch filters (#2985) 2026-10-20 04:21:13 +07:00
MarekSpodBiedry 2ff683d5fe G2: Effect › Sketch › Chrome raster filter
Squashed from #2985.
2026-10-20 04:20:50 +07:00
BFlat fd780c51b0 Merge pull request #3156 from MarekSpodBiedry/issue-3126
Draw the isolation bar over the canvas instead of squeezing it (#3126)
2026-10-20 03:51:47 +07:00
BFlat 1b6552a4fa Merge pull request #3157 from MarekSpodBiedry/issue-3135
Add a generic family to the font-family of SVG export and CSS (#3135)
2026-10-20 03:51:31 +07:00
BFlat 8918747a24 Merge pull request #3158 from MarekSpodBiedry/issue-3141
Ask for the .ai options on Save a Copy like Save As (#3141)
2026-10-20 03:51:22 +07:00
MarekSpodBiedry ef99948cd5 Draw the isolation bar over the canvas instead of squeezing it (#3126) 2026-10-20 03:42:11 +07:00
bflatastic 04139ad0b6 fmt (#3157) 2026-10-20 03:42:11 +07:00
MarekSpodBiedry 0f855be77f Add a generic family to the font-family of SVG export and CSS (#3135) 2026-10-20 03:41:17 +07:00
MarekSpodBiedry 7c47692b32 Ask for the .ai options on Save a Copy like Save As (#3141) 2026-10-20 03:41:16 +07:00
BFlat 8a6e4e77f3 Merge pull request #2997 from nrq6993-a11y/stream/vc-feat-g1-guide-alt-orientation-move
G1: Alt-drag an existing ruler guide to swap horizontal and vertical
2026-10-20 03:29:19 +07:00
BFlat 686da2dce7 Merge pull request #3155 from storytold/docs/effects-parity-2026-10-19
Docs: effects parity counts the Sketch and Artistic filters of 2026-10-19 (36/57)
2026-10-20 03:25:23 +07:00
BFlat 68b1f7a07c Merge pull request #3152 from Silvertree2010/fix/h652-svg-export-writes-invalid-xml-wh
Filter control characters in SVG export title and description
2026-10-20 03:25:07 +07:00
nrq6993-a11yandCursor 2ceb183bfe G1: restore Alt-drag copy for existing ruler guides (#2997).
Drop the undocumented orientation-swap on moved guides; Alt again previews guide.move with copy, matching new-guide Alt orientation only.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-19 23:17:28 +03:00
bflatastic fe6ef8ade7 Docs: effects parity counts the four Sketch and Artistic filters of 2026-10-19 (36/57) 2026-10-20 03:16:37 +07:00
NetterSilverandClaude Haiku 5.5 05017111ba Filter control characters in SVG export title and description
Found while testing crates/svg/src/export.rs:138 and :143

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-20 03:15:47 +07:00
BFlat 5397ad22e7 Merge pull request #3153 from storytold/fix/sketch-filter-rows
Effects: catalog rows for Chalk & Charcoal, Graphic Pen, Reticulation and Plastic Wrap (#2972, #2967, #2976, #3034)
2026-10-20 03:14:38 +07:00
bflatastic a5ec99d515 Effects: Graphic Pen's params doc names no vendor, as cargo xtask brands asks (#2967) 2026-10-20 03:14:27 +07:00
bflatastic 92c1657334 i18n: Chalk & Charcoal, Graphic Pen, Reticulation and Plastic Wrap in every catalog that has the Sketch filters (#2972, #2967, #2976, #3034)
Also cargo fmt over the four filters.
2026-10-20 03:14:27 +07:00
BFlat 8f481aa2f4 Merge pull request #3034 from nrq6993-a11y/stream/vc-feat3-g2-artistic-plastic-wrap
G2: Effect › Artistic › Plastic Wrap raster filter
2026-10-20 03:14:22 +07:00
BFlat 7616bb9221 Merge pull request #2976 from nrq6993-a11y/stream/vc-feat-g2-sketch-reticulation
G2: Effect › Sketch › Reticulation raster filter
2026-10-20 03:14:06 +07:00
BFlat 1f579352ed Merge pull request #2967 from nrq6993-a11y/stream/vc-feat-g2-sketch-graphic-pen
G2: Effect › Sketch › Graphic Pen raster filter
2026-10-20 03:13:50 +07:00
BFlat 851eb7f076 Merge pull request #2972 from nrq6993-a11y/stream/vc-feat-g2-sketch-chalk-charcoal
G2: Effect › Sketch › Chalk & Charcoal raster filter
2026-10-20 03:13:32 +07:00
nrq6993-a11y a2c764d312 G2: Effect › Artistic › Plastic Wrap raster filter
Squashed from #3034 onto the Sketch filters; the Artistic label test lists it.
2026-10-20 02:55:29 +07:00
nrq6993-a11y 917aa29dd5 G2: Effect › Sketch › Reticulation raster filter
Squashed from #2976 onto Chalk & Charcoal and Graphic Pen.
2026-10-20 02:54:06 +07:00
nrq6993-a11y 11adb72d44 G2: Effect › Sketch › Graphic Pen raster filter
Squashed from #2967 onto #2972 (Chalk & Charcoal): both filters in the effect catalog, PIXEL_EFFECTS and the Sketch label and filter tests.
2026-10-20 02:52:33 +07:00
nrq6993-a11yandCursor 52380d683d G2: Chalk & Charcoal: fix clippy on luma type
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-20 02:50:13 +07:00
nrq6993-a11yandCursor 1f2007eb46 G2: Effect › Sketch › Chalk & Charcoal raster filter
Adds sketch.chalkCharcoal to the pixel-effect pipeline so Effect › Sketch exposes chalk highlights and charcoal strokes with public-doc-style parameters and tests.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-20 02:50:13 +07:00
BFlat 19e3144d27 Merge pull request #3144 from nrq6993-a11y/stream/vc-feat1-g1-envelope-distort-measure
G1: Mesh editing shows move distance in measurement labels while dragging points
2026-10-20 02:48:33 +07:00
nrq6993-a11yandCursor cfea906681 G1: Mesh point drags show dX/dY in measurement labels
Honor Measurement Labels while moving gradient-mesh and mesh-envelope
points with the Mesh tool or Direct Selection.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-20 02:48:08 +07:00
BFlat fbc654734f Merge pull request #3151 from storytold/docs/roadmap-2026-10-19
Docs: ROADMAP row for 2026-10-19, and rows doc-conflict merges duplicated
2026-10-20 02:41:11 +07:00
bflatastic ac83e91c5f Docs: the ROADMAP's 2026-10-19 row, and the rows merges of conflicting PRs left twice
ROADMAP: a progress row and status line for the community PRs of 2026-10-19; the reproducible-bytes and inch-ruler rows appeared twice. gaps.md: G6 held four interleaved versions of its Missing line; it now says what is left (a scripting surface). target-app-parity.md: three copies of the Type evidence bullet, merged into one with every sentence. type-parity.md and ui-parity.md: a row and a shorter copy of it.
2026-10-20 02:41:01 +07:00
BFlat 10e59b0d13 Merge pull request #3149 from texjer/fix/home-recent-hover
Home: Recent Files rows highlight and click as one; Home screen scrolls
2026-10-20 02:38:04 +07:00
BFlat dc79640956 Merge pull request #3146 from nrq6993-a11y/stream/vc-feat1-g1-envelope-distort-move-measure
G1: Envelope Distort shows move distance in measurement labels while dragging corners
2026-10-20 02:37:46 +07:00
BFlat e2b2c410d9 Merge pull request #3148 from Silvertree2010/fix/3132-can-t-delete-the-outer-part-of-a
Keep an island inside a hole a separate Shape Builder region
2026-10-20 02:37:34 +07:00
texjer 30646c83bd Home: Recent Files rows light up and click as one; Home scrolls
Each Recent Files row (history icon, name, folder) is now a single
button that paints the hover token behind it, shows a pointing hand and
keeps the full path as its tooltip; a click anywhere on it opens the
file. Before, only the frameless file name reacted, with no hover
feedback.

The Home screen's column now sits in a vertical scroll area, so a small
window or a long Recent Files list no longer hides the presets and
Community links below the fold. Widgets scrolled out of view are
clipped and take no pointer.
2026-10-20 02:37:04 +07:00
nrq6993-a11yandCursor 361ebd29bf G1: Free Distort corner drags show dX/dY measurement labels
Honor Measurement Labels during envelope-style corner drags on the Free Transform tool, matching the Move handle readout.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-20 02:37:03 +07:00