Custom label in glyph cells ↩
This example shows how to draw inside the glyph cells of the Font Overview.

The script opens a dialog containing a button to add or remove a ‘label’ to the selected glyphs in the Font Overview.

The state of this ‘label’ is stored in a custom key in the glyph lib. When the Font Overview is refreshed, a small rectangle is drawn inside the cells of all glyphs which have this value set to True.
When the dialog is closed, the observer is removed and the labels are cleared.
from vanilla import FloatingWindow, SquareButton
from mojo.events import addObserver, removeObserver
from mojo.drawingTools import *
class CustomGlyphCellLabel:
key = "com.myDomain.customGlyphCellLabel"
def __init__(self):
self.w = FloatingWindow((180, 52), "custom labels")
self.w.button = SquareButton((10, 10, -10, -10), "add/remove label", callback=self.actionCallback)
self.w.bind("close", self.closeCallback)
self.w.open()
addObserver(self, "drawCell", "glyphCellDrawBackground")
def drawCell(self, info):
glyph = info["glyph"]
value = glyph.lib.get(self.key)
if value:
fill(1, 0, 0)
rect(0, 0, 10, 10)
def actionCallback(self, sender):
font = CurrentFont()
if font is None:
return
for glyphName in font.selectedGlyphNames:
# get current value
value = font[glyphName].lib.get(self.key, False)
# toggle value
font[glyphName].lib[self.key] = not value
font[glyphName].changed()
def closeCallback(self, sender):
font = CurrentFont()
if font is None:
return
for glyph in font:
if not self.key in glyph.lib:
continue
del glyph.lib[self.key]
glyph.changed()
removeObserver(self, "glyphCellDrawBackground")
CustomGlyphCellLabel()