Changeset 172591 in webkit


Ignore:
Timestamp:
Aug 14, 2014, 10:49:55 AM (11 years ago)
Author:
Antti Koivisto
Message:

Remove nonRendererStyle
https://bugs.webkit.org/show_bug.cgi?id=135938

Reviewed by Andreas Kling.

It is used to support styling of non-renderer option elements. We have a better
mechanism for this, Element::computedStyle().

  • dom/Element.cpp:

(WebCore::Element::resetComputedStyle):
(WebCore::Element::willResetComputedStyle):

Add a virtual callback for computed style reset.

  • dom/Element.h:
  • dom/Node.h:

(WebCore::Node::nonRendererStyle): Deleted.

  • dom/NodeRenderStyle.h:

(WebCore::Node::renderStyle):

renderStyle() now always matches renderer()->style()

  • html/HTMLOptGroupElement.cpp:

(WebCore::HTMLOptGroupElement::HTMLOptGroupElement):
(WebCore::HTMLOptGroupElement::isFocusable):
(WebCore::HTMLOptGroupElement::didAttachRenderers): Deleted.
(WebCore::HTMLOptGroupElement::willDetachRenderers): Deleted.
(WebCore::HTMLOptGroupElement::updateNonRenderStyle): Deleted.
(WebCore::HTMLOptGroupElement::nonRendererStyle): Deleted.
(WebCore::HTMLOptGroupElement::customStyleForRenderer): Deleted.

  • html/HTMLOptGroupElement.h:
  • html/HTMLOptionElement.cpp:

(WebCore::HTMLOptionElement::isFocusable):

Use computedStyle.

(WebCore::HTMLOptionElement::willResetComputedStyle):
(WebCore::HTMLOptionElement::didAttachRenderers): Deleted.
(WebCore::HTMLOptionElement::willDetachRenderers): Deleted.
(WebCore::HTMLOptionElement::updateNonRenderStyle): Deleted.
(WebCore::HTMLOptionElement::nonRendererStyle): Deleted.
(WebCore::HTMLOptionElement::customStyleForRenderer): Deleted.
(WebCore::HTMLOptionElement::didRecalcStyle): Deleted.

  • html/HTMLOptionElement.h:
  • rendering/RenderMenuList.cpp:

(RenderMenuList::updateOptionsWidth):
(RenderMenuList::setTextFromOption):

Use computedStyle.

Location:
trunk/Source/WebCore
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r172584 r172591  
     12014-08-14  Antti Koivisto  <antti@apple.com>
     2
     3        Remove nonRendererStyle
     4        https://bugs.webkit.org/show_bug.cgi?id=135938
     5
     6        Reviewed by Andreas Kling.
     7
     8        It is used to support styling of non-renderer option elements. We have a better
     9        mechanism for this, Element::computedStyle().
     10
     11        * dom/Element.cpp:
     12        (WebCore::Element::resetComputedStyle):
     13        (WebCore::Element::willResetComputedStyle):
     14       
     15            Add a virtual callback for computed style reset.
     16
     17        * dom/Element.h:
     18        * dom/Node.h:
     19        (WebCore::Node::nonRendererStyle): Deleted.
     20        * dom/NodeRenderStyle.h:
     21        (WebCore::Node::renderStyle):
     22       
     23            renderStyle() now always matches renderer()->style()
     24
     25        * html/HTMLOptGroupElement.cpp:
     26        (WebCore::HTMLOptGroupElement::HTMLOptGroupElement):
     27        (WebCore::HTMLOptGroupElement::isFocusable):
     28        (WebCore::HTMLOptGroupElement::didAttachRenderers): Deleted.
     29        (WebCore::HTMLOptGroupElement::willDetachRenderers): Deleted.
     30        (WebCore::HTMLOptGroupElement::updateNonRenderStyle): Deleted.
     31        (WebCore::HTMLOptGroupElement::nonRendererStyle): Deleted.
     32        (WebCore::HTMLOptGroupElement::customStyleForRenderer): Deleted.
     33        * html/HTMLOptGroupElement.h:
     34        * html/HTMLOptionElement.cpp:
     35        (WebCore::HTMLOptionElement::isFocusable):
     36       
     37            Use computedStyle.
     38
     39        (WebCore::HTMLOptionElement::willResetComputedStyle):
     40        (WebCore::HTMLOptionElement::didAttachRenderers): Deleted.
     41        (WebCore::HTMLOptionElement::willDetachRenderers): Deleted.
     42        (WebCore::HTMLOptionElement::updateNonRenderStyle): Deleted.
     43        (WebCore::HTMLOptionElement::nonRendererStyle): Deleted.
     44        (WebCore::HTMLOptionElement::customStyleForRenderer): Deleted.
     45        (WebCore::HTMLOptionElement::didRecalcStyle): Deleted.
     46        * html/HTMLOptionElement.h:
     47        * rendering/RenderMenuList.cpp:
     48        (RenderMenuList::updateOptionsWidth):
     49        (RenderMenuList::setTextFromOption):
     50       
     51            Use computedStyle.
     52
    1532014-08-14  Jer Noble  <jer.noble@apple.com>
    254
  • trunk/Source/WebCore/dom/Element.cpp

    r172487 r172591  
    28622862    if (!hasRareData() || !elementRareData()->computedStyle())
    28632863        return;
    2864     elementRareData()->resetComputedStyle();
    2865     for (auto& child : descendantsOfType<Element>(*this)) {
    2866         if (child.hasRareData())
    2867             child.elementRareData()->resetComputedStyle();
    2868     }
     2864
     2865    auto reset = [](Element& element) {
     2866        if (!element.hasRareData() || !element.elementRareData()->computedStyle())
     2867            return;
     2868        if (element.hasCustomStyleResolveCallbacks())
     2869            element.willResetComputedStyle();
     2870        element.elementRareData()->resetComputedStyle();
     2871    };
     2872    reset(*this);
     2873    for (auto& child : descendantsOfType<Element>(*this))
     2874        reset(child);
    28692875}
    28702876
     
    29002906
    29012907void Element::didRecalcStyle(Style::Change)
     2908{
     2909    ASSERT(hasCustomStyleResolveCallbacks());
     2910}
     2911
     2912void Element::willResetComputedStyle()
    29022913{
    29032914    ASSERT(hasCustomStyleResolveCallbacks());
  • trunk/Source/WebCore/dom/Element.h

    r172487 r172591  
    547547    virtual bool willRecalcStyle(Style::Change);
    548548    virtual void didRecalcStyle(Style::Change);
     549    virtual void willResetComputedStyle();
    549550    virtual void willAttachRenderers();
    550551    virtual void didAttachRenderers();
  • trunk/Source/WebCore/dom/Node.h

    r170828 r172591  
    687687    virtual void derefEventTarget() override;
    688688
    689     virtual RenderStyle* nonRendererStyle() const { return nullptr; }
    690 
    691689    Element* ancestorElement() const;
    692690
  • trunk/Source/WebCore/dom/NodeRenderStyle.h

    r165561 r172591  
    3535inline RenderStyle* Node::renderStyle() const
    3636{
    37     // Using a ternary here confuses the Solaris Studio 12/12.1/12.2 compilers:
    38     // Bug is CR 6569194, "Problem with question operator binding in inline function"
    39     if (RenderObject* renderer = this->renderer())
    40         return &renderer->style();
    41     return nonRendererStyle();
     37    auto* renderer = this->renderer();
     38    if (!renderer)
     39        return nullptr;
     40    return &renderer->style();
    4241}
    4342
  • trunk/Source/WebCore/html/HTMLOptGroupElement.cpp

    r165607 r172591  
    4242{
    4343    ASSERT(hasTagName(optgroupTag));
    44     setHasCustomStyleResolveCallbacks();
    4544}
    4645
     
    5756bool HTMLOptGroupElement::isFocusable() const
    5857{
    59     // Optgroup elements do not have a renderer so we check the renderStyle instead.
    60     return supportsFocus() && renderStyle() && renderStyle()->display() != NONE;
     58    if (!supportsFocus())
     59        return false;
     60    // Optgroup elements do not have a renderer.
     61    auto* style = const_cast<HTMLOptGroupElement&>(*this).computedStyle();
     62    return style && style->display() != NONE;
    6163}
    6264
     
    8991    if (select)
    9092        toHTMLSelectElement(select)->setRecalcListItems();
    91 }
    92 
    93 void HTMLOptGroupElement::didAttachRenderers()
    94 {
    95     // If after attaching nothing called styleForRenderer() on this node we
    96     // manually cache the value. This happens if our parent doesn't have a
    97     // renderer like <optgroup> or if it doesn't allow children like <select>.
    98     if (!m_style && parentNode()->renderStyle())
    99         updateNonRenderStyle(*parentNode()->renderStyle());
    100 }
    101 
    102 void HTMLOptGroupElement::willDetachRenderers()
    103 {
    104     m_style.clear();
    105 }
    106 
    107 void HTMLOptGroupElement::updateNonRenderStyle(RenderStyle& parentStyle)
    108 {
    109     m_style = document().ensureStyleResolver().styleForElement(this, &parentStyle);
    110 }
    111 
    112 RenderStyle* HTMLOptGroupElement::nonRendererStyle() const
    113 {
    114     return m_style.get();
    115 }
    116 
    117 PassRefPtr<RenderStyle> HTMLOptGroupElement::customStyleForRenderer(RenderStyle& parentStyle)
    118 {
    119     // styleForRenderer is called whenever a new style should be associated
    120     // with an Element so now is a good time to update our cached style.
    121     updateNonRenderStyle(parentStyle);
    122     return m_style;
    12393}
    12494
  • trunk/Source/WebCore/html/HTMLOptGroupElement.h

    r165542 r172591  
    4747    virtual void parseAttribute(const QualifiedName&, const AtomicString&) override;
    4848    virtual bool rendererIsNeeded(const RenderStyle&) override { return false; }
    49     virtual void didAttachRenderers() override;
    50     virtual void willDetachRenderers() override;
    5149
    5250    virtual void childrenChanged(const ChildChange&) override;
     
    5452    virtual void accessKeyAction(bool sendMouseEvents) override;
    5553
    56     // <optgroup> never has a renderer so we manually manage a cached style.
    57     void updateNonRenderStyle(RenderStyle& parentStyle);
    58     virtual RenderStyle* nonRendererStyle() const override;
    59     virtual PassRefPtr<RenderStyle> customStyleForRenderer(RenderStyle& parentStyle) override;
    60 
    6154    void recalcSelectOptions();
    62 
    63     RefPtr<RenderStyle> m_style;
    6455};
    6556
  • trunk/Source/WebCore/html/HTMLOptionElement.cpp

    r167755 r172591  
    8989}
    9090
    91 void HTMLOptionElement::didAttachRenderers()
    92 {
    93     // If after attaching nothing called styleForRenderer() on this node we
    94     // manually cache the value. This happens if our parent doesn't have a
    95     // renderer like <optgroup> or if it doesn't allow children like <select>.
    96     if (!m_style && parentNode()->renderStyle())
    97         updateNonRenderStyle(*parentNode()->renderStyle());
    98 }
    99 
    100 void HTMLOptionElement::willDetachRenderers()
    101 {
    102     m_style.clear();
    103 }
    104 
    10591bool HTMLOptionElement::isFocusable() const
    10692{
    107     // Option elements do not have a renderer so we check the renderStyle instead.
    108     return supportsFocus() && renderStyle() && renderStyle()->display() != NONE;
     93    if (!supportsFocus())
     94        return false;
     95    // Option elements do not have a renderer.
     96    auto* style = const_cast<HTMLOptionElement&>(*this).computedStyle();
     97    return style && style->display() != NONE;
    10998}
    11099
     
    301290}
    302291
    303 void HTMLOptionElement::updateNonRenderStyle(RenderStyle& parentStyle)
    304 {
    305     m_style = document().ensureStyleResolver().styleForElement(this, &parentStyle);
    306 }
    307 
    308 RenderStyle* HTMLOptionElement::nonRendererStyle() const
    309 {
    310     return m_style.get();
    311 }
    312 
    313 PassRefPtr<RenderStyle> HTMLOptionElement::customStyleForRenderer(RenderStyle& parentStyle)
    314 {
    315     // styleForRenderer is called whenever a new style should be associated
    316     // with an Element so now is a good time to update our cached style.
    317     updateNonRenderStyle(parentStyle);
    318     return m_style;
    319 }
    320 
    321 void HTMLOptionElement::didRecalcStyle(Style::Change)
     292void HTMLOptionElement::willResetComputedStyle()
    322293{
    323294    // FIXME: This is nasty, we ask our owner select to repaint even if the new
  • trunk/Source/WebCore/html/HTMLOptionElement.h

    r165542 r172591  
    7272    virtual bool isFocusable() const override;
    7373    virtual bool rendererIsNeeded(const RenderStyle&) override { return false; }
    74     virtual void didAttachRenderers() override;
    75     virtual void willDetachRenderers() override;
    7674
    7775    virtual void parseAttribute(const QualifiedName&, const AtomicString&) override;
     
    8280    virtual void childrenChanged(const ChildChange&) override;
    8381
    84     // <option> never has a renderer so we manually manage a cached style.
    85     void updateNonRenderStyle(RenderStyle& parentStyle);
    86     virtual RenderStyle* nonRendererStyle() const override;
    87     virtual PassRefPtr<RenderStyle> customStyleForRenderer(RenderStyle& parentStyle) override;
    88 
    89     virtual void didRecalcStyle(Style::Change) override;
     82    virtual void willResetComputedStyle() override;
    9083
    9184    String collectOptionInnerText() const;
     
    9386    bool m_disabled;
    9487    bool m_isSelected;
    95     RefPtr<RenderStyle> m_style;
    9688};
    9789
  • trunk/Source/WebCore/rendering/RenderMenuList.cpp

    r170774 r172591  
    223223            // Add in the option's text indent.  We can't calculate percentage values for now.
    224224            float optionWidth = 0;
    225             if (RenderStyle* optionStyle = element->renderStyle())
     225            if (RenderStyle* optionStyle = element->computedStyle())
    226226                optionWidth += minimumValueForLength(optionStyle->textIndent(), 0);
    227227            if (!text.isEmpty()) {
     
    273273        if (isHTMLOptionElement(element)) {
    274274            text = toHTMLOptionElement(element)->textIndentedToRespectGroupLabel();
    275             m_optionStyle = element->renderStyle();
     275            m_optionStyle = element->computedStyle();
    276276        }
    277277    }
Note: See TracChangeset for help on using the changeset viewer.