Artist Tom Lechner presented
his application Laidout at Libre Graphics
Meeting 2010 in Brussels, garnering widespread praise from the attendees
for its technical abilities. Video of the presentation is online,
but for a closer look you can download the code yourself and try it out.
The application offers an eclectic mix of tools — many with no other
open source competition — for manipulating images and documents destined for printing.
It's more like an imposition?
The initial goal of Laidout was to serve as an open source tool for impositioning; that is, laying out a document that was designed on a per-page basis (as all word processors and essentially all desktop publishers do) with full control over how the individual pages are arranged and aligned on the physical paper.
With an application like Scribus, if you wish to print (for example) a booklet on letter-sized paper folded in half, you must manually figure out which pages go back-to-back and arrange them in Scribus so that the final result, when printed, folds into the correct order front-to-back. An impositioning tool performs that step for you, and recalculates if you add or remove pages. More complicated procedures, such as printing on large stock, folding, and cutting, are also part of the process.
Professional print shops often handle impositioning themselves, which for large runs enables them to minimize paper usage and other costs. But Lechner illustrates and prints his own cartoon books, so he wanted full control over the process.
GPLv2-licensed source code and Debian packages are available through Laidout.org. The latest release is 0.9, from February of 2010. There are no peculiar dependencies; lower-level image-processing libraries such as imlib2 and libpng, modern FreeType and CUPS packages, and other standard libraries are all that are required. Laidout's GUI is coded directly in a widget toolkit of Lechner's own design called Laxkit, which is graphically reminiscent of Xlib but should run without issue on any desktop Linux distribution.
Laidout features a few object manipulation tools, but does not sport a full vector editing environment like Inkscape or text tools like Scribus. Instead, it focuses on importing a variety of document types, allowing the user to rearrange and manipulate them, and export the results. PDF 1.4, EPS, SVG, and several other common formats (including native Scribus documents) are supported as both input and output.
Some of the file formats offer only partial support, but Laidout does
its best to preserve data that it does not understand (labeling it "mystery
Scribus receives the most attention; the newest release even supports
impositioning documents that use Scribus's advanced "render frames"
feature. Render frames
allow Scribus documents to embed calls to TeX, MathML, or other external
content renderers. Lechner also provides a Python script that uses Laidout to
imposition a Scribus document that is, by default, set for impositioning a
letter-sized document for printing on tabloid-sized paper stock.
In the basic workflow to make a booklet, the user would first create a new document in Laidout, specifying the paper size, orientation, and choosing the "booklet" impositioning style. The user could then import a multi-page document created in Scribus (or another supported application), and rearrange the resulting paper layout in Laidout's Spread Editor. For linear book content, of course, there is probably only one correct order, but for artistic creations, the ability to move the pages around at will is a nice feature. Laidout can print the resulting compound document directly via lp, or save to any of the supported output file formats.
Laidout employs a separate mode for the loosely related task of tiling large images, allowing the user to divide up a image for printing on multiple sheets of paper which can be individually and arbitrarily arranged.
Another feature takes page layout into an entirely new dimension, "Net Impositions," which automatically remap images onto non-rectangular paper — specifically, unwrapped 3-D polyhedra. Lechner added this feature in order to easily print 360-degree panoramic photos onto paper in a format that could be cut out and folded into a three-dimensional shape for viewing. He has several examples of the technique on his Flickr photo stream. The polyhedron used as the surface is defined in a separate file (described on the web site), and can be "unwrapped" into a 2-D paper in any manner.
In addition to its layout capabilities, Lechner is continually adding new image editing tools to Laidout. The latest release adds vector-based path editing, which he admits is noticeably less full-featured than that of a primary vector editor. Text tools and other staples are on the roadmap.
There are several gems to be found in the current palette of tools, however, including some features not found in other open source applications. The gradient editor is remarkably intuitive, allowing in-place linear and radial gradient editing and arbitrary rearrangement of gradient stops, while retaining an easy-to-understand interface. Similarly, all images can be scaled, rotated, and sheared at will, around arbitrary points, and the actual pages on which the layout takes place can be rotated as well.
An interesting addition to the toolbox is the "ColorPatch" editor, which can create and edit two-dimensional gradient fields. As with other gradients, all of the control points can be edited in-place, but what really makes the tool interesting is the ability to subdivide the gradient object, adding as many rows or columns of control points as desired. Inkscape has added the same basic functionality (called "gradient meshes"), but Laidout's controls are easier to work with.
If gradient meshes don't seem interesting on their own, however, the "ImagePatch" might. It uses the same underlying components as the ColorPatch editor, but allows the user to distort and manipulate imported raster images. Again, the basic controls for distorting the corners, edges, and midpoint are made considerably more powerful by the ability to subdivide the image with additional sets of control points. Lechner observes on the site how useful this feature would be in a full raster editor like GIMP, which is undeniable.
As much fun as Laidout is, it is not nearly as stable as the big
graphics projects, and requires a lot of learning. The latter, primarily, is because Lechner develops it for his own personal use, and adapts it as his needs change. He describes it as "rough and experimental" but adds "I'm endeavoring to change that, but there are only so many hours in the day!" He said that Laidout has only been downloaded around 3000 times so far, and that although he has gotten little feedback, he hopes to build the application into something useful for others in the cartoon and zine world.
Another factor that contributes to Laidout's learning curve is that the interface uses Laxkit instead of a familiar GUI toolkit like GKT+ or Qt. It differs in appearance, but also incorporates different behavior in the windows and tools, such as right-clicking in the "gutter" between window panes to bring up a context menu. This is not to say that the differences are bad, per se, but they are different. Rather than a standard color selector widget, for example, you can change the selected foreground color by clicking and dragging the mouse inside the color box: a left-click alters the red channel, a middle-click the green, and a right-click the blue. It sounds strange at first, but once you get the hang of it, it's easy to do.
Lechner said he initially decided to build his own toolkit for the challenge of it, because he could not keep up with the changing dependencies of the existing toolkits, and because the existing toolkits did not offer the flexibility in controls that he wanted. Coding Laxkit took more time than he originally estimated, but it does allow him to change the APIs at will without hurting hundreds of other developers. He is currently working on adding XInput2's multi-device and multi-touch gesture support.
Growing from a single-developer project into a tool with a wider user
(and developer) base is a challenge for any application. The response to
Lechner's Laidout talk at LGM indicates that there is great interest in
what the program does. A few other open source applications have attempted
impositioning support in the past (such as the PDF editor PoDoFo and the possibly
but it is still missing from the major desktop publishing utilities, which
several of the artists and publishers at LGM commented on. The other
features, including mapping spherical panoramas onto arbitrary polyhedra — well — they're just cool.
With any luck, the exposure at LGM will attract new developers to Laidout, either to work on project management tasks like bug reporting and documentation, or important pieces of the feature roadmap like text support, but without losing that singular, mad-scientist-like feel that makes it so much fun to play around with.
Comments (2 posted)
Too bad that this means a huge blow for Free Software, as we're
only accelerating Windows and therefore showing people how much
better everything runs on that proprietary system compared to the
ugly sucky Linux stuff. I still dream of a world where we advocate
open software, but either it's far in the future or it has passed
-- SeaMonkey developer Robert Kaiser
Comments (7 posted)
For all of you who have been wondering how to migrate all your shiny new
Python 3 code to version 2.x: the "3to2" tool is now available in a
stable release. It's written in Python 3, but a Python 2 version
can be had simply by feeding it to itself. It might be useful to
developers who wish to work in the newer version of the language, but who
want to support users with a 2.x version.
Full Story (comments: 1)
The FFmpeg 0.6
is out. "It is codenamed 'Works with HTML5' as the
special focus on this release were a lot of improvements that are relevant
for HTML5 video. The H.264 and Theora decoders are now significantly faster
and the Vorbis decoder has seen important updates. This release supports
Google's newly released libvpx library for the VP8 codec and the Matroska
demuxer was extended to support to WebM container.
(Thanks to Martin Jeppesen).
Comments (none posted)
Version 0.48 of the monotone source code management system is out. "This release comes with dozens of bug fixes - a fall-out of joint
efforts during a bug hunt fest earlier this year - and some interesting
new features, such as an improved changelog editing view and new
database management features.
" See the NEWS file
Full Story (comments: 1)
The Parrot team has announced the release of Parrot 2.5.0 "Cheops". The
announcement (click below) includes a list of changes in this release.
Full Story (comments: none)
The 1.0 release of SyncEvolution - a tool for synchronizing personal
information between applications and devices - is out. "0.1 was
released over four years ago. It has always bee part of the long-term
vision to bring 'personal SyncML' to desktops. Thanks to the Synthesis
engine and Intel's support for the project, this goal has been reached and
this release really deserves the magic 1.0 label.
" New features in
this release include better Bluetooth support and the ability to run it as
a "rudimentary" SyncML server.
Full Story (comments: none)
The Wine 1.2-rc3
release is out, and the full 1.2 release is getting closer. This version
of Wine is said to run a lot more applications than 1.0; however, the Wine
developers would like to see a lot of testing to ensure that they don't
break anything. Now would be a good time for Wine users to try out this
release candidate and make sure it does everything they need it to do.
Comments (none posted)
Version 220.127.116.111 of the X.org server (otherwise known as the first 1.9
release candidate) is available. "While
not including huge amounts of new functionality, this release has seen a
number of longstanding development itches cleaned up with the goal of
making the code cleaner and easier to understand.
Full Story (comments: none)
Newsletters and articles
Comments (none posted)
on the KDE PIM (Personal Information Manager) project's demonstration of mobile versions of its applications at LinuxTag. "The current work on KDE PIM Mobile applications will be largely portable to MeeGo based devices in the future. The current choice of targetting Maemo, however, means that the applications can be used on devices which are available in shops today. The top UI layer of the applications will likely need to be customised on a per-device basis because of differences in screen size, orientation, DPI and other factors, but the portability built into the platform itself means that future ports of the applications to new devices
will not take as long as the initial development time.
Comments (4 posted)
X hacker Peter Hutterer looks
at the state of touchpad feature support in X.
"Two-finger scrolling is the basic multi-touch feature that the driver provides. If two fingers are detected on the touchpad (you will need the hardware capabilities to do so), vertical and horizontal two-finger movements are converted into scrolling events. Provided the scroll methods are activated of course. The GNOME GUI allows for either edge or two-finger scrolling, the driver could provide both simultaneously.
Now, the interesting thing about two-finger scrolling is that it is usable on touchpads that only support single-fingers as well - through the two-finger emulation. If enabled, the driver tries to guess based on the width of the finger whether it is a single or dual-finger input and then trigger the required bits.
Comments (none posted)
Here's an article on
about the new OpenVBX
is not the first open-source telephony offering. Asterisk and Freeswitch
are the most well known, but require a certain level of sophistication in
order to be deployed inside corporations. Implementing OpenVBX is simple
and yields the one thing users want most: a voice mail box that also
forwards calls to different numbers.
Comments (6 posted)
Google software engineer John Koleszar looks
at VP8 development. "For those of you eager to get involved, one
piece of low-hanging fruit is writing a SIMD version of the ARNR temporal
filtering code. Also, much of the assembly code only makes use of the SSE2
instruction set, and there surely are newer extensions that could be made
use of. There are also redundant code removal and other general cleanup to
be done; (Yaowu Xu has submitted some changes for these). At a higher
level, someone can explore some alternative motion search strategies in the
encoder. Eventually the motion search can be decoupled entirely to allow
motion fields to be calculated elsewhere (for example, on a graphics
Comments (24 posted)
Page editor: Jonathan Corbet
Next page: Announcements>>