Ejemplo n.º 1
0
 def test_singlePoint(self):
     tpen = _TestPointPen()
     pen = ReverseContourPointPen(tpen)
     pen.beginPath()
     pen.addPoint((0, 0), segmentType="move")
     pen.endPath()
     self.assertEqual(
         "beginPath() "
         "addPoint((0, 0), segmentType='move') "
         "endPath()", repr(tpen))
Ejemplo n.º 2
0
 def test_closed_line_overlapping_start_end_points(self):
     # Test case from https://github.com/googlefonts/fontmake/issues/572
     tpen = _TestPointPen()
     pen = ReverseContourPointPen(tpen)
     pen.beginPath()
     pen.addPoint((0, 651), segmentType="line")
     pen.addPoint((0, 101), segmentType="line")
     pen.addPoint((0, 101), segmentType="line")
     pen.addPoint((0, 651), segmentType="line")
     pen.endPath()
     self.assertEqual(
         "beginPath() "
         "addPoint((0, 651), segmentType='line') "
         "addPoint((0, 651), segmentType='line') "
         "addPoint((0, 101), segmentType='line') "
         "addPoint((0, 101), segmentType='line') "
         "endPath()", repr(tpen))
Ejemplo n.º 3
0
 def test_quadClosedOffCurveStart(self):
     tpen = _TestPointPen()
     pen = ReverseContourPointPen(tpen)
     pen.beginPath()
     pen.addPoint((100, 200))
     pen.addPoint((200, 200), segmentType="qcurve")
     pen.addPoint((0, 0), segmentType="line")
     pen.addPoint((0, 100))
     pen.endPath()
     self.assertEqual(
         "beginPath() "
         "addPoint((100, 200)) "
         "addPoint((0, 100)) "
         "addPoint((0, 0), segmentType='qcurve') "
         "addPoint((200, 200), segmentType='line') "
         "endPath()", repr(tpen))
Ejemplo n.º 4
0
 def test_cubicOpen(self):
     tpen = _TestPointPen()
     pen = ReverseContourPointPen(tpen)
     pen.beginPath()
     pen.addPoint((0, 0), segmentType="move")
     pen.addPoint((0, 100))
     pen.addPoint((100, 200))
     pen.addPoint((200, 200), segmentType="curve")
     pen.endPath()
     self.assertEqual(
         "beginPath() "
         "addPoint((200, 200), segmentType='move') "
         "addPoint((100, 200)) "
         "addPoint((0, 100)) "
         "addPoint((0, 0), segmentType='curve') "
         "endPath()", repr(tpen))
Ejemplo n.º 5
0
 def test_quadNoOnCurve(self):
     tpen = _TestPointPen()
     pen = ReverseContourPointPen(tpen)
     pen.beginPath(identifier='bar')
     pen.addPoint((0, 0))
     pen.addPoint((0, 100), identifier='foo', arbitrary='foo')
     pen.addPoint((100, 200), arbitrary=123)
     pen.addPoint((200, 200))
     pen.endPath()
     pen.addComponent("base", [1, 0, 0, 1, 0, 0], identifier='foo')
     self.assertEqual("beginPath(identifier='bar') "
                      "addPoint((0, 0)) "
                      "addPoint((200, 200)) "
                      "addPoint((100, 200), arbitrary=123) "
                      "addPoint((0, 100), identifier='foo', arbitrary='foo') "
                      "endPath() "
                      "addComponent('base', [1, 0, 0, 1, 0, 0], identifier='foo')",
                      repr(tpen))
Ejemplo n.º 6
0
 def test_triangle(self):
     tpen = _TestPointPen()
     pen = ReverseContourPointPen(tpen)
     pen.beginPath()
     pen.addPoint((0, 0), segmentType="line")
     pen.addPoint((0, 100), segmentType="line")
     pen.addPoint((100, 100), segmentType="line")
     pen.endPath()
     self.assertEqual(
         "beginPath() "
         "addPoint((0, 0), segmentType='line') "
         "addPoint((100, 100), segmentType='line') "
         "addPoint((0, 100), segmentType='line') "
         "endPath()", repr(tpen))
Ejemplo n.º 7
0
    def drawShapeWithRectInGlyph(self, shape, rect, glyph):
        # draw the shape into the glyph
        # tell the glyph something is going to happen (undo is going to be prepared)
        glyph.prepareUndo("Drawing Shapes")

        # get the pen to draw with
        pen = glyph.getPointPen()
        if glyph.preferredSegmentType == "qcurve" and not self.shouldReverse:
            pen = ReverseContourPointPen(pen)
        elif self.shouldReverse:
            pen = ReverseContourPointPen(pen)

        x, y, w, h = rect

        # draw a rectangle in the glyph using the pen
        if shape == "rect":
            pen.beginPath()
            pen.addPoint(_roundPoint(x, y), "line")
            pen.addPoint(_roundPoint(x + w, y), "line")
            pen.addPoint(_roundPoint(x + w, y + h), "line")
            pen.addPoint(_roundPoint(x, y + h), "line")

            pen.endPath()

        # draw an oval in the glyph using the pen
        elif shape == "oval":
            hw = w/2.
            hh = h/2.
            r = .55
            segmentType = glyph.preferredSegmentType
            if glyph.preferredSegmentType == "qcurve":
                r = .42

            pen.beginPath()
            pen.addPoint(_roundPoint(x + hw, y), segmentType, True)
            pen.addPoint(_roundPoint(x + hw + hw*r, y))
            pen.addPoint(_roundPoint(x + w, y + hh - hh*r))

            pen.addPoint(_roundPoint(x + w, y + hh), segmentType, True)
            pen.addPoint(_roundPoint(x + w, y + hh + hh*r))
            pen.addPoint(_roundPoint(x + hw + hw*r, y + h))

            pen.addPoint(_roundPoint(x + hw, y + h), segmentType, True)
            pen.addPoint(_roundPoint(x + hw - hw*r, y + h))
            pen.addPoint(_roundPoint(x, y + hh + hh*r))

            pen.addPoint(_roundPoint(x, y + hh), segmentType, True)
            pen.addPoint(_roundPoint(x, y + hh - hh*r))
            pen.addPoint(_roundPoint(x + hw - hw*r, y))

            pen.endPath()

        # tell the glyph you are done with your actions so it can handle the undo properly
        glyph.performUndo()
        glyph.changed()