------------------------------ 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.14 to GIMP 2.10.16 ===================================================== Core: - In gimp_gegl_apply_cached_operation(), use gint64 for storing the total and processed pixel counts used for reporting progress, to avoid overflowing when applying an operation to a large image. Tools: - New 3D Transform tool where you can set vanishing point, camera's focal length, and the move and rotate layer, selection, path, or image in 2.5 space. With the "Unified interaction" option enabled, all three interaction modes of the grid (camera, move, and rotate) are available simultaneously. In this mode, the inner and outer regions of the item are used for moving and rotation, respectively, and the vanishing point is controlled through through a handle. - Transform tools now respect the Clip option and update the canvas preview accordingly. - New "Composited preview" option allows respecting layer's blending mode and position in the layer stack rather than rendering it as an overlay on top of the overall layer stack. This simplifies creating complex layer compositions greatly. The option requires mipmaps to be used and thus is disabled by default. It also comes with an experimental "Synchronous preview" suboption to render the composited preview synchronously. This reduces the lag for painting the preview, but can harm responsiveness for bigger images, where rendering the preview is slow. - New widget called GimpPivotSelector, a 3x3 grid of toggle buttons, is now used for selecting a natural pivot position (e.g. for a transform) relative to an item: its center, its corners, and the midpoints of its edges. Currently used in Rotate and 3D Transform tools. - Add "Show all" support to the Bucket Fill tool in line-art mode - Color picker and sample points now support displaying vlaues in Yu'v' (CIE 1976 UCS) color space. - The Symmetry Painting dock now has an "Enable reflection" option that allows painting patterns resembling a kaleidoscope. UI: - New opt-out compact style for sliders with revamped interaction. The widget uses a narrower layout, and the different upper/lower-half behavior is gone. Instead, the behavior depends on the mouse button and modifier used: - left-click is used for absolute adjustment, - Shift + left-click + drag changes value in small increments, - Ctrl + left-click + drag changes value in large increments, - middle-click enables numeric input mode; - right-click enables numeric input mode and select the value. - Consolidate UI for merging down and anchoring layers: As they are both mutually exclusive and serve an almost identical purpose, the "Merge down" and "Anchor Layer" are given mutually exclusive visibility in menus, and the anchor button is replaced with a merge down button in the Layers dockable whenever there is no active floating selection. Modifier keys are available: - Shift: merge layer group - Ctrl: merge visible layers - Ctrl + Shift: merge visible layers from last used values Plugins: - In plug_in_compat.pdb, when wrapping an op node inside a graph, set the op node as the graph node's underlying operation. This allows gimp_gegl_apply_operation() to perform certain optimizations. Windows: - Installer: unofficial languages, ghostscript 9.50. - Installer: skip .debug files when they don't exist. - Installer: properly remove old icons on 32-bit installs and per-user installs. macOS: - Set required variables if it is running from Apple application bundle. - The macOS build now ships with the dashboard dock for displaying perfomance graphs. Updated translations: - Catalan, French, Japanese, Polish, Russian, Spanish, Swedish, Turkish, Ukrainian. Bugfixes: - #4172, #4194, #4205, #4218, #2543, #4185, #4246, #2794, #4209, #4278, #4372, #4187, #4392, #2674, #4338, #2862, #4203, #4204, #4354, #1266 Developers: - Alex Samorukov, Cyril Richard, Ell, Elle Stone, Jehan, Jernej Simončič, lillolollo, Massimo Valentini, Michael Natterer, Pascal Terjan, woob. Translators: - Alexandre Prokoudine, Anders Jonsson, Daniel Korostil, Jordi Mas, Julien Hardelin, Marco Ciampa, Piotr Drąg, Rodrigo Lledó Milanca, Ryuta Fujii, Sabri Ünal, sicklylife. Overview of Changes from GIMP 2.10.12 to GIMP 2.10.14 ===================================================== Core: - New "Selected areas continue outside the image" toggle option to the "Feather Selection" dialog. - New "Allow editing on non-visible layers" setting in Preferences to allow painting, transforming, and selecting on layers with toggled off visibility. - XCF loading a bit more resilient to corruption: it doesn't stop any more at the first layer or channel error; instead it tries to load more layers/channels to salvage as much data as possible from a corrupted XCF file. - In gimp:gradient, fix dithering to correspond to how we actually round float values to 8-bit. In particular, this avoids introducing noise when a component is fixed at 0 or 1 along a segment. - New "Show All" view mode allowing to show pixels outside the canvas boundary. - New "Show Canvas Boundary" option to render a dotted line around the canvas boundary. - New "Keep Padding in "Show All" Mode" option, also available as a default option via Preferences, to preserve the padding color instead of displaying the checkerboard. - Several features updated to react as expected when run out-of-canvas: color-picking, canvas grid, transform tools, bucket fill, and more. - Loaded images' pixel density will now default to 72 PPI when no explicit resolution information was stored in the imported file. Newly created images' default pixel density will continue to be based on the default image template (with value 300 PPI if it has not be changed), yet not loaded images anymore. 72 PPI is the common default in most software (and in standards such as Exif) so it makes sense we stick to it, only for loaded images. Tools: - Free Select tool: fast copy|cut-paste modifiers (Alt + Ctrl|Shift) are now working even when the selection is not committed. Starting a fast copy|cut-paste will automatically close the polygon and commit the selection, accelerating fast usage of free selections. - Foreground Select tool: new "Grayscale" Preview Mode. Also, a color selector for "Color" preview (original preview mode) now available, to select any color and opacity for the preview. - Add a new "Image" transform type to the transform tools, in addition to the existing "Layer", "Selection", and "Path" transform types. The "Image" mode transforms the entire image, rather than a single item. In tools with a preview, the preview shows the transformed image projection. The clipping mode controls how the canvas is clipped during the transform; in particular, the ADJUST clipping mode resizes the canvas to fit its transformed size. - In GimpFilterTool, add a new "clipping" option, which can be either Adjust or Clip. This option is controllable for layers, when there's no selection mask. When set to Adjust, which is used by default, the filter's output may extent past the drawable's boundary, and the drawable will be resized to match the output when committed. - Gradient tool: offest support in shaped gradients Plug-ins: - Simple 8-bit port of filters to GEGL: nl-filter, film, fractal-explorer, flame, blinds, jigsaw, gradient-flare, checkerboard, tile-small, curve-bend, sample-colorize, map-object, lighting, grid, despeckle, sphere-designer, contrast-retinex, hot, sparkle, cml-explorer, destripe, twain, animation-optimize, depth-merge, warp, imagemap, gimpressionist - Port of filters to GEGL with float support: van-gogh-lic. - Add color profile support for HEIF (only when libheif 1.4.0 is available). - TIFF import will now ask (in interactive mode) how to process unspecified TIFF channels: non-premultiplied (used to be the default) alpha, premultiplied alpha, or just import as generic channel. - HEIF export now improved with same profile logics as JPEG or WebP (it can actually export higher bit-depth data, so profile logics should be the one as in PNG, but we only support 8 bpc HEIF for the time being). - HEIF export dialog now has a "Save color profile" checkbox allowing to not export with a profile when needed (needs libheif 1.4.0 or higher). - PDF exporting: text layers in layer groups are now exported as proper text. - Cleaned up the file-dds GUI, removed the "Advanced" expander. - gimptool external tool now install plug-ins into subfolders (this is not mandatory in GIMP 2.10 yet, unlike future GIMP 3, but is already the recommended folder structure for plug-ins). - 3 procedures ("color-decode-ycocg", "color-decode-ycocg-scaled" and "color-decode-alpha-exp") removed from file-dds plug-in because they are hacks which should stay internal to the plug-in and are semantically wrong because colors in drawables are never in such formats. Filters: - New "Normal Map" filter to generate normal maps from height maps in the Generic section. - Replace old filters with GEGL operation counterparts: edge-neon (gegl:edge-neon), contrast-normalize (gegl:stretch-contrast), oilify (gegl:oilify) - Add gegl:bayer-matrix and gegl:linear-sinusoid to Filters -> Render -> Pattern. - Add gegl:newsprint to Filters -> Distorts. - Add gegl:mean-curvature-blur to Filters -> Blur. Performance: - Add an active-thread variable to the dashboard's misc group, showing the number of active worker threads. - Reduce time complexity of layer-group translation. When translating a layer group, avoid separately updating the original area of the child layers before translating them (as per the fix to issue #3484), as this results in quadratic time complexity w.r.t. to the maximal subgroup nesting level. Instead, simply defer the updating of the group's offset until *after* translating the child layers, so that their original area isn't clipped by the parent, while their new area is still properly updated even if the parent's size changes. User interface: - Many mnemonics added in various dialogs. - Add a gimp-rotate-image-arbitrary action, and a corresponding "Image -> Transform -> Arbitrary Rotation..." menu entry, which activates the rotate tool in image mode (similarly to the corresponding action for layers). - On Windows, minimized GIMP window is now deiconified when GIMP is run again (clicking its shortcut or otherwise). Preferences: - New "Swap compression" option: explicit control over the tile-swap compression algorithm in GEGL. "Best performance" is used by default, "Balanced", "Best compression", and "None" (disables compression) are available. Devel docs: - Update the libgimpconfig and libgimpbase docs. - Update docs with missing symbols and types. - New docs for structs and enums. Installers: - Install 64-bit Python on 64-bit Windows (until now, the installer used to install 32-bit Python for all architectures). - Windows installer now supports per-user install. Debugging: - New mnemonic-clashes tool to help looking for mnemonic clashes. Translations: - Basque, Brazilian Portuguese, British English, Catalan, Chinese (Taiwan), Croatian, Danish, Dutch, French, German, Greek, Hungarian, Icelandic, Indonesian, Italian, Latvian, Polish, Russian, Slovenian, Spanish, Swedish, Turkish. Bugfixes: - #3630, #3226, #3610, #1725, #3093, #3599, #3597, #3082, #3553, #3435, #3503, #3532, #3164, #3560, #3500, #3493, #3514, #3512, #2685, #3641, #1002, #360, #3263, #2221, #3893, #2708, #3100, #2873, #3655, #2206, #3341, #3718, #3763, #3112, #3723, #4049, #4068, #3663, #4119, #4008, #2837, #3994, #3990, #1283, #2561 Code contributors: Alexandre Prokoudine, Ell, Federico Mena Quintero, Jehan, Jernej Simončič, Lionel, Massimo Valentini, Michael Natterer, Michael Schumacher, Oleksii Samorukov, Sabri Ünal, Sergio Jiménez Herena, Thomas Manni, lillolollo, sarah, woob, Øyvind Kolås. Translators: Alan Mortensen, Alexandre Prokoudine, Anders Jonsson, Andika Triwidada, Asier Sarasua Garmendia, Balázs Meskó, Balázs Úr, Bruce Cowan, Claude Paroz, Daniel Mustieles García, Dimitris Spingos, Emin Tufan Çetin, Hannie Dumoleyn, Jordi Mas, Julia Dronova, Julien Hardelin, Marco Ciampa, Martin Srebotnjak, Milo Ivir, pesder, Piotr Drąg, Rafael Fontenelle, Rodrigo Lledó Milanca, Rūdolfs Mazurs, Sabri Ünal, Sveinn í Felli, Tim Sabsch, Zander Brown. Overview of Changes from GIMP 2.10.10 to GIMP 2.10.12 ===================================================== Core: - Add an "Incremental" option to the Dodge/Burn tool, which, similarly to the Paintbrush, Pencil, and Eraser tools, applies the effect incrementally as the pointer moves. - Curves now have a concept of smooth vs corner points: smooth points produce a smooth curve, while corner points produce a sharp curve (previously, all points were smooth). - Search the user font directory path on Windows (since Windows 10, non-admin users have the ability to install fonts). This is only a temporary hack until fontconfig adds proper upstream support: https://gitlab.freedesktop.org/fontconfig/fontconfig/issues/144 - In gimp_brush_core_get_paint_buffer(), when allocating a new paint buffer, clear the old buffer *before* allocating the new one, to reduce the amount of simultaneously allocated memory. - In GimpPaintbrush, avoid refilling the paint buffer at each dab if the paint color/pixmap hasn't changed, hence allowing faster painting in some specific cases. - Add hygon cpu detection and enable MMX/SSE support. - Add a GimpSymmetry::get_transform() virtual function and a corresponding gimp_symmetry_get_transform() function which return the brush transform corresponding to a given symmetry stroke in terms of the rotation angle and reflection flag (in contrast to gimp_symmetry_get_operation() which returns the same transforation in terms of a GeglNode). This allows us to simplify, fix (artifact bugs, etc.), and improve the painting-code performance for several symmetry painting cases. - New gimp-brush-pipe-spacing parasite set by core code to preserve GIH brush's spacing across reloads. - Add a new Offset filter tool, as a front-end to gimp:offset. The tool replaces, and provides the same interface as the drawable- offset dialog while also providing live preview and on-canvas interaction. Plug-ins: - Exported profile and data format strategy updated in several file plug-ins. * When not saving a profile, we always export as sRGB data, as most viewers would not display the image properly otherwise. * When saving a profile: * If a profile was manually assigned, we always export to the assigned format, hence pixel data is converted accordingly, whatever the work format. * If no profile was assigned: * If the export format support high-bit depth, we export the work format as-is. * If the export format is 8-bit max, we convert the work format to sRGB, except if the work format is 8-bit linear. The following plug-ins were updated: JPEG, PNG, TIFF and WebP. - TIFF plug-in now supports layer export. - Add accelerator on "Save color _profile" item in JPEG export so that all items in the dialog have keyboard accelerators. - Add a "Save color profile" checkbox in WebP export and remove the "Advanced Options" expander (all metadata and profile writing options are now directly visible). - Process cases of non-conformant TIFF file with extra channels while ExtraSamples is not set by assuming the first extra channel is a non-premultiplied alpha channel and outputting a warning. In the future, this should be updated further by a dialog asking what to do with the non-defined dialog (consider as premultiplied or non-premultiplied alpha channel, or just save as extra channels). Tools: - Add input/output spin-buttons to the Curves tool, which allow setting the selected point's coordinates numerically. When the image precision is greater than 8-bpc, use a 0.00-100.00 range for the point-coordinate spin-buttons instead of a 0-255 range. - In the Curves tool, allow changing the curve's point types (cf. new curve corner points in Core section). Corner points are displayed with a diamond shape instead of a circle. - Free Select tool now creates a selection as soon as the polygon is closed. This selection is updated when the polygon, or the relevant tool-options, change, similarly to GimpRectangleSelectTool. - Derive GimpEraser from GimpPaintbrush, instead of directly from GimpBrushCore. This allows GimpEraser to reuse the paint-buffer content across dabs, improving performance. - Allow moving an intersecting pair of guides with the Move tool. User interface: - In GimpCurveView, when dragging an existing curve point, don't immediately move the point to the cursor position upon button press, but rather move it relative to its current position as the cursor moves. This allows selecting a point without moving it, and adjusting its position more easily. - when the cursor hovers above a point in GimpCurveView, or when dragging a point, have the coordinate indicator show the point's position, rather than the cursor's. - In GimpCurveView, when holding down Ctrl while adding/dragging a point, snap the y-coordinate to the original curve (at the start of the drag). This is particularly useful for adding points along the curve. - In GimpDashboard, don't show legend for groups with no meter. - Add a tile-alloc-total variable to the dashboard's memory and misc groups, showing the total amount of memory used by the tile allocator. - Add a "Save Keyboard Shortcuts Now" button to the Configure Keyboard Shortcuts dialog. Installers: - Windows: enable InnoSetup "unofficial" translations. Otherwise we had a bunch of wasted work from our translators of several languages whose translations were never used in the installer. Translations: - 12 translations were updated: Catalan, Chinese, French, German, Hungarian, Indonesian, Italian, Polish, Russian, Spanish, Swedish and Turkish. 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.