GIMP 2.6 is an important release from a development point of view. It features changes to the user interface addressing some often received complaints, and a tentative integration of GEGL, the graph based image processing library that will eventually bring high bit-depth and non-destructive editing to GIMP.
The toolbox menubar has been removed and merged with the image window menubar. To be able to do this a window called the empty image window has been introduced. It hosts the menubar and keeps the application instance alive when no images are opened. It also acts as a drag and drop target. When opening the first image the empty image window is transformed into a normal image window, and when closing the last image, that window becomes the empty image window.
With the empty image window acting as a natural main window, the default window hints for the Toolbox and Docks have been changed to Utility window. This enables window managers to do a much better job of managing the GIMP windows, including omitting the Toolbox and Docks from the taskbar and ensuring that the Toolbox and Docks always are above image windows.
It is now possible to pan beyond the image border, making image window navigation much less constrained. It is no longer a problem to use the edge of a brush on the edge of an image while being zoomed in, and one can adapt the canvas to any utility windows covering parts of the image window.
The freehand select tool has been enhanced to support polygonal selections. It also allows mixing free hand segments with polygonal segments, editing of existing segments, applying angle-constraints to segments, and of course the normal selection tool operations like add and subtract. Altoghether this ends up making the Free Select Tool a very versatile, powerful and easy-to-use selection tool.
Brush dynamics let you map different brush parameters, commonly at least size and opacity, to one or more of three input dynamics: pressure, velocity and random. Velocity and random are usable with a mouse. The Ink tool, that supported velocity before, has been overhauled and now handles velocity-dependent painting much better.
Brush dynamics have enabled a new feature in stroking paths. There is now a check box under the “paint tool” option, for emulating brush dynamics if you stroke using a paint tool. What this means is that when your stroke is being painted by GIMP, it tells the brush that its pressure and velocity are varying along the length of the stroke. Pressure starts with zero, ramps up to full pressure and then ramps down again to no pressure. Velocity starts from zero and ramps up to full speed by the end of the stroke.
Important progress towards high bit-depth and non-destructive editing in GIMP has been made. Most color operations in GIMP are now ported to the powerful graph based image processing framework GEGL, meaning that the internal processing is being done in 32bit floating point linear light RGBA. By default the legacy 8bit code paths are still used, but a curious user can turn on the use of GEGL for the color operations with Colors / Use GEGL.
In addition to porting color operations to GEGL, an experimental GEGL Operation tool has been added, found in the Tools menu. It enables applying GEGL operations to an image and it gives on-canvas previews of the results. The screenshot to the right shows this for a Gaussian Blur.
There are new things for a plug-in developer to enjoy as well. For example, procedures can now give a detailed error description in case of an error, and the error can be propagated to the user.
GIMP 2.6 also further enhances its scripting abilities. In particular there is now a much richer API for the creation and manipulation of text layers. Here is a list of new symbols in GIMP 2.6.
Script-Fu has undergone some clean up and includes several bug fixes. One important bug fix, for bug #508020, prevents a possible crash of Script-Fu. A side effect of the fix will break any script which does not provide an initial value for a variable in the binding portion of a let, let*, or letrec block.
An initial value for a variable is required as stated in the R5RS Scheme standard document. The initial value can be provided as a simple constant, or as the result of a function call. The following examples will illustrate the problem and show a simple change that will fix a broken script.
This example shows a let* block with incorrect syntax that will no longer work in Script-Fu.
(let* ( (four (+ 2 2)) (this-is-wrong) )
This example shows a let* block with the correct syntax.
(let* ( (four (+ 2 2)) (this-is-correct 0) )
For the interested, here is roughly what is planned for GIMP 2.8, the next stable release: