diff --git a/Lib/fontTools/colorLib/builder.py b/Lib/fontTools/colorLib/builder.py
index 77df9273d..a46fc74e1 100644
--- a/Lib/fontTools/colorLib/builder.py
+++ b/Lib/fontTools/colorLib/builder.py
@@ -35,7 +35,6 @@ _ColorStopsList = Sequence[_ColorStopInput]
_ExtendInput = Union[int, str, ExtendMode]
_ColorLineInput = Union[_Kwargs, ot.ColorLine]
_PointTuple = Tuple[_ScalarInput, _ScalarInput]
-_PointInput = Union[_PointTuple, ot.Point]
_AffineTuple = Tuple[_ScalarInput, _ScalarInput, _ScalarInput, _ScalarInput]
_AffineInput = Union[_AffineTuple, ot.Affine2x2]
@@ -380,20 +379,6 @@ def buildColorLine(
return self
-def buildPoint(x: _ScalarInput, y: _ScalarInput) -> ot.Point:
- self = ot.Point()
- # positions are encoded as Int16 so round to int
- self.x = _to_variable_int(x)
- self.y = _to_variable_int(y)
- return self
-
-
-def _to_variable_point(pt: _PointInput) -> ot.Point:
- if isinstance(pt, ot.Point):
- return pt
- return buildPoint(*pt)
-
-
def _to_color_line(obj):
if isinstance(obj, ot.ColorLine):
return obj
@@ -404,9 +389,9 @@ def _to_color_line(obj):
def buildLinearGradientPaint(
colorLine: _ColorLineInput,
- p0: _PointInput,
- p1: _PointInput,
- p2: Optional[_PointInput] = None,
+ p0: _PointTuple,
+ p1: _PointTuple,
+ p2: Optional[_PointTuple] = None,
) -> ot.Paint:
self = ot.Paint()
self.Format = 2
@@ -414,8 +399,9 @@ def buildLinearGradientPaint(
if p2 is None:
p2 = copy.copy(p1)
- for i, pt in enumerate((p0, p1, p2)):
- setattr(self, f"p{i}", _to_variable_point(pt))
+ for i, (x, y) in enumerate((p0, p1, p2)):
+ setattr(self, f"x{i}", _to_variable_int(x))
+ setattr(self, f"y{i}", _to_variable_int(y))
return self
@@ -433,8 +419,8 @@ def buildAffine2x2(
def buildRadialGradientPaint(
colorLine: _ColorLineInput,
- c0: _PointInput,
- c1: _PointInput,
+ c0: _PointTuple,
+ c1: _PointTuple,
r0: _ScalarInput,
r1: _ScalarInput,
affine: Optional[_AffineInput] = None,
@@ -444,11 +430,9 @@ def buildRadialGradientPaint(
self.Format = 3
self.ColorLine = _to_color_line(colorLine)
- for i, pt in [(0, c0), (1, c1)]:
- setattr(self, f"c{i}", _to_variable_point(pt))
-
- for i, r in [(0, r0), (1, r1)]:
- # distances are encoded as UShort so we round to int
+ for i, (x, y), r in [(0, c0, r0), (1, c1, r1)]:
+ setattr(self, f"x{i}", _to_variable_int(x))
+ setattr(self, f"y{i}", _to_variable_int(y))
setattr(self, f"r{i}", _to_variable_int(r))
if affine is not None and not isinstance(affine, ot.Affine2x2):
diff --git a/Lib/fontTools/ttLib/tables/otData.py b/Lib/fontTools/ttLib/tables/otData.py
index a9af60f6f..9238d6324 100755
--- a/Lib/fontTools/ttLib/tables/otData.py
+++ b/Lib/fontTools/ttLib/tables/otData.py
@@ -1599,11 +1599,6 @@ otData = [
('VarFixed', 'yy', None, None, ''),
]),
- ('Point', [
- ('VarInt16', 'x', None, None, ''),
- ('VarInt16', 'y', None, None, ''),
- ]),
-
('ColorIndex', [
('uint16', 'PaletteIndex', None, None, 'Index value to use with a selected color palette.'),
('VarF2Dot14', 'Alpha', None, None, 'Values outsided [0.,1.] reserved'),
@@ -1628,17 +1623,22 @@ otData = [
('PaintFormat2', [
('uint16', 'PaintFormat', None, None, 'Format identifier-format = 2'),
('LOffset', 'ColorLine', None, None, 'Offset (from beginning of Paint table) to ColorLine subtable.'),
- ('Point', 'p0', None, None, ''),
- ('Point', 'p1', None, None, ''),
- ('Point', 'p2', None, None, 'Normal; equal to p1 in simple cases.'),
+ ('VarInt16', 'x0', None, None, ''),
+ ('VarInt16', 'y0', None, None, ''),
+ ('VarInt16', 'x1', None, None, ''),
+ ('VarInt16', 'y1', None, None, ''),
+ ('VarInt16', 'x2', None, None, ''),
+ ('VarInt16', 'y2', None, None, ''),
]),
('PaintFormat3', [
('uint16', 'PaintFormat', None, None, 'Format identifier-format = 3'),
('LOffset', 'ColorLine', None, None, 'Offset (from beginning of Paint table) to ColorLine subtable.'),
- ('Point', 'c0', None, None, ''),
- ('Point', 'c1', None, None, ''),
+ ('VarInt16', 'x0', None, None, ''),
+ ('VarInt16', 'y0', None, None, ''),
('VarUInt16', 'r0', None, None, ''),
+ ('VarInt16', 'x1', None, None, ''),
+ ('VarInt16', 'y1', None, None, ''),
('VarUInt16', 'r1', None, None, ''),
('LOffsetTo(Affine2x2)', 'Affine', None, None, 'Offset (from beginning of Paint table) to Affine2x2 subtable.'),
]),
diff --git a/Tests/colorLib/builder_test.py b/Tests/colorLib/builder_test.py
index 3748f67cd..f7651c2a6 100644
--- a/Tests/colorLib/builder_test.py
+++ b/Tests/colorLib/builder_test.py
@@ -284,28 +284,6 @@ def test_buildColorLine():
] == stops
-def test_buildPoint():
- pt = builder.buildPoint(0, 1)
- assert pt.x == builder.VariableInt(0)
- assert pt.y == builder.VariableInt(1)
-
- pt = builder.buildPoint(
- builder.VariableInt(2, varIdx=1), builder.VariableInt(3, varIdx=2)
- )
- assert pt.x == builder.VariableInt(2, varIdx=1)
- assert pt.y == builder.VariableInt(3, varIdx=2)
-
- # float coords are rounded
- pt = builder.buildPoint(x=-2.5, y=3.5)
- assert pt.x == builder.VariableInt(-2)
- assert pt.y == builder.VariableInt(4)
-
- # tuple args are cast to VariableInt namedtuple
- pt = builder.buildPoint((1, 2), (3, 4))
- assert pt.x == builder.VariableInt(1, varIdx=2)
- assert pt.y == builder.VariableInt(3, varIdx=4)
-
-
def test_buildAffine2x2():
matrix = builder.buildAffine2x2(1.5, 0, 0.5, 2.0)
assert matrix.xx == builder.VariableFloat(1.5)
@@ -321,24 +299,23 @@ def test_buildLinearGradientPaint():
builder.buildColorStop(1.0, 2, alpha=0.8),
]
color_line = builder.buildColorLine(color_stops, extend=builder.ExtendMode.REPEAT)
- p0 = builder.buildPoint(x=100, y=200)
- p1 = builder.buildPoint(x=150, y=250)
+ p0 = (builder.VariableInt(100), builder.VariableInt(200))
+ p1 = (builder.VariableInt(150), builder.VariableInt(250))
gradient = builder.buildLinearGradientPaint(color_line, p0, p1)
assert gradient.Format == 2
assert gradient.ColorLine == color_line
- assert gradient.p0 == p0
- assert gradient.p1 == p1
- assert gradient.p2 == gradient.p1
- assert gradient.p2 is not gradient.p1
+ assert (gradient.x0, gradient.y0) == p0
+ assert (gradient.x1, gradient.y1) == p1
+ assert (gradient.x2, gradient.y2) == p1
gradient = builder.buildLinearGradientPaint({"stops": color_stops}, p0, p1)
assert gradient.ColorLine.Extend == builder.ExtendMode.PAD
assert gradient.ColorLine.ColorStop == color_stops
gradient = builder.buildLinearGradientPaint(color_line, p0, p1, p2=(150, 230))
- assert gradient.p2 == builder.buildPoint(x=150, y=230)
- assert gradient.p2 != gradient.p1
+ assert (gradient.x2.value, gradient.y2.value) == (150, 230)
+ assert (gradient.x2, gradient.y2) != (gradient.x1, gradient.y1)
def test_buildRadialGradientPaint():
@@ -348,16 +325,16 @@ def test_buildRadialGradientPaint():
builder.buildColorStop(1.0, 2, alpha=0.8),
]
color_line = builder.buildColorLine(color_stops, extend=builder.ExtendMode.REPEAT)
- c0 = builder.buildPoint(x=100, y=200)
- c1 = builder.buildPoint(x=150, y=250)
+ c0 = (builder.VariableInt(100), builder.VariableInt(200))
+ c1 = (builder.VariableInt(150), builder.VariableInt(250))
r0 = builder.VariableInt(10)
r1 = builder.VariableInt(5)
gradient = builder.buildRadialGradientPaint(color_line, c0, c1, r0, r1)
assert gradient.Format == 3
assert gradient.ColorLine == color_line
- assert gradient.c0 == c0
- assert gradient.c1 == c1
+ assert (gradient.x0, gradient.y0) == c0
+ assert (gradient.x1, gradient.y1) == c1
assert gradient.r0 == r0
assert gradient.r1 == r1
assert gradient.Affine is None
@@ -400,10 +377,10 @@ def test_buildLayerV1Record():
assert layer.Paint.ColorLine.ColorStop[0].Color.PaletteIndex == 3
assert layer.Paint.ColorLine.ColorStop[1].StopOffset.value == 1.0
assert layer.Paint.ColorLine.ColorStop[1].Color.PaletteIndex == 4
- assert layer.Paint.p0.x.value == 100
- assert layer.Paint.p0.y.value == 200
- assert layer.Paint.p1.x.value == 150
- assert layer.Paint.p1.y.value == 250
+ assert layer.Paint.x0.value == 100
+ assert layer.Paint.y0.value == 200
+ assert layer.Paint.x1.value == 150
+ assert layer.Paint.y1.value == 250
layer = builder.buildLayerV1Record(
"a",
@@ -429,11 +406,11 @@ def test_buildLayerV1Record():
assert layer.Paint.ColorLine.ColorStop[1].Color.Alpha.value == 0.8
assert layer.Paint.ColorLine.ColorStop[2].StopOffset.value == 1.0
assert layer.Paint.ColorLine.ColorStop[2].Color.PaletteIndex == 7
- assert layer.Paint.c0.x.value == 50
- assert layer.Paint.c0.y.value == 50
- assert layer.Paint.c1.x.value == 75
- assert layer.Paint.c1.y.value == 75
+ assert layer.Paint.x0.value == 50
+ assert layer.Paint.y0.value == 50
assert layer.Paint.r0.value == 30
+ assert layer.Paint.x1.value == 75
+ assert layer.Paint.y1.value == 75
assert layer.Paint.r1.value == 10
diff --git a/Tests/ttLib/tables/C_O_L_R_test.py b/Tests/ttLib/tables/C_O_L_R_test.py
index f3a08d0f9..ae4787ce6 100644
--- a/Tests/ttLib/tables/C_O_L_R_test.py
+++ b/Tests/ttLib/tables/C_O_L_R_test.py
@@ -98,18 +98,18 @@ COLR_V1_DATA = (
b"\x00\x00\x00\x00" # Paint.Color.Alpha.varIdx (0)
b"\x00\x02" # Paint.Format (2)
b"\x00\x00\x00*" # Offset to ColorLine from beginning of Paint (42)
- b"\x00\x01" # Paint.p0.x.value (1)
- b"\x00\x00\x00\x00" # Paint.p0.x.varIdx (0)
- b"\x00\x02" # Paint.p0.y.value (2)
- b"\x00\x00\x00\x00" # Paint.p0.y.varIdx (0)
- b"\xff\xfd" # Paint.p1.x.value (-3)
- b"\x00\x00\x00\x00" # Paint.p1.x.varIdx (0)
- b"\xff\xfc" # Paint.p1.y.value (-4)
- b"\x00\x00\x00\x00" # Paint.p1.y.varIdx (0)
- b"\x00\x05" # Paint.p2.x.value (5)
- b"\x00\x00\x00\x00" # Paint.p2.y.varIdx (0)
- b"\x00\x06" # Paint.p2.y.value (5)
- b"\x00\x00\x00\x00" # Paint.p2.y.varIdx (0)
+ b"\x00\x01" # Paint.x0.value (1)
+ b"\x00\x00\x00\x00" # Paint.x0.varIdx (0)
+ b"\x00\x02" # Paint.y0.value (2)
+ b"\x00\x00\x00\x00" # Paint.y0.varIdx (0)
+ b"\xff\xfd" # Paint.x1.value (-3)
+ b"\x00\x00\x00\x00" # Paint.x1.varIdx (0)
+ b"\xff\xfc" # Paint.y1.value (-4)
+ b"\x00\x00\x00\x00" # Paint.y1.varIdx (0)
+ b"\x00\x05" # Paint.x2.value (5)
+ b"\x00\x00\x00\x00" # Paint.x2.varIdx (0)
+ b"\x00\x06" # Paint.y2.value (5)
+ b"\x00\x00\x00\x00" # Paint.y2.varIdx (0)
b"\x00\x01" # ColorLine.Extend (1 or "repeat")
b"\x00\x03" # ColorLine.StopCount (3)
b"\x00\x00" # ColorLine.ColorStop[0].StopOffset.value (0.0)
@@ -129,15 +129,15 @@ COLR_V1_DATA = (
b"\x00\x00\x00\x00" # ColorLine.ColorStop[2].Color.Alpha.varIdx (0)
b"\x00\x03" # Paint.Format (3)
b"\x00\x00\x00." # Offset to ColorLine from beginning of Paint (46)
- b"\x00\x07" # Paint.c0.x.value (7)
+ b"\x00\x07" # Paint.x0.value (7)
b"\x00\x00\x00\x00"
- b"\x00\x08" # Paint.c0.y.value (8)
+ b"\x00\x08" # Paint.y0.value (8)
b"\x00\x00\x00\x00"
- b"\x00\t" # Paint.c1.x.value (9)
+ b"\x00\t" # Paint.r0.value (9)
b"\x00\x00\x00\x00"
- b"\x00\n" # Paint.c1.y.value (10)
+ b"\x00\n" # Paint.x1.value (10)
b"\x00\x00\x00\x00"
- b"\x00\x0b" # Paint.r0.value (11)
+ b"\x00\x0b" # Paint.y1.value (11)
b"\x00\x00\x00\x00"
b"\x00\x0c" # Paint.r1.value (12)
b"\x00\x00\x00\x00"
@@ -233,18 +233,12 @@ COLR_V1_XML = [
" ",
" ",
" ",
- " ",
- ' ',
- ' ',
- " ",
- " ",
- ' ',
- ' ',
- " ",
- " ",
- ' ',
- ' ',
- " ",
+ ' ',
+ ' ',
+ ' ',
+ ' ',
+ ' ',
+ ' ',
" ",
" ",
' ',
@@ -268,15 +262,11 @@ COLR_V1_XML = [
" ",
" ",
" ",
- " ",
- ' ',
- ' ',
- " ",
- " ",
- ' ',
- ' ',
- " ",
- ' ',
+ ' ',
+ ' ',
+ ' ',
+ ' ',
+ ' ',
' ',
" ",
' ',