Glyphs 3.2 released

Blog
by Rainer Erich Scheichelbauer

30 June 2023

Glyphs 3.2 has arrived. The update contains significant changes in variable font production.

We are happy to announce the release of Glyphs 3.2, fully Sonoma-ready and packed with improvements throughout the app!

Online handbook

But before we dive into details, let me mention that Glyphs member Florian Pircher has been working on a new online version of the Glyphs handbook. The online handbook will always contain the most up-to-date info. PDF versions are derived from this. As a matter of fact, you can now always have the latest version of the handbook through this PDF download link.

Variable fonts

We implemented major changes for the variable font workflow. Perhaps this is a good time to review the variable font tutorial. Most easily put, name your Roman variable font setting Regular and if you have your italics in a separate file, name its variable font setting Italic. Set up variable font family names that are different from the static ones, and you’re good. More details in the tutorial.

Glyphs now does its best to keep masked paths compatible. So now you can keep your masks and export your subtracted shapes in a variable font without flattening the outlines first:

This is huge: the Disable Masters parameter now works in a variable font setting. This means that you can do real designspace subsetting. Axes not in use after master subsetting will be disabled automatically. If some of the preset instances fall out of the subsetted designspace, add a parameter called Ignore out of bounds instances. Remaining instances will be updated accordingly. And Glyphs will warn you if you get carried away and use Disable Masters to remove all masters.

Some filters now work as custom parameters in variable font settings, provided they treat each layer equally in order to maintain compatibility. For instance, Offset Curve, Round Corner and Transformations should work now. (Please don’t ask for Roughen, ahem.) Special trick: if you use the Round Corner filter as custom parameter, you can sneak in the keyword compatible and Glyphs will attempt to round all masters in the same way:

Oh, and you can now add a number value token in the parameter value as well:

…which means that you can customize the radius per master, even though you set the parameter only once.

Strokes now work, at least most of the time, in variable font exports. At least as long as the path structure is more or less the same between masters. Compatibility may fail in edge cases. So if you keep it sane, you can now export a stroke-based variable font. Cool.

If you have been using Axis Mappings parameters, please read carefully: We had to change the way numbers are stored in the file. To be precise, we needed to reverse the internal and external numbers. If you open an old file in Glyphs 3.2, it will silently be ‘upgraded’ to the new storage format, which will break the file for older app versions. Why did we do this? To maintain compatibility with glyphsLib, read more about it in the online discussion.

However, we recommend switching to Axis Location parameters anyway. Why? They are more reliable in multiple-axis settings. Consider rereading variable font tutorial for more details if you have not already.

We very much improved the generation of the STAT table. Not only did we improve the generation (or guessing) of AxisValue names, we also fixed two STAT table issues: one where deactivated instances were still processed; and an issue specific to the Width axis, where the elidable name for the default axis position was not Regular. Now it is.

In the General section of Font Info > Exports, we have a new property for instances:

  • Variable Style Names (or short variableStyleNames): the style name of an instance used for the fvar table in a variable font export. This can be useful when homonymous static instances are put in different families and would cause duplicates in the fvar table.

Sounds difficult? OK, an example. Say your font family has a Weight and a Width axis, and you want to separate different widths into different static font families, let’s say Myfont for the normal widths and Myfont Condensed for the condensed widths. So you add a Family Names property to the condensed instances, call it Myfont Condensed. Of course, the style names of the static instances are twice Light, Regular, Medium, Semibold, Bold, Extrabold. So your variable font menu would have those style names twice as well. That is why you add a Variable Style Names property to the condensed instances, and call them Condensed Light, Condensed Regular, Condensed Medium, Condensed Semibold, Condensed Bold, Condensed Extrabold.

Further improvements include:

  • Fixed corner components in variable font export. They will work exactly the same in static and variable font exports, including width and height intermediates. See the [corner component tutorial]() for details.
  • Prevented crash with out-of-bounds brace layers in a VF export.

One important note about Variable Fonts and Adobe. OTVAR support in the 2024 versions of InDesign, Illustrator and other Adobe apps has been so buggy that we currently cannot recommend Adobe apps for using Variable Fonts. As soon as you have a slightly more complex setup, e.g., three masters on a single axis, or multiple axes, interpretation of the gvar table often fails. Until Adobe fixes their flagship apps, consider delivering static fonts only to Adobe users. If you find your font to have awkward distortions in an Adobe app, or not change at all when you pull the slider, do another test in a web browser, e.g., on ABC Dinamo’s ingenious Font Gauntlet, or a tool like Font Goggles. If it works as expected there, you have stumbled across an Adobe bug. We have been in touch with people at Adobe, and they said that bugs have been fixed already, but have not been rolled out into the live versions.

Editing

When you duplicate a shape by Option-dragging it, the shape will now snap into orthogonal constraints if you drag it close to orthogonality or if you hold down the Shift key.

Hold down the Option key while double-clicking a (blue) corner node, and the node will be turned into a (green) smooth node, but the adjacent handles will not be aligned. The same is true if you hold down Option while pressing the Return key when a node is selected. You can then proceed to Option-drag a handle to align just that handle to the opposing one.

After switching between glyphs by double clicking, the individual glyph selections are preserved now. Try it, you will love it …oh, did I mention selections? We fixed an issue with select-all cycling. When you pressed Cmd-A repeatedly, it would get stuck at one selection and not keep cycling between objects. If it did not work for you so well in version 3.1.2, give it another go. Also because we added an ‘all anchors and nothing else’ phase to the selection cycle.

Path > Align Selection (Cmd-Shift-A) will now also align anchors to each other. Aligning nodes and anchors now also works with the align buttons in the Transformations panel. Speaking of which, there was an issue with slanting in the Transformations panel (if you know, you know), which we fixed successfully.

When searching for glyphs by typing the character, the dialog will now also find unencoded alternates:

More commands are available for all masters or behave better with a larger selection. You can now right-click a path, hold down the Option key and you can now choose Reverse Selected Contours in all Masters and Expand Outline in all Masters from the context menu. And you can select all paths in a glyph, closed or open, choose Close Open Paths from the context menu and all open paths get closed. The Decompose command in the context menu, useful for unnesting components by a level, is now available for all masters if you hold down your Option key.

We improved Tidy Up Paths For All Masters a lot. For one thing, it will not break existing compatibility. And it will handle edge cases better, like duplicate nodes at the beginning of a path. Plus, you can fine-tune it with a hidden setting called GSTidyUpThreshold, which tells Glyphs how much off a point can be for it to still be considered on the same line or same coordinate. The default is 0.005, we suggest to keep it within a range of 0.03 to 0.001. Needless to say, do this only if you find Tidy Up Paths too forgiving on a regular basis. For specific cases, consider plug-ins like Clean Up Lines.

Now, locked guides are really locked cannot be deleted without unlocking them first. And deleting global guides is undoable now. Right-click a cropped image and you will now find Reset Crop in the context menu. It does exactly what it says.

A bunch of improvements for smart components: menu commands that apply to all masters now take smart layers into account. The Smart Component sidebar panel is bigger, resizable, and always shows all axes. And text fields are disabled as long as there is no property set up yet, so you don't accidentally add info to a non-existent property. Plus, you can safely use non-ASCII characters again for your smart axes.

The Glyph > Add Glyph (Cmd-Shift-G) dialog now sports improved autocompletion of glyph names, and it works again with a Pinyin keyboard. Our apologies if you have had issues with that.

A new GSClickTolerance setting controls how precise you have to be when point-clicking an object in Edit view. Set it with the mekkablue script App > Set Hidden App Preferences or run something like Glyphs.defaults["GSClickTolerance"]=5 in the Macro window.

In further news:

  • The mark cloud now works with single-letter anchors. Glyphs used to do a sanity check on the anchor name, but no more.
  • Improved the Rotate tool (shortcut R).
  • Edit > Clear now works in the Edit view, and if you hold down the Option key, Clear All Masters will work much better now.

Filters

Filter > Round Corner has many improvements now. First, you can use negative values in the dialog for rounding inside corners only. This was a trick that used to be only accessible through the custom parameter, now it is directly available in the GUI.

The action buttons of filter dialogs now contain a Copy PreFilter Parameter option:

It does the same as Copy Filter Parameter but puts a prefilter in your clipboard rather than a normal filter. Prefilters are filters applied before overlap removal.

More Filter news:

  • In the Hatch Outline filter, we fixed a case where some lines were dropped. This used to happen occasionally with particularly wide shapes. Now no more.
  • The Shape Order dialog will not force component alignment anymore.
  • Under certain circumstances, some filters would not show a preview. This is fixed now.
  • All built-in filters have undergone improvements, and will, e.g., better respect your selection now.

Spacing & Kerning

If you have a Link metrics parameter set up in Font Info, and you find yourself spacing a CPAL font with the Text tool shortcuts (Ctrl- or Cmd-arrows), the spacing of the default layer is simultaneously applied to all Color Palette layers.

Hold down the Option key when you delete a kerning pair in Window > Kerning (Cmd-Opt-K), and the same pair will be deleted in all masters at once.

You can now sync metrics for brace layers: add an ==x metrics key to the brace layer, where x is the name of the containing glyph.

What’s more:

  • In Edit view, the kerning UI (the kern indicators in the grey info panels) will now display if the adjacent letters belong to different masters.
  • Inserting pairs with the Kerning window (Cmd-Opt-K) works better now.
  • Some issues with the kerning in variable fonts, especially in RTL kerning, have been fixed.
  • The Use Extension Kerning parameter now works with a custom OpenType feature order.
  • When saving a file, Glyphs make sure to run the auto-alignment now. This will reduce the occurrences of the dreaded Changed Metrics dialog that pops up when you open a file.
  • Self-referencing metrics keys, i.e., metrics keys that point to the very glyph they are used in, are exempt from interpolation. Why would you use ==X in an X? Because that effectively disables a glyph-wide metric key in a multiple master setup.

User Interface

The search bar in Font view allows more than one word: type multiple particles with spaces in between, e.g., breve alt, and it will find all glyphs that have both breve and alt in their name:

The glyph info dialog that comes up when you choose Edit > Info for Selection now sports Next and Previous buttons (again). Comes in handy when you need to step through a bunch of glyphs and adjust their infos.

A bunch of small but cool improvements in Edit view: Thanks to your feedback, we were able to dramatically improve zooming with a pinch gesture on a trackpad. View > Nodes > Show Node Labels toggles the display of node names. The Measurement tool (shortcut L) now measures against sidebearings when there are no intersections in other glyphs:

While we were at it, we also improved the drawing of the measurement line. No more glitches or drawing artifacts, FTW. When you temporarily activate the Hand tool by holding down the space bar, you can now switch between masters and trigger other keyboard shortcuts.

You can now drag categories into a new order in the Sample Text settings. Not sure why we had not thought of that before:

In the Start Window, you can now right-click an entry to open a context menu with Show in Finder and Remove from Recent:

Many more commands and actions have been added to Glyphs > Settings > Shortcuts, including aligning shapes or things like Make Node First and path operations like Reconnect Nodes in all Masters. You can even access Transformations buttons like Scale and Reverse Scale with keyboard shortcuts now:

Window > Preview Panel now supports the same dragging input that the Preview area in Edit view does, for changing the excerpt. Also in the Window menu, you can now distinguish the Font Info window of a main window:

Localizations, anyone? There have been a lot of small improvements for French, German, Spanish, Portuguese and Chinese localizations. Big thanks to everyone who contributed to the translations!

We added a couple of hidden settings:

  • GSPreview_MoreSpaceAbove and GSPreview_MoreSpaceBelow: add extra space in the Preview area and Window > Preview Panel.
  • GSShowStrokePanel: set it to 0 to suppress the display of the Stroke panel in the sidebar.
  • GSAlwaysShowExportNotification: force the appearance of that notification windowlet after every font export, not just those that take very long.
  • GSFontViewMinIconSize and GSFontViewMaxIconSize: change the minimum and maximum sizes for glyph cells, defaults are 40 and 128.

You can either trigger them with a quick line in the Macro Window, for example:

Glyphs.defaults["GSFontViewMinIconSize"] = 20

And reset them to their defaults again by deleting them:

del Glyphs.defaults["GSFontViewMinIconSize"]

… or you run Script > mekkablue > App > Set Hidden App Settings, the new entries are already listed in the script’s interface:

More improvements:

  • Fixed an update issue in the Dimensions palette
  • Fixed the sidebar filter for glyph color not set
  • Fixed Use as Master in Layers panel
  • Fixed Master Background Color custom parameter

Microsoft compatibility

The age-old issue of mediocre OpenType support in Microsoft Office got another twist. Some time ago, we found out that Microsoft Office apps have a bug that causes them to ignore kerning if (a) there is kerning between unencoded glyphs, and (b) if the kerning is stored in anywhere other than in the first GPOS lookup. You can now force all your kerning into the first lookup by adding a custom parameter called Keep Kerning in one Lookup into File > Font Info > Font or Exports. This limitation also means that you cannot have contextual kerning or cap spacing, because those would constitute a different lookup type, which in turn would require additional lookups.

If you followed the above issues but still your kerning does not show in Office apps, try flattening your kerning into a pre-OpenType kern table (don’t confuse with the OpenType kern feature) and export your font as TTF. (That is because the kern table is ignored in OTFs, because, well, there is no such thing as a pre-OpenType OTF, duh.) Flattening means that you break down all your group kerning into glyph-to-glyph pairs. For exporting the old kern table, there is a hidden custom parameter called Export kern Table. It is hidden because it is not meant to be used in a modern OpenType font. You can do this also with the mekkablue script Kerning > Kern Flattener, which creates a disposable duplicate of your font, subsets its kerning, and adds parameters for forcing the export of a TTF with a kern table.

Needless to say, do this only for fonts that are used exclusively in Microsoft Office apps. The above are hacks that really break your font for the benefit of making them work for Word and PowerPoint users.

Feature code

The auto-generated ccmp code has many improvements, most notably for Thai, and for soft-dotted Latin letters such as i and j, with special attention to smallcaps. We also fixed some Devanagari feature code issues, and improved Runic feature code generation. All this thanks to your contributions!

The Update button in Font Info > Features will properly update classes again. Sorry for any inconveniences you had.

Glyphs will now always add languagesystem arabic to the feature code as soon as there are any Arabic glyphs in the font. (Thank you Andreu!)

More:

  • Fixed .case.narrow compositions, you can now press Ctrl-Cmd-C again without any fear.
  • Fixed Nutso2 vertical fraction code.
  • Optimized locl feature code with .loclXXXYYY glyphs assigned to multiple languages.
  • Make sure we don’t inherit the lookupflags from the previous lookup. This fixes issues with context anchors messing with following lookups, and some edge cases in ccmp.
  • Properly ignore disabled features
  • Fix interaction of manual and automatic feature code
  • Improve some details with the feature code compiler (e.g. allow language dflt required)
  • Write feature code with line breaks
  • Better error message with class names that contain spaces
  • Also apply Remove Features to mark and mkmk.
  • Make sure features are sorted alphabetically in the exported Feature Table
  • Prevent overwriting of manually code in @Uppercase class

Improved mark feature generator

Glyphs will now separate anchors into different lookups. This allows, for example, both anchors _bottom and _cedilla in cedillacomb, and you only need a cedilla anchor in the base glyphs where you need it to be different from the bottom anchor.

  • Add option to add prefix to mark context. e.g. lookupflag UseMarkFilteringSet @CombiningTopAccents;C *
  • Fix generation of context mark pos rule (the base keyword was in the wrong place)

???
The anchor context sometimes need something between the base and the anchor statement. To facilitate this, there is a new placeholder now: "&"
e.g. A * B & C will produce this code: pos A base a B <anchor 300 0> mark @mark_bottom C

  • As this has changed a lot, please test this thoroughly.

Font Info

Just between you and me, in the File > Font Info window (Cmd-I), you can switch between tabs with Cmd-1, 2, 3, 4 and 5 now.

Font type

There is a new setting in File > Font Info > Other called Font Type. It primarily determines how interpolation for static fonts works. Default means that the interpolation works like it always did, according to the Adobe MM interpolation model. Variable means that static font instances will be calculated based on coefficient deltas just like variable fonts are. Try the latter setting if you experience too much of a discrepancy between static and variable exports. Use the Default setting to stay as close as possible to legacy versions of your font project. Careful, however, because in its current implementation, it is still somewhat experimental.

Custom parameters

In the include: and exclude: extensions of Filter and PreFilter parameters, you can now add wildcards and category searches like *.ss01 or script=cyrillic.

Additional to the wildcard and category searches described above, in the subsetting parameters Remove Glyphs and Keep Glyphs, you can now use predicate tokens for defining a whole bunch of glyphs. See the Tokens tutorial for details on predicate syntax.

The CJK Grid parameters is working again for Japanese glyphs.

There is a bunch of new parameters:

  • The new Prevent Name ID parameter suppresses a name table entry with the ID that you specify as the parameter’s value.
  • Add an Export vmtx Table custom parameter for forcing or suppressing the generation of a vmtx table. Can be useful if you added top and bottom sidebearings but want to export for horizontal typesetting only.
  • Italic Style Linking (in variable font settings only): In the STAT table of variable fonts, adds a Format 3 (style linking) AxisValue for the Italic axis, linking the Regular ital=0 to the Italic ital=1. Should not be added to (exclusively) italic fonts. Use this parameter for forcing or suppressing the style linking rather than relying on the built-in automation.
  • Decompose Brace Layers:
  • Ignore custom GlyphData file:
  • Fit Curve Panel Settings: Use this parameter to store the minimum and maximum percentages for the Fit Curve panel in the right sidebar. As parameter value, use two numbers, separated by a comma, e.g., ‘57, 72’. Once set, the parameter value will pick up changes you make in the Fit Curve UI. This is useful for storing project-specific values.
  • Export TrueType Hints and Export PostScript Hints allow you to selectively suppress the generation of (manual) hints in exports that carry this parameter.

TrueType

Make fit curve work with TT (special case with two off curve nodes only, yet)
Avoid tripping over a TT segment that has all point on the same position
Fix issue with auto-stems in TT instructions
Fix issue with TrueType deltas
Slightly improve TrueType instructions
Fix Dark mode in TrueType preview
Fix display of TrueType hints
Don’t put italic angle in TTZones

Hinting

Allow more decimal places for "blueScale"
fix (auto)hinting on intersections
Add "Export TrueType/PostScript Hints" parameter
Better handle invalid TrueType hints
Improve copy pasting of hints
restore TrueType hints behavior to the state in 3.1

Glyph data and script support

In Glyph Data, you can now override default positions of anchors for individual glyphs. You can use these codes:

  • minY and maxY: bottom and top edges of the bounding box
  • minX and maxX: left and right edges of the bounding box
  • centerX and centerY: horizontal and vertical centers of the bounding box
  • width: the advance width of the glyph (or right sidebearing)
  • descender, baseline, ascender: vertical metrics

You can add one math operation with any of these operators: +-/*, followed by an integer or floating point number like 20 or 0.7. Separate x and y operations with a semicolon, the order of which does not matter. Examples:

  • bottom@maxX: bottom anchor on the baseline but moved to the right edge of the bounding box.
  • ogonek@baseline;maxX: at baseline, to the right.
  • _top@centerX+20: top connecting anchor, shifted 20 units towards the right.
  • ogonek@baseline+5;maxX-10:
  • ogonek@baseline+5;width*0.7: ogonek anchor positioned at 5 units above baseline, 70% of the width

Glyphs will first calculate the default positioning and then apply the extra keys. So you only need to specify what you want to change.

Glyphs now allows more than one GlyphData.xml file next to the .glyphs file, just like it does inside the Info folder in Application Support.

We fixed the default setup for softhyphen, it is now zero-widthed and empty. Thanks to the fontbakery users out there for pointing this out to us.

Added Ogham script, many thanks to Michael Everson for his input. And we added more Canadian syllabry, a bunch of missing Han infos, and some more CJK infos, specifically CJK Ideograph Extension H+I blocks, if you know what that means. Adjustments and corrections for Coptic and Mongolian.

More GlyphData improvements:

  • improved sorting of math glyphs
  • ordfeminine and ordmasculine are now cased as Minor, allowing for vertically shifting components

Import and export

Sparse masters form .designspace files are now imported as brace layers.
Fix problem importing variable fonts

Fix import of zones and stems from otf/ttf

Fix importing fea code from invalid GSUB table
Fix importing of feature code from .otf
Improve import of mark feature code

Fix some issues with "Import Font" parameter
Fix error with feature code and imported glyphs

fix some issues with the "Import Master" parameter
Fix "Previous/Next Master" for with imported masters

  • Sort font/instance.properties when writing to file to reduce diff
  • Fix export of outline with fractional coordinates
  • Fix export of variable GPOS
  • Fix export of variable WOFF/WOFF2
  • Fix export with "Webfont Only" parameter for plain font
  • Fix rare crash when exporting
  • Fix some issues with writing automatic GPOS features. (export automatic kern even if there is no "# Automatic Code")

Color font export

Improved SVG import

Fix export of duplicate Color Palette layers
Fix export of CV parameter names
Fix export of gradients in SVG
Fix export of interpolated color palette layers
Improve export of color layers to COLRv0

UFO

Small improvements to ufos
Improve UFO stuff
more UFO compatibility
Some small adjustments on the ufo export
substitute $[] tokens when exporting ufo
Use "Write lastChange" when writing .ufo
WIP sync ufo export with glyphsLib
Error reporting invalid .ufo data
Fix reading kerning from .ufo and .otf
Check "Write DisplayStrings" when writing .ufo
Do not write disabled features to ufo (!! the are missing when roundtripping)
Handling of userData of guides (and preserve ufo guides info)
Fix some issues reading/writing to ufo and glyphs 2 files
Improve Quicklook for .glyphs, .glyphspackage and .ufo file

  • Write anchor.context into public.objectLibs

Improve round tripping of glyphs 2 files
When reading version 2 files, add all zones as metrics

Python and scripting

Everybody uninstall and reinstall their Python module via Window > Plugin Manager > Modules. You will get Python 3.11, including PyObjC, brotli and zopfli, so you can do post production. In the meantime, Python 3.12 got out. Glyphs supports it too now, if you use your own custom installation of Python in Glyphs > Settings > Addons. Do not forget to install PyObjC and other necessary modules if you do so.

We improved Window > Macro Panel. Firstly, there are way more autocomplete keywords available while typing code. And secondly, you can now minimize the window with the yellow button. (Of course, you can also still toggle its display with Cmd-Opt-M.) And we added a user default GSMacroWindowAllowNoneAsciiInput, which, if set if set to False, will only allow you to type good old 7-bit ASCII. The default key is added to the Hidden Settings mekkablue script.

We changed the behavior of tab.layers (where tab is an Edit view tab) to return the layers actually visible in the tab, and we added a setter for tab.layersCursor. But be careful to set it within the range of the visible layers. Here is a code sample that moves the cursor gracefully, note the modulo operator %:

def moveCursorInTab(tab, move=1):
    newPosition = (tab.layersCursor + move) % (len(tab.layers) + 1)
    tab.layersCursor = newPosition

moveCursorInTab(Glyphs.font.currentTab, 1)

We added PickGlyphs() to the Python wrapper: PickGlyphs(content, masterID, searchString, defaultsKey) so you can have you user pick a glyph. content is a list of GSGlyph objects, masterID the ID of a font master, and a str as search string. Here is an example:

font = Glyphs.font
choice = PickGlyphs(
    list([g for g in font.glyphs if g.case == GSUppercase]), # must be a list of GSGlyph objects
    font.selectedFontMaster.id,
    "circumflex",
    )
print(choice)

… which will give you a glyph picker dialog that prepopulates the search field with the searchString you specified:

And as a result you get a tuple of two things: a list of your selected GSGlyph objects, and your search string:

([<GSGlyph 0x2a89629b0> Acircumflex, <GSGlyph 0x2a99a4290> Ecircumflex], 'circumflex')

Alternatively, you can specify a fourth argument, defaultsKey, which stores the search string the user types in a preference with that key, e.g.:

font = Glyphs.font
choice = PickGlyphs(
    list(font.glyphs),
    font.selectedFontMaster.id,
    None,
    "com.mekkablue.GlyphMangler.search",
    )

If you specify a defaultsKey, the third argument, searchString, will be ignored. The return value is the same tuple as above, but this time, you can query and overwrite the search string with the defaults key:

print(Glyphs.defaults["com.mekkablue.GlyphMangler.search"]) # yields whatever the user typed in last

You can override UI colors for components now. These are the keys:

Glyphs.colorDefaults["GSColorComponent"]
Glyphs.colorDefaults["GSColorComponentLocked"]
Glyphs.colorDefaults["GSColorComponentAligned"]
Glyphs.colorDefaults["GSColorComponentHorizontalAligned"]
Glyphs.colorDefaults["GSColorComponentDark"]
Glyphs.colorDefaults["GSColorComponentLockedDark"]
Glyphs.colorDefaults["GSColorComponentAlignedDark"]
Glyphs.colorDefaults["GSColorComponentHorizontalAlignedDark"]

The defaults take NSColor objects as values.

New additions to the wrapper:

  • GSElement.orientation allows accessing the clockwise or counterclockwise orientation of components.

More scripting news:

  • Added documentation for GSPathSegment
  • Added GSGradient to python wrapper
  • Fixed the drawingTools Python API
  • Fixed missing countOfUserData
  • Fixed GSBackgroundImage wrapper
  • Fixed GSInstance.active: it always gives you the updated value now
  • Fixed setting GSGlyph.color to None for deleting the assigned glyph color

Fix some issues with external scripts
refactor Extrude filter to make it easier to run from scripts

??? Add "IgnoreRecentScriptInvokedByKeyboard" option

App plugin drawing API in Font and Preview view

Catching problems/crashes from plugins

New tutorials

New scripts and plug-ins

More improvements and stability

Fix crash in macOS 10.14
Fix crash when exporting
Fix crash when typing in Edit view with Indic keyboards
Fix cursor and changing text not matching
Fix a crash in the Help menu
Fix a crash with context anchors
Fix an issue with remove overlap
Fix another issue with smooth curves again
Avoid decomposing underscore anchors in non-marks (GDEF warning)

#########

up until 3227

#########

  • Slightly improve "Align Selection"

  • Slightly improve "correct path direction"

  • Improve "Show" button in Export error dialog

  • Improve add master/font dialog

  • Improve corners with ‘origin’ anchor

  • Improve error reporting

  • Improve error reporting when opening a broken file

  • Improve handling of feature variations

  • Improve handling of not selected off curve nodes when pasting into paths

  • Improve handling of SF-Symbols

  • Improve handling/validation of axisTag

  • Improve memory usage of python scripts

  • Improve metric keys on brace layers

  • Improve names for .glif and .glyph files (Con)

  • Improve performance of calculating Metrics Keys State

  • Improve performance with a lot Color Palette layers

  • Improve the measurement line against the sidebearing

  • Improve the wording and UI on the "Changes in old file" dialog

  • Fix "currentColor" for svg from color layers

  • Fix "Ignore custom GlyphData file" parameter

  • Fix "Reencode Glyphs" parameter

  • Fix "Scale to UPM"

  • Fix calculation of "middle" masters when exporting variable fonts

  • Fix caps on the beginning of strokes

  • Fix compatibility with SuperTool

  • Fix copy paste variable font settings

  • Fix crash after Paste Special with brace layers

  • Fix crash when copy pasting color layers

  • Fix crash when copy pasting paths with corner components

  • Fix crash when exporting variable fonts

  • Fix decompose components in background

  • Fix display of background layers in preview view

  • Fix display of unencoded glyphs in TrueType html preview

  • Fix drawing of background with "Master Color" cp

  • Fix export of "Name Table Entry"

  • Fix export of "Remove/Keep… Glyphs" parameters

  • Fix export of brace layers in variable fonts

  • Fix export of color layers

  • Fix export of components with componentMasterId

  • Fix export of deltas on zones and stems in TrueType

  • Fix export of stems to CFF

  • Fix export of variable fonts (when more than one master per axis)

  • Fix export on macOS 10.12 and below

  • Fix Font Info window opening when opening a .glyphs file

  • Fix GSComponent.automaticAlignment

  • Fix import of multiple styles from suitcase fonts

  • Fix import of variable font

  • Fix importing of invalid font

  • fix issue when exporting variable font with "Disabled Masters" parameter

  • Fix issue with "Add instance for each Master"

  • Fix issue with "Master Color" parameter when the color was never changed

  • Fix issue with "Virtual Masters"

  • Fix issue with liga2mark and some anchors

  • Fix issue with local glyphData files

  • Fix issue with malformed brace layer data

  • Fix issue with SVG export

  • Fix issue with typing in edit view features are applied

  • Fix issue with variable font export introduced in 3220

  • Fix issues with "Virtual Master"s

  • Fix manually installation of plugins that are in a git repo

  • Fix max height of Generate Glyphs window

  • Fix messed up outlines caused by 3210

  • Fix misaligned handles when removing nodes

  • Fix misalignment of components that contain brace layers when alignment is disabled in the font

  • Fix moving components in glyphs with more than 20 components

  • Fix moving nodes with option+arrow key when the node is at 45°

  • Fix Path intersection

  • Fix removing palettes

  • Fix round tripping of cvt values when opening a .ttf

  • Fix saving image paths

  • Fix saving of pasted images

  • Fix several crashes

  • Fix Shape Order dialog width

  • Fix small issue with TrueType conversion

  • Fix some crashes

  • Fix some problems with "Master Color"

  • Fix Transformation command with background images

  • Fix typing in edit view

  • Fix typo in scripting API (extreme)

  • Fix variable GPOS and Feature Variations

  • Fix decomposition of anchors from rotated components

  • Fix decomposition of bracket layers from not exporting glyph

  • Fix default anchor position in caron.alt

  • Fix display issue with custom parameters that contain a very long string

  • Fix drawing of anchors in Show Master Compatibility and more than one layer group

  • Fix duplicate info entries in Font Info

  • Fix extra line after line break in edit view

  • fix font.newTab()

  • Fix hang when starting the app

  • Fix hidden glyph overview in list mode

  • Fix instance selector in Edit View

  • Fix issue with "Re-Interpolate" and regular backup layers

  • Fix issue with alignment and manually set anchor names

  • Fix issue with Arabic ligature code (better handle glyphs that are only right joining)

  • Fix issue with GSGlyphReference objects

  • Fix issue with hidden/unsupported entries in font.properties

  • Fix issue with localized FullName

  • Fix issue with measurement line

  • Fix issue with metrics keys not showing out of sync state

  • Fix issue with production names

  • Fix issue with zero length segments when removing overlap

  • Fix issues with some plugins

  • Fix layer groups for color layers

  • Fix layer transformation with list/tuple

  • Fix metrics keys in italic brace layers

  • Fix pasting caps onto extra nodes

  • Fix positioning in the preview view

  • Fix problem with class references in anchor contexts

  • Fix problem with missing axis tag for custom axis

  • Fix several shortcuts

  • Fix small cap ligature names

  • Fix smooth point (broken since 3193)

  • Fix some layout issues with control layers

  • Fix spacing of bracket layers in composite glyphs

  • Fix width of glyphs with brace layers in components

  • Fixed an issue with interpolating glyphs with partially aligned components and some specific metrics keys

  • Add option to disable autosave as package files

  • Add option to disable the Metrics Keys State in font view (it can be slow with when there are a lot masters and brace layers)

  • Allow FullColorLayer even when there is a CPAL cp

  • Allow single character strings in list filter and generate glyph dialog

  • Always show corner components that point to a nonexisting glyph.

  • Avoid duplicate names when converting names from GSUB when importing .otf files

  • Avoid rounding issues when aligning nodes

  • better decompose nested special components
    ??? connection setting for all masters

  • Decompose brace layers when there is a "Decompose Components" custom parameter

  • disable inline editing in the font view sidebar

  • Disable mouse wheel scrolling in edit fields when not editing

  • Disable temporary activating selection tool in annotation tool

  • Remove limit of component for alignment

  • Don’t scale unselected corners

  • Don’t show pairs that have the search only on the left side but we filter for right

  • Don’t use PreferredNames for default family name

  • Follow symlinks for CustomFilter files

  • Ignore metrics key warnings for empty glyphs

  • Increase miter limit to be closer to what Illustrator is doing

  • Keep layer order in Master Compatibility preview

  • Keep manual line break on the previous line

  • Keep the floating console visible when the app is in the background

  • Limit height of pallet window to keep it on the screen

  • Load "marks" from custom glyphInfo

  • Localize component placeholders

  • Make sure we don’t convert names when duplicating glyphs from Edit view

  • More precisely calculate hhea.caretSlopeRise, hhea.caretSlopeRun

  • Prevent clipping when printing grid view

  • Prevent duplicate glyph names when search and replace in names

  • Prevent undo after making a new document form glyph set

  • Resize Anchor context text field if needed

  • Select the next anchor or component when deleting one (like it is already for nodes)

  • Show and allow editing all unicodes in font view list mode

  • Show mark cloud on composite glyphs

  • Some custom parameters from Variable font settings were not applied

  • Try to make sure plugins are always updated

  • Update Edit view settings for inactive tabs

  • Update Panel Inspector in font view when selection changes

  • use "Preview As/Descender" as is and apply extra padding only to default spacing

  • Use right encoding for "Unicode" strings in the name table

  • validate default postScriptName

  • When renaming glyphs and enabled custom names, only reset info when we find a new one