github storytold/vectorcraft v0.15.0
VectorCraft v0.15.0

4 hours ago

Note

FreeBSD aarch64 is dropped from this release. We had to cut releases, and we cannot build this target within the 5-hour CI limit for any of the Craft apps, so we are dropping it for now. This is a known blocker, flagged for a future fix in storytold/craft-common-actions#39. FreeBSD x86_64 and every other platform are included.

What's Changed

  • docs: add SonarCloud and CodeRabbit badges to README by @dylanmtaylor in #2923
  • Skip CodeRabbit reviews on Dependabot PRs by @echelon in #3247
  • Gradient meshes: a grid whose point count overflows is malformed by @Matoo125 in #3193
  • Gradient meshes: deleting mesh lines leaves a malformed mesh as it is by @Matoo125 in #3194
  • Repeat: nested Repeats stop at 250,000 instances in all by @Matoo125 in #3223
  • EMF export: pattern tiles stop at 250,000 in all by @Matoo125 in #3224
  • G2: Effect › Sketch › Water Paper raster filter by @nrq6993-a11y in #2955
  • Fix EPS writer emitting inf for huge finite numbers by @Silvertree2010 in #3240
  • Quote CSS font-family names that are not plain identifiers by @Silvertree2010 in #3254
  • Encode trailing space as x20 in XML ids to keep round trip by @Silvertree2010 in #3225
  • Normalise negative zero in Measure tool angle by @Silvertree2010 in #3230
  • Keep fallback library name for blank GPL Name line by @Silvertree2010 in #3323
  • Root-argument tests: give the app 30 seconds to exit, not 5 by @lehni in #3286
  • Libraries: a User Defined library file whose reading panics is skipped by @dotCooCoo in #3331
  • M3.57: preserve fractional CSS gradient stop positions by @MMexicann in #3284
  • Leave the pattern tile edge and swatch bounds out of exports by @HEOJUNFO in #3304
  • Offset Path's Preview checkbox keeps its last state across opens (#3195) by @rahul05ranjan in #3203
  • Legacy .ai export: a radial gradient's color stops are written from ramp point 0 to 100 by @dotCooCoo in #3285
  • Warn on export when a font style is drawn in another style (#3229) by @MarekSpodBiedry in #3251
  • Save for Web: browser previews go only to a folder the current user owns by @dotCooCoo in #3344
  • Links: a link on a drive mapped to another share is not followed by @dotCooCoo in #3321
  • Fix lost diacritics with keyboard-hook IMEs (UniKey/OpenKey) by @jordanlemcc-ship-it in #3307
  • Fix Show and Hide Guides (#3219) by @MiQ71 in #3269
  • Fix #3188: arranging art inside a clipping mask keeps the clipping path at the bottom by @Taha-Mahmoodi in #3206
  • Fix #3198: the status bar's fps is the rate the window draws at, not an average of idle bursts by @Taha-Mahmoodi in #3200
  • Keep the swatch link when blending two tints of one swatch (#3234) by @MarekSpodBiedry in #3252
  • Keep stroke weight in document space on transformed type by @Silvertree2010 in #3270
  • Fix #2820: images drawn small redraw from their kept mips while being moved by @Taha-Mahmoodi in #3208
  • G1: Area type drag shows width and height in measurement labels by @nrq6993-a11y in #3182
  • G1: File Place cursor shows placed size in measurement labels while dragging by @nrq6993-a11y in #3218
  • G1: Reshape tool shows Smart Guide offset readouts while reshaping paths by @nrq6993-a11y in #3217
  • G1: Anchor Point tool shows move distance in measurement labels while Shift-dragging by @nrq6993-a11y in #3205
  • Appearance: Cmd+/ adds a new fill and Cmd+Alt+/ adds a new stroke by @dotCooCoo in #3341
  • File: Cmd+Alt+N makes a new document without the New Document dialog by @dotCooCoo in #3324
  • Artboards: the panel menu's Convert to Artboards converts the selected objects by @dotCooCoo in #3339
  • Select: Bristle Brush Strokes selects objects by their brush's type by @dotCooCoo in #3337
  • Brushes: Select All Unused selects the brushes the document does not use by @dotCooCoo in #3334
  • View: Show Live Paint Gaps highlights the gaps of the selected Live Paint groups by @dotCooCoo in #3313
  • Document Info: a Brushes category lists the document's brushes by @dotCooCoo in #3330
  • Brushes: Hue Shift without a key uses the most-used art color by @dotCooCoo in #3333
  • SVG import: support feBlend filter primitive and transparent backdrops by @odysseexp in #3316
  • Exclude retained trace bitmaps from result bounds and highlights by @FractalEncrypt in #3271
  • Persist Polygon and Star counts after exact-size placement by @FractalEncrypt in #3257
  • (3179) Envelope Distort by @AJMakesStuff in #3189
  • Pencil: Edit selected paths within 0 turns editing off by @dotCooCoo in #3340
  • Brush Options: Pattern Scale and Art Width have sliders by @dotCooCoo in #3335
  • Variables: the nothing-applied message clears when a later data set applies by @dotCooCoo in #3299
  • Tabs: a stop moved past another stays selected by @dotCooCoo in #3265
  • G1: a move over a panel waits and resumes on the canvas (#2826) by @ashsajal1 in #3215
  • G1: selection tools take a clipping path on its outline by @addibble in #3246
  • Distribute: selected ruler guides are spaced with the objects by @danngreen in #3181
  • UI: FilePick filters own their text, so a dialog's file types can be made at run time by @lehni in #3177
  • Live Paint: a Live Paint Selection click outside the faces selects the edge it highlights by @dotCooCoo in #3305
  • Live Paint: Merge keeps the group's lock, visibility, mask and graphic style link by @dotCooCoo in #3327
  • Swatches: a swatch made from a color the app shows keeps that color's model in a CMYK document by @dotCooCoo in #3320
  • Objects on Path: clipping paths and parts of blends, envelopes and repeats stay in place by @dotCooCoo in #3322
  • Tabs: in vertical type the alignments read Top- and Bottom-Justified Tab and the position Y by @dotCooCoo in #3318
  • Graphs: column designs show each column's value where their type has % and two digits by @dotCooCoo in #3311
  • EPS import: a PostScript error shows what its name means in the interface language by @dotCooCoo in #3293
  • Undo groups: a cancel drops only the canceled groups' entries from the journal by @dotCooCoo in #3294
  • Undo groups: library styles and field scrubs close only the group they open by @dotCooCoo in #3287
  • Type: the Every-line Composer composes paragraphs that mix type sizes in rectangular area type by @dotCooCoo in #3295
  • Paragraph: Insert Kashidas justifies Arabic lines with kashidas by @dotCooCoo in #3288
  • Type: Optical Margin Alignment hangs punctuation at the ends of type on a path by @dotCooCoo in #3310
  • Draw from centre (Alt) now applies to the typed size of a rectangle or ellipse (#3309) by @MarekSpodBiedry in #3348
  • Blob Brush: Shift keeps the stroke horizontal or vertical by @dotCooCoo in #3351
  • Layers: Cmd+Alt+L opens Layer Options for a new layer by @dotCooCoo in #3355
  • Build: the wasm check is warning-free; one file-dialog check instead of two by @Taha-Mahmoodi in #3207
  • i18n: each catalog names the blend spine with one term by @dotCooCoo in #2596
  • Isolation mode: object.isolate refuses hidden or locked objects and locked guide paths by @dotCooCoo in #2671
  • Export: area type that Shrink Text to Fit scales down is written at the size it draws at by @dotCooCoo in #2672
  • Tests: the engine-language test runs a Japanese frame again by @dotCooCoo in #2682
  • Pick placed images on their frame with Selection by Path Only by @HEOJUNFO in #3306
  • Part of #1816: Snap to Grid lands a moved object by its nearest edge and no longer snaps its center by @dotCooCoo in #3336
  • Brushes: colorization recolors type in scatter brush art by @dotCooCoo in #3345
  • Artboards: Rename gives several selected artboards one name, numbered by @dotCooCoo in #3350
  • Pencil and Paintbrush: holding Alt shows the closing loop cursor by @dotCooCoo in #3352
  • Canvas: the pointer's document point follows a wheel scroll or view drag in the same frame by @dotCooCoo in #3364
  • AI import: a gradient stop naming a process colour leaves its swatch process (#1771) by @AyberkA0 in #1772
  • PDF presets: Press Quality converts to Document CMYK, keeping its numbers (#2950, #1242) by @00xJS in #3012
  • Artboard tool: Shift-drag draws an artboard inside another or marquee-selects artboards by @dotCooCoo in #2497
  • Shape Builder: double-clicking the tool opens Shape Builder Tool Options by @dotCooCoo in #2557
  • Part of #2384: imported PDF text keeps its place when the file draws the space beside a wide gap by @dotCooCoo in #2688
  • Web: a pan or zoom of a heavy document moves the last frame and renders once the view is still by @dotCooCoo in #3329
  • Artboards: each artboard can have a background color on the canvas by @dotCooCoo in #2403
  • Use Preview Bounds: objects are measured with their geometry effects by @dotCooCoo in #2595
  • PDF/.ai import: a .ai saved without PDF compatibility is placed and pasted from its editing data by @dotCooCoo in #2182
  • feat(window): adopt shared craft-window for Linux decorations (depends on craft-libs#217) by @dylanmtaylor in #3366
  • Preferences: list the languages alphabetically by their own name by @nikolainyegaard in #3371
  • Save As: a typed extension of a format the save doesn't write is replaced by @dotCooCoo in #3372
  • Docs: the document.open pages sentence names the file saved without PDF compatibility by @dotCooCoo in #3373
  • Tests: the half-form test uses only a fallback face that forms Ka's half form (#2670) by @dotCooCoo in #3376
  • Type: a character typed with AltGr while editing text runs no command by @dotCooCoo in #3382
  • Tests: the data set export test checks the whole file in a folder emptied first (#2969) by @dotCooCoo in #3389
  • Data Recovery: the recovery folders are owner-only on Unix by @oracola91 in #3406
  • Docs: localization parity row counts match the catalogs on main by @dotCooCoo in #3414
  • ICC: all built-in profiles are checked for aligned sizes and tags by @KnottyDyes in #3418
  • Docs: localization parity lists the Dutch, Danish and Indonesian catalogs by @dotCooCoo in #3438
  • Library panels: a persistent panel whose file is gone stays listed as missing by @dotCooCoo in #3368
  • Brushes: dragging a brush reorders it within its type by @dotCooCoo in #3369
  • Effects: expanded, flattened and exported art keeps the random Transform the canvas drew by @dotCooCoo in #3374
  • Brushes: renaming or deleting a brush updates every stroke that uses it by @dotCooCoo in #3385
  • Dialogs: sliders step their field's number with the arrow keys by @dotCooCoo in #3388
  • Brushes: New Brush asks for the type and opens its Brush Options by @dotCooCoo in #3390
  • Symbols: F8 opens Symbol Options for a new symbol from the selection by @dotCooCoo in #3397
  • Type: Optical Margin Alignment hangs punctuation in right-to-left paragraphs by @dotCooCoo in #3394
  • G4: No Break keeps marked characters on one line by @nrq6993-a11y in #3398
  • Brush Options: Tips shows each colorization method on a sample by @dotCooCoo in #3402
  • Threaded text: type on a path threads, mixed with area type by @lehni in #3408
  • Threaded text: releasing a frame from a longer thread no longer duplicates its text by @lehni in #3409
  • G4: Fractional Widths rounds a type object's advances to whole points by @nrq6993-a11y in #3411
  • EPS/.ai editing data: type keeps stacked art styles as live appearance by @flamesquirrel in #3419
  • Print: JIS B4/B5 and Japanese paper sizes (はがき・封筒・四六判) by @midasdf in #3422
  • PDF export: PDF and .ai files carry File Info's copyright status, notice and URL by @dotCooCoo in #3427
  • Tabs: a stop placed or moved on the ruler lands on a whole point by @dotCooCoo in #3433
  • Place: Word's low, medium and high kashida justification sets Insert Kashidas by @dotCooCoo in #3434
  • Brushes: New Brush and Bristle Brush Options take a bristle brush name of at most 31 characters by @dotCooCoo in #3312
  • Keyboard Shortcuts: each Align and Distribute button of the Align panel can be given a key by @dotCooCoo in #3317
  • Artboards: the Artboards panel locks an artboard and the art on it by @dotCooCoo in #2592
  • Fix #2995: reorder grouped panel tabs by dragging within the tab strip by @nrq6993-a11y in #3000
  • G2: Effect › Artistic › Dry Brush raster filter by @nrq6993-a11y in #3026
  • G1: Cmd+Alt temporarily lends Group Selection by @nrq6993-a11y in #3053
  • G2: Effect › Pathfinder › Hard Mix live effect by @nrq6993-a11y in #3061
  • G2: Texturizer Load Texture in effect dialog by @nrq6993-a11y in #3070
  • G5: Pattern brush Key Color eyedropper in Brush Options by @nrq6993-a11y in #3075
  • G1: Live Corners relative corner rounding (#1144) by @nrq6993-a11y in #3091
  • G4: Scale Text Attributes bakes object scale into type sizes by @nrq6993-a11y in #3101
  • G4: Paragraph panel indents and spacing show blank when paragraphs differ by @nrq6993-a11y in #3136
  • G12: Honor Preferences › Devices › Enable Touch Workspace by @nrq6993-a11y in #3139
  • Commands: an index of 2^32 or more no longer wraps around on 32-bit builds by @dotCooCoo in #3292
  • Fix #2178: Pathfinder Unite groups disconnected islands for Ungroup by @nrq6993-a11y in #2970
  • G1: Properties: Edit Clipping Path and Edit Contents for one clip group by @addibble in #3430
  • Document Info: a Repeat Objects category lists the document's repeats by @dotCooCoo in #3445
  • Add lighting presets to 3D effects by @alpha-rock in #3442
  • Type: ruby (ふりがな) for live text by @midasdf in #3448
  • Commands: a boolean or number given as text is refused by @dotCooCoo in #3428
  • PDF import: letter-spaced text keeps its word spaces by @KnottyDyes in #3417
  • Text: an embedder of the egui panels may leave the bundled fonts out by @addibble in #3431
  • Variables: Load Variable Library… reads a variable library's text variables and data sets by @dotCooCoo in #2853
  • G2: Effect › Artistic › Palette Knife raster filter by @nrq6993-a11y in #3038
  • G2: Effect › Artistic › Paint Daubs raster filter by @nrq6993-a11y in #3032
  • G2: Effect › Artistic › Underpainting raster filter by @nrq6993-a11y in #3035
  • G2: Effect › Artistic › Rough Pastels raster filter by @nrq6993-a11y in #3044
  • Type on a path: right-to-left text that overflows shows its start by @lehni in #3415
  • G2: Effect › Artistic › Colored Pencil raster filter by @nrq6993-a11y in #3028
  • i18n: the message scan reads errors made with bad() and error variants, and new ones need rows by @dotCooCoo in #2708
  • G4: System Layout spaces every text object in whole points by @nrq6993-a11y in #3412
  • G2: Effect › Pathfinder › Soft Mix blends overlapping CMYK fills by @nrq6993-a11y in #3063
  • 3343: recognize PageMaker .pmd on open with a clear message by @nrq6993-a11y in #3452
  • Canvas: each update copies the rendered frame whole instead of pixel by pixel by @lehni in #3453
  • Character panel Tate-chu-yoko marks vertical type as a horizontal block by @nrq6993-a11y in #3399
  • G2: Effect › Sketch › Torn Edges raster filter by @nrq6993-a11y in #3010
  • G2: Effect › Artistic › Fresco raster filter by @nrq6993-a11y in #3096
  • Plug-ins: filters read and set effects and stroke styles (G17) by @KaboomFox in #3174
  • G4: Mark Snap to Glyph done in parity docs and test the menu toggle by @nrq6993-a11y in #3456
  • Recolor: recolor.apply takes a model option for the new colour's model (#2170) by @vangel76 in #2520
  • Live Paint: the Live Paint tools and livePaint.fill skip hidden faces by @dotCooCoo in #3460
  • Expand stroke: compact plain stroke spines before outlining by @nrq6993-a11y in #3457
  • Shape Builder: Gap Detection and Tool Options (#2523) by @vangel76 in #2526
  • Fix Eyedropper styling for highlighted text ranges by @mockydevs in #3466
  • UI.7: workspaces keep their layout changes by @gorkematlyn in #3279
  • UI.6: dock panels into any dock group by @gorkematlyn in #3280
  • UI.8: collapse dock groups to their tabs by @gorkematlyn in #3281
  • Character: Character Direction sets the selected characters left to right or right to left by @dotCooCoo in #3436
  • Type: the vertical ruby test passes with craft-fonts' Shippori Mincho by @dotCooCoo in #3477
  • Blend: Ease In / Ease Out and separate Color Ease in Blend Options (#1124) by @vangel76 in #2539
  • Canvas: an edit redraws only the area it changed by @lehni in #3461
  • Save As: the suggested extension typed in another case gets the picked type's by @dotCooCoo in #3481
  • G11: Align panel moves ruler guides to artboard (#3463) by @nrq6993-a11y in #3483
  • PDF export: a 16-bit PNG is written at 8 bits for PDF 1.3 and 1.4 instead of failing the export by @dotCooCoo in #3464
  • Tests: the data set export test fails when its folder cannot be emptied (#3389) by @dotCooCoo in #3486
  • Export: EPS, legacy .ai, EMF/WMF and DXF give one note for images that can't be decoded by @dotCooCoo in #3482
  • Ellipse pie angles in Transform and Properties (#3451) by @nrq6993-a11y in #3468
  • security: enforce HTTPS on curl downloads (SonarCloud S6506) by @dylanmtaylor in #3475
  • Use chrono instead of hand-rolled UTC conversion by @dylanmtaylor in #3387
  • Commands: Transform Each, artboards and more refuse a boolean or number given as text by @dotCooCoo in #3487
  • Export As: a held Enter doesn't confirm the options; exporters get their file by @KaboomFox in #3488
  • Render: moved type with mitred strokes redraws where its spikes reach by @lehni in #3484
  • ui: Effect Gallery dialog (browse raster filters and apply a stack) by @nrq6993-a11y in #2883
  • Library panels: Locate Library… refuses a panel whose library is there by @dotCooCoo in #3490
  • Tests: the Expand Appearance reply test fails when the reply leaves out the expanded object (#3374) by @dotCooCoo in #3491
  • i18n: add Turkish (tr) localization by @Muratv07 in #2581
  • G11: Copy fill/stroke by dragging between proxies (#3467) by @nrq6993-a11y in #3492
  • Fix #3465: Swatch Libraries Other Library lists .ase on Linux by @nrq6993-a11y in #3493
  • Commands: path.create with path data refuses closed given as text, and the grids refuse a count by @dotCooCoo in #3499
  • Artboards: Rename opens on a selected artboard after a Ctrl/Cmd double-click or a paste by @dotCooCoo in #3500
  • Support dragging editable artwork between document tabs by @mockydevs in #3479
  • i18n(ja): Keyboard Shortcuts editor and the Print overprint note by @C0uki in #3501
  • Fix #3480: pattern edit preview honors Overlap stacking by @nrq6993-a11y in #3498
  • Add shared presets and artwork fitting to Artboard Options by @FractalEncrypt in #3277
  • UI: an embedder of the egui panels binds their font families without shipping their faces by @addibble in #3512
  • Fix #3455: Home recent reopen focuses existing document by @nrq6993-a11y in #3502
  • Fix #3395: color book library tabs use file name by @nrq6993-a11y in #3518
  • Fix #3494: translatable package status message by @nrq6993-a11y in #3506
  • Library panels: Locate Library… reads a missing library whose panel isn't persistent by @dotCooCoo in #3520
  • G4: Mixed paragraph composer menu checks by @nrq6993-a11y in #3523
  • PDF/X-1a and X-3: flattening keeps a CMYK document's inks where it rasterizes (#2160) by @odgrim in #3524
  • G11: Open Arc tool options on canvas click by @nrq6993-a11y in #3507
  • Rename the Preferences "Performance & Storage" category to "Storage" (#3410) by @dennisklappe in #3469
  • G11: Color Picker and popover Fill/Stroke proxy drags (#3440) by @nrq6993-a11y in #3533
  • Type: show recently used fonts in font pickers (#3515) by @MorningFrog in #3535
  • Type on a Path hits filled paths without a stroke (#3505) by @nrq6993-a11y in #3534
  • G4: Mixed paragraph Hyphenate checkbox by @nrq6993-a11y in #3537
  • G4: Mixed paragraph kinsoku and mojikumi dropdowns by @nrq6993-a11y in #3539
  • Render: moved stretched type redraws where its strokes reach by @lehni in #3541
  • G4: Mixed Justification dialog fields by @nrq6993-a11y in #3542
  • Fix #2103: arrow keys with the Artboard tool move the selected artboards and their art by @Taha-Mahmoodi in #3549
  • Fix #3093: panel scroll bars take a column of their own instead of covering controls by @Taha-Mahmoodi in #3550
  • Fix #2452: panning or zooming over detailed art no longer hit-tests it every frame by @Taha-Mahmoodi in #3551
  • Fix #3443: the Layers list's scroll bar no longer covers the rows' selection marks by @Taha-Mahmoodi in #3554
  • Artboards: the active artboard follows the Artboard tool after Paste, Cut and tool.setOption by @dotCooCoo in #3557
  • Fix Recolor Artwork Edit overflow with large palettes by @makesomethingshit in #3476
  • Package: File › Package collects and writes the package on the background thread by @dotCooCoo in #3560
  • README: the app icon above the title by @bflatastic in #3583
  • Gradient mesh: each tessellated quad shades between its corner colours, no banding by @bflatastic in #3609
  • Export: a typed extension of a format the export doesn't write is replaced by @dotCooCoo in #3608
  • Fix EPS counted metadata reads after CRLF line endings by @bflatastic in #3614
  • AF.5: Affinity import — strokes, text decoration, text placement, outline effects, CMYK photos by @dwetscher in #3548
  • Fix #3545: draw_path and draw_shape with a paint the engine refuses leave the document unchanged by @Taha-Mahmoodi in #3611
  • Fix #3370: stepping a number field stops at its bounds: a stroke weight at 0, a miter limit at 1 by @Taha-Mahmoodi in #3612
  • Fix #3544: an SVG of one artboard on its own has the artboard's name as its title by @Taha-Mahmoodi in #3613
  • i18n(ka): Georgian for 7 strings added since #2045 by @devius in #3616
  • Effects: Sketch › Conté Crayon draws the dark areas in a black crayon and the light areas in a white one on textured paper by @Taha-Mahmoodi in #3629
  • CLI: run --commands reads the steps from a JSON file or standard input (#3147) by @Taha-Mahmoodi in #3630
  • Automation: --automation-read-root and --automation-write-root may each be given more than once (#3546) by @Taha-Mahmoodi in #3631
  • Place: Link keeps a placed PDF or .ai linked to its file by @dotCooCoo in #3496
  • Gradients: Dither in the Gradient panel draws a gradient fill with fine noise that hides banding by @Taha-Mahmoodi in #3637
  • Shortcuts: a command on Cmd+Enter or Cmd+Escape runs without the tool's Enter or Escape by @dotCooCoo in #3638
  • Fix Spiral tool click options dialog by @MiQ71 in #3636
  • Fix #3623: a word gap between two sizes reads as a space in PDF import by @pat26-dotcom in #3641
  • Package: a file the writer refuses is named once in the error by @dotCooCoo in #3647
  • G4: Mixed paragraph direction leaves direction buttons unselected by @nrq6993-a11y in #3648
  • G4: Mixed Hyphenation dialog fields by @nrq6993-a11y in #3649
  • Restore and remember maximized window state by @nrq6993-a11y in #3660
  • G8: Regression test for art style filter cap by @nrq6993-a11y in #3662
  • Shape Builder: Pick Color From Artwork takes the look where the drag starts, else where it ends by @dotCooCoo in #3664
  • Gradients: dithered fills sample only what shows; review follow-ups to #3637 by @Taha-Mahmoodi in #3668
  • G12: honor Use Low Resolution Proxy for Linked EPS (#394) by @nrq6993-a11y in #2975
  • Artboards: an action or Batch… that reverts or switches documents keeps the active artboard by @dotCooCoo in #3670
  • Type: colour emoji fonts with bitmap glyphs draw and export by @lehni in #3561
  • Fix #3646: display PDF document title by @MiQ71 in #3667
  • Package: reads placed pages and document previews only for the options that use them by @dotCooCoo in #3681
  • SVG import: read the text once for the prepass's markers, with the data URLs left out by @addibble in #3677
  • Gradients: paint.setStroke refuses a dithered gradient when "swatch" is null by @Taha-Mahmoodi in #3682
  • Wrap to_hsb hue of 360 back to 0 for near-red colours by @Silvertree2010 in #3683
  • SVG import: images in images share the depth cap, SVGZ images one unpacking cap (#3562, #3563) by @odgrim in #3676
  • Gradients: Method › Perceptual mixes a gradient's colours in OKLab; SVG and PDF write it as an image by @Taha-Mahmoodi in #3684
  • Shape Builder: in merge mode, a click on a stroke splits the path there by @dotCooCoo in #3665
  • Save for Web: initialize from the active artboard by @makesomethingshit in #3634
  • Import: type on a closed path keeps its wrapped end bracket by @ham9zah in #3685
  • SVG import: leave out a data URL inside url(…) too, and jump over each one by @addibble in #3688
  • Map pen barrel buttons before egui-winit drops them by @nrq6993-a11y in #3659
  • Accept an explicit leading plus sign in Unit::parse by @Silvertree2010 in #3690

New Contributors

Full Changelog: v0.14.0...v0.15.0

Don't miss a new vectorcraft release

NewReleases is sending notifications on new releases.