Index: Source/core/dom/RenderTreeBuilder.h |
diff --git a/Source/core/dom/RenderTreeBuilder.h b/Source/core/dom/RenderTreeBuilder.h |
index 30d639c4d921dfedc25c9f910104ecda34f7adc8..1bd50f5949d096b36608aa5c60b07d22840155c8 100644 |
--- a/Source/core/dom/RenderTreeBuilder.h |
+++ b/Source/core/dom/RenderTreeBuilder.h |
@@ -29,6 +29,7 @@ |
#include "core/dom/Document.h" |
#include "core/dom/Node.h" |
#include "core/dom/NodeRenderingTraversal.h" |
+#include "core/dom/Text.h" |
#include "wtf/RefPtr.h" |
namespace blink { |
@@ -40,12 +41,10 @@ class RenderStyle; |
class RenderTreeBuilder { |
STACK_ALLOCATED(); |
public: |
- RenderTreeBuilder(Node* node, RenderStyle* style) |
+ RenderTreeBuilder(Node* node) |
: m_node(node) |
- , m_renderingParent(nullptr) |
- , m_style(style) |
+ , m_renderingParent(NodeRenderingTraversal::parent(node)) |
{ |
- ASSERT(!node->renderer()); |
esprehn
2014/11/05 23:20:26
This assert is still valid, we shouldn't create on
|
ASSERT(node->needsAttach()); |
ASSERT(node->document().inStyleRecalc()); |
@@ -54,23 +53,42 @@ public: |
// will trigger a layout inside childrenChanged. |
// Mainly HTMLTextAreaElement::childrenChanged calls HTMLTextFormControlElement::setSelectionRange |
// which does an updateLayoutIgnorePendingStylesheets. |
- |
- m_renderingParent = NodeRenderingTraversal::parent(node, &m_parentDetails); |
} |
- void createRendererForTextIfNeeded(); |
- void createRendererForElementIfNeeded(); |
+ void createRendererIfNeeded(); |
+ virtual void createRenderer() = 0; |
+ virtual bool rendererIsNeeded() const; |
esprehn
2014/11/05 23:20:25
Does the compiler devirtualize this?
|
-private: |
- RenderObject* parentRenderer() const; |
+protected: |
+ virtual RenderObject* parentRenderer() const; |
RenderObject* nextRenderer() const; |
- bool shouldCreateRenderer() const; |
- RenderStyle& style() const; |
RawPtrWillBeMember<Node> m_node; |
RawPtrWillBeMember<ContainerNode> m_renderingParent; |
- NodeRenderingTraversal::ParentDetails m_parentDetails; |
- mutable RefPtr<RenderStyle> m_style; |
+}; |
+ |
+class RenderTreeBuilderForElement : public RenderTreeBuilder { |
+public: |
+ RenderTreeBuilderForElement(Element* element, PassRefPtr<RenderStyle> style) |
+ : RenderTreeBuilder(element) |
+ , m_style(style) { } |
+ |
+ virtual void createRenderer() override final; |
+ virtual bool rendererIsNeeded() const override final; |
+ |
+private: |
+ virtual RenderObject* parentRenderer() const override final; |
+ |
+ RefPtr<RenderStyle> m_style; |
+}; |
+ |
+class RenderTreeBuilderForText : public RenderTreeBuilder { |
+public: |
+ RenderTreeBuilderForText(Text* text) |
+ : RenderTreeBuilder(text) { } |
+ |
+ virtual void createRenderer() override final; |
+ virtual bool rendererIsNeeded() const override final; |
}; |
} // namespace blink |