Index: Source/core/rendering/style/RenderStyle.cpp |
diff --git a/Source/core/rendering/style/RenderStyle.cpp b/Source/core/rendering/style/RenderStyle.cpp |
index b833659bec1ff012304a98a7260aad8a4eb49fcf..53979e21a348fcb8f69231166c653d397c2f7b5e 100644 |
--- a/Source/core/rendering/style/RenderStyle.cpp |
+++ b/Source/core/rendering/style/RenderStyle.cpp |
@@ -186,7 +186,6 @@ void RenderStyle::copyNonInheritedFrom(const RenderStyle* other) |
noninherited_flags._page_break_after = other->noninherited_flags._page_break_after; |
noninherited_flags._page_break_inside = other->noninherited_flags._page_break_inside; |
noninherited_flags.explicitInheritance = other->noninherited_flags.explicitInheritance; |
- noninherited_flags.currentColor = other->noninherited_flags.currentColor; |
if (m_svgStyle != other->m_svgStyle) |
m_svgStyle.access()->copyNonInheritedFrom(other->m_svgStyle.get()); |
ASSERT(zoom() == initialZoom()); |
@@ -918,10 +917,10 @@ void RenderStyle::setListStyleImage(PassRefPtr<StyleImage> v) |
rareInheritedData.access()->listStyleImage = v; |
} |
-Color RenderStyle::color() const { return inherited->color; } |
-Color RenderStyle::visitedLinkColor() const { return inherited->visitedLinkColor; } |
-void RenderStyle::setColor(const Color& v) { SET_VAR(inherited, color, v); } |
-void RenderStyle::setVisitedLinkColor(const Color& v) { SET_VAR(inherited, visitedLinkColor, v); } |
+StyleColor RenderStyle::color() const { return inherited->color; } |
+StyleColor RenderStyle::visitedLinkColor() const { return inherited->visitedLinkColor; } |
+void RenderStyle::setColor(const StyleColor& v) { SET_VAR(inherited, color, v); } |
+void RenderStyle::setVisitedLinkColor(const StyleColor& v) { SET_VAR(inherited, visitedLinkColor, v); } |
short RenderStyle::horizontalBorderSpacing() const { return inherited->horizontal_border_spacing; } |
short RenderStyle::verticalBorderSpacing() const { return inherited->vertical_border_spacing; } |
@@ -1295,9 +1294,9 @@ void RenderStyle::getShadowVerticalExtent(const ShadowData* shadow, LayoutUnit & |
} |
} |
-Color RenderStyle::colorIncludingFallback(int colorProperty, bool visitedLink) const |
+StyleColor RenderStyle::colorIncludingFallback(int colorProperty, bool visitedLink) const |
{ |
- Color result; |
+ StyleColor result; |
EBorderStyle borderStyle = BNONE; |
switch (colorProperty) { |
case CSSPropertyBackgroundColor: |
@@ -1339,12 +1338,24 @@ Color RenderStyle::colorIncludingFallback(int colorProperty, bool visitedLink) c |
case CSSPropertyWebkitTextStrokeColor: |
result = visitedLink ? visitedLinkTextStrokeColor() : textStrokeColor(); |
break; |
+ case CSSPropertyFloodColor: |
+ result = floodColor(); |
+ break; |
+ case CSSPropertyLightingColor: |
+ result = lightingColor(); |
+ break; |
+ case CSSPropertyStopColor: |
+ result = stopColor(); |
+ break; |
+ case CSSPropertyWebkitTapHighlightColor: |
+ result = tapHighlightColor(); |
+ break; |
default: |
ASSERT_NOT_REACHED(); |
break; |
} |
- if (!result.isValid()) { |
+ if (!result.isValid() && !result.isCurrentColor()) { |
if (!visitedLink && (borderStyle == INSET || borderStyle == OUTSET || borderStyle == RIDGE || borderStyle == GROOVE)) |
result.setRGB(238, 238, 238); |
else |
@@ -1353,13 +1364,13 @@ Color RenderStyle::colorIncludingFallback(int colorProperty, bool visitedLink) c |
return result; |
} |
-Color RenderStyle::visitedDependentColor(int colorProperty) const |
+StyleColor RenderStyle::visitedDependentColor(int colorProperty) const |
{ |
- Color unvisitedColor = colorIncludingFallback(colorProperty, false); |
+ StyleColor unvisitedColor = colorIncludingFallback(colorProperty, false); |
if (insideLink() != InsideVisitedLink) |
return unvisitedColor; |
- Color visitedColor = colorIncludingFallback(colorProperty, true); |
+ StyleColor visitedColor = colorIncludingFallback(colorProperty, true); |
// Text decoration color validity is preserved (checked in RenderObject::decorationColor). |
if (colorProperty == CSSPropertyTextDecorationColor) |
@@ -1373,8 +1384,12 @@ Color RenderStyle::visitedDependentColor(int colorProperty) const |
if (colorProperty == CSSPropertyBackgroundColor && visitedColor == Color::transparent) |
return unvisitedColor; |
- // Take the alpha from the unvisited color, but get the RGB values from the visited color. |
- return Color(visitedColor.red(), visitedColor.green(), visitedColor.blue(), unvisitedColor.alpha()); |
+ // Unless the visitied color is 'currentColor'; take the alpha from the unvisited color, |
+ // but get the RGB values from the visited color. |
+ if (visitedColor.isCurrentColor()) |
+ return visitedColor; |
+ |
+ return StyleColor(visitedColor.red(), visitedColor.green(), visitedColor.blue(), unvisitedColor.alpha()); |
} |
const BorderValue& RenderStyle::borderBefore() const |