rename COLR Color -> ColorIndex, transparency to alpha

https://github.com/googlefonts/colr-gradients-spec/issues/17
https://github.com/googlefonts/colr-gradients-spec/issues/19
This commit is contained in:
Cosimo Lupo 2020-07-02 10:27:47 +01:00
parent ff7dc9a1c5
commit dea9896421
No known key found for this signature in database
GPG Key ID: 179A8F0895A02F4F
4 changed files with 68 additions and 71 deletions

View File

@ -275,7 +275,7 @@ def buildCPAL(
# COLR v1 tables
# See draft proposal at: https://github.com/googlefonts/colr-gradients-spec
_DEFAULT_TRANSPARENCY = VariableFloat(0.0)
_DEFAULT_ALPHA = VariableFloat(1.0)
def _splitSolidAndGradientGlyphs(
@ -290,7 +290,7 @@ def _splitSolidAndGradientGlyphs(
paint = _to_ot_paint(paint)
if (
paint.Format != 1
or paint.Color.Transparency.value != _DEFAULT_TRANSPARENCY.value
or paint.Color.Alpha.value != _DEFAULT_ALPHA.value
):
allSolidColors = False
newLayers.append((layerGlyph, paint))
@ -323,32 +323,32 @@ _to_variable_float = partial(_to_variable_value, cls=VariableFloat)
_to_variable_int = partial(_to_variable_value, cls=VariableInt)
def buildColor(
paletteIndex: int, transparency: _ScalarInput = _DEFAULT_TRANSPARENCY
) -> ot.Color:
self = ot.Color()
def buildColorIndex(
paletteIndex: int, alpha: _ScalarInput = _DEFAULT_ALPHA
) -> ot.ColorIndex:
self = ot.ColorIndex()
self.PaletteIndex = int(paletteIndex)
self.Transparency = _to_variable_float(transparency)
self.Alpha = _to_variable_float(alpha)
return self
def buildSolidColorPaint(
paletteIndex: int, transparency: _ScalarInput = _DEFAULT_TRANSPARENCY
paletteIndex: int, alpha: _ScalarInput = _DEFAULT_ALPHA
) -> ot.Paint:
self = ot.Paint()
self.Format = 1
self.Color = buildColor(paletteIndex, transparency)
self.Color = buildColorIndex(paletteIndex, alpha)
return self
def buildColorStop(
offset: _ScalarInput,
paletteIndex: int,
transparency: _ScalarInput = _DEFAULT_TRANSPARENCY,
alpha: _ScalarInput = _DEFAULT_ALPHA,
) -> ot.ColorStop:
self = ot.ColorStop()
self.StopOffset = _to_variable_float(offset)
self.Color = buildColor(paletteIndex, transparency)
self.Color = buildColorIndex(paletteIndex, alpha)
return self

View File

@ -1604,14 +1604,14 @@ otData = [
('VarInt16', 'y', None, None, ''),
]),
('Color', [
('ColorIndex', [
('uint16', 'PaletteIndex', None, None, 'Index value to use with a selected color palette.'),
('VarF2Dot14', 'Transparency', None, None, 'Values outsided [0.,1.] reserved'),
('VarF2Dot14', 'Alpha', None, None, 'Values outsided [0.,1.] reserved'),
]),
('ColorStop', [
('VarF2Dot14', 'StopOffset', None, None, ''),
('Color', 'Color', None, None, ''),
('ColorIndex', 'Color', None, None, ''),
]),
('ColorLine', [
@ -1622,7 +1622,7 @@ otData = [
('PaintFormat1', [
('uint16', 'PaintFormat', None, None, 'Format identifier-format = 1'),
('Color', 'Color', None, None, 'A solid color paint.'),
('ColorIndex', 'Color', None, None, 'A solid color paint.'),
]),
('PaintFormat2', [

View File

@ -188,63 +188,61 @@ def test_buildCPAL_invalid_color():
builder.buildCPAL([[(0, 0, 0, 0)], [(1, 1, -1, 2)]])
def test_buildColor():
c = builder.buildColor(0)
def test_buildColorIndex():
c = builder.buildColorIndex(0)
assert c.PaletteIndex == 0
assert c.Transparency.value == 0.0
assert c.Transparency.varIdx == 0
assert c.Alpha.value == 1.0
assert c.Alpha.varIdx == 0
c = builder.buildColor(1, transparency=0.5)
c = builder.buildColorIndex(1, alpha=0.5)
assert c.PaletteIndex == 1
assert c.Transparency.value == 0.5
assert c.Transparency.varIdx == 0
assert c.Alpha.value == 0.5
assert c.Alpha.varIdx == 0
c = builder.buildColor(3, transparency=builder.VariableFloat(0.5, varIdx=2))
c = builder.buildColorIndex(3, alpha=builder.VariableFloat(0.5, varIdx=2))
assert c.PaletteIndex == 3
assert c.Transparency.value == 0.5
assert c.Transparency.varIdx == 2
assert c.Alpha.value == 0.5
assert c.Alpha.varIdx == 2
def test_buildSolidColorPaint():
p = builder.buildSolidColorPaint(0)
assert p.Format == 1
assert p.Color.PaletteIndex == 0
assert p.Color.Transparency.value == 0.0
assert p.Color.Transparency.varIdx == 0
assert p.Color.Alpha.value == 1.0
assert p.Color.Alpha.varIdx == 0
p = builder.buildSolidColorPaint(1, transparency=0.5)
p = builder.buildSolidColorPaint(1, alpha=0.5)
assert p.Format == 1
assert p.Color.PaletteIndex == 1
assert p.Color.Transparency.value == 0.5
assert p.Color.Transparency.varIdx == 0
assert p.Color.Alpha.value == 0.5
assert p.Color.Alpha.varIdx == 0
p = builder.buildSolidColorPaint(
3, transparency=builder.VariableFloat(0.5, varIdx=2)
)
p = builder.buildSolidColorPaint(3, alpha=builder.VariableFloat(0.5, varIdx=2))
assert p.Format == 1
assert p.Color.PaletteIndex == 3
assert p.Color.Transparency.value == 0.5
assert p.Color.Transparency.varIdx == 2
assert p.Color.Alpha.value == 0.5
assert p.Color.Alpha.varIdx == 2
def test_buildColorStop():
s = builder.buildColorStop(0.1, 2)
assert s.StopOffset == builder.VariableFloat(0.1)
assert s.Color.PaletteIndex == 2
assert s.Color.Transparency == builder._DEFAULT_TRANSPARENCY
assert s.Color.Alpha == builder._DEFAULT_ALPHA
s = builder.buildColorStop(offset=0.2, paletteIndex=3, transparency=0.4)
s = builder.buildColorStop(offset=0.2, paletteIndex=3, alpha=0.4)
assert s.StopOffset == builder.VariableFloat(0.2)
assert s.Color == builder.buildColor(3, transparency=0.4)
assert s.Color == builder.buildColorIndex(3, alpha=0.4)
s = builder.buildColorStop(
offset=builder.VariableFloat(0.0, varIdx=1),
paletteIndex=0,
transparency=builder.VariableFloat(0.3, varIdx=2),
alpha=builder.VariableFloat(0.3, varIdx=2),
)
assert s.StopOffset == builder.VariableFloat(0.0, varIdx=1)
assert s.Color.PaletteIndex == 0
assert s.Color.Transparency == builder.VariableFloat(0.3, varIdx=2)
assert s.Color.Alpha == builder.VariableFloat(0.3, varIdx=2)
def test_buildColorLine():
@ -272,15 +270,15 @@ def test_buildColorLine():
] == stops
stops = [
{"offset": (0.0, 1), "paletteIndex": 0, "transparency": (0.5, 2)},
{"offset": (1.0, 3), "paletteIndex": 1, "transparency": (0.3, 4)},
{"offset": (0.0, 1), "paletteIndex": 0, "alpha": (0.5, 2)},
{"offset": (1.0, 3), "paletteIndex": 1, "alpha": (0.3, 4)},
]
cline = builder.buildColorLine(stops)
assert [
{
"offset": cs.StopOffset,
"paletteIndex": cs.Color.PaletteIndex,
"transparency": cs.Color.Transparency,
"alpha": cs.Color.Alpha,
}
for cs in cline.ColorStop
] == stops
@ -320,7 +318,7 @@ def test_buildLinearGradientPaint():
color_stops = [
builder.buildColorStop(0.0, 0),
builder.buildColorStop(0.5, 1),
builder.buildColorStop(1.0, 2, transparency=0.8),
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)
@ -347,7 +345,7 @@ def test_buildRadialGradientPaint():
color_stops = [
builder.buildColorStop(0.0, 0),
builder.buildColorStop(0.5, 1),
builder.buildColorStop(1.0, 2, transparency=0.8),
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)
@ -389,7 +387,7 @@ def test_buildLayerV1Record():
layer = builder.buildLayerV1Record("a", builder.buildSolidColorPaint(3, 0.9))
assert layer.Paint.Format == 1
assert layer.Paint.Color.PaletteIndex == 3
assert layer.Paint.Color.Transparency.value == 0.9
assert layer.Paint.Color.Alpha.value == 0.9
layer = builder.buildLayerV1Record(
"a",
@ -413,7 +411,7 @@ def test_buildLayerV1Record():
{
"stops": [
(0.0, 5),
{"offset": 0.5, "paletteIndex": 6, "transparency": 0.8},
{"offset": 0.5, "paletteIndex": 6, "alpha": 0.8},
(1.0, 7),
]
},
@ -428,7 +426,7 @@ def test_buildLayerV1Record():
assert layer.Paint.ColorLine.ColorStop[0].Color.PaletteIndex == 5
assert layer.Paint.ColorLine.ColorStop[1].StopOffset.value == 0.5
assert layer.Paint.ColorLine.ColorStop[1].Color.PaletteIndex == 6
assert layer.Paint.ColorLine.ColorStop[1].Color.Transparency.value == 0.8
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
@ -475,7 +473,7 @@ def test_buildLayerV1Record_from_dict():
def test_buildLayerV1List():
layers = [
("a", 1),
("b", {"format": 1, "paletteIndex": 2, "transparency": 0.5}),
("b", {"format": 1, "paletteIndex": 2, "alpha": 0.5}),
(
"c",
{
@ -492,7 +490,7 @@ def test_buildLayerV1List():
"colorLine": {
"stops": [
{"offset": 0.0, "paletteIndex": 5},
{"offset": 0.5, "paletteIndex": 6, "transparency": 0.8},
{"offset": 0.5, "paletteIndex": 6, "alpha": 0.8},
{"offset": 1.0, "paletteIndex": 7},
]
},
@ -525,7 +523,7 @@ def test_buildBaseGlyphV1List():
colorGlyphs = {
"a": [("b", 0), ("c", 1)],
"d": [
("e", {"format": 1, "paletteIndex": 2, "transparency": 0.8}),
("e", {"format": 1, "paletteIndex": 2, "alpha": 0.8}),
(
"f",
{
@ -581,7 +579,7 @@ def test_splitSolidAndGradientGlyphs():
assert not colorGlyphsV1
colorGlyphs = {
"a": [("b", builder.buildSolidColorPaint(paletteIndex=0, transparency=1.0))]
"a": [("b", builder.buildSolidColorPaint(paletteIndex=0, alpha=0.0))]
}
colorGlyphsV0, colorGlyphsV1 = builder._splitSolidAndGradientGlyphs(colorGlyphs)
@ -649,7 +647,7 @@ class BuildCOLRTest(object):
"r1": 2,
},
),
("c", {"format": 1, "paletteIndex": 2, "transparency": 0.8}),
("c", {"format": 1, "paletteIndex": 2, "alpha": 0.8}),
],
"d": [
(
@ -713,8 +711,7 @@ class BuildCOLRTest(object):
)
assert colr.table.BaseGlyphV1List.BaseGlyphV1Record[0].BaseGlyph == "d"
assert isinstance(
colr.table.BaseGlyphV1List.BaseGlyphV1Record[0].LayerV1List,
ot.LayerV1List,
colr.table.BaseGlyphV1List.BaseGlyphV1Record[0].LayerV1List, ot.LayerV1List
)
assert (
colr.table.BaseGlyphV1List.BaseGlyphV1Record[0]

View File

@ -94,8 +94,8 @@ COLR_V1_DATA = (
b"\x00\x00\x00~" # Offset to Paint from beginning of LayerV1List (126)
b"\x00\x01" # Paint.Format (1)
b"\x00\x02" # Paint.Color.PaletteIndex (2)
b" \x00" # Paint.Color.Transparency.value (0.5)
b"\x00\x00\x00\x00" # Paint.Color.Transparency.varIdx (0)
b" \x00" # Paint.Color.Alpha.value (0.5)
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)
@ -115,18 +115,18 @@ COLR_V1_DATA = (
b"\x00\x00" # ColorLine.ColorStop[0].StopOffset.value (0.0)
b"\x00\x00\x00\x00" # ColorLine.ColorStop[0].StopOffset.varIdx (0)
b"\x00\x03" # ColorLine.ColorStop[0].Color.PaletteIndex (3)
b"\x00\x00" # ColorLine.ColorStop[0].Color.Transparency.value (0.0)
b"\x00\x00\x00\x00" # ColorLine.ColorStop[0].Color.Transparency.varIdx (0)
b"@\x00" # ColorLine.ColorStop[0].Color.Alpha.value (1.0)
b"\x00\x00\x00\x00" # ColorLine.ColorStop[0].Color.Alpha.varIdx (0)
b" \x00" # ColorLine.ColorStop[1].StopOffset.value (0.5)
b"\x00\x00\x00\x00" # ColorLine.ColorStop[1].StopOffset.varIdx (0)
b"\x00\x04" # ColorLine.ColorStop[1].Color.PaletteIndex (4)
b"\x00\x00" # ColorLine.ColorStop[1].Color.Transparency.value (0.0)
b"\x00\x00\x00\x00" # ColorLine.ColorStop[1].Color.Transparency.varIdx (0)
b"@\x00" # ColorLine.ColorStop[1].Color.Alpha.value (1.0)
b"\x00\x00\x00\x00" # ColorLine.ColorStop[1].Color.Alpha.varIdx (0)
b"@\x00" # ColorLine.ColorStop[2].StopOffset.value (1.0)
b"\x00\x00\x00\x00" # ColorLine.ColorStop[2].StopOffset.varIdx (0)
b"\x00\x05" # ColorLine.ColorStop[2].Color.PaletteIndex (5)
b"\x00\x00" # ColorLine.ColorStop[2].Color.Transparency.value (0.0)
b"\x00\x00\x00\x00" # ColorLine.ColorStop[2].Color.Transparency.varIdx (0)
b"@\x00" # ColorLine.ColorStop[2].Color.Alpha.value (1.0)
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)
@ -147,12 +147,12 @@ COLR_V1_DATA = (
b"\x00\x00" # ColorLine.ColorStop[0].StopOffset.value (0.0)
b"\x00\x00\x00\x00"
b"\x00\x06" # ColorLine.ColorStop[0].Color.PaletteIndex (6)
b"\x00\x00"
b"@\x00" # ColorLine.ColorStop[0].Color.Alpha.value (1.0)
b"\x00\x00\x00\x00"
b"@\x00" # ColorLine.ColorStop[1].StopOffset.value (1.0)
b"\x00\x00\x00\x00"
b"\x00\x07" # ColorLine.ColorStop[1].Color.PaletteIndex (7)
b"\x19\x9a" # ColorLine.ColorStop[1].Color.Transparency.value (0.4)
b"\x19\x9a" # ColorLine.ColorStop[1].Color.Alpha.value (0.4)
b"\x00\x00\x00\x00"
b"\xff\xf3\x00\x00" # Affine2x2.xx.value (-13)
b"\x00\x00\x00\x00"
@ -201,7 +201,7 @@ COLR_V1_XML = [
' <Paint Format="1">',
" <Color>",
' <PaletteIndex value="2"/>',
' <Transparency value="0.5"/>',
' <Alpha value="0.5"/>',
" </Color>",
" </Paint>",
" </LayerV1Record>",
@ -215,21 +215,21 @@ COLR_V1_XML = [
' <StopOffset value="0.0"/>',
" <Color>",
' <PaletteIndex value="3"/>',
' <Transparency value="0.0"/>',
' <Alpha value="1.0"/>',
" </Color>",
" </ColorStop>",
' <ColorStop index="1">',
' <StopOffset value="0.5"/>',
" <Color>",
' <PaletteIndex value="4"/>',
' <Transparency value="0.0"/>',
' <Alpha value="1.0"/>',
" </Color>",
" </ColorStop>",
' <ColorStop index="2">',
' <StopOffset value="1.0"/>',
" <Color>",
' <PaletteIndex value="5"/>',
' <Transparency value="0.0"/>',
' <Alpha value="1.0"/>',
" </Color>",
" </ColorStop>",
" </ColorLine>",
@ -257,14 +257,14 @@ COLR_V1_XML = [
' <StopOffset value="0.0"/>',
" <Color>",
' <PaletteIndex value="6"/>',
' <Transparency value="0.0"/>',
' <Alpha value="1.0"/>',
" </Color>",
" </ColorStop>",
' <ColorStop index="1">',
' <StopOffset value="1.0"/>',
" <Color>",
' <PaletteIndex value="7"/>',
' <Transparency value="0.4"/>',
' <Alpha value="0.4"/>',
" </Color>",
" </ColorStop>",
" </ColorLine>",