Changeset 37464

Show
Ignore:
Timestamp:
10/09/08 20:15:31 (6 weeks ago)
Author:
simon.fraser@apple.com
Message:

2008-10-09 Simon Fraser <simon.fraser@apple.com>

Reviewed by Dave Hyatt

https://bugs.webkit.org/show_bug.cgi?id=20947

Refactor setStyle() methods into styleWillChange()
and styleDidChange(), so most of the setStyle() overrides can
be removed.

Location:
trunk/WebCore
Files:
47 modified

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r37463 r37464  
     12008-10-09  Simon Fraser  <simon.fraser@apple.com> 
     2 
     3        Reviewed by Dave Hyatt 
     4 
     5        https://bugs.webkit.org/show_bug.cgi?id=20947 
     6 
     7        Refactor setStyle() methods into styleWillChange() 
     8        and styleDidChange(), so most of the setStyle() overrides can 
     9        be removed. 
     10 
     11        * rendering/RenderBR.cpp: 
     12        (WebCore::RenderBR::styleDidChange): 
     13        * rendering/RenderBR.h: 
     14        * rendering/RenderBlock.cpp: 
     15        (WebCore::RenderBlock::styleWillChange): 
     16        (WebCore::RenderBlock::styleDidChange): 
     17        * rendering/RenderBlock.h: 
     18        * rendering/RenderBox.cpp: 
     19        (WebCore::RenderBox::~RenderBox): 
     20        (WebCore::RenderBox::destroy): 
     21        (WebCore::RenderBox::styleWillChange): 
     22        (WebCore::RenderBox::styleDidChange): 
     23        * rendering/RenderBox.h: 
     24        * rendering/RenderButton.cpp: 
     25        (WebCore::RenderButton::styleWillChange): 
     26        (WebCore::RenderButton::styleDidChange): 
     27        * rendering/RenderButton.h: 
     28        * rendering/RenderFieldset.cpp: 
     29        (WebCore::RenderFieldset::styleDidChange): 
     30        * rendering/RenderFieldset.h: 
     31        * rendering/RenderFileUploadControl.cpp: 
     32        (WebCore::RenderFileUploadControl::styleDidChange): 
     33        * rendering/RenderFileUploadControl.h: 
     34        * rendering/RenderInline.cpp: 
     35        (WebCore::RenderInline::styleDidChange): 
     36        * rendering/RenderInline.h: 
     37        * rendering/RenderLayer.cpp: 
     38        (WebCore::RenderLayer::styleChanged): 
     39        * rendering/RenderLayer.h: 
     40        * rendering/RenderListBox.cpp: 
     41        (WebCore::RenderListBox::styleDidChange): 
     42        * rendering/RenderListBox.h: 
     43        * rendering/RenderListItem.cpp: 
     44        (WebCore::RenderListItem::styleDidChange): 
     45        * rendering/RenderListItem.h: 
     46        * rendering/RenderListMarker.cpp: 
     47        (WebCore::RenderListMarker::styleWillChange): 
     48        (WebCore::RenderListMarker::styleDidChange): 
     49        * rendering/RenderListMarker.h: 
     50        * rendering/RenderMenuList.cpp: 
     51        (WebCore::RenderMenuList::styleDidChange): 
     52        * rendering/RenderMenuList.h: 
     53        * rendering/RenderObject.cpp: 
     54        (WebCore::RenderObject::setStyle): 
     55        (WebCore::RenderObject::setStyleInternal): 
     56        (WebCore::RenderObject::styleWillChange): 
     57        (WebCore::RenderObject::styleDidChange): 
     58        * rendering/RenderObject.h: 
     59        * rendering/RenderReplaced.cpp: 
     60        (WebCore::RenderReplaced::styleDidChange): 
     61        * rendering/RenderReplaced.h: 
     62        * rendering/RenderSVGGradientStop.cpp: 
     63        (WebCore::RenderSVGGradientStop::styleDidChange): 
     64        * rendering/RenderSVGGradientStop.h: 
     65        * rendering/RenderScrollbarPart.cpp: 
     66        (WebCore::RenderScrollbarPart::styleDidChange): 
     67        * rendering/RenderScrollbarPart.h: 
     68        * rendering/RenderSlider.cpp: 
     69        (WebCore::RenderSlider::styleDidChange): 
     70        * rendering/RenderSlider.h: 
     71        * rendering/RenderTable.cpp: 
     72        (WebCore::RenderTable::styleDidChange): 
     73        * rendering/RenderTable.h: 
     74        * rendering/RenderTableCell.cpp: 
     75        (WebCore::RenderTableCell::styleWillChange): 
     76        (WebCore::RenderTableCell::styleDidChange): 
     77        * rendering/RenderTableCell.h: 
     78        * rendering/RenderTableRow.cpp: 
     79        (WebCore::RenderTableRow::styleWillChange): 
     80        * rendering/RenderTableRow.h: 
     81        * rendering/RenderText.cpp: 
     82        (WebCore::RenderText::styleDidChange): 
     83        * rendering/RenderText.h: 
     84        * rendering/RenderTextControl.cpp: 
     85        (WebCore::RenderTextControl::styleDidChange): 
     86        * rendering/RenderTextControl.h: 
     87        * rendering/RenderWidget.cpp: 
     88        (WebCore::RenderWidget::styleDidChange): 
     89        * rendering/RenderWidget.h: 
     90 
    1912008-10-09  David Hyatt  <hyatt@apple.com> 
    292 
  • trunk/WebCore/rendering/RenderBR.cpp

    r37252 r37464  
    8383} 
    8484 
    85 void RenderBR::setStyle(const RenderStyle* newStyle) 
     85void RenderBR::styleDidChange(RenderStyle::Diff diff, const RenderStyle* oldStyle) 
    8686{ 
    87     RenderText::setStyle(newStyle); 
     87    RenderText::styleDidChange(diff, oldStyle); 
    8888    m_lineHeight = -1; 
    8989} 
  • trunk/WebCore/rendering/RenderBR.h

    r37252 r37464  
    4848    virtual int lineHeight(bool firstLine, bool isRootLineBox = false) const; 
    4949    virtual int baselinePosition(bool firstLine, bool isRootLineBox = false) const; 
    50     virtual void setStyle(const RenderStyle*); 
    5150 
    5251    // overrides 
     
    6160    virtual VisiblePosition positionForCoordinates(int x, int y); 
    6261 
     62protected: 
     63    virtual void styleDidChange(RenderStyle::Diff, const RenderStyle* oldStyle); 
     64 
    6365private: 
    6466    mutable int m_lineHeight; 
  • trunk/WebCore/rendering/RenderBlock.cpp

    r37252 r37464  
    147147} 
    148148 
    149 void RenderBlock::setStyle(const RenderStyle* newStyle) 
     149void RenderBlock::styleWillChange(RenderStyle::Diff diff, const RenderStyle* newStyle) 
    150150{ 
    151151    setReplaced(newStyle->isDisplayReplacedType()); 
    152  
    153     RenderFlow::setStyle(newStyle); 
     152    RenderFlow::styleWillChange(diff, newStyle); 
     153} 
     154 
     155void RenderBlock::styleDidChange(RenderStyle::Diff diff, const RenderStyle* oldStyle) 
     156{ 
     157    RenderFlow::styleDidChange(diff, oldStyle); 
    154158 
    155159    // FIXME: We could save this call when the change only affected non-inherited properties 
  • trunk/WebCore/rendering/RenderBlock.h

    r37252 r37464  
    107107    virtual void repaintOverhangingFloats(bool paintAllDescendants); 
    108108 
    109     virtual void setStyle(const RenderStyle*); 
    110  
    111109    virtual void layout(); 
    112110    virtual void layoutBlock(bool relayoutChildren); 
     
    314312 
    315313protected: 
     314    virtual void styleWillChange(RenderStyle::Diff, const RenderStyle* newStyle); 
     315    virtual void styleDidChange(RenderStyle::Diff, const RenderStyle* oldStyle); 
     316 
    316317    void newLine(EClear); 
    317318    virtual bool hasLineIfEmpty() const; 
  • trunk/WebCore/rendering/RenderBox.cpp

    r37252 r37464  
    5151 
    5252using namespace HTMLNames; 
    53      
     53 
    5454// Used by flexible boxes when flexing this element. 
    5555typedef WTF::HashMap<const RenderBox*, int> OverrideSizeMap; 
    5656static OverrideSizeMap* gOverrideSizeMap = 0; 
     57 
     58bool RenderBox::s_wasFloating = false; 
     59bool RenderBox::s_hadOverflowClip = false; 
    5760 
    5861RenderBox::RenderBox(Node* node) 
     
    7376} 
    7477 
    75 void RenderBox::setStyle(const RenderStyle* newStyle) 
    76 { 
    77     bool wasFloating = isFloating(); 
    78     bool hadOverflowClip = hasOverflowClip(); 
    79  
    80     RenderStyle* oldStyle = style(); 
    81     if (oldStyle) 
    82         oldStyle->ref(); 
    83  
    84     RenderObject::setStyle(newStyle); 
     78RenderBox::~RenderBox() 
     79{ 
     80} 
     81 
     82void RenderBox::destroy() 
     83{ 
     84    // A lot of the code in this function is just pasted into 
     85    // RenderWidget::destroy. If anything in this function changes, 
     86    // be sure to fix RenderWidget::destroy() as well. 
     87    if (hasOverrideSize()) 
     88        gOverrideSizeMap->remove(this); 
     89 
     90    // This must be done before we destroy the RenderObject. 
     91    if (m_layer) 
     92        m_layer->clearClipRect(); 
     93 
     94    if (style() && (style()->height().isPercent() || style()->minHeight().isPercent() || style()->maxHeight().isPercent())) 
     95        RenderBlock::removePercentHeightDescendant(this); 
     96 
     97    RenderObject::destroy(); 
     98} 
     99 
     100void RenderBox::styleWillChange(RenderStyle::Diff diff, const RenderStyle* newStyle) 
     101{ 
     102    s_wasFloating = isFloating(); 
     103    s_hadOverflowClip = hasOverflowClip(); 
     104 
     105    RenderObject::styleWillChange(diff, newStyle); 
     106} 
     107 
     108void RenderBox::styleDidChange(RenderStyle::Diff diff, const RenderStyle* oldStyle) 
     109{ 
     110    RenderObject::styleDidChange(diff, oldStyle); 
    85111 
    86112    if (needsLayout() && oldStyle && (oldStyle->height().isPercent() || oldStyle->minHeight().isPercent() || oldStyle->maxHeight().isPercent())) 
     
    91117        setHasBoxDecorations(true); 
    92118 
    93     setInline(newStyle->isDisplayInlineType()); 
    94  
    95     switch (newStyle->position()) { 
     119    setInline(style()->isDisplayInlineType()); 
     120 
     121    switch (style()->position()) { 
    96122        case AbsolutePosition: 
    97123        case FixedPosition: 
     
    101127            setPositioned(false); 
    102128 
    103             if (newStyle->isFloating()) 
     129            if (style()->isFloating()) 
    104130                setFloating(true); 
    105131 
    106             if (newStyle->position() == RelativePosition) 
     132            if (style()->position() == RelativePosition) 
    107133                setRelPositioned(true); 
     134            break; 
    108135    } 
    109136 
     
    112139        // Check for overflow clip. 
    113140        // It's sufficient to just check one direction, since it's illegal to have visible on only one overflow value. 
    114         if (newStyle->overflowX() != OVISIBLE) { 
    115             if (!hadOverflowClip) 
     141        if (style()->overflowX() != OVISIBLE) { 
     142            if (!s_hadOverflowClip) 
    116143                // Erase the overflow 
    117144                repaint(); 
     
    120147    } 
    121148 
    122     setHasTransform(newStyle->hasTransform()); 
    123     setHasReflection(newStyle->boxReflect()); 
     149    setHasTransform(style()->hasTransform()); 
     150    setHasReflection(style()->boxReflect()); 
    124151 
    125152    if (requiresLayer()) { 
    126153        if (!m_layer) { 
    127             if (wasFloating && isFloating()) 
     154            if (s_wasFloating && isFloating()) 
    128155                setChildNeedsLayout(true); 
    129156            m_layer = new (renderArena()) RenderLayer(this); 
     
    141168        setHasReflection(false); 
    142169        layer->removeOnlyThisLayer(); 
    143         if (wasFloating && isFloating()) 
     170        if (s_wasFloating && isFloating()) 
    144171            setChildNeedsLayout(true); 
    145172    } 
     
    161188 
    162189    if (m_layer) 
    163         m_layer->styleChanged(oldStyle); 
     190        m_layer->styleChanged(diff, oldStyle); 
    164191 
    165192    // Set the text color if we're the body. 
    166193    if (isBody()) 
    167         document()->setTextColor(newStyle->color()); 
     194        document()->setTextColor(style()->color()); 
    168195 
    169196    if (style()->outlineWidth() > 0 && style()->outlineSize() > maximalOutlineSize(PaintPhaseOutline)) 
    170197        static_cast<RenderView*>(document()->renderer())->setMaximalOutlineSize(style()->outlineSize()); 
    171  
    172     if (oldStyle) 
    173         oldStyle->deref(renderArena()); 
    174 } 
    175  
    176 RenderBox::~RenderBox() 
    177 { 
    178 } 
    179  
    180 void RenderBox::destroy() 
    181 { 
    182     // A lot of the code in this function is just pasted into 
    183     // RenderWidget::destroy. If anything in this function changes, 
    184     // be sure to fix RenderWidget::destroy() as well. 
    185     if (hasOverrideSize()) 
    186         gOverrideSizeMap->remove(this); 
    187  
    188     // This must be done before we destroy the RenderObject. 
    189     if (m_layer) 
    190         m_layer->clearClipRect(); 
    191  
    192     if (style() && (style()->height().isPercent() || style()->minHeight().isPercent() || style()->maxHeight().isPercent())) 
    193         RenderBlock::removePercentHeightDescendant(this); 
    194  
    195     RenderObject::destroy(); 
    196198} 
    197199 
  • trunk/WebCore/rendering/RenderBox.h

    r37252 r37464  
    3737    virtual const char* renderName() const { return "RenderBox"; } 
    3838 
    39     virtual void setStyle(const RenderStyle*); 
    4039    virtual void paint(PaintInfo&, int tx, int ty); 
    4140    virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, int x, int y, int tx, int ty, HitTestAction); 
     
    174173     
    175174protected: 
     175    virtual void styleWillChange(RenderStyle::Diff, const RenderStyle* newStyle); 
     176    virtual void styleDidChange(RenderStyle::Diff, const RenderStyle* oldStyle); 
     177 
    176178    void paintFillLayer(const PaintInfo&, const Color&, const FillLayer*, int clipY, int clipHeight, int tx, int ty, int width, int height, CompositeOperator = CompositeSourceOver); 
    177179    void paintFillLayers(const PaintInfo&, const Color&, const FillLayer*, int clipY, int clipHeight, int tx, int ty, int width, int height, CompositeOperator = CompositeSourceOver); 
     
    239241    // For inline replaced elements, the inline box that owns us. 
    240242    InlineBox* m_inlineBoxWrapper; 
     243 
     244private: 
     245    // Used to store state between styleWillChange and styleDidChange 
     246    static bool s_wasFloating; 
     247    static bool s_hadOverflowClip; 
    241248}; 
    242249 
  • trunk/WebCore/rendering/RenderButton.cpp

    r37252 r37464  
    6565} 
    6666 
    67 void RenderButton::setStyle(const RenderStyle* style) 
     67void RenderButton::styleWillChange(RenderStyle::Diff diff, const RenderStyle* newStyle) 
    6868{ 
    6969    if (m_inner) { 
     
    7474        m_inner->style()->setBoxFlex(0); 
    7575    } 
    76     RenderBlock::setStyle(style); 
     76    RenderBlock::styleWillChange(diff, newStyle); 
     77} 
     78 
     79void RenderButton::styleDidChange(RenderStyle::Diff diff, const RenderStyle* oldStyle) 
     80{ 
     81    RenderBlock::styleDidChange(diff, oldStyle); 
     82 
    7783    if (m_buttonText) 
    78         m_buttonText->setStyle(style); 
     84        m_buttonText->setStyle(style()); 
    7985    if (m_inner) // RenderBlock handled updating the anonymous block's style. 
    8086        m_inner->style()->setBoxFlex(1.0f); 
  • trunk/WebCore/rendering/RenderButton.h

    r37252 r37464  
    4646    virtual bool createsAnonymousWrapper() const { return true; } 
    4747 
    48     virtual void setStyle(const RenderStyle*); 
    4948    virtual void updateFromElement(); 
    5049 
     
    5958 
    6059protected: 
     60    virtual void styleWillChange(RenderStyle::Diff, const RenderStyle* newStyle); 
     61    virtual void styleDidChange(RenderStyle::Diff, const RenderStyle* oldStyle); 
     62 
    6163    virtual bool hasLineIfEmpty() const { return true; } 
    6264 
  • trunk/WebCore/rendering/RenderFieldset.cpp

    r37252 r37464  
    261261} 
    262262 
    263 void RenderFieldset::setStyle(const RenderStyle* newStyle) 
    264 { 
    265     RenderBlock::setStyle(newStyle); 
     263void RenderFieldset::styleDidChange(RenderStyle::Diff diff, const RenderStyle* oldStyle) 
     264{ 
     265    RenderBlock::styleDidChange(diff, oldStyle); 
    266266 
    267267    // WinIE renders fieldsets with display:inline like they're inline-blocks.  For us, 
  • trunk/WebCore/rendering/RenderFieldset.h

    r37252 r37464  
    4242    virtual RenderObject* layoutLegend(bool relayoutChildren); 
    4343 
    44     virtual void setStyle(const RenderStyle*); 
    45  
    4644    virtual void calcPrefWidths(); 
    4745    virtual bool avoidsFloats() const { return true; } 
     
    5048 
    5149    RenderObject* findLegend() const; 
     50 
     51protected: 
     52    virtual void styleDidChange(RenderStyle::Diff, const RenderStyle* oldStyle); 
    5253 
    5354private: 
  • trunk/WebCore/rendering/RenderFileUploadControl.cpp

    r37252 r37464  
    7272} 
    7373 
    74 void RenderFileUploadControl::setStyle(const RenderStyle* newStyle) 
    75 { 
    76     RenderBlock::setStyle(newStyle); 
     74void RenderFileUploadControl::styleDidChange(RenderStyle::Diff diff, const RenderStyle* oldStyle) 
     75{ 
     76    RenderBlock::styleDidChange(diff, oldStyle); 
    7777    if (m_button) 
    78         m_button->renderer()->setStyle(createButtonStyle(newStyle)); 
     78        m_button->renderer()->setStyle(createButtonStyle(style())); 
    7979 
    8080    setReplaced(isInline()); 
  • trunk/WebCore/rendering/RenderFileUploadControl.h

    r37252 r37464  
    4040    virtual const char* renderName() const { return "RenderFileUploadControl"; } 
    4141 
    42     virtual void setStyle(const RenderStyle*); 
    4342    virtual void updateFromElement(); 
    4443    virtual void calcPrefWidths(); 
     
    5352    String buttonValue(); 
    5453    String fileTextValue(); 
    55      
     54 
     55protected: 
     56    virtual void styleDidChange(RenderStyle::Diff, const RenderStyle* oldStyle); 
     57 
    5658private: 
    5759    int maxFilenameWidth() const; 
  • trunk/WebCore/rendering/RenderInline.cpp

    r37252 r37464  
    4242} 
    4343 
    44 void RenderInline::setStyle(const RenderStyle* newStyle) 
    45 { 
    46     RenderFlow::setStyle(newStyle); 
     44void RenderInline::styleDidChange(RenderStyle::Diff diff, const RenderStyle* oldStyle) 
     45{ 
     46    RenderFlow::styleDidChange(diff, oldStyle); 
     47 
    4748    setInline(true); 
    4849    setHasReflection(false); 
  • trunk/WebCore/rendering/RenderInline.h

    r37252 r37464  
    5151                   RenderObject* newChild, RenderFlow* oldCont); 
    5252 
    53     virtual void setStyle(const RenderStyle*); 
    54  
    5553    virtual void layout() { } // Do nothing for layout() 
    5654 
     
    7573 
    7674protected: 
     75    virtual void styleDidChange(RenderStyle::Diff, const RenderStyle* oldStyle); 
     76 
    7777    static RenderInline* cloneInline(RenderFlow* src); 
    7878 
  • trunk/WebCore/rendering/RenderLayer.cpp

    r37462 r37464  
    23582358} 
    23592359 
    2360 void RenderLayer::styleChanged(RenderStyle* oldStyle) 
     2360void RenderLayer::styleChanged(RenderStyle::Diff, const RenderStyle* oldStyle) 
    23612361{ 
    23622362    bool isOverflowOnly = shouldBeOverflowOnly(); 
  • trunk/WebCore/rendering/RenderLayer.h

    r37223 r37464  
    163163    void repaintIncludingDescendants(); 
    164164 
    165     void styleChanged(RenderStyle*); 
     165    void styleChanged(RenderStyle::Diff, const RenderStyle*); 
    166166 
    167167    RenderMarquee* marquee() const { return m_marquee; } 
  • trunk/WebCore/rendering/RenderListBox.cpp

    r37252 r37464  
    9191} 
    9292 
    93 void RenderListBox::setStyle(const RenderStyle* style) 
    94 { 
    95     RenderBlock::setStyle(style); 
     93void RenderListBox::styleDidChange(RenderStyle::Diff diff, const RenderStyle* oldStyle) 
     94{ 
     95    RenderBlock::styleDidChange(diff, oldStyle); 
    9696    setReplaced(isInline()); 
    9797} 
  • trunk/WebCore/rendering/RenderListBox.h

    r37252 r37464  
    4848    virtual bool isListBox() const { return true; } 
    4949 
    50     virtual void setStyle(const RenderStyle*); 
    5150    virtual void updateFromElement(); 
    5251 
     
    9594    virtual void setScrollTop(int); 
    9695 
     96protected: 
     97    virtual void styleDidChange(RenderStyle::Diff, const RenderStyle* oldStyle); 
     98 
    9799private: 
    98100    // ScrollbarClient interface. 
  • trunk/WebCore/rendering/RenderListItem.cpp