Relax validation of QssColor values

Fixes #2370
This commit is contained in:
Florian Bruhin 2017-03-01 18:11:53 +01:00
parent 65f407e926
commit 1f12b4c1c1
2 changed files with 9 additions and 25 deletions

View File

@ -694,30 +694,17 @@ class CssColor(BaseType):
class QssColor(CssColor):
"""Base class for a color value.
Class attributes:
color_func_regexes: Valid function regexes.
"""
num = r'[0-9]{1,3}%?'
color_func_regexes = [
r'rgb\({num},\s*{num},\s*{num}\)'.format(num=num),
r'rgba\({num},\s*{num},\s*{num},\s*{num}\)'.format(num=num),
r'hsv\({num},\s*{num},\s*{num}\)'.format(num=num),
r'hsva\({num},\s*{num},\s*{num},\s*{num}\)'.format(num=num),
r'qlineargradient\(.*\)',
r'qradialgradient\(.*\)',
r'qconicalgradient\(.*\)',
]
"""Color used in a Qt stylesheet."""
def validate(self, value):
functions = ['rgb', 'rgba', 'hsv', 'hsva', 'qlineargradient',
'qradialgradient', 'qconicalgradient']
self._basic_validation(value)
if not value:
return
elif any(re.match(r, value) for r in self.color_func_regexes):
# QColor doesn't handle these, so we do the best we can easily
elif (any(value.startswith(func + '(') for func in functions) and
value.endswith(')')):
# QColor doesn't handle these
pass
elif QColor.isValidColor(value):
pass

View File

@ -879,19 +879,16 @@ class ColorTests:
('#12', []),
('foobar', []),
('42', []),
('rgb(1, 2, 3, 4)', []),
('foo(1, 2, 3)', []),
('rgb(1, 2, 3', []),
('rgb(0, 0, 0)', [configtypes.QssColor]),
('rgb(0,0,0)', [configtypes.QssColor]),
('-foobar(42)', [configtypes.CssColor]),
('rgba(255, 255, 255, 255)', [configtypes.QssColor]),
('rgba(255,255,255,255)', [configtypes.QssColor]),
('hsv(359, 255, 255)', [configtypes.QssColor]),
('hsva(359, 255, 255, 255)', [configtypes.QssColor]),
('hsv(10%, 10%, 10%)', [configtypes.QssColor]),
('rgba(255, 255, 255, 1.0)', [configtypes.QssColor]),
('hsv(10%,10%,10%)', [configtypes.QssColor]),
('qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 white, '
'stop: 0.4 gray, stop:1 green)', [configtypes.QssColor]),
('qconicalgradient(cx:0.5, cy:0.5, angle:30, stop:0 white, '