xref: /aosp_15_r20/external/fonttools/Lib/fontTools/pens/teePen.py (revision e1fe3e4ad2793916b15cccdc4a7da52a7e1dd0e9)
1"""Pen multiplexing drawing to one or more pens."""
2
3from fontTools.pens.basePen import AbstractPen
4
5
6__all__ = ["TeePen"]
7
8
9class TeePen(AbstractPen):
10    """Pen multiplexing drawing to one or more pens.
11
12    Use either as TeePen(pen1, pen2, ...) or TeePen(iterableOfPens)."""
13
14    def __init__(self, *pens):
15        if len(pens) == 1:
16            pens = pens[0]
17        self.pens = pens
18
19    def moveTo(self, p0):
20        for pen in self.pens:
21            pen.moveTo(p0)
22
23    def lineTo(self, p1):
24        for pen in self.pens:
25            pen.lineTo(p1)
26
27    def qCurveTo(self, *points):
28        for pen in self.pens:
29            pen.qCurveTo(*points)
30
31    def curveTo(self, *points):
32        for pen in self.pens:
33            pen.curveTo(*points)
34
35    def closePath(self):
36        for pen in self.pens:
37            pen.closePath()
38
39    def endPath(self):
40        for pen in self.pens:
41            pen.endPath()
42
43    def addComponent(self, glyphName, transformation):
44        for pen in self.pens:
45            pen.addComponent(glyphName, transformation)
46
47
48if __name__ == "__main__":
49    from fontTools.pens.basePen import _TestPen
50
51    pen = TeePen(_TestPen(), _TestPen())
52    pen.moveTo((0, 0))
53    pen.lineTo((0, 100))
54    pen.curveTo((50, 75), (60, 50), (50, 25))
55    pen.closePath()
56