LWN.net Logo

Development

A preview of GIMP 2.8

November 9, 2011

This article was contributed by Nathan Willis

The venerable GIMP image editor is nearing its next release, version 2.8, but as a decidedly "release-when-ready" project, there is no pre-determined drop date to circle on one's calendar. Judging by builds from the unstable 2.7 branch, however, the next release will have goodies to share with several different types of GIMP user: photo editors, web designers, high-end, and casual.

At the moment, the newest code is version 2.7.3, although the project's Git changelog suggests that there will be at least one more release (2.7.4) between now and a stable 2.8.0. Official development releases are made as source tarballs only, but Linux binaries are available through various third-party sites, such as GraphicAll.org or Matt Walker's personal package archive (PPA). The 2.7-series does introduce some API changes, so exercise caution when testing it out. It will "migrate" settings from ~/.gimp-2.6/ to ~/.gimp-2.7/, but third-party plug-ins in particular are not likely to work without modification. If in doubt, make backups.

Headline features

Each new release of a GUI application is expected to include at least a few immediately-usable improvements, either in the form of UI changes, or new tools and functionality. GIMP 2.8 introduces four new "big toys" in this category.

[Cage tool]

The first is the Cage tool, an entirely new image transformation tool that originated in a Google Summer of Code (GSoC) 2010 project. The cage tool allows you to draw arbitrary polyhedral outlines around part of an image, then twist and distort the image within by manipulating the corners of the outline. The effect is something like making a marionette move — with the major difference being that you can stretch and distort the marionette in addition to twisting and turning it. Drawing the right cage is critical to being able to manipulate the image the way you want; fortunately you can adjust the cage on-canvas even after you start distorting it. The tool is also a bit like the "Liquify" effect in Photoshop, in the sense that it allows smooth, "hands-on" manipulation of the image, in a manner that is far more interactive (and thus more intuitive) than traditional distort and transform tools.

The second feature is support for layer groups. As the name suggests, layer grouping allows you to nest image layers into sets, which you can then make adjustments to collectively. Although you cannot paint simultaneously into multiple layers in a layer group, you can move, transform, and hide groups, as well as change their opacity, blending mode, and other settings. GIMP 2.8 also introduces the ability to lock the pixels and alpha channels of individual layers (with "Lock" toggles on the layer dialog box) to prevent accidental changes; this feature can also be used to lock the contents of entire layer groups.

[Text editing]

On-canvas text editing is the third new feature, and it is one that has been in development since GSoC 2008. The new text editor pops up a miniature editing toolbar that hovers on the canvas over the cursor. From there, you can change font, text size, text color, and text decorations at will, just as you would in any text editor. This editing toolbar allows you to select any text in the layer and change it, so you can incorporate multiple colors and font settings in a single text layer — something that required multiple text layers (and fine layer-alignment skills to boot) in previous releases.

The final new "bullet point" feature is an optional single window editing mode, which you can toggle in and out of from the "Windows" menu. In single window mode, the tool palette and dialog dock (which usually holds the layers dialog) snap onto the sides of the image window. When you open multiple images at once, they are placed into tabs across the top of the window, with a thumbnail for each image.

[Single window]

For a long time there has been a highly-vocal subset of people who swore that GIMP was downright unusable without a single window mode. I have difficulty processing this criticism, because I have never seen anyone articulate something that works better (or is easier to do) in single window mode, or more difficult to do in floating-palette mode. It strikes me as an essentially personal preference; nevertheless, now that single window mode is available, I suppose it will make quite a few people happy. But it remains an option only; for those who find the floating palettes easier to use, the new mode will have no effect.

The fun stuff you might overlook

A second group of new features consists of those changes that either introduce new functionality or provide better usability, but are not big enough to make most lists of "flashy new improvements."

For example, there are several small UI changes that provide incremental improvements. One is an on-canvas progress meter (using a circular, stopwatch-like animation), which replaces the flat, bar-shaped progress meter at the bottom edge of the image window. It appears closer to the mouse cursor, so it is a better visual cue that GIMP is working on completing a task. There are also composition guides (such as rule-of-thirds grid lines) overlaid when you use a transformation tool; this simply helps you eyeball the transformations that you want to make. [Spladers] But the most interesting is a new widget for setting tool options. It combines a "spinbox," a text label, and a slider into a single unit (several examples are shown at left). You can adjust its value with finesse using the spinbox +/- buttons, edit it precisely with the keyboard, or drag and slide it with the cursor (which is intended to be a particular boon for tablet users). There does not appear to be a name for the new widget (I am secretly hoping for "splader"), but in the code it is implemented as a GimpSpinScale.

Working with brush dynamics (the manner in which brush tools respond to pressure-sensitive tablet usage) is also improved in the unstable GIMP builds. The GUI has been completely redesigned (a GSoC 2009 project), you can edit custom response curves for each metric, and you can change the rotation and aspect ratio of any brush. There is still not quite as much control over brush behaviors in GIMP as there is in a painting-centric application like Krita or MyPaint, but this set of changes offers a noticeable improvement of benefit to tablet users.

Two other changes are also reminiscent of the direction taken in recent Krita builds. First, you can save (and name) your customized brush dynamics presets, and switch between them quickly in the tool palette. There is a more general tool preset system as well, which allows you to save the current settings of any tool (including the foreground and background color selections) to a dock-able "Tool Presets" dialog, and access it in the future with one click. That aids in reproducing tricky settings, particularly where destructive editing is concerned and extended trial-and-error would consume too much time.

Second, a close cousin to the tool preset and brush dynamic preset functionality is the ability to assign keyword tags to resources, and to filter through them by tag. "Resources" in this sense refers to image editing components like colors, gradients, textures, or brushes. GIMP can share resources with a large number of applications (both free and proprietary), and among designers collecting them is a hobby. It is all too easy to amass a large, unwieldy collection if you work with GIMP all the time, so tagging allows you to whittle down the excess. Finally, you can export color palettes used in GIMP into a variety of forms suitable for consumption in other applications — notably CSS stylesheets, PHP or Python dictionaries, and Java color maps.

The truly under-the-hood work

A final category of improvements includes those non-interactive features and utilities that benefit you even if you do not notice them during the typical editing session.

This includes support for new file formats — GIMP 2.8 can now import and export to the OpenRaster interchange format, can import JPEG2000 files, and can export images directly to PDF. It also includes cleanup work like adding new texture brushes and clearing out old and accidentally-duplicated brushes, adding IPv6 support (which GIMP and its plug-ins use to retrieve objects from the web), and adding support for right-to-left languages in the interface. The project has also moved to GPLv3+ and LGPLv3+ (the latter for the library components of the code, naturally), a decision that may not immediately affect users, but is noteworthy for developers.

I also appreciate a few of the minor enhancements simply because they are useful to me personally. For example, GIMP can now print crop marks automatically when printing an image — the checkbox is found in the "Image Settings" tab of the Print dialog. I can see a number of projects where that will prove valuable. Another example is the ability to assign custom function mappings to arbitrary buttons on your input devices. GIMP has allowed this for graphics tablets before, but in 2.8 you can do the same thing for the spare buttons on your mouse, trackball, or jog/shuttle controller. I have been experimenting with mapping Undo and Redo to the extra buttons on my trackball; I am not yet sure if they are here to stay, or if horizontal scrolling would be more useful.

Several of the new features mentioned above are only possible because of the ongoing work to port GIMP internals to new toolkits. For example, the Cage tool is implemented entirely in GEGL operations (the next-generation image processing core being incrementally merged into the application), and the GIMP team has dictated that all new tools be written for GEGL from the ground up, a decision that will affect some work in the next development cycle. But the Cage tool also makes use of GIMP's port to Cairo as the rendering engine, replacing older GDK bits. As a result, the on-canvas controls are smoother-looking and just-translucent enough to let you see some of the pixels underneath them.

The GEGL and Cairo porting work continues, and will not end with the release of 2.8. This release adds layer scaling, layer modes, floating selections, and projection (which is GIMP terminology for compositing layers onto the canvas view) to the list of subsystems ported to GEGL. There is also new selection code, new save/export code, and new APIs for plug-in writers. Documentation (particularly for the plug-in authors) is still forthcoming, although there is activity in the Git repository.

The GIMPs of the future

Speaking of ongoing work, the last major update to the stable GIMP was 2.6.0, back in 2008. The project has made it clear in recent months that it wants to shift to a faster update cycle, and to develop new features on feature-branches to be merged back in once complete — changes which are no simple task given the size of the code base and the small development team. The project's pace has always been a popular target for detractors, but it seems to have staked out a definitive roadmap that covers the completion of long-standing major tasks (such as rewriting the internals to use GEGL) and ongoing feature development.

According to Alexandre Prokoudine at Libre Graphics World, the plan is still to release 2.8 by the end of 2011, a decision that forced the team to delay one or two key features that had previously been slated for the 2.8 release. The next major milestone is now expected to be 2.10, which will integrate the last of the still-unadopted GSoC work: a Warp tool, Seamless Clone tool, a new widget for changing image and layer sizes, functional masks for layer groups, and the porting of all image filters to GEGL. It is not clear whether or not that milestone also includes GSoC work to add a GPU back-end to GEGL via the OpenCL framework or not.

The plan then calls for version 3.0, which will be a "port" of 2.10's functionality to GTK+ 3, and will finalize the transition of internal functions to GEGL buffers. That release will mark the debut of the most-requested feature in recent years, support for editing images in 16-bit-per-channel — and higher — bit depths. The roadmap does extend beyond 3.0, and includes other major enhancements like non-destructive editing, which was previewed as far back as Libre Graphics Meeting 2010, and marks the start of a new development direction — requiring new interface conventions and file formats at the very least.

There are no dates associated with any of the future milestones, but in practice they would not be too useful more than one release cycle out anyway. GIMP is developed without financial underwriting from a major distribution or other open source software company; a fact that its critics tend to overlook when lamenting floating tool palettes or other pain points. Nevertheless, it advances year after year, and the 2.8 release cycle holds a great deal of new functionality for end users. Hopefully it will not be another three years before 2.10; accelerating the development cycle would probably help draw in new users, plug-in writers, and perhaps even core developers. In the meantime, however, there is enough new in the next stable release to keep most people busy for a while.

Comments (8 posted)

Brief items

Quotes of the week

Thanks to the contribution of Michael Bauer, a volunteer who took the long-time-abandoned Scottish Gaelic translation and produced a complete UI localization in just a few months, LibreOffice 3.4.4 adds yet another native-language version, bringing the total to 105. This shows the unparalleled value of copyleft licenses for end user software, as LibreOffice is now the most-important office suite when it comes to protecting cultural heritage worldwide, especially when the number of native speakers is not sufficiently attractive for large corporations to devote localization resources to.
-- Andras Timar

PEP: 405
Title: Python 2.8 Release Schedule

Abstract
========

This document describes the development and release schedule for Python 2.8.

Release Schedule
================

The current schedule is:

- 2.8 final Never

Official pronouncement
======================

There will never be an official Python 2.8 release.

Upgrade path
============

The official upgrade path from Python 2.7 is to Python 3.

-- Barry Warsaw

Comments (none posted)

Transactional memory for GCC 4.7.0

Following a last-minute request, the "transactional memory" GCC branch has been merged into the trunk for the 4.7.0 release. Transactional memory is specified in a draft standard [PDF] for C and C++; the idea is to provide a relatively simple way for developers to execute code with atomic "all or nothing" semantics.

A transaction looks something like this:

    __transaction {
	/* Stuff done here is atomic */
    }

Anything done within the __transaction block will either be visible to other threads in its entirety or not at all. Most exits from a transaction (return, goto, or break, for example) will cause it to close normally. There is a __transaction_cancel statement that can abort (and roll back) a transaction.

There are some constraints, naturally. If changes to a specific variable are protected by a transaction in one place, all accesses to that variable must be done within transactions. Transactions can only be rolled back if they consist of exclusively "safe" statements; performing I/O is an obvious way to lose transactional semantics. Exception handling gets more complicated. All this leads to a certain amount of complexity, with developers needing to mark functions as being "safe," add Java-like declarations of exceptions that a function may raise, and so on.

Details on the specific implementation are scarce; it appears that, in the current patch set, transactions will be implemented using a global lock. GCC developers debated for a bit over whether this code was ready for merging or not. In the end, though, the possibility of being the first to support an interesting new feature seemed to win out. Current plans are to release 4.7.0 sometime around next April.

Comments (8 posted)

Firefox 8 released

The announcement of a new Firefox release on the Mozilla blog does not mention a version number anywhere, but the actual release calls itself "Firefox 8." The headline feature appears (sadly) to be a Twitter search option. Beyond that, this release disables add-ons by third-party programs and adds a "load tabs on demand" preference option along with improved performance and a number of security fixes; see the release notes for details.

Comments (87 posted)

recutils 1.4 released

Recutils is "a set of tools and libraries to access human-editable, text-based databases called recfiles. The data is stored as a sequence of records, each record containing an arbitrary number of named fields." New features in the just-announced 1.4 release include support for encryption and sorting, an improved manual, and more.

Full Story (comments: none)

Spyder v2.1 released

Spyder is an interactive development environment for the Python language; see this page for a list of features and screen shots. The 2.1 release is out; key improvements include a lot of performance work, PySide support, a new profiler plugin, and more. Details can be found in the changelog.

Full Story (comments: none)

Newsletters and articles

Development newsletters from the last week

Comments (none posted)

Trinity Project keeping 3.5 alive (KDE.News)

KDE.News looks at the 3.5.13 release from the Trinity Desktop Project. "For people who prefer the KDE 3.5-style desktop, a new version of the Trinity Desktop Environment (TDE) has been released. Trinity is a continuation of the KDE 3.5 Desktop Environment with ongoing updates and new features." The release has a new control panel for monitors, a new compositor, and a number of new applications.

Comments (37 posted)

Why GNOME refugees love Xfce (Register)

The Register has a review of XFCE. "Perhaps more important to GNOME 3 refugees, Xfce isn't planning to try 'revolutionising' the desktop experience. Development is historically very slow — the recently released Xfce 4.8 was two years in the making — and the Xfce project tends to pride itself on the lack of new features in each release. The focus is generally improving existing features, polishing rough edges and fixing bugs rather than trying to out whiz-bang the competitors."

Comments (214 posted)

Page editor: Jonathan Corbet
Next page: Announcements>>

Copyright © 2011, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds