mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-29 11:57:32 +09:00
Issue #3003 - Add CSS lch() color parsing support
This commit is contained in:
parent
30d4aa00c1
commit
b0d43e27e9
4 changed files with 121 additions and 11 deletions
|
|
@ -1237,6 +1237,7 @@ protected:
|
|||
ComponentType& aA);
|
||||
bool ParseHSLColor(float& aHue, float& aSaturation, float& aLightness,
|
||||
float& aOpacity);
|
||||
bool ParseLCHColor(nscolor& aColor);
|
||||
bool ParseOKLabColor(nscolor& aColor);
|
||||
bool ParseOKLCHColor(nscolor& aColor);
|
||||
bool ParseOKLabComponent(float& aComponent, float aPercentScale,
|
||||
|
|
@ -7623,6 +7624,14 @@ CSSParserImpl::ParseColor(nsCSSValue& aValue)
|
|||
SkipUntil(')');
|
||||
return CSSParseResult::Error;
|
||||
}
|
||||
else if (mToken.mIdent.LowerCaseEqualsLiteral("lch")) {
|
||||
if (ParseLCHColor(rgba)) {
|
||||
aValue.SetColorValue(rgba);
|
||||
return CSSParseResult::Ok;
|
||||
}
|
||||
SkipUntil(')');
|
||||
return CSSParseResult::Error;
|
||||
}
|
||||
else if (mToken.mIdent.LowerCaseEqualsLiteral("oklab")) {
|
||||
if (ParseOKLabColor(rgba)) {
|
||||
aValue.SetColorValue(rgba);
|
||||
|
|
@ -7868,6 +7877,22 @@ CSSParserImpl::ParseOKLabComponent(float& aComponent, float aPercentScale,
|
|||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
CSSParserImpl::ParseLCHColor(nscolor& aColor)
|
||||
{
|
||||
float l, chroma, hue, alpha;
|
||||
|
||||
if (!ParseOKLabComponent(l, kLabLightnessMax, Nothing()) ||
|
||||
!ParseOKLabComponent(chroma, kLchPercentScaleC, Nothing()) ||
|
||||
!ParseHue(hue) ||
|
||||
!ParseColorOpacityAndCloseParen(alpha, '/')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
aColor = LchToSRGBColor(l, chroma, hue, alpha);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
CSSParserImpl::ParseOKLabColor(nscolor& aColor)
|
||||
{
|
||||
|
|
@ -8862,6 +8887,7 @@ CSSParserImpl::ParseVariant(nsCSSValue& aValue,
|
|||
tk->mIdent.LowerCaseEqualsLiteral("hsl") ||
|
||||
tk->mIdent.LowerCaseEqualsLiteral("rgba") ||
|
||||
tk->mIdent.LowerCaseEqualsLiteral("hsla") ||
|
||||
tk->mIdent.LowerCaseEqualsLiteral("lch") ||
|
||||
tk->mIdent.LowerCaseEqualsLiteral("oklab") ||
|
||||
tk->mIdent.LowerCaseEqualsLiteral("oklch") ||
|
||||
tk->mIdent.LowerCaseEqualsLiteral("color-mix"))))
|
||||
|
|
@ -11117,7 +11143,8 @@ CSSParserImpl::ParseGradientInterpolationMethod()
|
|||
mToken.mIdent.LowerCaseEqualsLiteral("oklab")) {
|
||||
isPolarColorSpace = false;
|
||||
} else if (mToken.mIdent.LowerCaseEqualsLiteral("hsl") ||
|
||||
mToken.mIdent.LowerCaseEqualsLiteral("oklch")) {
|
||||
mToken.mIdent.LowerCaseEqualsLiteral("oklch") ||
|
||||
mToken.mIdent.LowerCaseEqualsLiteral("lch")) {
|
||||
isPolarColorSpace = true;
|
||||
} else {
|
||||
return CSSParseResult::Error;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue