summaryrefslogtreecommitdiff
path: root/scripts/lib/fontbuild/decomposeGlyph.py
blob: 8cab1b45622327419804f74646496c0b4f806434 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
def decomposeGlyph(font, glyphName):
    """Moves the components of a glyph to its outline."""

    glyph = font[glyphName]
    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)