New Features in Glyphs 2.1

We are happy to announce the first major update to Glyphs 2!

We like to call it the You wanted it, you got it update. That is because, apart from the usual fixes and performance enhancements, the 2.1 update contains a load of improvements requested by you, the users.

Let me show you some of them.

Bounding Box Scaling

You wanted it, you got it. Turn on View > Show Bounding Box (Cmd-Opt-Shift-B), select something in Edit View, and Glyphs will display a bounding box for your selection with little white control handles. Drag the handles to quickly scale the selection into a new size. Hold down Shift for proportional scaling. Bounding box scaling works with complete and partial contours, with components, and with placed images.

Click-Align Nodes

You wanted it, you got it. The buttons in the Transformations palette now align individual nodes if no path is selected completely. So, in the rare cases where Paths > Align Selection (Cmd-Shift-A) picks the wrong axis, you can take control with the Transformations buttons.

Preview Panel

You wanted it, you got it. A separate Preview window, which you can drag to a second display. Access it through Window > Preview Panel, pick an instance in the bottom left, and you are ready to go:

It works very much like the Preview area of the Edit View. The title bar and the controls fade out once you move your mouse away, so you can concentrate on the content.

Speaking of Preview, the Preview display now uses the custom parameters winAscent and winDescent for vertical placement. So if you are unhappy about how that descender is clipped in the Preview, you can take the matter in your own hands with these parameters in File > Font Info > Masters (Cmd-I).

Good News for the Font View Sidebar

You wanted it, you got it. When working in the Font tab, you can now add your own entries to the Categories and Languages in the sidebar. This requires fiddling in a text editor, so we wrote a detailed tutorial about custom sidebar entries for you. Speaking of which, we added a new Miscellaneous folder containing Music and Braille to the Languages section of the sidebar.

And by the way, you can also organize your list filters and smart filters in folders now. To do that, simply pick Add Folders from the gear menu in the lower left corner of Font View:

New Guideline Tricks

We added locking of guidelines with 2.0. In 2.1, you now can lock multiple selected guidelines via their context menu. While we’re at it: Select any two nodes, then bring up the context menu and pick Add Guideline. The guide will be placed in such a way that it goes through the selected nodes, with the precise angle necessary to achieve this. Very useful for replicating the slant of a path segment:

Master Compatibility Just Got Easier

Glyphs has a great compatibility preview via View > Show Master Compatibility (Ctrl-Opt-Cmd-N). But if you have many paths or components, as it can easily happen in Indic scripts, all those lines and colors can get pretty confusing. And let’s admit it: If the automatic reordering through Paths > Correct Path Direction for All Layers (Cmd-Opt-Shift-R) did not work, getting all objects into the right order by cutting and pasting was frustrating at times. Well, no more! Because Glyphs 2.1 ships with a new standard plugin, Filter > Fix Compatibility.

Every column represents a master, every line an object, be it a path or a component. Paths are shown in dark blue, components are displayed in a rust color. Bracket Layers get their own column. Now, all you have to do, is drag all objects into the correct line, and press the Fix button. It’s that easy.

Better Kerning

The grey Info Box (cmd-Shift-I) now also displays the kerning group setting of the previous glyph. No more arrowing back and forth just to check on that group kerning lock!

When it comes to kerning, some major improvements have happened under the hood. We improved the way the kern feature code is derived from your kern pairs. If you do not know what this means, you never had the pleasure of dealing with a subtable overflow, lucky you.

But if you are not that lucky, you will be pleased to hear that Glyphs now has the most efficient mechanism in the industry for building the kern feature. This means that Glyphs can handle many more kerning exceptions than before, that the interpolation of kerning will work much better, and that the resulting GPOS table is smaller. Which is good news for webfonts.

Image Transformations

Ever placed a scan in a glyph, just to notice that it didn’t lay completely straight in the scanner? Well now, you can rotate it into the position you need. Once you select an image, you will see a new field in the grey Info Box (Cmd-Shift-I).

And by the way, you can also use the new bounding box or the Transformations palette for adjusting a placed image.

Working with Components

There are new and improved warning badges for missing components and bad component references. A bad reference is a component that refers to itself as base glyph:

In further news, the Glyph > Add Component dialog now remembers the most recent search string. And the display of a component selections is improved a bit. Selected components now appear slightly darker than they used to, making it easier to spot them, especially when you have a light selection color.

New Features for the Annotation Tool

The Annotation tool (A) has been improved in two ways. Firstly, you can now select all annotations in the active glyph through Edit > Select All (Cmd-A). So now, it is a snap to quickly delete all annotations: Press Cmd-A, and hit Backspace, done.

Secondly, you can now move selected annotations with the cursor keys. Hold down the Shift key for increments of 10 units, or the Cmd key for increments of 100 units.

New Features for Features

In Edit View, when a feature is selected, the feature selector pop-up is highlighted in blue. This way it is much easier to see if features are selected or not.

And there are new custom parameters for instances. Their main purpose is to facilitate subsetting for fonts that have manual feature code. This will make webfont production so much more fun:

  • Remove Classes: Deletes the selected OpenType classes for this instance.
  • Replace Class: Replaces the content of a class. Its value starts with the OpenType class name, followed by a semicolon, followed by the whitespace-separated listing of glyph names, e.g.:
    AllGlyphs; a b c d e f g h i j k l m n o p q r s t u v w x y z
  • Replace Feature: Replaces the content of an OpenType feature. Its value starts with the four-letter feature tag, followed by a semicolon, followed by the new feature code, e.g.:
    calt; sub f' [b f h i j k kcommaaccent l lacute lcommaaccent lslash thorn] by f.short;

Language Support

Thanks to your input, we were able to improve the built-in glyph database. For instance, we could add a range of new default compositions for Arabic compounds, and improve many others. Also, a handful of glyph names were changed for better compatibility with the FDK feature code. We also added basic support for Gurmukhi, and improved the automatic generation of OpenType classes for Devanagari. Oh, and Hebrew mark positioning now works again as expected.

Glyphs 2.1 has better support for CJK. Firstly, Japanese character mapping improved a lot. And secondly, glyphs are now also exported, even if they are not present in the ROS.

There are even a few improvements to the Latin glyph data. We added new default anchors and default marks to Latin base glyphs. And the default composition of oslash was improved: It now takes slashlongcomb as the diagonal bar, connected through the center and _center anchors.

Likewise, use for the uppercase Oslash. For Lslash and lslash, however, we still use slashshortcomb (and its .case variant). The reasoning behind this is that long overlays cross two stems, while short overlays cross only one stem.

The same principle applies to overlaying strokes: strokeshortcomb for the lowercase dbar, hbar, and uppercase Eth, and strokelongcomb for the uppercase Hbar. If you have used any of these overlaying marks before, you will notice that we have removed the overlay from the nice names. Makes it easier to type them.

Better TrueType Hinting

Firstly, the TrueType Instruction tool (I) performs much better than it used to. Not only is it faster, it creates proper diagonal hints, too. That should take care of any problems you may have had with diagonals.

We also improved the prep table generation, so that we can better suppress overshoots at small pixel sizes. Still, we managed to minimize path distortions by using the Freedom Vector, in case that tells you something.

And, most significantly, we now display the instructed TrueType outline, as calculated by DirectWrite. So now, you can immediately see what your instructions do with your contours in Windows:

If you do not like manual TrueType hinting, and prefer to automate it, you will like that we updated the built-in TTF Autohint to the very latest version.

Python Goodness

We are very happy to announce that Yanone has joined the Glyphs team. He has already been hard at work on the Python wrapper, as well as the Python documentation. As a result of his work, the Python interface of Glyphs now offers many more convenience methods. That means that coders will not need to resort to the PyObjC bridge anymore. Or at least, much less.

Yanone has also added many code samples to the online Python documentation. We are convinced that this will make coding much easier for budding scripters.

UFO Improvements

We improved the way Glyphs handles Unified Font Objects. Better import and export, improved stability. In particular, we significantly improved conversion of lib data between the .glyphs and .ufo formats. Lib data conversion is now round-trip compatible. If you go back and forth a lot between RoboFont and Glyphs, you will be pleased to hear that we synced handling of extra UFO layers, especially background layers, with how RoboFont does it.

Smart Components

I saved some of the best goodies for last: Smart Components can do a few more nice tricks!

For one thing, it is now possible to extrapolate Smart Components. While the sliders in the Smart Component settings only go as far as the Property Limits take them, you can set the number value to something a value outside the interpolation range. Up and down arrows work as expected, also in combination with the Shift key, which gives you increments of 10.

Here is one for the geeks amongst you: Smart Glyphs can now use all layers from all masters. That means that now you can add Weight and Width properties to your Smart Glyphs, and interpolate simply with different Smart Component settings in the Light, Bold, Condensed, and Extended masters. Cool!

Also, we significantly improved the handling of nested Smart Components. And if you set the values for Smart Components via Python, the display update now is much snappier.

Many more small details

Many bugs have been squished, and the overall stability has improved significantly. But there are many little improvements you will notice in your workflow. To name just a few:

Pay attention, for example, to how the Reconnect Nodes function does a better job now: It creates fewer nodes in overlaps, and manages to create a proper single corner if it reconnects two straight segments. It can even build a clean segment without superfluous nodes if the two segments are collinear, i.e., completely aligned with each other.

Or look how the Preview area now respects Bracket Layers. And how Bracket and Brace Layers show a proper mark cloud when an anchor is selected.

Spanish-speaking users will appreciate an updated and improved translation, which was provided by Txus Marcano.

Single-master files display no Masters button in the toolbar anymore. That means less confusion for first-time users.

One final word of caution: Should you use version control with your .glyphs files, do not be alarmed by a whole bunch of changes that the new version causes. In the file, we store negative numbers without quotes now. That will make parsing significantly easier for third parties. But, yeah, you will gulp once when you see the first change log after the update.