Changeset 172591 in webkit
- Timestamp:
- Aug 14, 2014, 10:49:55 AM (11 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r172584 r172591 1 2014-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 1 53 2014-08-14 Jer Noble <jer.noble@apple.com> 2 54 -
trunk/Source/WebCore/dom/Element.cpp
r172487 r172591 2862 2862 if (!hasRareData() || !elementRareData()->computedStyle()) 2863 2863 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); 2869 2875 } 2870 2876 … … 2900 2906 2901 2907 void Element::didRecalcStyle(Style::Change) 2908 { 2909 ASSERT(hasCustomStyleResolveCallbacks()); 2910 } 2911 2912 void Element::willResetComputedStyle() 2902 2913 { 2903 2914 ASSERT(hasCustomStyleResolveCallbacks()); -
trunk/Source/WebCore/dom/Element.h
r172487 r172591 547 547 virtual bool willRecalcStyle(Style::Change); 548 548 virtual void didRecalcStyle(Style::Change); 549 virtual void willResetComputedStyle(); 549 550 virtual void willAttachRenderers(); 550 551 virtual void didAttachRenderers(); -
trunk/Source/WebCore/dom/Node.h
r170828 r172591 687 687 virtual void derefEventTarget() override; 688 688 689 virtual RenderStyle* nonRendererStyle() const { return nullptr; }690 691 689 Element* ancestorElement() const; 692 690 -
trunk/Source/WebCore/dom/NodeRenderStyle.h
r165561 r172591 35 35 inline RenderStyle* Node::renderStyle() const 36 36 { 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(); 42 41 } 43 42 -
trunk/Source/WebCore/html/HTMLOptGroupElement.cpp
r165607 r172591 42 42 { 43 43 ASSERT(hasTagName(optgroupTag)); 44 setHasCustomStyleResolveCallbacks();45 44 } 46 45 … … 57 56 bool HTMLOptGroupElement::isFocusable() const 58 57 { 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; 61 63 } 62 64 … … 89 91 if (select) 90 92 toHTMLSelectElement(select)->setRecalcListItems(); 91 }92 93 void HTMLOptGroupElement::didAttachRenderers()94 {95 // If after attaching nothing called styleForRenderer() on this node we96 // manually cache the value. This happens if our parent doesn't have a97 // 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() const113 {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 associated120 // with an Element so now is a good time to update our cached style.121 updateNonRenderStyle(parentStyle);122 return m_style;123 93 } 124 94 -
trunk/Source/WebCore/html/HTMLOptGroupElement.h
r165542 r172591 47 47 virtual void parseAttribute(const QualifiedName&, const AtomicString&) override; 48 48 virtual bool rendererIsNeeded(const RenderStyle&) override { return false; } 49 virtual void didAttachRenderers() override;50 virtual void willDetachRenderers() override;51 49 52 50 virtual void childrenChanged(const ChildChange&) override; … … 54 52 virtual void accessKeyAction(bool sendMouseEvents) override; 55 53 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 61 54 void recalcSelectOptions(); 62 63 RefPtr<RenderStyle> m_style;64 55 }; 65 56 -
trunk/Source/WebCore/html/HTMLOptionElement.cpp
r167755 r172591 89 89 } 90 90 91 void HTMLOptionElement::didAttachRenderers()92 {93 // If after attaching nothing called styleForRenderer() on this node we94 // manually cache the value. This happens if our parent doesn't have a95 // 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 105 91 bool HTMLOptionElement::isFocusable() const 106 92 { 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; 109 98 } 110 99 … … 301 290 } 302 291 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) 292 void HTMLOptionElement::willResetComputedStyle() 322 293 { 323 294 // FIXME: This is nasty, we ask our owner select to repaint even if the new -
trunk/Source/WebCore/html/HTMLOptionElement.h
r165542 r172591 72 72 virtual bool isFocusable() const override; 73 73 virtual bool rendererIsNeeded(const RenderStyle&) override { return false; } 74 virtual void didAttachRenderers() override;75 virtual void willDetachRenderers() override;76 74 77 75 virtual void parseAttribute(const QualifiedName&, const AtomicString&) override; … … 82 80 virtual void childrenChanged(const ChildChange&) override; 83 81 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; 90 83 91 84 String collectOptionInnerText() const; … … 93 86 bool m_disabled; 94 87 bool m_isSelected; 95 RefPtr<RenderStyle> m_style;96 88 }; 97 89 -
trunk/Source/WebCore/rendering/RenderMenuList.cpp
r170774 r172591 223 223 // Add in the option's text indent. We can't calculate percentage values for now. 224 224 float optionWidth = 0; 225 if (RenderStyle* optionStyle = element-> renderStyle())225 if (RenderStyle* optionStyle = element->computedStyle()) 226 226 optionWidth += minimumValueForLength(optionStyle->textIndent(), 0); 227 227 if (!text.isEmpty()) { … … 273 273 if (isHTMLOptionElement(element)) { 274 274 text = toHTMLOptionElement(element)->textIndentedToRespectGroupLabel(); 275 m_optionStyle = element-> renderStyle();275 m_optionStyle = element->computedStyle(); 276 276 } 277 277 }
Note:
See TracChangeset
for help on using the changeset viewer.