haikuwebkit/LayoutTests/css3/color-filters/color-filter-hue-rotate-exp...

28 lines
959 B
HTML
Raw Permalink Normal View History

Implement rendering support for the color-filter CSS property https://bugs.webkit.org/show_bug.cgi?id=185047 rdar://problem/39664967 Reviewed by Tim Horton. Source/WebCore: The color-filter property transforms CSS colors just before painting. To support this, add to RenderStyle colorByApplyingColorFilter() and visitedDependentColorWithColorFilter(). At most calls sites that transform colors for rendering, replace calls to visitedDependentColor() with visitedDependentColorWithColorFilter(). The few locations that don't use visitedDependentColor() (e.g. for shadows) call colorByApplyingColorFilter(). Color transformation is implemented via a new virtual function on FilterOperation; BasicColorMatrixFilterOperation overrides this to use a new ColorMatrix class to do color math, and BasicComponentTransferFilterOperation to do the equivalent of component transfer operations. The math in both cases matches that for SVG filters, with the exception that color components are stored as floats through multiple filters and then mapped to normal 0-255 color components at the end. Tests: css3/color-filters/color-filter-backgrounds-borders.html css3/color-filters/color-filter-box-shadow.html css3/color-filters/color-filter-brightness.html css3/color-filters/color-filter-color-property-list-item.html css3/color-filters/color-filter-color-property.html css3/color-filters/color-filter-color-text-decorations.html css3/color-filters/color-filter-column-rule.html css3/color-filters/color-filter-contrast.html css3/color-filters/color-filter-current-color.html css3/color-filters/color-filter-filter-list.html css3/color-filters/color-filter-grayscale.html css3/color-filters/color-filter-hue-rotate.html css3/color-filters/color-filter-inherits.html css3/color-filters/color-filter-invert.html css3/color-filters/color-filter-opacity.html css3/color-filters/color-filter-outline.html css3/color-filters/color-filter-saturate.html css3/color-filters/color-filter-sepia.html css3/color-filters/color-filter-text-emphasis.html * html/HTMLTextFormControlElement.cpp: (WebCore::HTMLTextFormControlElement::adjustInnerTextStyle const): * page/FrameView.cpp: (WebCore::FrameView::documentBackgroundColor const): * platform/graphics/ColorUtilities.cpp: (WebCore::ColorMatrix::ColorMatrix): (WebCore::ColorMatrix::makeIdentity): (WebCore::ColorMatrix::grayscaleMatrix): (WebCore::ColorMatrix::saturationMatrix): (WebCore::ColorMatrix::hueRotateMatrix): (WebCore::ColorMatrix::sepiaMatrix): (WebCore::ColorMatrix::transformColorComponents const): * platform/graphics/ColorUtilities.h: * platform/graphics/filters/FilterOperation.cpp: (WebCore::BasicColorMatrixFilterOperation::transformColor const): (WebCore::BasicComponentTransferFilterOperation::transformColor const): * platform/graphics/filters/FilterOperation.h: (WebCore::FilterOperation::transformColor const): * platform/graphics/filters/FilterOperations.cpp: (WebCore::FilterOperations::transformColor const): * platform/graphics/filters/FilterOperations.h: * rendering/BorderEdge.cpp: (WebCore::BorderEdge::getBorderEdgeInfo): * rendering/EllipsisBox.cpp: (WebCore::EllipsisBox::paint): (WebCore::EllipsisBox::paintSelection): * rendering/InlineFlowBox.cpp: (WebCore::InlineFlowBox::paintBoxDecorations): * rendering/InlineTextBox.cpp: (WebCore::InlineTextBox::paintMarkedTextForeground): (WebCore::InlineTextBox::paintMarkedTextDecoration): (WebCore::InlineTextBox::paintCompositionUnderline const): * rendering/RenderBox.cpp: (WebCore::RenderBox::paintRootBoxFillLayers): (WebCore::RenderBox::paintBackground): (WebCore::RenderBox::getBackgroundPaintedExtent const): (WebCore::RenderBox::backgroundIsKnownToBeOpaqueInRect const): (WebCore::RenderBox::backgroundHasOpaqueTopLayer const): * rendering/RenderBoxModelObject.cpp: (WebCore::applyBoxShadowForBackground): (WebCore::RenderBoxModelObject::paintFillLayerExtended): (WebCore::RenderBoxModelObject::boxShadowShouldBeAppliedToBackground const): (WebCore::RenderBoxModelObject::paintBoxShadow): * rendering/RenderDetailsMarker.cpp: (WebCore::RenderDetailsMarker::paint): * rendering/RenderElement.cpp: (WebCore::RenderElement::selectionColor const): (WebCore::RenderElement::selectionBackgroundColor const): (WebCore::RenderElement::paintFocusRing): (WebCore::RenderElement::paintOutline): * rendering/RenderFileUploadControl.cpp: (WebCore::RenderFileUploadControl::paintObject): * rendering/RenderFrameSet.cpp: (WebCore::RenderFrameSet::paintColumnBorder): (WebCore::RenderFrameSet::paintRowBorder): * rendering/RenderImage.cpp: (WebCore::RenderImage::paintReplaced): (WebCore::RenderImage::paintAreaElementFocusRing): * rendering/RenderInline.cpp: (WebCore::RenderInline::paintOutline): * rendering/RenderLayerBacking.cpp: (WebCore::canDirectlyCompositeBackgroundBackgroundImage): (WebCore::RenderLayerBacking::rendererBackgroundColor const): * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::rootOrBodyStyleChanged): * rendering/RenderListBox.cpp: (WebCore::RenderListBox::paintItemForeground): (WebCore::RenderListBox::paintItemBackground): * rendering/RenderListMarker.cpp: (WebCore::RenderListMarker::paint): * rendering/RenderMenuList.cpp: (RenderMenuList::itemStyle const): (RenderMenuList::getItemBackgroundColor const): (RenderMenuList::menuStyle const): * rendering/RenderMultiColumnSet.cpp: (WebCore::RenderMultiColumnSet::paintColumnRules): * rendering/RenderSearchField.cpp: (WebCore::RenderSearchField::menuStyle const): * rendering/RenderTable.h: (WebCore::RenderTable::bgColor const): * rendering/RenderTableCell.cpp: (WebCore::RenderTableCell::computeCollapsedStartBorder const): (WebCore::RenderTableCell::computeCollapsedEndBorder const): (WebCore::RenderTableCell::computeCollapsedBeforeBorder const): (WebCore::RenderTableCell::computeCollapsedAfterBorder const): (WebCore::RenderTableCell::paintBackgroundsBehindCell): * rendering/RenderTableSection.cpp: (WebCore::RenderTableSection::paintRowGroupBorder): * rendering/RenderTheme.cpp: (WebCore::RenderTheme::paintSliderTicks): * rendering/TextDecorationPainter.cpp: (WebCore::decorationColor): * rendering/TextPaintStyle.cpp: (WebCore::computeTextPaintStyle): * rendering/mathml/MathOperator.cpp: (WebCore::MathOperator::paint): * rendering/mathml/RenderMathMLFraction.cpp: (WebCore::RenderMathMLFraction::paint): * rendering/mathml/RenderMathMLMenclose.cpp: (WebCore::RenderMathMLMenclose::paint): * rendering/mathml/RenderMathMLRoot.cpp: (WebCore::RenderMathMLRoot::paint): * rendering/mathml/RenderMathMLToken.cpp: (WebCore::RenderMathMLToken::paint): * rendering/style/RenderStyle.cpp: (WebCore::RenderStyle::visitedDependentColorWithColorFilter const): (WebCore::RenderStyle::colorByApplyingColorFilter const): * rendering/style/RenderStyle.h: Source/WebKitLegacy/mac: The body background should reflect the filtered color. * WebView/WebFrame.mm: (-[WebFrame _bodyBackgroundColor]): * WebView/WebView.mm: (-[WebView updateTextTouchBar]): No logic change, just cleanup. LayoutTests: Tests for color-filter rendering. * css3/color-filters/color-filter-backgrounds-borders-expected.html: Added. * css3/color-filters/color-filter-backgrounds-borders.html: Added. * css3/color-filters/color-filter-box-shadow-expected.html: Added. * css3/color-filters/color-filter-box-shadow.html: Added. * css3/color-filters/color-filter-brightness-expected.html: Added. * css3/color-filters/color-filter-brightness.html: Added. * css3/color-filters/color-filter-color-property-expected.html: Added. * css3/color-filters/color-filter-color-property-list-item-expected.html: Added. * css3/color-filters/color-filter-color-property-list-item.html: Added. * css3/color-filters/color-filter-color-property.html: Added. * css3/color-filters/color-filter-color-text-decorations-expected.html: Added. * css3/color-filters/color-filter-color-text-decorations.html: Added. * css3/color-filters/color-filter-column-rule-expected.html: Added. * css3/color-filters/color-filter-column-rule.html: Added. * css3/color-filters/color-filter-contrast-expected.html: Added. * css3/color-filters/color-filter-contrast.html: Added. * css3/color-filters/color-filter-current-color-expected.html: Added. * css3/color-filters/color-filter-current-color.html: Added. * css3/color-filters/color-filter-filter-list-expected.html: Added. * css3/color-filters/color-filter-filter-list.html: Added. * css3/color-filters/color-filter-grayscale-expected.html: Added. * css3/color-filters/color-filter-grayscale.html: Added. * css3/color-filters/color-filter-hue-rotate-expected.html: Added. * css3/color-filters/color-filter-hue-rotate.html: Added. * css3/color-filters/color-filter-inherits-expected.html: Added. * css3/color-filters/color-filter-inherits.html: Added. * css3/color-filters/color-filter-invert-expected.html: Added. * css3/color-filters/color-filter-invert.html: Added. * css3/color-filters/color-filter-opacity-expected.html: Added. * css3/color-filters/color-filter-opacity.html: Added. * css3/color-filters/color-filter-outline-expected.html: Added. * css3/color-filters/color-filter-outline.html: Added. * css3/color-filters/color-filter-saturate-expected.html: Added. * css3/color-filters/color-filter-saturate.html: Added. * css3/color-filters/color-filter-sepia-expected.html: Added. * css3/color-filters/color-filter-sepia.html: Added. * css3/color-filters/color-filter-text-emphasis-expected.html: Added. * css3/color-filters/color-filter-text-emphasis.html: Added. Canonical link: https://commits.webkit.org/200548@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@231082 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-04-27 00:10:48 +00:00
<!DOCTYPE html>
<html>
<head>
Rename color-filter to -apple-color-filter and do not expose it to Web content https://bugs.webkit.org/show_bug.cgi?id=186306 <rdar://problem/39874167> Reviewed by Simon Fraser. Source/WebCore: Rename the color-filter CSS property to -apple-color-filter. * animation/KeyframeEffectReadOnly.cpp: (WebCore::KeyframeEffectReadOnly::checkForMatchingColorFilterFunctionLists): * css/CSSComputedStyleDeclaration.cpp: (WebCore::ComputedStyleExtractor::valueForPropertyinStyle): * css/CSSGradientValue.cpp: (WebCore::CSSGradientValue::image): (WebCore::CSSGradientValue::computeStops): (WebCore::CSSGradientValue::knownToBeOpaque const): * css/CSSProperties.json: * css/parser/CSSPropertyParser.cpp: (WebCore::CSSPropertyParser::parseSingleValue): * page/animation/CSSPropertyAnimation.cpp: (WebCore::blendFunc): (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap): * page/animation/ImplicitAnimation.cpp: (WebCore::ImplicitAnimation::checkForMatchingColorFilterFunctionLists): * page/animation/KeyframeAnimation.cpp: (WebCore::KeyframeAnimation::checkForMatchingColorFilterFunctionLists): * rendering/InlineTextBox.cpp: (WebCore::InlineTextBox::paintMarkedTextForeground): (WebCore::InlineTextBox::paintMarkedTextDecoration): * rendering/style/RenderStyle.cpp: (WebCore::RenderStyle::changeRequiresRepaint const): (WebCore::RenderStyle::visitedDependentColorWithColorFilter const): (WebCore::RenderStyle::colorByApplyingColorFilter const): * rendering/style/RenderStyle.h: (WebCore::RenderStyle::mutableAppleColorFilter): (WebCore::RenderStyle::appleColorFilter const): (WebCore::RenderStyle::hasAppleColorFilter const): (WebCore::RenderStyle::setAppleColorFilter): (WebCore::RenderStyle::initialAppleColorFilter): (WebCore::RenderStyle::mutableColorFilter): Deleted. (WebCore::RenderStyle::colorFilter const): Deleted. (WebCore::RenderStyle::hasColorFilter const): Deleted. (WebCore::RenderStyle::setColorFilter): Deleted. (WebCore::RenderStyle::initialColorFilter): Deleted. * rendering/style/StyleRareInheritedData.cpp: (WebCore::StyleRareInheritedData::StyleRareInheritedData): (WebCore::StyleRareInheritedData::operator== const): (WebCore::StyleRareInheritedData::hasColorFilters const): * rendering/style/StyleRareInheritedData.h: Source/WebKit: Change the ColorFilter setting to no longer be exposed as an experimental feature and ensure it's turned off by default. To allow internal clients to use the -apple-color-filter property, we expose a new _colorFilterEnabled property as SPI to WKWebViewConfigurationPrivate. * Shared/WebPreferences.yaml: * UIProcess/API/C/WKPreferences.cpp: (WKPreferencesSetColorFilterEnabled): (WKPreferencesGetColorFilterEnabled): * UIProcess/API/C/WKPreferencesRefPrivate.h: * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView _initializeWithConfiguration:]): * UIProcess/API/Cocoa/WKWebViewConfiguration.mm: (-[WKWebViewConfiguration init]): (-[WKWebViewConfiguration copyWithZone:]): (-[WKWebViewConfiguration _setAttachmentElementEnabled:]): (-[WKWebViewConfiguration _colorFilterEnabled]): (-[WKWebViewConfiguration _setColorFilterEnabled:]): * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h: Tools: Adding an option to turn support for the -apple-color-filter property on via an HTML comment. * DumpRenderTree/TestOptions.cpp: (TestOptions::TestOptions): * DumpRenderTree/TestOptions.h: * DumpRenderTree/mac/DumpRenderTree.mm: (setWebPreferencesForTestOptions): * WebKitTestRunner/TestController.cpp: (WTR::TestController::resetPreferencesToConsistentValues): (WTR::updateTestOptionsFromTestHeader): * WebKitTestRunner/TestOptions.h: (WTR::TestOptions::hasSameInitializationOptions const): * WebKitTestRunner/cocoa/TestControllerCocoa.mm: (WTR::TestController::platformCreateWebView): LayoutTests: Update tests for color-filter to test -apple-color-filter and explicitly turn the feature on since it's disabled by default. We also update a test to not use the colorFilter accessor and setter on CSSStyleDeclaration because using an -apple- prefix will no longer expose such a getter or setter, using getPropertyValue() and setProperty() instead. * animations/resources/animation-test-helpers.js: (getPropertyValue): (comparePropertyValue): * css3/color-filters/color-filter-animation-expected.txt: * css3/color-filters/color-filter-animation.html: * css3/color-filters/color-filter-backgrounds-borders-expected.html: * css3/color-filters/color-filter-backgrounds-borders.html: * css3/color-filters/color-filter-box-shadow-expected.html: * css3/color-filters/color-filter-box-shadow.html: * css3/color-filters/color-filter-brightness-expected.html: * css3/color-filters/color-filter-brightness.html: * css3/color-filters/color-filter-caret-color-expected.html: * css3/color-filters/color-filter-caret-color.html: * css3/color-filters/color-filter-color-property-expected.html: * css3/color-filters/color-filter-color-property-list-item-expected.html: * css3/color-filters/color-filter-color-property-list-item.html: * css3/color-filters/color-filter-color-property.html: * css3/color-filters/color-filter-color-text-decorations-expected.html: * css3/color-filters/color-filter-color-text-decorations.html: * css3/color-filters/color-filter-column-rule-expected.html: * css3/color-filters/color-filter-column-rule.html: * css3/color-filters/color-filter-contrast-expected.html: * css3/color-filters/color-filter-contrast.html: * css3/color-filters/color-filter-current-color-expected.html: * css3/color-filters/color-filter-current-color.html: * css3/color-filters/color-filter-filter-list-expected.html: * css3/color-filters/color-filter-filter-list.html: * css3/color-filters/color-filter-gradients-expected.html: * css3/color-filters/color-filter-gradients.html: * css3/color-filters/color-filter-grayscale-expected.html: * css3/color-filters/color-filter-grayscale.html: * css3/color-filters/color-filter-hue-rotate-expected.html: * css3/color-filters/color-filter-hue-rotate.html: * css3/color-filters/color-filter-inherits-expected.html: * css3/color-filters/color-filter-inherits.html: * css3/color-filters/color-filter-invert-expected.html: * css3/color-filters/color-filter-invert.html: * css3/color-filters/color-filter-opacity-expected.html: * css3/color-filters/color-filter-opacity.html: * css3/color-filters/color-filter-outline-expected.html: * css3/color-filters/color-filter-outline.html: * css3/color-filters/color-filter-parsing-expected.txt: * css3/color-filters/color-filter-parsing.html: * css3/color-filters/color-filter-saturate-expected.html: * css3/color-filters/color-filter-saturate.html: * css3/color-filters/color-filter-sepia-expected.html: * css3/color-filters/color-filter-sepia.html: * css3/color-filters/color-filter-text-decoration-shadow-expected.html: * css3/color-filters/color-filter-text-decoration-shadow.html: * css3/color-filters/color-filter-text-emphasis-expected.html: * css3/color-filters/color-filter-text-emphasis.html: * css3/color-filters/color-filter-text-shadow-expected.html: * css3/color-filters/color-filter-text-shadow.html: * css3/color-filters/color-filter-text-stroke-expected.html: * css3/color-filters/color-filter-text-stroke.html: * css3/color-filters/svg/color-filter-inline-svg-expected.html: * css3/color-filters/svg/color-filter-inline-svg.html: Canonical link: https://commits.webkit.org/201735@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@232559 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-06-06 22:27:20 +00:00
<title>CSS Test: -apple-color-filter reference</title>
Implement rendering support for the color-filter CSS property https://bugs.webkit.org/show_bug.cgi?id=185047 rdar://problem/39664967 Reviewed by Tim Horton. Source/WebCore: The color-filter property transforms CSS colors just before painting. To support this, add to RenderStyle colorByApplyingColorFilter() and visitedDependentColorWithColorFilter(). At most calls sites that transform colors for rendering, replace calls to visitedDependentColor() with visitedDependentColorWithColorFilter(). The few locations that don't use visitedDependentColor() (e.g. for shadows) call colorByApplyingColorFilter(). Color transformation is implemented via a new virtual function on FilterOperation; BasicColorMatrixFilterOperation overrides this to use a new ColorMatrix class to do color math, and BasicComponentTransferFilterOperation to do the equivalent of component transfer operations. The math in both cases matches that for SVG filters, with the exception that color components are stored as floats through multiple filters and then mapped to normal 0-255 color components at the end. Tests: css3/color-filters/color-filter-backgrounds-borders.html css3/color-filters/color-filter-box-shadow.html css3/color-filters/color-filter-brightness.html css3/color-filters/color-filter-color-property-list-item.html css3/color-filters/color-filter-color-property.html css3/color-filters/color-filter-color-text-decorations.html css3/color-filters/color-filter-column-rule.html css3/color-filters/color-filter-contrast.html css3/color-filters/color-filter-current-color.html css3/color-filters/color-filter-filter-list.html css3/color-filters/color-filter-grayscale.html css3/color-filters/color-filter-hue-rotate.html css3/color-filters/color-filter-inherits.html css3/color-filters/color-filter-invert.html css3/color-filters/color-filter-opacity.html css3/color-filters/color-filter-outline.html css3/color-filters/color-filter-saturate.html css3/color-filters/color-filter-sepia.html css3/color-filters/color-filter-text-emphasis.html * html/HTMLTextFormControlElement.cpp: (WebCore::HTMLTextFormControlElement::adjustInnerTextStyle const): * page/FrameView.cpp: (WebCore::FrameView::documentBackgroundColor const): * platform/graphics/ColorUtilities.cpp: (WebCore::ColorMatrix::ColorMatrix): (WebCore::ColorMatrix::makeIdentity): (WebCore::ColorMatrix::grayscaleMatrix): (WebCore::ColorMatrix::saturationMatrix): (WebCore::ColorMatrix::hueRotateMatrix): (WebCore::ColorMatrix::sepiaMatrix): (WebCore::ColorMatrix::transformColorComponents const): * platform/graphics/ColorUtilities.h: * platform/graphics/filters/FilterOperation.cpp: (WebCore::BasicColorMatrixFilterOperation::transformColor const): (WebCore::BasicComponentTransferFilterOperation::transformColor const): * platform/graphics/filters/FilterOperation.h: (WebCore::FilterOperation::transformColor const): * platform/graphics/filters/FilterOperations.cpp: (WebCore::FilterOperations::transformColor const): * platform/graphics/filters/FilterOperations.h: * rendering/BorderEdge.cpp: (WebCore::BorderEdge::getBorderEdgeInfo): * rendering/EllipsisBox.cpp: (WebCore::EllipsisBox::paint): (WebCore::EllipsisBox::paintSelection): * rendering/InlineFlowBox.cpp: (WebCore::InlineFlowBox::paintBoxDecorations): * rendering/InlineTextBox.cpp: (WebCore::InlineTextBox::paintMarkedTextForeground): (WebCore::InlineTextBox::paintMarkedTextDecoration): (WebCore::InlineTextBox::paintCompositionUnderline const): * rendering/RenderBox.cpp: (WebCore::RenderBox::paintRootBoxFillLayers): (WebCore::RenderBox::paintBackground): (WebCore::RenderBox::getBackgroundPaintedExtent const): (WebCore::RenderBox::backgroundIsKnownToBeOpaqueInRect const): (WebCore::RenderBox::backgroundHasOpaqueTopLayer const): * rendering/RenderBoxModelObject.cpp: (WebCore::applyBoxShadowForBackground): (WebCore::RenderBoxModelObject::paintFillLayerExtended): (WebCore::RenderBoxModelObject::boxShadowShouldBeAppliedToBackground const): (WebCore::RenderBoxModelObject::paintBoxShadow): * rendering/RenderDetailsMarker.cpp: (WebCore::RenderDetailsMarker::paint): * rendering/RenderElement.cpp: (WebCore::RenderElement::selectionColor const): (WebCore::RenderElement::selectionBackgroundColor const): (WebCore::RenderElement::paintFocusRing): (WebCore::RenderElement::paintOutline): * rendering/RenderFileUploadControl.cpp: (WebCore::RenderFileUploadControl::paintObject): * rendering/RenderFrameSet.cpp: (WebCore::RenderFrameSet::paintColumnBorder): (WebCore::RenderFrameSet::paintRowBorder): * rendering/RenderImage.cpp: (WebCore::RenderImage::paintReplaced): (WebCore::RenderImage::paintAreaElementFocusRing): * rendering/RenderInline.cpp: (WebCore::RenderInline::paintOutline): * rendering/RenderLayerBacking.cpp: (WebCore::canDirectlyCompositeBackgroundBackgroundImage): (WebCore::RenderLayerBacking::rendererBackgroundColor const): * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::rootOrBodyStyleChanged): * rendering/RenderListBox.cpp: (WebCore::RenderListBox::paintItemForeground): (WebCore::RenderListBox::paintItemBackground): * rendering/RenderListMarker.cpp: (WebCore::RenderListMarker::paint): * rendering/RenderMenuList.cpp: (RenderMenuList::itemStyle const): (RenderMenuList::getItemBackgroundColor const): (RenderMenuList::menuStyle const): * rendering/RenderMultiColumnSet.cpp: (WebCore::RenderMultiColumnSet::paintColumnRules): * rendering/RenderSearchField.cpp: (WebCore::RenderSearchField::menuStyle const): * rendering/RenderTable.h: (WebCore::RenderTable::bgColor const): * rendering/RenderTableCell.cpp: (WebCore::RenderTableCell::computeCollapsedStartBorder const): (WebCore::RenderTableCell::computeCollapsedEndBorder const): (WebCore::RenderTableCell::computeCollapsedBeforeBorder const): (WebCore::RenderTableCell::computeCollapsedAfterBorder const): (WebCore::RenderTableCell::paintBackgroundsBehindCell): * rendering/RenderTableSection.cpp: (WebCore::RenderTableSection::paintRowGroupBorder): * rendering/RenderTheme.cpp: (WebCore::RenderTheme::paintSliderTicks): * rendering/TextDecorationPainter.cpp: (WebCore::decorationColor): * rendering/TextPaintStyle.cpp: (WebCore::computeTextPaintStyle): * rendering/mathml/MathOperator.cpp: (WebCore::MathOperator::paint): * rendering/mathml/RenderMathMLFraction.cpp: (WebCore::RenderMathMLFraction::paint): * rendering/mathml/RenderMathMLMenclose.cpp: (WebCore::RenderMathMLMenclose::paint): * rendering/mathml/RenderMathMLRoot.cpp: (WebCore::RenderMathMLRoot::paint): * rendering/mathml/RenderMathMLToken.cpp: (WebCore::RenderMathMLToken::paint): * rendering/style/RenderStyle.cpp: (WebCore::RenderStyle::visitedDependentColorWithColorFilter const): (WebCore::RenderStyle::colorByApplyingColorFilter const): * rendering/style/RenderStyle.h: Source/WebKitLegacy/mac: The body background should reflect the filtered color. * WebView/WebFrame.mm: (-[WebFrame _bodyBackgroundColor]): * WebView/WebView.mm: (-[WebView updateTextTouchBar]): No logic change, just cleanup. LayoutTests: Tests for color-filter rendering. * css3/color-filters/color-filter-backgrounds-borders-expected.html: Added. * css3/color-filters/color-filter-backgrounds-borders.html: Added. * css3/color-filters/color-filter-box-shadow-expected.html: Added. * css3/color-filters/color-filter-box-shadow.html: Added. * css3/color-filters/color-filter-brightness-expected.html: Added. * css3/color-filters/color-filter-brightness.html: Added. * css3/color-filters/color-filter-color-property-expected.html: Added. * css3/color-filters/color-filter-color-property-list-item-expected.html: Added. * css3/color-filters/color-filter-color-property-list-item.html: Added. * css3/color-filters/color-filter-color-property.html: Added. * css3/color-filters/color-filter-color-text-decorations-expected.html: Added. * css3/color-filters/color-filter-color-text-decorations.html: Added. * css3/color-filters/color-filter-column-rule-expected.html: Added. * css3/color-filters/color-filter-column-rule.html: Added. * css3/color-filters/color-filter-contrast-expected.html: Added. * css3/color-filters/color-filter-contrast.html: Added. * css3/color-filters/color-filter-current-color-expected.html: Added. * css3/color-filters/color-filter-current-color.html: Added. * css3/color-filters/color-filter-filter-list-expected.html: Added. * css3/color-filters/color-filter-filter-list.html: Added. * css3/color-filters/color-filter-grayscale-expected.html: Added. * css3/color-filters/color-filter-grayscale.html: Added. * css3/color-filters/color-filter-hue-rotate-expected.html: Added. * css3/color-filters/color-filter-hue-rotate.html: Added. * css3/color-filters/color-filter-inherits-expected.html: Added. * css3/color-filters/color-filter-inherits.html: Added. * css3/color-filters/color-filter-invert-expected.html: Added. * css3/color-filters/color-filter-invert.html: Added. * css3/color-filters/color-filter-opacity-expected.html: Added. * css3/color-filters/color-filter-opacity.html: Added. * css3/color-filters/color-filter-outline-expected.html: Added. * css3/color-filters/color-filter-outline.html: Added. * css3/color-filters/color-filter-saturate-expected.html: Added. * css3/color-filters/color-filter-saturate.html: Added. * css3/color-filters/color-filter-sepia-expected.html: Added. * css3/color-filters/color-filter-sepia.html: Added. * css3/color-filters/color-filter-text-emphasis-expected.html: Added. * css3/color-filters/color-filter-text-emphasis.html: Added. Canonical link: https://commits.webkit.org/200548@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@231082 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-04-27 00:10:48 +00:00
<link rel="author" title="Apple" href="http://www.apple.com/">
<style type="text/css">
.test
{
Clean up color-filter tests. Detab the files. Remove calls to internals.settings.setColorFilterEnabled() which aren't needed, since WebKitTestRunner and DumpRenderTree turn the feature on by default. * css3/color-filters/color-filter-backgrounds-borders-expected.html: * css3/color-filters/color-filter-backgrounds-borders.html: * css3/color-filters/color-filter-box-shadow-expected.html: * css3/color-filters/color-filter-box-shadow.html: * css3/color-filters/color-filter-brightness-expected.html: * css3/color-filters/color-filter-brightness.html: * css3/color-filters/color-filter-color-property-expected.html: * css3/color-filters/color-filter-color-property-list-item-expected.html: * css3/color-filters/color-filter-color-property-list-item.html: * css3/color-filters/color-filter-color-property.html: * css3/color-filters/color-filter-color-text-decorations-expected.html: * css3/color-filters/color-filter-color-text-decorations.html: * css3/color-filters/color-filter-column-rule-expected.html: * css3/color-filters/color-filter-column-rule.html: * css3/color-filters/color-filter-contrast-expected.html: * css3/color-filters/color-filter-contrast.html: * css3/color-filters/color-filter-current-color-expected.html: * css3/color-filters/color-filter-current-color.html: * css3/color-filters/color-filter-filter-list-expected.html: * css3/color-filters/color-filter-filter-list.html: * css3/color-filters/color-filter-gradients-expected.html: * css3/color-filters/color-filter-gradients.html: * css3/color-filters/color-filter-grayscale-expected.html: * css3/color-filters/color-filter-grayscale.html: * css3/color-filters/color-filter-hue-rotate-expected.html: * css3/color-filters/color-filter-hue-rotate.html: * css3/color-filters/color-filter-inherits-expected.html: * css3/color-filters/color-filter-inherits.html: * css3/color-filters/color-filter-invert-expected.html: * css3/color-filters/color-filter-invert.html: * css3/color-filters/color-filter-opacity-expected.html: * css3/color-filters/color-filter-opacity.html: * css3/color-filters/color-filter-outline-expected.html: * css3/color-filters/color-filter-outline.html: * css3/color-filters/color-filter-parsing.html: * css3/color-filters/color-filter-saturate-expected.html: * css3/color-filters/color-filter-saturate.html: * css3/color-filters/color-filter-sepia-expected.html: * css3/color-filters/color-filter-sepia.html: * css3/color-filters/color-filter-text-decoration-shadow-expected.html: * css3/color-filters/color-filter-text-decoration-shadow.html: * css3/color-filters/color-filter-text-emphasis-expected.html: * css3/color-filters/color-filter-text-emphasis.html: * css3/color-filters/color-filter-text-shadow-expected.html: * css3/color-filters/color-filter-text-shadow.html: * css3/color-filters/color-filter-text-stroke.html: Canonical link: https://commits.webkit.org/200591@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@231125 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-04-28 00:27:39 +00:00
width: 100px;
height: 100px;
background-color: blue;
border: 50px solid green;
margin: 10px;
float: left;
Implement rendering support for the color-filter CSS property https://bugs.webkit.org/show_bug.cgi?id=185047 rdar://problem/39664967 Reviewed by Tim Horton. Source/WebCore: The color-filter property transforms CSS colors just before painting. To support this, add to RenderStyle colorByApplyingColorFilter() and visitedDependentColorWithColorFilter(). At most calls sites that transform colors for rendering, replace calls to visitedDependentColor() with visitedDependentColorWithColorFilter(). The few locations that don't use visitedDependentColor() (e.g. for shadows) call colorByApplyingColorFilter(). Color transformation is implemented via a new virtual function on FilterOperation; BasicColorMatrixFilterOperation overrides this to use a new ColorMatrix class to do color math, and BasicComponentTransferFilterOperation to do the equivalent of component transfer operations. The math in both cases matches that for SVG filters, with the exception that color components are stored as floats through multiple filters and then mapped to normal 0-255 color components at the end. Tests: css3/color-filters/color-filter-backgrounds-borders.html css3/color-filters/color-filter-box-shadow.html css3/color-filters/color-filter-brightness.html css3/color-filters/color-filter-color-property-list-item.html css3/color-filters/color-filter-color-property.html css3/color-filters/color-filter-color-text-decorations.html css3/color-filters/color-filter-column-rule.html css3/color-filters/color-filter-contrast.html css3/color-filters/color-filter-current-color.html css3/color-filters/color-filter-filter-list.html css3/color-filters/color-filter-grayscale.html css3/color-filters/color-filter-hue-rotate.html css3/color-filters/color-filter-inherits.html css3/color-filters/color-filter-invert.html css3/color-filters/color-filter-opacity.html css3/color-filters/color-filter-outline.html css3/color-filters/color-filter-saturate.html css3/color-filters/color-filter-sepia.html css3/color-filters/color-filter-text-emphasis.html * html/HTMLTextFormControlElement.cpp: (WebCore::HTMLTextFormControlElement::adjustInnerTextStyle const): * page/FrameView.cpp: (WebCore::FrameView::documentBackgroundColor const): * platform/graphics/ColorUtilities.cpp: (WebCore::ColorMatrix::ColorMatrix): (WebCore::ColorMatrix::makeIdentity): (WebCore::ColorMatrix::grayscaleMatrix): (WebCore::ColorMatrix::saturationMatrix): (WebCore::ColorMatrix::hueRotateMatrix): (WebCore::ColorMatrix::sepiaMatrix): (WebCore::ColorMatrix::transformColorComponents const): * platform/graphics/ColorUtilities.h: * platform/graphics/filters/FilterOperation.cpp: (WebCore::BasicColorMatrixFilterOperation::transformColor const): (WebCore::BasicComponentTransferFilterOperation::transformColor const): * platform/graphics/filters/FilterOperation.h: (WebCore::FilterOperation::transformColor const): * platform/graphics/filters/FilterOperations.cpp: (WebCore::FilterOperations::transformColor const): * platform/graphics/filters/FilterOperations.h: * rendering/BorderEdge.cpp: (WebCore::BorderEdge::getBorderEdgeInfo): * rendering/EllipsisBox.cpp: (WebCore::EllipsisBox::paint): (WebCore::EllipsisBox::paintSelection): * rendering/InlineFlowBox.cpp: (WebCore::InlineFlowBox::paintBoxDecorations): * rendering/InlineTextBox.cpp: (WebCore::InlineTextBox::paintMarkedTextForeground): (WebCore::InlineTextBox::paintMarkedTextDecoration): (WebCore::InlineTextBox::paintCompositionUnderline const): * rendering/RenderBox.cpp: (WebCore::RenderBox::paintRootBoxFillLayers): (WebCore::RenderBox::paintBackground): (WebCore::RenderBox::getBackgroundPaintedExtent const): (WebCore::RenderBox::backgroundIsKnownToBeOpaqueInRect const): (WebCore::RenderBox::backgroundHasOpaqueTopLayer const): * rendering/RenderBoxModelObject.cpp: (WebCore::applyBoxShadowForBackground): (WebCore::RenderBoxModelObject::paintFillLayerExtended): (WebCore::RenderBoxModelObject::boxShadowShouldBeAppliedToBackground const): (WebCore::RenderBoxModelObject::paintBoxShadow): * rendering/RenderDetailsMarker.cpp: (WebCore::RenderDetailsMarker::paint): * rendering/RenderElement.cpp: (WebCore::RenderElement::selectionColor const): (WebCore::RenderElement::selectionBackgroundColor const): (WebCore::RenderElement::paintFocusRing): (WebCore::RenderElement::paintOutline): * rendering/RenderFileUploadControl.cpp: (WebCore::RenderFileUploadControl::paintObject): * rendering/RenderFrameSet.cpp: (WebCore::RenderFrameSet::paintColumnBorder): (WebCore::RenderFrameSet::paintRowBorder): * rendering/RenderImage.cpp: (WebCore::RenderImage::paintReplaced): (WebCore::RenderImage::paintAreaElementFocusRing): * rendering/RenderInline.cpp: (WebCore::RenderInline::paintOutline): * rendering/RenderLayerBacking.cpp: (WebCore::canDirectlyCompositeBackgroundBackgroundImage): (WebCore::RenderLayerBacking::rendererBackgroundColor const): * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::rootOrBodyStyleChanged): * rendering/RenderListBox.cpp: (WebCore::RenderListBox::paintItemForeground): (WebCore::RenderListBox::paintItemBackground): * rendering/RenderListMarker.cpp: (WebCore::RenderListMarker::paint): * rendering/RenderMenuList.cpp: (RenderMenuList::itemStyle const): (RenderMenuList::getItemBackgroundColor const): (RenderMenuList::menuStyle const): * rendering/RenderMultiColumnSet.cpp: (WebCore::RenderMultiColumnSet::paintColumnRules): * rendering/RenderSearchField.cpp: (WebCore::RenderSearchField::menuStyle const): * rendering/RenderTable.h: (WebCore::RenderTable::bgColor const): * rendering/RenderTableCell.cpp: (WebCore::RenderTableCell::computeCollapsedStartBorder const): (WebCore::RenderTableCell::computeCollapsedEndBorder const): (WebCore::RenderTableCell::computeCollapsedBeforeBorder const): (WebCore::RenderTableCell::computeCollapsedAfterBorder const): (WebCore::RenderTableCell::paintBackgroundsBehindCell): * rendering/RenderTableSection.cpp: (WebCore::RenderTableSection::paintRowGroupBorder): * rendering/RenderTheme.cpp: (WebCore::RenderTheme::paintSliderTicks): * rendering/TextDecorationPainter.cpp: (WebCore::decorationColor): * rendering/TextPaintStyle.cpp: (WebCore::computeTextPaintStyle): * rendering/mathml/MathOperator.cpp: (WebCore::MathOperator::paint): * rendering/mathml/RenderMathMLFraction.cpp: (WebCore::RenderMathMLFraction::paint): * rendering/mathml/RenderMathMLMenclose.cpp: (WebCore::RenderMathMLMenclose::paint): * rendering/mathml/RenderMathMLRoot.cpp: (WebCore::RenderMathMLRoot::paint): * rendering/mathml/RenderMathMLToken.cpp: (WebCore::RenderMathMLToken::paint): * rendering/style/RenderStyle.cpp: (WebCore::RenderStyle::visitedDependentColorWithColorFilter const): (WebCore::RenderStyle::colorByApplyingColorFilter const): * rendering/style/RenderStyle.h: Source/WebKitLegacy/mac: The body background should reflect the filtered color. * WebView/WebFrame.mm: (-[WebFrame _bodyBackgroundColor]): * WebView/WebView.mm: (-[WebView updateTextTouchBar]): No logic change, just cleanup. LayoutTests: Tests for color-filter rendering. * css3/color-filters/color-filter-backgrounds-borders-expected.html: Added. * css3/color-filters/color-filter-backgrounds-borders.html: Added. * css3/color-filters/color-filter-box-shadow-expected.html: Added. * css3/color-filters/color-filter-box-shadow.html: Added. * css3/color-filters/color-filter-brightness-expected.html: Added. * css3/color-filters/color-filter-brightness.html: Added. * css3/color-filters/color-filter-color-property-expected.html: Added. * css3/color-filters/color-filter-color-property-list-item-expected.html: Added. * css3/color-filters/color-filter-color-property-list-item.html: Added. * css3/color-filters/color-filter-color-property.html: Added. * css3/color-filters/color-filter-color-text-decorations-expected.html: Added. * css3/color-filters/color-filter-color-text-decorations.html: Added. * css3/color-filters/color-filter-column-rule-expected.html: Added. * css3/color-filters/color-filter-column-rule.html: Added. * css3/color-filters/color-filter-contrast-expected.html: Added. * css3/color-filters/color-filter-contrast.html: Added. * css3/color-filters/color-filter-current-color-expected.html: Added. * css3/color-filters/color-filter-current-color.html: Added. * css3/color-filters/color-filter-filter-list-expected.html: Added. * css3/color-filters/color-filter-filter-list.html: Added. * css3/color-filters/color-filter-grayscale-expected.html: Added. * css3/color-filters/color-filter-grayscale.html: Added. * css3/color-filters/color-filter-hue-rotate-expected.html: Added. * css3/color-filters/color-filter-hue-rotate.html: Added. * css3/color-filters/color-filter-inherits-expected.html: Added. * css3/color-filters/color-filter-inherits.html: Added. * css3/color-filters/color-filter-invert-expected.html: Added. * css3/color-filters/color-filter-invert.html: Added. * css3/color-filters/color-filter-opacity-expected.html: Added. * css3/color-filters/color-filter-opacity.html: Added. * css3/color-filters/color-filter-outline-expected.html: Added. * css3/color-filters/color-filter-outline.html: Added. * css3/color-filters/color-filter-saturate-expected.html: Added. * css3/color-filters/color-filter-saturate.html: Added. * css3/color-filters/color-filter-sepia-expected.html: Added. * css3/color-filters/color-filter-sepia.html: Added. * css3/color-filters/color-filter-text-emphasis-expected.html: Added. * css3/color-filters/color-filter-text-emphasis.html: Added. Canonical link: https://commits.webkit.org/200548@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@231082 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-04-27 00:10:48 +00:00
}
</style>
</head>
<body>
<div class="test" style=""></div>
<div class="test" style="background-color: rgb(37, 37, 0); border-color: rgb(183, 55, 183);"></div>
<div class="test" style=""></div>
<div class="test" style="background-color: rgb(255, 0, 37); border-color: rgb(0, 109, 183);"></div>
<div class="test" style=""></div>
<div class="test" style="background-color: rgb(37, 37, 0); border-color: rgb(183, 55, 183);"></div>
</body>
</html>