[C_P_A_L_] make Color a subclass of namedtuple
so that's comparable/hashable/immutable and can be used as key in a dict or set. The fromXML instance method was dropped since it relied on the object being mutable. A fromHex classmethod replaces it.
This commit is contained in:
parent
4de8342310
commit
173a0f5011
@ -7,6 +7,7 @@ from fontTools.misc.py23 import *
|
||||
from fontTools.misc.textTools import safeEval
|
||||
from . import DefaultTable
|
||||
import array
|
||||
from collections import namedtuple
|
||||
import struct
|
||||
import sys
|
||||
|
||||
@ -206,8 +207,8 @@ class table_C_P_A_L_(DefaultTable.DefaultTable):
|
||||
for element in content:
|
||||
if isinstance(element, basestring):
|
||||
continue
|
||||
color = Color()
|
||||
color.fromXML(element[0], element[1], element[2], ttFont)
|
||||
attrs = element[1]
|
||||
color = Color.fromHex(attrs["value"])
|
||||
palette.append(color)
|
||||
self.palettes.append(palette)
|
||||
elif name == "paletteEntryLabels":
|
||||
@ -230,13 +231,7 @@ class table_C_P_A_L_(DefaultTable.DefaultTable):
|
||||
self.paletteEntryLabels = [0] * self.numPaletteEntries
|
||||
|
||||
|
||||
class Color(object):
|
||||
|
||||
def __init__(self, blue=None, green=None, red=None, alpha=None):
|
||||
self.blue = blue
|
||||
self.green = green
|
||||
self.red = red
|
||||
self.alpha = alpha
|
||||
class Color(namedtuple("Color", "blue green red alpha")):
|
||||
|
||||
def hex(self):
|
||||
return "#%02X%02X%02X%02X" % (self.red, self.green, self.blue, self.alpha)
|
||||
@ -248,11 +243,12 @@ class Color(object):
|
||||
writer.simpletag("color", value=self.hex(), index=index)
|
||||
writer.newline()
|
||||
|
||||
def fromXML(self, eltname, attrs, content, ttFont):
|
||||
value = attrs["value"]
|
||||
@classmethod
|
||||
def fromHex(cls, value):
|
||||
if value[0] == '#':
|
||||
value = value[1:]
|
||||
self.red = int(value[0:2], 16)
|
||||
self.green = int(value[2:4], 16)
|
||||
self.blue = int(value[4:6], 16)
|
||||
self.alpha = int(value[6:8], 16) if len (value) >= 8 else 0xFF
|
||||
red = int(value[0:2], 16)
|
||||
green = int(value[2:4], 16)
|
||||
blue = int(value[4:6], 16)
|
||||
alpha = int(value[6:8], 16) if len (value) >= 8 else 0xFF
|
||||
return cls(red=red, green=green, blue=blue, alpha=alpha)
|
||||
|
Loading…
x
Reference in New Issue
Block a user