Replace PassRef with Ref/Ref&& across the board.
[WebKit-https.git] / Source / WebCore / rendering / mathml / RenderMathMLRoot.h
index 99cd365..aa4c899 100644 (file)
 #if ENABLE(MATHML)
 
 #include "RenderMathMLBlock.h"
+#include "RenderMathMLRow.h"
 
 namespace WebCore {
+
+class RenderMathMLRadicalOperator;
+class RenderMathMLRootWrapper;
     
 // Render base^(1/index), or sqrt(base) via the derived class RenderMathMLSquareRoot, using radical notation.
 class RenderMathMLRoot : public RenderMathMLBlock {
+
+friend class RenderMathMLRootWrapper;
+
 public:
-    RenderMathMLRoot(Element*);
-    
-    virtual void addChild(RenderObject* newChild, RenderObject* beforeChild = 0) OVERRIDE;
+    RenderMathMLRoot(Element&, Ref<RenderStyle>&&);
+    RenderMathMLRoot(Document&, Ref<RenderStyle>&&);
+
+    virtual void addChild(RenderObject* newChild, RenderObject* beforeChild = 0) override;
+    virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle) override;
+    virtual void updateFromElement() override;
     
+    RenderMathMLRootWrapper* baseWrapper() const;
+    RenderMathMLRootWrapper* indexWrapper() const;
+
 protected:
-    virtual void layout() OVERRIDE;
+    virtual void layout() override;
     
-    virtual void paint(PaintInfo&, const LayoutPoint&) OVERRIDE;
+    virtual void paint(PaintInfo&, const LayoutPoint&) override;
 
 private:
-    virtual bool isRenderMathMLRoot() const { return true; }
-    virtual const char* renderName() const { return "RenderMathMLRoot"; }
-    
-    virtual void computePreferredLogicalWidths() OVERRIDE;
-    
-    // This may return 0 for a non-MathML index (which won't occur in valid MathML).
-    RenderBoxModelObject* index() const;
-    
-    int m_overbarLeftPointShift;
-    int m_indexTop;
+    virtual bool isRenderMathMLRoot() const override final { return true; }
+    virtual const char* renderName() const override { return "RenderMathMLRoot"; }
+    virtual int firstLineBaseline() const override;
+    void updateStyle();
+    void restructureWrappers();
+
+    RenderMathMLBlock* radicalWrapper() const;
+    RenderMathMLRadicalOperator* radicalOperator() const;
+
+    LayoutUnit m_verticalGap;
+    LayoutUnit m_ruleThickness;
+    LayoutUnit m_extraAscender;
+    float m_degreeBottomRaisePercent;
 };
-    
-}
+
+// These are specific wrappers for the index and base, that ask the parent to restructure the renderers after child removal.
+class RenderMathMLRootWrapper final : public RenderMathMLRow {
+
+friend class RenderMathMLRoot;
+
+public:
+    RenderMathMLRootWrapper(Document& document, Ref<RenderStyle>&& style)
+        : RenderMathMLRow(document, WTF::move(style)) { }
+
+private:
+    void removeChildWithoutRestructuring(RenderObject&);
+    virtual void removeChild(RenderObject&) override;
+    static RenderPtr<RenderMathMLRootWrapper> createAnonymousWrapper(RenderMathMLRoot* renderObject);
+    virtual bool isRenderMathMLRootWrapper() const override { return true; }
+    virtual const char* renderName() const override { return "RenderMathMLRootWrapper"; }
+};
+
+} // namespace WebCore
+
+SPECIALIZE_TYPE_TRAITS_RENDER_OBJECT(RenderMathMLRoot, isRenderMathMLRoot())
+SPECIALIZE_TYPE_TRAITS_RENDER_OBJECT(RenderMathMLRootWrapper, isRenderMathMLRootWrapper())
 
 #endif // ENABLE(MATHML)