WebKit Bugzilla
Attachment 342648 Details for
Bug 186566
: Semantic colors should not be transformed by color-filter
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
patch
semantic-color-no-filter-2.patch (text/plain), 13.12 KB, created by
Antti Koivisto
on 2018-06-13 05:20:49 PDT
(
hide
)
Description:
patch
Filename:
MIME Type:
Creator:
Antti Koivisto
Created:
2018-06-13 05:20:49 PDT
Size:
13.12 KB
patch
obsolete
>Index: Source/WebCore/ChangeLog >=================================================================== >--- Source/WebCore/ChangeLog (revision 232789) >+++ Source/WebCore/ChangeLog (working copy) >@@ -1,3 +1,27 @@ >+2018-06-13 Antti Koivisto <antti@apple.com> >+ >+ Semantic colors should not be transformed by color-filter >+ https://bugs.webkit.org/show_bug.cgi?id=186566 >+ <rdar://problem/40705739> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Test: css3/color-filters/color-filter-ignore-semantic.html >+ >+ * platform/graphics/Color.h: >+ (WebCore::Color::Color): >+ (WebCore::Color::isSemantic const): >+ (WebCore::Color::setIsSemantic): >+ * platform/graphics/filters/FilterOperations.cpp: >+ (WebCore::FilterOperations::transformColor const): >+ * platform/graphics/mac/ColorMac.h: >+ * platform/graphics/mac/ColorMac.mm: >+ (WebCore::colorFromNSColor): >+ * rendering/RenderThemeMac.mm: >+ (WebCore::RenderThemeMac::systemColor const): >+ * rendering/RenderTreeAsText.cpp: >+ (WebCore::RenderTreeAsText::writeRenderObject): >+ > 2018-06-12 Zalan Bujtas <zalan@apple.com> > > Complex text handling should opt out of bounded text layout. >Index: Source/WebCore/platform/graphics/Color.h >=================================================================== >--- Source/WebCore/platform/graphics/Color.h (revision 232721) >+++ Source/WebCore/platform/graphics/Color.h (working copy) >@@ -119,6 +119,14 @@ public: > setRGB(color); > } > >+ enum SemanticTag { Semantic }; >+ >+ Color(RGBA32 color, SemanticTag) >+ { >+ setRGB(color); >+ setIsSemantic(); >+ } >+ > Color(int r, int g, int b) > { > setRGB(r, g, b); >@@ -240,6 +248,9 @@ public: > Color colorWithAlpha(float) const; > Color opaqueColor() const { return colorWithAlpha(1.0f); } > >+ // True if the color originated from a CSS semantic color name. >+ bool isSemantic() const { return !isExtended() && (m_colorData.rgbaAndFlags & isSemanticRBGAColorBit); } >+ > #if PLATFORM(GTK) > Color(const GdkColor&); > // We can't sensibly go back to GdkColor without losing the alpha value >@@ -296,6 +307,7 @@ public: > private: > void setRGB(int r, int g, int b) { setRGB(makeRGB(r, g, b)); } > void setRGB(RGBA32); >+ void setIsSemantic() { m_colorData.rgbaAndFlags |= isSemanticRBGAColorBit; } > > // 0x_______00 is an ExtendedColor pointer. > // 0x_______01 is an invalid RGBA32. >@@ -304,6 +316,7 @@ private: > static const uint64_t invalidRGBAColor = 0x1; > static const uint64_t validRGBAColorBit = 0x2; > static const uint64_t validRGBAColor = 0x3; >+ static const uint64_t isSemanticRBGAColorBit = 0x4; > > static const uint64_t deletedHashValue = 0xFFFFFFFFFFFFFFFD; > static const uint64_t emptyHashValue = 0xFFFFFFFFFFFFFFFB; >Index: Source/WebCore/platform/graphics/filters/FilterOperations.cpp >=================================================================== >--- Source/WebCore/platform/graphics/filters/FilterOperations.cpp (revision 232721) >+++ Source/WebCore/platform/graphics/filters/FilterOperations.cpp (working copy) >@@ -124,6 +124,9 @@ bool FilterOperations::transformColor(Co > { > if (isEmpty() || !color.isValid()) > return false; >+ // Color filter does not apply to semantic CSS colors (like "Windowframe"). >+ if (color.isSemantic()) >+ return false; > > FloatComponents components; > color.getRGBA(components.components[0], components.components[1], components.components[2], components.components[3]); >Index: Source/WebCore/platform/graphics/mac/ColorMac.h >=================================================================== >--- Source/WebCore/platform/graphics/mac/ColorMac.h (revision 232721) >+++ Source/WebCore/platform/graphics/mac/ColorMac.h (working copy) >@@ -37,6 +37,7 @@ OBJC_CLASS NSColor; > namespace WebCore { > > WEBCORE_EXPORT Color colorFromNSColor(NSColor *); >+WEBCORE_EXPORT Color colorFromNSColor(NSColor *, Color::SemanticTag); > WEBCORE_EXPORT NSColor *nsColor(const Color&); > > WEBCORE_EXPORT bool usesTestModeFocusRingColor(); >Index: Source/WebCore/platform/graphics/mac/ColorMac.mm >=================================================================== >--- Source/WebCore/platform/graphics/mac/ColorMac.mm (revision 232721) >+++ Source/WebCore/platform/graphics/mac/ColorMac.mm (working copy) >@@ -95,6 +95,11 @@ Color colorFromNSColor(NSColor *color) > return Color(makeRGBAFromNSColor(color)); > } > >+Color colorFromNSColor(NSColor *color, Color::SemanticTag) >+{ >+ return Color(makeRGBAFromNSColor(color), Color::Semantic); >+} >+ > NSColor *nsColor(const Color& color) > { > if (!color.isValid()) { >Index: Source/WebCore/rendering/RenderThemeMac.mm >=================================================================== >--- Source/WebCore/rendering/RenderThemeMac.mm (revision 232721) >+++ Source/WebCore/rendering/RenderThemeMac.mm (working copy) >@@ -485,7 +485,7 @@ Color RenderThemeMac::systemColor(CSSVal > // Only use NSColor when the system appearance is desired, otherwise use RenderTheme's default. > if (useSystemAppearance) { > if (!m_systemVisitedLinkColor.isValid()) >- m_systemVisitedLinkColor = colorFromNSColor([NSColor systemPurpleColor]); >+ m_systemVisitedLinkColor = colorFromNSColor([NSColor systemPurpleColor], Color::Semantic); > return m_systemVisitedLinkColor; > } > >@@ -597,7 +597,7 @@ Color RenderThemeMac::systemColor(CSSVal > > if (auto selector = selectCocoaColor()) { > if (auto color = wtfObjcMsgSend<NSColor *>([NSColor class], selector)) >- return colorFromNSColor(color); >+ return colorFromNSColor(color, Color::Semantic); > } > > switch (cssValueID) { >Index: Source/WebCore/rendering/RenderTreeAsText.cpp >=================================================================== >--- Source/WebCore/rendering/RenderTreeAsText.cpp (revision 232721) >+++ Source/WebCore/rendering/RenderTreeAsText.cpp (working copy) >@@ -242,23 +242,23 @@ void RenderTreeAsText::writeRenderObject > > if (o.parent()) { > Color color = o.style().visitedDependentColor(CSSPropertyColor); >- if (o.parent()->style().visitedDependentColor(CSSPropertyColor) != color) >+ if (o.parent()->style().visitedDependentColor(CSSPropertyColor).rgb() != color.rgb()) > ts << " [color=" << color.nameForRenderTreeAsText() << "]"; > > // Do not dump invalid or transparent backgrounds, since that is the default. > Color backgroundColor = o.style().visitedDependentColor(CSSPropertyBackgroundColor); >- if (o.parent()->style().visitedDependentColor(CSSPropertyBackgroundColor) != backgroundColor >+ if (o.parent()->style().visitedDependentColor(CSSPropertyBackgroundColor).rgb() != backgroundColor.rgb() > && backgroundColor.isValid() && backgroundColor.rgb()) > ts << " [bgcolor=" << backgroundColor.nameForRenderTreeAsText() << "]"; > > Color textFillColor = o.style().visitedDependentColor(CSSPropertyWebkitTextFillColor); >- if (o.parent()->style().visitedDependentColor(CSSPropertyWebkitTextFillColor) != textFillColor >- && textFillColor.isValid() && textFillColor != color && textFillColor.rgb()) >+ if (o.parent()->style().visitedDependentColor(CSSPropertyWebkitTextFillColor).rgb() != textFillColor.rgb() >+ && textFillColor.isValid() && textFillColor.rgb() != color.rgb() && textFillColor.rgb()) > ts << " [textFillColor=" << textFillColor.nameForRenderTreeAsText() << "]"; > > Color textStrokeColor = o.style().visitedDependentColor(CSSPropertyWebkitTextStrokeColor); >- if (o.parent()->style().visitedDependentColor(CSSPropertyWebkitTextStrokeColor) != textStrokeColor >- && textStrokeColor.isValid() && textStrokeColor != color && textStrokeColor.rgb()) >+ if (o.parent()->style().visitedDependentColor(CSSPropertyWebkitTextStrokeColor).rgb() != textStrokeColor.rgb() >+ && textStrokeColor.isValid() && textStrokeColor.rgb() != color.rgb() && textStrokeColor.rgb()) > ts << " [textStrokeColor=" << textStrokeColor.nameForRenderTreeAsText() << "]"; > > if (o.parent()->style().textStrokeWidth() != o.style().textStrokeWidth() && o.style().textStrokeWidth() > 0) >Index: LayoutTests/ChangeLog >=================================================================== >--- LayoutTests/ChangeLog (revision 232726) >+++ LayoutTests/ChangeLog (working copy) >@@ -1,3 +1,14 @@ >+2018-06-13 Antti Koivisto <antti@apple.com> >+ >+ Semantic colors should not be transformed by color-filter >+ https://bugs.webkit.org/show_bug.cgi?id=186566 >+ <rdar://problem/40705739> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * css3/color-filters/color-filter-ignore-semantic-expected.html: Added. >+ * css3/color-filters/color-filter-ignore-semantic.html: Added. >+ > 2018-06-11 Antti Koivisto <antti@apple.com> > > Fix spelling. >Index: LayoutTests/css3/color-filters/color-filter-ignore-semantic-expected.html >=================================================================== >--- LayoutTests/css3/color-filters/color-filter-ignore-semantic-expected.html (nonexistent) >+++ LayoutTests/css3/color-filters/color-filter-ignore-semantic-expected.html (working copy) >@@ -0,0 +1,34 @@ >+<!DOCTYPE html><!-- webkit-test-runner [ enableColorFilter=true ] --> >+<html> >+ <head> >+ <title>CSS Test: Don't apply -apple-color-filter to semantic colors</title> >+ <link rel="author" title="Apple" href="http://www.apple.com/"> >+ <link rel="match" href="-apple-color-filter-ignore-semantic-expected.html"> >+ >+ <style type="text/css"> >+ .test >+ { >+ width: 100px; >+ height: 100px; >+ margin: 10px; >+ float: left; >+ } >+ </style> >+ </head> >+ <body> >+ <div class="test" style="background-color: rgb(0, 255, 255);"></div> >+ <div class="test" style="background-color: rgb(0, 255, 255);"></div> >+ <div class="test" style="background-color: text"></div> >+ <div class="test" style="background-color: highlight"></div> >+ <div class="test" style="background-color: window"></div> >+ <div class="test" style="background-color: -apple-system-text-background"></div> >+ <div class="test" style="background-color: -apple-system-header-text"></div> >+ <div class="test" style="background-color: -apple-system-alternate-selected"></div> >+ <div class="test" style="background-color: -apple-system-label"></div> >+ <div class="test" style="background-color: -apple-system-secondary-label"></div> >+ <div class="test" style="background-color: -apple-system-tertiary-label"></div> >+ <div class="test" style="background-color: -apple-system-quaternary-label"></div> >+ <div class="test" style="background-color: -apple-system-grid"></div> >+ <div class="test" style="background-color: -apple-system-blue-color"></div> >+ </body> >+</html> >Index: LayoutTests/css3/color-filters/color-filter-ignore-semantic.html >=================================================================== >--- LayoutTests/css3/color-filters/color-filter-ignore-semantic.html (nonexistent) >+++ LayoutTests/css3/color-filters/color-filter-ignore-semantic.html (working copy) >@@ -0,0 +1,37 @@ >+<!DOCTYPE html><!-- webkit-test-runner [ enableColorFilter=true ] --> >+<html> >+ <head> >+ <title>CSS Test: Don't apply -apple-color-filter to semantic colors</title> >+ <link rel="author" title="Apple" href="http://www.apple.com/"> >+ <link rel="match" href="-apple-color-filter-ignore-semantic-expected.html"> >+ >+ <style type="text/css"> >+ .test >+ { >+ width: 100px; >+ height: 100px; >+ margin: 10px; >+ float: left; >+ -apple-color-filter: invert(); >+ } >+ </style> >+ </head> >+ <body> >+ <!--Filtered--> >+ <div class="test" style="background-color: rgb(255, 0, 0)"></div> >+ <div class="test" style="background-color: red"></div> >+ <!--Not filtered--> >+ <div class="test" style="background-color: text"></div> >+ <div class="test" style="background-color: highlight"></div> >+ <div class="test" style="background-color: window"></div> >+ <div class="test" style="background-color: -apple-system-text-background"></div> >+ <div class="test" style="background-color: -apple-system-header-text"></div> >+ <div class="test" style="background-color: -apple-system-alternate-selected"></div> >+ <div class="test" style="background-color: -apple-system-label"></div> >+ <div class="test" style="background-color: -apple-system-secondary-label"></div> >+ <div class="test" style="background-color: -apple-system-tertiary-label"></div> >+ <div class="test" style="background-color: -apple-system-quaternary-label"></div> >+ <div class="test" style="background-color: -apple-system-grid"></div> >+ <div class="test" style="background-color: -apple-system-blue-color"></div> >+ </body> >+</html>
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 186566
:
342559
|
342566
|
342580
|
342582
|
342585
|
342648
|
342649
|
342654
|
342655
|
342811