Difference between revisions of "Release notes/1.4"

From Inkscape Wiki
Jump to navigation Jump to search
m (Fix whitespace mess created by previous change.)
 
(14 intermediate revisions by the same user not shown)
Line 32: Line 32:
* '''Customizable handles:''' Power users with CSS knowledge can now customize the styling and basic shape of all the handles!
* '''Customizable handles:''' Power users with CSS knowledge can now customize the styling and basic shape of all the handles!
* '''Fast image clipping with the Shape Builder:''' raster graphics can now be clipped into multiple sections using the Shape Builder.
* '''Fast image clipping with the Shape Builder:''' raster graphics can now be clipped into multiple sections using the Shape Builder.
* '''There's even more:''' new templates for folding booklets, additional options in Ruler and Taper Stroke LPE, preview in Spray tool, many new command line options, updated translations and many bug fixes.
* '''Affinity Designer File Import'''
* '''Support for internal links in exported PDF files'''
* '''A whole new icon set'''
* '''There's even more:''' faster extensions, new templates for folding booklets, additional options in Ruler and Taper Stroke LPE, new keyboard shortcuts, changed node deletion behavior, preview in Spray tool, many new command line options, more supported color palette formats (e.g. CIELAB, Adobe Color Book and Adobe Swatch Exchange), updated translations and many bug fixes.


== Canvas ==
== Canvas ==
Line 38: Line 41:
=== Guides ===
=== Guides ===


When creating a new guide, all guides are now unlocked, so the new guide can be moved and adjusted freely ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5814 MR #5814]).
When '''creating a new guide, all guides are now unlocked''', so the new guide can be moved and adjusted freely ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5814 MR #5814]).


== Tools ==
== Tools ==
Line 44: Line 47:
=== General ===
=== General ===


Toolbars now try to make use of the available space by not hiding options in dropdown menus when there's enough space. Instead, they are sorted into multiple, dropdown menus, when the window is shrunk or there is not enough space.  
Toolbars now try to make use of the available space by '''not hiding options''' in dropdown menus when there's enough space. Instead, they are sorted into multiple dropdown menus, when the window is shrunk or there is not enough space.  


Previously, any options that did not fit went into the same small arrow dropdown at the end of the toolbar and were hard to discover.  
Previously, any options that did not fit went into the same small arrow dropdown at the end of the toolbar and were hard to discover.  
Line 52: Line 55:
=== Node Tool ===
=== Node Tool ===


* The mouse/keyboard shortcut for converting a curved path segment to a straight line has been changed from <kbd>Ctrl+Click</kbd> to <kbd>Alt+Double-click</kbd> as a fix to the double-click action of the 'delete segment' command not being recognized correctly ([https://gitlab.com/inkscape/inkscape/-/issues/4984 Bug #4984], [https://gitlab.com/inkscape/inkscape/-/merge_requests/6504 MR #6504]).
* The mouse/keyboard shortcut for '''converting a curved path segment to a straight line''' has been changed from <kbd>Ctrl+Click</kbd> to <kbd>Alt+Double-click</kbd> as a fix to the double-click action of the 'delete segment' command not being recognized correctly ([https://gitlab.com/inkscape/inkscape/-/issues/4984 Bug #4984], [https://gitlab.com/inkscape/inkscape/-/merge_requests/6504 MR #6504]).
* Deleting a node now behaves differently again ([https://gitlab.com/inkscape/inkscape/-/issues/4984 Bug #4984], [https://gitlab.com/inkscape/inkscape/-/merge_requests/6285 MR #6285], [https://gitlab.com/inkscape/inkscape/-/merge_requests/6635 MR #6635]). With the preference option 'Edit > Preferences > Node tool: Deleting node preserves shape' active, Inkscape will use its node sharpness autodetection to decide whether the shape will be kept, or the node will be removed without adjusting the adjacent nodes' handles. With the option inactive, Inkscape will behave like Inkscape 1.2 (no autodetection, shape is kept when pressing Del, straight lines with Ctrl + Del).
* '''Deleting a node''' now behaves differently again ([https://gitlab.com/inkscape/inkscape/-/issues/4984 Bug #4984], [https://gitlab.com/inkscape/inkscape/-/merge_requests/6285 MR #6285], [https://gitlab.com/inkscape/inkscape/-/merge_requests/6635 MR #6635]). With the preference option <code>Edit Preferences Node tool: Deleting node preserves shape</code> active, Inkscape will use its node sharpness autodetection to decide whether the shape will be kept, or the node will be removed without adjusting the adjacent nodes' handles. With the option inactive, Inkscape will behave like Inkscape 1.2 (no autodetection, shape is kept when pressing <kbd>Del</kbd>, straight lines with <kbd>Ctrl + Del</kbd>).


{| class="wikitable"
{| class="wikitable"
Line 60: Line 63:
! Keys pressed !! Curve is (almost) cusp !! Curve is smooth  
! Keys pressed !! Curve is (almost) cusp !! Curve is smooth  
|-
|-
| Del + Preference for keeping shape is active || Adjacent handles will not be adjusted || Adjacent handles will be adjusted to try and keep the shape
| <kbd>Ctrl + Del</kbd> + any preference setting || colspan="2" | Node is removed, a straight line connects the remaining nodes
|-
|-
| Ctrl + Del + Preference for keeping shape is active || Adjacent handles will be retracted, producing a straight line || Adjacent handles will be retracted, producing a straight line
| <kbd>Del</kbd> + Preference for keeping shape is active (default) || Adjacent handles will not be adjusted || Adjacent handles will be adjusted to try and keep the shape
|-
|-
| Del + Preference for keeping shape is not active || Adjacent handles will be adjusted to try and keep the shape || Adjacent handles will be adjusted to try and keep the shape
| <kbd>Shift + Del</kbd> + Preference for keeping shape is active || Adjacent handles will be adjusted to try and keep the shape || Adjacent handles will not be adjusted
|-
|-
| Ctrl + Del + Preference for keeping shape is not active || Adjacent handles will be retracted, producing a straight line || Adjacent handles will be retracted, producing a straight line
| <kbd>Del (with or without Shift)</kbd> + Preference for keeping shape is not active (pre-1.3 behavior) || colspan="2" | Adjacent handles will be adjusted to try and keep the shape
|}
|}


=== Pen Tool ===
=== Pen Tool ===


A new option has been added to automatically convert the currently drawn shape to guides, allowing users to 'draw' guides instead of dragging them out of the rulers. It comes without a keyboard shortcut, but you can set one in the preferences ([https://gitlab.com/inkscape/inkscape/-/merge_requests/6308 MR #6308]).
A new option has been added to automatically '''convert the currently drawn shape to guides''', allowing users to 'draw' guides instead of dragging them out of the rulers. It comes without a keyboard shortcut, but you can set one in the preferences ([https://gitlab.com/inkscape/inkscape/-/merge_requests/6308 MR #6308]).


=== Rectangle Tool ===
=== Rectangle Tool ===


A new mode to only draw squares with Alt + Ctrl has been added to the tool ([https://gitlab.com/inkscape/inkscape/-/merge_requests/6199 MR #6199]).
A new mode to '''only draw squares''' with <kbd>Alt + Ctrl</kbd> has been added to the tool ([https://gitlab.com/inkscape/inkscape/-/merge_requests/6199 MR #6199]).


=== Selector Tool & Node Tool ===
=== Selector Tool & Node Tool ===


* In Edit > Preferences > Behavior > Steps, an option has been added to change how moving selected objects / nodes with the arrow keys works when the canvas is rotated (Arrow keys move object relative to screen). If you're working with a rotated canvas, now, by default, the arrow keys will move the selection horizontally and vertically relative to the screen, not to the rotated document. This allows to work more intuitively while the canvas is rotated. Disabling the option will restore the previous behavior ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5031 MR #5031]).
* In <code>Edit Preferences Behavior ➞ Steps</code>, an option has been added to change how '''moving selected objects / nodes with the arrow''' keys works '''when the canvas is rotated''' (Arrow keys move object relative to screen). If you're working with a rotated canvas, now, by default, the arrow keys will move the selection horizontally and vertically relative to the screen, not to the rotated document. This allows to work more intuitively while the canvas is rotated. Disabling the option will restore the previous behavior ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5031 MR #5031]).
* In the preferences settings for both tools, options for changing the active layer and active page when using the tool to select an object have been added. The Selector tool will change both active layer and active page, while the Node tool will change neither, by default. Other tools (Text tool, Rectangle tool, …) do not change either layer or page when being used (but they can, if you edit the preferences.xml file in a text editor, [https://gitlab.com/inkscape/inkscape/-/merge_requests/5257 MR #5257]).
* In the preferences settings for both tools, '''options for changing the active layer and active page''' when using the tool to select an object have been added. The Selector tool will change both active layer and active page, while the Node tool will change neither, by default. Other tools (Text tool, Rectangle tool, …) do not change either layer or page when being used (but they can, if you edit the <code>preferences.xml</code> file in a text editor, [https://gitlab.com/inkscape/inkscape/-/merge_requests/5257 MR #5257]).


=== Shape Builder Tool ===
=== Shape Builder Tool ===
Line 86: Line 89:
Several improvements were made to the Shape Builder ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5428 MR #5428]):
Several improvements were made to the Shape Builder ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5428 MR #5428]):


* The Shape Builder tool can now make use of raster graphics, too. Any paths selected together with a raster (pixel) graphic will now function as clipping paths, their colors are not preserved - unlike when you have only paths in the selection. The resulting image parts use clipped clones of the image, to keep the file size small and improve performance. If you want to edit them, you need to unlink the clones.
* The Shape Builder tool can now make use of '''raster graphics''', too. Any paths selected together with a raster (pixel) graphic will now function as '''clipping paths''', their colors are not preserved - unlike when you have only paths in the selection. The resulting image parts use clipped clones of the image, to keep the file size small and improve performance. If you want to edit them, you need to '''unlink the clones'''.
* An option for the transparency level of the original drawing has been added (the eye icon opens a popup slider).
* An option for the '''transparency level''' of the original drawing has been added (the eye icon opens a popup slider).
* Optionally, it is now possible to keep a copy of the original objects after the Shape Builder's operation. This option is deactivated by default.  
* Optionally, it is now possible to '''keep a copy''' of the original objects after the Shape Builder's operation. This option is deactivated by default.  


[[File:Inkscape_lgi0590pMq-ezgif.com-optimize_(1).gif|frame|center|Using the Shape Builder Tool to quickly split a raster graphic into multiple parts]]
[[File:Inkscape_lgi0590pMq-ezgif.com-optimize_(1).gif|frame|center|Using the Shape Builder Tool to quickly split a raster graphic into multiple parts]]
Line 94: Line 97:
=== Spray Tool ===
=== Spray Tool ===


* The Spray Tool now shows an outline preview of the next item that it is going to spray, including its shape, rotation and size. The preview is only visible when the tool is not currently spraying. That way, you can choose where to place the next item (with a single click instead of holding the mouse button down). It is possible to change the previewed (soon-to-be-sprayed) item by right-clicking and then moving the mouse by a tiny amount ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5375 MR #5375]).
* The Spray Tool now shows an '''outline preview of the next item''' that it is going to spray, including its shape, rotation and size. The preview is only visible when the tool is not currently spraying. That way, you can choose where to place the next item (with a '''single click''' instead of holding the mouse button down). It is possible to change the previewed (soon-to-be-sprayed) item by '''right-clicking and then moving the mouse''' by a tiny amount ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5375 MR #5375]).
* The option to only spray non-overlapping objects now yields faster results through an updated spraying algorithm ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5766 MR #5766]).
* The option to only '''spray non-overlapping objects now yields faster results''' through an updated spraying algorithm ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5766 MR #5766]).


[[File:Spray tool 1.4.gif|frame|center|Choosing the next item to spray]]
[[File:Spray tool 1.4.gif|frame|center|Choosing the next item to spray]]
Line 101: Line 104:
== Import / Export ==
== Import / Export ==


==== PDF Export ====
=== New Import Formats ===


PDF export now supports internal links (going from one part of the file to another part of the same file, weblinks were supported since Inkscape 1.0). This can be used for creating Tables of Contents, for example ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5237 MR #5237]).
==== Affinity Designer File Import ====


An importer for the native file format of '''Affinity Designer (*.afdesign)''' was added as Manpreet Singh's '''Google Summer of Code''' project ([https://manpreetsingh.hashnode.dev/gsoc-report-inkaf project report]). Since there is no official documentation for this format available, consider this a best-effort implementation. Please [https://inkscape.org/report report] any files that don't import properly.
==== Computer Graphics Metafaile ====
An importer for '''CGM (Computer Graphics Metafile)''' was added. Support for this old, but ISO-standardized file format had been removed with Inkscape 1.0, but it is back for you now ([https://gitlab.com/inkscape/extensions/-/merge_requests/638 MR extensions#638])!
=== PDF Export ===
PDF export now supports '''internal links''' (going from one part of the file to another part of the same file, weblinks were supported since Inkscape 1.0). This can be used for creating Tables of Contents, for example ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5237 MR #5237]).


== Dialogs ==
== Dialogs ==
Line 110: Line 122:
=== About Inkscape ===
=== About Inkscape ===


* Inkscape's new About Screen is [https://inkscape.org/~Inkonic/%E2%98%85inkscapes-path-artists-blossom Inkonic's "Inkscape's Path–Artist's Blossom"].
* Inkscape's new '''About Screen''' is [https://inkscape.org/~Inkonic/%E2%98%85inkscapes-path-artists-blossom Inkonic's "Inkscape's Path–Artist's Blossom"].
* The About Screen dialog now has the ability to display multiple drawings as a slideshow ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5559 MR #5559]).
* The About Screen dialog now has the ability to display multiple drawings as a '''slideshow''' ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5559 MR #5559]).
* The dialog can now be closed by pressing <kbd>Esc</kbd> ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5860 MR #5860]).
* The dialog can now be closed by pressing <kbd>Esc</kbd> ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5860 MR #5860]).


Line 118: Line 130:
=== Add Layer ===
=== Add Layer ===


The 'Add Layer' dialog now shows the three available options all written out directly as radio buttons, instead of hiding them behind a drop-down selection ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5074 MR #5074]).
The <code>Add Layer</code> dialog now shows the three available '''options all written out''' directly as radio buttons, instead of hiding them behind a drop-down selection ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5074 MR #5074]).


[[File:Imageasdasd awdqwdasda.png | frame | center | New layout of 'Add Layer' dialog]]
[[File:Imageasdasd awdqwdasda.png | frame | center | New layout of 'Add Layer' dialog]]
Line 124: Line 136:
=== Align and Distribute ===
=== Align and Distribute ===


The alignment options field ''"Relative to"'' now hides irrelevant options when only a single item is selected, with 'Page' being the default ([https://gitlab.com/inkscape/inkscape/-/merge_requests/6510 MR #6510]).
The alignment options field <code>Relative to</code> now '''hides irrelevant options''' when only a single item is selected, with <code>Page</code> being the default ([https://gitlab.com/inkscape/inkscape/-/merge_requests/6510 MR #6510]).


[[File:Inkscape PVs5dVVFsh.gif | frame | center | Better presets in 'Align and Distribute' dialog]]
[[File:Inkscape PVs5dVVFsh.gif | frame | center | Better presets in 'Align and Distribute' dialog]]
Line 131: Line 143:
=== Create Anchor (Hyperlink) / Object Properties ===
=== Create Anchor (Hyperlink) / Object Properties ===


To make it easier to select an element in the drawing to link to, a button has been added to the side of the field where the target object's id or the external link must be inserted (Href).  
To make it easier to '''select an element in the drawing to link to''', a '''button''' has been added to the side of the field where the target object's id or the external link must be inserted (<code>Href</code>).  


When you click on that button, your mouse cursor will transform into a little hand icon. When the hand hovers over any object or over an empty area of the page, a small indicator text will tell you the id of that object or page. Clicking on the object will automatically insert that object's id into the href field. That way, you do not need to use the Objects or XML dialog to look up the internal identifier of the object you want to link to ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5221 MR #5221])
When you click on that button, your mouse cursor will transform into a little '''hand icon'''. When the hand hovers over any object or over an empty area of the page, a small indicator text will tell you the id of that object or page. Clicking on the object will '''automatically insert''' that object's id into the href field. That way, you do not need to use the Objects or XML dialog to look up the internal identifier of the object you want to link to ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5221 MR #5221])


[[File:Object-picker.gif | frame | center | Creating clickable links from an object to another page / object]]
[[File:Object-picker.gif | frame | center | Creating clickable links from an object to another page / object]]
Line 141: Line 153:
==== Scale lock ====
==== Scale lock ====


A new toggle button that allows you to change the document's viewbox scale without changing the physical size of its contents has been added ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5993 MR #5993]).
A new toggle button that allows you to '''change the document's viewbox scale''' without changing the physical size of its contents has been added ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5993 MR #5993]).
 
[needs image, and a description of why that is useful]


==== Grids ====
==== Grids ====


The grids subsection in the Document Properties dialog has been overhauled with new grid selector buttons, which automatically add the selected type of grid to the drawing when pressed.   
The grids subsection in the <code>Document Properties</code> dialog has been overhauled with '''new grid selector buttons''', which automatically add the selected type of grid to the drawing when pressed.   


===== Modular Grids =====
===== Modular Grids =====


A new grid type was added that consists of rectangles with optional gaps in between.  
A '''new grid type''' was added that consists of '''rectangles with optional gaps''' in between.  


Height, width, horizontal and vertical gap (also negative for overlapping modules) can be adjusted separately. Each grid module (rectangle) can have its own margin set (negative values for inside margin, positive values for outside margin).
Height, width, horizontal and vertical gap (also negative for overlapping modules) can be adjusted separately. Each grid module (rectangle) can have its own margin set (negative values for inside margin, positive values for outside margin).
Line 159: Line 169:
===== Axonometric grids =====
===== Axonometric grids =====


The angles of axonometric grids can now also be set by indicating the '''ratio''' between the height and width of the rhombus shape that is formed by it. A common angle for isometric games, for example, is 2:1, corresponding to angles like 26,565051 which are difficult to set exactly without the ratio option ([https://gitlab.com/inkscape/inkscape/-/merge_requests/6132 MR #6132]).
The '''angles of axonometric grids''' can now also be set by indicating the '''ratio''' between the height and width of the rhombus shape that is formed by it. A common angle for isometric games, for example, is 2:1, corresponding to angles like 26,565051 which are difficult to set exactly without the ratio option ([https://gitlab.com/inkscape/inkscape/-/merge_requests/6132 MR #6132]).


[[File:Inkscape nkL1NDBuw4.gif|frame|center|Automatically setting an angle starting from a ration for axonometric grids]]
[[File:Inkscape nkL1NDBuw4.gif|frame|center|Automatically setting an angle starting from a ration for axonometric grids]]
Line 165: Line 175:
=== Export Dialog ===
=== Export Dialog ===


* If you enter a file system path to a save location that does not exist, Inkscape now tries to create folders instead of warning the user. Only if that fails, it will give a warning now ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5169 MR #5169]).
* If you enter a file system path to a save location '''that does not exist''', Inkscape now '''tries to create folders instead of warning''' the user. Only if that fails, it will give a warning now ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5169 MR #5169]).
* Each of the two tabs of the dialog (single file, batch export) now features a little icon in addition to the text ([https://gitlab.com/inkscape/inkscape/-/issues/4338 Bug #4338], [https://gitlab.com/inkscape/inkscape/-/merge_requests/6166 MR #6166]).
* Each of the two tabs of the dialog (single file, batch export) now features '''a little icon''' in addition to the text ([https://gitlab.com/inkscape/inkscape/-/issues/4338 Bug #4338], [https://gitlab.com/inkscape/inkscape/-/merge_requests/6166 MR #6166]).
* Batch export options have been clarified ([https://gitlab.com/inkscape/inkscape/-/merge_requests/6544 MR #6544]).
* '''Batch export options have been clarified''' ([https://gitlab.com/inkscape/inkscape/-/merge_requests/6544 MR #6544]).


[[File:Batch export options 1.4.png|frame|center|Improved batch export options with batch prefix and file type suffix]]
[[File:Batch export options 1.4.png|frame|center|Improved batch export options with batch prefix and file type suffix]]
Line 173: Line 183:
=== Extension Gallery ===
=== Extension Gallery ===


When you want to quickly get an overview which extensions are available to you, you can now browse your Inkscape extensions in a gallery similar to the one for filters.  
When you want to quickly get an overview which extensions are available to you, you can now '''browse your Inkscape extensions in a gallery''' similar to the one for filters.  


You can use the search field to quickly find the extension you need. The size of the icons is adjustable. They are currently all still identical placeholders, [https://gitlab.com/inkscape/inbox/-/issues/9907 and we invite you to join us] if you'd like to help. The menu categories can be hidden if you do not need them.
You can use the search field to quickly find the extension you need. The size of the icons is adjustable. They are currently all still identical placeholders, [https://gitlab.com/inkscape/inbox/-/issues/9907 and we invite you to join us if you'd like to help by adding images for them]. The menu categories can be hidden if you do not need them.


When you hover over an extension, the dialog shows you a small info text with either the menu path to the extension, or a description ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5448 MR #5448]).
When you hover over an extension, the dialog shows you a '''small info text''' with either the menu path to the extension, or a description ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5448 MR #5448]).


[[File:Extension gallery 1.4.gif|frame|center|The new Extension Gallery]]
[[File:Extension gallery 1.4.gif|frame|center|The new Extension Gallery]]
Line 185: Line 195:
==== Gradient Editor ====
==== Gradient Editor ====


It is now possible to control the gradient's angle numerically from the Gradient Editor section of the Fill and Stroke dialog. An additional slider allows for changing the angle by simply dragging. A button to rotate the gradient by 90° completes the new angle controls ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5413 MR #5413]).
It is now possible to '''control the gradient's angle numerically''' from the <code>Gradient Editor</code> section of the <code>Fill and Stroke</code> dialog. An '''additional slider''' allows for changing the angle by simply dragging. A '''button to rotate the gradient by 90°''' completes the new angle controls ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5413 MR #5413]).


[[File:7PviQWIu9r.gif|frame|center|The new gradient angle controls in the 'Fill and Stroke' dialog]]
[[File:7PviQWIu9r.gif|frame|center|The new gradient angle controls in the 'Fill and Stroke' dialog]]
Line 191: Line 201:
==== Pattern Editor ====
==== Pattern Editor ====


For users who prefer to have more control when setting the gap between pattern elements, an option has been added to use numerical entry fields (Gap control: precise) instead of the sliders (Gap control: mouse friendly). This allows to add gaps smaller than 20% of the pattern width, in 0.1% steps – and also values larger than 32040%, in case you ever need that pattern rarity! ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5484 MR #5484]).
For users who prefer to have more control when '''setting the gap between pattern elements''', an option has been added to use '''numerical entry fields''' (<code>Gap control: precise</code>) instead of the sliders (<code>Gap control: mouse friendly</code>). This allows to add gaps smaller than 20% of the pattern width, in 0.1% steps – and also values larger than 32040%, in case you ever need that pattern rarity! ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5484 MR #5484]).


[[File:Pattern gap control 1.4.gif|frame|center|Controlling the gap between pattern blocks numerically]]
[[File:Pattern gap control 1.4.gif|frame|center|Controlling the gap between pattern blocks numerically]]
Line 197: Line 207:
=== Filter Gallery ===
=== Filter Gallery ===


The Filter Gallery can be found in the <code>Filters</code> menu. It shows a scrollable (and hideable) list of all filter categories, and a preview image for each filter, applied to a colorful flower image. Your own filters will appear in the category indicated in your filter file, or, if there isn't any, in the <code>Personal</code> category. Inkscape looks for them in a folder named <code>filters</code> in the folder indicated at <code>Edit ➞ Preferences ➞ System: User config</code>. Some community-contributed files for trying this out can be found [https://inkscape.org/gallery/=inkscape-filter-set/ in our website's gallery] ([https://gitlab.com/inkscape/ux/-/issues/208 Bug UX#208], [https://gitlab.com/inkscape/inkscape/-/merge_requests/5448 MR #5448]).
The <code>Filter Gallery</code> can be found in the <code>Filters</code> menu. It shows a scrollable (and hideable) '''list of all filter categories''', and a '''preview image for each filter''', applied to a colorful flower image. '''Your own filters''' will appear in the category indicated in your filter file, or, if there isn't any, in the <code>Personal</code> category. Inkscape looks for them in a folder named <code>filters</code> in the folder indicated at <code>Edit ➞ Preferences ➞ System: User config</code>. Some community-contributed files for trying this out can be found [https://inkscape.org/gallery/=inkscape-filter-set/ in our website's gallery] ([https://gitlab.com/inkscape/ux/-/issues/208 Bug UX#208], [https://gitlab.com/inkscape/inkscape/-/merge_requests/5448 MR #5448]).


[[File:Inkscape YIRwDrcpcO.gif|frame|center|The Filter Gallery with previews and search]]
[[File:Inkscape YIRwDrcpcO.gif|frame|center|The Filter Gallery with previews and search]]
Line 203: Line 213:
=== Layers and Objects ===
=== Layers and Objects ===


When you click on the 'Add' in the Layers and Objects dialog, the 'Add layers' dialog no longer shows up. The button now always adds the new layer above the selected one ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5074 MR #5074]). To name the layer, double-click on its name. The 'Add Layer' dialog is still available from the Layer menu (or with <kbd>Ctrl+Shift+N</kbd>).
When you click on the <code>+</code> button in the <code>Layers and Objects</code> dialog, the <code>Add layers</code> dialog no longer shows up. The button now '''always adds the new layer above the selected one''' ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5074 MR #5074]). To name the layer, double-click on its name. The <code>Add Layer</code> dialog is still available from the <code>Layer</code> menu (or with <kbd>Ctrl+Shift+N</kbd>).


[[File:Inkscape RH105M5BrW.gif|frame|center|Adding new layers faster than ever]]
[[File:Inkscape RH105M5BrW.gif|frame|center|Adding new layers faster than ever]]
Line 209: Line 219:
=== Object Attributes ===
=== Object Attributes ===


This dialog has been removed. Its contents is now available in the Object Properties dialog.
This dialog has been removed. Its contents is now available in the <code>Object Properties</code> dialog.


=== Object Properties ===
=== Object Properties ===


This dialog has been merged with the Object Attributes dialog.  
This dialog has been merged with the <code>Object Attributes dialog</code>.  


It now holds the following information:
It now holds the following information:


* Some properties specific to the selected object type (e.g. rounded corners / width / height for rectangles, number of tips for stars etc.)
* Some '''properties specific to the selected object type''' (e.g. rounded corners / width / height for rectangles, number of tips for stars etc.)
** For paths, it now holds editable path data ([https://gitlab.com/inkscape/inkscape/-/merge_requests/6173 MR #6173], like in XML dialog). This is another step toward [https://gitlab.com/inkscape/ux/-/issues/203 ux#203].
** For paths, it now holds '''editable path data''' ([https://gitlab.com/inkscape/inkscape/-/merge_requests/6173 MR #6173], like in XML dialog). This is another step toward [https://gitlab.com/inkscape/ux/-/issues/203 ux#203].
** For rectangles, corners can be edited separately by adding the Corners Live Path Effect
** For '''rectangles''', corners can be edited separately by adding the <code>Corners Live Path Effect</code>.
** Stars/Polygons can be automatically rotated to their 0° rotation position
** '''Stars/Polygons''' can be '''automatically rotated''' to their 0° rotation position
* Object ID, label, description, title, highlight color, checkboxes for lock and hide status
* Object ID, label, description, title, highlight color, checkboxes for lock and hide status
* Interactivity (scriptable) properties, such as OnClick, OnMouseOver (input JavaScript)
* '''Interactivity (scriptable) properties''', such as OnClick, OnMouseOver (input JavaScript)
* When the selected object is enclosed by a hyperlink (added with 'Add hyperlink (anchor)' in right-click menu), the hyperlink's properties (e.g. href, title, role, target) can be edited in this dialog.
* When the selected object is enclosed by a '''hyperlink''' (added with <code>Add hyperlink (anchor)</code> in right-click menu), the hyperlink's properties (e.g. href, title, role, target) can be edited in this dialog.


[[File:Object properties 1.4.gif|frame|center|The refactored 'Object Properties' dialog]]
[[File:Object properties 1.4.gif|frame|center|The refactored 'Object Properties' dialog]]
Line 229: Line 239:
=== Path Effects ===
=== Path Effects ===


The (optional) button for displaying the older Live Path Effects gallery dialog has been removed along with the dialog. LPEs can now only be selected from the search field / drop down field combination in the Path Effects dialog ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5760 MR #5760]).
The (optional) button for displaying the older <code>Live Path Effects gallery</code> dialog has been removed along with the dialog. LPEs can now only be selected '''from the search field / drop down field combination''' in the <code>Path Effects</code> dialog ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5760 MR #5760]).


=== Preferences ===
=== Preferences ===
Line 235: Line 245:
==== Snapping ====
==== Snapping ====


More options for finetuning snapping preference between grid and guidelines vs. objects and alignment/distribution have been added at Edit > Preferences > Behavior > Snapping.
More options for '''finetuning snapping precedence''' between '''grid and guidelines vs. objects and alignment/distribution''' have been added at <code>Edit Preferences Behavior ➞ Snapping</code>.
These allow you to set grids and / or guidelines as the only available snap target, and to add more snap targets incrementally.
These allow you to set grids and / or guidelines as the only available snap target, and to add more snap targets incrementally.


Line 242: Line 252:
=== SVG Font Editor ===
=== SVG Font Editor ===


The context (right-click) menu entry to 'Sort glyphs' and 'Remove pair' (referring to a kerning pair) have been moved to more discoverable buttons ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5421 MR #5421]).
The context (right-click) menu entry to <code>Sort glyphs</code> and <code>Remove pair</code> (referring to a kerning pair) have been moved to '''more discoverable buttons''' ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5421 MR #5421]).


[[File:Font editor buttons 1.4.png|frame|center|New buttons in 'Font Editor' dialog]]
[[File:Font editor buttons 1.4.png|frame|center|New buttons in 'Font Editor' dialog]]
Line 248: Line 258:
=== Swatches ===
=== Swatches ===


The Swatches (Palettes) dialog has been overhauled ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5606 MR #5606]).  
The <code>Swatches</code> (Palettes) dialog has been overhauled ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5606 MR #5606]).  
It now:


* Color palettes are now selected from a dropdown at the top, instead of a small icon at the bottom.
* Color palettes are now selected '''from a dropdown at the top''', instead of a small icon at the bottom.
* Colors can be searched by their name.
* Colors can be '''searched''' by their name.
* Color palettes can be loaded from a file.
* Color palettes can be '''loaded from a file'''.
* In addition to Gimp Color Palette files, now 'Adobe Color Book' and 'Adobe Swatch Exchange' files are also supported.
* In addition to <code>Gimp Color Palette</code> files, now <code>Adobe Color Book</code> and <code>Adobe Swatch Exchange</code> files are also supported.
* Support for columns: When a palette file defines 'Columns' (in .gpl files, this is indicated by a line like <code>Columns: 9</code> following the name line), the blocks of colors that belong together will stay together (no 'linebreaks' will be added inside any of the blocks), both in the swatches dialog as well as in the palette at the bottom of the Inkscape window.
* Support for '''columns''': When a palette file defines 'Columns' (in <code>.gpl</code> files, this is indicated by a line like <code>Columns: 9</code> following the name line), the blocks of colors that belong together will stay together (no 'linebreaks' will be added inside any of the blocks), both in the <code>Swatches</code> dialog as well as in the palette at the bottom of the Inkscape window.
* A button for accessing the settings, and two buttons for switching between the grid and row view make it easier to adjust the dialog's layout.
* A '''button for accessing the settings''', and '''two buttons for switching between the grid and row view''' make it easier to adjust the dialog's layout.
* Support for color palettes with CIELAB colors has been added.
* Support for '''color palettes with CIELAB colors''' has been added.
* Limited support for color palettes with CMYK colors has been added.
* Limited support for '''color palettes with CMYK colors''' has been added.
* The transformation from CMYK to RGB has been improved, even without a proper ICC profile. <br />
* The transformation '''from CMYK to RGB''' has been improved, even without a proper ICC profile. <br />


[[File:Inkscape 8rZ8VQ4Pyn.gif|frame|center|Refactored 'Swatches' dialog with search field]]
[[File:Inkscape 8rZ8VQ4Pyn.gif|frame|center|Refactored 'Swatches' dialog with search field]]
Line 267: Line 276:
==== General ====
==== General ====


Freshly installed fonts can now be used in Inkscape on Linux, without needing to restart the application. macOS and Windows could not be moved to provide Inkscape with the necessary information ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5240 MR #5240]).
'''Freshly installed fonts''' can now be used in Inkscape on '''Linux''', without needing to restart the application. macOS and Windows could not be moved to provide Inkscape with the necessary information ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5240 MR #5240]).


==== Experimental Alternative User Interface ====
==== Experimental Alternative User Interface ====


An experimental 'Unified font browser' has been added. If it is activated under Edit > Preferences > Interface > Dialogs : Text and Font dialog (requires restart), it will replace the Text and Font dialog with a sortable, filterable, searchable and adjustable list of font previews.  
An experimental <code>Unified font browser</code> has been added. If it is activated under <code>Edit Preferences Interface Dialogs : Text and Font dialog</code> (requires restart), it will replace the <code>Text and Font</code> dialog with a '''sortable, filterable, searchable and adjustable list''' of font previews.  


It supports live applying of fonts.That means any font you select will be applied immediately. The 'Font Attributes' tab and 'Text' tab are available, too [https://gitlab.com/inkscape/inkscape/-/merge_requests/4578 MR #4578].
Any font you select '''will be applied immediately'''. The <code>Font Attributes</code> tab and <code>Text</code> tab are available, too ([https://gitlab.com/inkscape/inkscape/-/merge_requests/4578 MR #4578]).


Specifically, these settings are customizable:
Specifically, these settings are customizable:


* type of preview (rows or grid)
* '''type of preview''' (rows or grid)
* sort order: alphabetical, font weight, font width (condensed - wide)
* '''sort order''': alphabetical, font weight, font width (condensed - wide)
* limit list of fonts to selected font collections
* '''limit list of fonts to selected''' font collections
* scaling of preview
* '''scaling''' of preview
* preview text (choice between some presets, custom text entry for the long (row view) sample and the short (grid view) sample)
* '''preview text contents''' (choice between some presets, custom text entry for the long (row view) sample and the short (grid view) sample)
* whether to show the font name below the preview
* whether to show the '''font name''' below the preview
* in the preferences, the height of the preview lines can be adjusted, as in some cases, fonts look cut off in the list preview
* in the global Inkscape preferences (<code>Edit ➞ Preferences ➞ Interface ➞ Windows ➞ Text and Font dialog: Unified font scale factor</code>), the '''height of the preview lines''' can be adjusted, as in some cases, fonts look cut off in the list preview.


<gallery mode="packed" heights=400px>
<gallery mode="packed" heights=400px>
Line 296: Line 305:
=== Ruler ===
=== Ruler ===


The Ruler Live Path Effect now features several new options:
The <code>Ruler Live Path Effect</code> now features several new options:


* Ruler marks can start from the path at an angle (in degrees, [https://gitlab.com/inkscape/inkscape/-/merge_requests/5749 MR #5749]).  
* '''Ruler marks''' can start from the path '''at an angle''' (in degrees, [https://gitlab.com/inkscape/inkscape/-/merge_requests/5749 MR #5749]).  
* The marks can start at a distance from the path (in percentage of overall mark length, marks are shortened by this amount, [https://gitlab.com/inkscape/inkscape/-/merge_requests/5751 MR #5751]).
* The marks can '''start at a distance''' from the path (in percentage of overall mark length, marks are shortened by this amount, [https://gitlab.com/inkscape/inkscape/-/merge_requests/5751 MR #5751]).


[[File:Inkscape Q6nPooVP1O.gif|frame|center|Adjusting the angles of ruler marks and shifting their start in the Ruler Live Path Effect]]
[[File:Inkscape Q6nPooVP1O.gif|frame|center|Adjusting the angles of ruler marks and shifting their start in the Ruler Live Path Effect]]
Line 305: Line 314:
=== Taper Stroke ===
=== Taper Stroke ===


A new option to 'clamp' (cut off) the path's tip instead of tapering it on the selected end of the path has been added. It's available in the 'Start direction' dropdown in the LPE's settings ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5701 MR #5701]).
A new option to <code>clamp</code> (cut off) the path's tip instead of tapering it on the selected end of the path has been added. It's available in the <code>Start direction</code> dropdown in the LPE's settings ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5701 MR #5701]).


[[File:Inkscape t6Un74IlV8.gif|frame|center|Clamping the path's tip with the Taper Stroke Live Path Effect]]
[[File:Inkscape t6Un74IlV8.gif|frame|center|Clamping the path's tip with the Taper Stroke Live Path Effect]]
Line 311: Line 320:
== Palettes ==
== Palettes ==


* Multiple palettes were updated to contain information about the number of columns for optimal display of the palette ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5647 MR #5647]).
* Multiple palettes were '''updated''' to contain information about the '''number of columns''' for optimal display of the palette ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5647 MR #5647]).
* The 'Web Safe' palette has been removed because of the dust that had already settled on it. Its colors were already included with the 'Web Hex' palette, where they now feature an addition ('(Web-safe)') to their label ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5653 MR #5653]).
* The <code>Web Safe</code> palette has been '''removed''' because of the dust that had already settled on it. Its colors were already included with the <code>Web Hex</code> palette, where they now feature an addition (<code>(Web-safe)</code>) to their label ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5653 MR #5653]).
* The 'Windows XP' palette has been removed because of its age ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5645]).
* The <code>Windows XP</code> palette has been '''removed''' because of its age ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5645]).
* The default preference for the bottom palette's layout has been adjusted to stretch the tiles and to have them laid out in two rows, so the palette looks nicer when you first install Inkscape ([https://gitlab.com/inkscape/inkscape/-/merge_requests/6581 MR #6581]).
* The '''default preference''' for the bottom palette's layout has been adjusted to '''stretch the tiles''' and to have them laid out in '''two rows''', so the palette looks nicer when you first install Inkscape ([https://gitlab.com/inkscape/inkscape/-/merge_requests/6581 MR #6581]).


== Templates ==
== Templates ==


* Folding book templates in A4 and Letter format have been added ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5996 MR #5996]).
* '''Folding booklet templates''' in A4 and Letter format have been added ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5996 MR #5996]).
* Custom templates can now make use of a category and a label ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5996 MR #5996]).
* '''Custom templates''' can now make use of a '''category and a label''' ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5996 MR #5996]).


[[File:Zine template 1.4.png|frame|center|The Zine Booklet template allows you to quickly generate printable folding booklets.]]
[[File:Zine template 1.4.png|frame|center|The Zine Booklet template allows you to quickly generate printable folding booklets.]]
Line 328: Line 337:
=== Customizable Handles ===
=== Customizable Handles ===


The size, color, stroke-width, outline and opacity of on-canvas handles can now be customized, and their shape can be selected from a set of available handle shapes, by copying the CSS file at <code>inkscape/share/ui/node-handles.css</code> into the folder indicated at <code>Edit ➞ Preferences ➞ System: User UI</code> and modifying it. Handles will be updated live in Inkscape as when the file has been saved ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5624 MR #5624]).  
The '''size, color, stroke-width, outline and opacity''' of on-canvas handles can now be customized, and their shape can be selected from a '''set of available handle shapes''', by copying the CSS file at <code>inkscape/share/ui/node-handles.css</code> into the folder indicated at <code>Edit ➞ Preferences ➞ System: User UI</code> and modifying it. Handles will be updated live in Inkscape as when the file has been saved ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5624 MR #5624]).  


[[File:Inkscape vIWVwzkI0T.gif|frame|center|The new default handles]]
[[File:Inkscape vIWVwzkI0T.gif|frame|center|The new default handles]]
Line 334: Line 343:
=== Icons ===
=== Icons ===


A new icon set called is now available for you to select. This new theme, called "Dash" is aimed at covering all of Inkscape's existing features, and reducing complexity on some of the existing icons, while still being explanatory. It also borrows some concepts from industry standard apps. It has 500+ icons, with cursors, scalable and symbolic versions and works on dark and light themes ([https://gitlab.com/inkscape/inkscape/-/merge_requests/6115 MR #6115]).
A '''new icon set''' called <code>Dash</code> is now available for you to select. This new theme reduces complexity on some of the existing icons, while still being explanatory. It also borrows some concepts from other software. It has '''500+ icons''', with '''cursors, scalable and symbolic versions''' and works on '''dark and light themes''' ([https://gitlab.com/inkscape/inkscape/-/merge_requests/6115 MR #6115]).


<gallery mode="packed" heights=400px>
<gallery mode="packed" heights=400px>
Line 343: Line 352:
=== Keyboard Shortcuts ===
=== Keyboard Shortcuts ===


* The shortcuts for "Quick Preview" (<kbd>F</kbd>), "Quick Zoom" (<kbd>Q</kbd>), panning (<kbd>Space</kbd>), "Pen Segment To Line" (<kbd>Shift + L</kbd>), "Pen Segment To Curve" (<kbd>Shift + U</kbd>) and "Pen Segments To Guides" (<kbd>Shift + G</kbd>) are now customizable ([https://gitlab.com/inkscape/inkscape/-/merge_requests/6308 MR #6308]).
* The shortcuts for <code>Quick Preview</code> (<kbd>F</kbd>), <code>Quick Zoom</code> (<kbd>Q</kbd>), panning (<kbd>Space</kbd>), <code>Pen Segment To Line</code> (<kbd>Shift + L</kbd>), <code>Pen Segment To Curve</code> (<kbd>Shift + U</kbd>) and <code>Pen Segments To Guides</code> (<kbd>Shift + G</kbd>) are now customizable ([https://gitlab.com/inkscape/inkscape/-/merge_requests/6308 MR #6308]).
* The macOS-specific carbon.xml keyboard shortcuts file has been removed, as it hasn't been kept up to date for years ([https://gitlab.com/inkscape/inkscape/-/merge_requests/6522 MR #6522]).
* The macOS-specific <code>carbon.xml</code> keyboard shortcuts file has been '''removed''', as it hasn't been kept up to date for years ([https://gitlab.com/inkscape/inkscape/-/merge_requests/6522 MR #6522]).
* Some existing commands that did not have a default shortcut now have one. Note that these will only be available to you if you install Inkscape for the first time, not when upgrading an existing installation. In that case, you can set these manually in <code>Edit > Preferences > Interface > Keyboard</code>, or you can reset your keyboard shortcuts by replacing the file <code>default.xml</code> in your Inkscape user configuration director with a copy of the file <code>inkscape.xml</code> from the <code>keys</code> directory of your Inkscape installation's <code>share</code> directory ([https://gitlab.com/inkscape/inkscape/-/merge_requests/6462 MR #6462]):
* Some existing commands that did not have a default shortcut '''now have one'''. Note that these will '''only be available''' to you if you '''install Inkscape for the first time''', not when upgrading an existing installation. In that case, you can set these manually in <code>Edit Preferences Interface Keyboard</code>, or you can reset your keyboard shortcuts by replacing the file <code>default.xml</code> in your Inkscape user configuration director with a copy of the file <code>inkscape.xml</code> from the <code>keys</code> directory of your Inkscape installation's <code>share</code> directory ([https://gitlab.com/inkscape/inkscape/-/merge_requests/6462 MR #6462]):
 
{| class="wikitable"
{| class="wikitable"
!Command
!Command
Line 363: Line 373:
|}
|}


== Windows-specific Changes ==


== Extensions ==


=== Features ===


== macOS-specific Changes ==
==== New Extensions ====
 
 


== Extensions ==
In addition to the new import formats for <code>*.afdesign</code> and <code>*.cgm</code> files, which are implemented via the extensions subsystem,


=== Features ===
* the  <code>typst formula</code> extension (<code>Extensions ➞ Text ➞ Formula (typst)</code> converts [https://typst.app typst] math markup into a path, and surving a similar purpose as the LaTeX extension ([https://gitlab.com/inkscape/extensions/-/merge_requests/606 MR extensions#606]).


==== New extensions ====
==== Improvements ====


* An importer for the native file format of '''Affinity Designer (*.afdesign)''' was added as @ManpreetXSingh's Google Summer of Code project ([https://manpreetsingh.hashnode.dev/gsoc-report-inkaf project report]). Since there is no official documentation for this format available, consider this a best-effort implementation. Please [https://inkscape.org/report report] any files that don't import properly.
* '''Binary DXF''' files (from Autodesk R13 onwards) can now be imported into Inkscape ([https://gitlab.com/inkscape/extensions/-/merge_requests/629 MR extensions#629], [https://gitlab.com/inkscape/extensions/-/issues/400 Bug extensions#400]).
* An importer for '''CGM (Computer Graphics Metafile)''' was added. Support for this old, but ISO-standardized file format was previously removed with Inkscape 1.0. ([https://gitlab.com/inkscape/extensions/-/merge_requests/638 MR extensions!638])
* The '''QR code''' extension now supports '''multiline text'''. This can be useful if you want to create a vCard or other multiline formats ([https://gitlab.com/inkscape/extensions/-/merge_requests/595 MR extensions#595]).
* The '''Text -> Formula (typst)''' extension converts [https://typst.app typst] math markup into a path, and has a similar function as the LaTeX extension. ([https://gitlab.com/inkscape/extensions/-/merge_requests/606 MR extensions!606])
* The '''Printing Marks''' extension now adds printing marks to all pages of a document ([https://gitlab.com/inkscape/extensions/-/merge_requests/634 MR extensions#634]).
* The '''Deep Ungroup''' extension now provides an option to preserve layers, which is switched off by default ([https://gitlab.com/inkscape/extensions/-/merge_requests/642 MR extensions#642]).


==== Particular extensions ====
==== General Extension Changes ====


* '''Binary DXF''' files (from Autodesk R13 onwards) can now be imported into Inkscape. ([https://gitlab.com/inkscape/extensions/-/merge_requests/629 MR extensions!629], [https://gitlab.com/inkscape/extensions/-/issues/400 extensions#400])
Performance has been improved in many different places:
* The '''QR code''' extension now supports multiline text ([https://gitlab.com/inkscape/extensions/-/merge_requests/595 MR extensions!595]). This can be useful if you want to create a vCard or other multiline formats.
* The '''Printing marks''' extension now adds printing marks to all pages of a document. ([https://gitlab.com/inkscape/extensions/-/merge_requests/634 MR extensions!634])
* The '''Deep Ungroup''' extension now provides an option to preserve groups, which is switched off by default ([https://gitlab.com/inkscape/extensions/-/merge_requests/642 MR extensions!642])


==== General Extension Changes ====
* Usage of '''more efficient internal Python datatypes''' speeds up certain extensions by an order of magnitude ([https://gitlab.com/inkscape/extensions/-/merge_requests/569 MR extensions#569], [https://gitlab.com/inkscape/extensions/-/merge_requests/570 MR extensions#570]).
* Extensions that rely on <code>CubicSuperPath</code> (e.g. all 'Transform path' extensions) will also notice '''significant speedups''' ([https://gitlab.com/inkscape/extensions/-/merge_requests/573 MR extensions#573]).
* Extensions '''reading and interpreting CSS rules''' ([https://gitlab.com/inkscape/extensions/-/merge_requests/579 MR extensions!579]) or evaluating the style cascade ([https://gitlab.com/inkscape/extensions/-/merge_requests/597 MR extensions!597]) are dramatically faster.


* Broad range of performance improvements: Usage of more efficient internal Python datatypes speeds up certain extensions by an order of magnitude ([https://gitlab.com/inkscape/extensions/-/merge_requests/569 MR extensions!569], [https://gitlab.com/inkscape/extensions/-/merge_requests/570 MR extensions!570]). Extensions that rely on <code>CubicSuperPath</code> (e.g. all 'Transform path' extensions) will also notice significant speedups ([https://gitlab.com/inkscape/extensions/-/merge_requests/573 MR extensions!573]). Extensions reading and interpreting CSS rules ([https://gitlab.com/inkscape/extensions/-/merge_requests/579 MR extensions!579]) or evaluating the style cascade  ([https://gitlab.com/inkscape/extensions/-/merge_requests/597 MR extensions!597]) are dramatically faster. These improvements apply to all existing extensions, usually extension authors don't have to modify their code.
These improvements apply to all existing extensions that make use of the corresponding parts of the <code>inkex</code> API, so also third-party extension authors don't have to modify their code to have their extensions benefit from the speedups.


=== Bugs fixed ===
=== Bugs fixed ===


==== Particular extensions ====
==== Particular Extensions ====


* The '''Add Nodes''' extension now gives symmetric results on arcs, and also splits arcs into smaller arcs. ([https://gitlab.com/inkscape/extensions/-/merge_requests/585 MR extensions!585])
* The <code>Add Nodes</code> extension now gives '''symmetric results''' on arcs, and also splits arcs into smaller arcs ([https://gitlab.com/inkscape/extensions/-/merge_requests/585 MR extensions#585]).
* The '''Color''' extensions now also work on Mesh gradients ([https://gitlab.com/inkscape/extensions/-/merge_requests/624 MR extensions!624])
* The extensions that '''modify colors''' now also work on '''Mesh gradients''' ([https://gitlab.com/inkscape/extensions/-/merge_requests/624 MR extensions#624]).
* The '''Convert to dashes''' extension is now also more precise for arcs and furthermore doesn't visually change the output for closed subpaths where a dash crosses over the closing position([https://gitlab.com/inkscape/extensions/-/merge_requests/585 MR extensions!585])
* The <code>Convert to dashes</code> extension is now also more precise for arcs and furthermore doesn't visually change the output for closed subpaths where a dash crosses over the closing position ([https://gitlab.com/inkscape/extensions/-/merge_requests/585 MR extensions#585]).
* The '''DXF export''' extension no longer draws invisible elements ([https://gitlab.com/inkscape/extensions/-/merge_requests/609 MR extensions!609]) and doesn't trip over SVG comments anymore ([https://gitlab.com/inkscape/extensions/-/merge_requests/623 MR extensions!623]).
* The <code>DXF export</code> extension '''no longer draws invisible elements''' ([https://gitlab.com/inkscape/extensions/-/merge_requests/609 MR extensions#609]) and doesn't trip over SVG comments anymore ([https://gitlab.com/inkscape/extensions/-/merge_requests/623 MR extensions#623]).
* A freeze in the details view of the '''Extensions manager''' was fixed ([https://gitlab.com/inkscape/extras/extension-manager/-/issues/19 MR extensions-manager#19])
* A '''freeze''' in the details view of the <code>Extensions manager</code> was fixed ([https://gitlab.com/inkscape/extras/extension-manager/-/issues/19 MR extensions-manager#19]).
* The '''Measure''' tool (Length measurement) is now more precise for paths containing arcs, e.g. an arc with radius 50mm now has its length reported as <code>314.1593</code> (correct value: 314.15926...) instead of <code>314.1602</code> ([https://gitlab.com/inkscape/extensions/-/merge_requests/585 MR extensions!585])
* The <code>Measure Path</code> extension (Length measurement) is now more precise for paths containing arcs, e.g. an arc with a radius of 50mm now has its length reported as <code>314.1593</code> (correct value: 314.15926...) instead of <code>314.1602</code> ([https://gitlab.com/inkscape/extensions/-/merge_requests/585 MR extensions#585]).
* The '''N-up layout''' extension could in some cases generate incorrect sizes, which is fixed ([https://gitlab.com/inkscape/extensions/-/merge_requests/610 MR extensions!610])
* The <code>N-up layout</code> extension could in some cases generate incorrect sizes, which is fixed ([https://gitlab.com/inkscape/extensions/-/merge_requests/610 MR extensions#610])
* The '''Plotter''' (HPGL) extension now lifts the pen at the end more reliably ([https://gitlab.com/inkscape/extensions/-/merge_requests/635 MR extensions!635], [https://gitlab.com/inkscape/extensions/-/issues/444 extensions#444], [https://gitlab.com/inkscape/extensions/-/issues/520 extensions#520]), and paths with multiple subpaths are now fully drawn ([https://gitlab.com/inkscape/extensions/-/merge_requests/527 MR extensions!527], [https://gitlab.com/inkscape/extensions/-/issues/522 extensions#522])
* The <code>Plotter</code> (HPGL) extension now '''lifts the pen at the end more reliably''' ([https://gitlab.com/inkscape/extensions/-/merge_requests/635 MR extensions#635], [https://gitlab.com/inkscape/extensions/-/issues/444 Bug extensions#444], [https://gitlab.com/inkscape/extensions/-/issues/520 Bug extensions#520]), and paths with multiple subpaths are now fully drawn ([https://gitlab.com/inkscape/extensions/-/merge_requests/527 MR extensions!527], [https://gitlab.com/inkscape/extensions/-/issues/522 Bug extensions#522]).


==== All extensions ====
==== All Extensions ====


* Extensions accessing the text of a text element through <code>TextElement.get_text()</code> will now also receive the contents of the nested <code>tspan</code>s. ([https://gitlab.com/inkscape/extensions/-/merge_requests/584 MR extensions!584], [https://gitlab.com/inkscape/extensions/-/merge_requests/617 MR extensions!617], [https://gitlab.com/inkscape/extensions/-/merge_requests/622 MR extensions!622]).
* Extensions '''accessing the text''' of a text element through <code>TextElement.get_text()</code> will now also receive the contents of the nested <code>tspan</code>s. ([https://gitlab.com/inkscape/extensions/-/merge_requests/584 MR extensions#584], [https://gitlab.com/inkscape/extensions/-/merge_requests/617 MR extensions#617], [https://gitlab.com/inkscape/extensions/-/merge_requests/622 MR extensions#622]).
* Fix an issue where <code>duplicate</code> on text elements returned incorrect results. ([https://gitlab.com/inkscape/extensions/-/merge_requests/627 MR extensions!627],  [https://gitlab.com/inkscape/extensions/-/issues/480 extensions#480], [https://gitlab.com/inkscape/extensions/-/issues/567 extensions#567])
* Fix an issue where <code>duplicate</code> on text elements returned incorrect results ([https://gitlab.com/inkscape/extensions/-/merge_requests/627 MR extensions#627],  [https://gitlab.com/inkscape/extensions/-/issues/480 extensions#480], [https://gitlab.com/inkscape/extensions/-/issues/567 extensions#567]).
* Fix for some older extensions: Creating a <code>ffgeom.Segment</code> object no longer results in <code>AttributeError: 'tuple' object has no attribute 'start'</code>. ([https://gitlab.com/inkscape/extensions/-/merge_requests/636 MR extensions!636])
* Fix for some older extensions: Creating a <code>ffgeom.Segment</code> object no longer results in <code>AttributeError: 'tuple' object has no attribute 'start'</code> ([https://gitlab.com/inkscape/extensions/-/merge_requests/636 MR extensions#636]).
* Fix a crash when an extension is working with a path containing invalid Arc commands. ([https://gitlab.com/inkscape/extensions/-/merge_requests/640 MR extensions!640], [https://gitlab.com/inkscape/extensions/-/issues/579 extensions#579])
* Fix a crash when an extension is working with a path containing invalid Arc commands ([https://gitlab.com/inkscape/extensions/-/merge_requests/640 MR extensions#640], [https://gitlab.com/inkscape/extensions/-/issues/579 Bug extensions#579]).
* Some improvements to memory management were made in the extension system ([https://gitlab.com/inkscape/inkscape/-/merge_requests/6109 MR #6109]).
* Some improvements to memory management were made in the extension system ([https://gitlab.com/inkscape/inkscape/-/merge_requests/6109 MR #6109]).


=== Extension Development ===
=== Extension Development ===


====== Breaking changes / Deprecations ======
====== Breaking Changes / Deprecations ======


* <code>Path.append</code> with list argument has been deprecated, use <code>Path.extend</code> instead. ([https://gitlab.com/inkscape/extensions/-/merge_requests/572 MR extensions!572])
* <code>Path.append</code> with list argument has been '''deprecated''', use <code>Path.extend</code> instead ([https://gitlab.com/inkscape/extensions/-/merge_requests/572 MR extensions#572]).
* The ID cache now is kept up-to-date correctly, ensuring that no ID collisions occur accidentally - as a byproduct, style and ID lookups are now constant-time instead of linear-time. If you add <code>etree.ElementBase</code> elements from the SVG namespace manually, the ID caching mechanism will not work correctly, and it's a bad idea anyway. If your extension assigned duplicate IDs, you will need to fix that as it will be an error in 1.4. ([https://gitlab.com/inkscape/extensions/-/merge_requests/581 MR extensions!581])
* The ID cache now is kept up-to-date correctly, ensuring that no ID collisions occur accidentally - as a byproduct, style and ID lookups are now constant-time instead of linear-time. If you add <code>etree.ElementBase</code> elements from the SVG namespace manually, the ID caching mechanism will not work correctly, and it's a bad idea anyway. If your extension assigned duplicate IDs, you will need to fix that as it will be an error in 1.4 ([https://gitlab.com/inkscape/extensions/-/merge_requests/581 MR extensions#581]).
* <code>group.bounding_box()</code> now excludes invisible objects, and tries to take into account the clip path. <code>group.shape_box()</code> returns a fully unclipped result for all child objects. ([https://gitlab.com/inkscape/extensions/-/merge_requests/618 MR extensions!618])
* <code>group.bounding_box()</code> now excludes invisible objects, and tries to take into account the clip path. <code>group.shape_box()</code> returns a fully unclipped result for all child objects ([https://gitlab.com/inkscape/extensions/-/merge_requests/618 MR extensions#618]).


====== Added / improved functionalities in inkex ======
====== Added / Improved Functionality in inkex ======


Path manipulation:
Path manipulation:


* <code>Vector2d</code> now implements most dunder methods of <code>complex</code>, simplifying the vectorisation of path operations in <code>numpy</code>. Path operations have been sped up by basing their internal computation on complex proper. ([https://gitlab.com/inkscape/extensions/-/merge_requests/569 MR extensions!569], [https://gitlab.com/inkscape/extensions/-/merge_requests/626 MR extensions!626])
* <code>Vector2d</code> now implements most dunder methods of the built-in <code>complex</code>, simplifying the vectorisation of path operations in <code>numpy</code>. Path operations have been sped up by basing their internal computation on <code>complex</code> proper ([https://gitlab.com/inkscape/extensions/-/merge_requests/569 MR extensions#569], [https://gitlab.com/inkscape/extensions/-/merge_requests/626 MR extensions#626]).
* The <code>transform</code> class is now also based on math on complex numbers. High-level operations that use transforms, such as the transformation of a path, automatically make use of the new API. If you work with transforms manually, you might want to use <code>capply_to_point</code> to get the performance benefits. ([https://gitlab.com/inkscape/extensions/-/merge_requests/570 MR extensions!570])
* The <code>transform</code> class is now also based on math on complex numbers. High-level operations that use transforms, such as the transformation of a path, automatically make use of the new API. If you work with transforms manually, you might want to use <code>capply_to_point</code> to get the performance benefits ([https://gitlab.com/inkscape/extensions/-/merge_requests/570 MR extensions#570]).
* Improvements to the API for working with path segments, such as: length, split at length, gradient/normal, curvature. Accessible through <code>path.proxy_iterator()</code>, the new methods facilitate a lot of what <code>bezier.py</code> is traditionally used for, but without the loss of information that inherently happens when converting to <code>CubicSuperPath</code>. We recommend to avoid <code>CubicSuperPath</code>. ([https://gitlab.com/inkscape/extensions/-/merge_requests/585 MR extensions!585])
* Improvements were made to the API for working with path segments, such as: length, split at length, gradient/normal, curvature. Accessible through <code>path.proxy_iterator()</code>, the new methods facilitate a lot of what <code>bezier.py</code> is traditionally used for, but without the loss of information that inherently happens when converting to <code>CubicSuperPath</code>. We recommend to avoid <code>CubicSuperPath</code> ([https://gitlab.com/inkscape/extensions/-/merge_requests/585 MR extensions#585]).
 
Style and property access:
Style and property access:
* Style evaluations in documents that contain CSS have been sped up dramatically. The API remains unchanged. Also, some complex CSS4 selectors (like <code>:has</code>) are now supported. ([https://gitlab.com/inkscape/extensions/-/merge_requests/579 MR extensions!579])
 
* Styles have been refactored to be faster and more accurate. Use <code>element.get_computed_style(key)</code> to get the computed value for a particular attribute. <code>element.specified_style()(key)</code> will continue to work, but unless you reuse the computed specified_style for many properties, it's less efficient. ([https://gitlab.com/inkscape/extensions/-/merge_requests/597 MR extensions!597])
* Style evaluations in documents that contain CSS have been sped up dramatically. The API remains unchanged. Also, some complex CSS4 selectors (like <code>:has</code>) are now supported ([https://gitlab.com/inkscape/extensions/-/merge_requests/579 MR extensions#579]).
* Attribute access is now more consistent, simplifying the modification of <code>filter</code> and <code>stroke-dasharray</code>. For details, see added [https://inkscape.gitlab.io/extensions/documentation/tutorial/object-editing.html documentation]. ([https://gitlab.com/inkscape/extensions/-/merge_requests/588 MR extensions!588], [https://gitlab.com/inkscape/extensions/-/merge_requests/632 MR extensions!632]).  
* Styles have been refactored to be faster and more accurate. Use <code>element.get_computed_style(key)</code> to get the computed value for a particular attribute. <code>element.specified_style()(key)</code> will continue to work, but unless you reuse the computed specified_style for many properties, it's less efficient ([https://gitlab.com/inkscape/extensions/-/merge_requests/597 MR extensions#597]).
* When setting an attribute value to a style attribute, such as <code>element.style["fill"] = LinearGradient.new(...)</code>, the element is automatically inserted into the <code>defs</code> it it hasn't been already. ([https://gitlab.com/inkscape/extensions/-/merge_requests/588 MR extensions!588])
* Attribute access is now more consistent, simplifying the modification of <code>filter</code> and <code>stroke-dasharray</code>. For details, see added [https://inkscape.gitlab.io/extensions/documentation/tutorial/object-editing.html documentation] ([https://gitlab.com/inkscape/extensions/-/merge_requests/588 MR extensions#588], [https://gitlab.com/inkscape/extensions/-/merge_requests/632 MR extensions#632]).  
* When setting an attribute value to a style attribute, such as <code>element.style["fill"] = LinearGradient.new(...)</code>, the element is automatically inserted into the <code>defs</code> if it hasn't been already ([https://gitlab.com/inkscape/extensions/-/merge_requests/588 MR extensions#588]).
 
Other:
Other:
* Simplify reading of RDF meatadata ([https://gitlab.com/inkscape/extensions/-/merge_requests/596 MR extensions!596])
 
* More filter primitive classes have been added ([https://gitlab.com/inkscape/extensions/-/merge_requests/614 MR extensions!614]).
* Simplify reading of RDF meatadata ([https://gitlab.com/inkscape/extensions/-/merge_requests/596 MR extensions#596])
* Polygon and Polyline can be initialized with a list of points using .new() ([https://gitlab.com/inkscape/extensions/-/merge_requests/592 MR extensions 592])  
* More filter primitive classes have been added ([https://gitlab.com/inkscape/extensions/-/merge_requests/614 MR extensions#614]).
inx extension descriptor format:
* Polygon and Polyline can be initialized with a list of points using <code>.new()</code> ([https://gitlab.com/inkscape/extensions/-/merge_requests/592 MR extensions 592]).
 
<code>inx</code> extension descriptor format:
 
* Extensions that use a custom GUI can now retrieve display error information to the user outside of its own GUI with the attribute <code>show-stderr</code> ([https://gitlab.com/inkscape/inkscape/-/merge_requests/6124 MR #6124]).  
* Extensions that use a custom GUI can now retrieve display error information to the user outside of its own GUI with the attribute <code>show-stderr</code> ([https://gitlab.com/inkscape/inkscape/-/merge_requests/6124 MR #6124]).  
* New feature to allow extension authors to pre-process the svg before it's sent to their extension using the new <code><action></code> tag. Additionally there is a pref attribute which controls if the action is run according to an inkscape pref, this isn't expected to be useful to extension authors and is used internally for plain-svg compatibility. ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5381 MR #5381])  
* New feature to allow extension authors to pre-process the svg before it's sent to their extension using the new <code><action></code> tag. Additionally there is a pref attribute which controls if the action is run according to an inkscape pref, this isn't expected to be useful to extension authors and is used internally for plain-svg compatibility ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5381 MR #5381]).


==== Under the hood ====
==== Under the hood ====


* Allow to skip particularly slow unit tests ([https://gitlab.com/inkscape/extensions/-/merge_requests/571 MR extensions!571]) .  
* Allow to skip particularly slow unit tests ([https://gitlab.com/inkscape/extensions/-/merge_requests/571 MR extensions#571]).  
* Improvements to the unit testing framework for stock extensions. ([https://gitlab.com/inkscape/extensions/-/merge_requests/582 MR extensions!582])
* Improvements to the unit testing framework for stock extensions ([https://gitlab.com/inkscape/extensions/-/merge_requests/582 MR extensions#582]).
* Improvements for translators ([https://gitlab.com/inkscape/extensions/-/merge_requests/583 MR extensions!583])
* Improvements for translators ([https://gitlab.com/inkscape/extensions/-/merge_requests/583 MR extensions#583]).
* Maintenance work for Python 3.13 ([https://gitlab.com/inkscape/extensions/-/merge_requests/608 MR extensions!608]) and 3.12 ([https://gitlab.com/inkscape/extensions/-/merge_requests/641 MR extensions!641])
* Maintenance work for Python 3.13 ([https://gitlab.com/inkscape/extensions/-/merge_requests/608 MR extensions#608]) and 3.12 ([https://gitlab.com/inkscape/extensions/-/merge_requests/641 MR extensions#641])
* Automated testing form Python 3.12 ([https://gitlab.com/inkscape/extensions/-/merge_requests/615 MR extensions!615])
* Automated testing for Python 3.12 ([https://gitlab.com/inkscape/extensions/-/merge_requests/615 MR extensions#615])
* Documentation improvements ([https://gitlab.com/inkscape/extensions/-/merge_requests/616 MR extensions!616])
* Documentation improvements ([https://gitlab.com/inkscape/extensions/-/merge_requests/616 MR extensions#616])
* The shebang at the top of the extension scripts was updated to <code>python3</code> ([https://gitlab.com/inkscape/extensions/-/merge_requests/620 MR extensions!620])
* The shebang at the top of the extension scripts was updated to <code>python3</code> ([https://gitlab.com/inkscape/extensions/-/merge_requests/620 MR extensions#620]).
* The code formatter was changed from black to ruff ([https://gitlab.com/inkscape/extensions/-/merge_requests/625 MR extensions!625])
* The code formatter was changed from <code>black</code> to <code>ruff</code> ([https://gitlab.com/inkscape/extensions/-/merge_requests/625 MR extensions#625]).


== Command line==  
== Command line==  


* Many new actions have been added to allow editing SVG files and customizing export files ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5381 MR #5381]). These are also available from the Command palette:
* '''Many new actions''' have been added to allow editing SVG files and customizing export files ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5381 MR #5381]). These are also available from the Command palette:
** Set the document's SVG version to 1.1
** Set the document's SVG version to 1.1
** Set the document's SVG version to 2.0
** Set the document's SVG version to 2.0
Line 472: Line 487:
** Add shape path information to all shapes: adds <code>inkscape:d</code> attribute (only current <code>d</code>, not updated when path is changed)
** Add shape path information to all shapes: adds <code>inkscape:d</code> attribute (only current <code>d</code>, not updated when path is changed)
** Remove unused definitions (gradients, etc.)
** Remove unused definitions (gradients, etc.)
* A new option to print a list of all available input file extensions <code>list-input-types</code> has been added. This includes input file names for extensions, and it is also used for filename completion on the command line ([https://gitlab.com/inkscape/inkscape/-/merge_requests/6126 MR #6126]).
* A new action to '''print a list of all available input file extensions''' <code>list-input-types</code> has been added. This includes input file names for extensions, and it is also used for filename completion on the command line ([https://gitlab.com/inkscape/inkscape/-/merge_requests/6126 MR #6126]).
* Options for setting the compression (export-png-compression, values 0–9) and antialiasing (export-png-antialias, values 0–3) level have been added ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5167 MR #5167]).
* Options for setting the '''compression''' (<code>export-png-compression</code>, values 0–9) and '''antialiasing''' (<code>export-png-antialias</code>, values 0–3) level have been added ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5167 MR #5167]).
* An option to rotate the page by 90° (page-rotate) has been added ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5594 MR #5594]).
* An action to '''rotate the page by 90°''' (<code>page-rotate</code>) has been added ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5594 MR #5594]).
* <nowiki>An action for tracing raster images (object_trace), with expected argument format: {number of scans},{smooth[false|true]},{stack[false|true]},{remove_background[false|true],{speckles},{smooth_corners},{optimize}} (</nowiki>[https://gitlab.com/inkscape/inkscape/-/merge_requests/5842 MR #5842])
* An action for '''tracing raster images''' (<code>object_trace</code>), with expected argument format: <code>{number of scans},{smooth[false|true]},{stack[false|true]},{remove_background[false|true],{speckles},{smooth_corners},{optimize}}</code> has been added ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5842 MR #5842]).


== Inkview ==
== Inkview ==


The Inkscape SVG image viewer Inkview now makes use of a (customizable) .ui file instead of a hardcoded GUI ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5899 MR #5899]).
The Inkscape SVG image viewer Inkview now makes use of a (customizable) <code>.ui</code> file instead of a hardcoded GUI ([https://gitlab.com/inkscape/inkscape/-/merge_requests/5899 MR #5899]).


== Bugfixes ==
== Bugfixes ==


* The snap indicator text no longer flickers when object bounding box and path are in the same location (e.g. borders of a rectangular path) ([https://gitlab.com/inkscape/inkscape/-/issues/4399 Bug #4399], [https://gitlab.com/inkscape/inkscape/-/merge_requests/6157 MR #6157]).
* The '''snap indicator text''' no longer flickers when object bounding box and path are in the same location (e.g. borders of a rectangular path) ([https://gitlab.com/inkscape/inkscape/-/issues/4399 Bug #4399], [https://gitlab.com/inkscape/inkscape/-/merge_requests/6157 MR #6157]).
* Clones no longer vanish when their original path is being edited with the Shape Builder Tool ([https://gitlab.com/inkscape/inkscape/-/issues/4682 Bug #4682], [https://gitlab.com/inkscape/inkscape/-/merge_requests/6131 MR #6131]).
* '''Clones no longer vanish''' when their original path is being edited with the Shape Builder Tool ([https://gitlab.com/inkscape/inkscape/-/issues/4682 Bug #4682], [https://gitlab.com/inkscape/inkscape/-/merge_requests/6131 MR #6131]).
* Bump filters and Bevels filters (about 25 different filters) now look again as they were intended, with banding and artifacts much reduced ([https://gitlab.com/inkscape/inkscape/-/merge_requests/6190 MR #6190], [https://gitlab.com/inkscape/inkscape/-/merge_requests/6162 MR #6162]).
* '''Bump filters and Bevels filters''' (about 25 different filters) now look again as they were intended, with banding and artifacts much reduced ([https://gitlab.com/inkscape/inkscape/-/merge_requests/6190 MR #6190], [https://gitlab.com/inkscape/inkscape/-/merge_requests/6162 MR #6162]).
* The settings 'Better' and 'Best' for rendering filters now are different again, and 'Better' is a bit faster now ([https://gitlab.com/inkscape/inkscape/-/issues/4722 Bug #4722], [https://gitlab.com/inkscape/inkscape/-/merge_requests/6133 MR #6133]).
* The settings <code>Better</code> and <code>Best</code> for rendering filters now are different again, and <code>Better</code> is a bit faster now ([https://gitlab.com/inkscape/inkscape/-/issues/4722 Bug #4722], [https://gitlab.com/inkscape/inkscape/-/merge_requests/6133 MR #6133]).
* Improvement on internal LPE handling ([https://gitlab.com/inkscape/inkscape/-/merge_requests/6100 MR #6100])
* Improvement on internal LPE handling ([https://gitlab.com/inkscape/inkscape/-/merge_requests/6100 MR #6100])
* Stroke to Path no longer results in misplacement of the first node when applied to paths with multiple subpaths ([https://gitlab.com/inkscape/inkscape/-/issues/4709 Bug #4709], [https://gitlab.com/inkscape/inkscape/-/merge_requests/6122 MR #6122]).
* <code>Stroke to Path</code> no longer results in misplacement of the first node when applied to paths with multiple subpaths ([https://gitlab.com/inkscape/inkscape/-/issues/4709 Bug #4709], [https://gitlab.com/inkscape/inkscape/-/merge_requests/6122 MR #6122]).
* When editing text imported from a PDF, letters before and after your cursor move as expected instead of new text and old text being stacked on top of each other ([https://gitlab.com/inkscape/inkscape/-/issues/297 Bug #297], [https://gitlab.com/inkscape/inkscape/-/merge_requests/6414 MR #6414]).
* When '''editing text imported from a PDF''', letters before and after your cursor move as expected instead of new text and old text being stacked on top of each other ([https://gitlab.com/inkscape/inkscape/-/issues/297 Bug #297], [https://gitlab.com/inkscape/inkscape/-/merge_requests/6414 MR #6414]).
* Right-clicking on selected objects no longer deselects them ([https://gitlab.com/inkscape/inkscape/-/merge_requests/6489 MR #6489], [https://gitlab.com/inkscape/inkscape/-/issues/5047 Bug #5047]).
* '''Right-clicking on selected objects''' no longer deselects them ([https://gitlab.com/inkscape/inkscape/-/merge_requests/6489 MR #6489], [https://gitlab.com/inkscape/inkscape/-/issues/5047 Bug #5047]).
* Pressing the + button to add a new gradient stop now also works when the last gradient stop is selected ([https://gitlab.com/inkscape/inkscape/-/issues/1261 Bug #1261], [https://gitlab.com/inkscape/inkscape/-/merge_requests/6358 MR #6358]).
* Pressing the <code>+</code> button to add a new gradient stop now also works when the last gradient stop is selected ([https://gitlab.com/inkscape/inkscape/-/issues/1261 Bug #1261], [https://gitlab.com/inkscape/inkscape/-/merge_requests/6358 MR #6358]).
* Gradient tool regression fixes (since Inkscape 1.0.x, [https://gitlab.com/inkscape/inkscape/-/merge_requests/6361 MR #6361]):
* '''Gradient tool''' regression fixes (since Inkscape 1.0.x, [https://gitlab.com/inkscape/inkscape/-/merge_requests/6361 MR #6361]):
** The tool now again allows to add gradient stops by dragging a color from the palette onto the gradient line ([https://gitlab.com/inkscape/inkscape/-/issues/3472 Bug #3472]).
** The tool now again allows to add gradient stops by '''dragging a color from the palette onto the gradient line''' ([https://gitlab.com/inkscape/inkscape/-/issues/3472 Bug #3472]).
** Dragging a color from the color palette to a gradient object will now respect all the selected gradient nodes irrespective of the drop location.
** Dragging a color from the color palette to a gradient object will now respect all the selected gradient nodes irrespective of the drop location.
** Dropping a color on a gradient object when no gradient nodes are selected will automatically determine the closest gradient node to the mouse and apply the color to it ([https://gitlab.com/inkscape/inkscape/-/issues/4466 Bug #4466]).
** Dropping a color on a gradient object when no gradient nodes are selected will automatically determine the closest gradient node to the mouse and apply the color to it ([https://gitlab.com/inkscape/inkscape/-/issues/4466 Bug #4466]).
** Selecting a color from the color palette when no gradient node of the selected object is selected will automatically apply the color to the first gradient node of the selected object.
** Selecting a color from the color palette when no gradient node of the selected object is selected will automatically apply the color to the first gradient node of the selected object.
* and dozens of other bugs that are too many to list them all out here. You can find a (very incomplete) list of closed bug reports for the 1.4 milestone [https://gitlab.com/inkscape/inkscape/-/issues/?sort=created_date&state=closed&milestone_title=Inkscape%201.4&first_page_size=20 in our bug tracker].
* and '''dozens of other bugs''' that are too many to list them all out here.  
 
You can find a (very incomplete) list of closed bug reports for the 1.4 milestone [https://gitlab.com/inkscape/inkscape/-/issues/?sort=created_date&state=closed&milestone_title=Inkscape%201.4&first_page_size=20 in our bug tracker].


[[File:Inkscape owz9gNDaXy.gif|frame|center|Gradient tool capabilities restored]]
[[File:Inkscape owz9gNDaXy.gif|frame|center|Gradient tool capabilities restored]]
Line 505: Line 522:
These are changes that are not visible to the end user, but make development easier, maintain operating system compatibility and help to future-proof Inkscape:
These are changes that are not visible to the end user, but make development easier, maintain operating system compatibility and help to future-proof Inkscape:


* Lots and lots of changes have been made to prepare Inkscape for the updated user interface framework GTK 4. Those changes should not be noticeable in Inkscape 1.4, but will help us with fixing bugs in multiple branches of Inkscape simultaneously (Inkscape 1.4.x and master/1.5.x).
* Lots and lots of changes have been made to '''prepare Inkscape for the updated user interface framework GTK 4'''. Those changes should not/barely be noticeable in Inkscape 1.4, but will help us with fixing bugs in multiple branches of Inkscape simultaneously (Inkscape 1.4.x and master/1.5.x).
* Many parts of the code have been refactored, code has been simplified and modernized.
* Many parts of the code have been '''refactored''', code has been '''simplified and modernized'''.
* The code was adjusted to stay compatible with newer versions of third-party libraries.
* The code was adjusted to '''stay compatible''' with newer versions of '''third-party libraries'''.
* Our automatic builds and dependency lists have been updated and changed many times, continuously adjusting to currently available packages for various operating systems and compilation frameworks.
* Our '''automatic builds and dependency lists''' have been updated and changed many times, continuously adjusting to currently available packages for various operating systems and compilation frameworks.


== Translations ==
== Translations ==


The following languages have been updated for this version (as of July 26):
The following languages have been updated for this version:


* Basque
* Basque
Line 519: Line 536:
* Catalan
* Catalan
* Croatian
* Croatian
* Dutch
* French
* German
* German
* Greek
* Hebrew
* Hebrew
* Hungarian
* Hungarian
Line 526: Line 546:
* Japanese
* Japanese
* Korean
* Korean
* Norwegian Bokmål
* Portuguese
* Portuguese
* Romanian
* Romanian
Line 540: Line 561:


== Documentation ==
== Documentation ==
The man page, keyboard shortcuts reference and the Basic tutorial were updated for Inkscape 1.4.


Documentation translations were updated in:
Documentation translations were updated in:


* German
* Hungarian
* Hungarian
* Indonesian
* Portuguese


== Website ==
== Website ==
* The website has been battling with multiple DoS attacks, requiring frequent quick action from our admin.
* The language detection has been improved.
* Multiple small style improvements have been made.
* Setting up a development environment for contributing now works again.


== Important Inkscape Project Milestones ==
== Important Inkscape Project Milestones ==
* Multiple contributors were paid for fixing bugs for the release and for preparing Inkscape for GTK4 (read more at https://inkscape.org/*membership/blog/).
* Multiple GSoC projects were concluded successfully (see https://summerofcode.withgoogle.com/programs/2024/organizations/inkscape).


== Important Changes for Packagers ==
== Important Changes for Packagers ==


* The compile flag <code>WITH_INTERNAL_CAIRO</code> has been removed ([https://gitlab.com/inkscape/inkscape/-/merge_requests/6093 MR #6093]).
* The compile flag <code>WITH_INTERNAL_CAIRO</code> has been removed ([https://gitlab.com/inkscape/inkscape/-/merge_requests/6093 MR #6093]).
* inycss2 is now needed for Inkscape extensions (and export) to work ([https://gitlab.com/inkscape/inkscape/-/issues/5070 Bug #5070]).
* <code>tinycss2</code> is now needed for Inkscape extensions (and export) to work ([https://gitlab.com/inkscape/inkscape/-/issues/5070 Bug #5070]).


== Known issues ==
== Known issues ==


*The background work for moving to GTK4 can potentially reduce Inkscape's performance, most notably on Windows.
* The background work for moving to GTK4 can impact Inkscape's performance negatively, most notably on Windows.


== Other releases ==
== Other releases ==


{{:Release notes}}
{{:Release notes}}

Latest revision as of 15:09, 5 October 2024


Warning symbol.png These Release Notes are in Draft Status.

Note: Not all animations work, due to Wiki bugs with resizing images. Release notes will be transferred to website, there animations will be working.

Important Links:



Warning symbol.png Pending questions:



Release highlights

  • Filter Gallery: it has never been so easy to find the best filter for your needs! This new dialog features previews, categories and search.
  • Modular grids & improved axonometric grids: set the grid angle by ratio for isometric designs and use modular grids to plan layouts and make icons!
  • Swatches dialog and palette file handling improved: quick access to dialog layout controls, search for colors, and open different palette file formats!
  • Unified font browser preview: when activated in the preferences, use it to quickly browse through your font collection. Try it out and give your feedback!
  • Customizable handles: Power users with CSS knowledge can now customize the styling and basic shape of all the handles!
  • Fast image clipping with the Shape Builder: raster graphics can now be clipped into multiple sections using the Shape Builder.
  • Affinity Designer File Import
  • Support for internal links in exported PDF files
  • A whole new icon set
  • There's even more: faster extensions, new templates for folding booklets, additional options in Ruler and Taper Stroke LPE, new keyboard shortcuts, changed node deletion behavior, preview in Spray tool, many new command line options, more supported color palette formats (e.g. CIELAB, Adobe Color Book and Adobe Swatch Exchange), updated translations and many bug fixes.

Canvas

Guides

When creating a new guide, all guides are now unlocked, so the new guide can be moved and adjusted freely (MR #5814).

Tools

General

Toolbars now try to make use of the available space by not hiding options in dropdown menus when there's enough space. Instead, they are sorted into multiple dropdown menus, when the window is shrunk or there is not enough space.

Previously, any options that did not fit went into the same small arrow dropdown at the end of the toolbar and were hard to discover.

The change also leads to a larger minimal width of the Inkscape window, which is now dependent upon the selected tool with its collapsed toolbar items.

Node Tool

  • The mouse/keyboard shortcut for converting a curved path segment to a straight line has been changed from Ctrl+Click to Alt+Double-click as a fix to the double-click action of the 'delete segment' command not being recognized correctly (Bug #4984, MR #6504).
  • Deleting a node now behaves differently again (Bug #4984, MR #6285, MR #6635). With the preference option Edit ➞ Preferences ➞ Node tool: Deleting node preserves shape active, Inkscape will use its node sharpness autodetection to decide whether the shape will be kept, or the node will be removed without adjusting the adjacent nodes' handles. With the option inactive, Inkscape will behave like Inkscape 1.2 (no autodetection, shape is kept when pressing Del, straight lines with Ctrl + Del).
Node deletion behavior
Keys pressed Curve is (almost) cusp Curve is smooth
Ctrl + Del + any preference setting Node is removed, a straight line connects the remaining nodes
Del + Preference for keeping shape is active (default) Adjacent handles will not be adjusted Adjacent handles will be adjusted to try and keep the shape
Shift + Del + Preference for keeping shape is active Adjacent handles will be adjusted to try and keep the shape Adjacent handles will not be adjusted
Del (with or without Shift) + Preference for keeping shape is not active (pre-1.3 behavior) Adjacent handles will be adjusted to try and keep the shape

Pen Tool

A new option has been added to automatically convert the currently drawn shape to guides, allowing users to 'draw' guides instead of dragging them out of the rulers. It comes without a keyboard shortcut, but you can set one in the preferences (MR #6308).

Rectangle Tool

A new mode to only draw squares with Alt + Ctrl has been added to the tool (MR #6199).

Selector Tool & Node Tool

  • In Edit ➞ Preferences ➞ Behavior ➞ Steps, an option has been added to change how moving selected objects / nodes with the arrow keys works when the canvas is rotated (Arrow keys move object relative to screen). If you're working with a rotated canvas, now, by default, the arrow keys will move the selection horizontally and vertically relative to the screen, not to the rotated document. This allows to work more intuitively while the canvas is rotated. Disabling the option will restore the previous behavior (MR #5031).
  • In the preferences settings for both tools, options for changing the active layer and active page when using the tool to select an object have been added. The Selector tool will change both active layer and active page, while the Node tool will change neither, by default. Other tools (Text tool, Rectangle tool, …) do not change either layer or page when being used (but they can, if you edit the preferences.xml file in a text editor, MR #5257).

Shape Builder Tool

Several improvements were made to the Shape Builder (MR #5428):

  • The Shape Builder tool can now make use of raster graphics, too. Any paths selected together with a raster (pixel) graphic will now function as clipping paths, their colors are not preserved - unlike when you have only paths in the selection. The resulting image parts use clipped clones of the image, to keep the file size small and improve performance. If you want to edit them, you need to unlink the clones.
  • An option for the transparency level of the original drawing has been added (the eye icon opens a popup slider).
  • Optionally, it is now possible to keep a copy of the original objects after the Shape Builder's operation. This option is deactivated by default.
Using the Shape Builder Tool to quickly split a raster graphic into multiple parts

Spray Tool

  • The Spray Tool now shows an outline preview of the next item that it is going to spray, including its shape, rotation and size. The preview is only visible when the tool is not currently spraying. That way, you can choose where to place the next item (with a single click instead of holding the mouse button down). It is possible to change the previewed (soon-to-be-sprayed) item by right-clicking and then moving the mouse by a tiny amount (MR #5375).
  • The option to only spray non-overlapping objects now yields faster results through an updated spraying algorithm (MR #5766).
Choosing the next item to spray

Import / Export

New Import Formats

Affinity Designer File Import

An importer for the native file format of Affinity Designer (*.afdesign) was added as Manpreet Singh's Google Summer of Code project (project report). Since there is no official documentation for this format available, consider this a best-effort implementation. Please report any files that don't import properly.

Computer Graphics Metafaile

An importer for CGM (Computer Graphics Metafile) was added. Support for this old, but ISO-standardized file format had been removed with Inkscape 1.0, but it is back for you now (MR extensions#638)!

PDF Export

PDF export now supports internal links (going from one part of the file to another part of the same file, weblinks were supported since Inkscape 1.0). This can be used for creating Tables of Contents, for example (MR #5237).

Dialogs

About Inkscape

The new About Screen, created by Inkonic for Inkscape 1.4

Add Layer

The Add Layer dialog now shows the three available options all written out directly as radio buttons, instead of hiding them behind a drop-down selection (MR #5074).

New layout of 'Add Layer' dialog

Align and Distribute

The alignment options field Relative to now hides irrelevant options when only a single item is selected, with Page being the default (MR #6510).

Better presets in 'Align and Distribute' dialog


Create Anchor (Hyperlink) / Object Properties

To make it easier to select an element in the drawing to link to, a button has been added to the side of the field where the target object's id or the external link must be inserted (Href).

When you click on that button, your mouse cursor will transform into a little hand icon. When the hand hovers over any object or over an empty area of the page, a small indicator text will tell you the id of that object or page. Clicking on the object will automatically insert that object's id into the href field. That way, you do not need to use the Objects or XML dialog to look up the internal identifier of the object you want to link to (MR #5221)

Creating clickable links from an object to another page / object

Document properties

Scale lock

A new toggle button that allows you to change the document's viewbox scale without changing the physical size of its contents has been added (MR #5993).

Grids

The grids subsection in the Document Properties dialog has been overhauled with new grid selector buttons, which automatically add the selected type of grid to the drawing when pressed.

Modular Grids

A new grid type was added that consists of rectangles with optional gaps in between.

Height, width, horizontal and vertical gap (also negative for overlapping modules) can be adjusted separately. Each grid module (rectangle) can have its own margin set (negative values for inside margin, positive values for outside margin).

Example of a modular grid without gaps
Axonometric grids

The angles of axonometric grids can now also be set by indicating the ratio between the height and width of the rhombus shape that is formed by it. A common angle for isometric games, for example, is 2:1, corresponding to angles like 26,565051 which are difficult to set exactly without the ratio option (MR #6132).

Automatically setting an angle starting from a ration for axonometric grids

Export Dialog

  • If you enter a file system path to a save location that does not exist, Inkscape now tries to create folders instead of warning the user. Only if that fails, it will give a warning now (MR #5169).
  • Each of the two tabs of the dialog (single file, batch export) now features a little icon in addition to the text (Bug #4338, MR #6166).
  • Batch export options have been clarified (MR #6544).
Improved batch export options with batch prefix and file type suffix

Extension Gallery

When you want to quickly get an overview which extensions are available to you, you can now browse your Inkscape extensions in a gallery similar to the one for filters.

You can use the search field to quickly find the extension you need. The size of the icons is adjustable. They are currently all still identical placeholders, and we invite you to join us if you'd like to help by adding images for them. The menu categories can be hidden if you do not need them.

When you hover over an extension, the dialog shows you a small info text with either the menu path to the extension, or a description (MR #5448).

The new Extension Gallery

Fill and Stroke

Gradient Editor

It is now possible to control the gradient's angle numerically from the Gradient Editor section of the Fill and Stroke dialog. An additional slider allows for changing the angle by simply dragging. A button to rotate the gradient by 90° completes the new angle controls (MR #5413).

The new gradient angle controls in the 'Fill and Stroke' dialog

Pattern Editor

For users who prefer to have more control when setting the gap between pattern elements, an option has been added to use numerical entry fields (Gap control: precise) instead of the sliders (Gap control: mouse friendly). This allows to add gaps smaller than 20% of the pattern width, in 0.1% steps – and also values larger than 32040%, in case you ever need that pattern rarity! (MR #5484).

Controlling the gap between pattern blocks numerically

Filter Gallery

The Filter Gallery can be found in the Filters menu. It shows a scrollable (and hideable) list of all filter categories, and a preview image for each filter, applied to a colorful flower image. Your own filters will appear in the category indicated in your filter file, or, if there isn't any, in the Personal category. Inkscape looks for them in a folder named filters in the folder indicated at Edit ➞ Preferences ➞ System: User config. Some community-contributed files for trying this out can be found in our website's gallery (Bug UX#208, MR #5448).

The Filter Gallery with previews and search

Layers and Objects

When you click on the + button in the Layers and Objects dialog, the Add layers dialog no longer shows up. The button now always adds the new layer above the selected one (MR #5074). To name the layer, double-click on its name. The Add Layer dialog is still available from the Layer menu (or with Ctrl+Shift+N).

Adding new layers faster than ever

Object Attributes

This dialog has been removed. Its contents is now available in the Object Properties dialog.

Object Properties

This dialog has been merged with the Object Attributes dialog.

It now holds the following information:

  • Some properties specific to the selected object type (e.g. rounded corners / width / height for rectangles, number of tips for stars etc.)
    • For paths, it now holds editable path data (MR #6173, like in XML dialog). This is another step toward ux#203.
    • For rectangles, corners can be edited separately by adding the Corners Live Path Effect.
    • Stars/Polygons can be automatically rotated to their 0° rotation position
  • Object ID, label, description, title, highlight color, checkboxes for lock and hide status
  • Interactivity (scriptable) properties, such as OnClick, OnMouseOver (input JavaScript)
  • When the selected object is enclosed by a hyperlink (added with Add hyperlink (anchor) in right-click menu), the hyperlink's properties (e.g. href, title, role, target) can be edited in this dialog.
The refactored 'Object Properties' dialog

Path Effects

The (optional) button for displaying the older Live Path Effects gallery dialog has been removed along with the dialog. LPEs can now only be selected from the search field / drop down field combination in the Path Effects dialog (MR #5760).

Preferences

Snapping

More options for finetuning snapping precedence between grid and guidelines vs. objects and alignment/distribution have been added at Edit ➞ Preferences ➞ Behavior ➞ Snapping. These allow you to set grids and / or guidelines as the only available snap target, and to add more snap targets incrementally.

More options for finetuning snapping behavior

SVG Font Editor

The context (right-click) menu entry to Sort glyphs and Remove pair (referring to a kerning pair) have been moved to more discoverable buttons (MR #5421).

New buttons in 'Font Editor' dialog

Swatches

The Swatches (Palettes) dialog has been overhauled (MR #5606).

  • Color palettes are now selected from a dropdown at the top, instead of a small icon at the bottom.
  • Colors can be searched by their name.
  • Color palettes can be loaded from a file.
  • In addition to Gimp Color Palette files, now Adobe Color Book and Adobe Swatch Exchange files are also supported.
  • Support for columns: When a palette file defines 'Columns' (in .gpl files, this is indicated by a line like Columns: 9 following the name line), the blocks of colors that belong together will stay together (no 'linebreaks' will be added inside any of the blocks), both in the Swatches dialog as well as in the palette at the bottom of the Inkscape window.
  • A button for accessing the settings, and two buttons for switching between the grid and row view make it easier to adjust the dialog's layout.
  • Support for color palettes with CIELAB colors has been added.
  • Limited support for color palettes with CMYK colors has been added.
  • The transformation from CMYK to RGB has been improved, even without a proper ICC profile.
Refactored 'Swatches' dialog with search field

Text and Font

General

Freshly installed fonts can now be used in Inkscape on Linux, without needing to restart the application. macOS and Windows could not be moved to provide Inkscape with the necessary information (MR #5240).

Experimental Alternative User Interface

An experimental Unified font browser has been added. If it is activated under Edit ➞ Preferences ➞ Interface ➞ Dialogs : Text and Font dialog (requires restart), it will replace the Text and Font dialog with a sortable, filterable, searchable and adjustable list of font previews.

Any font you select will be applied immediately. The Font Attributes tab and Text tab are available, too (MR #4578).

Specifically, these settings are customizable:

  • type of preview (rows or grid)
  • sort order: alphabetical, font weight, font width (condensed - wide)
  • limit list of fonts to selected font collections
  • scaling of preview
  • preview text contents (choice between some presets, custom text entry for the long (row view) sample and the short (grid view) sample)
  • whether to show the font name below the preview
  • in the global Inkscape preferences (Edit ➞ Preferences ➞ Interface ➞ Windows ➞ Text and Font dialog: Unified font scale factor), the height of the preview lines can be adjusted, as in some cases, fonts look cut off in the list preview.


Live Path Effects

Ruler

The Ruler Live Path Effect now features several new options:

  • Ruler marks can start from the path at an angle (in degrees, MR #5749).
  • The marks can start at a distance from the path (in percentage of overall mark length, marks are shortened by this amount, MR #5751).
Adjusting the angles of ruler marks and shifting their start in the Ruler Live Path Effect

Taper Stroke

A new option to clamp (cut off) the path's tip instead of tapering it on the selected end of the path has been added. It's available in the Start direction dropdown in the LPE's settings (MR #5701).

Clamping the path's tip with the Taper Stroke Live Path Effect

Palettes

  • Multiple palettes were updated to contain information about the number of columns for optimal display of the palette (MR #5647).
  • The Web Safe palette has been removed because of the dust that had already settled on it. Its colors were already included with the Web Hex palette, where they now feature an addition ((Web-safe)) to their label (MR #5653).
  • The Windows XP palette has been removed because of its age ([1]).
  • The default preference for the bottom palette's layout has been adjusted to stretch the tiles and to have them laid out in two rows, so the palette looks nicer when you first install Inkscape (MR #6581).

Templates

  • Folding booklet templates in A4 and Letter format have been added (MR #5996).
  • Custom templates can now make use of a category and a label (MR #5996).
The Zine Booklet template allows you to quickly generate printable folding booklets.


Customization / Theming

Customizable Handles

The size, color, stroke-width, outline and opacity of on-canvas handles can now be customized, and their shape can be selected from a set of available handle shapes, by copying the CSS file at inkscape/share/ui/node-handles.css into the folder indicated at Edit ➞ Preferences ➞ System: User UI and modifying it. Handles will be updated live in Inkscape as when the file has been saved (MR #5624).

The new default handles

Icons

A new icon set called Dash is now available for you to select. This new theme reduces complexity on some of the existing icons, while still being explanatory. It also borrows some concepts from other software. It has 500+ icons, with cursors, scalable and symbolic versions and works on dark and light themes (MR #6115).

Keyboard Shortcuts

  • The shortcuts for Quick Preview (F), Quick Zoom (Q), panning (Space), Pen Segment To Line (Shift + L), Pen Segment To Curve (Shift + U) and Pen Segments To Guides (Shift + G) are now customizable (MR #6308).
  • The macOS-specific carbon.xml keyboard shortcuts file has been removed, as it hasn't been kept up to date for years (MR #6522).
  • Some existing commands that did not have a default shortcut now have one. Note that these will only be available to you if you install Inkscape for the first time, not when upgrading an existing installation. In that case, you can set these manually in Edit ➞ Preferences ➞ Interface ➞ Keyboard, or you can reset your keyboard shortcuts by replacing the file default.xml in your Inkscape user configuration director with a copy of the file inkscape.xml from the keys directory of your Inkscape installation's share directory (MR #6462):
Command Shortcut
Apply clipping path Ctrl+M
Release clipping path Alt+M
Apply inverted clipping path Ctrl+Alt+M
Swap fill and stroke colors Shift+X


Extensions

Features

New Extensions

In addition to the new import formats for *.afdesign and *.cgm files, which are implemented via the extensions subsystem,

  • the typst formula extension (Extensions ➞ Text ➞ Formula (typst) converts typst math markup into a path, and surving a similar purpose as the LaTeX extension (MR extensions#606).

Improvements

  • Binary DXF files (from Autodesk R13 onwards) can now be imported into Inkscape (MR extensions#629, Bug extensions#400).
  • The QR code extension now supports multiline text. This can be useful if you want to create a vCard or other multiline formats (MR extensions#595).
  • The Printing Marks extension now adds printing marks to all pages of a document (MR extensions#634).
  • The Deep Ungroup extension now provides an option to preserve layers, which is switched off by default (MR extensions#642).

General Extension Changes

Performance has been improved in many different places:

These improvements apply to all existing extensions that make use of the corresponding parts of the inkex API, so also third-party extension authors don't have to modify their code to have their extensions benefit from the speedups.

Bugs fixed

Particular Extensions

  • The Add Nodes extension now gives symmetric results on arcs, and also splits arcs into smaller arcs (MR extensions#585).
  • The extensions that modify colors now also work on Mesh gradients (MR extensions#624).
  • The Convert to dashes extension is now also more precise for arcs and furthermore doesn't visually change the output for closed subpaths where a dash crosses over the closing position (MR extensions#585).
  • The DXF export extension no longer draws invisible elements (MR extensions#609) and doesn't trip over SVG comments anymore (MR extensions#623).
  • A freeze in the details view of the Extensions manager was fixed (MR extensions-manager#19).
  • The Measure Path extension (Length measurement) is now more precise for paths containing arcs, e.g. an arc with a radius of 50mm now has its length reported as 314.1593 (correct value: 314.15926...) instead of 314.1602 (MR extensions#585).
  • The N-up layout extension could in some cases generate incorrect sizes, which is fixed (MR extensions#610)
  • The Plotter (HPGL) extension now lifts the pen at the end more reliably (MR extensions#635, Bug extensions#444, Bug extensions#520), and paths with multiple subpaths are now fully drawn (MR extensions!527, Bug extensions#522).

All Extensions

Extension Development

Breaking Changes / Deprecations
  • Path.append with list argument has been deprecated, use Path.extend instead (MR extensions#572).
  • The ID cache now is kept up-to-date correctly, ensuring that no ID collisions occur accidentally - as a byproduct, style and ID lookups are now constant-time instead of linear-time. If you add etree.ElementBase elements from the SVG namespace manually, the ID caching mechanism will not work correctly, and it's a bad idea anyway. If your extension assigned duplicate IDs, you will need to fix that as it will be an error in 1.4 (MR extensions#581).
  • group.bounding_box() now excludes invisible objects, and tries to take into account the clip path. group.shape_box() returns a fully unclipped result for all child objects (MR extensions#618).
Added / Improved Functionality in inkex

Path manipulation:

  • Vector2d now implements most dunder methods of the built-in complex, simplifying the vectorisation of path operations in numpy. Path operations have been sped up by basing their internal computation on complex proper (MR extensions#569, MR extensions#626).
  • The transform class is now also based on math on complex numbers. High-level operations that use transforms, such as the transformation of a path, automatically make use of the new API. If you work with transforms manually, you might want to use capply_to_point to get the performance benefits (MR extensions#570).
  • Improvements were made to the API for working with path segments, such as: length, split at length, gradient/normal, curvature. Accessible through path.proxy_iterator(), the new methods facilitate a lot of what bezier.py is traditionally used for, but without the loss of information that inherently happens when converting to CubicSuperPath. We recommend to avoid CubicSuperPath (MR extensions#585).

Style and property access:

  • Style evaluations in documents that contain CSS have been sped up dramatically. The API remains unchanged. Also, some complex CSS4 selectors (like :has) are now supported (MR extensions#579).
  • Styles have been refactored to be faster and more accurate. Use element.get_computed_style(key) to get the computed value for a particular attribute. element.specified_style()(key) will continue to work, but unless you reuse the computed specified_style for many properties, it's less efficient (MR extensions#597).
  • Attribute access is now more consistent, simplifying the modification of filter and stroke-dasharray. For details, see added documentation (MR extensions#588, MR extensions#632).
  • When setting an attribute value to a style attribute, such as element.style["fill"] = LinearGradient.new(...), the element is automatically inserted into the defs if it hasn't been already (MR extensions#588).

Other:

inx extension descriptor format:

  • Extensions that use a custom GUI can now retrieve display error information to the user outside of its own GUI with the attribute show-stderr (MR #6124).
  • New feature to allow extension authors to pre-process the svg before it's sent to their extension using the new <action> tag. Additionally there is a pref attribute which controls if the action is run according to an inkscape pref, this isn't expected to be useful to extension authors and is used internally for plain-svg compatibility (MR #5381).

Under the hood

Command line

  • Many new actions have been added to allow editing SVG files and customizing export files (MR #5381). These are also available from the Command palette:
    • Set the document's SVG version to 1.1
    • Set the document's SVG version to 2.0
    • Remove any Inkscape-specific SVG data
    • Remove any known proprietary SVG data
    • Remove auto start positions from markers
    • Remove all transforms from all shapes
    • Remove context paints from markers
    • Replace SVG2 text with SVG1.1 text
    • Insert JavaScript for rendering meshes (polyfill)
    • Insert JavaScript for rendering hatches (polyfill)
    • Recursively unlink all clones and symbols
    • Turn all shapes recursively into path elements
    • Turn all strokes recursively into fill-only paths
    • Make all paths absolute and predictable
    • Add bounding box information to all shapes: adds inkscape:visualbox and inkscape:geometricbox attributes (only current bounding box, not updated when shape changes)
    • Add shape path information to all shapes: adds inkscape:d attribute (only current d, not updated when path is changed)
    • Remove unused definitions (gradients, etc.)
  • A new action to print a list of all available input file extensions list-input-types has been added. This includes input file names for extensions, and it is also used for filename completion on the command line (MR #6126).
  • Options for setting the compression (export-png-compression, values 0–9) and antialiasing (export-png-antialias, values 0–3) level have been added (MR #5167).
  • An action to rotate the page by 90° (page-rotate) has been added (MR #5594).
  • An action for tracing raster images (object_trace), with expected argument format: {number of scans},{smooth[false|true]},{stack[false|true]},{remove_background[false|true],{speckles},{smooth_corners},{optimize}} has been added (MR #5842).

Inkview

The Inkscape SVG image viewer Inkview now makes use of a (customizable) .ui file instead of a hardcoded GUI (MR #5899).

Bugfixes

  • The snap indicator text no longer flickers when object bounding box and path are in the same location (e.g. borders of a rectangular path) (Bug #4399, MR #6157).
  • Clones no longer vanish when their original path is being edited with the Shape Builder Tool (Bug #4682, MR #6131).
  • Bump filters and Bevels filters (about 25 different filters) now look again as they were intended, with banding and artifacts much reduced (MR #6190, MR #6162).
  • The settings Better and Best for rendering filters now are different again, and Better is a bit faster now (Bug #4722, MR #6133).
  • Improvement on internal LPE handling (MR #6100)
  • Stroke to Path no longer results in misplacement of the first node when applied to paths with multiple subpaths (Bug #4709, MR #6122).
  • When editing text imported from a PDF, letters before and after your cursor move as expected instead of new text and old text being stacked on top of each other (Bug #297, MR #6414).
  • Right-clicking on selected objects no longer deselects them (MR #6489, Bug #5047).
  • Pressing the + button to add a new gradient stop now also works when the last gradient stop is selected (Bug #1261, MR #6358).
  • Gradient tool regression fixes (since Inkscape 1.0.x, MR #6361):
    • The tool now again allows to add gradient stops by dragging a color from the palette onto the gradient line (Bug #3472).
    • Dragging a color from the color palette to a gradient object will now respect all the selected gradient nodes irrespective of the drop location.
    • Dropping a color on a gradient object when no gradient nodes are selected will automatically determine the closest gradient node to the mouse and apply the color to it (Bug #4466).
    • Selecting a color from the color palette when no gradient node of the selected object is selected will automatically apply the color to the first gradient node of the selected object.
  • and dozens of other bugs that are too many to list them all out here.

You can find a (very incomplete) list of closed bug reports for the 1.4 milestone in our bug tracker.

Gradient tool capabilities restored

Behind the Curtains

These are changes that are not visible to the end user, but make development easier, maintain operating system compatibility and help to future-proof Inkscape:

  • Lots and lots of changes have been made to prepare Inkscape for the updated user interface framework GTK 4. Those changes should not/barely be noticeable in Inkscape 1.4, but will help us with fixing bugs in multiple branches of Inkscape simultaneously (Inkscape 1.4.x and master/1.5.x).
  • Many parts of the code have been refactored, code has been simplified and modernized.
  • The code was adjusted to stay compatible with newer versions of third-party libraries.
  • Our automatic builds and dependency lists have been updated and changed many times, continuously adjusting to currently available packages for various operating systems and compilation frameworks.

Translations

The following languages have been updated for this version:

  • Basque
  • Belarusian
  • British English
  • Catalan
  • Croatian
  • Dutch
  • French
  • German
  • Greek
  • Hebrew
  • Hungarian
  • Icelandic
  • Italian
  • Japanese
  • Korean
  • Norwegian Bokmål
  • Portuguese
  • Romanian
  • Russian
  • Simplified Chinese
  • Slovenian
  • Spanish
  • Traditional Chinese
  • Ukrainian

Contributing to interface translations

Want to help with translations? Learn how to help!

Documentation

The man page, keyboard shortcuts reference and the Basic tutorial were updated for Inkscape 1.4.

Documentation translations were updated in:

  • German
  • Hungarian
  • Indonesian
  • Portuguese

Website

  • The website has been battling with multiple DoS attacks, requiring frequent quick action from our admin.
  • The language detection has been improved.
  • Multiple small style improvements have been made.
  • Setting up a development environment for contributing now works again.

Important Inkscape Project Milestones

Important Changes for Packagers

  • The compile flag WITH_INTERNAL_CAIRO has been removed (MR #6093).
  • tinycss2 is now needed for Inkscape extensions (and export) to work (Bug #5070).

Known issues

  • The background work for moving to GTK4 can impact Inkscape's performance negatively, most notably on Windows.

Other releases