[RenderTreeBuilder] Introduce RenderTreebuilder::takeChild
[WebKit-https.git] / Source / WebCore / rendering / RenderRuby.h
index fde4768..e0f1721 100644 (file)
@@ -28,8 +28,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef RenderRuby_h
-#define RenderRuby_h
+#pragma once
 
 #include "RenderBlockFlow.h"
 #include "RenderInline.h"
@@ -51,44 +50,44 @@ namespace WebCore {
 // Generated :before/:after content is shunted into anonymous inline blocks
 
 // <ruby> when used as 'display:inline'
-class RenderRubyAsInline FINAL : public RenderInline {
+class RenderRubyAsInline final : public RenderInline {
+    WTF_MAKE_ISO_ALLOCATED(RenderRubyAsInline);
 public:
-    RenderRubyAsInline(Element&, PassRef<RenderStyle>);
+    RenderRubyAsInline(Element&, RenderStyle&&);
     virtual ~RenderRubyAsInline();
 
-    virtual void addChild(RenderObject* child, RenderObject* beforeChild = 0) override;
-    virtual void removeChild(RenderObject& child) override;
-
 protected:
-    virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle) override;
+    void styleDidChange(StyleDifference, const RenderStyle* oldStyle) override;
 
 private:
-    virtual bool isRuby() const override { return true; }
-    virtual const char* renderName() const override { return "RenderRuby (inline)"; }
-    virtual bool createsAnonymousWrapper() const override { return true; }
+    bool isRubyInline() const final { return true; }
+    const char* renderName() const override { return "RenderRuby (inline)"; }
+    bool createsAnonymousWrapper() const override { return true; }
 };
 
 // <ruby> when used as 'display:block' or 'display:inline-block'
-class RenderRubyAsBlock FINAL : public RenderBlockFlow {
+class RenderRubyAsBlock final : public RenderBlockFlow {
+    WTF_MAKE_ISO_ALLOCATED(RenderRubyAsBlock);
 public:
-    RenderRubyAsBlock(Element&, PassRef<RenderStyle>);
+    RenderRubyAsBlock(Element&, RenderStyle&&);
     virtual ~RenderRubyAsBlock();
 
-    Element& element() const { return toElement(nodeForNonAnonymous()); }
-
-    virtual void addChild(RenderObject* child, RenderObject* beforeChild = 0) override;
-    virtual void removeChild(RenderObject& child) override;
+    Element& element() const { return downcast<Element>(nodeForNonAnonymous()); }
 
 protected:
-    virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle) override;
+    void styleDidChange(StyleDifference, const RenderStyle* oldStyle) override;
 
 private:
-    virtual bool isRuby() const override { return true; }
-    virtual const char* renderName() const override { return "RenderRuby (block)"; }
-    virtual bool createsAnonymousWrapper() const override { return true; }
-    virtual void removeLeftoverAnonymousBlock(RenderBlock*) override { ASSERT_NOT_REACHED(); }
+    bool isRubyBlock() const final { return true; }
+    const char* renderName() const override { return "RenderRuby (block)"; }
+    bool createsAnonymousWrapper() const override { return true; }
 };
 
+
+inline bool isRuby(const RenderObject& renderer) { return (is<RenderRubyAsInline>(renderer) || is<RenderRubyAsBlock>(renderer)); }
+inline bool isRuby(const RenderObject* renderer) { return (renderer && isRuby(*renderer)); }
+
 } // namespace WebCore
 
-#endif // RenderRuby_h
+SPECIALIZE_TYPE_TRAITS_RENDER_OBJECT(RenderRubyAsInline, isRubyInline())
+SPECIALIZE_TYPE_TRAITS_RENDER_OBJECT(RenderRubyAsBlock, isRubyBlock())