Branch: refs/heads/main Home: https://github.com/WebKit/WebKit Commit: cf0675f3297a9890c3a7bb0226896b0904caa958 https://github.com/WebKit/WebKit/commit/cf0675f3297a9890c3a7bb0226896b0904caa958 Author: Sam Weinig <wei...@apple.com> Date: 2022-09-24 (Sat, 24 Sep 2022)
Changed paths: A LayoutTests/fast/gradients/gradient-using-specified-hue-interpolation-method-hsl-expected-mismatch.html A LayoutTests/fast/gradients/gradient-using-specified-hue-interpolation-method-hsl.html A LayoutTests/fast/gradients/gradient-using-specified-hue-interpolation-method-hwb-expected-mismatch.html A LayoutTests/fast/gradients/gradient-using-specified-hue-interpolation-method-hwb.html A LayoutTests/fast/gradients/gradient-using-specified-hue-interpolation-method-lch-expected-mismatch.html A LayoutTests/fast/gradients/gradient-using-specified-hue-interpolation-method-lch.html A LayoutTests/fast/gradients/gradient-using-specified-hue-interpolation-method-oklch-expected-mismatch.html A LayoutTests/fast/gradients/gradient-using-specified-hue-interpolation-method-oklch.html M LayoutTests/platform/glib/TestExpectations M Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp M Source/WebCore/platform/graphics/ColorConversion.cpp M Source/WebCore/platform/graphics/ColorInterpolation.cpp M Source/WebCore/platform/graphics/ColorModels.h M Source/WebCore/platform/graphics/ColorNormalization.h M Source/WebCore/platform/graphics/ColorSerialization.cpp Log Message: ----------- Hue interpolation "specified" is not correctly implemented for hues < 0 or > 360 https://bugs.webkit.org/show_bug.cgi?id=245552 <rdar://100344615> Reviewed by Darin Adler. Defers normalization of the hue component of lch(), oklch(), hsl() and hwb() colors until necessary, such as due to a color conversion, non-"specified" hue interpolation method use or serialization (though that one is unclear and is with the spec editors to decide on via https://github.com/w3c/csswg-drafts/issues/7782). By deferring this normalization, we now implement the "specified" hue interpolation method correctly, which explicitly allows for a hue to rotate around the spectrum multiple times if the difference between angles requires it. To support this for hsl() and hwb(), which usually are stored as 8-bit sRGB, we use the same technique as was employed for "none" support, and conditionally use their extended form if an angle < 0 or > 360 is provided. This means that in the common cases there will be no change in memory usage. Additionally, I update the "longer" hue interpolation method to match the updated spec which changed a "< 0" to a "<= 0". Tests were added to show that gradients that prior to this change would render the same due to angle normalization, now render differently. * LayoutTests/fast/gradients/gradient-using-specified-hue-interpolation-method-hsl-expected-mismatch.html: Added. * LayoutTests/fast/gradients/gradient-using-specified-hue-interpolation-method-hsl.html: Added. * LayoutTests/fast/gradients/gradient-using-specified-hue-interpolation-method-hwb-expected-mismatch.html: Added. * LayoutTests/fast/gradients/gradient-using-specified-hue-interpolation-method-hwb.html: Added. * LayoutTests/fast/gradients/gradient-using-specified-hue-interpolation-method-lch-expected-mismatch.html: Added. * LayoutTests/fast/gradients/gradient-using-specified-hue-interpolation-method-lch.html: Added. * LayoutTests/fast/gradients/gradient-using-specified-hue-interpolation-method-oklch-expected-mismatch.html: Added. * LayoutTests/fast/gradients/gradient-using-specified-hue-interpolation-method-oklch.html: Added. * Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp: (WebCore::CSSPropertyParserHelpers::colorByNormalizingHSLComponents): (WebCore::CSSPropertyParserHelpers::parseHWBParameters): (WebCore::CSSPropertyParserHelpers::parseLCHParameters): * Source/WebCore/platform/graphics/ColorConversion.cpp: (WebCore::HSLA<float>>::convert): (WebCore::HWBA<float>>::convert): * Source/WebCore/platform/graphics/ColorInterpolation.cpp: (WebCore::fixupHueComponentsPriorToInterpolation): * Source/WebCore/platform/graphics/ColorModels.h: * Source/WebCore/platform/graphics/ColorNormalization.h: (WebCore::makeColorTypeByNormalizingComponents<HWBA<float>>): (WebCore::makeColorTypeByNormalizingComponents<HSLA<float>>): Deleted. (WebCore::makeColorTypeByNormalizingComponents<LCHA<float>>): Deleted. (WebCore::makeColorTypeByNormalizingComponents<OKLCHA<float>>): Deleted. * Source/WebCore/platform/graphics/ColorSerialization.cpp: (WebCore::serializationOfLabLikeColorsForCSS): (WebCore::serializationOfLCHLikeColorsForCSS): (WebCore::serializationForCSS): (WebCore::serializationOfLabFamilyForCSS): Deleted. Canonical link: https://commits.webkit.org/254833@main _______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes