RenderStyle: Pack Color members tighter in substructures.
authorkling@webkit.org <kling@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 12 Nov 2012 14:42:24 +0000 (14:42 +0000)
committerkling@webkit.org <kling@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 12 Nov 2012 14:42:24 +0000 (14:42 +0000)
<http://webkit.org/b/101860>

Patch by Andreas Kling <kling@webkit.org> on 2012-11-12
Reviewed by Antti Koivisto.

For RenderStyle substructures (StyleInheritedData, et al.), unfold all WebCore::Color
members into RGBA32/bool variables OR just an RGBA32 if the color can never be invalid.

Memory saved per instance:

    - StyleMultiColData:          4 bytes
    - StyleBackgroundData:        8 bytes
    - StyleInheritedData:         8 bytes
    - StyleRareInheritedData:    24 bytes
    - StyleRareNonInheritedData: 24 bytes

323kB progression on Membuster3.

* rendering/style/RenderStyle.cpp:
(WebCore::RenderStyle::diff):
(WebCore::RenderStyle::setColor):
(WebCore::RenderStyle::setVisitedLinkColor):
(WebCore::RenderStyle::setVisitedLinkColumnRuleColor):
(WebCore::RenderStyle::setBackgroundColor):
* rendering/style/RenderStyle.h:
* rendering/style/StyleBackgroundData.cpp:
(WebCore::StyleBackgroundData::StyleBackgroundData):
* rendering/style/StyleBackgroundData.h:
(WebCore::StyleBackgroundData::color):
(StyleBackgroundData):
* rendering/style/StyleInheritedData.cpp:
(WebCore::StyleInheritedData::StyleInheritedData):
* rendering/style/StyleInheritedData.h:
(StyleInheritedData):
* rendering/style/StyleMultiColData.cpp:
(WebCore::StyleMultiColData::StyleMultiColData):
(WebCore::StyleMultiColData::setVisitedLinkColumnRuleColor):
* rendering/style/StyleMultiColData.h:
(StyleMultiColData):
(WebCore::StyleMultiColData::visitedLinkColumnRuleColor):
* rendering/style/StyleRareInheritedData.cpp:
(SameSizeAsStyleRareInheritedData):
(WebCore::StyleRareInheritedData::StyleRareInheritedData):
(WebCore::StyleRareInheritedData::operator==):
(WebCore::StyleRareInheritedData::setTextStrokeColor):
(WebCore::StyleRareInheritedData::setTextFillColor):
(WebCore::StyleRareInheritedData::setTextEmphasisColor):
(WebCore::StyleRareInheritedData::setVisitedLinkTextStrokeColor):
(WebCore::StyleRareInheritedData::setVisitedLinkTextFillColor):
(WebCore::StyleRareInheritedData::setVisitedLinkTextEmphasisColor):
* rendering/style/StyleRareInheritedData.h:
(StyleRareInheritedData):
(WebCore::StyleRareInheritedData::textStrokeColor):
(WebCore::StyleRareInheritedData::textFillColor):
(WebCore::StyleRareInheritedData::textEmphasisColor):
(WebCore::StyleRareInheritedData::visitedLinkTextStrokeColor):
(WebCore::StyleRareInheritedData::visitedLinkTextFillColor):
(WebCore::StyleRareInheritedData::visitedLinkTextEmphasisColor):
* rendering/style/StyleRareNonInheritedData.cpp:
(WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
(WebCore::StyleRareNonInheritedData::operator==):
(WebCore::StyleRareNonInheritedData::setVisitedLinkBorderLeftColor):
(WebCore::StyleRareNonInheritedData::setVisitedLinkBorderRightColor):
(WebCore::StyleRareNonInheritedData::setVisitedLinkBorderTopColor):
(WebCore::StyleRareNonInheritedData::setVisitedLinkBorderBottomColor):
(WebCore::StyleRareNonInheritedData::setVisitedLinkOutlineColor):
(WebCore::StyleRareNonInheritedData::setVisitedLinkBackgroundColor):
* rendering/style/StyleRareNonInheritedData.h:
(WebCore::StyleRareNonInheritedData::visitedLinkBackgroundColor):
(WebCore::StyleRareNonInheritedData::visitedLinkOutlineColor):
(WebCore::StyleRareNonInheritedData::visitedLinkBorderLeftColor):
(WebCore::StyleRareNonInheritedData::visitedLinkBorderRightColor):
(WebCore::StyleRareNonInheritedData::visitedLinkBorderTopColor):
(WebCore::StyleRareNonInheritedData::visitedLinkBorderBottomColor):
(StyleRareNonInheritedData):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@134224 268f45cc-cd09-0410-ab3c-d52691b4dbfc

13 files changed:
Source/WebCore/ChangeLog
Source/WebCore/rendering/style/RenderStyle.cpp
Source/WebCore/rendering/style/RenderStyle.h
Source/WebCore/rendering/style/StyleBackgroundData.cpp
Source/WebCore/rendering/style/StyleBackgroundData.h
Source/WebCore/rendering/style/StyleInheritedData.cpp
Source/WebCore/rendering/style/StyleInheritedData.h
Source/WebCore/rendering/style/StyleMultiColData.cpp
Source/WebCore/rendering/style/StyleMultiColData.h
Source/WebCore/rendering/style/StyleRareInheritedData.cpp
Source/WebCore/rendering/style/StyleRareInheritedData.h
Source/WebCore/rendering/style/StyleRareNonInheritedData.cpp
Source/WebCore/rendering/style/StyleRareNonInheritedData.h

index b0db828..7ebd817 100644 (file)
@@ -1,3 +1,81 @@
+2012-11-12  Andreas Kling  <kling@webkit.org>
+
+        RenderStyle: Pack Color members tighter in substructures.
+        <http://webkit.org/b/101860>
+
+        Reviewed by Antti Koivisto.
+
+        For RenderStyle substructures (StyleInheritedData, et al.), unfold all WebCore::Color
+        members into RGBA32/bool variables OR just an RGBA32 if the color can never be invalid.
+
+        Memory saved per instance:
+
+            - StyleMultiColData:          4 bytes
+            - StyleBackgroundData:        8 bytes
+            - StyleInheritedData:         8 bytes
+            - StyleRareInheritedData:    24 bytes
+            - StyleRareNonInheritedData: 24 bytes
+
+        323kB progression on Membuster3.
+
+        * rendering/style/RenderStyle.cpp:
+        (WebCore::RenderStyle::diff):
+        (WebCore::RenderStyle::setColor):
+        (WebCore::RenderStyle::setVisitedLinkColor):
+        (WebCore::RenderStyle::setVisitedLinkColumnRuleColor):
+        (WebCore::RenderStyle::setBackgroundColor):
+        * rendering/style/RenderStyle.h:
+        * rendering/style/StyleBackgroundData.cpp:
+        (WebCore::StyleBackgroundData::StyleBackgroundData):
+        * rendering/style/StyleBackgroundData.h:
+        (WebCore::StyleBackgroundData::color):
+        (StyleBackgroundData):
+        * rendering/style/StyleInheritedData.cpp:
+        (WebCore::StyleInheritedData::StyleInheritedData):
+        * rendering/style/StyleInheritedData.h:
+        (StyleInheritedData):
+        * rendering/style/StyleMultiColData.cpp:
+        (WebCore::StyleMultiColData::StyleMultiColData):
+        (WebCore::StyleMultiColData::setVisitedLinkColumnRuleColor):
+        * rendering/style/StyleMultiColData.h:
+        (StyleMultiColData):
+        (WebCore::StyleMultiColData::visitedLinkColumnRuleColor):
+        * rendering/style/StyleRareInheritedData.cpp:
+        (SameSizeAsStyleRareInheritedData):
+        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
+        (WebCore::StyleRareInheritedData::operator==):
+        (WebCore::StyleRareInheritedData::setTextStrokeColor):
+        (WebCore::StyleRareInheritedData::setTextFillColor):
+        (WebCore::StyleRareInheritedData::setTextEmphasisColor):
+        (WebCore::StyleRareInheritedData::setVisitedLinkTextStrokeColor):
+        (WebCore::StyleRareInheritedData::setVisitedLinkTextFillColor):
+        (WebCore::StyleRareInheritedData::setVisitedLinkTextEmphasisColor):
+        * rendering/style/StyleRareInheritedData.h:
+        (StyleRareInheritedData):
+        (WebCore::StyleRareInheritedData::textStrokeColor):
+        (WebCore::StyleRareInheritedData::textFillColor):
+        (WebCore::StyleRareInheritedData::textEmphasisColor):
+        (WebCore::StyleRareInheritedData::visitedLinkTextStrokeColor):
+        (WebCore::StyleRareInheritedData::visitedLinkTextFillColor):
+        (WebCore::StyleRareInheritedData::visitedLinkTextEmphasisColor):
+        * rendering/style/StyleRareNonInheritedData.cpp:
+        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
+        (WebCore::StyleRareNonInheritedData::operator==):
+        (WebCore::StyleRareNonInheritedData::setVisitedLinkBorderLeftColor):
+        (WebCore::StyleRareNonInheritedData::setVisitedLinkBorderRightColor):
+        (WebCore::StyleRareNonInheritedData::setVisitedLinkBorderTopColor):
+        (WebCore::StyleRareNonInheritedData::setVisitedLinkBorderBottomColor):
+        (WebCore::StyleRareNonInheritedData::setVisitedLinkOutlineColor):
+        (WebCore::StyleRareNonInheritedData::setVisitedLinkBackgroundColor):
+        * rendering/style/StyleRareNonInheritedData.h:
+        (WebCore::StyleRareNonInheritedData::visitedLinkBackgroundColor):
+        (WebCore::StyleRareNonInheritedData::visitedLinkOutlineColor):
+        (WebCore::StyleRareNonInheritedData::visitedLinkBorderLeftColor):
+        (WebCore::StyleRareNonInheritedData::visitedLinkBorderRightColor):
+        (WebCore::StyleRareNonInheritedData::visitedLinkBorderTopColor):
+        (WebCore::StyleRareNonInheritedData::visitedLinkBorderBottomColor):
+        (StyleRareNonInheritedData):
+
 2012-11-12  Pavel Feldman  <pfeldman@chromium.org>
 
         Web Inspector: migrate text editor to mutation observers
index 179d325..f0669f3 100644 (file)
@@ -667,9 +667,9 @@ StyleDifference RenderStyle::diff(const RenderStyle* other, unsigned& changedCon
 #if ENABLE(CSS3_TEXT)
         || rareNonInheritedData->m_textDecorationStyle != other->rareNonInheritedData->m_textDecorationStyle
 #endif // CSS3_TEXT
-        || rareInheritedData->textFillColor != other->rareInheritedData->textFillColor
-        || rareInheritedData->textStrokeColor != other->rareInheritedData->textStrokeColor
-        || rareInheritedData->textEmphasisColor != other->rareInheritedData->textEmphasisColor
+        || rareInheritedData->textFillColor() != other->rareInheritedData->textFillColor()
+        || rareInheritedData->textStrokeColor() != other->rareInheritedData->textStrokeColor()
+        || rareInheritedData->textEmphasisColor() != other->rareInheritedData->textEmphasisColor()
         || rareInheritedData->textEmphasisFill != other->rareInheritedData->textEmphasisFill
         || rareInheritedData->m_imageRendering != other->rareInheritedData->m_imageRendering)
         return StyleDifferenceRepaint;
@@ -974,8 +974,24 @@ void RenderStyle::setListStyleImage(PassRefPtr<StyleImage> 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) }
+
+void RenderStyle::setColor(const Color& v)
+{
+    ASSERT(v.isValid());
+    SET_VAR(inherited, color, v.rgb());
+}
+
+void RenderStyle::setVisitedLinkColor(const Color& v)
+{
+    ASSERT(v.isValid());
+    SET_VAR(inherited, visitedLinkColor, v.rgb());
+}
+
+void RenderStyle::setBackgroundColor(const Color& v)
+{
+    ASSERT(v.isValid());
+    SET_VAR(m_background, m_color, v.rgb());
+}
 
 short RenderStyle::horizontalBorderSpacing() const { return inherited->horizontal_border_spacing; }
 short RenderStyle::verticalBorderSpacing() const { return inherited->vertical_border_spacing; }
@@ -1566,6 +1582,12 @@ TextEmphasisMark RenderStyle::textEmphasisMark() const
     return TextEmphasisMarkSesame;
 }
 
+void RenderStyle::setVisitedLinkColumnRuleColor(const Color& color)
+{
+    if (rareNonInheritedData->m_multiCol->visitedLinkColumnRuleColor() != color)
+        rareNonInheritedData.access()->m_multiCol.access()->setVisitedLinkColumnRuleColor(color);
+}
+
 #if ENABLE(TOUCH_EVENTS)
 Color RenderStyle::initialTapHighlightColor()
 {
index 65dcfd8..767f1e5 100644 (file)
@@ -96,6 +96,10 @@ template<typename T, typename U> inline bool compareEqual(const T& t, const U& u
     if (!compareEqual(group->variable.color(), value)) \
         group.access()->variable.setColor(value);
 
+#define SET_ACCESSOR_VAR(group, getter, setter, value) \
+    if (!compareEqual(group->getter(), value)) \
+        group.access()->setter(value);
+
 namespace WebCore {
 
 using std::max;
@@ -1059,7 +1063,7 @@ public:
     void resetBorderBottomLeftRadius() { SET_VAR(surround, border.m_bottomLeft, initialBorderRadius()) }
     void resetBorderBottomRightRadius() { SET_VAR(surround, border.m_bottomRight, initialBorderRadius()) }
 
-    void setBackgroundColor(const Color& v) { SET_VAR(m_background, m_color, v) }
+    void setBackgroundColor(const Color&);
 
     void setBackgroundXPosition(Length l) { SET_VAR(m_background, m_background.m_xPosition, l) }
     void setBackgroundYPosition(Length l) { SET_VAR(m_background, m_background.m_yPosition, l) }
@@ -1263,9 +1267,9 @@ public:
     // CSS3 Setters
     void setOutlineOffset(int v) { SET_VAR(m_background, m_outline.m_offset, v) }
     void setTextShadow(PassOwnPtr<ShadowData>, bool add = false);
-    void setTextStrokeColor(const Color& c) { SET_VAR(rareInheritedData, textStrokeColor, c) }
+    void setTextStrokeColor(const Color& c) { SET_ACCESSOR_VAR(rareInheritedData, textStrokeColor, setTextStrokeColor, c) }
     void setTextStrokeWidth(float w) { SET_VAR(rareInheritedData, textStrokeWidth, w) }
-    void setTextFillColor(const Color& c) { SET_VAR(rareInheritedData, textFillColor, c) }
+    void setTextFillColor(const Color& c) { SET_ACCESSOR_VAR(rareInheritedData, textFillColor, setTextFillColor, c) }
     void setColorSpace(ColorSpace space) { SET_VAR(rareInheritedData, colorSpace, space) }
     void setOpacity(float f) { float v = clampTo<float>(f, 0, 1); SET_VAR(rareNonInheritedData, opacity, v); }
     void setAppearance(ControlPart a) { SET_VAR(rareNonInheritedData, m_appearance, a); }
@@ -1350,7 +1354,7 @@ public:
     void setTransformOriginZ(float f) { SET_VAR(rareNonInheritedData.access()->m_transform, m_z, f); }
     void setSpeak(ESpeak s) { SET_VAR(rareInheritedData, speak, s); }
     void setTextCombine(TextCombine v) { SET_VAR(rareNonInheritedData, m_textCombine, v); }
-    void setTextEmphasisColor(const Color& c) { SET_VAR(rareInheritedData, textEmphasisColor, c) }
+    void setTextEmphasisColor(const Color& c) { SET_ACCESSOR_VAR(rareInheritedData, textEmphasisColor, setTextEmphasisColor, c) }
     void setTextEmphasisFill(TextEmphasisFill fill) { SET_VAR(rareInheritedData, textEmphasisFill, fill); }
     void setTextEmphasisMark(TextEmphasisMark mark) { SET_VAR(rareInheritedData, textEmphasisMark, mark); }
     void setTextEmphasisCustomMark(const AtomicString& mark) { SET_VAR(rareInheritedData, textEmphasisCustomMark, mark); }
@@ -1409,7 +1413,7 @@ public:
     void setLineBoxContain(LineBoxContain c) { SET_VAR(rareInheritedData, m_lineBoxContain, c); }
     void setLineClamp(LineClampValue c) { SET_VAR(rareNonInheritedData, lineClamp, c); }
 #if ENABLE(TOUCH_EVENTS)
-    void setTapHighlightColor(const Color& c) { SET_VAR(rareInheritedData, tapHighlightColor, c); }
+    void setTapHighlightColor(const Color& c) { SET_VAR(rareInheritedData, tapHighlightColor, c.rgb()); }
 #endif
 #if ENABLE(ACCELERATED_OVERFLOW_SCROLLING)
     void setUseTouchOverflowScrolling(bool v) { SET_VAR(rareInheritedData, useTouchOverflowScrolling, v); }
@@ -1683,7 +1687,7 @@ public:
     static Length initialPerspectiveOriginX() { return Length(50.0, Percent); }
     static Length initialPerspectiveOriginY() { return Length(50.0, Percent); }
     static Color initialBackgroundColor() { return Color::transparent; }
-    static Color initialTextEmphasisColor() { return TextEmphasisFillFilled; }
+    static Color initialTextEmphasisColor() { return Color::transparent; }
     static TextEmphasisFill initialTextEmphasisFill() { return TextEmphasisFillFilled; }
     static TextEmphasisMark initialTextEmphasisMark() { return TextEmphasisMarkNone; }
     static const AtomicString& initialTextEmphasisCustomMark() { return nullAtom; }
@@ -1749,16 +1753,17 @@ public:
 #endif
 private:
     void setVisitedLinkColor(const Color&);
-    void setVisitedLinkBackgroundColor(const Color& v) { SET_VAR(rareNonInheritedData, m_visitedLinkBackgroundColor, v) }
-    void setVisitedLinkBorderLeftColor(const Color& v) { SET_VAR(rareNonInheritedData, m_visitedLinkBorderLeftColor, v) }
-    void setVisitedLinkBorderRightColor(const Color& v) { SET_VAR(rareNonInheritedData, m_visitedLinkBorderRightColor, v) }
-    void setVisitedLinkBorderBottomColor(const Color& v) { SET_VAR(rareNonInheritedData, m_visitedLinkBorderBottomColor, v) }
-    void setVisitedLinkBorderTopColor(const Color& v) { SET_VAR(rareNonInheritedData, m_visitedLinkBorderTopColor, v) }
-    void setVisitedLinkOutlineColor(const Color& v) { SET_VAR(rareNonInheritedData, m_visitedLinkOutlineColor, v) }
-    void setVisitedLinkColumnRuleColor(const Color& v) { SET_VAR(rareNonInheritedData.access()->m_multiCol, m_visitedLinkColumnRuleColor, v) }
-    void setVisitedLinkTextEmphasisColor(const Color& v) { SET_VAR(rareInheritedData, visitedLinkTextEmphasisColor, v) }
-    void setVisitedLinkTextFillColor(const Color& v) { SET_VAR(rareInheritedData, visitedLinkTextFillColor, v) }
-    void setVisitedLinkTextStrokeColor(const Color& v) { SET_VAR(rareInheritedData, visitedLinkTextStrokeColor, v) }
+
+    void setVisitedLinkBackgroundColor(const Color& v) { SET_ACCESSOR_VAR(rareNonInheritedData, visitedLinkBackgroundColor, setVisitedLinkBackgroundColor, v) }
+    void setVisitedLinkBorderLeftColor(const Color& v) { SET_ACCESSOR_VAR(rareNonInheritedData, visitedLinkBorderLeftColor, setVisitedLinkBorderLeftColor, v) }
+    void setVisitedLinkBorderRightColor(const Color& v) { SET_ACCESSOR_VAR(rareNonInheritedData, visitedLinkBorderRightColor, setVisitedLinkBorderRightColor, v) }
+    void setVisitedLinkBorderBottomColor(const Color& v) { SET_ACCESSOR_VAR(rareNonInheritedData, visitedLinkBorderBottomColor, setVisitedLinkBorderBottomColor, v) }
+    void setVisitedLinkBorderTopColor(const Color& v) { SET_ACCESSOR_VAR(rareNonInheritedData, visitedLinkBorderTopColor, setVisitedLinkBorderTopColor, v) }
+    void setVisitedLinkOutlineColor(const Color& v) { SET_ACCESSOR_VAR(rareNonInheritedData, visitedLinkOutlineColor, setVisitedLinkOutlineColor, v) }
+    void setVisitedLinkColumnRuleColor(const Color&);
+    void setVisitedLinkTextEmphasisColor(const Color& v) { SET_ACCESSOR_VAR(rareInheritedData, visitedLinkTextEmphasisColor, setVisitedLinkTextEmphasisColor, v) }
+    void setVisitedLinkTextFillColor(const Color& v) { SET_ACCESSOR_VAR(rareInheritedData, visitedLinkTextFillColor, setVisitedLinkTextFillColor, v) }
+    void setVisitedLinkTextStrokeColor(const Color& v) { SET_ACCESSOR_VAR(rareInheritedData, visitedLinkTextStrokeColor, setVisitedLinkTextStrokeColor, v) }
 
     void inheritUnicodeBidiFrom(const RenderStyle* parent) { noninherited_flags._unicodeBidi = parent->noninherited_flags._unicodeBidi; }
     void getShadowExtent(const ShadowData*, LayoutUnit& top, LayoutUnit& right, LayoutUnit& bottom, LayoutUnit& left) const;
@@ -1795,20 +1800,20 @@ private:
     Color color() const;
     Color columnRuleColor() const { return rareNonInheritedData->m_multiCol->m_rule.color(); }
     Color outlineColor() const { return m_background->outline().color(); }
-    Color textEmphasisColor() const { return rareInheritedData->textEmphasisColor; }
-    Color textFillColor() const { return rareInheritedData->textFillColor; }
-    Color textStrokeColor() const { return rareInheritedData->textStrokeColor; }
+    Color textEmphasisColor() const { return rareInheritedData->textEmphasisColor(); }
+    Color textFillColor() const { return rareInheritedData->textFillColor(); }
+    Color textStrokeColor() const { return rareInheritedData->textStrokeColor(); }
     Color visitedLinkColor() const;
-    Color visitedLinkBackgroundColor() const { return rareNonInheritedData->m_visitedLinkBackgroundColor; }
-    Color visitedLinkBorderLeftColor() const { return rareNonInheritedData->m_visitedLinkBorderLeftColor; }
-    Color visitedLinkBorderRightColor() const { return rareNonInheritedData->m_visitedLinkBorderRightColor; }
-    Color visitedLinkBorderBottomColor() const { return rareNonInheritedData->m_visitedLinkBorderBottomColor; }
-    Color visitedLinkBorderTopColor() const { return rareNonInheritedData->m_visitedLinkBorderTopColor; }
-    Color visitedLinkOutlineColor() const { return rareNonInheritedData->m_visitedLinkOutlineColor; }
-    Color visitedLinkColumnRuleColor() const { return rareNonInheritedData->m_multiCol->m_visitedLinkColumnRuleColor; }
-    Color visitedLinkTextEmphasisColor() const { return rareInheritedData->visitedLinkTextEmphasisColor; }
-    Color visitedLinkTextFillColor() const { return rareInheritedData->visitedLinkTextFillColor; }
-    Color visitedLinkTextStrokeColor() const { return rareInheritedData->visitedLinkTextStrokeColor; }
+    Color visitedLinkBackgroundColor() const { return rareNonInheritedData->visitedLinkBackgroundColor(); }
+    Color visitedLinkBorderLeftColor() const { return rareNonInheritedData->visitedLinkBorderLeftColor(); }
+    Color visitedLinkBorderRightColor() const { return rareNonInheritedData->visitedLinkBorderRightColor(); }
+    Color visitedLinkBorderBottomColor() const { return rareNonInheritedData->visitedLinkBorderBottomColor(); }
+    Color visitedLinkBorderTopColor() const { return rareNonInheritedData->visitedLinkBorderTopColor(); }
+    Color visitedLinkOutlineColor() const { return rareNonInheritedData->visitedLinkOutlineColor(); }
+    Color visitedLinkColumnRuleColor() const { return rareNonInheritedData->m_multiCol->visitedLinkColumnRuleColor(); }
+    Color visitedLinkTextEmphasisColor() const { return rareInheritedData->visitedLinkTextEmphasisColor(); }
+    Color visitedLinkTextFillColor() const { return rareInheritedData->visitedLinkTextFillColor(); }
+    Color visitedLinkTextStrokeColor() const { return rareInheritedData->visitedLinkTextStrokeColor(); }
 
     Color colorIncludingFallback(int colorProperty, bool visitedLink) const;
 
index 08f5527..edb4605 100644 (file)
 namespace WebCore {
 
 StyleBackgroundData::StyleBackgroundData()
-    : m_background(BackgroundFillLayer)
-    , m_color(RenderStyle::initialBackgroundColor())
+    : m_color(RenderStyle::initialBackgroundColor().rgb())
+    , m_background(BackgroundFillLayer)
 {
 }
 
 StyleBackgroundData::StyleBackgroundData(const StyleBackgroundData& o)
     : RefCounted<StyleBackgroundData>()
-    , m_background(o.m_background)
     , m_color(o.m_color)
+    , m_background(o.m_background)
     , m_outline(o.m_outline)
 {
 }
index 48a700e..6572095 100644 (file)
@@ -46,7 +46,7 @@ public:
     }
 
     const FillLayer& background() const { return m_background; }
-    const Color& color() const { return m_color; }
+    const Color color() const { return m_color; }
     const OutlineValue& outline() const { return m_outline; }
 
 private:
@@ -55,8 +55,8 @@ private:
     StyleBackgroundData();
     StyleBackgroundData(const StyleBackgroundData&); 
 
+    RGBA32 m_color;
     FillLayer m_background;
-    Color m_color;
     OutlineValue m_outline;
 };
 
index 021740f..d37c008 100644 (file)
@@ -32,8 +32,8 @@ StyleInheritedData::StyleInheritedData()
     , vertical_border_spacing(RenderStyle::initialVerticalBorderSpacing())
     , line_height(RenderStyle::initialLineHeight())
     , list_style_image(RenderStyle::initialListStyleImage())
-    , color(RenderStyle::initialColor())
-    , visitedLinkColor(RenderStyle::initialColor())
+    , color(RenderStyle::initialColor().rgb())
+    , visitedLinkColor(RenderStyle::initialColor().rgb())
 {
 }
 
@@ -47,9 +47,9 @@ StyleInheritedData::StyleInheritedData(const StyleInheritedData& o)
     , vertical_border_spacing(o.vertical_border_spacing)
     , line_height(o.line_height)
     , list_style_image(o.list_style_image)
-    , font(o.font)
     , color(o.color)
     , visitedLinkColor(o.visitedLinkColor)
+    , font(o.font)
 {
 }
 
index 6cb7bc5..337f261 100644 (file)
@@ -57,9 +57,10 @@ public:
 
     RefPtr<StyleImage> list_style_image;
 
+    RGBA32 color;
+    RGBA32 visitedLinkColor;
+
     Font font;
-    Color color;
-    Color visitedLinkColor;
 
 private:
     StyleInheritedData();
index 610277c..5075f46 100644 (file)
@@ -39,6 +39,8 @@ StyleMultiColData::StyleMultiColData()
     , m_breakInside(RenderStyle::initialPageBreak())
     , m_axis(RenderStyle::initialColumnAxis())
     , m_progression(RenderStyle::initialColumnProgression())
+    , m_hasVisitedLinkColumnRuleColor(false)
+    , m_visitedLinkColumnRuleColor(Color::transparent)
 {
 }
 
@@ -48,7 +50,6 @@ StyleMultiColData::StyleMultiColData(const StyleMultiColData& o)
     , m_count(o.m_count)
     , m_gap(o.m_gap)
     , m_rule(o.m_rule)
-    , m_visitedLinkColumnRuleColor(o.m_visitedLinkColumnRuleColor)
     , m_autoWidth(o.m_autoWidth)
     , m_autoCount(o.m_autoCount)
     , m_normalGap(o.m_normalGap)
@@ -58,6 +59,8 @@ StyleMultiColData::StyleMultiColData(const StyleMultiColData& o)
     , m_breakInside(o.m_breakInside)
     , m_axis(o.m_axis)
     , m_progression(o.m_progression)
+    , m_hasVisitedLinkColumnRuleColor(o.m_hasVisitedLinkColumnRuleColor)
+    , m_visitedLinkColumnRuleColor(o.m_visitedLinkColumnRuleColor)
 {
 }
 
@@ -70,4 +73,10 @@ bool StyleMultiColData::operator==(const StyleMultiColData& o) const
            && m_progression == o.m_progression;
 }
 
+void StyleMultiColData::setVisitedLinkColumnRuleColor(const Color& color)
+{
+    m_hasVisitedLinkColumnRuleColor = color.isValid();
+    m_visitedLinkColumnRuleColor = color.rgb();
+}
+
 } // namespace WebCore
index 888ae6d..bfabde6 100644 (file)
@@ -57,7 +57,9 @@ public:
     unsigned short m_count;
     float m_gap;
     BorderValue m_rule;
-    Color m_visitedLinkColumnRuleColor;
+
+    Color visitedLinkColumnRuleColor() const { return m_hasVisitedLinkColumnRuleColor ? Color(m_visitedLinkColumnRuleColor) : Color(); }
+    void setVisitedLinkColumnRuleColor(const Color&);
 
     bool m_autoWidth : 1;
     bool m_autoCount : 1;
@@ -70,6 +72,9 @@ public:
     unsigned m_progression : 2; // ColumnProgression
 
 private:
+    bool m_hasVisitedLinkColumnRuleColor : 1;
+    RGBA32 m_visitedLinkColumnRuleColor;
+
     StyleMultiColData();
     StyleMultiColData(const StyleMultiColData&);
 };
index b1ba598..ab04907 100644 (file)
 #include "RenderStyle.h"
 #include "RenderStyleConstants.h"
 #include "ShadowData.h"
+#include "StyleImage.h"
 #include "WebCoreMemoryInstrumentation.h"
 
 namespace WebCore {
 
 struct SameSizeAsStyleRareInheritedData : public RefCounted<SameSizeAsStyleRareInheritedData> {
-    Color firstColor;
     float firstFloat;
-    Color colors[5];
+    RGBA32 colors[6];
     void* ownPtrs[1];
     AtomicString atomicStrings[5];
     void* refPtrs[2];
@@ -50,7 +50,7 @@ struct SameSizeAsStyleRareInheritedData : public RefCounted<SameSizeAsStyleRareI
 #endif
 
 #if ENABLE(TOUCH_EVENTS)
-    Color touchColors;
+    RGBA32 touchColors;
 #endif
 
 #if ENABLE(CSS_VARIABLES)
@@ -66,6 +66,12 @@ StyleRareInheritedData::StyleRareInheritedData()
     , m_effectiveZoom(RenderStyle::initialZoom())
     , widows(RenderStyle::initialWidows())
     , orphans(RenderStyle::initialOrphans())
+    , m_hasTextStrokeColor(false)
+    , m_hasTextFillColor(false)
+    , m_hasTextEmphasisColor(false)
+    , m_hasVisitedLinkTextStrokeColor(false)
+    , m_hasVisitedLinkTextFillColor(false)
+    , m_hasVisitedLinkTextEmphasisColor(false)
     , textSecurity(RenderStyle::initialTextSecurity())
     , userModify(READ_ONLY)
     , wordBreak(RenderStyle::initialWordBreak())
@@ -107,8 +113,14 @@ StyleRareInheritedData::StyleRareInheritedData()
     , m_imageResolution(RenderStyle::initialImageResolution())
 #endif
 #if ENABLE(TOUCH_EVENTS)
-    , tapHighlightColor(RenderStyle::initialTapHighlightColor())
-#endif    
+    , tapHighlightColor(RenderStyle::initialTapHighlightColor().rgb())
+#endif
+    , m_textStrokeColor(Color::transparent)
+    , m_textFillColor(Color::transparent)
+    , m_textEmphasisColor(Color::transparent)
+    , m_visitedLinkTextStrokeColor(Color::transparent)
+    , m_visitedLinkTextFillColor(Color::transparent)
+    , m_visitedLinkTextEmphasisColor(Color::transparent)
 {
 #if ENABLE(CSS_VARIABLES)
     m_variables.init();
@@ -117,13 +129,7 @@ StyleRareInheritedData::StyleRareInheritedData()
 
 StyleRareInheritedData::StyleRareInheritedData(const StyleRareInheritedData& o)
     : RefCounted<StyleRareInheritedData>()
-    , textStrokeColor(o.textStrokeColor)
     , textStrokeWidth(o.textStrokeWidth)
-    , textFillColor(o.textFillColor)
-    , textEmphasisColor(o.textEmphasisColor)
-    , visitedLinkTextStrokeColor(o.visitedLinkTextStrokeColor)
-    , visitedLinkTextFillColor(o.visitedLinkTextFillColor)
-    , visitedLinkTextEmphasisColor(o.visitedLinkTextEmphasisColor)
     , textShadow(o.textShadow ? adoptPtr(new ShadowData(*o.textShadow)) : nullptr)
     , highlight(o.highlight)
     , cursorData(o.cursorData)
@@ -131,6 +137,12 @@ StyleRareInheritedData::StyleRareInheritedData(const StyleRareInheritedData& o)
     , m_effectiveZoom(o.m_effectiveZoom)
     , widows(o.widows)
     , orphans(o.orphans)
+    , m_hasTextStrokeColor(o.m_hasTextStrokeColor)
+    , m_hasTextFillColor(o.m_hasTextFillColor)
+    , m_hasTextEmphasisColor(o.m_hasTextEmphasisColor)
+    , m_hasVisitedLinkTextStrokeColor(o.m_hasVisitedLinkTextStrokeColor)
+    , m_hasVisitedLinkTextFillColor(o.m_hasVisitedLinkTextFillColor)
+    , m_hasVisitedLinkTextEmphasisColor(o.m_hasVisitedLinkTextEmphasisColor)
     , textSecurity(o.textSecurity)
     , userModify(o.userModify)
     , wordBreak(o.wordBreak)
@@ -180,6 +192,12 @@ StyleRareInheritedData::StyleRareInheritedData(const StyleRareInheritedData& o)
 #if ENABLE(CSS_VARIABLES)
     , m_variables(o.m_variables)
 #endif
+    , m_textStrokeColor(o.m_textStrokeColor)
+    , m_textFillColor(o.m_textFillColor)
+    , m_textEmphasisColor(o.m_textEmphasisColor)
+    , m_visitedLinkTextStrokeColor(o.m_visitedLinkTextStrokeColor)
+    , m_visitedLinkTextFillColor(o.m_visitedLinkTextFillColor)
+    , m_visitedLinkTextEmphasisColor(o.m_visitedLinkTextEmphasisColor)
 {
 }
 
@@ -198,13 +216,13 @@ static bool cursorDataEquivalent(const CursorList* c1, const CursorList* c2)
 
 bool StyleRareInheritedData::operator==(const StyleRareInheritedData& o) const
 {
-    return textStrokeColor == o.textStrokeColor
+    return textStrokeColor() == o.textStrokeColor()
         && textStrokeWidth == o.textStrokeWidth
-        && textFillColor == o.textFillColor
-        && textEmphasisColor == o.textEmphasisColor
-        && visitedLinkTextStrokeColor == o.visitedLinkTextStrokeColor
-        && visitedLinkTextFillColor == o.visitedLinkTextFillColor
-        && visitedLinkTextEmphasisColor == o.visitedLinkTextEmphasisColor
+        && textFillColor() == o.textFillColor()
+        && textEmphasisColor() == o.textEmphasisColor()
+        && visitedLinkTextStrokeColor() == o.visitedLinkTextStrokeColor()
+        && visitedLinkTextFillColor() == o.visitedLinkTextFillColor()
+        && visitedLinkTextEmphasisColor() == o.visitedLinkTextEmphasisColor()
 #if ENABLE(TOUCH_EVENTS)
         && tapHighlightColor == o.tapHighlightColor
 #endif
@@ -271,6 +289,42 @@ bool StyleRareInheritedData::shadowDataEquivalent(const StyleRareInheritedData&
     return true;
 }
 
+void StyleRareInheritedData::setTextStrokeColor(const Color& color)
+{
+    m_hasTextStrokeColor = color.isValid();
+    m_textStrokeColor = color.rgb();
+}
+
+void StyleRareInheritedData::setTextFillColor(const Color& color)
+{
+    m_hasTextFillColor = color.isValid();
+    m_textFillColor = color.rgb();
+}
+
+void StyleRareInheritedData::setTextEmphasisColor(const Color& color)
+{
+    m_hasTextEmphasisColor = color.isValid();
+    m_textEmphasisColor = color.rgb();
+}
+
+void StyleRareInheritedData::setVisitedLinkTextStrokeColor(const Color& color)
+{
+    m_hasVisitedLinkTextStrokeColor = color.isValid();
+    m_visitedLinkTextStrokeColor = color.rgb();
+}
+
+void StyleRareInheritedData::setVisitedLinkTextFillColor(const Color& color)
+{
+    m_hasVisitedLinkTextFillColor = color.isValid();
+    m_visitedLinkTextFillColor = color.rgb();
+}
+
+void StyleRareInheritedData::setVisitedLinkTextEmphasisColor(const Color& color)
+{
+    m_hasVisitedLinkTextEmphasisColor = color.isValid();
+    m_visitedLinkTextEmphasisColor = color.rgb();
+}
+
 void StyleRareInheritedData::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
 {
     MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::CSS);
index d07e04c..16013c5 100644 (file)
@@ -41,6 +41,7 @@ namespace WebCore {
 class CursorList;
 class QuotesData;
 class ShadowData;
+class StyleImage;
 
 // This struct is for rarely used inherited CSS3, CSS2, and WebKit-specific properties.
 // By grouping them together, we save space, and only allocate this object when someone
@@ -60,18 +61,25 @@ public:
 
     void reportMemoryUsage(MemoryObjectInfo*) const;
 
-    Color textStrokeColor;
     float textStrokeWidth;
-    Color textFillColor;
-    Color textEmphasisColor;
-    
-    Color visitedLinkTextStrokeColor;
-    Color visitedLinkTextFillColor;
-    Color visitedLinkTextEmphasisColor;    
+
+    Color textStrokeColor() const { return m_hasTextStrokeColor ? Color(m_textStrokeColor) : Color(); }
+    Color textFillColor() const { return m_hasTextFillColor ? Color(m_textFillColor) : Color(); }
+    Color textEmphasisColor() const { return m_hasTextEmphasisColor ? Color(m_textEmphasisColor) : Color(); }
+    Color visitedLinkTextStrokeColor() const { return m_hasVisitedLinkTextStrokeColor ? Color(m_visitedLinkTextStrokeColor) : Color(); }
+    Color visitedLinkTextFillColor() const { return m_hasVisitedLinkTextFillColor ? Color(m_visitedLinkTextFillColor) : Color(); }
+    Color visitedLinkTextEmphasisColor() const { return m_hasVisitedLinkTextEmphasisColor ? Color(m_visitedLinkTextEmphasisColor) : Color(); }
+
+    void setTextStrokeColor(const Color&);
+    void setTextFillColor(const Color&);
+    void setTextEmphasisColor(const Color&);
+    void setVisitedLinkTextStrokeColor(const Color&);
+    void setVisitedLinkTextFillColor(const Color&);
+    void setVisitedLinkTextEmphasisColor(const Color&);
 
     OwnPtr<ShadowData> textShadow; // Our text shadow information for shadowed text drawing.
     AtomicString highlight; // Apple-specific extension for custom highlight rendering.
-    
+
     RefPtr<CursorList> cursorData;
     Length indent;
     float m_effectiveZoom;
@@ -79,7 +87,13 @@ public:
     // Paged media properties.
     short widows;
     short orphans;
-    
+
+    unsigned m_hasTextStrokeColor : 1;
+    unsigned m_hasTextFillColor : 1;
+    unsigned m_hasTextEmphasisColor : 1;
+    unsigned m_hasVisitedLinkTextStrokeColor : 1;
+    unsigned m_hasVisitedLinkTextFillColor : 1;
+    unsigned m_hasVisitedLinkTextEmphasisColor : 1;
     unsigned textSecurity : 2; // ETextSecurity
     unsigned userModify : 2; // EUserModify (editing)
     unsigned wordBreak : 2; // EWordBreak
@@ -132,7 +146,7 @@ public:
 #endif
 
 #if ENABLE(TOUCH_EVENTS)
-    Color tapHighlightColor;
+    RGBA32 tapHighlightColor;
 #endif
 
 #if ENABLE(CSS_VARIABLES)
@@ -140,6 +154,14 @@ public:
 #endif
 
 private:
+    RGBA32 m_textStrokeColor;
+    RGBA32 m_textFillColor;
+    RGBA32 m_textEmphasisColor;
+
+    RGBA32 m_visitedLinkTextStrokeColor;
+    RGBA32 m_visitedLinkTextFillColor;
+    RGBA32 m_visitedLinkTextEmphasisColor;
+
     StyleRareInheritedData();
     StyleRareInheritedData(const StyleRareInheritedData&);
 };
index 6c89896..de17c23 100644 (file)
@@ -54,7 +54,6 @@ StyleRareNonInheritedData::StyleRareNonInheritedData()
     , m_wrapMargin(RenderStyle::initialWrapMargin())
     , m_wrapPadding(RenderStyle::initialWrapPadding())
     , m_clipPath(RenderStyle::initialClipPath())
-    , m_visitedLinkBackgroundColor(RenderStyle::initialBackgroundColor())
     , m_order(RenderStyle::initialOrder())
     , m_flowThread(RenderStyle::initialFlowThread())
     , m_regionThread(RenderStyle::initialRegionThread())
@@ -88,6 +87,19 @@ StyleRareNonInheritedData::StyleRareNonInheritedData()
 #if ENABLE(CSS_COMPOSITING)
     , m_effectiveBlendMode(RenderStyle::initialBlendMode())
 #endif
+    , m_hasVisitedLinkBackgroundColor(RenderStyle::initialBackgroundColor().isValid())
+    , m_hasVisitedLinkOutlineColor(false)
+    , m_hasVisitedLinkBorderLeftColor(false)
+    , m_hasVisitedLinkBorderRightColor(false)
+    , m_hasVisitedLinkBorderTopColor(false)
+    , m_hasVisitedLinkBorderBottomColor(false)
+    , m_visitedLinkBackgroundColor(RenderStyle::initialBackgroundColor().rgb())
+    , m_visitedLinkOutlineColor(Color::transparent)
+    , m_visitedLinkBorderLeftColor(Color::transparent)
+    , m_visitedLinkBorderRightColor(Color::transparent)
+    , m_visitedLinkBorderTopColor(Color::transparent)
+    , m_visitedLinkBorderBottomColor(Color::transparent)
+
 {
     m_maskBoxImage.setMaskDefaults();
 }
@@ -128,12 +140,6 @@ StyleRareNonInheritedData::StyleRareNonInheritedData(const StyleRareNonInherited
     , m_wrapMargin(o.m_wrapMargin)
     , m_wrapPadding(o.m_wrapPadding)
     , m_clipPath(o.m_clipPath)
-    , m_visitedLinkBackgroundColor(o.m_visitedLinkBackgroundColor)
-    , m_visitedLinkOutlineColor(o.m_visitedLinkOutlineColor)
-    , m_visitedLinkBorderLeftColor(o.m_visitedLinkBorderLeftColor)
-    , m_visitedLinkBorderRightColor(o.m_visitedLinkBorderRightColor)
-    , m_visitedLinkBorderTopColor(o.m_visitedLinkBorderTopColor)
-    , m_visitedLinkBorderBottomColor(o.m_visitedLinkBorderBottomColor)
     , m_order(o.m_order)
     , m_flowThread(o.m_flowThread)
     , m_regionThread(o.m_regionThread)
@@ -167,6 +173,18 @@ StyleRareNonInheritedData::StyleRareNonInheritedData(const StyleRareNonInherited
 #if ENABLE(CSS_COMPOSITING)
     , m_effectiveBlendMode(o.m_effectiveBlendMode)
 #endif
+    , m_hasVisitedLinkBackgroundColor(o.m_hasVisitedLinkBackgroundColor)
+    , m_hasVisitedLinkOutlineColor(o.m_hasVisitedLinkOutlineColor)
+    , m_hasVisitedLinkBorderLeftColor(o.m_hasVisitedLinkBorderLeftColor)
+    , m_hasVisitedLinkBorderRightColor(o.m_hasVisitedLinkBorderRightColor)
+    , m_hasVisitedLinkBorderTopColor(o.m_hasVisitedLinkBorderTopColor)
+    , m_hasVisitedLinkBorderBottomColor(o.m_hasVisitedLinkBorderBottomColor)
+    , m_visitedLinkBackgroundColor(o.m_visitedLinkBackgroundColor)
+    , m_visitedLinkOutlineColor(o.m_visitedLinkOutlineColor)
+    , m_visitedLinkBorderLeftColor(o.m_visitedLinkBorderLeftColor)
+    , m_visitedLinkBorderRightColor(o.m_visitedLinkBorderRightColor)
+    , m_visitedLinkBorderTopColor(o.m_visitedLinkBorderTopColor)
+    , m_visitedLinkBorderBottomColor(o.m_visitedLinkBorderBottomColor)
 {
 }
 
@@ -213,12 +231,12 @@ bool StyleRareNonInheritedData::operator==(const StyleRareNonInheritedData& o) c
         && m_wrapMargin == o.m_wrapMargin
         && m_wrapPadding == o.m_wrapPadding
         && m_clipPath == o.m_clipPath
-        && m_visitedLinkBackgroundColor == o.m_visitedLinkBackgroundColor
-        && m_visitedLinkOutlineColor == o.m_visitedLinkOutlineColor
-        && m_visitedLinkBorderLeftColor == o.m_visitedLinkBorderLeftColor
-        && m_visitedLinkBorderRightColor == o.m_visitedLinkBorderRightColor
-        && m_visitedLinkBorderTopColor == o.m_visitedLinkBorderTopColor
-        && m_visitedLinkBorderBottomColor == o.m_visitedLinkBorderBottomColor
+        && visitedLinkBackgroundColor() == o.visitedLinkBackgroundColor()
+        && visitedLinkOutlineColor() == o.visitedLinkOutlineColor()
+        && visitedLinkBorderLeftColor() == o.visitedLinkBorderLeftColor()
+        && visitedLinkBorderRightColor() == o.visitedLinkBorderRightColor()
+        && visitedLinkBorderTopColor() == o.visitedLinkBorderTopColor()
+        && visitedLinkBorderBottomColor() == o.visitedLinkBorderBottomColor()
         && m_order == o.m_order
         && m_flowThread == o.m_flowThread
         && m_regionThread == o.m_regionThread
@@ -315,6 +333,42 @@ bool StyleRareNonInheritedData::transitionDataEquivalent(const StyleRareNonInher
     return true;
 }
 
+void StyleRareNonInheritedData::setVisitedLinkBorderLeftColor(const Color& color)
+{
+    m_hasVisitedLinkBorderLeftColor = color.isValid();
+    m_visitedLinkBorderLeftColor = color.rgb();
+}
+
+void StyleRareNonInheritedData::setVisitedLinkBorderRightColor(const Color& color)
+{
+    m_hasVisitedLinkBorderRightColor = color.isValid();
+    m_visitedLinkBorderRightColor = color.rgb();
+}
+
+void StyleRareNonInheritedData::setVisitedLinkBorderTopColor(const Color& color)
+{
+    m_hasVisitedLinkBorderTopColor = color.isValid();
+    m_visitedLinkBorderTopColor = color.rgb();
+}
+
+void StyleRareNonInheritedData::setVisitedLinkBorderBottomColor(const Color& color)
+{
+    m_hasVisitedLinkBorderBottomColor = color.isValid();
+    m_visitedLinkBorderBottomColor = color.rgb();
+}
+
+void StyleRareNonInheritedData::setVisitedLinkOutlineColor(const Color& color)
+{
+    m_hasVisitedLinkOutlineColor = color.isValid();
+    m_visitedLinkOutlineColor = color.rgb();
+}
+
+void StyleRareNonInheritedData::setVisitedLinkBackgroundColor(const Color& color)
+{
+    m_hasVisitedLinkBackgroundColor = color.isValid();
+    m_visitedLinkBackgroundColor = color.rgb();
+}
+
 void StyleRareNonInheritedData::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
 {
     MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::CSS);
index e3784d4..a7dd4b5 100644 (file)
@@ -144,12 +144,19 @@ public:
 
     RefPtr<ClipPathOperation> m_clipPath;
 
-    Color m_visitedLinkBackgroundColor;
-    Color m_visitedLinkOutlineColor;
-    Color m_visitedLinkBorderLeftColor;
-    Color m_visitedLinkBorderRightColor;
-    Color m_visitedLinkBorderTopColor;
-    Color m_visitedLinkBorderBottomColor;
+    Color visitedLinkBackgroundColor() const { return m_hasVisitedLinkBackgroundColor ? Color(m_visitedLinkBackgroundColor) : Color(); }
+    Color visitedLinkOutlineColor() const { return m_hasVisitedLinkOutlineColor ? Color(m_visitedLinkOutlineColor) : Color(); }
+    Color visitedLinkBorderLeftColor() const { return m_hasVisitedLinkBorderLeftColor ? Color(m_visitedLinkBorderLeftColor) : Color(); }
+    Color visitedLinkBorderRightColor() const { return m_hasVisitedLinkBorderRightColor ? Color(m_visitedLinkBorderRightColor) : Color(); }
+    Color visitedLinkBorderTopColor() const { return m_hasVisitedLinkBorderTopColor ? Color(m_visitedLinkBorderTopColor) : Color(); }
+    Color visitedLinkBorderBottomColor() const { return m_hasVisitedLinkBorderBottomColor ? Color(m_visitedLinkBorderBottomColor) : Color(); }
+
+    void setVisitedLinkBackgroundColor(const Color&);
+    void setVisitedLinkOutlineColor(const Color&);
+    void setVisitedLinkBorderLeftColor(const Color&);
+    void setVisitedLinkBorderRightColor(const Color&);
+    void setVisitedLinkBorderTopColor(const Color&);
+    void setVisitedLinkBorderBottomColor(const Color&);
 
     int m_order;
 
@@ -194,7 +201,21 @@ public:
     unsigned m_effectiveBlendMode: 5; // EBlendMode
 #endif
 
+    unsigned m_hasVisitedLinkBackgroundColor : 1;
+    unsigned m_hasVisitedLinkOutlineColor : 1;
+    unsigned m_hasVisitedLinkBorderLeftColor : 1;
+    unsigned m_hasVisitedLinkBorderRightColor : 1;
+    unsigned m_hasVisitedLinkBorderTopColor : 1;
+    unsigned m_hasVisitedLinkBorderBottomColor : 1;
+
 private:
+    RGBA32 m_visitedLinkBackgroundColor;
+    RGBA32 m_visitedLinkOutlineColor;
+    RGBA32 m_visitedLinkBorderLeftColor;
+    RGBA32 m_visitedLinkBorderRightColor;
+    RGBA32 m_visitedLinkBorderTopColor;
+    RGBA32 m_visitedLinkBorderBottomColor;
+
     StyleRareNonInheritedData();
     StyleRareNonInheritedData(const StyleRareNonInheritedData&);
 };