LWN.net Logo

Birdfont

By Nathan Willis
September 11, 2013

For many years, FontForge has been the only option for editing or designing fonts with free software. But FontForge can be an intimidating tool with a difficult learning curve, and over the years it had begun to get long in the tooth, with little regular attention from active developers. The development situation has improved significantly of late, but those who need a quick and easy-to-learn open source font editor now have another option in Birdfont.

It's a draw

Birdfont is the work of Johan Mattsson, who announced the project in December 2012 on the CREATE mailing list, and has subsequently made a steady series of small releases. The latest is version 0.28, from August 2013. Birdfont is written in Vala, which is a language often closely associated with GNOME, but in addition to running on Linux, builds are provided for Mac OS X, Windows, and OpenBSD. Birdfont's feature set is limited in scope (at least when compared to FontForge or proprietary editors); it initially supported creating only TrueType fonts, although support for Embedded OpenType (EOT) and SVG fonts has since followed. Similarly, the initial emphasis was placed on providing a good drawing canvas, while support for features like kerning has developed slowly.

[Birdfont's font view]

Nevertheless, the emphasis on a good canvas for editing glyphs does pay off: Birdfont's glyph editor is considerably easier to get started with than FontForge's—particularly for people who come from Inkscape, Illustrator, or other non-font-specific editing tools. The drawing area and the tools look modern, are rendered smoothly, and behave more like the components of a standard drawing application.

To give a few examples, Birdfont's coordinate grid is set of light-colored background lines, vector curves are always rendered as black-on-white lines, and those curves have easily-distinguished control points which one can grab with the mouse. In contrast, FontForge does not show a coordinate grid at all (just numeric coordinates in the toolbar), background guide lines and vectors are the same color, and control points are rendered in several different shapes and colors depending on what variety of curve and point they correspond to. The upshot is that it is easy to pick up Birdfont and just start "sketching" ideas. FontForge is pickier about how its drawing tools operate, which lends itself to a different workflow.

Of course, there are reasons—even, one would have to agree, good reasons—for many of the choices FontForge makes in these areas. But they do make the application harder to use for newcomers. Birdfont may yet have to implement user interface changes if it continues to add features, though, at which point maintaining simplicity will become a greater challenge. For example, it currently supports only one drawing layer, which looks very uncluttered. With multiple layers, the UI must distinguish which layer is active, such as by adding a layers panel or rendering inactive layers in a different color—either way, adding more clutter to the interface.

But there are also plenty of niceties than even the most die-hard FontForge fan would appreciate. For instance, font formats disagree about whether the outermost contour of a glyph should be oriented clockwise or counterclockwise (TrueType says clockwise, PostScript and OpenType CFF say counterclockwise). Of course, a glyph's contour is a closed curve, but the orientation tells the renderer in which order the points on that curve will be listed, which is helpful for less powerful renderers. FontForge makes the orientation of every contour an explicit property, and if it is incorrect with respect to the standard of the font exported, then the glyph is rendered wrong; Birdfont does not make contour orientation a property at all, and simply fills in the shape regardless of how it was drawn.

On the other hand, there are a number of usability quirks in Birdfont's editor that may be difficult to get used to. There are multiple unlabeled tool buttons with ambiguous icons (so that one must hover the mouse over them to see the help text appear). The contrast on the toolbar buttons is low, which can make it hard to tell which one is selected. Some of the buttons also revert to their previous state after one usage, while others persist. This can be tricky to keep track of mentally, especially when the low contrast makes them harder to see.

[Editing in Birdfont]

In addition, some of the tools do not behave in entirely obvious ways. For instance, when the "pencil" tool is selected, one can left-click to move or manipulate existing points on a drawing—but must right-click to add new points on a new curve, or double-left-click to add new points to an existing curve. Moving existing points seems more like it should be the job of the "move" tool, but the "move" tool is used to move, rotate, or resize whole paths. Separating the point tools from the path tools is a good way to prevent editing accidents like deleting a shape when you meant to delete a single point; Inkscape does the same thing, while FontForge does not offer such protection. In addition, the Birdfont "move" tool's on-canvas rotate-and-resize functionality is about as nice as they come, but, nevertheless, this behavior can be quite difficult to discover in the current interface.

At this point, there are also several unimplemented features that are shown in the UI, but cannot be used, such as the "circle" and "rectangle" tools. There are also a few peculiar controls that look like tool buttons but are not. They are in fact numeric sliders that control the grid spacing, stroke width, and background image scaling. To change any of the settings, one clicks the "button," holds it down, and moves the mouse cursor up or down. Being able to change these settings with the mouse is nice, but the tool button widget is being overloaded to do so.

Several of these quirks could be smoothed over with different widgets or tool icons, but documentation would go much further. One can only hope that it is on its way; there are a lot of details that need description (such as how and what the "Export" function actually generates), and getting up to speed with the drawing tools would be much easier with examples. Mattsson has created a few tutorial videos, which are a start, but leave a lot of uncovered ground where the newer features are concerned.

Details

Drawing characters is arguably the "fun part" of font editing, but eventually one must tackle the less glamorous tasks of letterspacing, kerning, hinting, and adding OpenType features (such as ligatures). Basic letterspacing can be done on-canvas: two vertical guides (one for the left "bearing" and one for the right) are available in the glyph view; one simply grabs them and drags them left or right to change the amount of space on either side. This is quite painless, but it is unfortunate that the exact coordinate values are not shown anywhere in the interface, and setting the left and right bearings to specific values is not supported.

Birdfont has only recently gained support for working on kerning, and the situation is similar to that of letterspacing. One can open up a kerning tab from the menu at the top, type in a few characters, then move a slider back and forth to set a kerning adjustment between any pair of adjacent letters. There is a school of thought which says that the exact numeric values for things like letterspacing and kerning are not important—after all, the sole point is to make adjustments until the result looks good to the decidedly un-scientific human eye. But in practice, not showing such values in the interface can make working on the font more difficult.

[Birdfont]

Of course, the "correct" way to do spacing adjustments is to generate a .TTF or .OTF font and put together test pages for print or for the web. On that task, too, the current version Birdfont does not disclose many details or options. Perhaps FontForge exposes too many export options (especially if one includes its detailed format-validation settings), but Birdfont is missing some key ones like selecting the glyph names and whole-font settings. Choosing "Export" from the file menu lets the user select an output directory, but not to specify what sort of output is created. As of 0.28, the export includes a .TTF font, an .EOT font, an .SVG font, and an HTML sample file; all four are generated with each export. However, I found the export to be buggy, generating empty .TTFs several times for reasons I have not yet been able to pin down.

Birdfont will save font projects in its own .bf file format, which is XML-based. I was not able to find a description of the format, but it looks more like SVG than it does the XML-based Unified Font Object (UFO) format. In an email, Mattsson said he plans to eventually move the application over to UFO, so that he does not have to maintain a file format in addition to an application.

In another format-related wrinkle, so far, creating kerning pairs from scratch is the only supported method; Birdfont will not recognize kerning tables that already exist in the file. There is a short roadmap on the project's wiki that indicates supporting is coming for some more font features, including reading existing kerning tables and ligature support.

Last word

The complaints about missing functionality and interface quirks should not be taken as criticism of the project. This is code which is still in development; it is quite natural for there to be many tasks as yet uncompleted. However, if anyone who finds FontForge daunting is interested in running Birdfont as an editor, it would be wise to take some precautions with respect to some of the missing features.

First, the undo command only undoes certain operations and is not accompanied by a redo command. Second, there is a "Preview" command available in the File menu; it seems to generate and overwrite a .TTF in the last-used directory, even though the .TTF is used only to show how the font looks in a preview window. Thus, if you have recently exported your work as a .TTF, Preview will overwrite it. Finally, while the drawing tools do not offer point-precise movements or transformations, you can at least have Birdfont display the exact grid coordinates of the mouse cursor by launching the application with birdfont --show-coordinates.

Birdfont has made remarkable strides in its short life thus far. In comparison, it is true that FontForge supports almost every font format and option under the sun (including, for example bitmapped fonts and Adobe's Multiple Master format), but for many everyday uses that is clearly overkill. For a lot of casual users, the most that they will ever want to edit a font is to open up an existing .TTF file and make a handful of small tweaks: changing an awkward character, adding a currency symbol, adding a slash to the zero, etc. For those users, Birdfont is excellent news indeed. It is easy to get started with, the drawing tools look modern and nice, and there is very little chance that they will generate output with the wrong settings.

Perhaps Birdfont will add enough features to compete with FontForge for high-end users, too, but in the meantime it is refreshing to see another take on the free software font editor, and it is nice to have an option that targets simplicity and ease of use.


(Log in to post comments)

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