2169 lines
110 KiB
Plaintext
2169 lines
110 KiB
Plaintext
|
------------------------------
|
||
|
GNU Image Manipulation Program
|
||
|
Development Branch
|
||
|
------------------------------
|
||
|
|
||
|
This is the unstable branch of GIMP.
|
||
|
|
||
|
|
||
|
Overview of Changes from GIMP 2.99.16 to GIMP 2.99.18
|
||
|
=====================================================
|
||
|
|
||
|
Core:
|
||
|
|
||
|
- New snapping options:
|
||
|
* "Snap to Bounding Boxes": allows on-canvas snapping to either layer
|
||
|
borders or center.
|
||
|
* "Snap to Equidistance": allows to snap a layer to be at the same distance
|
||
|
from a second one that this second one is to a third one, either
|
||
|
horizontally or vertically.
|
||
|
- GIMP is now able to use fonts with custom styles, which Pango is unable to
|
||
|
work with.
|
||
|
- Font names are not unique anymore, which means that GIMP doesn't rename
|
||
|
identically named fonts with #1 or #2, etc. as it used to do. These fonts
|
||
|
with same name are now properly working despite the name clash.
|
||
|
- GimpData now have a concept of collection, which is either a controlled name
|
||
|
for internal data, or a string constructed from the local file path for
|
||
|
external data. This will be used to serialize data objects hence easily
|
||
|
retrieve the proper data even when some data may have duplicate names.
|
||
|
- New "FG to Transparent (Hardedge)" gradient.
|
||
|
- New palette import supports:
|
||
|
* Adobe Swatch Exchange
|
||
|
* SwatchBooker
|
||
|
* Adobe Color Book (ACB)
|
||
|
- More robust support for ASE palette loading, by stripping space paddings and
|
||
|
being more warry of maliciously built files with invalid string data.
|
||
|
- Artifically set PANGOCAIRO_BACKEND=fc when running on Windows to use the
|
||
|
fontconfig backend, which enables anti-aliasing on Windows, unlike the
|
||
|
default pangocairo backend.
|
||
|
- XCF:
|
||
|
* Font information are more accurately stored (not only the font name, but
|
||
|
also storing various other attributes and even a file hash in the ideal
|
||
|
case where the exact same font file is available), allowing to find the
|
||
|
right font (if installed) on load with less errors.
|
||
|
* As a consequence of the previous point, new files with text layers will be
|
||
|
saved as a bumped XCF 19 version.
|
||
|
* Older XCF versions with text layers can still be saved using older XCF
|
||
|
versions as long as the text layers are untouched in an edit session.
|
||
|
|
||
|
Graphical User Interface:
|
||
|
|
||
|
- "Merge menu and title bar" option is not shown on macOS as it is not usable
|
||
|
there (the main menu is anyway out of the window from the start).
|
||
|
- Top menu has been special-cased for macOS (some items are removed with
|
||
|
"hidden-when" attribute set to "macos-menubar" value) for items which are
|
||
|
also available in the application menu.
|
||
|
- Menu section can now be named with the "section-name" attribute in
|
||
|
GtkBuilder ".ui" files. This can be used as a replacement of the former
|
||
|
"Placeholder" concept which we used to have (and has now been completely
|
||
|
removed).
|
||
|
Plug-ins or GEGL operations which want to make use of sections can use the
|
||
|
"[Section]" syntax. For instance installing a plug-in in the menu path
|
||
|
"<Image>/File/[Open]" will install the menu item at the end of the Open
|
||
|
section (i.e. after the various other open-file actions at the top of the
|
||
|
File menu).
|
||
|
- Some string or naming consistencies were fixed in source strings.
|
||
|
- GimpContainerEntry don't have inline completion anymore. Instead the result
|
||
|
pop-up always appear, even for one result. This is because a limitation of
|
||
|
GtkEntryCompletion: we cannot remove the case sensitivity search (see
|
||
|
gtk#275) which was very bad usage experience because when we reached a
|
||
|
single result, suddenly nothing happened anymore (no popup, no completion)
|
||
|
if case was different on any letter. It's just better to always have popup
|
||
|
with case insensitivity.
|
||
|
This widget is used for instance for on-canvas font selection.
|
||
|
- Some icons were modified with an added light border to make them better
|
||
|
visible on dark themes: gimp-tool-text icons in Color and Legacy icon themes
|
||
|
and gimp-tool-dodge in Color theme.
|
||
|
- Help menu rearranged to be better organized and also to move "About GIMP" as
|
||
|
the last item, which is its more conventional position.
|
||
|
- Many fixes to the default themes (including several cases of CSS rules
|
||
|
leaking from system themes).
|
||
|
|
||
|
Tools:
|
||
|
|
||
|
- Text tool:
|
||
|
* improve markup creation logic when replacing selected text in
|
||
|
order not to create useless styling markup interfering with other
|
||
|
features.
|
||
|
* Alignment for RTL languages is now more consistent with how it works in
|
||
|
other software (such as LibreOffice or Scribus).
|
||
|
|
||
|
Plug-ins:
|
||
|
|
||
|
- Farbfeld: new image format import/export support.
|
||
|
- OpenEXR:
|
||
|
* Files with single channels are always treated as grayscale, even when
|
||
|
they use non-conventional channel names. A notice message is also
|
||
|
presented to the user in a dialog for information.
|
||
|
- Metadata Editor:
|
||
|
* Various code cleanups and improvements;
|
||
|
* GUI improvements;
|
||
|
* Xmp.plus.ImageSupplierName can now only have one value;
|
||
|
* Improved Creation date handling;
|
||
|
* Synchronization (both for reading and writing) added between some Exif,
|
||
|
Xmp and Iptc equivalent tags. On reading, when equivalent tags have
|
||
|
different values at load, a terminal warning is now outputted.
|
||
|
- Script-fu:
|
||
|
* Generated dialog's titles are not prefixed with "Script-Fu: " anymore.
|
||
|
* Several scripts were removed and moved to gimp-data-extras: erase-rows,
|
||
|
grid-system, select-to-brush, select-to-image, select-to-pattern.
|
||
|
* script-fu-copy-visible was removed (and not moved to gimp-data-extras).
|
||
|
* New test scripts.
|
||
|
- New gimp-help-main script to link to the "Table of Contents" of the manual,
|
||
|
added to the "Help > User Manual" submenu.
|
||
|
- PSP: added support to load PSP ICC Profile data.
|
||
|
- Image Map: two new fields to the HTML Link tab and one new field to the
|
||
|
Javascript tab for area properties:
|
||
|
* accesskey: The same as the mnemonic key shortcuts in GTK, to activate an
|
||
|
area of the image map. Depending on the OS, you either hold ALT or
|
||
|
ALT+SHIFT and this key.
|
||
|
* tabindex: What order to select the area when the user presses Tab.
|
||
|
* onClick: Run a Javascript function when the user clicks on the area.
|
||
|
|
||
|
Translations:
|
||
|
|
||
|
- Many non-translatable strings were made translatable. Various other
|
||
|
localization bugs were handled.
|
||
|
|
||
|
API:
|
||
|
|
||
|
- Changes in libgimpconfig:
|
||
|
* GimpConfig serialization doesn't break anymore if one property
|
||
|
serialization fails. GIMP will now continue to serialize the rest. In
|
||
|
particular, it will allow to retrieve as many arguments as possible
|
||
|
between plug-in runs.
|
||
|
- Changes in libgimp:
|
||
|
* GimpResource can now be (de)serialized using the data name and collection
|
||
|
so that we are now able to retrieve a used resource quite reliably between
|
||
|
runs.
|
||
|
|
||
|
Build:
|
||
|
|
||
|
- Windows 10 becomes the new minimal support for the 3.0 stable series on
|
||
|
Windows. This bump happens because of end-of-support by Microsoft itself,
|
||
|
and also by MSYS2 project which is our base for the official installers.
|
||
|
- CI now generates babl and GEGL API reference HTML as artifact tarballs.
|
||
|
- New meson options -Dfits and -Dopenmp to enable/disable respectively FITS or
|
||
|
OpenMP support more explicitly (allowing to bypass auto-detection).
|
||
|
- Pango 1.50 or higher is now required as a result of using
|
||
|
pango_attribute_as_font_desc(). Also pango, pangocairo and pangoft2 now use
|
||
|
the same minimum version requirement.
|
||
|
|
||
|
|
||
|
Overview of Changes from GIMP 2.99.14 to GIMP 2.99.16
|
||
|
=====================================================
|
||
|
|
||
|
Core:
|
||
|
|
||
|
- "Anchor" tooltip changing depending on whether we are floating over a layer
|
||
|
or layer mask.
|
||
|
- GIMP_TIMER_START|END are no-op on release builds.
|
||
|
- Ctrl-F overridden in our item dockables to trigger our item search popover
|
||
|
(multi-item selection, ability to use regexp or glob search by enabling these
|
||
|
in Preferences, etc.) rather than the default GTK selection popup for tree
|
||
|
views.
|
||
|
- All code is now multi-item aware (even though it might mean specifically
|
||
|
forbidding using some features on multiple items).
|
||
|
- Better support of non-ASCII characters in paths on Windows and other fixes
|
||
|
for Windows: API un-deprecation, unicode variants of functions…
|
||
|
- Copy|Cut-Paste code reworked further.
|
||
|
- Action "Crop to Selection" renamed to "Resize Layers to Selection".
|
||
|
- Action "Crop to Content" renamed to "Crop Layers to Content".
|
||
|
- If any opened image (with a display) is dirty, then GIMP will now inhibit the
|
||
|
log-out event on OSes which support it.
|
||
|
- Port from GtkAction/GtkUIManager to GAction/GMenu finished.
|
||
|
- The action search now shows the top menu path for actions when available.
|
||
|
- Actions can now be attributed multiple shortcuts. The duplicate actions
|
||
|
ending in `-accel` were removed in favor of multiple shortcuts and a few
|
||
|
secondary (semantic) shortcuts were added such as `Copy`/`Cut`/`Paste`
|
||
|
buttons for relevant actions, or `ZoomIn`/`ZoomOut` for canvas zoom,
|
||
|
`Forward`/`Back` to navigate through image tabs, but also some numpad
|
||
|
shortcuts like the `/` divide from the numpad for the action search
|
||
|
(additionally to the base keyboard `/` key).
|
||
|
It is not possible to attribute several shortcuts from GUI yet.
|
||
|
- An action is automatically generated for all GEGL operations which would
|
||
|
normally appear in the GEGL Operation tool. This includes in particular
|
||
|
third-party GEGL operations which might be user-installed. It makes these
|
||
|
filters also searchable in the action search, usable in menus and shortcuts
|
||
|
can be assigned as well.
|
||
|
- If present, the GEGL key "gimp:menu-label" will be used to set the short
|
||
|
label of the generated action (short labels are typically used in menus since
|
||
|
the menu path can serve as context). Otherwise the "title" with appended
|
||
|
"..." is used.
|
||
|
- GimpAction now have a concept of short vs. long labels, which can be used in
|
||
|
different places. In particular, in action search, we usually want the long
|
||
|
label, whereas in menus, we usually want the short label as we have context
|
||
|
(though the latter can be tweaked by a custom "label-variant" attribute in
|
||
|
.ui files).
|
||
|
- New "Middle Gray (CIELAB)" fill option (new image or new layer).
|
||
|
- Stroke Selection: "Line" and "Paint tool" styles are now in a stack
|
||
|
switcher instead of radio buttons. More advanced options are not "hidden"
|
||
|
anymore in a foldable widget.
|
||
|
- New grayscale color picking mode.
|
||
|
- .aco palettes are now imported with babl. As a result, it is now possible to
|
||
|
import CIE Lab palettes (colorspace 7)
|
||
|
- Action search now displays a "help" icon which can be clicked to show the
|
||
|
currently selected action's manual page (or the action search manual page if
|
||
|
no actions are selected). Alternatively the F1 shortcut will do the same.
|
||
|
- Basic matrix operations code was optimized.
|
||
|
- Fill/Stroke Path/Selection split the "Solid color" option into a "Foreground
|
||
|
color" and "Background color".
|
||
|
- Standardize to "X-bit" wording (e.g. "32-bit floating point" rather "32 bit
|
||
|
floating point").
|
||
|
|
||
|
Tools:
|
||
|
|
||
|
- GEGL Operation: auto-activate when enabled.
|
||
|
- Transform tools and GEGL operation don't auto-activate when opening a new
|
||
|
image or changing the active image.
|
||
|
- Align tool: "use extents of layer contents" also applies to the alignment
|
||
|
reference (not only the target objects).
|
||
|
- Color picker: pick in the image's RGB space.
|
||
|
- Text tool: new tool option "Show on-canvas editor" to toggle the visibility
|
||
|
of the on-canvas dialog.
|
||
|
- Unified Transform tool: the transform matrix is now selectable in the
|
||
|
on-canvas dialog (for instance to be easily re-usable in other software).
|
||
|
|
||
|
Graphical User Interface:
|
||
|
|
||
|
- Default, Compact and Gray themes now display a three-dot handle to paned
|
||
|
separators to improve accessibility and discoverability of the drag ability.
|
||
|
- The paned separator width is also increased a bit for accessibility (though
|
||
|
the Compact theme keeps a smaller separator width).
|
||
|
- Consistently use "Soft-proofing" wording instead of "Softproofing" or "Soft
|
||
|
proofing"
|
||
|
- The "GEGL Operation…" item was moved out of the "Filters > Generic" menu and
|
||
|
into the "Tools" menu.
|
||
|
- If present, the GEGL key "gimp:menu-path" will now be used by GIMP to create
|
||
|
a menu item for an operation in a given menu path.
|
||
|
- Default theme is less dark and the previous Default theme is renamed
|
||
|
"Darker".
|
||
|
- "Default" theme does not use smaller font size (than system theme) anymore;
|
||
|
but the "Compact" theme now does.
|
||
|
- New option "Merge menu and title bar" in Preferences > Image Windows: this
|
||
|
is basically an option to switch to Client Side Decoration for the image
|
||
|
windows (menu will be inside the title bar). It is OFF by default.
|
||
|
|
||
|
Actions:
|
||
|
|
||
|
- "tools-rotate-arbitrary" and "tools-rotate-image-arbitrary" are now disabled
|
||
|
when no image is opened.
|
||
|
|
||
|
Plug-ins:
|
||
|
|
||
|
- JPEG-XL:
|
||
|
* Initial support for CMYK/A JPEGXL export: Key and Alpha data is saved in
|
||
|
extra channels, and the simulation profile is saved as well.
|
||
|
Per the specification developers, the format does not support 'naive' CMYK
|
||
|
conversion, so a profile is required for export. The option will be
|
||
|
disabled if not set.
|
||
|
* Support libjxl 0.9: some API were removed which would have broken
|
||
|
the plug-in build. Now it should work both with old and new
|
||
|
version.
|
||
|
- Script-fu:
|
||
|
* Byte support: add a new type 'byte' to be able to handle binary data while
|
||
|
still retaining the utf8 char and string behavior.
|
||
|
* Enum values are now generated from GIR.
|
||
|
- Script-fu console: command history now persists across GIMP sessions.
|
||
|
- PSD:
|
||
|
* PSD clipping paths: import and export support.
|
||
|
* Unsupported features are now listed in a dialog on import.
|
||
|
* Add compatibility notice on export: some people have noted that legacy
|
||
|
layer modes have better compatibility when exporting PSDs and reopening
|
||
|
them in Photoshop.
|
||
|
* New "file-psd-load-metadata" procedure to be used by other plug-ins in
|
||
|
order to load Photoshop-format metadata. Some formats in particular allow
|
||
|
PSD style metadata (e.g. see TIFF and JPEG).
|
||
|
- TIFF:
|
||
|
* PSD metadata (both in image or layer level) can now be loaded by calling
|
||
|
the new "file-psd-load-metadata" PDB procedure.
|
||
|
* IBM PC Formatted TIFF layers are now supported on import.
|
||
|
- JPEG:
|
||
|
* PSD metadata (image level only, e.g. paths) can now be loaded by calling
|
||
|
the new "file-psd-load-metadata" PDB procedure.
|
||
|
* Clipping path import added.
|
||
|
* Option "4:2:2 horizontal (chroma halved)" renamed to "4:2:2 (chroma halved
|
||
|
horizontally)" and "4:2:2 vertical (chroma halved)" renamed to "4:4:0
|
||
|
(chroma halved vertically)". Research indicates it to be the most usual
|
||
|
notation for these options.
|
||
|
- DDS:
|
||
|
* OpenMP support enabled when available on the build machine.
|
||
|
- All Python 3 plug-ins whose Python 2 variants used to have a GUI now also
|
||
|
have one.
|
||
|
- Script "Predator" removed.
|
||
|
- PAM: import and export (formats: GRAYSCALE, GRAYSCALE_ALPHA, RGB, RGB_ALPHA)
|
||
|
support added. PAM files are essentially PPM files with a different header
|
||
|
format and alpha/16 bit support.
|
||
|
- GIF:
|
||
|
* Load error message handling improved.
|
||
|
* Keep GIF's full palette on import (sometimes needed for consistency when
|
||
|
used in a specific pipeline, e.g. a videogame engine with fixed palette).
|
||
|
- PCX:
|
||
|
* new radio option "override-palette" to override PCX 1 bit palette.
|
||
|
* 8bpp with 4 planes in PCX/DC import support added (we were only supporting
|
||
|
3 planes).
|
||
|
- QOI: new format support (import and export).
|
||
|
- Amiga IFF/ILBM: initial support for importing indexed ILBM, Amiga PBM, and
|
||
|
ACBM images.
|
||
|
- DCX: new import support (DCX files are containers that store up to 1023 PCX
|
||
|
files).
|
||
|
- Plug-ins ported to GAction: animation-play, colormap-remap, ifs-compose,
|
||
|
gfig, ImageMap.
|
||
|
- Plug-ins ported to GimpProcedureConfig and GimpProcedureDialog:
|
||
|
align-layers, hot, wavelet-decompose, file-sunras, file-heif, file-tga,
|
||
|
file-pat, file-xpm, file-csource, file-jp2-load, file-dds (import),
|
||
|
file-sgi, file-fli, file-pnm, file-gbr, file-psp, file-aa, bmp-save,
|
||
|
despeckle, blinds, contrast-retinex, jigsaw, nl-filter, destripe, file-mng,
|
||
|
file-html-table, file-xbm, file-pdf-load, file-gif-save, file-ps,
|
||
|
border-average, mail, checkerboard.
|
||
|
- metadata-viewer and metadata-editor: graphical interfaces are not built from
|
||
|
GtkBuilder .ui files anymore. These were the last instances of using this
|
||
|
format (except for our new menus!) for creating full GUIs as we don't want
|
||
|
to go this way anymore!
|
||
|
- FITS:
|
||
|
* Ported to cfitsio library for loading/exporting. This allows us to
|
||
|
import compressed FITS files (GZIP, HCOMP, PLIO, RICE) in 8/16/32
|
||
|
bit and float/double precision.
|
||
|
* As a result of the port, this plug-in is now optional.
|
||
|
- ILBM: "Hold and Modify" (HAM) mode use control bits to increase the
|
||
|
palette beyond what's stored in the CMAP chunk. We now check if HAM
|
||
|
mode is set and then interprets the plane bits accordingly.
|
||
|
|
||
|
API:
|
||
|
|
||
|
- Changes in libgimpwidgets:
|
||
|
* New functions:
|
||
|
+ gimp_int_store_new_array(): variant of gimp_int_store_new() which will
|
||
|
work in bindings.
|
||
|
+ gimp_spin_scale_get_mnemonic_keyval()
|
||
|
* Improved annotations or usage:
|
||
|
+ gimp_procedure_dialog_get_spin_scale(): factor must be 1.0 for integer
|
||
|
properties.
|
||
|
- Changes in libgimp:
|
||
|
* New classes:
|
||
|
+ GimpResource: with unique int ID, instead of data name. Actual data will
|
||
|
be one of the following subclasses:
|
||
|
+ GimpBrush
|
||
|
+ GimpFont
|
||
|
+ GimpGradient
|
||
|
+ GimpPalette
|
||
|
+ GimpPattern
|
||
|
* New functions:
|
||
|
+ gimp_procedure_dialog_fill_scrolled_window()
|
||
|
+ gimp_procedure_dialog_get_size_entry()
|
||
|
* Improved annotations or usage:
|
||
|
+ set_i18n() method of GimpPlugIn expects a UTF-8 catalog directory.
|
||
|
+ clarify gimp_image_set_file() usage (only for XCF files).
|
||
|
+ gimp_image_add_sample_point()
|
||
|
+ gimp_image_get_sample_point_position()
|
||
|
- Changes in libgimpbase:
|
||
|
* New functions:
|
||
|
+ gimp_bind_text_domain()
|
||
|
+ gimp_value_array_copy()
|
||
|
* Improved annotations or usage:
|
||
|
+ gimp_locale_directory() returns a string in the OS encoding for all but
|
||
|
Windows (UTF-8), i.e. GLib "filename" encoding.
|
||
|
+ Metadata "Exif.Image.ImageResources" and "Exif.Image.0x935c" are not
|
||
|
exported anymore. These are specific to Photoshop, and while we cannot
|
||
|
modify them, they can contain sensitive information (e.g. a thumbnail).
|
||
|
+ Exif.Photo.PixelXDimension and Exif.Photo.PixelYDimension metadata tags
|
||
|
will now be updated (if they already exist in the image) when resizing
|
||
|
and exporting.
|
||
|
- Changes in libgimpconfig:
|
||
|
GStrv config properties are now properly serialized and deserialized for use
|
||
|
as plug-ins arguments.
|
||
|
* New functions:
|
||
|
+ gimp_config_serialize_strv()
|
||
|
+ gimp_config_deserialize_strv()
|
||
|
- PDB:
|
||
|
* Remove GimpUint8Array in favor of GBytes.
|
||
|
|
||
|
Build:
|
||
|
|
||
|
- MacPorts support for macOS added (this is even now the official support as we
|
||
|
build our new packages with MacPorts).
|
||
|
- meson: make sure libgimp does not depend on GTK+.
|
||
|
- GLib requirement bumped to version 2.70 as minimum.
|
||
|
- Improved C99 compatibility of IPC_RMID check.
|
||
|
- Windows: port fileicon.ico from gimp-2-10 with additional sizes for clearer
|
||
|
icons on different resolutions and displays.
|
||
|
- Improve our build scripts to better handle sanitizer tools.
|
||
|
- Fix some broken unit tests in the meson build.
|
||
|
- Meson build options 'lua', 'javascript' and 'python' are now features, and
|
||
|
not boolean. I.e. use option values 'enabled'/'disabled' (defaulting to
|
||
|
'auto') instead of true/false.
|
||
|
- Meson build 'vala-plugins' option was renamed to simply 'vala'.
|
||
|
- Added dependency to Exiv2 0.27.4.
|
||
|
- JUnit reports from Meson for the CI build.
|
||
|
- autotools was fully dropped!
|
||
|
- Debian 12 bookworm is now our base platform for CI, but also for deciding
|
||
|
whether we can bump a dependency minimum required version or not. This is a
|
||
|
consequence of approaching GIMP 3.0 release so we don't want to bump minimum
|
||
|
versions too high.
|
||
|
- GEGL requirement bumped to GEGL 0.4.46.
|
||
|
- Windows installer's welcome image is now generated in several sizes
|
||
|
from our splash screen image, avoiding discrepancies as well as
|
||
|
unnecessarily filling our repository with a history of duplicate
|
||
|
images.
|
||
|
- Add some logic to common/ and python/ plug-ins to facilitate running
|
||
|
GIMP from the build directory (without being installed) while still
|
||
|
able to load all plug-ins.
|
||
|
- gtk-mac-integration was dropped as a dependency on macOS. It made problems
|
||
|
and is apparently less needed with GTK+3.
|
||
|
- Supported macOS version was bumped from macOS 10.12 to macOS 10.13.
|
||
|
|
||
|
Debugging:
|
||
|
|
||
|
- New --runtime option to `flatpak-releases` debugging script (a dev tool
|
||
|
allowing for instance to bisect issues through flatpak builds). This option
|
||
|
allows to list the runtime builds (additionally to the main GIMP flatpaks).
|
||
|
|
||
|
Documentation:
|
||
|
|
||
|
- More developer docs is being moved to the new developer website.
|
||
|
- Better clarify licensing of files under data/.
|
||
|
- Improve flatpak maintenance doc (build/flatpak/README.md).
|
||
|
|
||
|
Translations:
|
||
|
|
||
|
- 25 translations were updated: Basque, Bulgarian, Catalan, Chinese (China),
|
||
|
Chinese (Taiwan), Danish, Esperanto, French, Georgian, German, Greek,
|
||
|
Hungarian, Icelandic, Italian, Lithuanian, Persian, Polish, Portuguese,
|
||
|
Romanian, Russian, Slovenian, Spanish, Swedish, Turkish, Ukrainian.
|
||
|
|
||
|
|
||
|
Overview of Changes from GIMP 2.99.12 to GIMP 2.99.14
|
||
|
=====================================================
|
||
|
|
||
|
Core:
|
||
|
|
||
|
- The download button in About dialog when a new version is available
|
||
|
will now show the development download page when running unstable
|
||
|
branch code.
|
||
|
- The update check on macOS now uses native HTTPS-able API, so that we
|
||
|
don't have to wait for GIO to have HTTPS modules for macOS.
|
||
|
- The main process is now run as a GimpApp which is a new class derived from
|
||
|
GtkApplication. The main process of `gimp-console` on the other hand is a
|
||
|
`GimpConsoleApp` which is derived from GApplication. Both new classes share
|
||
|
a same GimpCoreApp interface. This is a main step for the GTK+3 port.
|
||
|
- Various improvements on awareness of multi-item selection across core
|
||
|
features. A notable fix is the preview when transforming multiple layers at
|
||
|
once (with various transform tools). Various actions are now multi-drawable
|
||
|
aware as well.
|
||
|
- New "Vectors Structure" in the XCF format: XCF files (format bumped to
|
||
|
version 18) can now store and load all the usual and common properties of
|
||
|
other items. In other words, it makes XCF now able to store locks, color
|
||
|
tags and several selected paths.
|
||
|
- XCF saving with RLE and zlib encoding are now multi-threaded and therefore
|
||
|
much faster in most cases.
|
||
|
- Pasting an image now creates a new layer by default (not a Floating Layer
|
||
|
anymore). The only 3 cases where we still have floating items are:
|
||
|
* when pasting into a layer mask;
|
||
|
* when doing quick copy/cut paste on-canvas with the Alt modifiers;
|
||
|
* when floating layers explicitly with the "Float" action.
|
||
|
- Copy-paste code was deeply reviewed and re-specified in the light of
|
||
|
multi-item selection; it's still a WIP:
|
||
|
* When pasting several drawables, we currently paste them over the top
|
||
|
selected layer (visually in Layers dockable).
|
||
|
* Pasted data position was rewritten, based on existing logic, but taking
|
||
|
into account the multiple selected items.
|
||
|
* Pasting a selected area from multiple layers still creates multiple
|
||
|
layers, not merged pixel contents as a single layer.
|
||
|
* New layers created when copying from a selection are consistently the
|
||
|
offset and dimensions of the bounding box of the dimension.
|
||
|
* When a layer and one of its group layer parent are selected, it is
|
||
|
equivalent to have only the child layer selected.
|
||
|
- 2 new actions were added: "Paste as Single Layer" and "Paste as Single Layer
|
||
|
in Place" under the "Paste as" submenu of Edit menu. These paste the copied
|
||
|
layers as a single merged layer, instead of as several layers (as "Paste"
|
||
|
and "Paste in Place" do).
|
||
|
|
||
|
Graphical User Interface:
|
||
|
|
||
|
- New "Gray" theme based on a 18.42% luminance middle-gray background, which
|
||
|
should be a good neutral environment for color work.
|
||
|
- The foreground/background editor in the toolbox will now take into account
|
||
|
the toolbox icon size and resize itself accordingly (live, as you change
|
||
|
theme). This allows to have really narrow toolbox when you use small icons.
|
||
|
- Theme-override icon size selection in Preferences > Themes: this allows to
|
||
|
override theme-set icon sizes, with a global concept of small, medium, large
|
||
|
and huge. The following widgets are so far modified: toolbox icons, fg/bg
|
||
|
editor in toolbox, fg/bg editor in Colors dockable, dockables tab icons,
|
||
|
bottom buttons (in the button box) of dockables, header eye and lock icons
|
||
|
above item trees, and eye and lock icon switches in item tree cells.
|
||
|
- Symmetry dockable contents is now shown, yet deactivated, when no images are
|
||
|
opened, improving discoverability.
|
||
|
- Reworked the "Convert to * Working Space?" dialog into a "Keep the Embedded
|
||
|
Working Space?" one. Keeping an image working space is now the recommended
|
||
|
and default action. "Convert" became an explicit action requiring to click
|
||
|
(neither mapped to Enter nor Escape keys).
|
||
|
- "Floating Selection" renamed to "Floating Layer" or "Floating Mask"
|
||
|
depending on the type of item it applies to.
|
||
|
- "Floating Masks" are now drawn above the layer mask in the Layers dockable,
|
||
|
making the fact that they would anchor to the below layer mask (not the
|
||
|
layer) much more obvious.
|
||
|
- "Paste into Selection" and "Paste into Selection in Place" were moved under
|
||
|
the "Paste as" submenu of Edit menu.
|
||
|
|
||
|
Tools:
|
||
|
|
||
|
- Text tool: new "Outlined" and "Outlined and filled" options, with various
|
||
|
sub-options to choose the outline style, color, pattern, width, cap and join
|
||
|
styles, miter limit, anti-aliasing and dash pattern.
|
||
|
- Align tool:
|
||
|
* now multi-item aware, it is much more usable than it used to be when we
|
||
|
had to click on canvas to select items.
|
||
|
* On-canvas clicks are now only needed to select guides (Alt or Alt-Shift
|
||
|
click and selected guide colors change) or for the reference object
|
||
|
(normal click).
|
||
|
* Also the reference object gets on-canvas handles and the name is written
|
||
|
in the dockable, making it obvious if you selected the right reference or
|
||
|
not.
|
||
|
* Moreover the selected reference will now loop when layers are stacked on
|
||
|
each other, which allow to select a bottom layer, even if there are layers
|
||
|
above it everywhere.
|
||
|
* New option "Use extents of layer contents" to Align tool: this is similar
|
||
|
to first run "Crop to Content" on every layer to align or distribute
|
||
|
(without actually cropping the layers).
|
||
|
* Fine-grained align/distribute button sensitivity to make it more obvious
|
||
|
when an action would not make any change anyway.
|
||
|
* New anchor point setting (pivot widget) to choose which part of the target
|
||
|
items will be aligned or distributed.
|
||
|
* Get rid of various broken distribution actions.
|
||
|
* Distribution actions don't move the 2 extreme (top/bottom or left/right
|
||
|
depending on distribution direction) targets, but distribute all other
|
||
|
targets within their range. It is more consistent with how it works in
|
||
|
other software.
|
||
|
* Adding 2 "Distribute with evenly (horizontal|vertical) gaps" actions,
|
||
|
which distribute by keeping a common gap between objects instead of
|
||
|
between anchor points.
|
||
|
* Offset settings have been removed.
|
||
|
- Transform tools are now auto-activated on selection (and when switching
|
||
|
images or item selection).
|
||
|
|
||
|
Plug-ins:
|
||
|
|
||
|
- PDF:
|
||
|
* Export code was ported to GimpProcedureDialog.
|
||
|
* New "root-layers-only" argument to "file-pdf-save", which comes
|
||
|
with a checkbox in the export dialog to allow exporting as pages
|
||
|
the root layers only. The main usage is to organize your pages'
|
||
|
contents in layer groups.
|
||
|
- AVIF:
|
||
|
* RGB AVIF compatibility with Safari on iOS 16.0: Some AVIF images are
|
||
|
rendered differently in Apple's implementation compared to implementations
|
||
|
of Google and Mozilla. See: https://github.com/AOMediaCodec/av1-avif/issues/195
|
||
|
This changes requires libheif 1.10.0 though the plug-in can still build
|
||
|
with older libheif.
|
||
|
- PSD:
|
||
|
* export of CMYK(A) files added, with 8 or 16-bit precision per channel,
|
||
|
using a CMYK soft-proof profile for conversion.
|
||
|
* Paths are now exported with PSD files.
|
||
|
- JPEG-XL:
|
||
|
* Metadata import/export now supported (requires libjxl 0.7.0).
|
||
|
- Python-Console:
|
||
|
* sys.stdout.flush() implemented as a no-op inside the console, to be able
|
||
|
to easily copy-paste code, or using libraries which flush the output.
|
||
|
- ICNS:
|
||
|
* Initial support for loading and exporting.
|
||
|
- TIFF:
|
||
|
* New toggle to optionally load reduced pages. We keep a heuristic to try
|
||
|
and guess whether these are thumbnails (single reduced image in the second
|
||
|
position), but it's only used to decide whether the option is checked by
|
||
|
default or not. It is now up to anyone to decide or not whether they want
|
||
|
to load these reduced images.
|
||
|
|
||
|
API:
|
||
|
|
||
|
- Changes in libgimp:
|
||
|
* Abstract method get_window() of GimpProgressVtable had its signature
|
||
|
changed. The window ID is now a guint64.
|
||
|
* New functions:
|
||
|
+ gimp_text_layer_set_markup()
|
||
|
+ gimp_image_get_selected_channels()
|
||
|
+ gimp_image_get_selected_vectors()
|
||
|
+ gimp_image_list_selected_channels()
|
||
|
+ gimp_image_list_selected_vectors()
|
||
|
+ gimp_image_set_selected_channels()
|
||
|
+ gimp_image_set_selected_vectors()
|
||
|
+ gimp_image_take_selected_channels()
|
||
|
+ gimp_image_take_selected_vectors()
|
||
|
+ gimp_image_list_selected_drawables()
|
||
|
* Updated functions:
|
||
|
+ gimp_vectors_stroke_translate() now uses offsets in double type.
|
||
|
* New classes:
|
||
|
+ GimpTextLayer: child class of GimpLayer.
|
||
|
- Changes in libgimpwidgets:
|
||
|
* Updated widgets:
|
||
|
+ GimpPickButton now has a specific implementation for Windows. In
|
||
|
particular it improves color picking with multi-monitor and scales
|
||
|
different than 100%.
|
||
|
|
||
|
Build:
|
||
|
|
||
|
- meson requirement bump to meson 0.56.0.
|
||
|
- Many fixes to the meson build scripts, making it closer to be our
|
||
|
official build for GIMP 3.0.
|
||
|
- The CI now generates a tarball containing the GIMP references,
|
||
|
generated by gi-docgen and g-ir-doc.
|
||
|
- Improved Clang 15.0.0 support.
|
||
|
- "win*-nightly" jobs were added back and are now more efficient with the
|
||
|
--output-dll-list option.
|
||
|
- babl requirement bumped to babl 0.1.98.
|
||
|
- GEGL requirement bumped to GEGL 0.4.40.
|
||
|
- GIMP macOS builds (gimp-macos-build repository) was moved to using MacPorts
|
||
|
in order to take advantage of a bigger community to maintain our
|
||
|
dependencies.
|
||
|
- GIMP now has an Apple Silicon build.
|
||
|
|
||
|
|
||
|
Overview of Changes from GIMP 2.99.10 to GIMP 2.99.12
|
||
|
=====================================================
|
||
|
|
||
|
Core:
|
||
|
|
||
|
- Added concept of "hidden item" to a GimpImage. This would allow to
|
||
|
process non attached items for internal processing more easily.
|
||
|
- Do not show a crosshair anymore when "Show brush outline" is
|
||
|
checked and "Show pointer for paint tools" is unchecked, if the
|
||
|
brush outline cannot be drawn (in which case a fallback 4-arcs
|
||
|
generic outline showing the size is displayed), for instance because
|
||
|
using a dynamic changing the size.
|
||
|
- When both "Show brush outline" and "Show pointer for paint tools"
|
||
|
are unchecked, show a minimal visual feedback of a few pixels only,
|
||
|
as inconspicuous as possible, instead of a crosshair.
|
||
|
- Move and reorganize pointer-related settings in Preferences from
|
||
|
"Image Windows" to "Input Devices" tabs.
|
||
|
- On macOS, delay opening new images dropped on the application icon
|
||
|
in the dock to after GIMP is fully initialized.
|
||
|
- Some code reorganization and factorization of image colormap and
|
||
|
palette handling.
|
||
|
- Language changes will trigger plug-in query() call at next GIMP
|
||
|
restart. This allows to have strings in query() and stored in GIMP
|
||
|
config being re-localized. This implies both explicit language
|
||
|
changes in Preferences or system language changes when GIMP is set
|
||
|
to follow system language.
|
||
|
- Keyboard grab removed from the canvas display, hence getting rid of
|
||
|
annoying grab permission warnings on Wayland.
|
||
|
- Preferences > Display > Transparency > Check style has now a new
|
||
|
option "Custom checks" allowing to select any RGB colors.
|
||
|
- Full migration from intltool to gettext only.
|
||
|
- The soft-proof profile, soft-proofing rendering intent and whether
|
||
|
black point compensation is used when soft-proofing are now image
|
||
|
data. These have also been moved to the Image menu (out of View).
|
||
|
These 3 simulation data are also stored in the XCF file now.
|
||
|
- Hacks on canvas rulers and statusbar added in GIMP 2.99.10 for macOS
|
||
|
triggering too big redraws were removed. This depends on patches
|
||
|
added to upcoming GTK+ 3.24.35.
|
||
|
- CMYK color picking and sample point now use babl and the space
|
||
|
specified by the soft-proof profile set on the image, if any.
|
||
|
- The "Create New Image" dialog now has settings for the simulation
|
||
|
profile, intent and black point compensation. This is also shown in
|
||
|
templates and the "Default Image" tab in Preferences, and has been
|
||
|
removed from the "Color Management" tab, because these are now first
|
||
|
and foremost image data.
|
||
|
- GimpColorFrame is now current image's simulation profile/intent/bpc
|
||
|
aware. In other words, CMYK shown by the color picker or in sample
|
||
|
point shows values in the correct simulation space (not in some
|
||
|
default CMYK space).
|
||
|
- A new default action to change the current brush size was mapped to
|
||
|
Alt + right button click.
|
||
|
- Some Preferences settings have been moved to a new Preferences >
|
||
|
Canvas Interaction tab.
|
||
|
- All on-canvas interactions (panning, canvas rotation, etc.) are now
|
||
|
customizable in Preferences > Canvas Interaction > Modifiers tab. It
|
||
|
allows to switch/change the modifiers used for an action, or even
|
||
|
just remove some modifiers mapping (when you never use an action,
|
||
|
e.g. some people say the canvas rotation is not useful to them).
|
||
|
- GtkAction-s can also be mapped to modifiers now through the same
|
||
|
settings.
|
||
|
- GIMP themes can now have a "gimp-dark.css" file which will be used
|
||
|
if the "Use dark theme variant if available" option was checked.
|
||
|
- The FG/BG editor area in the toolbox is now sized relatively to
|
||
|
toolbox icon size, allowing for it to be much bigger when using big
|
||
|
icons, or smaller when using small icons (which can e.g. be aligned
|
||
|
on a very narrow single column for people who appreciate this
|
||
|
organization).
|
||
|
- The Welcome dialog can now show "demo" bullet points, from scenarios
|
||
|
written within the Appstream metadata.
|
||
|
|
||
|
Tools:
|
||
|
|
||
|
- The "Fill by line art detection" mode of the Bucket Fill tool got
|
||
|
the following improvements:
|
||
|
* New "Stroke borders" option where you can select a paint tool
|
||
|
(except source tools) to stroke the fill mask before filling with
|
||
|
the color. The settings will be the ones as set on the
|
||
|
corresponding tool (except for the color).
|
||
|
* The options got reorganized in 3 sections (Line Art Detection,
|
||
|
Line Art Closure and Fill Borders) and some options were reworded.
|
||
|
This should hopefully make the now many options more
|
||
|
understandable.
|
||
|
- Full text layer's text size will now be changed when changing font
|
||
|
size in the text editor window, when no text is selected.
|
||
|
- Raise tool options before blinking specific settings widgets when
|
||
|
some tools fail to work because of various tool options settings
|
||
|
(e.g. selection tool cannot remove from an empty selection; warp
|
||
|
tool cannot stroke; move tool cannot move because of the types of
|
||
|
object to move isn't selected; and so on).
|
||
|
|
||
|
Graphical User Interface:
|
||
|
|
||
|
- New "Drag to Zoom" mode and speed settings in Preferences. Existing
|
||
|
drag-to-zoom behavior was linear depending only on pointer direction
|
||
|
(which makes it more or less time-based if we consider that pointer
|
||
|
events are regular). The new mode will take the actual distance
|
||
|
moved into account allowing to go faster or slower by dragging
|
||
|
further or not. The "speed" settings allows a finer zoom speed
|
||
|
control for both the old and new modes.
|
||
|
- Touchpad gesture rotation (2-finger pinch) on canvas now
|
||
|
implemented. Note that rotation or scaling by pinch are exclusive so
|
||
|
GIMP will detect the expected behavior through the initial movement
|
||
|
and will therefore lock on either rotation or scaling for the whole
|
||
|
duration of the pinch.
|
||
|
- Slight tweak of the "You will have to restart GIMP" popup: the list
|
||
|
now uses nicer "bullet point" characters and the nick (short
|
||
|
description) is shown rather than the internal property name.
|
||
|
- New soft-proof toggle in status bar to see the soft-proofing status
|
||
|
and enable/disable it. It is only active when a soft-proof profile
|
||
|
was set.
|
||
|
- GimpContainerTreeView (e.g. Layers/Channels/Vectors dockables) now
|
||
|
have zooming through ctrl+mouse wheel (for preview size).
|
||
|
- GimpContainerTreeView (e.g. Layers/Channels/Vectors dockables) now
|
||
|
have zooming with touchpad pinch (touchscreen pinch now kinda exists
|
||
|
but is not so usable in our tests, at least on Linux through
|
||
|
libinput) for preview size.
|
||
|
- Gradient editor now has zooming with touchpad pinch (touchscreen
|
||
|
pinch not so fancy either, at least on Linux through libinput,
|
||
|
similar to GimpContainerTreeView case).
|
||
|
- A new soft-proofing pop-over dialog appears when right-clicking the
|
||
|
new soft-proof toggle in the status bar. It allows to view or change
|
||
|
all soft-proofing related settings (whether they are associated to
|
||
|
the image, such as the profile, intent or black-point compensation;
|
||
|
or to the view, such as the out-of-gamut check) very easily.
|
||
|
- New "Default" theme containing a dark and light variant. As the name
|
||
|
implies, this theme is now made the default theme on new
|
||
|
installations.
|
||
|
- New "Compact" theme containing a dark and light variant.
|
||
|
|
||
|
Command Line Interface:
|
||
|
|
||
|
- Unless only one batch interpreter is available, there is no default
|
||
|
interpreter anymore (it used to be script-fu). Therefore if you set
|
||
|
`--batch` but not `--batch-interpreter`, GIMP will output an error
|
||
|
message and will list the available interpreters.
|
||
|
- GIMP will stop running the batch commands as soon as one command
|
||
|
fails (it won't try the following ones).
|
||
|
- A new `--quit` option allows you to quit GIMP immediately after
|
||
|
running the batch commands.
|
||
|
- If `--quit` is set and batch commands are run, the GIMP binary exit
|
||
|
code will propagate errors from any batch failure. Exit codes are
|
||
|
taken from common Linux error codes: 0 for success, 69 for service
|
||
|
unavailable (e.g. setting a non-existing interpreter name), 64 for
|
||
|
usage (e.g. not specifying any interpreter or calling errors), 70
|
||
|
for execution errors (bugs in the interpreter plug-in) and 130 for
|
||
|
canceling the call.
|
||
|
|
||
|
Plug-ins:
|
||
|
|
||
|
- BigTIFF: our TIFF plug-in now officially supports BigTIFF import and
|
||
|
export.
|
||
|
* Import was actually already working transparently if you had
|
||
|
a recent enough libtiff. Now the recent libtiff is enforced by
|
||
|
dependency requirements.
|
||
|
* Export support was added with a checkbox in the interactive dialog
|
||
|
and a new "bigtiff" argument in the "file-tiff-save" PDB
|
||
|
procedure.
|
||
|
* When an interactive export of ClassicTIFF fails for the explicit
|
||
|
reason of "Maximum TIFF file size exceeded", the export dialog is
|
||
|
raised again with a message proposing to try again as BigTIFF or
|
||
|
trying another compression algorithm.
|
||
|
This allows because discoverability and understandibility of the
|
||
|
issue, while not forcing BigTIFF export (since it might not be
|
||
|
supported everywhere).
|
||
|
- GIF: new option to specify a number of repeat for animated GIF
|
||
|
(rather than single run vs. infinite loop only).
|
||
|
- help-browser: rewritten to use GtkAction and GtkApplication, even
|
||
|
though it's now a deprecated plug-in (though it's a good example for
|
||
|
porting other plug-ins the same way).
|
||
|
- PNG:
|
||
|
* the format does not have any flag for linear RGB, but it can
|
||
|
simply include a linear profile (or a 1.0 gAMA chunk). Therefore
|
||
|
since we always attach the profile when importing (or transform
|
||
|
the gAMA chunk into a profile), we now always load PNG images as
|
||
|
non-linear backend.
|
||
|
* Add toggle to choose PNG bit depth behavior.
|
||
|
- python-fu-eval and plug-in-script-fu-eval ported to new
|
||
|
GimpBatchProcedure class.
|
||
|
- JPEG:
|
||
|
* CMYK export is now possible. It uses the "Soft-proofing"
|
||
|
profile set on the image.
|
||
|
* CMYK import ported to GEGL/babl conversion. The CMYK profile in
|
||
|
the JPEG image will be stored as soft-proof profile on the image.
|
||
|
- WebP:
|
||
|
* new option "Use Sharp YUV" available in non-lossless export.
|
||
|
It renders sharper edges at the cost of a slower export.
|
||
|
* On export, the "bad image dimensions" error message is now more
|
||
|
accurate and tells the max dimension possible for WebP images
|
||
|
(16383 as it's stored on 14 bits).
|
||
|
- DDS:
|
||
|
* 16-bit masks now supported.
|
||
|
* DDS images with single 16-bit channel support added.
|
||
|
* DDS images with 2 16-bit channels correctly converted to 16-bit
|
||
|
RGB images.
|
||
|
* More robust DDS loading.
|
||
|
- script-fu:
|
||
|
* Various updates to get the API back in shape.
|
||
|
* Porting doc updated.
|
||
|
* "script-fu-server" was now extracted into its own separate
|
||
|
plug-in so that it doesn't need to run permanently with the
|
||
|
script-fu extension (could be seen as security hazard too) and it
|
||
|
also makes each of these plug-ins more robust by being on their
|
||
|
own process each.
|
||
|
* A new `gimp-script-fu-interpreter-3.0` binary is installed
|
||
|
globally to be used to create Scheme plug-ins, similarly to other
|
||
|
plug-ins, in particular in the plug-ins/ directory, not the
|
||
|
scripts/ directory anymore. Moreover it makes the whole script-fu
|
||
|
infrastructure much more robust as script-fu individual scripts
|
||
|
won't crash the whole script-fu extension any longer (they only
|
||
|
crash themselves).
|
||
|
Note: this is not a GObject Introspected Scheme binding, just our
|
||
|
own binding based on script-fu interpreter. Script-fu plug-ins
|
||
|
still don't have access to the whole of libgimp.
|
||
|
* New function 'script-fu-register-filter' to declare a multi-layer
|
||
|
capable script.
|
||
|
* Many script-fu scripts were ported to newer API.
|
||
|
- FLI:
|
||
|
* Internal type usage improvements, mnemonics added, etc.
|
||
|
* 1-frame animation now loaded correctly (it's not really an
|
||
|
animation then, yet it should still open!).
|
||
|
* Better error handling.
|
||
|
* Layer names now include the delay in ms.
|
||
|
* More robust FLI/FLC loading, double-checking data rather than
|
||
|
assuming that the file writer properly followed the specs.
|
||
|
- Several plug-ins now follow the user-set checkboard color
|
||
|
preferences, when relevant.
|
||
|
- RAW data:
|
||
|
* Improved export dialog with better labels and ported to new dialog
|
||
|
generation API.
|
||
|
* Improved import dialog, ported to new dialog generation API, with
|
||
|
factorized code to more easily handle more cases.
|
||
|
* High bit depth import/export support.
|
||
|
* All the exportable formats can now be loaded back.
|
||
|
* "file-raw-load" and "file-raw-save" procedures API are now much
|
||
|
better with all relevant arguments.
|
||
|
* "file-hgt-load" doesn't show a dialog anymore when sample spacing
|
||
|
detection worked correctly since we already have all the necessary
|
||
|
information.
|
||
|
- WBMP: new plug-in to load WBPM image files. It is still limited
|
||
|
support and doesn't support all types of WBMP images.
|
||
|
- TIFF:
|
||
|
* 8 and 16-bit CMYK(A) TIFF files can be exported, using the
|
||
|
image soft-proof profile.
|
||
|
* Imported CMYK TIFF profiles are now set as soft-proof profile
|
||
|
on the image.
|
||
|
- SVG: on import, when parsing fails, GIMP will propose to disable
|
||
|
size parsing limitations, while explaining this has security
|
||
|
implications and should only be done on SVG files from trusted
|
||
|
sources.
|
||
|
- PSD:
|
||
|
* Import now uses babl conversion inconditionally, even for CMYK
|
||
|
images, using the soft-proof profile set on the image.
|
||
|
* Improved error logging during load.
|
||
|
* CMYK profile on a CMYK PSD file is now stored as soft-proof
|
||
|
profile in the image.
|
||
|
* Added support for extra layer mask: According to the specs the
|
||
|
extra mask (which they call real user supplied layer mask) is used
|
||
|
"when both a user mask and a vector mask are present".
|
||
|
We haven't seen an example that has the extra mask, so not sure
|
||
|
which of the masks would appear first.
|
||
|
For now assuming that the extra mask will be first. The advantage
|
||
|
of adding this here now, is that we won't try to add a mask
|
||
|
channel as a normal channel.
|
||
|
* Minimal support of duotone data: on import, a duotone image will
|
||
|
be imported as grayscale image with an alert and the color
|
||
|
information will be stored in a parasite; on export, a dialog will
|
||
|
propose you to re-include the duotone data if the image is still
|
||
|
grayscale. This allows for a roundtrip in GIMP without losing the
|
||
|
duotone information.
|
||
|
- ANI: new import/export support.
|
||
|
|
||
|
API:
|
||
|
|
||
|
- Changes in libgimpbase:
|
||
|
* gimp_checks_get_colors() added.
|
||
|
* gimp_checks_get_shades() removed (replaced by gimp_checks_get_colors())
|
||
|
- Changes in libgimpcolor:
|
||
|
* New functions:
|
||
|
+ gimp_color_managed_get_simulation_profile()
|
||
|
+ gimp_color_managed_simulation_profile_changed()
|
||
|
+ gimp_color_managed_get_simulation_bpc()
|
||
|
+ gimp_color_managed_get_simulation_intent()
|
||
|
+ gimp_color_managed_simulation_bpc_changed()
|
||
|
+ gimp_color_managed_simulation_intent_changed()
|
||
|
- Changes in libgimp:
|
||
|
* New functions:
|
||
|
+ gimp_image_metadata_save_filter()
|
||
|
+ gimp_check_custom_color1()
|
||
|
+ gimp_check_custom_color2()
|
||
|
+ gimp_procedure_dialog_get_int_radio()
|
||
|
+ gimp_procedure_dialog_get_file_chooser()
|
||
|
+ gimp_image_get_simulation_profile()
|
||
|
+ gimp_image_set_simulation_profile()
|
||
|
+ gimp_image_set_simulation_profile_from_file()
|
||
|
+ gimp_image_get_selected_drawables()
|
||
|
+ gimp_image_get_simulation_bpc()
|
||
|
+ gimp_image_get_simulation_intent()
|
||
|
+ gimp_image_set_simulation_bpc()
|
||
|
+ gimp_image_set_simulation_intent()
|
||
|
* Removed functions:
|
||
|
+ gimp_plug_in_set_translation_domain()
|
||
|
+ image_get_active_drawable()
|
||
|
+ image_get_active_layer()
|
||
|
+ image_set_active_layer()
|
||
|
+ image_get_active_channel()
|
||
|
+ image_set_active_channel()
|
||
|
+ image_get_active_vectors()
|
||
|
+ image_set_active_vectors()
|
||
|
* Updated functions:
|
||
|
+ gimp_procedure_dialog_get_widget() now supports
|
||
|
%G_TYPE_PARAM_FILE and %G_TYPE_PARAM_ENUM properties.
|
||
|
+ gimp_prop_file_chooser_button_new() now works with
|
||
|
G_PARAM_SPEC_OBJECT having a value_type == G_TYPE_FILE
|
||
|
(additionally to GIMP_PARAM_SPEC_CONFIG_PATH properties).
|
||
|
* Functions skipped by bindings:
|
||
|
+ gimp_get_images() (in favor of gimp_list_*() variant)
|
||
|
+ gimp_image_get_layers() (in favor of gimp_image_list_*() variant)
|
||
|
+ gimp_image_get_channels() (in favor of gimp_image_list_*() variant)
|
||
|
+ gimp_image_get_vectors() (in favor of gimp_image_list_*() variant)
|
||
|
+ gimp_image_get_selected_layers() (in favor of gimp_image_list_*()
|
||
|
variant)
|
||
|
+ gimp_item_get_children() (in favor of gimp_item_list_*() variant)
|
||
|
* New class:
|
||
|
+ GimpBatchProcedure: procedure usable as a batch interpreter on
|
||
|
command line.
|
||
|
* Protocol bumped to handle the check colors passed at call time on
|
||
|
the wire.
|
||
|
* Plug-ins are now expected to have their localization in a Gettext
|
||
|
catalog folder locale/ under their main directory, named the same
|
||
|
way as this directory (i.e. usually the plug-in name). If the
|
||
|
catalog is absent, a message will be outputted on stderr. To
|
||
|
override this behavior, a GimpPlugIn is encouraged to override the
|
||
|
new set_i18n() method. If it returns FALSE, localization is
|
||
|
disabled (or it may be implemented in a different way, for
|
||
|
instance with another system than Gettext); if it returns TRUE,
|
||
|
you can set a different subfolder and catalog name.
|
||
|
* The core does not localize menu items from plug-ins anymore. All
|
||
|
plug-ins are now expected to handle their localization within
|
||
|
their code. In particular gimp_procedure_set_menu_label() and
|
||
|
gimp_procedure_set_documentation() should now pass the localized
|
||
|
text. With gettext, it usually means passing arguments through
|
||
|
gettext() and not just marking them with N_().
|
||
|
- Changes in libgimpwidgets:
|
||
|
* Freedesktop portal implementation of GimpPickButton now checks the
|
||
|
version of the XDG portal since `PickColor()` API only got added
|
||
|
in version 2.
|
||
|
* New classes:
|
||
|
+ GimpIntRadioFrame
|
||
|
* New functions:
|
||
|
+ gimp_color_notebook_set_simulation()
|
||
|
+ gimp_color_selection_set_simulation()
|
||
|
+ gimp_color_selector_set_simulation()
|
||
|
* Removed functions:
|
||
|
+ gimp_prop_int_radio_box_new()
|
||
|
* Updated functions:
|
||
|
+ GimpColorNotebook, GimpColorSelection and GimpColorSelector are
|
||
|
now ported to babl code and are simulation space aware.
|
||
|
+ GimpPickButton will now use the X11 color picking API as a
|
||
|
default when GIMP is running on X11 (instead of trying the
|
||
|
portals first), because it has color space information of the
|
||
|
display (so we can convert back the color from display space to
|
||
|
image space); and also on some desktop, the portal looks
|
||
|
available while it's actually not implemented (hence picking
|
||
|
fails).
|
||
|
This fixes or improves the color picking in the Colors dockable,
|
||
|
in Change Foreground/Background Color dialogs, etc.
|
||
|
- Changes in PDB:
|
||
|
* gimp-plug-in-domain-register removed.
|
||
|
|
||
|
Modules:
|
||
|
|
||
|
- The CMYK color selector is now simulation space aware, i.e. that it
|
||
|
shows CMYK values in the soft-proof profile space if a soft-proof
|
||
|
profile has been set.
|
||
|
|
||
|
Translations:
|
||
|
|
||
|
- New Galician and Georgian translations for the installer.
|
||
|
|
||
|
Build:
|
||
|
|
||
|
- libtiff dependency's minimum required version bumped to 4.0.0.
|
||
|
- gexiv2 dependency's minimum required version bumped to 0.14.0.
|
||
|
- Our meson/Debian CI now runs `meson dist` too.
|
||
|
- gvfs is marked as an expected dependency for GIMP (as a GIO module)
|
||
|
on Linux, since it seems we wouldn't have HTTP support without. This
|
||
|
is only written in the INSTALL file though, no tests are run on
|
||
|
configure time.
|
||
|
- The distribution stage now has a new `dev-docs` job containing both
|
||
|
the C API reference (gi-docgen) and the Python and Javascript (gjs)
|
||
|
ones (g-ir-doc).
|
||
|
- The `pdbgen` (generation of PDB source files) build step is finally
|
||
|
ported to meson too, which is a major step to one day consider this
|
||
|
build system out of the "experimental" zone.
|
||
|
- Windows installer's gettext files (.po) will now also contain
|
||
|
extracted comments from the source to give more context to
|
||
|
translators.
|
||
|
- Flatpak manifest upgraded with new version constraints so that the
|
||
|
flatpak-external-data-checker does not warn wrongly on major update
|
||
|
when we don't want to or can't update immediately.
|
||
|
- meson is now recommended for Windows and macOS builds and our
|
||
|
official installer and DMG respectively are now built (still from
|
||
|
CI) with meson.
|
||
|
- Flatpak manifest improved with version constraints for dependencies
|
||
|
where we should not update just yet (hence don't want new version
|
||
|
notifications).
|
||
|
- appstream-util replaced by appstreamcli for AppStream file testing
|
||
|
(requires appstreamcli 0.15.3 or over).
|
||
|
- gi-docgen API documentation will now properly link to other API
|
||
|
namespaces thanks to a new urlmap file.
|
||
|
- Separate libgimp-scriptfu-3.0 library for a future where it will be
|
||
|
shared by several binaries.
|
||
|
- GEGL dependency's minimum required version bumped to 0.4.38.
|
||
|
- "flatpak" job now uses a gnome-runtime-images migrated to Quay.
|
||
|
- "win*-nightly" jobs removed.
|
||
|
- Improved meson infrastructure to support Windows installer languages
|
||
|
which don't have base language files provided by upstream InnoSetup.
|
||
|
We started using it for Kabyle (which was showing up as "English"
|
||
|
otherwise!).
|
||
|
- After various fixes and implementations of missing build features to
|
||
|
the meson scripts, we are going to start advising packagers (for all
|
||
|
platforms) to build GIMP 2.99.12 with meson as a trial by fire to
|
||
|
make it the new default build system.
|
||
|
- New "sources-meson" CI job to distribute a tarball built with the
|
||
|
meson scripts.
|
||
|
- INSTALL now targets meson build as a test recommendation. We'll see
|
||
|
if any issue arises from packagers!
|
||
|
- Improved support for homebrew build on macOS.
|
||
|
|
||
|
Documentation:
|
||
|
|
||
|
- Draft devel doc for scriptfu v3 script authors.
|
||
|
|
||
|
|
||
|
Overview of Changes from GIMP 2.99.8 to GIMP 2.99.10
|
||
|
====================================================
|
||
|
|
||
|
Core:
|
||
|
|
||
|
- Linked layers concept replaced by named sets of layers:
|
||
|
* One can now store your current selection of layers under any given
|
||
|
name and select it again later.
|
||
|
* You can also search for layers by their names with patterns
|
||
|
(as configured in Preferences, see next news item) and save this
|
||
|
pattern search if desired.
|
||
|
- Preferences > Interface now has an "Item search" with a dropdown
|
||
|
settings proposing the following values:
|
||
|
* Basic text search: this search does tokenization, case-folding and
|
||
|
UTF-8 normalization. Moreover ASCII alternates are compared, which
|
||
|
means that e.g. "e" would matched accented versions (such as "é"
|
||
|
or others).
|
||
|
* Glob pattern search: this is the GLib implementation of this
|
||
|
pattern syntax. It matches '*' (wildcard) and '?' (joker). GLib
|
||
|
docs notes also: "Note that in contrast to glob(), the '/'
|
||
|
character can be matched by the wildcards, there are no '[...]'
|
||
|
character ranges and '*' and '?' can not be escaped to include
|
||
|
them literally in a pattern."
|
||
|
* Regular expression search: Perl-compatible regular expressions as
|
||
|
implemented in GLib.
|
||
|
- New item visibility lock: forbidding to change the state of
|
||
|
visibility of a given item. This is useful when shift-clicking
|
||
|
massively items visibility, but you want to exclude some specific
|
||
|
items from the visibility switch.
|
||
|
- New internal API gimp_widget_blink_rect() to blink only specific
|
||
|
area of a widget, which may be useful for various notification-type
|
||
|
exchanges. This is used in particular to blink lock cells in
|
||
|
GimpItemTreeView in order to point attention to the reason why an
|
||
|
action is forbidden (e.g. when trying to paint on a layer with
|
||
|
pixels locked, a message would be shown on status bar and the "Lock
|
||
|
pixels" icon would blink).
|
||
|
- XCF version 16 with support of item sets.
|
||
|
- Wayland:
|
||
|
* Clean some popup code out of gtk_menu_popup() which is deprecated
|
||
|
and won't work anymore on Wayland (wrong positionning).
|
||
|
* Use GtkGestureDrag in ColorWheel module and ScrolledPreview widget
|
||
|
to avoid unwanted popups and make us future-proof for GTK4.
|
||
|
- macOS: various improvements for macOS support of the development
|
||
|
version. In particular the slowness issues have been solved and
|
||
|
various bugs have been fixed.
|
||
|
- The debug dialog only gets a backtrace of the main thread now,
|
||
|
because of some bugs in GDB locking GIMP when trying to get a full
|
||
|
backtrace for all threads.
|
||
|
- The line art data is now stored for a few additional minutes in the
|
||
|
user context after closing the bucket fill tool. This allows quick
|
||
|
switch between tools without forcing a recomputation of the line
|
||
|
art.
|
||
|
- Stroking a path with source tools (Clone, Heal…) is now possible
|
||
|
when the tool is active and a source was selected.
|
||
|
Technically it's more of a bug fix because the GUI existed as though
|
||
|
it was meant to work, but since the report has existed for more than
|
||
|
13 years and I'm not sure it has ever worked, it's worth writing it
|
||
|
here.
|
||
|
- Block the statusbar from needlessly triggering full canvas redraws
|
||
|
by not propagating its resize requests. This is quite a useful
|
||
|
optimization for macOS in particular (but any OS in general too).
|
||
|
- Alpha and position locks can now be set on layer groups. Alpha lock
|
||
|
on groups mostly works like pixel lock (except for the alpha channel
|
||
|
only). Position lock work both ways by forbidding moving child
|
||
|
layers but also parent layers.
|
||
|
- XCF version 17 with support of visibility locks, as well as ability
|
||
|
to set alpha or position locks on layer groups.
|
||
|
|
||
|
User Interface:
|
||
|
|
||
|
- Link icon removed from the Layers dockable.
|
||
|
- Lock icon its now made visible next to the "Eye" icon (visibility)
|
||
|
on each item row, where the Link icon was. It raises a popover to
|
||
|
switch all available locks (contents, position, visibility, alpha):
|
||
|
* This makes locks much more obvious rather than when they were at
|
||
|
the dockable header.
|
||
|
* This also works better with multiple selection of items (when one
|
||
|
selected item is locked and another is not, the lock button were
|
||
|
ending up in inconsistent state).
|
||
|
* This is clearer by showing or not icons (rather than always
|
||
|
showing several icons, yet with toggle design which is not even so
|
||
|
understandable depending on the theme used). If no locks are set,
|
||
|
nothing is shown; if only one lock is set, a specific icon is
|
||
|
shown; if several locks are set, a multi-lock icon is shown (and
|
||
|
one need to click to get the list of locks).
|
||
|
* Locks can now be set massively with shift and alt-click (see next
|
||
|
item) with the same logics as you can change visibility massively
|
||
|
on the eye button.
|
||
|
- Visibility (eye icon) and lock columns in the item dockables are
|
||
|
given an icon header to be more discoverable.
|
||
|
- Alt-click on eye and lock icons allows to massively switch
|
||
|
visibility/lock state but only within selected items (unlike
|
||
|
shift-click which switch within all items at same level).
|
||
|
- Channels and vectors are now multi-selectable (though actions may
|
||
|
have not been all updated yet to handle multiple items).
|
||
|
- On-hover indicators around inactive/unset eye/locked toggles in
|
||
|
Layer/Channels/Paths dialogs.
|
||
|
- GimpSpinScale made more compact.
|
||
|
- New "Welcome dialog" which appears only after a new installation or
|
||
|
an update, will show a few common links, and the release notes
|
||
|
(taken from the AppStream data, so they can even be localized).
|
||
|
- The new "Welcome dialog" comes with a new splash screen by Aryeom.
|
||
|
|
||
|
Tools:
|
||
|
|
||
|
- It is now possible to enable/disable dynamics in a single checkbox.
|
||
|
The dynamics "Dynamics Off" which used to be in the default list has
|
||
|
been removed as disabling dynamics is now equivalent and much faster
|
||
|
(it's also faster to get back to whatever dynamics you were using
|
||
|
before).
|
||
|
- A new action "context-dynamics-toggle" is available, allowing to
|
||
|
switch dynamics ON/OFF (see previous news item) with a shortcut.
|
||
|
- New option "Allow closing lines in selected layer" in the "Fill by
|
||
|
line art detection" mode of bucket fill tool. Basically this allows
|
||
|
to use the fill color (foreground or background color) as closure
|
||
|
color in the drawable to be filled. This is an additional step after
|
||
|
the line art computation to allow fast usage.
|
||
|
|
||
|
Plug-ins:
|
||
|
|
||
|
- PSD:
|
||
|
* new support for loading 16-bit per channel CMYK images.
|
||
|
* new support for files in LAB colorspace.
|
||
|
* new support for loading 32-bit per channel images (some code
|
||
|
existed yet may have never really worked).
|
||
|
* Add extra layer groups when loading PSD images with clipping
|
||
|
layers: PhotoShop handles clipping layers in a different way than
|
||
|
GIMP. The only way to have it look the same is by adding extra
|
||
|
layer groups. PSD layers that have clipping set, combined with the
|
||
|
first non clipping layer below it are grouped together in a new
|
||
|
layer group. Doing this results in the same image as the PSD
|
||
|
merged image unless there are other PSD elements in play that we
|
||
|
don't handle yet.
|
||
|
* PSD layers with clipping set need clip to backdrop as composite
|
||
|
mode: Certain PSD layers have a flag called clipping set to 1. We
|
||
|
were not handling this flag and had some reports about colors
|
||
|
bleeding where they were not supposed to. We are going to set
|
||
|
GIMP's layer composite_mode to GIMP_LAYER_COMPOSITE_CLIP_TO_BACKDROP,
|
||
|
which is the closest we can get to PhotoShop's clipping. With
|
||
|
this, the colors won't bleed anymore.
|
||
|
- JPEG XL:
|
||
|
* Bit depth now selectable in JXL export.
|
||
|
* Import in 8-bit and 16-bit integer precision now possible for
|
||
|
lossless images. (GIMP used to import all JXL images as 32-bit float
|
||
|
precision images).
|
||
|
* New very fast export settings: thunder and lightning (fastest).
|
||
|
* Compression slider is disabled for lossless.
|
||
|
- Screenshot:
|
||
|
* Remove KDE and GNOME screenshot portal in favor of Freedesktop
|
||
|
portal. Security restrictions make them more and more unsuable on
|
||
|
recent KDE and GNOME versions.
|
||
|
* Set the "interactive" option to TRUE for the Freedesktop API, so
|
||
|
that the screenshot options are presented immediately (instead of
|
||
|
taking a screenshot, then only proposing options to try again).
|
||
|
This is more consistent to how our non-D-Bus screenshot plug-in
|
||
|
used to work.
|
||
|
* Windows: cursor capture option now available.
|
||
|
- CUR: added load and export support for Microsoft Windows cursor
|
||
|
(.cur) files.
|
||
|
- HEIF: bit depth heuristic removed for the settings. The plug-in just
|
||
|
stores and set back the last used values as for other settings
|
||
|
instead of trying to be "clever".
|
||
|
- help-browser and webpage are now marked "unmaintained" and building
|
||
|
them is discouraged, except for developers. The reasons are: the
|
||
|
multiple problems for building, while it is not even available on
|
||
|
Windows anymore (and unsure if it will ever be solved anytime soon),
|
||
|
bringing features which nowadays most people have with browsers
|
||
|
installed by default on systems (allowing to read the manual and
|
||
|
take full webpage screenshots).
|
||
|
|
||
|
Build:
|
||
|
|
||
|
- Improved Coding Style document with commit message styling, git
|
||
|
usage, comment styling, natural language text rules, localization
|
||
|
and some section reorganization.
|
||
|
- GExiv2 dependency bumped to 0.12.2 (fixing bothersome warnings on
|
||
|
some unknown metadata domains).
|
||
|
- libjxl dependency bumped to 0.6.1.
|
||
|
- New meson option -Dcan-crosscompile-gir=true to force
|
||
|
GObject-Introspection generation even when cross-compiling (some
|
||
|
people manage to do it, e.g. with Yocto).
|
||
|
- Added .clang-format file and new CI pipeline to verify coding-style
|
||
|
issues in merge requests.
|
||
|
- New tool `flatpak-releases` to easily list and install specific
|
||
|
versions of our flatpak builds, which can be a great help when
|
||
|
debugging or trying to bisect with released binaries.
|
||
|
- Important refactoring of icon builds:
|
||
|
* Whether using meson or autotools, and whether installing vector
|
||
|
icons or raster ones (with --disable-vector-icons), the same lists
|
||
|
are always used and no icons are missing. The new custom tool
|
||
|
tools/generate-icon-makefiles.py makes sure the Makefile list is
|
||
|
in sync with the meson one.
|
||
|
The lists are committed in icons/icon-lists/ with a "usage
|
||
|
grouping" logics when possible.
|
||
|
* PNG versions for Color and Symbolic icon themes should not be
|
||
|
committed anymore. The Symbolic PNG version are generated with
|
||
|
GTK tool gtk-encode-symbolic-svg and the Color PNG version are
|
||
|
rendered with a new custom tool tools/colorsvg2png.c.
|
||
|
* New weekly CI to build with raster icons on meson and autotools
|
||
|
and making sure the build systems are well synced.
|
||
|
* Meson's -Dvec-icons option renamed to -Dvector-icons.
|
||
|
- meson dependency bumped to 0.53.0.
|
||
|
- We recommend fontconfig 2.13.95 or over on Windows where support for
|
||
|
user-installed fonts (feature appeared in Windows 1809) was
|
||
|
implemented. GIMP had its own workaround until now, which got
|
||
|
removed in this version.
|
||
|
- Optimization of the DLL search script for creating the Windows
|
||
|
installer, which made the "packaging-win*-native" jobs in particular
|
||
|
run from over 2 hours in some cases to about 10 minutes. So it's a
|
||
|
big gain for the creation wait for the Windows installer.
|
||
|
- GEGL minimum required version bumped to 0.4.36.
|
||
|
|
||
|
API:
|
||
|
|
||
|
- Vala bindings gimp-3.vapi and gimp-ui-3.vapi were renamed to
|
||
|
gimp-3.0.vapi and gimp-ui-3.0.vapi respectively in the autotools
|
||
|
build (now consistent with meson).
|
||
|
- Changes in libgimp:
|
||
|
* GimpStringArray type was removed in favor of GStrv. Various libgimp
|
||
|
API were updated to use GStrv, and relevant plug-in procedures with
|
||
|
GStrv arguments or return values were updated as well.
|
||
|
* New functions:
|
||
|
+ gimp_context_are_dynamics_enabled()
|
||
|
+ gimp_context_enable_dynamics().
|
||
|
+ gimp_item_get_lock_visibility()
|
||
|
+ gimp_item_set_lock_visibility()
|
||
|
+ gimp_pdb_run_procedure_config()
|
||
|
* Removed functions:
|
||
|
+ gimp_item_get_linked()
|
||
|
+ gimp_item_set_linked()
|
||
|
- Changes in libgimpui:
|
||
|
* New widgets:
|
||
|
+ GimpLabelColor (now used by default for GimpRGB properties in
|
||
|
GimpProcedureDialog)
|
||
|
+ GimpLabelEntry (now used by default for string properties in
|
||
|
GimpProcedureDialog)
|
||
|
+ GimpSpinScale (formerly a core-only widget, e.g. used by the
|
||
|
"Opacity" slider on the Layers dockable, moved to libgimpui to be
|
||
|
usable by plug-ins)
|
||
|
* New functions:
|
||
|
+ gimp_color_area_enable_drag()
|
||
|
+ gimp_event_triggers_context_menu(): alternative to
|
||
|
gdk_event_triggers_context_menu() with the additional ability of
|
||
|
using button release events as contextual menu triggering
|
||
|
(instead of press events), which might be prefered in some
|
||
|
cases. Other than this, it uses exactly the same conditions as
|
||
|
its GDK counterpart.
|
||
|
+ gimp_procedure_dialog_get_spin_scale()
|
||
|
+ gimp_prop_label_color_new().
|
||
|
+ gimp_prop_label_entry_new()
|
||
|
+ gimp_prop_spin_scale_new()
|
||
|
+ gimp_prop_widget_set_factor()
|
||
|
* Improved functions:
|
||
|
+ gimp_procedure_dialog_get_widget() can now generate widgets of
|
||
|
type GimpSpinScale (for int/double properties) and GimpLabelColor
|
||
|
or GimpColorButton (for GimpRGB properties).
|
||
|
+ gimp_procedure_dialog_get_color_widget() now only return
|
||
|
GimpLabelColor widgets (editable or not).
|
||
|
|
||
|
|
||
|
Documentation:
|
||
|
|
||
|
- API documentation is now built with `gi-docgen` instead of
|
||
|
`gtk-doc`. The syntax for in-comment documentation is slightly
|
||
|
changed.
|
||
|
- Important rework of the developer documentation has started in
|
||
|
devel-docs/.
|
||
|
|
||
|
Translations:
|
||
|
|
||
|
- 20 translations were updated: Basque, British English, Catalan,
|
||
|
Chinese (China), Danish, German, Greek, Hungarian, Italian, Kabyle,
|
||
|
Latvian, Lithuanian, Polish, Portuguese, Russian, Slovenian,
|
||
|
Spanish, Swedish, Ukrainian, Vietnamese.
|
||
|
|
||
|
|
||
|
Overview of Changes from GIMP 2.99.6 to GIMP 2.99.8
|
||
|
===================================================
|
||
|
|
||
|
Core:
|
||
|
|
||
|
- Selection display implementation now updated to more modern display
|
||
|
server logics when drawing to display buffer. This fixes selection
|
||
|
drawing in Wayland and macOS Big Sur.
|
||
|
- "Create a New Image" default action is "OK" so that hitting Enter in
|
||
|
text/number fields is equivalent to clicking OK.
|
||
|
- Paint tool core code can now receive multiple drawables as input
|
||
|
though it is disabled by default, unless a tool calls
|
||
|
gimp_paint_tool_enable_multi_paint() in its init() method. This is
|
||
|
only used in source tools so far.
|
||
|
- Clicking anywhere on toolbox empty space (dead areas between
|
||
|
buttons) or on Wilber's drop area, as well as on the toolbox buttons
|
||
|
themselves, actively focuses the canvas (similarly to the `Esc`
|
||
|
shortcut).
|
||
|
- Config folder migration for GIMP 3 with initial implementation.
|
||
|
- Action "view-rotate-reset" renamed to "view-reset" (resets both
|
||
|
flipping and rotate). New "view-rotate-reset" and "view-flip-reset"
|
||
|
for resetting rotation and flipping respectively.
|
||
|
- New GimpEarlyRc class replacing GimpLangRc for very early config
|
||
|
parsing (it used to be for language setting, now also for the
|
||
|
pointer input API choice on Windows).
|
||
|
- All g_memdup() ported to g_memdup2() thanks to GLib version bump.
|
||
|
- Various leaks and other bugs fixed, notably with several static
|
||
|
analyzer results
|
||
|
- Add metadata preference for saving thumbnail by default: saving a
|
||
|
thumbnail is closely related to the other metadata preferences,
|
||
|
but so far this was the only one that didn't have a preference for a
|
||
|
default user value. A new settings in the "Image Import & Export"
|
||
|
section of the Preferences allows to select whether thumbnail saving
|
||
|
should be enabled by default or not.
|
||
|
- Preferences now allows to select the input device API on Windows
|
||
|
(Wintab or Windows Ink), as Windows Pointer Input Stack (Windows
|
||
|
Ink) support was added recently in GTK3.
|
||
|
|
||
|
Tools:
|
||
|
|
||
|
- Clone, Heal and Perspective clone now work on multiple selected
|
||
|
layers. There are 2 new modes:
|
||
|
* When cloning while multiple drawables are being selected, each
|
||
|
drawable clones from itself to itself, i.e. every drawable is both
|
||
|
its source and target.
|
||
|
* When sourcing from multiple drawables then cloning into a single
|
||
|
drawable, the source is the composited image. This is similar to
|
||
|
"Sample Merged", except limited to a list of drawables.
|
||
|
|
||
|
User Interface:
|
||
|
|
||
|
- Layout of the Canvas Size dialog re-designed a bit more horizontally
|
||
|
after the template selector feature made it too high.
|
||
|
- Thumbnail icon feature was dropped: when images were opened, the
|
||
|
application icon used to be a composition of the active image and
|
||
|
the application icon (Wilber). This was confusing, hard to
|
||
|
distinguish and working on less and less platforms because of recent
|
||
|
OS and desktop rules or logics changes.
|
||
|
|
||
|
API:
|
||
|
|
||
|
- New gimp_display_present() function to present a specific display at
|
||
|
the top of the image display stack.
|
||
|
- New gimp_procedure_dialog_fill_expander() to create a GtkExpander in
|
||
|
procedure dialogs.
|
||
|
- All widgets within a same container in a GimpProcedureDialog are
|
||
|
added to their own GtkSizeGroup.
|
||
|
- New function gimp_export_thumbnail() to query the user settings (as
|
||
|
set in Preferences) on whether or not a file plug-in should export
|
||
|
the image thumbnail.
|
||
|
|
||
|
Plug-ins:
|
||
|
|
||
|
- PSD now supports bigger-than-4GiB files. File support was ported to
|
||
|
GIO API with 64-bit offsets, hence allowing loading correctly very
|
||
|
big files.
|
||
|
- PSD now supports loading up to 99 channels (specs say that 56 is the
|
||
|
max but some sample PSD files have more channels).
|
||
|
- PSB file format is now supported for loading.
|
||
|
- Scriptfu now handles GFile and GimpObjectArray types.
|
||
|
- 16-bit SGI images now supported (until now, they were loaded as
|
||
|
8-bit).
|
||
|
- file-webp ported to GimpSaveProcedureDialog.
|
||
|
- New JPEG XL plug-in (loading and exporting).
|
||
|
- Various cleaning replacing g_file_get_path() with g_file_peek_path()
|
||
|
|
||
|
Translations:
|
||
|
|
||
|
- New Vietnamese, Lithuanian and Portuguese translations for the
|
||
|
installer.
|
||
|
|
||
|
Build:
|
||
|
|
||
|
- Windows installer scripts updated to all supported languages.
|
||
|
- New "windows-installer-langs" unit test to detect discrepancies of
|
||
|
langs listed in build system, installer and gettext files.
|
||
|
- New CI jobs for Windows native builds with MSYS2.
|
||
|
- Less critical CI jobs (meson/clang build and cppcheck static
|
||
|
analysis) moved to a scheduled run for resource saving, and 32-bit
|
||
|
cross-built Windows job now only runnable manually.
|
||
|
- Windows installer now built as a CI job. The installer is not
|
||
|
signed. The installer creation happens on tags for releases and at
|
||
|
regular scheduled intervals for tests.
|
||
|
- Improved tag handling in the CI for transparent release process.
|
||
|
- New flatpak job (on scheduled interval) published on GNOME Nightly
|
||
|
repository.
|
||
|
- Windows installer and test flatpak (to download, no repository) can
|
||
|
now be built by a merge request CI when the labels "5. Windows
|
||
|
Installer" and/or "5. Flatpak package" are respectively set in the
|
||
|
MR labels.
|
||
|
- Scalable GIMP application icon is installed too.
|
||
|
- Generate SHA* checksums for CI-generated Windows installers.
|
||
|
- New `CODING_STYLE.md` document in repository for our coding style
|
||
|
rules.
|
||
|
- Configure: --enable-check-update now has an "auto" value.
|
||
|
Meson: -Dcheck-update is now a yes|no|platform-default combo.
|
||
|
The auto/platform-default value defaults to "yes" on Windows and
|
||
|
macOS and "no" on other platforms.
|
||
|
- GLib dependency's minimum required version bumped to 2.68.0.
|
||
|
- GEGL minimum required version bumped to 0.4.32.
|
||
|
- Flatpak nightly build now uses the new "fallback-x11" permission
|
||
|
instead of "x11" to prevent unnecessary X11 access while in Wayland.
|
||
|
- Fixes to codebase making GIMP 2.99 finally building and running on
|
||
|
macOS.
|
||
|
- Our flatpak manifests now use the flatpak-external-data-checker tool
|
||
|
with the Anitya backend allowing to monitor our dependencies and
|
||
|
ensure they are always up-to-date. All dependencies have been
|
||
|
updated accordingly.
|
||
|
- Our desktop file now lists a `StartupWMClass` tag to better
|
||
|
associate running GIMP windows with the application icon (and
|
||
|
possibly other metadata).
|
||
|
|
||
|
|
||
|
Overview of Changes from GIMP 2.99.4 to GIMP 2.99.6
|
||
|
===================================================
|
||
|
|
||
|
Core:
|
||
|
|
||
|
- Various fixes for Wayland support.
|
||
|
- Canvas Size dialog now displays a template selector to simply
|
||
|
resize the canvas to a known template. When the image's and
|
||
|
template's pixel density don't match, a choice will be proposed to
|
||
|
set the image's PPI to the template's one or to scale the template's
|
||
|
pixel size with the image's pixel density.
|
||
|
- Off-canvas guides are now allowed. Guides are not deleted anymore
|
||
|
when dropped off-canvas, but when dropped off-viewport.
|
||
|
- Pinch gesture is now possible on canvas for zooming in/out (works on
|
||
|
Wayland, not on X11; untested yet on *BSD, macOS, Windows and
|
||
|
others).
|
||
|
- GimpAction core class now stores a reason for explaining being
|
||
|
disabled. This can be used later for giving better hints on why some
|
||
|
effects or plug-ins are not usable in some situations. We already
|
||
|
had this feature, but by tweaking the action's tooltip, which
|
||
|
prevented this to have proper styling on GUIs and disrupted action
|
||
|
search (as the reason text was searched, hence may return actions it
|
||
|
should not).
|
||
|
- Copy|Cut-Paste could already operate on multiple layers, by merging
|
||
|
the result into a single layer. It will still do this when a
|
||
|
selection exists, yet will paste layers as-is otherwise. This makes
|
||
|
an alternative way to move layers, which is sometimes easier than
|
||
|
drag'n dropping (especially between separate images).
|
||
|
|
||
|
Tools:
|
||
|
|
||
|
- Paint Select tool got various improvements:
|
||
|
* apply a threshold on the image mask before triggering the
|
||
|
automatic expansion to simplify mask handling in the gegl
|
||
|
paint-select operation.
|
||
|
* enable viewport-based local selection.
|
||
|
- GEGL Operation tool is now moved into Filters > Generic menu because
|
||
|
it behaves more like a generic filter conceptually. As other
|
||
|
filters, the GEGL Operation action is now only active when there are
|
||
|
opened images.
|
||
|
|
||
|
API:
|
||
|
|
||
|
- The generate "Metadata" frame layout in a GimpSaveProcedureDialog
|
||
|
has been improved to always show the same number of columns to avoid
|
||
|
ugly layout with options on 3 columns, then 2 columns on the next
|
||
|
line (for instance).
|
||
|
- The "Reset" button in GimpProcedureDialog shows a down arrow to show
|
||
|
this is actually a button menu.
|
||
|
- "Save|Load Defaults" in GimpProcedureDialog are renamed as "Save
|
||
|
Settings" and "Load Saved Settings". The term "defaults" was not
|
||
|
very clear and could be confused with "factory defaults". Moreover
|
||
|
tooltips were added and the "Load Defaults" button is now only
|
||
|
sensitive if "Save Defaults" buttion has been hit at least once.
|
||
|
- Annotations improved.
|
||
|
- Drop g_object_notify() in favor of g_object_notify_by_pspec() in
|
||
|
various implementations to avoid a slight performance hit because of
|
||
|
a global lock.
|
||
|
- New function gimp_parasite_get_data() replacing gimp_parasite_data()
|
||
|
and gimp_parasite_data_size() in a GObject Introspection friendly
|
||
|
way.
|
||
|
- gimp_procedure_dialog_new() now allows a NULL title if a menu label
|
||
|
was set on the GimpProcedure with gimp_procedure_set_menu_label().
|
||
|
- gimp_progress_update() improved: do not update more than 20 times
|
||
|
per second and do not warn on stderr when too many progression steps
|
||
|
are outputted. Indeed we should not place the burden of deciding
|
||
|
whether there are too much or not enough progression updates on
|
||
|
plug-in developers. On the opposite, they should be encouraged to
|
||
|
update the progression as often as possible while libgimp will
|
||
|
handle the decision on whether it actually ignores the progression
|
||
|
step or not. This makes easier plug-in development and good
|
||
|
progression feedback of long process.
|
||
|
- GimpInt16Array was removed: it was used neither by GIMP core nor any
|
||
|
core plug-ins. If third-party plug-ins really need this type, they
|
||
|
may easily reintroduce it through GimpUint8Array (array of bytes) or
|
||
|
GimpInt32Array (using only a subrange).
|
||
|
- New function gimp_image_take_selected_layers() similar to
|
||
|
gimp_image_set_selected_layers() except that it takes a GList
|
||
|
(instead of a C array) and it takes ownership of the list pointer.
|
||
|
- New functions: gimp_procedure_set_sensitivity_mask() and
|
||
|
gimp_procedure_get_sensitivity_mask() for plug-ins to advertize when
|
||
|
a procedure should be sensitive (in particular relatively to
|
||
|
multi-drawable selection).
|
||
|
- GimpImageProcedure's run() functions now have an array of drawables
|
||
|
as argument (instead of a single drawable), to be consistent with
|
||
|
multi-drawable selection ability.
|
||
|
- New gimp_plug_in_error_quark() as a generic GQuark/GError domain for
|
||
|
plug-ins.
|
||
|
- Several functions were renamed to be consistent with our naming
|
||
|
scheme:
|
||
|
* s/gimp_parasite_name/gimp_parasite_get_name/
|
||
|
* s/gimp_parasite_flags/gimp_parasite_get_flags/
|
||
|
* s/gimp_image_base_type/gimp_image_get_base_type/
|
||
|
* s/gimp_image_width/gimp_image_get_width/
|
||
|
* s/gimp_image_height/gimp_image_get_height/
|
||
|
* s/gimp_drawable_bpp/gimp_drawable_get_bpp/
|
||
|
* s/gimp_drawable_width/gimp_drawable_get_width/
|
||
|
* s/gimp_drawable_height/gimp_drawable_get_height/
|
||
|
* s/gimp_drawable_offsets/gimp_drawable_get_offsets/
|
||
|
- gimp_parasite_data() and gimp_parasite_data_size() are replaced by
|
||
|
gimp_parasite_get_data() which is introspection friendly.
|
||
|
- libgimpconfig: GimpParasite can now be serialized. This is useful
|
||
|
when using a GimpParasite procedure argument, whose random contents
|
||
|
(possibly binary) can be stored across sessions.
|
||
|
- Move public classes to G_DECLARE_DERIVABLE_TYPE and
|
||
|
G_DECLARE_FINAL_TYPE in order not to expose useless variables to
|
||
|
plug-in developers.
|
||
|
- New function gimp_procedure_dialog_set_sensitive() sets
|
||
|
GimpProcedureDialog's widget sensitive value or binding.
|
||
|
- PDB procedure 'plug-in-autocrop-layer' multi-layer aware.
|
||
|
- GimpProcedureDialog now handles GimpRGB arguments.
|
||
|
|
||
|
Plug-ins:
|
||
|
|
||
|
- We dropped the dialog for the Freedesktop portal implementation of
|
||
|
the screenshot plug-in. Basically the Freedesktop portal provides
|
||
|
its own GUI with most options, so also showing ours is redundant.
|
||
|
Just directly call the portal and wait for the image in return.
|
||
|
- Color profile and comment is saved on each layer of a TIFF file to
|
||
|
prevent any ambiguity as TIFF allows its layers to have different
|
||
|
profiles.
|
||
|
- On PNG import, create an ICC profile out of the gAMA and/or cHRM
|
||
|
chunks, if any of them are present, if no color profile is set and
|
||
|
if the sRGB chunk is not present. This happens for RGB images as
|
||
|
well as grayscale images (creating respectively a RGB or grayscale
|
||
|
color profile).
|
||
|
- Improve PNG export in no-profile case with gAMA and cHRM chunks
|
||
|
(additionally to the sRGB chunk) according to PNG spec
|
||
|
recommendations. Moreover the "gamma" option has now been removed
|
||
|
because we just have proper core support of this metadata through
|
||
|
ICC profile creation now, which is just more powerful.
|
||
|
- "gamma" option for PNG export was removed (from GUI and
|
||
|
file-png-load PDB API) because it is now redundant as we have proper
|
||
|
support for this metadata.
|
||
|
- Various fixes and improvements to OpenRaster image support.
|
||
|
- PDF export now has progression.
|
||
|
- PSD import/export got multi-layer selection support.
|
||
|
- Qbist:
|
||
|
* make the applied pattern a bit more prominent by adding a
|
||
|
label about the center pattern of the 9x9 grid (which is the
|
||
|
selected one meant to be applied).
|
||
|
* last used values now stored with the new API, hence surviving
|
||
|
across sessions.
|
||
|
- benchmark-foreground-extract.py moved to gimp-data-extras.
|
||
|
- Various plug-ins now work with multiple selected drawables when
|
||
|
relevant.
|
||
|
|
||
|
Devel docs:
|
||
|
|
||
|
- Python 3 and Javascript API documentation are now generated inside
|
||
|
the build directory devel-docs/g-ir-docs/html/ (not installed right
|
||
|
now) if you configure the build with option --enable-g-ir-doc
|
||
|
(alternative for the meson build: -Dg-ir-doc=true but the docs ends
|
||
|
up incomplete so autotools build is advised, cf. #6362).
|
||
|
|
||
|
Translations:
|
||
|
|
||
|
- New Hebrew translation for the installer.
|
||
|
|
||
|
Build:
|
||
|
|
||
|
- Bumping minimum GEGL to version 0.4.30.
|
||
|
|
||
|
|
||
|
Overview of Changes from GIMP 2.99.2 to GIMP 2.99.4
|
||
|
===================================================
|
||
|
|
||
|
Core:
|
||
|
|
||
|
- Action search now always show all actions, even inactive ones. In
|
||
|
order not to clutter the results, inactive ones are shown after
|
||
|
active results (following the same match quality level).
|
||
|
Consequently the "Show unavailable actions" checkbox has been
|
||
|
removed from the `Preferences > Help System` dialog.
|
||
|
- Improve sample text logics for CJK fonts, showing different
|
||
|
sample characters for Korean and Japanese, making detection
|
||
|
at-a-glance of such fonts easier.
|
||
|
- With "Ask what to do" color profile policy, profile conversion at
|
||
|
image loading is not proposed anymore when the image's profile is
|
||
|
the preferred profile set in Preferences for the current image type
|
||
|
(currently it would only be discarded if the image's profile was the
|
||
|
built-in profile, now GIMP accounts for both cases).
|
||
|
- When file loading plug-ins are run, the file chooser dialog is now
|
||
|
hidden until the plug-in returns.
|
||
|
- GIMP tries to keep error dialogs above to raise awareness when they
|
||
|
arrive (not discovered later under other dialogs).
|
||
|
|
||
|
User Interface:
|
||
|
|
||
|
- GimpSpinScale widget improvements:
|
||
|
* The widget will grab focus when starting to edit the entry, and
|
||
|
in particular the current number will be fully selected (because
|
||
|
often we want to just type down a completely different number
|
||
|
accurately).
|
||
|
* Also when giving focus to the entry with middle click (from
|
||
|
anywhere inside the widget), the scale value doesn't change in the
|
||
|
same time anymore.
|
||
|
* Finally we can now target-click accurately the entry current value
|
||
|
to edit the entry (again, without changing the value and selecting
|
||
|
existing number fully) with the main button (usually left button).
|
||
|
Even though middle click is simpler because we don't have to be
|
||
|
accurate (we can middle-click anywhere in the spin scale widget),
|
||
|
it is hardly discoverable, whereas clicking a number entry which
|
||
|
is meant to be editable is the most common GUI interaction
|
||
|
expectation.
|
||
|
* To help feature discoverability, when hovering the widget, the
|
||
|
cursor will change and show a "grab" cursor when a click would
|
||
|
start an absolute edit (the cursor changes to "grabbing" when
|
||
|
actually clicking and dragging the scale) or a "text" cursor when
|
||
|
a click would focus the number entry. When Shift key is being
|
||
|
hold, the cursor is the one for the relative edit, wherever the
|
||
|
position over the widget. This should make discovering possible
|
||
|
interactions with the widget a lot easier.
|
||
|
- Various improvements in the Layers dockable (and similar tree view
|
||
|
widgets):
|
||
|
* The bigger thumbnail popup on long click (e.g. on a layer or mask
|
||
|
thumbnail) does not pop out when any modifier is hold (such as
|
||
|
Shift/Ctrl for multi-selection or any other modifier used for
|
||
|
alternative actions).
|
||
|
* Alternative actions which were available with modifier-clicks on
|
||
|
layer or mask thumbnails have been moved to an Alt+ modifier when
|
||
|
necessary, in order to not clash with multi-layer selection
|
||
|
interaction. In particular:
|
||
|
+ Ctrl-click on a mask to enable/disable it now moved to
|
||
|
Alt-Ctrl-click.
|
||
|
* The Shift+click and Ctrl+click actions on a layer thumbnail to add
|
||
|
and remove respectively a layer mask have been removed because the
|
||
|
much older feature for "Alpha to Selection" already use all the
|
||
|
Alt+ modifier combinations.
|
||
|
* The alternative Alt+ actions now only operate on the clicked layer
|
||
|
and not on the selection unlike the corresponding actions
|
||
|
(available through buttons, actions and menus). Also they do not
|
||
|
change the selection. So you can Alt+click a layer for "Alpha to
|
||
|
Selection", same as you can Alt+click a mask for showing it
|
||
|
without triggering a selection change. This allows these
|
||
|
alternative actions to not be redundant of the equivalent actions
|
||
|
but complementary with a slightly different targeting behavior.
|
||
|
* The various interactions with modifiers now catch the exact
|
||
|
modifier combination they require, hence avoiding interaction
|
||
|
cases running several actions (e.g. Alt-Ctrl on a layer thumbnail
|
||
|
removes the clicked layer's alpha channel from the selection
|
||
|
without modifying the selected layer while Ctrl only would modify
|
||
|
the selection).
|
||
|
|
||
|
Tools:
|
||
|
|
||
|
- New Paint Select tool in the playground. This is a tool prototype
|
||
|
which would hopefully end up as a quick binary selection tool.
|
||
|
- The new default dynamics is: "Pressure Size". This doesn't change
|
||
|
anything for common input devices (mouses, touchpad) yet would allow
|
||
|
tablet devices to directly show that pressure input is working on
|
||
|
first use. Until now, people would have the impression that tablets
|
||
|
are not working (even though GIMP 3 will have hotplug so it is
|
||
|
actually working from scratch) just because "Dynamics Off" was the
|
||
|
default.
|
||
|
|
||
|
Input Devices:
|
||
|
|
||
|
- Various improvements to the Input Devices editor:
|
||
|
* Do not show virtual devices and XTEST API (Linux/X11) device in
|
||
|
the Input Devices editor as they are useless from a configuration
|
||
|
standpoint.
|
||
|
* Only show the axes returned by GDK instead of the whole
|
||
|
list of possible axes, which made no sense.
|
||
|
* Show better names for axes, as returned by GDK, for instance a X
|
||
|
axis becomes often "Abs X" on a graphics tablet and "Rel X" on a
|
||
|
mouse or other devices made to work relatively.
|
||
|
* Don't show an empty list for devices with no axes, just don't show
|
||
|
the list widget at all.
|
||
|
* For each device, select by default the first axis with curve
|
||
|
ability, if any, (i.e. the Pressure axis if the device has one) in
|
||
|
order to make the dialog directly more useful and usable.
|
||
|
- Default tool have been set on different device sources:
|
||
|
* Pen devices (tablet styluses main input) now default to the
|
||
|
paintbrush tool.
|
||
|
* Eraser devices (tablet styluses back input) still defaults to
|
||
|
eraser tool.
|
||
|
* Touch screen (finger) defaults to Smudge tool.
|
||
|
* All other devices defaults to paintbrush (this was already the
|
||
|
case, but was broken for as long as I remember, now it should work
|
||
|
properly).
|
||
|
|
||
|
API:
|
||
|
|
||
|
- GimpFileEntry public variables were made private and a new function
|
||
|
has been added: gimp_file_entry_get_entry().
|
||
|
- New GimpScaleEntry and GimpColorScaleEntry widget classes and new
|
||
|
relevant API for these objects, replacing the former functions
|
||
|
creating various widgets and attaching them to a GtkGrid. This makes
|
||
|
for easier to use and less constrained GUI functions (with a lot
|
||
|
less arguments, as we try now to smartly generate appropriate
|
||
|
defaults for many options; gimp_scale_entry_new() in particular went
|
||
|
down from 17 arguments to 5), also better introspectability for
|
||
|
bindings, and finally it will be useful for automatic dialog
|
||
|
generation for plug-ins.
|
||
|
- New GimpLabeled class and subclasses: GimpLabelSpin,
|
||
|
GimpLabelIntWidget.
|
||
|
- Several new functions for GimpProcedureDialog for automatic dialog
|
||
|
generation based on input arguments. Though not mandatory, the
|
||
|
various functions allow to organize better the widgets.
|
||
|
- The GimpProcedureDialog class will now check that mnemonics are
|
||
|
present on every option, and also that there is no duplicate
|
||
|
mnemonics. It will print messages on stderr if any of these test
|
||
|
fails (so that it won't bother users but developers and translators
|
||
|
should be able to get feedback about missing/duplicate mnemonics).
|
||
|
- GimpSaveProcedure now has generic metadata support (with an API so
|
||
|
that an export procedure can declare whether it supports given
|
||
|
metadata types or contents).
|
||
|
Combined with a new subclass GimpSaveProcedureDialog (child of
|
||
|
GimpProcedureDialog), this ensures that:
|
||
|
* If a format supports a given metadata, they will always have an
|
||
|
auxiliary argument with the same name across plug-ins.
|
||
|
* The label and tooltips will also be always the same in the GUI.
|
||
|
* Order of metadata widgets will also stay consistent.
|
||
|
* The widgets will work the same (no more "Comment" text view
|
||
|
missing in one plug-in but present in another, or with an entry
|
||
|
here, and a text view there, and so on).
|
||
|
* The metadata frame will show an "(edit)" link which will run the
|
||
|
"plug-in-metadata-editor" plug-in. The eventual goal is to move
|
||
|
some generic logics to the metadata editor (when it makes sense)
|
||
|
and to raise awareness for metadata edition and viewing abilities.
|
||
|
This is still a work-in-progress which requires much more
|
||
|
improvements in said abilities.
|
||
|
- New gimp_get_num_processors() function for plug-ins to be able to
|
||
|
set their own multi-threading operations as configured in
|
||
|
Preferences.
|
||
|
|
||
|
Plug-ins:
|
||
|
|
||
|
- file-fli, file-tiff, file-jpeg and file-png updated to new dialog
|
||
|
generation API. In the most complicated case (file-jpeg), this
|
||
|
shaved 600 lines out of the plug-in code.
|
||
|
- file-heif:
|
||
|
- now uses gimp_get_num_processors() instead of
|
||
|
g_get_num_processors() (allowing to bypass system thread info).
|
||
|
- Realtime parameter is set for AOM encoder when Fast encoding
|
||
|
speed is selected by user.
|
||
|
- Ability to set pixel format (YUV444, RGB) is enabled
|
||
|
for >= libheif 1.10 to avoid issues in older versions.
|
||
|
- file-jp2 is now able to decode JPEG2000 files faster with
|
||
|
multi-threading, using the thread number settings returned by
|
||
|
gimp_get_num_processors().
|
||
|
- Improved plug-in debugging helper infrastructure: GIMP_PLUGIN_DEBUG
|
||
|
has a new `fatal-criticals` option and better defaults. Developer
|
||
|
documentation got some rewriting and debugging code benefited from
|
||
|
refactorization.
|
||
|
- py-slice.py moved to gimp-data-extras.
|
||
|
|
||
|
Installer:
|
||
|
|
||
|
- Various updates to adapt to the GIMP 2.99/3 build.
|
||
|
- Lua made optional.
|
||
|
|
||
|
Devel docs:
|
||
|
|
||
|
- Documentation to port GIMP 2.10 plug-ins to GIMP 3.0 has been
|
||
|
started in `devel-docs/GIMP3-plug-in-porting-guide/`. It is also
|
||
|
visible directly on out Gitlab instance with visual styling:
|
||
|
https://gitlab.gnome.org/GNOME/gimp/-/tree/master/devel-docs/GIMP3-plug-in-porting-guide
|
||
|
|
||
|
Build:
|
||
|
|
||
|
- Bumping minimum harfbuzz version to 1.0.5 for hb_ft_font_set_funcs().
|
||
|
- Bumping minimum pango version to 1.44.0 for pango_font_has_char().
|
||
|
- Bumping minimum GEGL to version 0.4.28.
|
||
|
|
||
|
|
||
|
Overview of Changes from GIMP 2.10.x to GIMP 2.99.2
|
||
|
===================================================
|
||
|
|
||
|
Core:
|
||
|
|
||
|
- Improved "space invasion".
|
||
|
- New extension format support (.gex a.k.a. GIMP Extension) which is
|
||
|
an archive containing various supported data. So far, it can
|
||
|
package: brushes, MyPaint brushes, dynamics, patterns, gradients,
|
||
|
palettes, tool presets, plug-ins, splash images and themes.
|
||
|
- New extension manager allowing to enable, disable or uninstall
|
||
|
installed extensions, with a dialog available in `Edit > Manage
|
||
|
Extensions`.
|
||
|
- Multi selection of layers now possible. Various tools and features
|
||
|
are now multi-selection aware.
|
||
|
- XCF format bumped to version 14 with awareness of multiple layer
|
||
|
selection.
|
||
|
- All code is year-2038-safe with deprecated time API replaced.
|
||
|
- "Alpha to Selection" various actions warn when the result selection
|
||
|
is empty.
|
||
|
- Color Profile Policy (import) now exposes a "Convert to Preferred
|
||
|
Profile" (fourth) choice and the import dialog default "Convert"
|
||
|
action will convert the image to the preferred profile (if any was
|
||
|
set, otherwise it falls back to the built-in profile). Converting to
|
||
|
the built-in profile will be still available as secondary action.
|
||
|
- A new "Metadata Rotation Policy" is now exposed in the Preferences
|
||
|
dialog, next to the "Color Profile Policy" (in page `Preferences >
|
||
|
Image Import & Export`) with 3 options: "Ask what to do", "Discard
|
||
|
metadata without rotating" and "Rotate the image then discard
|
||
|
metadata".
|
||
|
This policy used to be handled API-size, with a dialog generated by
|
||
|
libgimpui gimp_image_metadata_load_finish(), and saved in a global
|
||
|
parasite. The whole logics and GUI has been moved as core logics,
|
||
|
similar to the "Color Profile Policy".
|
||
|
|
||
|
User Interface:
|
||
|
|
||
|
- Whole interface ported to GTK+3:
|
||
|
* Proper HiDPI support, which will follow the system's scale factor
|
||
|
for all widgets. This is a core toolkit support, unlike the basic
|
||
|
better-than-nothing hacks from GIMP 2.10.x.
|
||
|
* GTK+3 CSS-like support. All themes for former versions are
|
||
|
therefore not working anymore.
|
||
|
* GTK+3 themes have the concept of "dark variant", so a same theme
|
||
|
may propose both a light and a dark versions. Preference for dark
|
||
|
variants can now be checked in `Preferences > Themes > Use dark
|
||
|
theme variant if available` checkbox, allowing for instance to use
|
||
|
your system theme in its light variant everywhere except in GIMP.
|
||
|
This option is checked by default as graphics software are often
|
||
|
preferred in dark modes.
|
||
|
* Symbolic icon themes are now recolored automatically according to
|
||
|
the theme colors (no theme and icon theme tweaking anymore to end
|
||
|
up with dark on dark or light on light interfaces), except for
|
||
|
color elements whose SVG style is marked as "!important".
|
||
|
* Native Wayland support.
|
||
|
* Various dialogs now use Client-Side decorations and modern GTK+
|
||
|
widgets are being used when relevant (e.g. GtkSwitch which gives a
|
||
|
better feeling of a general "ON/OFF state").
|
||
|
* Progressive/smooth scroll actions (e.g. ctrl+scroll for zooming)
|
||
|
are now possible.
|
||
|
- Image display rendered faster with a render cache that keeps the
|
||
|
result of scaling, color management, display filters and shell mask
|
||
|
(for tools like fuzzy select).
|
||
|
- Shift-click on layer GimpContainerTreeView (typically the Layers
|
||
|
dockable) allows to expand/collapse all item groups but the clicked
|
||
|
one.
|
||
|
- Compact GimpSpinScale is now the only available version.
|
||
|
- Scalable symbolic icons "switch-on", "switch-off" (from GTK
|
||
|
repository) and "software-update-available" (from Adwaita
|
||
|
repository) are now bundled with GIMP in a "hicolor" overlay so that
|
||
|
they are available even if missing from the custom theme.
|
||
|
|
||
|
Devices:
|
||
|
|
||
|
- Device hotplug supported (thanks to GTK+3). In particular:
|
||
|
* you don't need to have your tablets and other devices plugged
|
||
|
before you start GIMP anymore;
|
||
|
* enabling your devices in the "Configure Input Devices" dialog is
|
||
|
not needed anymore. Tablets will work out-of-the box;
|
||
|
* you can safely unplug and replug the same or other input devices
|
||
|
while GIMP is running.
|
||
|
- "Input Devices" dialog improved:
|
||
|
* "Save" and "Close" buttons replaced by "OK" (save and exit),
|
||
|
"Cancel" (reset and exit) and "Reset" (reset to previous settings
|
||
|
but keep the dialog open).
|
||
|
* "Keys" list has been discontinued. The "key" concept is
|
||
|
associated to "keyboard" devices (a tablet being a "pointing
|
||
|
device" with buttons, not keys) so this list was actually useless
|
||
|
and only confusing.
|
||
|
|
||
|
Plug-ins:
|
||
|
|
||
|
- Major rewrite of the API (see below). So GIMP 2.10.x plug-ins and
|
||
|
below must be ported to the new API.
|
||
|
- Every introspected binding which we test comes with a "Goat
|
||
|
Exercise", which is a demo plug-in popping a dialog and showing its
|
||
|
own source code. It processes a simple "gegl:invert" operation on a
|
||
|
drawable. All "Goat Exercises" must do the same thing in the same
|
||
|
way, simply in their respective languages, as documentation/example
|
||
|
code for a language binding.
|
||
|
- The Goat Exercise plug-ins are themselves installed as a GIMP
|
||
|
Extension, as a demo for extension creation.
|
||
|
- Plug-ins must be installed in their own subdirectory in
|
||
|
`$XDG_CONFIG_HOME/GIMP/2.99/plug-ins/`, thus preventing data mess
|
||
|
(with plug-ins coming with data and installing it all in the root
|
||
|
plug-ins/ directory) and DLL hell. The main plug-in executable must
|
||
|
be named the same as the directory (possibly with an added
|
||
|
extension).
|
||
|
E.g.: `plug-ins/my-cool-plug-in/my-cool-plug-in.py`
|
||
|
- HEIF export allows selecting color subsampling/pixel format (YUV444,
|
||
|
YUV420, RGB) and encoder speed (Slow, Balanced, Fast).
|
||
|
Lossless option delivers visually lossless output.
|
||
|
- New "file-heif-av1-load" procedure separate from "file-heif-load"
|
||
|
for AVIF only.
|
||
|
- shadow_bevel.py, sphere.py, whirlpinch.py and clothify.py moved to
|
||
|
gimp-data-extras.
|
||
|
|
||
|
API:
|
||
|
|
||
|
- `GimpPDB` is now a class to represent the PDB communication channel
|
||
|
with GIMP. It is a singleton which exist exactly once per running
|
||
|
plug-in, hence it is not meant to be manually instantiated and can
|
||
|
only be returned by gimp_get_pdb(). It is mostly used to look up
|
||
|
procedures declared by other plug-ins or by GIMP core, check if a
|
||
|
given procedure exist and run the procedures.
|
||
|
- `GimpPlugIn` is a class which every plug-in should now subclass as a
|
||
|
way to create their plug-in, and override at least the methods
|
||
|
query_procedures() and create_procedure(). Two other methods
|
||
|
(init_procedures() and quit()) can be optionally overridden.
|
||
|
The new subclass must be declared to gimp by calling gimp_main() to
|
||
|
make it available to the core (PDB procedure, menu items, etc.).
|
||
|
A plug-in can obtain its own GimpPlugIn instance with
|
||
|
gimp_get_plug_in(). This is a singleton object which belongs to
|
||
|
libgimp.
|
||
|
- Plug-In procedures are now represented by a class `GimpProcedure`.
|
||
|
* The subclass `GimpFileProcedure` handles file-related procedures,
|
||
|
and its own subclasses `GimpLoadProcedure` and `GimpSaveProcedure`
|
||
|
handle load/export procedures (file format support).
|
||
|
* The subclass `GimpThumbnailProcedure` for procedures run during
|
||
|
the lifetime of the GIMP session each time a plug-in thumbnail
|
||
|
procedure is called.
|
||
|
* The subclass `GimpImageProcedure` handles `GimpImage`-related
|
||
|
procedures, i.e. any procedure which want to work on the opened
|
||
|
image (GIMP core will pass through the active image and selected
|
||
|
drawables to the plug-in procedure).
|
||
|
* Objects of the subclass `GimpPDBProcedure` are not meant to be
|
||
|
created or freed by plug-ins, they represent any `GimpProcedure`
|
||
|
and are returned by `gimp_pdb_lookup_procedure()` by looking it up
|
||
|
by name on the singleton `GimpPDB` object.
|
||
|
- `GimpProcedureConfig` is the base class to represent the arguments
|
||
|
when running a `GimpProcedure`. It implements the `GimpConfig`
|
||
|
interface and will provide proper management of saved settings
|
||
|
(including the last used values) and generated GUI using
|
||
|
prop_widgets to plug-ins. This is still a work-in-progress.
|
||
|
Currently `GimpProcedure` run function is called with a
|
||
|
`GimpValueArray` whose values can be transferred into a
|
||
|
`GimpProcedureConfig` by calling `gimp_procedure_config_begin_run()`
|
||
|
or `gimp_procedure_config_begin_export()`.
|
||
|
- `GimpDisplay` is now a class of its own.
|
||
|
- `GimpImage` is now a class to represent an opened image.
|
||
|
- `GimpItem` is now a class to represent various `GimpImage` items.
|
||
|
* `GimpVectors` subclass represents an image path.
|
||
|
* `GimpDrawable` subclass represents drawable object but is a
|
||
|
simili-abstract class as it won't be a finale object class, which
|
||
|
can be so far either a:
|
||
|
+ `GimpLayer` represents image layers.
|
||
|
+ `GimpChannel` represents a `GimpImage` channel which is
|
||
|
typically in GIMP a named channel which can be added into a
|
||
|
`GimpImage` channel stack (the "Channels" dockable in the GUI)
|
||
|
with `gimp_image_insert_channel()`. This class is not really
|
||
|
used to represent a color space component though this is
|
||
|
conceptually the same thing (so maybe some day) and named
|
||
|
channel can actually be created from an image color component
|
||
|
with `gimp_channel_new_from_component()`.
|
||
|
Some other specific usages have their own subclasses:
|
||
|
- `GimpLayerMask` subclass is used for a `GimpLayer` mask.
|
||
|
- `GimpSelection` subclass is used for a `GimpImage` selection.
|
||
|
- GimpImage, GimpItem and GimpDisplay (and their various subclasses)
|
||
|
represent objects which can be passed through the PDB. They are
|
||
|
managed by libgimp and should not be freed by plug-ins.
|
||
|
- The PDB-passing classes still have IDs which can be obtained with
|
||
|
gimp_image_get_id(), gimp_item_get_id() and gimp_display_get_id()
|
||
|
respectively. Conversely you can get back the object with
|
||
|
gimp_image_get_by_id(), gimp_item_get_by_id() and
|
||
|
gimp_display_get_by_id().
|
||
|
Specific variants exist to get back an item object from its ID, such
|
||
|
as gimp_layer_get_by_id(), which do additional class verification
|
||
|
(other than this, they are similar to gimp_item_get_by_id()).
|
||
|
**NOTE**: since objects are managed by libgimp, you are ensured that
|
||
|
a `*_get_by_id()` call returns you exactly the same object you had
|
||
|
previously for a given object. Consequently you can do pointer
|
||
|
comparison of objects to compare images, items or displays during a
|
||
|
given run. This will work because objects are unique (these are not
|
||
|
several object copies representing the same remote object).
|
||
|
- Type validation function which used to work on IDs now work directly
|
||
|
with object arguments while new function with added `*_id*` have
|
||
|
been created to validate from an object ID instead, GIMP 2.10-style.
|
||
|
To verify if an ID exist:
|
||
|
* gimp_image_is_valid() / gimp_image_id_is_valid()
|
||
|
* gimp_item_is_valid() / gimp_item_id_is_valid()
|
||
|
* gimp_display_is_valid() / gimp_display_id_is_valid()
|
||
|
To check if GimpItem are from specific subclasses:
|
||
|
* gimp_item_is_drawable() / gimp_item_id_is_drawable()
|
||
|
* gimp_item_is_layer() / gimp_item_id_is_layer()
|
||
|
* gimp_item_is_text_layer() / gimp_item_id_is_text_layer()
|
||
|
* gimp_item_is_channel() / gimp_item_id_is_channel()
|
||
|
* gimp_item_is_layer_mask() / gimp_item_id_is_layer_mask()
|
||
|
* gimp_item_is_selection() / gimp_item_id_is_selection()
|
||
|
* gimp_item_is_vectors() / gimp_item_id_is_vectors()
|
||
|
|
||
|
**NOTE**: since these are GObject classes, you can also use the
|
||
|
GObject style macros such as GIMP_IS_LAYER(). Yet these macros do
|
||
|
not do any ID verification (which is not a problem anyway in most
|
||
|
cases as you got the object from API calls) and will not exist in
|
||
|
bindings.
|
||
|
|
||
|
**IMPORTANT**: using IDs is mostly for internal usage and actually
|
||
|
there are very few reasons to ever need to get an object ID from a
|
||
|
plug-in. Usually you should rather just work only with the unique
|
||
|
object pointers returned by the API.
|
||
|
- The whole API has been updated to use objects instead of object IDs
|
||
|
when relevant. For instance all existing libgimp functions from 2.10
|
||
|
which were called on an image ID are now called on a GimpImage
|
||
|
object instead.
|
||
|
- All file paths procedure parameters are now handled by GIO's `GFile`
|
||
|
which simplify various file handling issues (path formats, encoding,
|
||
|
etc.) and brings new features (remote access, secure protocol
|
||
|
support, etc.). We also got rid of the "filename" vs "raw_filename"
|
||
|
differentiation in parameters. Hence all libgimp* functions with
|
||
|
these parameters have been updated as well.
|
||
|
- gimp_image_metadata_load_finish() is now fully GUI/GTK-code free.
|
||
|
The first consequence is that it is not in libgimpui anymore, but in
|
||
|
libgimp, as it should. The second consequence is that the boolean
|
||
|
`interactive` argument has been removed. Now all image rotation
|
||
|
logics (the part which needed a GUI) has been moved into core and
|
||
|
will be automatically run when normally loading images from GIMP's
|
||
|
interface, similarly as to how color profiles was already handled.
|
||
|
- 2 new libgimp functions: gimp_image_policy_rotate() and
|
||
|
gimp_image_policy_color_profile() are now available to explicitly
|
||
|
call the Preferences-set policy on an image. This may result in a
|
||
|
dialog being presented to the user if `interactive` is TRUE and
|
||
|
settings is "Ask what to do".
|
||
|
It is unnecessary to call these functions when developing a new
|
||
|
GimpLoadProcedure because the core will automatically do the right
|
||
|
thing and call these on normal image loading workflow.
|
||
|
Instead if a plug-in calls such GimpLoadProcedure through the PDB,
|
||
|
no such functions will be run automatically. It is up to the plug-in
|
||
|
to decide what to do (no conversion, mandatory conversion, or using
|
||
|
user settings, possibly with a dialog to decide, hence calling these
|
||
|
functions explicitly).
|
||
|
- New function gimp_export_comment() to query the user settings (as
|
||
|
set in Preferences) on whether or not a file plug-in should export
|
||
|
the image's comment.
|
||
|
- Several functions which are returning C-array of objects with a size
|
||
|
output argument now also have a GList counterpart (not as
|
||
|
replacement, but as additional API):
|
||
|
* gimp_get_images() -> gimp_list_images()
|
||
|
* gimp_image_get_layers() -> gimp_image_list_layers()
|
||
|
* gimp_image_get_selected_layers() -> gimp_image_list_selected_layers()
|
||
|
* gimp_image_get_channels() -> gimp_image_list_channels()
|
||
|
* gimp_image_get_vectors() -> gimp_image_list_vectors()
|
||
|
* gimp_item_get_children() -> gimp_item_list_children()
|
||
|
- New function gimp_vectors_stroke_reverse() to reverse a specified
|
||
|
stroke in a given GimpVectors.
|
||
|
- In GIMP 2.10, functions gimp_drawable_preview_get_drawable() and
|
||
|
gimp_zoom_preview_get_drawable() got deprecated in favor of
|
||
|
respectively gimp_drawable_preview_get_drawable_id() and
|
||
|
gimp_zoom_preview_get_drawable_id(). The original names have been
|
||
|
reinstated and now returns a GimpDrawable object, whereas the newer
|
||
|
functions got removed.
|
||
|
Similarly gimp_zoom_preview_new_from_drawable_id() and
|
||
|
gimp_drawable_preview_new_from_drawable_id() are replaced by
|
||
|
respectively gimp_zoom_preview_new_from_drawable() and
|
||
|
gimp_drawable_preview_new_from_drawable().
|
||
|
- Deprecated functions in GIMP 2.10.x have been removed. To get a list
|
||
|
of these function, this file should hopefully map most of them to a
|
||
|
replacement equivalent:
|
||
|
devel-docs/GIMP3-plug-in-porting-guide/removed_functions.md
|
||
|
- gimp_spin_button_new() had some weird compatibility macro to expand
|
||
|
to a newer or older signature depending on the number of arguments.
|
||
|
Now only the newer signature with 3 arguments is available.
|
||
|
- Properties removed from custom widgets:
|
||
|
* GimpAspectPreview, GimpDrawablePreview and GimpZoomPreview had a
|
||
|
deprecated "drawable" property in favor of "drawable-id" property.
|
||
|
The "drawable" property got reinstated (and the "drawable-id"
|
||
|
removed) and obviously now stores a GimpDrawable object rather
|
||
|
than an integer.
|
||
|
* The property "stock-id" was removed from GimpHintBox and
|
||
|
GimpCellRendererToggle. Use "icon-name" instead.
|
||
|
- Note: there are likely more API changes, unfortunately we haven't
|
||
|
kept the NEWS file up-to-start from scratch. The best is to look at
|
||
|
the API generated documentation.
|
||
|
- The full API is GObject Introspected into 2 modules: Gimp and
|
||
|
GimpUi. This means plug-ins can be written in various non-C
|
||
|
languages. So far the following languages have been tested and work
|
||
|
well: Python 3, Lua, Javascript and Vala.
|
||
|
(Note: Python 2 is also working, but considering that this language
|
||
|
is end-of-life since 2020, we don't really care).
|
||
|
- All pygimp specific Python API does not exist anymore. Python will
|
||
|
use the same API as C plug-ins, introspected through GObject
|
||
|
Introspection.
|
||
|
|
||
|
Documentation:
|
||
|
|
||
|
- `devel-docs/xcf.txt` updated to handle XCF 14.
|
||
|
|
||
|
Build:
|
||
|
|
||
|
- New meson build system. Still deemed "experimental" for the time
|
||
|
being. Packagers are recommended to continue using the autotools
|
||
|
build system in order to avoid build system-specific bugs.
|
||
|
- Continuous integration in Gitlab with:
|
||
|
- an autotools build with GCC on a Debian/testing runner
|
||
|
- an autotools distcheck build on a Debian/testing runner
|
||
|
- a meson build with GCC on a Debian/testing runner
|
||
|
- a meson build with Clang on a Debian/testing runner
|
||
|
- a meson cross-build with Mingw-w64 for Windows 32-bit
|
||
|
- a meson cross-build with Mingw-w64 for Windows 64-bit
|
||
|
- static code analysis with cppcheck
|
||
|
- a source tarball distribution job (tar.bz2 and tar.xz)
|
||
|
- a ready-to-run Windows 64-bit test archive
|
||
|
- a ready-to-run Windows 32-bit test archive
|
||
|
|
||
|
Known blocker issues:
|
||
|
|
||
|
- GTK+3 port is functional but not complete as some deprecated APIs
|
||
|
are still being used.
|
||
|
- Space invasion is still a work-in-progress.
|
||
|
- Plug-ins API update is still a work-in-progress.
|
||
|
- GIMP extensions are still a work-in-progress.
|
||
|
- Multiple layer selection is still work-in-progress. Some issues are
|
||
|
expected, and possibly even some crashes in code paths which were
|
||
|
not updated yet.
|
||
|
- No custom theme yet, in particular we want a neutral gray theme with
|
||
|
light/dark variants, and a middle-gray theme too.
|
||
|
- We probably want to revive a "Small" theme as well with smaller
|
||
|
icons (useful on smaller displays, or mid-high density displays or
|
||
|
simply depending on tastes).
|
||
|
- Various blocking bugs happen on Wayland only.
|