Index: Source/core/layout/LayoutTheme.cpp |
diff --git a/Source/core/layout/LayoutTheme.cpp b/Source/core/layout/LayoutTheme.cpp |
index 5705d4167a046c771ed54632c8fb85e8bd0c811e..5d1fcddac720cc0c0820a9ce9890f3e7ff4fde3c 100644 |
--- a/Source/core/layout/LayoutTheme.cpp |
+++ b/Source/core/layout/LayoutTheme.cpp |
@@ -49,6 +49,7 @@ |
#include "core/rendering/RenderMeter.h" |
#include "core/rendering/RenderView.h" |
#include "core/rendering/style/RenderStyle.h" |
+#include "core/rendering/style/UAStyleChange.h" |
#include "platform/FileMetadata.h" |
#include "platform/FloatConversion.h" |
#include "platform/RuntimeEnabledFeatures.h" |
@@ -87,7 +88,7 @@ LayoutTheme::LayoutTheme() |
{ |
} |
-void LayoutTheme::adjustStyle(RenderStyle* style, Element* e, const CachedUAStyle* uaStyle) |
+void LayoutTheme::adjustStyle(RenderStyle* style, Element* e, const UAStyleChange& uaStyle) |
{ |
// Force inline and table display styles to be inline-block (except for table- which is block) |
ControlPart part = style->appearance(); |
@@ -99,7 +100,7 @@ void LayoutTheme::adjustStyle(RenderStyle* style, Element* e, const CachedUAStyl |
else if (style->display() == LIST_ITEM || style->display() == TABLE) |
style->setDisplay(BLOCK); |
- if (uaStyle && isControlStyled(style, uaStyle)) { |
+ if (uaStyle.hasAppearance && isControlStyled(style, uaStyle)) { |
if (part == MenulistPart) { |
style->setAppearance(MenulistButtonPart); |
part = MenulistButtonPart; |
@@ -545,25 +546,8 @@ bool LayoutTheme::isControlContainer(ControlPart appearance) const |
return appearance != CheckboxPart && appearance != RadioPart; |
} |
-static bool isBackgroundOrBorderStyled(const RenderStyle& style, const CachedUAStyle& uaStyle) |
+bool LayoutTheme::isControlStyled(const RenderStyle* style, const UAStyleChange& uaStyle) const |
{ |
- // Code below excludes the background-repeat from comparison by resetting it |
- FillLayer backgroundCopy = uaStyle.backgroundLayers; |
- FillLayer backgroundLayersCopy = style.backgroundLayers(); |
- backgroundCopy.setRepeatX(NoRepeatFill); |
- backgroundCopy.setRepeatY(NoRepeatFill); |
- backgroundLayersCopy.setRepeatX(NoRepeatFill); |
- backgroundLayersCopy.setRepeatY(NoRepeatFill); |
- // Test the style to see if the UA border and background match. |
- return style.border() != uaStyle.border |
- || backgroundLayersCopy != backgroundCopy |
- || style.visitedDependentColor(CSSPropertyBackgroundColor) != uaStyle.backgroundColor; |
-} |
- |
-bool LayoutTheme::isControlStyled(const RenderStyle* style, const CachedUAStyle* uaStyle) const |
-{ |
- ASSERT(uaStyle); |
- |
switch (style->appearance()) { |
case PushButtonPart: |
case SquareButtonPart: |
@@ -574,13 +558,13 @@ bool LayoutTheme::isControlStyled(const RenderStyle* style, const CachedUAStyle* |
case ContinuousCapacityLevelIndicatorPart: |
case DiscreteCapacityLevelIndicatorPart: |
case RatingLevelIndicatorPart: |
- return isBackgroundOrBorderStyled(*style, *uaStyle); |
+ return uaStyle.backgroundChanged || uaStyle.borderChanged; |
case MenulistPart: |
case SearchFieldPart: |
case TextAreaPart: |
case TextFieldPart: |
- return isBackgroundOrBorderStyled(*style, *uaStyle) || style->boxShadow(); |
+ return uaStyle.backgroundChanged || uaStyle.borderChanged || style->boxShadow(); |
case SliderHorizontalPart: |
case SliderVerticalPart: |