Title: [160906] trunk/Source/WebCore
Revision
160906
Author
akl...@apple.com
Date
2013-12-20 05:47:42 -0800 (Fri, 20 Dec 2013)

Log Message

Devirtualize RenderElement::setStyle().
<https://webkit.org/b/126065>

setStyle() was only virtual in order to let RenderSVGBlock override
the display type in some cases. Devirtualized it and moved the fixup
logic to StyleResolver::adjustRenderStyle().

This hack had an evil twin in RenderElement::initializeStyle() that
also goes away. FIXME--!

Based on a Blink change by Elliott Sprehn.

Reviewed by Antti Koivisto.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (160905 => 160906)


--- trunk/Source/WebCore/ChangeLog	2013-12-20 13:44:45 UTC (rev 160905)
+++ trunk/Source/WebCore/ChangeLog	2013-12-20 13:47:42 UTC (rev 160906)
@@ -1,3 +1,19 @@
+2013-12-20  Andreas Kling  <akl...@apple.com>
+
+        Devirtualize RenderElement::setStyle().
+        <https://webkit.org/b/126065>
+
+        setStyle() was only virtual in order to let RenderSVGBlock override
+        the display type in some cases. Devirtualized it and moved the fixup
+        logic to StyleResolver::adjustRenderStyle().
+
+        This hack had an evil twin in RenderElement::initializeStyle() that
+        also goes away. FIXME--!
+
+        Based on a Blink change by Elliott Sprehn.
+
+        Reviewed by Antti Koivisto.
+
 2013-12-20  Radu Stavila  <stav...@adobe.com>
 
         [CSS Regions] When changing flow-from/flow-into on :hover, elements overflowing the region are not correctly repainted

Modified: trunk/Source/WebCore/css/StyleResolver.cpp (160905 => 160906)


--- trunk/Source/WebCore/css/StyleResolver.cpp	2013-12-20 13:44:45 UTC (rev 160905)
+++ trunk/Source/WebCore/css/StyleResolver.cpp	2013-12-20 13:47:42 UTC (rev 160906)
@@ -1430,6 +1430,10 @@
         // not be scaled again.
         if (e->hasTagName(SVGNames::foreignObjectTag))
             style.setEffectiveZoom(RenderStyle::initialZoom());
+
+        // SVG text layout code expects us to be a block-level style element.
+        if ((e->hasTagName(SVGNames::foreignObjectTag) || e->hasTagName(SVGNames::textTag)) && style.isDisplayInlineType())
+            style.setDisplay(BLOCK);
     }
 #endif
 }

Modified: trunk/Source/WebCore/rendering/RenderElement.cpp (160905 => 160906)


--- trunk/Source/WebCore/rendering/RenderElement.cpp	2013-12-20 13:44:45 UTC (rev 160905)
+++ trunk/Source/WebCore/rendering/RenderElement.cpp	2013-12-20 13:47:42 UTC (rev 160906)
@@ -354,14 +354,6 @@
 
 void RenderElement::initializeStyle()
 {
-#if ENABLE(SVG)
-    // FIXME: This logic should be in a less ridiculous place. (This is mirrored from RenderSVGBlock::setStyle().)
-    if (isRenderSVGBlock() && m_style->isDisplayInlineType()) {
-        // SVG text layout code expects us to be a block-level style element.
-        m_style->setDisplay(BLOCK);
-    }
-#endif
-
     styleWillChange(StyleDifferenceEqual, style());
 
     m_hasInitializedStyle = true;

Modified: trunk/Source/WebCore/rendering/RenderElement.h (160905 => 160906)


--- trunk/Source/WebCore/rendering/RenderElement.h	2013-12-20 13:44:45 UTC (rev 160905)
+++ trunk/Source/WebCore/rendering/RenderElement.h	2013-12-20 13:47:42 UTC (rev 160906)
@@ -40,7 +40,7 @@
 
     void initializeStyle();
 
-    virtual void setStyle(PassRef<RenderStyle>);
+    void setStyle(PassRef<RenderStyle>);
     // Called to update a style that is allowed to trigger animations.
     void setAnimatableStyle(PassRef<RenderStyle>);
 

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGBlock.cpp (160905 => 160906)


--- trunk/Source/WebCore/rendering/svg/RenderSVGBlock.cpp	2013-12-20 13:44:45 UTC (rev 160905)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGBlock.cpp	2013-12-20 13:47:42 UTC (rev 160906)
@@ -46,23 +46,6 @@
     return borderRect;
 }
 
-void RenderSVGBlock::setStyle(PassRef<RenderStyle> style)
-{
-    if (!style.get().isDisplayInlineType()) {
-        RenderBlockFlow::setStyle(std::move(style));
-        return;
-    }
-
-    Ref<RenderStyle> styleToInheritFrom(std::move(style));
-
-    // SVG text layout code expects us to be a block-level style element.   
-    auto newStyle = RenderStyle::create();
-    newStyle.get().inheritFrom(&styleToInheritFrom.get());
-    newStyle.get().setDisplay(BLOCK);
-
-    RenderBlockFlow::setStyle(std::move(newStyle));
-}
-
 void RenderSVGBlock::updateFromStyle()
 {
     RenderBlockFlow::updateFromStyle();

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGBlock.h (160905 => 160906)


--- trunk/Source/WebCore/rendering/svg/RenderSVGBlock.h	2013-12-20 13:44:45 UTC (rev 160905)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGBlock.h	2013-12-20 13:47:42 UTC (rev 160906)
@@ -42,7 +42,6 @@
 private:
     void element() const WTF_DELETED_FUNCTION;
 
-    virtual void setStyle(PassRef<RenderStyle>) OVERRIDE FINAL;
     virtual void updateFromStyle() OVERRIDE FINAL;
 
     virtual bool isRenderSVGBlock() const OVERRIDE FINAL { return true; };
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to