Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(790)

Unified Diff: Source/core/rendering/RenderObject.h

Issue 20061003: Move isValid/isCurrentColor from Color to StyleColor (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/core/rendering/RenderObject.h
diff --git a/Source/core/rendering/RenderObject.h b/Source/core/rendering/RenderObject.h
index 4555529b240d3b254b7cf7676e7cd2aa57c7223d..80757dd5c8e761c3aa85d1f3de6de30a666d7c8b 100644
--- a/Source/core/rendering/RenderObject.h
+++ b/Source/core/rendering/RenderObject.h
@@ -541,7 +541,13 @@ public:
bool backgroundIsKnownToBeObscured();
bool borderImageIsLoadedAndCanBeRendered() const;
bool mustRepaintBackgroundOrBorder() const;
- bool hasBackground() const { return style()->hasBackground(); }
+ bool hasBackground() const
+ {
+ StyleColor color = resolveColor(CSSPropertyBackgroundColor);
+ if (color.isValid() && color.alpha())
+ return true;
+ return style()->hasBackgroundImage();
+ }
bool hasEntirelyFixedBackground() const;
bool needsLayout() const
@@ -759,23 +765,41 @@ public:
inline Color resolveColor(const RenderStyle* styleToUse, int colorProperty) const
{
- return styleToUse->visitedDependentColor(colorProperty);
+ StyleColor styleColor = resolveCurrentColor(styleToUse, colorProperty);
+ return styleColor.color();
}
inline Color resolveColor(int colorProperty) const
{
- return style()->visitedDependentColor(colorProperty);
+ StyleColor styleColor = resolveCurrentColor(style(), colorProperty);
+ return styleColor.color();
+ }
+
+ inline Color resolveColor(int colorProperty, Color fallbackIfInvalid) const
+ {
+ StyleColor styleColor = resolveCurrentColor(style(), colorProperty);
+ return styleColor.isValid() ? styleColor.color() : fallbackIfInvalid;
}
- inline Color resolveColor(int colorProperty, Color fallback) const
+ inline Color resolveColor(StyleColor color) const
{
- Color color = resolveColor(colorProperty);
- return color.isValid() ? color : fallback;
+ return resolveCurrentColor(color).color();
}
- inline Color resolveColor(Color color) const
+ inline Color resolveColor(StyleColor color, Color fallbackIfInvalid) const
{
- return color;
+ StyleColor styleColor = resolveCurrentColor(color);
+ return styleColor.isValid() ? styleColor.color() : fallbackIfInvalid;
+ }
+
+ inline StyleColor resolveStyleColor(int colorProperty) const
+ {
+ return resolveCurrentColor(style(), colorProperty);
+ }
+
+ inline StyleColor resolveStyleColor(const RenderStyle* styleToUse, int colorProperty) const
+ {
+ return resolveCurrentColor(styleToUse, colorProperty);
}
// Used only by Element::pseudoStyleCacheIsInvalid to get a first line style based off of a
@@ -1021,6 +1045,28 @@ private:
Color selectionColor(int colorProperty) const;
+ inline StyleColor resolveCurrentColor(const RenderStyle* styleToUse, int colorProperty) const
+ {
+ StyleColor styleColor = styleToUse->visitedDependentColor(colorProperty);
+ if (UNLIKELY(styleColor.isCurrentColor()))
+ styleColor = styleToUse->visitedDependentColor(CSSPropertyColor);
+
+ // In the unlikely case that CSSPropertyColor is also 'currentColor'
+ // the color of the nearest ancestor with a valid color is used.
+ for (const RenderObject* object = this; UNLIKELY(styleColor.isCurrentColor()) && object && object->style(); object = object->parent())
+ styleColor = object->style()->visitedDependentColor(CSSPropertyColor);
+
+ return styleColor;
+ }
+
+ inline StyleColor resolveCurrentColor(StyleColor color) const
+ {
+ StyleColor styleColor = color;
+ for (const RenderObject* object = this; UNLIKELY(styleColor.isCurrentColor()) && object && object->style(); object = object->parent())
+ styleColor = object->style()->visitedDependentColor(CSSPropertyColor);
+ return styleColor;
+ }
+
#ifndef NDEBUG
void checkBlockPositionedObjectsNeedLayout();
#endif

Powered by Google App Engine
This is Rietveld 408576698