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