[cubic-glyf] Fix drawPoints() contour ending with cubic offCurve
Fixes https://github.com/fonttools/fonttools/issues/3189
This commit is contained in:
parent
1138e5b0df
commit
9974a74a18
@ -1528,9 +1528,15 @@ class Glyph(object):
|
|||||||
start = end
|
start = end
|
||||||
pen.beginPath()
|
pen.beginPath()
|
||||||
# Start with the appropriate segment type based on the final segment
|
# Start with the appropriate segment type based on the final segment
|
||||||
segmentType = "line" if cFlags[-1] == 1 else "qcurve"
|
|
||||||
|
if cFlags[-1] & flagOnCurve:
|
||||||
|
segmentType = "line"
|
||||||
|
elif cFlags[-1] & flagCubic:
|
||||||
|
segmentType = "curve"
|
||||||
|
else:
|
||||||
|
segmentType = "qcurve"
|
||||||
for i, pt in enumerate(contour):
|
for i, pt in enumerate(contour):
|
||||||
if cFlags[i] & flagOnCurve == 1:
|
if cFlags[i] & flagOnCurve:
|
||||||
pen.addPoint(pt, segmentType=segmentType)
|
pen.addPoint(pt, segmentType=segmentType)
|
||||||
segmentType = "line"
|
segmentType = "line"
|
||||||
else:
|
else:
|
||||||
|
@ -563,14 +563,68 @@ class TTGlyphSetTest(object):
|
|||||||
glyphset["one"].draw(pen)
|
glyphset["one"].draw(pen)
|
||||||
assert pen.value == expected
|
assert pen.value == expected
|
||||||
|
|
||||||
|
expectedPoints = [
|
||||||
|
("beginPath", (), {}),
|
||||||
|
("addPoint", ((76, 181), "curve", False, None), {}),
|
||||||
|
("addPoint", ((103, 181), None, False, None), {}),
|
||||||
|
("addPoint", ((125, 158), None, False, None), {}),
|
||||||
|
("addPoint", ((125, 104), None, False, None), {}),
|
||||||
|
("addPoint", ((103, 82), None, False, None), {}),
|
||||||
|
("addPoint", ((76, 82), "curve", False, None), {}),
|
||||||
|
("addPoint", ((48, 82), None, False, None), {}),
|
||||||
|
("addPoint", ((26, 104), None, False, None), {}),
|
||||||
|
("addPoint", ((26, 158), None, False, None), {}),
|
||||||
|
("addPoint", ((48, 181), None, False, None), {}),
|
||||||
|
("endPath", (), {}),
|
||||||
|
]
|
||||||
|
pen = RecordingPointPen()
|
||||||
|
glyphset["one"].drawPoints(pen)
|
||||||
|
assert pen.value == expectedPoints
|
||||||
|
|
||||||
pen = RecordingPen()
|
pen = RecordingPen()
|
||||||
glyphset["two"].draw(pen)
|
glyphset["two"].draw(pen)
|
||||||
assert pen.value == expected
|
assert pen.value == expected
|
||||||
|
|
||||||
|
expectedPoints = [
|
||||||
|
("beginPath", (), {}),
|
||||||
|
("addPoint", ((26, 158), None, False, None), {}),
|
||||||
|
("addPoint", ((48, 181), None, False, None), {}),
|
||||||
|
("addPoint", ((76, 181), "curve", False, None), {}),
|
||||||
|
("addPoint", ((103, 181), None, False, None), {}),
|
||||||
|
("addPoint", ((125, 158), None, False, None), {}),
|
||||||
|
("addPoint", ((125, 104), None, False, None), {}),
|
||||||
|
("addPoint", ((103, 82), None, False, None), {}),
|
||||||
|
("addPoint", ((76, 82), "curve", False, None), {}),
|
||||||
|
("addPoint", ((48, 82), None, False, None), {}),
|
||||||
|
("addPoint", ((26, 104), None, False, None), {}),
|
||||||
|
("endPath", (), {}),
|
||||||
|
]
|
||||||
|
pen = RecordingPointPen()
|
||||||
|
glyphset["two"].drawPoints(pen)
|
||||||
|
assert pen.value == expectedPoints
|
||||||
|
|
||||||
pen = RecordingPen()
|
pen = RecordingPen()
|
||||||
glyphset["three"].draw(pen)
|
glyphset["three"].draw(pen)
|
||||||
assert pen.value == expected
|
assert pen.value == expected
|
||||||
|
|
||||||
|
expectedPoints = [
|
||||||
|
("beginPath", (), {}),
|
||||||
|
("addPoint", ((48, 82), None, False, None), {}),
|
||||||
|
("addPoint", ((26, 104), None, False, None), {}),
|
||||||
|
("addPoint", ((26, 158), None, False, None), {}),
|
||||||
|
("addPoint", ((48, 181), None, False, None), {}),
|
||||||
|
("addPoint", ((76, 181), "curve", False, None), {}),
|
||||||
|
("addPoint", ((103, 181), None, False, None), {}),
|
||||||
|
("addPoint", ((125, 158), None, False, None), {}),
|
||||||
|
("addPoint", ((125, 104), None, False, None), {}),
|
||||||
|
("addPoint", ((103, 82), None, False, None), {}),
|
||||||
|
("addPoint", ((76, 82), "curve", False, None), {}),
|
||||||
|
("endPath", (), {}),
|
||||||
|
]
|
||||||
|
pen = RecordingPointPen()
|
||||||
|
glyphset["three"].drawPoints(pen)
|
||||||
|
assert pen.value == expectedPoints
|
||||||
|
|
||||||
pen = RecordingPen()
|
pen = RecordingPen()
|
||||||
glyphset["four"].draw(pen)
|
glyphset["four"].draw(pen)
|
||||||
assert pen.value == [
|
assert pen.value == [
|
||||||
@ -581,3 +635,21 @@ class TTGlyphSetTest(object):
|
|||||||
("curveTo", ((26, 158), (48, 181), (75.5, 181))),
|
("curveTo", ((26, 158), (48, 181), (75.5, 181))),
|
||||||
("closePath", ()),
|
("closePath", ()),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
# Ouch! We can't represent all-cubic-offcurves in pointPen!
|
||||||
|
expectedPoints = [
|
||||||
|
("beginPath", (), {}),
|
||||||
|
("addPoint", ((103, 181), None, False, None), {}),
|
||||||
|
("addPoint", ((125, 158), None, False, None), {}),
|
||||||
|
("addPoint", ((125, 104), None, False, None), {}),
|
||||||
|
("addPoint", ((103, 82), None, False, None), {}),
|
||||||
|
("addPoint", ((48, 82), None, False, None), {}),
|
||||||
|
("addPoint", ((26, 104), None, False, None), {}),
|
||||||
|
("addPoint", ((26, 158), None, False, None), {}),
|
||||||
|
("addPoint", ((48, 181), None, False, None), {}),
|
||||||
|
("endPath", (), {}),
|
||||||
|
]
|
||||||
|
pen = RecordingPointPen()
|
||||||
|
glyphset["four"].drawPoints(pen)
|
||||||
|
print(pen.value)
|
||||||
|
assert pen.value == expectedPoints
|
||||||
|
Loading…
x
Reference in New Issue
Block a user