Commit Graph
14098 Commits
Author SHA1 Message Date
BFlat b46fb077b7 Merge pull request #7566 from dotCooCoo/fix/tool-overlays-reuse-settled-outline
Blob Brush: a long drag's settled outline is reused from frame to frame
2026-11-15 09:46:53 +07:00
BFlat 237fe27e50 Merge pull request #7713 from dotCooCoo/feat/psd-clipping-path
PSD: a file's clipping path clips its merged image on Open and Place
2026-11-15 09:46:45 +07:00
BFlat 8317ab745f Merge pull request #7690 from dotCooCoo/fix/ai-pen-samples-test-after-path
.ai import: pen-samples test checks a brushed path after the samples
2026-11-15 09:46:37 +07:00
BFlat 563f075764 Merge pull request #7707 from dotCooCoo/feat/opentype-hv-style-roman-italics
OpenType panel: H or V Style and Roman Italics set kana and Latin forms
2026-11-15 09:46:29 +07:00
BFlat 55c2bb5194 Merge pull request #7511 from dotCooCoo/fix/live-paint-make-drawn-rows
Live Paint: Make keeps every fill and stroke row that draws on the source
2026-11-15 09:46:20 +07:00
BFlat 3f90b8ff4c Merge pull request #7719 from dotCooCoo/fix/unit-parse-long-expression
Units: a very long expression reads as nothing instead of overflowing the stack
2026-11-15 09:46:13 +07:00
BFlat 05019938c6 Merge pull request #7727 from storytold/fix/pixelspace-size-svg-defaults
Effects: give the SVG filter defaults' test raster its size (fix main)
2026-11-15 09:40:52 +07:00
bflatastic 3a608ae1e3 Effects: the default SVG filters' test raster gives PixelSpace its size
#7680 added PixelSpace::size and #7658's test helper, merged in an earlier batch, didn't
set it, so vectorcraft-effects' tests don't compile on main.
2026-11-15 08:33:38 +07:00
BFlat 6016d6200f Merge pull request #7206 from dotCooCoo/fix/hindi-label-senses
i18n: Hindi labels use the interface sense of their English
2026-11-15 08:25:53 +07:00
BFlat 34ffc46cb5 Merge pull request #7687 from dotCooCoo/feat/links-copy-info
Links: Copy Info in the panel menu copies the selected links' file names
2026-11-15 08:25:44 +07:00
BFlat a53891b846 Merge pull request #7291 from dotCooCoo/feat/live-paint-bucket-multi-click
Live Paint: double-click floods across unstroked edges, triple-click paints the same paint
2026-11-15 08:25:35 +07:00
BFlat b63b99ba1a Merge pull request #7606 from dotCooCoo/fix/monitor-profile-after-blending
Canvas: translucent art blends with the paper before the monitor profile
2026-11-15 08:25:27 +07:00
BFlat feaf72f2b1 Merge pull request #7692 from dotCooCoo/fix/graph-labels-embedded-newline-middle
Graphs: centered labels with a line break in their text stay centered
2026-11-15 08:25:19 +07:00
BFlat 42043f1dbb Merge pull request #7696 from dotCooCoo/fix/svg-code-selection
SVG Options: Show Code under Export Selection shows the selection
2026-11-15 08:25:10 +07:00
BFlat 3ca10982d5 Merge pull request #7697 from dotCooCoo/fix/ai-pen-sample-test-each-setting
.ai import: pen-sample test checks each Calligraphic setting on its own
2026-11-15 08:25:02 +07:00
BFlat 507b3a8961 Merge pull request #7714 from dotCooCoo/fix/solid-check-drawn-bounds-test
3D: a test checks that a filled shape builds about the bounds its solid draws
2026-11-15 08:24:54 +07:00
BFlat d593b41961 Merge pull request #7691 from dotCooCoo/feat/variable-library-every-kind
Variables: Load and Save Variable Library hold visibility, image and graph variables
2026-11-15 08:24:45 +07:00
BFlat 61091515b3 Merge pull request #7624 from dotCooCoo/fix/cmyk-tiff-alpha-and-extra-sample
TIFF: alpha after another extra sample places and opens as transparency
2026-11-15 08:24:36 +07:00
BFlat 2331fd44fa Merge pull request #7680 from dotCooCoo/feat/radial-blur-center
Effects: Radial Blur turns about a Blur Center set in its dialog
2026-11-15 08:24:28 +07:00
BFlat bb2322c568 Merge pull request #7678 from dotCooCoo/fix/optical-keeps-tsume
Type: Optical kerning keeps the space Tsume takes out
2026-11-15 08:24:19 +07:00
BFlat 905eb30384 Merge pull request #7716 from dotCooCoo/fix/svg-import-budget-shared
SVG import: bound selector matching and share the limits with linked and embedded SVGs
2026-11-15 08:24:10 +07:00
BFlat 69a9df31fe Merge pull request #7700 from dotCooCoo/fix/svg-clip-use-both-clips
SVG import: a use in a clip path clips by its own clip path and its text's
2026-11-15 08:24:03 +07:00
BFlat c6a085f20e Merge pull request #7704 from dotCooCoo/fix/perspective-repeated-ids
Perspective: a repeated id attaches, moves or transforms an object once
2026-11-15 08:23:55 +07:00
BFlat c18a83f028 Merge pull request #7698 from dotCooCoo/fix/save-checks-files-beside-read-file
Save: File > Save no longer writes over the file the document was read from through a file written beside the path
2026-11-15 08:23:45 +07:00
BFlat c605d0ded8 Merge pull request #7671 from dotCooCoo/fix/prefs-reset-row
Preferences: Reset Preferences shares the row of Export and Import
2026-11-15 08:23:38 +07:00
BFlat 17dfe41a7e Merge pull request #7672 from dotCooCoo/fix/export-selection-doc-save-panel
MCP: docs say document.exportSelection with options and no path still asks for the file
2026-11-15 08:23:31 +07:00
BFlat 40d1fc913a Merge pull request #7702 from dotCooCoo/fix/reverse-compound-stroke-records
Paths: Reverse Path Direction turns a compound path's own stroke width profile and pen records
2026-11-15 08:23:22 +07:00
BFlat dc870ecf9c Merge pull request #7686 from dotCooCoo/fix/export-places-symbols-in-masks
Export: symbol instances in opacity masks draw their art's live effects
2026-11-15 08:23:13 +07:00
BFlat 410bb908ce Merge pull request #7695 from dotCooCoo/fix/issue-7275-rename
Fix #7275: Rename artboards in Export for Screens by double-clicking their names
2026-11-15 08:23:04 +07:00
dotCooCoo a3cb4462af OpenType panel: checkboxes after Select All read every frame of the story
After Select All in a threaded story whose edited frame is empty, the
panel's commands style the text of every frame, but the checkbox rows,
Stylistic Sets and the East Asian items read only the empty frame. They
now read the runs of every frame, leaving out runs with no text while
any run has text, so a feature the story's text has shows checked and a
click turns it off.
2026-11-14 17:03:36 -08:00
dotCooCoo 8eded96792 PSD: transform a file's clipping path in place instead of copying it
file_clipped owns the path psdread::clipping_path reads, so it moves it
to the image's place without making a second copy of every anchor.
2026-11-14 16:39:17 -08:00
dotCooCoo 8cba5fae0c Merge main into fix/live-paint-make-drawn-rows 2026-11-14 16:37:54 -08:00
dotCooCoo 8dfbe54db6 Units: a very long expression reads as nothing instead of overflowing the stack
Unit::parse took one level of recursion per + - * / sign, so a text such
as "1+1+...+1" with 200,000 terms overflowed the stack and aborted the
process. Every number field, parse_number and every command parameter read
as a length went through it.

Text with more than 128 + - * / signs now reads as nothing; text with 128
or fewer reads as before. docs/mcp.md states the limit for length strings.
The test a_very_long_expression_reads_as_nothing aborted with a stack
overflow before the change.
2026-11-14 16:26:09 -08:00
dotCooCoo e10f87818b OpenType panel: caret checkboxes read the whole text they change
At a Type tool caret the panel's commands style all of the text, but the
checkbox rows, Stylistic Sets and the H or V Style and Roman Italics
items showed only the caret's style. A click could then turn a feature
off for the whole text while most of it did not have the feature. At a
caret they now read every character of the text: a mixed row shows a
dash, a mixed item shows unchecked, and a click turns the feature on
throughout.
2026-11-14 16:24:52 -08:00
dotCooCoo 67f427b2b4 Merge main into fix/ai-pen-samples-test-after-path 2026-11-14 16:21:15 -08:00
dotCooCoo d0f1346f87 Docs: record the PSD clipping path in the PSB row and the evidence list
The PSB row of docs/file-format-parity.md says the merged image comes in
clipped by the file's clipping path, as the PSD row does, and
docs/target-app-parity.md's evidence list gets a line for it.
2026-11-14 16:20:16 -08:00
BFlat 895e9493d2 Merge pull request #7693 from dotCooCoo/fix/hidden-chars-test-retry-edit
Tests: each Show Hidden Characters retry sets new text
2026-11-15 07:11:58 +07:00
dotCooCoo 89f20c45c4 SVG import: bound selector matching and share the limits with linked and embedded SVGs
The measurement that runs before the style cascade and usvg now covers
the inputs that still got past it:

- usvg matches a selector without keeping what it found, so one whose
  leftmost part matches nothing tests every set of ancestors in turn.
  The measurement counts those tests for each copy and stops at
  50,000,000; past that the SVG is refused with "the SVG's style sheets
  take too long to match". An SVG image's matching stops at what the
  SVG showing it left.
- A test counts one more for every 16 attributes a lookup scans and
  every 16 bytes of the value it compares, so many classes against a
  long class list count the work they do, in usvg's matching and in
  the import's own cascade.
- The declarations the import's own cascade keeps, once per element,
  count toward the 64 MB, including those of `:not()` rules, which usvg
  drops. Each `:not()` alternative counts as a test.
- A linked SVG file is measured before its cascade runs. The linked SVG
  files share one measurement: once they pass the limits together, the
  files after that are shown without their links. The tests a file past
  the limits made still count.
- SVG images share the element limit and the selector tests with the
  SVG showing them, as they already shared the 64 MB.

The svg_filters reader measures its SVG before the cascade too.
2026-11-14 16:10:10 -08:00
dotCooCoo af010b6dec PSD: a file's clipping path clips its merged image on Open and Place
A PSD or PSB file can name one of its saved paths (image resources 2000
to 2997) as its clipping path in resource 2999. psdread::clipping_path
reads that path in the image's pixel space, under the even-odd rule the
file format specification gives, with a subpath around the whole image
first when the initial fill record says the fill starts with all
pixels.

File > Place of such a file, and File > Open of its merged image, put
the image in a clip group of that path with no paint. file.place answers
the image's id as `image`, as for a DCS file. Replacing an image alone
in a clip group with such a file keeps the image's scale and rotation.
links.update and links.relink leave the clip group as it is. Files that
name no clipping path come in as before.
2026-11-14 15:55:34 -08:00
dotCooCoo 67fd1cd127 Merge main into feat/live-paint-bucket-multi-click 2026-11-14 15:48:45 -08:00
dotCooCoo 514ee4f81e 3D: test that the check builds a filled shape about its drawn bounds
#7569 changed the Extrude & Bevel and Inflate check so that a filled
shape's solid is built once, about the bounds the effect draws it
about, and stated that a filled shape whose solid builds about those
bounds but not about its profile's own bounds now passes. No test
covered that case.

The new test builds a group of a filled shape of 900 small curves and
a line with a 2000 pt stroke. About the shapes' own bounds, the filled
shape's solid is too complex with a repeated rounded bevel; about the
bounds that take in the stroke, its curves are sampled more coarsely
and it fits. The test asserts the first result, then that the check
passes and the solid draws. It fails when the check builds every
shape's profile about the profiles' bounds again.
2026-11-14 15:47:34 -08:00
dotCooCoo 1d64e0f9ef Type: the harakat Tsume test also compares advances
With Noto Sans Arabic the fatha's ink reaches past the first letter's
left edge, so that letter's Tsume only narrows its advance and moves no
glyph. The test compared glyph positions alone and found no change.
It now compares each glyph's position and advance.
2026-11-14 15:39:28 -08:00
dotCooCoo d91e6a8565 Merge main into feat/opentype-hv-style-roman-italics 2026-11-14 15:24:42 -08:00
dotCooCoo 09ec24ee28 Merge main into fix/optical-keeps-tsume 2026-11-14 15:22:48 -08:00
dotCooCoo 0431809643 OpenType panel: H or V Style and Roman Italics set kana and Latin forms
With Show East Asian Options on, the OpenType panel menu has H or V
Style and Roman Italics. H or V Style is the character feature tag
`hkna`: kana take the forms the font draws for horizontal type, and in
vertical type the shaper applies `vkna` in its place. Roman Italics is
`ital`, the font's italic half-width alphanumerics. Both are on or off
only (`hkna=2` is refused), set through `features` and
`featureChanges`, cleared by Reset OpenType Features, and are switches
in Character Style Options > OpenType Features.

Docs: docs/mcp.md, docs/type-parity.md, docs/target-app-parity.md.
2026-11-14 15:22:36 -08:00
dotCooCoo 2b9325b9e0 Merge main into feat/links-copy-info 2026-11-14 15:21:36 -08:00
dotCooCoo 7ad98ce9b8 Perspective: a repeated id attaches, moves or transforms an object once
perspective.attach, perspective.release, perspective.move and
perspective.transform took their `ids` as given, so an id listed twice
was processed twice. Attach warped an object that was already projected
a second time, and a move or transform of an object not yet in
perspective attached it and then moved it twice. The Shift and Snap to
Grid reads of a move also used a document attached twice. The ids are
now taken once each, in the order first given.
2026-11-14 15:20:27 -08:00
BFlat dafd993395 Merge pull request #7658 from dotCooCoo/feat/svg-filter-defaults
Effects: Effect › SVG Filters lists default filters
2026-11-15 06:18:12 +07:00
BFlat 4cf0a4b182 Merge pull request #7474 from dotCooCoo/feat/ai-insert-aki
Type: .ai import reads Insert Aki, and .ai save writes it
2026-11-15 06:18:04 +07:00
BFlat 4e42e2bbb0 Merge pull request #7681 from dotCooCoo/feat/east-asian-glyph-forms
Type: Glyphs panel menu draws the selected characters in an East Asian glyph form
2026-11-15 06:17:55 +07:00