CTTE: Tighten renderer types for InlineFlowBox and SVGInlineFlowBox.
authorakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 19 Sep 2013 12:33:42 +0000 (12:33 +0000)
committerakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 19 Sep 2013 12:33:42 +0000 (12:33 +0000)
<https://webkit.org/b/121603>

Reviewed by Antti Koivisto.

Codify the following:

- InlineFlowBox always has a RenderBoxModelObject.
- SVGInlineFlowBox always has a RenderSVGInline.

This turns some node() accessors into element(). Neato!

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@156092 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/rendering/InlineFlowBox.cpp
Source/WebCore/rendering/InlineFlowBox.h
Source/WebCore/rendering/RootInlineBox.cpp
Source/WebCore/rendering/svg/SVGInlineFlowBox.h

index 5f448e96cf3085174c96861158756a5f46e9c590..a2182e660beb328e0f58e9178974dc56735e6418 100644 (file)
@@ -1,3 +1,17 @@
+2013-09-19  Andreas Kling  <akling@apple.com>
+
+        CTTE: Tighten renderer types for InlineFlowBox and SVGInlineFlowBox.
+        <https://webkit.org/b/121603>
+
+        Reviewed by Antti Koivisto.
+
+        Codify the following:
+
+        - InlineFlowBox always has a RenderBoxModelObject.
+        - SVGInlineFlowBox always has a RenderSVGInline.
+
+        This turns some node() accessors into element(). Neato!
+
 2013-09-19  Gurpreet Kaur  <k.gurpreet@samsung.com>
 
         CSS Unit vmax and vmin in border-width not handled.
index 7b9f3cee191644f89cd22d186f8b6363460c2bbd..6291788833def75f372d523f7dc8dbe429a8013e 100644 (file)
@@ -1095,7 +1095,7 @@ bool InlineFlowBox::nodeAtPoint(const HitTestRequest& request, HitTestResult& re
 
     if (locationInContainer.intersects(rect)) {
         renderer().updateHitTestResult(result, flipForWritingMode(locationInContainer.point() - toLayoutSize(accumulatedOffset))); // Don't add in m_x or m_y here, we want coords in the containing block's space.
-        if (!result.addNodeToRectBasedTestResult(renderer().node(), request, locationInContainer, rect))
+        if (!result.addNodeToRectBasedTestResult(renderer().element(), request, locationInContainer, rect))
             return true;
     }
 
@@ -1142,7 +1142,7 @@ void InlineFlowBox::paint(PaintInfo& paintInfo, const LayoutPoint& paintOffset,
                 if (containingBlockPaintsContinuationOutline) {
                     // Add ourselves to the containing block of the entire continuation so that it can
                     // paint us atomically.
-                    cb->addContinuationWithOutline(toRenderInline(renderer().node()->renderer()));
+                    cb->addContinuationWithOutline(toRenderInline(renderer().element()->renderer()));
                 } else if (!inlineFlow.isInlineElementContinuation())
                     paintInfo.outlineObjects->add(&inlineFlow);
             }
index 041aadc6a93a49516cd687b525506571c868811c..17772e6a42e7108862f1cd13f29b016840a44ee7 100644 (file)
@@ -40,7 +40,7 @@ typedef HashMap<const InlineTextBox*, pair<Vector<const SimpleFontData*>, GlyphO
 
 class InlineFlowBox : public InlineBox {
 public:
-    explicit InlineFlowBox(RenderObject& renderer)
+    explicit InlineFlowBox(RenderBoxModelObject& renderer)
         : InlineBox(renderer)
         , m_firstChild(0)
         , m_lastChild(0)
@@ -72,6 +72,8 @@ public:
     virtual const char* boxName() const;
 #endif
 
+    RenderBoxModelObject& renderer() const { return toRenderBoxModelObject(InlineBox::renderer()); }
+
     InlineFlowBox* prevLineBox() const { return m_prevLineBox; }
     InlineFlowBox* nextLineBox() const { return m_nextLineBox; }
     void setNextLineBox(InlineFlowBox* n) { m_nextLineBox = n; }
index f77c9adfc8b00c3328e408a28881bcb6840c1e67..1ca91ce2a47836d0dd6e5f2b1bc49d8f2fe5b1d1 100644 (file)
@@ -185,7 +185,7 @@ void RootInlineBox::addHighlightOverflow()
 
     // Highlight acts as a selection inflation.
     FloatRect rootRect(0, selectionTop(), logicalWidth(), selectionHeight());
-    IntRect inflatedRect = enclosingIntRect(page->chrome().client().customHighlightRect(renderer().node(), renderer().style()->highlight(), rootRect));
+    IntRect inflatedRect = enclosingIntRect(page->chrome().client().customHighlightRect(renderer().element(), renderer().style()->highlight(), rootRect));
     setOverflowFromLogicalRects(inflatedRect, inflatedRect, lineTop(), lineBottom());
 }
 
@@ -200,9 +200,9 @@ void RootInlineBox::paintCustomHighlight(PaintInfo& paintInfo, const LayoutPoint
 
     // Get the inflated rect so that we can properly hit test.
     FloatRect rootRect(paintOffset.x() + x(), paintOffset.y() + selectionTop(), logicalWidth(), selectionHeight());
-    FloatRect inflatedRect = page->chrome().client().customHighlightRect(renderer().node(), highlightType, rootRect);
+    FloatRect inflatedRect = page->chrome().client().customHighlightRect(renderer().element(), highlightType, rootRect);
     if (inflatedRect.intersects(paintInfo.rect))
-        page->chrome().client().paintCustomHighlight(renderer().node(), highlightType, rootRect, rootRect, false, true);
+        page->chrome().client().paintCustomHighlight(renderer().element(), highlightType, rootRect, rootRect, false, true);
 }
 
 #endif
index 084a3682c511106a6281b9a7e9a9e16e28a23b05..b06b75c97a0e6fcc685a3d5432e3354ac399beeb 100644 (file)
@@ -23,6 +23,7 @@
 
 #if ENABLE(SVG)
 #include "InlineFlowBox.h"
+#include "RenderSVGInline.h"
 
 namespace WebCore {
 
@@ -30,24 +31,25 @@ class RenderSVGInlineText;
 
 class SVGInlineFlowBox FINAL : public InlineFlowBox {
 public:
-    SVGInlineFlowBox(RenderObject& renderer)
+    SVGInlineFlowBox(RenderSVGInline& renderer)
         : InlineFlowBox(renderer)
         , m_logicalHeight(0)
     {
     }
 
-    virtual bool isSVGInlineFlowBox() const { return true; }
-    virtual float virtualLogicalHeight() const { return m_logicalHeight; }
-    void setLogicalHeight(float h) { m_logicalHeight = h; }
-
-    void paintSelectionBackground(PaintInfo&);
-    virtual void paint(PaintInfo&, const LayoutPoint&, LayoutUnit lineTop, LayoutUnit lineBottom);
+    RenderSVGInline& renderer() { return static_cast<RenderSVGInline&>(InlineFlowBox::renderer()); }
 
-    virtual FloatRect calculateBoundaries() const;
+    virtual FloatRect calculateBoundaries() const OVERRIDE;
 
+    void setLogicalHeight(float h) { m_logicalHeight = h; }
+    void paintSelectionBackground(PaintInfo&);
     static void computeTextMatchMarkerRectForRenderer(RenderSVGInlineText*);
 
 private:
+    virtual bool isSVGInlineFlowBox() const OVERRIDE { return true; }
+    virtual float virtualLogicalHeight() const OVERRIDE { return m_logicalHeight; }
+    virtual void paint(PaintInfo&, const LayoutPoint&, LayoutUnit lineTop, LayoutUnit lineBottom) OVERRIDE;
+
     float m_logicalHeight;
 };