Branch: refs/heads/main Home: https://github.com/WebKit/WebKit Commit: f62447bff59b85890116e58a9740fc50113bba06 https://github.com/WebKit/WebKit/commit/f62447bff59b85890116e58a9740fc50113bba06 Author: Sam Weinig <wei...@apple.com> Date: 2022-11-01 (Tue, 01 Nov 2022)
Changed paths: M Source/WebCore/css/CSSGradientValue.cpp M Source/WebCore/css/CSSGradientValue.h M Source/WebCore/css/CSSValue.cpp M Source/WebCore/css/CSSValue.h M Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp M Source/WebCore/html/HTMLInputElement.cpp M Source/WebCore/rendering/style/StyleGradientImage.cpp M Source/WebCore/rendering/style/StyleGradientImage.h M Source/WebCore/style/StyleBuilderState.cpp M Source/WebCore/style/StylePendingResources.cpp Log Message: ----------- Use more constrained types to represent CSS gradient values https://bugs.webkit.org/show_bug.cgi?id=247235 rdar://101720047 Reviewed by Darin Adler. To make further progress on moving the CSS gradient code toward correct semantics, I took a moment to refactor the current CSS value subclasses to better represent the parsed output. To do this, I broke apart the deprecated, prefixed and standard variants into their own types and now only store exactly what is needed to represent the gradient, utilizing std::variant and additional structs to provide the structure. Now, if a gradient has a member that is a RefPtr<>, you can be assured that it is required to check for nullptr, otherwise, a Ref<> would have been used. I also took the opertunity to remove the base CSSGradientValue class as there was no need polymorphism being used and removing it gets us closer to CSSValue value semantics. * Source/WebCore/css/CSSGradientValue.cpp: (WebCore::computeStops): (WebCore::CSSLinearGradientValue::createStyleImage const): (WebCore::CSSPrefixedLinearGradientValue::createStyleImage const): (WebCore::CSSDeprecatedLinearGradientValue::createStyleImage const): (WebCore::CSSRadialGradientValue::createStyleImage const): (WebCore::CSSPrefixedRadialGradientValue::createStyleImage const): (WebCore::CSSDeprecatedRadialGradientValue::createStyleImage const): (WebCore::CSSConicGradientValue::createStyleImage const): (WebCore::operator==): (WebCore::cssText): (WebCore::CSSLinearGradientValue::customCSSText const): (WebCore::CSSLinearGradientValue::equals const): (WebCore::CSSPrefixedLinearGradientValue::customCSSText const): (WebCore::CSSPrefixedLinearGradientValue::equals const): (WebCore::CSSDeprecatedLinearGradientValue::customCSSText const): (WebCore::CSSDeprecatedLinearGradientValue::equals const): (WebCore::CSSRadialGradientValue::customCSSText const): (WebCore::CSSRadialGradientValue::equals const): (WebCore::CSSPrefixedRadialGradientValue::customCSSText const): (WebCore::CSSPrefixedRadialGradientValue::equals const): (WebCore::CSSDeprecatedRadialGradientValue::customCSSText const): (WebCore::CSSDeprecatedRadialGradientValue::equals const): (WebCore::CSSConicGradientValue::customCSSText const): (WebCore::CSSConicGradientValue::equals const): (WebCore::CSSGradientValue::computeStops const): Deleted. (WebCore::CSSGradientValue::createStyleImage const): Deleted. (WebCore::CSSGradientValue::equals const): Deleted. * Source/WebCore/css/CSSGradientValue.h: (WebCore::CSSGradientValue::setFirstX): Deleted. (WebCore::CSSGradientValue::setFirstY): Deleted. (WebCore::CSSGradientValue::setSecondX): Deleted. (WebCore::CSSGradientValue::setSecondY): Deleted. (WebCore::CSSGradientValue::gradientType const): Deleted. (WebCore::CSSGradientValue::CSSGradientValue): Deleted. (WebCore::CSSGradientValue::firstX const): Deleted. (WebCore::CSSGradientValue::firstY const): Deleted. (WebCore::CSSGradientValue::secondX const): Deleted. (WebCore::CSSGradientValue::secondY const): Deleted. (WebCore::CSSGradientValue::stops const): Deleted. (WebCore::CSSGradientValue::isRepeating const): Deleted. (WebCore::CSSGradientValue::colorInterpolationMethod const): Deleted. * Source/WebCore/css/CSSValue.cpp: (WebCore::CSSValue::visitDerived): * Source/WebCore/css/CSSValue.h: (WebCore::CSSValue::isImageGeneratorValue const): (WebCore::CSSValue::isGradientValue const): (WebCore::CSSValue::isDeprecatedLinearGradientValue const): (WebCore::CSSValue::isDeprecatedRadialGradientValue const): (WebCore::CSSValue::isPrefixedLinearGradientValue const): (WebCore::CSSValue::isPrefixedRadialGradientValue const): * Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp: (WebCore::CSSPropertyParserHelpers::consumeDeprecatedGradientPointValue): (WebCore::CSSPropertyParserHelpers::consumeDeprecatedGradientPoint): (WebCore::CSSPropertyParserHelpers::consumeDeprecatedGradientColorStops): (WebCore::CSSPropertyParserHelpers::consumeDeprecatedLinearGradient): (WebCore::CSSPropertyParserHelpers::consumeDeprecatedRadialGradient): (WebCore::CSSPropertyParserHelpers::consumeDeprecatedGradient): (WebCore::CSSPropertyParserHelpers::consumeColorStopList): (WebCore::CSSPropertyParserHelpers::consumeLengthColorStopList): (WebCore::CSSPropertyParserHelpers::consumeAngularColorStopList): (WebCore::CSSPropertyParserHelpers::consumePrefixedRadialGradient): (WebCore::CSSPropertyParserHelpers::consumeRadialGradient): (WebCore::CSSPropertyParserHelpers::consumePrefixedLinearGradient): (WebCore::CSSPropertyParserHelpers::consumeLinearGradient): (WebCore::CSSPropertyParserHelpers::consumeConicGradient): (WebCore::CSSPropertyParserHelpers::consumeGeneratedImage): (WebCore::CSSPropertyParserHelpers::consumeGradientColorStops): Deleted. * Source/WebCore/html/HTMLInputElement.cpp: (WebCore::autoFillStrongPasswordMaskImage): * Source/WebCore/rendering/style/StyleGradientImage.cpp: (WebCore::operator==): (WebCore::StyleGradientImage::StyleGradientImage): (WebCore::StyleGradientImage::equals const): (WebCore::StyleGradientImage::computedStyleValue const): (WebCore::StyleGradientImage::computeStopsForDeprecatedVariants const): (WebCore::StyleGradientImage::computeStops const): (WebCore::positionFromValue): (WebCore::computeEndPoint): (WebCore::endPointsFromAngle): (WebCore::endPointsFromAngleForPrefixedVariants): (WebCore::resolveRadius): (WebCore::distanceToClosestCorner): (WebCore::distanceToFarthestCorner): (WebCore::StyleGradientImage::createGradient const): * Source/WebCore/rendering/style/StyleGradientImage.h: * Source/WebCore/style/StyleBuilderState.cpp: (WebCore::Style::BuilderState::createStyleImage): * Source/WebCore/style/StylePendingResources.cpp: Canonical link: https://commits.webkit.org/256211@main _______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes