Title: [87362] trunk/Source/WebCore
Revision
87362
Author
[email protected]
Date
2011-05-25 23:46:18 -0700 (Wed, 25 May 2011)

Log Message

2011-05-25  Luke Macpherson   <[email protected]>

        Reviewed by Dimitri Glazkov.

        Implement various CSS font properties in CSSStyleApplyProperty.
        https://bugs.webkit.org/show_bug.cgi?id=60603

        No new tests - refactoring only.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyFont):
        Added templated class to handle font properties
        (WebCore::ApplyPropertyFontWeight):
        Added class to handle font weight calculation
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        Instantiate ApplyPropertyFont/ApplyPropertyFontWeight for appropriate properties.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Remove properties that are now implemented in CSSStyleApplyProperty
        * css/CSSStyleSelector.h:
        (WebCore::CSSStyleSelector::fontDescription):
        Added getter for m_style->fontDescription()
        (WebCore::CSSStyleSelector::parentFontDescription):
        Added getter for m_parentStyle->fontDescription()
        (WebCore::CSSStyleSelector::setFontDescription):
        Added setter for m_style->setFontDescription() that automatically sets m_fontDirty

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (87361 => 87362)


--- trunk/Source/WebCore/ChangeLog	2011-05-26 06:20:35 UTC (rev 87361)
+++ trunk/Source/WebCore/ChangeLog	2011-05-26 06:46:18 UTC (rev 87362)
@@ -1,3 +1,30 @@
+2011-05-25  Luke Macpherson   <[email protected]>
+
+        Reviewed by Dimitri Glazkov.
+
+        Implement various CSS font properties in CSSStyleApplyProperty.
+        https://bugs.webkit.org/show_bug.cgi?id=60603
+
+        No new tests - refactoring only.
+
+        * css/CSSStyleApplyProperty.cpp:
+        (WebCore::ApplyPropertyFont):
+        Added templated class to handle font properties
+        (WebCore::ApplyPropertyFontWeight):
+        Added class to handle font weight calculation
+        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
+        Instantiate ApplyPropertyFont/ApplyPropertyFontWeight for appropriate properties.
+        * css/CSSStyleSelector.cpp:
+        (WebCore::CSSStyleSelector::applyProperty):
+        Remove properties that are now implemented in CSSStyleApplyProperty
+        * css/CSSStyleSelector.h:
+        (WebCore::CSSStyleSelector::fontDescription):
+        Added getter for m_style->fontDescription()
+        (WebCore::CSSStyleSelector::parentFontDescription):
+        Added getter for m_parentStyle->fontDescription()
+        (WebCore::CSSStyleSelector::setFontDescription):
+        Added setter for m_style->setFontDescription() that automatically sets m_fontDirty
+
 2011-05-25  James Simonsen  <[email protected]>
 
         Reviewed by Adam Barth.

Modified: trunk/Source/WebCore/css/CSSStyleApplyProperty.cpp (87361 => 87362)


--- trunk/Source/WebCore/css/CSSStyleApplyProperty.cpp	2011-05-26 06:20:35 UTC (rev 87361)
+++ trunk/Source/WebCore/css/CSSStyleApplyProperty.cpp	2011-05-26 06:46:18 UTC (rev 87362)
@@ -369,6 +369,79 @@
     }
 };
 
+template <typename T>
+class ApplyPropertyFont : public ApplyPropertyBase {
+public:
+    typedef T (FontDescription::*GetterFunction)() const;
+    typedef void (FontDescription::*SetterFunction)(T);
+
+    ApplyPropertyFont(GetterFunction getter, SetterFunction setter, T initial)
+        : m_getter(getter)
+        , m_setter(setter)
+        , m_initial(initial)
+    {
+    }
+
+private:
+    virtual void applyInheritValue(CSSStyleSelector* selector) const
+    {
+        FontDescription fontDescription = selector->fontDescription();
+        (fontDescription.*m_setter)((selector->parentFontDescription().*m_getter)());
+        selector->setFontDescription(fontDescription);
+    }
+
+    virtual void applyInitialValue(CSSStyleSelector* selector) const
+    {
+        FontDescription fontDescription = selector->fontDescription();
+        (fontDescription.*m_setter)(m_initial);
+        selector->setFontDescription(fontDescription);
+    }
+
+    virtual void applyValue(CSSStyleSelector* selector, CSSValue* value) const
+    {
+        if (!value->isPrimitiveValue())
+            return;
+        CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
+        FontDescription fontDescription = selector->fontDescription();
+        (fontDescription.*m_setter)(*primitiveValue);
+        selector->setFontDescription(fontDescription);
+    }
+
+    GetterFunction m_getter;
+    SetterFunction m_setter;
+    T m_initial;
+};
+
+class ApplyPropertyFontWeight : public ApplyPropertyFont<FontWeight> {
+public:
+    ApplyPropertyFontWeight()
+        : ApplyPropertyFont<FontWeight>(&FontDescription::weight, &FontDescription::setWeight, FontWeightNormal)
+    {
+    }
+
+    virtual void applyValue(CSSStyleSelector* selector, CSSValue* value) const
+    {
+        if (!value->isPrimitiveValue())
+            return;
+        CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
+        FontDescription fontDescription = selector->fontDescription();
+        switch (primitiveValue->getIdent()) {
+        case CSSValueInvalid:
+            ASSERT_NOT_REACHED();
+            break;
+        case CSSValueBolder:
+            fontDescription.setWeight(fontDescription.bolderWeight());
+            break;
+        case CSSValueLighter:
+            fontDescription.setWeight(fontDescription.lighterWeight());
+            break;
+        default:
+            fontDescription.setWeight(*primitiveValue);
+        }
+        selector->setFontDescription(fontDescription);
+    }
+};
+
 const CSSStyleApplyProperty& CSSStyleApplyProperty::sharedCSSStyleApplyProperty()
 {
     DEFINE_STATIC_LOCAL(CSSStyleApplyProperty, cssStyleApplyPropertyInstance, ());
@@ -469,6 +542,13 @@
     setPropertyHandler(CSSPropertyBorderColor, new ApplyPropertyExpanding<SuppressValue>(propertyHandler(CSSPropertyBorderTopColor), propertyHandler(CSSPropertyBorderRightColor), propertyHandler(CSSPropertyBorderBottomColor), propertyHandler(CSSPropertyBorderLeftColor)));
     setPropertyHandler(CSSPropertyBorder, new ApplyPropertyExpanding<SuppressValue>(propertyHandler(CSSPropertyBorderStyle), propertyHandler(CSSPropertyBorderWidth), propertyHandler(CSSPropertyBorderColor)));
 
+    setPropertyHandler(CSSPropertyFontStyle, new ApplyPropertyFont<FontItalic>(&FontDescription::italic, &FontDescription::setItalic, FontItalicOff));
+    setPropertyHandler(CSSPropertyFontVariant, new ApplyPropertyFont<FontSmallCaps>(&FontDescription::smallCaps, &FontDescription::setSmallCaps, FontSmallCapsOff));
+    setPropertyHandler(CSSPropertyTextRendering, new ApplyPropertyFont<TextRenderingMode>(&FontDescription::textRenderingMode, &FontDescription::setTextRenderingMode, AutoTextRendering));
+    setPropertyHandler(CSSPropertyWebkitFontSmoothing, new ApplyPropertyFont<FontSmoothingMode>(&FontDescription::fontSmoothing, &FontDescription::setFontSmoothing, AutoSmoothing));
+    setPropertyHandler(CSSPropertyWebkitTextOrientation, new ApplyPropertyFont<TextOrientation>(&FontDescription::textOrientation, &FontDescription::setTextOrientation, RenderStyle::initialTextOrientation()));
+    setPropertyHandler(CSSPropertyFontWeight, new ApplyPropertyFontWeight());
+
     setPropertyHandler(CSSPropertyOutlineColor, new ApplyPropertyColor<InheritFromParent>(&RenderStyle::outlineColor, &RenderStyle::setOutlineColor, &RenderStyle::color));
 
     setPropertyHandler(CSSPropertyOverflowX, new ApplyPropertyDefault<EOverflow>(&RenderStyle::overflowX, &RenderStyle::setOverflowX, &RenderStyle::initialOverflowX));

Modified: trunk/Source/WebCore/css/CSSStyleSelector.cpp (87361 => 87362)


--- trunk/Source/WebCore/css/CSSStyleSelector.cpp	2011-05-26 06:20:35 UTC (rev 87361)
+++ trunk/Source/WebCore/css/CSSStyleSelector.cpp	2011-05-26 06:46:18 UTC (rev 87362)
@@ -3701,69 +3701,6 @@
     case CSSPropertyFloat:
         HANDLE_INHERIT_AND_INITIAL_AND_PRIMITIVE(floating, Floating)
         return;
-    case CSSPropertyFontStyle:
-    {
-        FontDescription fontDescription = m_style->fontDescription();
-        if (isInherit)
-            fontDescription.setItalic(m_parentStyle->fontDescription().italic());
-        else if (isInitial)
-            fontDescription.setItalic(FontItalicOff);
-        else {
-            if (!primitiveValue)
-                return;
-            fontDescription.setItalic((FontItalic)*primitiveValue);
-        }
-        if (m_style->setFontDescription(fontDescription))
-            m_fontDirty = true;
-        return;
-    }
-
-    case CSSPropertyFontVariant:
-    {
-        FontDescription fontDescription = m_style->fontDescription();
-        if (isInherit) 
-            fontDescription.setSmallCaps(m_parentStyle->fontDescription().smallCaps());
-        else if (isInitial)
-            fontDescription.setSmallCaps(FontSmallCapsOff);
-        else {
-            if (!primitiveValue)
-                return;
-            fontDescription.setSmallCaps((FontSmallCaps)*primitiveValue);
-        }
-        if (m_style->setFontDescription(fontDescription))
-            m_fontDirty = true;
-        return;
-    }
-
-    case CSSPropertyFontWeight:
-    {
-        FontDescription fontDescription = m_style->fontDescription();
-        if (isInherit)
-            fontDescription.setWeight(m_parentStyle->fontDescription().weight());
-        else if (isInitial)
-            fontDescription.setWeight(FontWeightNormal);
-        else {
-            if (!primitiveValue)
-                return;
-            switch (primitiveValue->getIdent()) {
-            case CSSValueInvalid:
-                ASSERT_NOT_REACHED();
-                break;
-            case CSSValueBolder:
-                fontDescription.setWeight(fontDescription.bolderWeight());
-                break;
-            case CSSValueLighter:
-                fontDescription.setWeight(fontDescription.lighterWeight());
-                break;
-            default:
-                fontDescription.setWeight(*primitiveValue);
-            }
-        }
-        if (m_style->setFontDescription(fontDescription))
-            m_fontDirty = true;
-        return;
-    }
-        
     case CSSPropertyListStylePosition:
         HANDLE_INHERIT_AND_INITIAL_AND_PRIMITIVE(listStylePosition, ListStylePosition)
         return;
@@ -3869,23 +3806,6 @@
         m_style->setListStyleImage(styleImage(CSSPropertyListStyleImage, value));
         return;
     }
-
-    case CSSPropertyWebkitFontSmoothing: {
-        FontDescription fontDescription = m_style->fontDescription();
-        if (isInherit) 
-            fontDescription.setFontSmoothing(m_parentStyle->fontDescription().fontSmoothing());
-        else if (isInitial)
-            fontDescription.setFontSmoothing(AutoSmoothing);
-        else {
-            if (!primitiveValue)
-                return;
-            fontDescription.setFontSmoothing(*primitiveValue);
-        }
-        if (m_style->setFontDescription(fontDescription))
-            m_fontDirty = true;
-        return;
-    }
-
     case CSSPropertyLetterSpacing:
     case CSSPropertyWordSpacing:
     {
@@ -4717,21 +4637,6 @@
             return;
         m_style->setImageRendering(*primitiveValue);
         return;
-    case CSSPropertyTextRendering: {
-        FontDescription fontDescription = m_style->fontDescription();
-        if (isInherit) 
-            fontDescription.setTextRenderingMode(m_parentStyle->fontDescription().textRenderingMode());
-        else if (isInitial)
-            fontDescription.setTextRenderingMode(AutoTextRendering);
-        else {
-            if (!primitiveValue)
-                return;
-            fontDescription.setTextRenderingMode(*primitiveValue);
-        }
-        if (m_style->setFontDescription(fontDescription))
-            m_fontDirty = true;
-        return;
-    }
     case CSSPropertyTextShadow:
     case CSSPropertyBoxShadow:
     case CSSPropertyWebkitBoxShadow: {
@@ -5482,28 +5387,6 @@
         }
 
         return;
-
-    case CSSPropertyWebkitTextOrientation: {
-        if (!isInherit && !isInitial && !primitiveValue)
-            return;
-        
-        TextOrientation result;
-        if (isInherit)
-            result = m_parentStyle->fontDescription().textOrientation();
-        else if (isInitial)
-            result = RenderStyle::initialTextOrientation();
-        else
-            result = *primitiveValue;
-        
-        FontDescription fontDescription = m_style->fontDescription();
-        if (fontDescription.textOrientation() != result) {
-            fontDescription.setTextOrientation(result);
-            if (m_style->setFontDescription(fontDescription))
-                m_fontDirty = true;
-        }
-        return;
-    }
-
     case CSSPropertyWebkitLineBoxContain: {
         HANDLE_INHERIT_AND_INITIAL(lineBoxContain, LineBoxContain)
         if (primitiveValue && primitiveValue->getIdent() == CSSValueNone) {
@@ -5558,6 +5441,12 @@
     case CSSPropertyBorderRight:
     case CSSPropertyBorderBottom:
     case CSSPropertyBorderLeft:
+    case CSSPropertyFontStyle:
+    case CSSPropertyFontVariant:
+    case CSSPropertyTextRendering:
+    case CSSPropertyWebkitTextOrientation:
+    case CSSPropertyWebkitFontSmoothing:
+    case CSSPropertyFontWeight:
     case CSSPropertyOutlineWidth:
     case CSSPropertyWebkitColumnRuleWidth:
     case CSSPropertyOutlineColor:

Modified: trunk/Source/WebCore/css/CSSStyleSelector.h (87361 => 87362)


--- trunk/Source/WebCore/css/CSSStyleSelector.h	2011-05-26 06:20:35 UTC (rev 87361)
+++ trunk/Source/WebCore/css/CSSStyleSelector.h	2011-05-26 06:46:18 UTC (rev 87362)
@@ -111,6 +111,9 @@
         RenderStyle* parentStyle() const { return m_parentStyle; }
         RenderStyle* rootElementStyle() const { return m_rootElementStyle; }
         Element* element() const { return m_element; }
+        FontDescription fontDescription() { return style()->fontDescription(); }
+        FontDescription parentFontDescription() {return parentStyle()->fontDescription(); }
+        void setFontDescription(FontDescription fontDescription) { m_fontDirty |= style()->setFontDescription(fontDescription); }
 
     private:
         void initForStyleResolve(Element*, RenderStyle* parentStyle = 0, PseudoId = NOPSEUDO);
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to