diff options
Diffstat (limited to 'misc/pylib/fontbuild/decomposeGlyph.pyx')
-rw-r--r-- | misc/pylib/fontbuild/decomposeGlyph.pyx | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/misc/pylib/fontbuild/decomposeGlyph.pyx b/misc/pylib/fontbuild/decomposeGlyph.pyx new file mode 100644 index 000000000..0470fa60b --- /dev/null +++ b/misc/pylib/fontbuild/decomposeGlyph.pyx @@ -0,0 +1,23 @@ +def decomposeGlyph(font, glyph): + """Moves the components of a glyph to its outline.""" + if len(glyph.components): + deepCopyContours(font, glyph, glyph, (0, 0), (1, 1)) + glyph.clearComponents() + + +def deepCopyContours(font, parent, component, offset, scale): + """Copy contours to parent from component, including nested components.""" + + for nested in component.components: + deepCopyContours( + font, parent, font[nested.baseGlyph], + (offset[0] + nested.offset[0], offset[1] + nested.offset[1]), + (scale[0] * nested.scale[0], scale[1] * nested.scale[1])) + + if component == parent: + return + for contour in component: + contour = contour.copy() + contour.scale(scale) + contour.move(offset) + parent.appendContour(contour) |