A slightly different font editor
Once upon a time, I designed fonts. With some success — but I always wanted a font editor suited to my specific needs. So I built one that answers, at least for me, all the ideas I'd been carrying around.
Multiple coordiantes origins
One serif, many glyphs. One move, many changes. Red cross is an origin, black dots are points belonging to it. Origin or it outline can be use anywhere. Or its position, or just few nodes. Trillon times,
Every part of a glyph could be arranged around different origin and could be shared between many other glyps with its own coordinates. Origin could be moved with all connected segments in any place, connections between them will adapt (if well designed)
Multidimensional values
Till now, if you desined some many-axes font it was simple: few masters, and every point (X and Y) had it's brother (sister) on every other master. Here is a difference. Baseline (0) doesn't need eight masters. It could be zero-dimensional. Value describing weight? One? maybe two, if width is defined. But could stame same for a contrast or serifWidth axis. So point on baseline could have two-dimensional x, and zero-dimensional y. Even if a design space has seven axes, every value can have as many axes as it actually needs. Some height might be completely axis-independent — if width, weight, or contrast don't affect it, there's no need to edit that point across every master.
Values have their targets
X is interpolated between two other values (A and B) and has weight and width axes; Y has only weight — your decision. The Y value is shared by three different objects. See the pale green and orange backgrounds? Orange objects have multiple parents — three in this case.
Values for X are just for horizontal movement, Y for vertical, Angle for angles, Tension for tension. You can't accidentally assign an X value to Y or Tension — unless you actually want to.
Curves as definitions
No more control points defining curvature — just tension and angle as a shareable parameter, in and out. When the size of a curve changes, the curvature stays the same. Sharing tension and angle values between curves is not only possible but incredibly useful. Sometimes irritating, likes to explode into infinty if angles are set in a wrong direction.
Independent, shareable objects
Glyphs are built through an objects tree, where values (numbers) sit at the bottom and modified glyphs — such as small caps — at the top. Values can be used as X and Y coordinates for a point, or derived from other values. A point defines a node's position (where the outline is anchored); nodes define segments of the outline; contours hold the outline you can connect with others.
Every object can be shared. If I need two — or a thousand — points at the same height, I can share one value between all of them. Define a serif, a terminal, whatever — change it once and it updates everywhere. A very dangerous feature. But I like it..
Objects tree — one value rules them all. Almost. Accidentally change the #contrast value and every R, B, E, D… glyph is affected. Even H.sc.
It is so easy to destroy everything.. But if it is well designed most of glyph will not explode.
Everything can have a name — or just use copy/paste
- new (keep sources)… — creates a new object, but all children remain shared. Use this when you want to modify an existing object without breaking its connections.
- all new… — replaces the object with entirely new, unshared children. Safe.
- from Clipboard: … — if the copied object has a relevant child, you can paste it here to share it.
- (list of names) — everything can be named. Dots in names generate submenus: margins.H.left and margins.H.right to avoid long list and keep an order
Every object (Component, Glyph,Origin, Node Control In, Tension Angle, Point Value...) colud have it's name and be shared with other parents via dropdown menu. But if you copy Cmd-C Origin or Node you can paste its children to any child in other objects to share it.
Relations, functions, and more
Every value can be added to another value, negated, multiplied, or interpolated between other values. And every parameter can be shared anywhere.
Virtual segments
Hard to explain to someone who has never faced this problem. Should be immediately clear to anyone who has.
I always missed this feature — especially for multidimensional diagonal connections, where simple Cartesian interpolation fails.
Modified hypercube corners
One corner shifted wider and lower contrast — scale it once and your superiors are ready.
Small caps, superiors, and similar variants can be generated almost for free — every corner of the design space can shift its position to make a component bolder, lighter, or wider, depending on your defined axes. These parameters can be shared across glyphs. Easy.