------------------------------
GNU Image Manipulation Program
2.10 Stable Branch
------------------------------
This is the stable branch of GIMP. Unlike earlier stable branches,
we do allow some new features here, if they are not too invasive.
Otherwise, this branch is only for bug-fixes.
Overview of Changes from GIMP 2.10.8 to GIMP 2.10.10
====================================================
Core:
- Add gimp-scratch allocator, a fast memory allocator (on the order of
magnitude of alloca()), suitable for small (up to a few megabytes),
short-lived (usually, bound to the current stack-frame) allocations.
Unlike alloca(), gimp-scratch doesn't use the stack, and is therefore
safer, and will also serve bigger requests, by falling-back to malloc().
- In gimp_drawable_transform_buffer_affine(), avoid modifying the
clipping mode when transforming layer masks, since this function
is used (among other things) to transform layer masks together with
their layer, in which case they should use the same clipping mode
as the layer. This fixes a regression introduced by commit 2ae823ba,
causing layer masks to be transformed with a mismatched clipping mode
during layer transforms, leading to discrepencies between the
transformed layer and the transformed mask.
- Moved swap/cache and temporary files out the GIMP user config dir and
added new config file substitutions ${gimp_cache_dir} and
${gimp_temp_dir}.
- Pass the GEGL tile-cache size, swap path, and thread-count to plug-ins
as part of their config, and have libgimp set the plug-in's GeglConfig
accordingly upon initialization.
- Layer groups are now rendered in bigger chunks rather than tile-by-tile
(which used to pretty much eliminate multithreading for groups), which
improves the rendering speed.
- Make saving/exporting files more robust to errors. In particular if
an error occurs during the process (be it a bug, a memory error, or
anything else), GIMP won't overwrite anymore any existing file with
incomplete contents, so that you won't end up with no valid files at
all.
- Fix a regression on support of various graphics tablet.
- Remove the "Edit -> Fade..." feature: it makes GIMP use two buffers
instead of one (east into system resources), it's broken in 2.10, and
we can make the UX better for filters.
- New generic canvas modifier 'Alt + middle click' allowing to pick
layers by clicking on pixels. The available layers will be looped
through (starting from the upper one) while Alt key is hold and the
picked layer name will be temporarily displayed in the status bar.
- When clearing a channel, do nothing if the channel is already empty;
otherwise, align the cleared rectangle to the channel buffer's tile
grid, so that all affected tiles are dropped, rather than zeroed.
Furthermore, only update the affected region of the channel.
- Brush and pattern saving logics has been moved to core code (instead
of plug-in).
- Clipboard brushes and pattern can now be duplicated.
- Parametric brushes are now 32-bit float to avoid posterization on
large brushes.
Note: raster brushes are still 8-bit and plug-ins only have access
to 8-bit versions of high-precision brushes/patterns. New API will
be required to handle high-precision data.
- On-canvas preview while editing a color in the colormap of an
indexed image.
User interface:
- Enabled HiDPI/Retina support for the GTK2/OSX build, fixes blurry icons.
- Add a tooltip to the "better compression" checkbox in save dialog to
make it clearer it does not mean that the file size is necessarily
smaller in every cases. In particular some best/worst case are
possible when an algorithm less efficient in general may end up
better on a particular image.
- Add basic support for cursors with a scale factor of 2 for HiDPI
(artwork to be updated).
- Foreground and background color icons, as well as color history will
now display out-of-gamut warning on indexed images for colors
outside of the palette, as well as on grayscale images, for non-gray
colors.
- Pack color picker and hexadecimal entry on same line in Color dock.
- Add an "Open as Image" button to the brushes dialog.
Usability:
- Attempting to transform locked layers or paint on them now results in
blinking around the status bar (where the warning message is displayed)
and around the toolbar where lock toggles are. The same applies to
attempting to move a selection where there is none — GIMP will blink
around the toolbar where the moving target (layer, selection, path)
is chosen.
- GIMP now allows selecting default export file type for new projects.
The choice is limited to PNG, JPEG, WebP, PSD, ORA, TIFF, BMP.
- GimpSpinScale widget now has an optional feature to constrain the
value to integer when dragging with a pointer (even if the scale
allows for fractional numbers), set with new function
gimp_spin_scale_set_constrain_drag().
This is useful for settings where fractional numbers are technically
possible, yet most common use case are with integers (such as pixel
sizes, angles in degrees, etc.) so you want the easy interface to be
constrained. Fractional numbers are still settable, for instance by
keyboard edit; and arrow incrementation won't drop fraction parts.
This is currently only activated for brush options in paint tools.
Tools:
- In scale tool, scale around center even when using numeric input.
- New algorithm in the Bucket Fill tool when selecting the affected
area "Fill by line art detection", based off the G'Mic algorithm for
"smart colorization": https://hal.archives-ouvertes.fr/hal-01891876
In a few words, it identifies painted pixels (either based on
grayscale or opacity values) and tries to close line arts to allow
filling even with not perfectly closed zones; the second step of the
algorithm will flood the colors under line art pixels to prevent
"holes" in the filling.
It is possible to control a max size (in pixels) for the flooding,
as well as max length of closing segments and splines.
- The Bucket Fill tool got new interaction allowing to hold the click
and move the mouse to fill based on several seed zones (for "Fill
by line art detection" as well as "Fill similar colors"). You can
now cancel the fill in progress with right click as in other tools.
- The Bucket Fill tool now allows color picking with ctrl-click, same
as every painting tool. It will pick either the foreground or
background color depending on the selected Fill Type. The ctrl-alt
modifier combination is also possible to pick the non-Fill Type
color.
- In the Bucket Fill tool, the Alt modifier will now switch to
"FG color fill" when "Pattern fill" was set (instead of doing
nothing).
- In the Unified Transform tool, default to preserving aspect ratio
when scaling up or down.
- In the Healing tool, "Sample merged" now also work for the target
pixels, allowing to draw in empty layers.
- Selection by color is now parallelized, hence improving speed of the
Select by Color tool (and any other processing which may share this
piece of code now or in the future).
- Add "Constrain handles" and "Around center" options to the
perspective-transform tool's GUI, which are similar to the
corresponding options of the unified-transform tool.
- Improve color picking on indexed image to always select an indexed
color corresponding to the picked pixel in the colormap.
Plug-ins:
- file-pdf-save GUI now clearly indicates the order the layers will be
used to make multi-page PDFs.
- Add DDS loading/exporting plug-in originally developed by Shawn Kirst
and Arne Reuter.
- Rename the Guillotine plug-in to Slice Using Guides.
- Add a new option saving a color profile when exporting PNG, JPEG, TIFF.
Always save it when exporting to PSD.
- Remove the "Advanced" expanders from the PNG and TIFF export dialogs.
- Full rewrite of the Spyrogimp plug-in with much more options and
better interaction.
- Indexed TIFF with alpha channel now supported.
Filters:
- Add on-canvas GUI (simple lines) for circular, linear, and zoom motion
blur.
Help:
- Link to the bugtracker directly from the Help menu, also link to the
wiki and the roadmap. Remove the link to currently disabled
registry.gimp.org.
Installers:
- Windows: proper fix for libthai to stop GIMP from crashing in the
Thai locale.
Translations:
- Czech, Danish, French, Italian, Japanese, Marathi, Polish, Russian,
Spanish, Swedish, Ukrainian.
Build:
- Bumping GTK+ dependency to the micro update GTK+ 2.24.32 to handle
several bugs on Windows (broken shortcuts on non-latin layouts and
broken vector icons).
Overview of Changes from GIMP 2.10.6 to GIMP 2.10.8
===================================================
Core:
- Use adaptive chunk size in GimpProjection when rendering the
projection asynchronously, rather than using a fixed chunk size.
This provides a better trade-off between throughput and
responsiveness dynamically, based on how fast the processing is.
- Add xyY color space to the color spaces for sampling colors.
Tools:
- In all selection tools, show error on attempt to
subtract-from/intersect-with empty selection.
- Fix text along path not working with vertical text.
- Fix Text tool's frame position when undoing a move operation.
- Streamline Text tool's drawing blocking/unblocking logic.
- When moving a text layer using the text tool (through alt+drag),
don't change the layer's box mode to "fixed", which is unnecessary,
since the layer's size isn't affected.
- Transform and deformation operations now maintain color for fully
transparent pixels, making unerase and curves manipulation of alpha
channel more reliable.
- All transform tools now apply changes when you save or export/overwrite
an image without pressing Enter first to confirm changes.
- Heal, Dodge/Burn, Smudge, and Convolve tools now adjust the processed
buffer and mask_buffer regions according to the changes made to the
application region, as calculated by intersecting it with the
drawable and mask extents. This fixes wrong application position
when painting on a drawable whose origin is above/to the left of the
image's origin, and there's a selection active.
- New type of gradient interpolation called 'Step' for making multi-color
hard-edge gradient fills.
Plug-ins:
- Port all plug-ins to the new iterator API in GEGL.
- Improve automatic detection of HEIC/HEIF files.
- Improve RawTherapee discovery by looking up registry key (should
become useful with RawTherapee 5.5 and more).
Usability and UI:
- Compatibility information in the Save dialog is now more understandable.
The minimum GIMP version for the XCF file is always written down when it
is GIMP 2.8 or over. The list of features warranting the minimum version
is now listed in an expander container rather than as tooltip, which
makes it more discoverable. The warning on compression is now displayed
as its own text under the checkbox and not as additional text to the
minimum GIMP version label.
- In all themes, fix the color of selected text, while editing a tree-view's
item text (such as when renaming a layer), by overriding tree-view
specific styling with the global text-entry style, for nested text entries
inside tree-views. The text would previously use the same color as the
selection background, making it unreadable.
- Add option in the Windows menu to hide the image tab bar.
CLI:
- New self-explanatory --enable-win32-debug-console CLI option
Debugging:
- New GimpBacktrace API provides an interface for creating and
traversing multi-threaded backtraces, as well as querying symbol
information. Backends are available for Linux and Windows.
- Performance log recording now available in the Dashboard dock.
The log contains a series of samples of the dashboard variables,
as well as the full program backtrace, when available. As such,
it essentially acts as a built-in profiler, which allows us to
correlate program execution with the information available
through the Dashboard.
- New performance-log-expand.py tool decodes a delta-encoded
performance log by expanding the deltas, producing a log where
each sample (and other relevant elements) contain complete
information. The structure of expanded logs is identical to that
of delta-encoded logs, the expanded log simply has no deltas.
- New performance-log-resolve.py tool resolves symbol information
in backtraces. The logs produced by GIMP only specify the program
counter at each stack frame, providing an address-map to map
program-counter addresses to actual symbols separately. This tool
looks up each program-counter address in the address map,
incorporating the relevant symbol information directly into the
backtrace.
- New performance-log-deduce.py tool that statistically deduces the
correct thread states based on backtrace address frequency, fixing
local inaccuracies.
- New performance-log-viewer.py tool that is a viewer for GIMP
performance logs, with a sample-selection area at the top and an
information area at the bottom. The sample-selection area visualizes
the sampled variables and markers using a simultaneous set of plots,
and displays the currently selected samples. The information area
shows global information stored in the log, as well as information
specific to the currently selected samples, including variable listing
and statistics, full backtrace, and profile/call-graph information.
Translations:
- Updated translations: Danish, Dutch, Finnish, German, Hungarian,
Italian, Marathi, Polish, Portuguese (Brazil), Russian, Spanish,
Swedish, Ukrainian.
Overview of Changes from GIMP 2.10.4 to GIMP 2.10.6
===================================================
Core:
- Render drawable previews asynchronously.
- Merge the file view filter and file format lists in GimpFileDialog.
The presence of 2 lists was very confusing.
- DLL search priority is now updated before running a plug-in on
Windows, depending on the executable bitness. This gets rid of one
of the last remnant of DLL hell in GIMP, which was when running
32-bit plug-ins from a 64-bit build of GIMP.
Filters:
- New "Little Planet" (gegl:stereographic-projection) filter.
- New "Long Shadow" (gegl:long-shadow) filter.
Tools:
- Halt the Measure tool after straightening.
- Add an "orientation" option to the measure tool, corresponding to
the "orientation" property of GimpToolCompass (i.e., it controls the
orientation against which the angle is measured, when not in 3-
point mode.) The orientation is "auto" by default, so that the
angle is always <= 45 deg. Note that the "orientation" option
affects the tool's "straighten" function, so that the layer is
rotated toward the current orientation.
- Text layers can now represent vertical texts, with 4 variants:
left-to-right and right-to-left lines, and forcing all characters to
be upright or following Unicode's vertical orientation property.
See also:
* https://www.unicode.org/reports/tr50/
* http://www.unicode.org/Public/UCD/latest/ucd/VerticalOrientation.txt
User Interface:
- The Dashboard dockable dialog now has an "async" field to the
dashboard's "misc" group, showing the number of async operations
currently in the "running" state.
- New Preferences option to enable/disable layer-group previews, since
these can get quite time-expensive.
Translations:
- New language: Marathi
- 12 translations were updated: Brazilian Portuguese, Dutch, French,
German, Greek, Italian, Latvian, Polish, Romanian, Slovenian,
Spanish, Swedish.
Build:
- Add --with-win32-32bit-dll-folder configuration option to override
the folder where 32-bit versions of DLL will be installed (default:
32/bin/).
- Install all plug-ins in their own directories. Unlike on master,
this is not mandatory to do so, but it would protect our core
plug-ins against any DLL installed directly under plug-ins/ by
third-party plug-ins (cf. Windows DLL hell).
Overview of Changes from GIMP 2.10.2 to GIMP 2.10.4
===================================================
Core:
- Remove gimp_display_shell_draw_background() and all clipping hacks
for drawing the canvas background. This optimizes away one entire
step of drawing of image size, for each expose.
- Font loading does not block startup anymore. Only consequence is
that the Text tool may not be usable immediately if fonts are not
fully loaded yet (and will output an appropriate error if you do
so). All non-text related activities can be performed right away.
- Change of the URL from bugzilla to gitlab where appropriate.
- New tool option manager to better keep track of user context and
paint options in a consistent manner.
User Interface:
- The Dashboard dockable dialog now has a 'Memory' group that shows
memory-usage information: the currently used memory size, the
available physical memory size, and the total physical memory
size. It can also show the tile-cache size, for comparison
against the other memory stats. Note that the upper-bound of the
meter is the physical memory size, so the memory usage may be over
100% when GIMP uses the swap.
- The Dashboard dockable dialog now has "read" and "written" fields in
the dashboard swap group, which report the total amount of data
read-from/written-to the tile swap, respetively. Additionally, the
swap busy indicator (used as the meter's LED) has been improved,
so that it's active whenever data has been read-from/written-to
the swap during the last sampling interval, rather than at the
point of sampling.
- Fonts can now be tagged. The user interface is the same as for
brushes, patterns etc.
- Some icons fixed: larger spacing between broken chains and
gimp-tool-ellipse-select made symmetrical.
Usability:
- When a plug-in cannot be applied to an image because of mismatch
in image types (e.g. layer has no alpha or image is greyscale),
GIMP now displays a message listing supported image types for this
plug-in.
Tools:
- The Measurement tool now has an "Auto straighten" option allowing
to rotate the active drawable (layer, channel…) so that the
measurement line is used as horizon. As other transform tools, the
feature will work on linked drawables as well.
- The Smudge tool now paints correctly on images with a color
profile other than the GIMP's built-in one.
Build:
- Installer: set compatibility options to run Python plugins in
HiDPI-aware mode.
- Put back compatibility DLLs for really old plugins.
- Install binary tool `gimp-test-clipboard` on the system to allow
people to help us debug clipboard bugs.
- --enable-bundled-mypaint-brushes renamed
--enable-relocatable-bundle and also make WMF fonts looked up on
the runtime prefix of GIMP (instead of the build-time path) when
this build option was set.
Plug-ins:
- gimptool-2.0 binary now accepts source files with non-standard
extensions if it can try to guess appropriate language from the
compiler being used. It will also properly quote arguments for
shell usage.
- Run explicitly Python 2 as Python plug-in interpreter to prevent
breakage on systems where Python 3 is the default.
- raw_input()'s argument in Python console is now optional, and
input() support has been added.
File Formats:
- The PSD loader now provides an option to load "merged",
pre-composited version of the images that becomes available when a
PSD file was saved with "Maximize Compatibility" option enabled in
Photoshop. This is useful when loading PSD files that use features
that GIMP doesn't currently support, and therefore can't render
correctly, such as adjustment layers. When loading the merged
image version, we avoid loading certain additional data from the
file, such as channels, paths, and guides, while still loading
metadata. This option is currently exposed as an additional file
type ("Photoshop image (merged)"), which has to be explicitly
selected from the file-type list when opening the image.
- Embedding GIMP's built-in sRGB color profile to exported files is
now optional. The default choice can be set in the Preferences
dialog.
Translations:
- Updated translations: Catalan, Czech, Danish, Dutch, Finnish,
Greek, Hungarian, Italian, Latvian, Polish, Romanian, Russian,
Spanish, Swedish, Ukrainian.
Overview of Changes from GIMP 2.10.0 to GIMP 2.10.2
===================================================
Core:
- Discard fonts which fail to load and popup an info dialog to allow
people debug their fonts.
- New API to suppress updates in UI until plug-ins are done
introducing changes.
- New API to calculate histograms in separate threads, with possible further
extension to handle similar cases elsewhere in GIMP.
- Tool options are now properly saved and reloaded per-device at
startup.
Plug-ins:
- New plug-in for importing and exporting HEIF images.
- Enable visibility of rasterized vector layer from PSD.
- Single-window screenshots in Windows fixed to correctly snap a
window even when it is partly off-screen or covered by another
window or when display scaling is not set to 100%.
Filters:
- New Spherize filter to wrap an image around a spherical cap
- New Recursive Transform filter to create Droste effect.
Usability:
- Warn users, when alpha-only painting has no effect. E.g. when target
drawable doesn't have an alpha channel, or the alpha channel is locked.
- Make the splash texts dynamic, so they are larger on larger splashes.
- Mention pressing Enter to complete Foreground selection in the status bar.
- Make sure that clicking outside any selection prevents Rectangle Select
and Ellipse Select tools from creating empty selections.
- Improve mouse wheel zooming behavior to keep the same point
centered under the pointer even if the image is completely visible
in the canvas.
- Add "View -> Center Image in Window" (Shift+J) as a quick way to
center the image at any zoom level.
Translations:
- Updated translations: Catalan, Danish, Dutch, French, German, Greek,
Hungarian, Icelandic, Italian, Latvian, Polish, Russian, Spanish,
Swedish, Ukrainian.
- New translation of Windows installer: Chinese (Taiwan)
Build:
- Add a --with-bug-report-url configure option allowing packagers to
set the address of their own bug tracker. This address will be the
one opened by the debug dialog for reporting bugs.
- Add a flatpak manifest for the gtk3-port branch.
- Remove the possibility to disable script-fu.
- Add a --with-icc-directory configure option to customize the color
profile directory. By default, it is set to the common path
/usr/share/color/icc.
Documentation:
- Updating the description of the XCF format "devel-docs/xcf.txt", for
third-party readers wishing to support GIMP 2.10 XCF files.
- Add documentation skeletons for all enums in libgimpbase/, there is
much room for improvement.