Skip to content

Instantly share code, notes, and snippets.

gferreira /
Last active Oct 11, 2021
a simple move glyph tool for RF4 -- built with Subscriber and Merz
from vanilla import FloatingWindow, CheckBox, Button, TextBox
from mojo.UI import NumberEditText, UpdateCurrentGlyphView
from mojo.roboFont import CurrentGlyph
from mojo.subscriber import Subscriber, WindowController, registerGlyphEditorSubscriber
from mojo.pens import DecomposePointPen
class MoveGlyphsPanel(Subscriber, WindowController):
# ----------
gferreira /
Last active Jan 28, 2022
fixes fonts with Italic Angle but no Italic Slant Offset
import math
### updated version of a script by Lukas Schneider, available from the RoboFont documentation:
### changes in this version:
### - handles all layers of all open fonts
### - fixed syntax for FontParts / RoboFont 3
fixes fonts with Italic Angle but no Italic Slant Offset
from AppKit import NSApp
from vanilla import FloatingWindow, EditText, List, Button
from import getShortCuts
from lib.UI.fileBrowser import shortKeyToString
class CommandPalette:
def __init__(self):
shortcuts = getShortCuts()
gferreira /
Last active Apr 5, 2020
Preview interpolation result in the Space Center using representations.
just a proof of concept, name of the second master is hard-coded at the bottom
from vanilla import FloatingWindow, CheckBox, Slider
from import BaseWindowController
from import addObserver, removeObserver
from mojo.UI import CurrentSpaceCenter
import mojo.drawingTools as ctx
gferreira / svg-test.html
Last active Feb 3, 2020
SVG + HTML + CSS + JS example
View svg-test.html
<!DOCTYPE html>
<meta charset="UTF-8">
<title>SVG test</title>
@keyframes colorChange { from { background-color: yellow; } to { background-color: red; } }
svg { animation: colorChange 3s infinite alternate; }
#circle { fill: grey; } /* cursor: move; */
import os, operator
from import OpenFont
def autoStartPoints(glyph):
if not glyph.bounds:
for contour in glyph:
points = [(pt.x, pt.y, pt) for pt in contour.points if pt.type != 'offcurve']
sortedPoints = sorted(points, key=operator.itemgetter(1, 0))
firstPoint = sortedPoints[0][2]
gferreira /
Last active Oct 1, 2019
Q: can vanilla windows talk to each other? A: yes they can!
from AppKit import NSApp
from vanilla import *
class LayersWindow(object):
def __init__(self):
self.w = FloatingWindow((123, 200), title='layers')
self.w.layers = List((10, 10, -10, -10), ['foreground', 'background', 'sketches'])
self.w.bind("close", self.closeCallback)
self.w.vanillaWrapper = self
View roboDocsExtensionStream.json
"lastUpdate": "2019-09-20 20:56",
"extensions": [
"extensionName": "Add Overlap",
"repository": "",
"extensionPath": "AddOverlap.roboFontExt",
"description": "Creates an overlap for the selected points.",
"developer": "Alexandre Saumier Demers",
"developerURL": "",
gferreira /
Last active Aug 6, 2019 — forked from okay-type/
# jackson #
import os
from AppKit import NSFilenamesPboardType, NSDragOperationCopy
from vanilla import Window, List, Button
class doThing():
def __init__(self, path):
gferreira /
Created Jun 20, 2019
Create a Voronoi diagram as a raster image in Python. Converted from PIL to DrawBot.
import random
import math
def generate_voronoi_diagram(imgx, imgy, num_cells):
nx = []
ny = []
nr = []