mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-29 20:07:30 +09:00
Issue #2982 - Follow-up: allow color-mix to work with oklab and oklch
Tag #2489 and #3003
This commit is contained in:
parent
e602080115
commit
7e0818c9ec
7 changed files with 460 additions and 59 deletions
|
|
@ -17,6 +17,7 @@
|
|||
#include "gfxFontConstants.h"
|
||||
#include "imgIRequest.h"
|
||||
#include "imgRequestProxy.h"
|
||||
#include "nsCSSNonSRGBColorSpace.h"
|
||||
#include "nsIDocument.h"
|
||||
#include "nsNetUtil.h"
|
||||
#include "nsPresContext.h"
|
||||
|
|
@ -1743,6 +1744,12 @@ nsCSSValue::AppendToString(nsCSSPropertyID aProperty, nsAString& aResult,
|
|||
case mozilla::css::ColorMixColorSpace::HSL:
|
||||
aResult.AppendLiteral("hsl");
|
||||
break;
|
||||
case mozilla::css::ColorMixColorSpace::Oklab:
|
||||
aResult.AppendLiteral("oklab");
|
||||
break;
|
||||
case mozilla::css::ColorMixColorSpace::Oklch:
|
||||
aResult.AppendLiteral("oklch");
|
||||
break;
|
||||
}
|
||||
|
||||
// append color1 and color2
|
||||
|
|
@ -2050,6 +2057,8 @@ nsCSSValue::AppendToString(nsCSSPropertyID aProperty, nsAString& aResult,
|
|||
case eCSSUnit_PercentageRGBAColor: break;
|
||||
case eCSSUnit_HSLColor: break;
|
||||
case eCSSUnit_HSLAColor: break;
|
||||
case eCSSUnit_OklabColor: break;
|
||||
case eCSSUnit_OklchColor: break;
|
||||
case eCSSUnit_ComplexColor: break;
|
||||
case eCSSUnit_ColorMix: break;
|
||||
case eCSSUnit_Percent: aResult.Append(char16_t('%')); break;
|
||||
|
|
@ -2258,6 +2267,8 @@ nsCSSValue::SizeOfExcludingThis(mozilla::MallocSizeOf aMallocSizeOf) const
|
|||
case eCSSUnit_PercentageRGBAColor:
|
||||
case eCSSUnit_HSLColor:
|
||||
case eCSSUnit_HSLAColor:
|
||||
case eCSSUnit_OklabColor:
|
||||
case eCSSUnit_OklchColor:
|
||||
n += mValue.mFloatColor->SizeOfIncludingThis(aMallocSizeOf);
|
||||
break;
|
||||
|
||||
|
|
@ -3254,6 +3265,16 @@ nsCSSValueFloatColor::GetColorValue(nsCSSUnit aUnit) const
|
|||
NSToIntRound(mozilla::clamped(mAlpha, 0.0f, 1.0f) * 255.0f));
|
||||
}
|
||||
|
||||
if (aUnit == eCSSUnit_OklabColor) {
|
||||
return css::OklabToSRGBColor(mComponent1, mComponent2, mComponent3,
|
||||
mAlpha);
|
||||
}
|
||||
|
||||
if (aUnit == eCSSUnit_OklchColor) {
|
||||
return css::OklchToSRGBColor(mComponent1, mComponent2, mComponent3,
|
||||
mAlpha);
|
||||
}
|
||||
|
||||
// HSL color
|
||||
MOZ_ASSERT(aUnit == eCSSUnit_HSLColor ||
|
||||
aUnit == eCSSUnit_HSLAColor);
|
||||
|
|
@ -3282,8 +3303,14 @@ nsCSSValueFloatColor::AppendToString(nsCSSUnit aUnit, nsAString& aResult) const
|
|||
bool showAlpha = (mAlpha != 1.0f);
|
||||
bool isHSL = (aUnit == eCSSUnit_HSLColor ||
|
||||
aUnit == eCSSUnit_HSLAColor);
|
||||
bool isOklab = aUnit == eCSSUnit_OklabColor;
|
||||
bool isOklch = aUnit == eCSSUnit_OklchColor;
|
||||
|
||||
if (isHSL) {
|
||||
if (isOklab) {
|
||||
aResult.AppendLiteral("oklab");
|
||||
} else if (isOklch) {
|
||||
aResult.AppendLiteral("oklch");
|
||||
} else if (isHSL) {
|
||||
aResult.AppendLiteral("hsl");
|
||||
} else {
|
||||
aResult.AppendLiteral("rgb");
|
||||
|
|
@ -3293,22 +3320,38 @@ nsCSSValueFloatColor::AppendToString(nsCSSUnit aUnit, nsAString& aResult) const
|
|||
} else {
|
||||
aResult.Append('(');
|
||||
}
|
||||
if (isHSL) {
|
||||
if (isOklab || isOklch) {
|
||||
aResult.AppendFloat(mComponent1);
|
||||
aResult.Append(' ');
|
||||
aResult.AppendFloat(mComponent2);
|
||||
aResult.Append(' ');
|
||||
aResult.AppendFloat(mComponent3);
|
||||
} else if (isHSL) {
|
||||
aResult.AppendFloat(mComponent1 * 360.0f);
|
||||
aResult.AppendLiteral(", ");
|
||||
} else {
|
||||
aResult.AppendFloat(mComponent1 * 100.0f);
|
||||
aResult.AppendLiteral("%, ");
|
||||
}
|
||||
aResult.AppendFloat(mComponent2 * 100.0f);
|
||||
aResult.AppendLiteral("%, ");
|
||||
aResult.AppendFloat(mComponent3 * 100.0f);
|
||||
if (showAlpha) {
|
||||
if (!isOklab && !isOklch) {
|
||||
aResult.AppendFloat(mComponent2 * 100.0f);
|
||||
aResult.AppendLiteral("%, ");
|
||||
aResult.AppendFloat(mComponent3 * 100.0f);
|
||||
}
|
||||
if (showAlpha) {
|
||||
if (isOklab || isOklch) {
|
||||
aResult.AppendLiteral(" / ");
|
||||
} else {
|
||||
aResult.AppendLiteral("%, ");
|
||||
}
|
||||
aResult.AppendFloat(mAlpha);
|
||||
aResult.Append(')');
|
||||
} else {
|
||||
aResult.AppendLiteral("%)");
|
||||
if (isOklab || isOklch) {
|
||||
aResult.Append(')');
|
||||
} else {
|
||||
aResult.AppendLiteral("%)");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue