Changeset 87362 in webkit


Ignore:
Timestamp:
May 25, 2011 11:46:18 PM (13 years ago)
Author:
commit-queue@webkit.org
Message:

2011-05-25 Luke Macpherson <macpherson@chromium.org>

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
Location:
trunk/Source/WebCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r87361 r87362  
     12011-05-25  Luke Macpherson   <macpherson@chromium.org>
     2
     3        Reviewed by Dimitri Glazkov.
     4
     5        Implement various CSS font properties in CSSStyleApplyProperty.
     6        https://bugs.webkit.org/show_bug.cgi?id=60603
     7
     8        No new tests - refactoring only.
     9
     10        * css/CSSStyleApplyProperty.cpp:
     11        (WebCore::ApplyPropertyFont):
     12        Added templated class to handle font properties
     13        (WebCore::ApplyPropertyFontWeight):
     14        Added class to handle font weight calculation
     15        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
     16        Instantiate ApplyPropertyFont/ApplyPropertyFontWeight for appropriate properties.
     17        * css/CSSStyleSelector.cpp:
     18        (WebCore::CSSStyleSelector::applyProperty):
     19        Remove properties that are now implemented in CSSStyleApplyProperty
     20        * css/CSSStyleSelector.h:
     21        (WebCore::CSSStyleSelector::fontDescription):
     22        Added getter for m_style->fontDescription()
     23        (WebCore::CSSStyleSelector::parentFontDescription):
     24        Added getter for m_parentStyle->fontDescription()
     25        (WebCore::CSSStyleSelector::setFontDescription):
     26        Added setter for m_style->setFontDescription() that automatically sets m_fontDirty
     27
    1282011-05-25  James Simonsen  <simonjam@chromium.org>
    229
  • trunk/Source/WebCore/css/CSSStyleApplyProperty.cpp

    r86355 r87362  
    370370};
    371371
     372template <typename T>
     373class ApplyPropertyFont : public ApplyPropertyBase {
     374public:
     375    typedef T (FontDescription::*GetterFunction)() const;
     376    typedef void (FontDescription::*SetterFunction)(T);
     377
     378    ApplyPropertyFont(GetterFunction getter, SetterFunction setter, T initial)
     379        : m_getter(getter)
     380        , m_setter(setter)
     381        , m_initial(initial)
     382    {
     383    }
     384
     385private:
     386    virtual void applyInheritValue(CSSStyleSelector* selector) const
     387    {
     388        FontDescription fontDescription = selector->fontDescription();
     389        (fontDescription.*m_setter)((selector->parentFontDescription().*m_getter)());
     390        selector->setFontDescription(fontDescription);
     391    }
     392
     393    virtual void applyInitialValue(CSSStyleSelector* selector) const
     394    {
     395        FontDescription fontDescription = selector->fontDescription();
     396        (fontDescription.*m_setter)(m_initial);
     397        selector->setFontDescription(fontDescription);
     398    }
     399
     400    virtual void applyValue(CSSStyleSelector* selector, CSSValue* value) const
     401    {
     402        if (!value->isPrimitiveValue())
     403            return;
     404        CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
     405        FontDescription fontDescription = selector->fontDescription();
     406        (fontDescription.*m_setter)(*primitiveValue);
     407        selector->setFontDescription(fontDescription);
     408    }
     409
     410    GetterFunction m_getter;
     411    SetterFunction m_setter;
     412    T m_initial;
     413};
     414
     415class ApplyPropertyFontWeight : public ApplyPropertyFont<FontWeight> {
     416public:
     417    ApplyPropertyFontWeight()
     418        : ApplyPropertyFont<FontWeight>(&FontDescription::weight, &FontDescription::setWeight, FontWeightNormal)
     419    {
     420    }
     421
     422    virtual void applyValue(CSSStyleSelector* selector, CSSValue* value) const
     423    {
     424        if (!value->isPrimitiveValue())
     425            return;
     426        CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
     427        FontDescription fontDescription = selector->fontDescription();
     428        switch (primitiveValue->getIdent()) {
     429        case CSSValueInvalid:
     430            ASSERT_NOT_REACHED();
     431            break;
     432        case CSSValueBolder:
     433            fontDescription.setWeight(fontDescription.bolderWeight());
     434            break;
     435        case CSSValueLighter:
     436            fontDescription.setWeight(fontDescription.lighterWeight());
     437            break;
     438        default:
     439            fontDescription.setWeight(*primitiveValue);
     440        }
     441        selector->setFontDescription(fontDescription);
     442    }
     443};
     444
    372445const CSSStyleApplyProperty& CSSStyleApplyProperty::sharedCSSStyleApplyProperty()
    373446{
     
    470543    setPropertyHandler(CSSPropertyBorder, new ApplyPropertyExpanding<SuppressValue>(propertyHandler(CSSPropertyBorderStyle), propertyHandler(CSSPropertyBorderWidth), propertyHandler(CSSPropertyBorderColor)));
    471544
     545    setPropertyHandler(CSSPropertyFontStyle, new ApplyPropertyFont<FontItalic>(&FontDescription::italic, &FontDescription::setItalic, FontItalicOff));
     546    setPropertyHandler(CSSPropertyFontVariant, new ApplyPropertyFont<FontSmallCaps>(&FontDescription::smallCaps, &FontDescription::setSmallCaps, FontSmallCapsOff));
     547    setPropertyHandler(CSSPropertyTextRendering, new ApplyPropertyFont<TextRenderingMode>(&FontDescription::textRenderingMode, &FontDescription::setTextRenderingMode, AutoTextRendering));
     548    setPropertyHandler(CSSPropertyWebkitFontSmoothing, new ApplyPropertyFont<FontSmoothingMode>(&FontDescription::fontSmoothing, &FontDescription::setFontSmoothing, AutoSmoothing));
     549    setPropertyHandler(CSSPropertyWebkitTextOrientation, new ApplyPropertyFont<TextOrientation>(&FontDescription::textOrientation, &FontDescription::setTextOrientation, RenderStyle::initialTextOrientation()));
     550    setPropertyHandler(CSSPropertyFontWeight, new ApplyPropertyFontWeight());
     551
    472552    setPropertyHandler(CSSPropertyOutlineColor, new ApplyPropertyColor<InheritFromParent>(&RenderStyle::outlineColor, &RenderStyle::setOutlineColor, &RenderStyle::color));
    473553
  • trunk/Source/WebCore/css/CSSStyleSelector.cpp

    r87319 r87362  
    37023702        HANDLE_INHERIT_AND_INITIAL_AND_PRIMITIVE(floating, Floating)
    37033703        return;
    3704     case CSSPropertyFontStyle:
    3705     {
    3706         FontDescription fontDescription = m_style->fontDescription();
    3707         if (isInherit)
    3708             fontDescription.setItalic(m_parentStyle->fontDescription().italic());
    3709         else if (isInitial)
    3710             fontDescription.setItalic(FontItalicOff);
    3711         else {
    3712             if (!primitiveValue)
    3713                 return;
    3714             fontDescription.setItalic((FontItalic)*primitiveValue);
    3715         }
    3716         if (m_style->setFontDescription(fontDescription))
    3717             m_fontDirty = true;
    3718         return;
    3719     }
    3720 
    3721     case CSSPropertyFontVariant:
    3722     {
    3723         FontDescription fontDescription = m_style->fontDescription();
    3724         if (isInherit)
    3725             fontDescription.setSmallCaps(m_parentStyle->fontDescription().smallCaps());
    3726         else if (isInitial)
    3727             fontDescription.setSmallCaps(FontSmallCapsOff);
    3728         else {
    3729             if (!primitiveValue)
    3730                 return;
    3731             fontDescription.setSmallCaps((FontSmallCaps)*primitiveValue);
    3732         }
    3733         if (m_style->setFontDescription(fontDescription))
    3734             m_fontDirty = true;
    3735         return;
    3736     }
    3737 
    3738     case CSSPropertyFontWeight:
    3739     {
    3740         FontDescription fontDescription = m_style->fontDescription();
    3741         if (isInherit)
    3742             fontDescription.setWeight(m_parentStyle->fontDescription().weight());
    3743         else if (isInitial)
    3744             fontDescription.setWeight(FontWeightNormal);
    3745         else {
    3746             if (!primitiveValue)
    3747                 return;
    3748             switch (primitiveValue->getIdent()) {
    3749             case CSSValueInvalid:
    3750                 ASSERT_NOT_REACHED();
    3751                 break;
    3752             case CSSValueBolder:
    3753                 fontDescription.setWeight(fontDescription.bolderWeight());
    3754                 break;
    3755             case CSSValueLighter:
    3756                 fontDescription.setWeight(fontDescription.lighterWeight());
    3757                 break;
    3758             default:
    3759                 fontDescription.setWeight(*primitiveValue);
    3760             }
    3761         }
    3762         if (m_style->setFontDescription(fontDescription))
    3763             m_fontDirty = true;
    3764         return;
    3765     }
    3766        
    37673704    case CSSPropertyListStylePosition:
    37683705        HANDLE_INHERIT_AND_INITIAL_AND_PRIMITIVE(listStylePosition, ListStylePosition)
     
    38703807        return;
    38713808    }
    3872 
    3873     case CSSPropertyWebkitFontSmoothing: {
    3874         FontDescription fontDescription = m_style->fontDescription();
    3875         if (isInherit)
    3876             fontDescription.setFontSmoothing(m_parentStyle->fontDescription().fontSmoothing());
    3877         else if (isInitial)
    3878             fontDescription.setFontSmoothing(AutoSmoothing);
    3879         else {
    3880             if (!primitiveValue)
    3881                 return;
    3882             fontDescription.setFontSmoothing(*primitiveValue);
    3883         }
    3884         if (m_style->setFontDescription(fontDescription))
    3885             m_fontDirty = true;
    3886         return;
    3887     }
    3888 
    38893809    case CSSPropertyLetterSpacing:
    38903810    case CSSPropertyWordSpacing:
     
    47184638        m_style->setImageRendering(*primitiveValue);
    47194639        return;
    4720     case CSSPropertyTextRendering: {
    4721         FontDescription fontDescription = m_style->fontDescription();
    4722         if (isInherit)
    4723             fontDescription.setTextRenderingMode(m_parentStyle->fontDescription().textRenderingMode());
    4724         else if (isInitial)
    4725             fontDescription.setTextRenderingMode(AutoTextRendering);
    4726         else {
    4727             if (!primitiveValue)
    4728                 return;
    4729             fontDescription.setTextRenderingMode(*primitiveValue);
    4730         }
    4731         if (m_style->setFontDescription(fontDescription))
    4732             m_fontDirty = true;
    4733         return;
    4734     }
    47354640    case CSSPropertyTextShadow:
    47364641    case CSSPropertyBoxShadow:
     
    54835388
    54845389        return;
    5485 
    5486     case CSSPropertyWebkitTextOrientation: {
    5487         if (!isInherit && !isInitial && !primitiveValue)
    5488             return;
    5489        
    5490         TextOrientation result;
    5491         if (isInherit)
    5492             result = m_parentStyle->fontDescription().textOrientation();
    5493         else if (isInitial)
    5494             result = RenderStyle::initialTextOrientation();
    5495         else
    5496             result = *primitiveValue;
    5497        
    5498         FontDescription fontDescription = m_style->fontDescription();
    5499         if (fontDescription.textOrientation() != result) {
    5500             fontDescription.setTextOrientation(result);
    5501             if (m_style->setFontDescription(fontDescription))
    5502                 m_fontDirty = true;
    5503         }
    5504         return;
    5505     }
    5506 
    55075390    case CSSPropertyWebkitLineBoxContain: {
    55085391        HANDLE_INHERIT_AND_INITIAL(lineBoxContain, LineBoxContain)
     
    55595442    case CSSPropertyBorderBottom:
    55605443    case CSSPropertyBorderLeft:
     5444    case CSSPropertyFontStyle:
     5445    case CSSPropertyFontVariant:
     5446    case CSSPropertyTextRendering:
     5447    case CSSPropertyWebkitTextOrientation:
     5448    case CSSPropertyWebkitFontSmoothing:
     5449    case CSSPropertyFontWeight:
    55615450    case CSSPropertyOutlineWidth:
    55625451    case CSSPropertyWebkitColumnRuleWidth:
  • trunk/Source/WebCore/css/CSSStyleSelector.h

    r87319 r87362  
    112112        RenderStyle* rootElementStyle() const { return m_rootElementStyle; }
    113113        Element* element() const { return m_element; }
     114        FontDescription fontDescription() { return style()->fontDescription(); }
     115        FontDescription parentFontDescription() {return parentStyle()->fontDescription(); }
     116        void setFontDescription(FontDescription fontDescription) { m_fontDirty |= style()->setFontDescription(fontDescription); }
    114117
    115118    private:
Note: See TracChangeset for help on using the changeset viewer.