Commit Graph
6497 Commits
Author SHA1 Message Date
BFlat 31124c8709 Merge pull request #4617 from VoiceLessQ/fix/3098-trace-inputs-and-repaint
Image Trace: background traces see library colour changes, and keep frames coming (#3098)
2026-10-30 00:46:03 +07:00
BFlat a885569fc3 Merge pull request #4620 from Taha-Mahmoodi/fix/4420-affinity-fill-color
Fix #4420: import attached Affinity recolor adjustment layers as color overlays
2026-10-30 00:45:44 +07:00
BFlat e454ea28bf Merge pull request #4619 from mockydevs/fix/mesh-cmyk-k-3232
Fix #3232: a CMYK gradient mesh keeps its K when lightened
2026-10-30 00:45:11 +07:00
BFlat 9ce664e0df Merge pull request #4621 from storytold/feat/compound-shapes
Pathfinder: live compound shapes (Make, Shape Mode, Release, Expand Compound Shape)
2026-10-30 00:44:58 +07:00
BFlat cc16746927 Merge pull request #4431 from dotCooCoo/feat/colorize-gray-images
Images: a fill color colorizes grayscale and 1-bit images
2026-10-30 00:44:29 +07:00
BFlat ae0c90abc3 Merge pull request #4492 from dotCooCoo/fix/recolor-limit-and-scope-params
Recolor Artwork and swatch libraries: parameters of the wrong form are errors
2026-10-30 00:44:08 +07:00
BFlat efed5e16fa Merge pull request #4435 from dotCooCoo/feat/area-type-anchor-marquee
Direct Selection: a marquee selects area type's frame anchors
2026-10-30 00:43:45 +07:00
BFlat b4f66ceabc Merge pull request #4428 from dotCooCoo/feat/open-pcx-files
File formats: PCX (.pcx) files open and place
2026-10-30 00:43:24 +07:00
BFlat d40c428e92 Merge pull request #4402 from dotCooCoo/feat/styles-alt-click-new-asks-name
Character and Paragraph Styles: Alt-click on New asks for the new style's name
2026-10-30 00:43:02 +07:00
BFlat 6a4e43a0df Merge pull request #4383 from dotCooCoo/feat/type-format-shortcuts
Type: Cmd/Ctrl+Shift+U underlines, and Cmd/Ctrl+Alt+Shift+C and H toggle the line composer and hyphenation
2026-10-30 00:42:41 +07:00
BFlat dab0b55db9 Merge pull request #4377 from dotCooCoo/feat/next-document-shortcut
Window: Cmd+F6 and Cmd+Shift+F6 go to the next and previous document
2026-10-30 00:42:17 +07:00
BFlat 1d3baa31b2 Merge pull request #4485 from el-j/fix/artboard-multiselect-4484
fix(canvas): allow multi-selecting artboards via Shift-click on canvas label (#4484)
2026-10-30 00:41:52 +07:00
BFlat 462992886e Merge pull request #4612 from VoiceLessQ/fix/4366-name-content-in-an-array-object
PDF import: a page's content listed in an array object is named as content (refs #4366)
2026-10-30 00:41:02 +07:00
VoiceLessQ 3301db5817 Image Trace: starting a background trace asks for a frame
The frame a trace starts in may already have asked for its next one before the trace started, so with no input the finished trace could wait. From the review of #4617.
2026-10-30 00:15:59 +07:00
VoiceLessQ 2e54e882d6 Image Trace: a library colour changed meanwhile makes a background trace stale, and running traces keep frames coming
From the review of #4605. TraceParams::swatches isn't in the settings' JSON (serde skip), so a Document Library trace whose swatches were edited while it ran still applied, with the old colours; the trace's inputs now hold them. The 100 ms repaint that keeps background work moving left traces out, so without input a finished trace could wait for the next event.
2026-10-30 00:15:59 +07:00
Taha-Mahmoodi 887328db03 Fix #4420: import attached recolor adjustment layers as color overlays
In Affinity Designer, Recolor Adjustment layers (RcRA) can be attached to
vector groups/shapes via AdCh. Lightness 1.0 recolors target elements to
white. Import visible RcRA layers as ColorOverlay effects and apply them
during node appearance evaluation.
2026-10-30 00:15:58 +07:00
Don Omondi 42884e4ee7 test: the highlighted CMYK mesh PDF must have fills to check 2026-10-30 00:15:58 +07:00
bflatastic 5165b6eb1d Pathfinder: live compound shapes (Make, Shape Mode, Release, Expand Compound Shape)
Squashed from #4621 onto main.
2026-10-30 00:15:58 +07:00
Don Omondi 239286ca83 Fix #3232: a CMYK gradient mesh keeps its K when lightened
Create Gradient Mesh's To Center / To Edge highlight lightened every point
towards RGB white, so a CMYK (or grey) point became display RGB. A patch with
any non-CMYK corner then mixes in RGB, and the PDF writer separated those
colours back to CMYK with K = 0, moving ink off the K plate. Points now
lighten towards white in their own colour model (no ink for CMYK), so the
mesh stays CMYK and K shrinks with the other inks. Flat meshes (highlight 0)
already kept their inks.
2026-10-30 00:15:58 +07:00
dotCooCoo 1538733954 Images: a fill color colorizes grayscale and 1-bit images
Squashed from #4431 onto main.
2026-10-30 00:15:57 +07:00
dotCooCoo 567060393e Recolor Artwork and swatch libraries: parameters of the wrong form are errors
Squashed from #4492 onto main.
2026-10-30 00:15:56 +07:00
dotCooCoo d5cbeb6cc7 Direct Selection: a marquee selects area type's frame anchors
Squashed from #4435 onto main.
2026-10-30 00:15:56 +07:00
dotCooCoo dc9106939e File formats: a PCX palette cut short is refused
An 8-bit PCX file whose image data is followed by the palette marker
(0x0C) and fewer than 768 color bytes was read as gray levels. The reader
now notes where the run-length encoded image data ends, and when the
palette marker follows it without all 768 colors, refuses the file as cut
short. An 8-bit file with nothing after its image data still reads as
gray levels, and a gray level of 12 that falls 769 bytes before the end of
such a file is read as a pixel instead of as the palette marker.
2026-10-30 00:15:56 +07:00
dotCooCoo f32699bea7 File formats: PCX (.pcx) files open and place
A new reader, written from the ZSoft PCX Technical Reference Manual, decodes
the run-length encoded scan lines of 1-bit images in the header palette's
first two colors (black and white when the version has no palette or the two
colors are the same), 1-bit images in two to four planes and 4-bit images
with the header's palette (the EGA colors for versions 0 and 3), 2-bit CGA
images in the colors that the header's CGA background and palette settings
pick, 8-bit images with the 256-color palette after the image data (gray
levels without one) and 24-bit images in three planes. The image is stored as PNG at the resolution of the header's HDpi and
VDpi fields.

Open and Place list PCX, and pasting a copied .pcx file and Glass's Load
Texture… read it by its header. A file of another depth or plane count, one
cut short and one whose pixels as RGBA pass the pixel allowance are refused
with a message before its pixels are decoded. The desktop packaging does not
associate .pcx files, and no export writes them.

Docs: docs/file-format-parity.md, docs/target-app-parity.md, docs/mcp.md,
docs/releasing.md.
2026-10-30 00:15:56 +07:00
dotCooCoo c3cd065ef3 Character and Paragraph Styles: Alt-click on New asks for the new style's name
Squashed from #4402 onto main.
2026-10-30 00:15:55 +07:00
dotCooCoo 0ee5fc0a9e Type: Cmd/Ctrl+Shift+U underlines, and Cmd/Ctrl+Alt+Shift+C and H toggle the line composer and hyphenation
Squashed from #4383 onto main.
2026-10-30 00:15:55 +07:00
dotCooCoo 316d28407f Window: Cmd+F6 and Cmd+Shift+F6 go to the next and previous document
Squashed from #4377 onto main.
2026-10-30 00:15:55 +07:00
bflatastic 148517f3eb Artboard labels: one helper for the artboards the Artboard tool labels itself 2026-10-30 00:15:54 +07:00
VoiceLessQ 401706ff8b PDF import: each Contents object is read once when naming a refused stream
Pages that share one Contents array made the name of a refused stream read that array once per page, quadratic in a crafted file. Each object is now read once, and a page's own array as before. From the review of #4612.
2026-10-30 00:15:54 +07:00
el-j 7064969327 fix(canvas): resolve clippy wildcard import and rebase conflicts on canvas artboards 2026-10-30 00:15:54 +07:00
el-j 1670fe4c41 fix(canvas): capture Shift from pointer events for artboard label selection 2026-10-30 00:15:54 +07:00
el-j 49a05508ab fix(canvas): allow multi-selecting artboards via Shift-click on canvas label (#4484) 2026-10-30 00:15:54 +07:00
BFlat 41926a5db9 Merge pull request #4613 from Ridzzz0Alam/fix/2238-text-effects
Fix #2238: Properties doesn't offer Offset Path and Simplify for type alone
2026-10-30 00:15:01 +07:00
VoiceLessQ f0865193a8 PDF import: a page's content listed in an array object is named as content
A page's Contents can be an array written as an object of its own (/Contents 6 0 R). Its streams were named "a stream in it": the reference was compared with the stream, not the array's items. From the review of #4603.
2026-10-29 23:39:24 +07:00
Ridzzz0Alam c403ad762f Properties: Properties doesn't offer Offset Path and Simplify for type alone (#2238)
The Quick Actions listed Object › Path's Offset Path and Simplify for every
selection, but both take paths: with type selected, the dialog opened and
could only fail ("Offset Path: select paths"). They are now left out when
every selected object is type, as Lock and Isolate Group are when they can't
run; live type offsets through the Appearance panel's Effect › Path ›
Offset Path, which works on type.
2026-10-29 23:39:21 +07:00
BFlat d7aa0b36eb Merge pull request #4611 from el-j/perf/transform-before-round-offset-4145
perf(effects): reorder pure-translation Transform copies after round-join terminal Offset Path (#4145)
2026-10-29 23:36:15 +07:00
BFlat 8c18e0d5da Merge pull request #4607 from VoiceLessQ/fix/4150-keep-hardware-opengl
Windows: keep OpenGL for a GPU without Direct3D 12 and for a named adapter (#4150)
2026-10-29 23:35:55 +07:00
BFlat b9fd98d307 Merge pull request #4608 from Taha-Mahmoodi/fix/4459-copy-text-formatting
Fix #4459: retain text properties when copying text across documents
2026-10-29 23:35:39 +07:00
el-j 82e4fc422c perf(effects): reorder pure-translation Transform copies after round-join terminal Offset Path (#4145)
Follow-up to #4345 / #4145 per maintainer guidance from @bflatastic.

- In `crates/effects/src/geometry.rs` & `crates/effects/src/reshape.rs`:
  - Implements `optimize_geometry_effects`: reorders pure-translation Transform effects
    with copies after a terminal round-join Offset Path effect when the effective style is safe
    (NonZero fill and no stroke).
  - Offsetting a union equals the union of offsets for round (Minkowski) offsets; moving
    pure-translation copies after the terminal offset evaluates Offset Path once on the base
    geometry rather than over dozens of multiplied copies, turning O(copies * segments) planar
    sweep explosion into a single fast offset plus lightweight affine copies.
  - Safely commutes across multiple consecutive pure-translation Transform effects.
  - Preserves exact visual geometry by leaving miter, bevel, EvenOdd, stroked, or non-terminal
    effect stacks in their original order.
- Added comprehensive unit and regression tests in `crates/effects/src/tests.rs`.
- Added contributor entry in `contributors/people.toml`.
2026-10-29 23:15:08 +07:00
VoiceLessQ ac3982c68a Windows: keep OpenGL for a GPU without Direct3D 12 and for a named adapter (#4150)
Follow-up to #4600, from its review. A start left OpenGL out whenever
Direct3D 12 listed an adapter, and WARP, its software adapter, is
always listed. So a GPU without a Direct3D 12 driver, which drew
through OpenGL before, now drew on the CPU. An adapter that
WGPU_ADAPTER_NAME named was left out too when it was an OpenGL one.

OpenGL is now listed when Direct3D 12 lists no hardware adapter and
when WGPU_ADAPTER_NAME is set. The Direct3D 12 check takes the shader
compiler the window does (WGPU_DX12_COMPILER, else FXC).
2026-10-29 23:14:58 +07:00
Taha-Mahmoodi 798acba6ca docs: record text copy formatting across documents in type parity checklists 2026-10-29 23:14:47 +07:00
Taha-Mahmoodi 46cc03b50a Fix #4459: retain text properties when copying text across documents 2026-10-29 23:14:47 +07:00
BFlat 8207632afe Merge pull request #4606 from storytold/fix/brush-curves-on-bends
Fix #3926: Art, Scatter and Pattern brush art keeps its curves where the path bends
2026-10-29 23:12:04 +07:00
BFlat c074ca6719 Merge pull request #4605 from VoiceLessQ/fix/3098-trace-off-the-ui-thread
Fix #3098: Image Trace traces off the UI thread, with progress and Cancel
2026-10-29 22:58:45 +07:00
bflatastic 2d92634371 Brushes: bent art keeps its curves (#3926)
Pattern, art and auto-corner brushes used to flatten the art into chords
wherever the path bends, so Expand Brush Strokes left polygons with
hundreds of corner anchors. Each art segment now comes out as cubics
matched to the bent segment's ends and derivatives and halved until they
hold to a quarter of the flattening tolerance (never below the 0.05 pt
the path is flattened to). Anchors stay anchors, lines that stay straight
stay lines, and the halving is capped in depth and in anchors: where the
fit would take more anchors than the chords, or the map gives points that
are not finite, that subpath falls back to the chords, now without the
non-finite points.

A 4-anchor circle tile round a 400 pt circle: 68 anchors a tile -> about 9,
all with handles, 0.04 pt from the bent art against 0.19 for the chords;
stroke_pieces 169 -> 244 us for the 31-tile stroke.
2026-10-29 22:44:12 +07:00
VoiceLessQ 1411a821c1 Fix #3098: Image Trace traces off the UI thread, with progress and Cancel
Tracing a photo or a large image ran inside imageTrace.make on the UI
thread, so the window froze for as long as the trace took, with nothing
to say it was working.

A trace the user asks for (Object > Image Trace > Make and Make and
Expand, the task bar's Image Trace, the Image Trace panel's Trace and
presets) now runs on a thread of its own, as heavy plug-in filters do.
The status bar says so, and after 0.4 s a progress window shows how
many of the image's colors are traced, with Cancel and Continue in
Background (imageTrace.cancelRuns, imageTrace.hideRuns).

The result goes back to the command it was prepared for
(cmd::TraceRun, Traced::hand_in), which takes it only for the same
object, image and settings, so the edit is one undo step as before. A
newer trace of the same object replaces one still running, and a trace
whose image or settings changed meanwhile changes nothing. The control
channel, MCP, scripts and the web trace at once, as before.

The tracer reports its stages and color layers to a callback and stops
when it says so (trace_watched).
2026-10-29 22:39:34 +07:00
BFlat 56340e58d0 Merge pull request #4563 from el-j/perf/svg-unique-single-pass-4555
perf(svg): compute unique ID prefix directly to avoid duplicate document serialization (#4555)
2026-10-29 22:38:15 +07:00
BFlat 21a440e05a Merge pull request #4603 from VoiceLessQ/fix/4366-name-the-refused-stream
PDF import: a refused file says which stream it trips on (refs #4366)
2026-10-29 22:37:56 +07:00
BFlat 2eb71d69ec Merge pull request #4604 from Ridzzz0Alam/fix/3209-svg-css-units
Fix #3209: SVG export writes type sizes and spacing in CSS with px
2026-10-29 22:37:37 +07:00
BFlat 59d67c274d Merge pull request #4600 from VoiceLessQ/fix/4150-windows-input-language-hang
Fix #4150: Windows doesn't start OpenGL unless a start needs it
2026-10-29 22:23:25 +07:00