Title: [135419] trunk/Source/WebCore
Revision
135419
Author
an...@apple.com
Date
2012-11-21 10:53:09 -0800 (Wed, 21 Nov 2012)

Log Message

Replace NodeRendererFactory class with a function
https://bugs.webkit.org/show_bug.cgi?id=102950

Reviewed by Andreas Kling.

Simplify the code by turning NodeRendererFactory single-use class into function of NodeRenderingContext.

* dom/Node.cpp:
(WebCore::Node::createRendererIfNeeded):
* dom/NodeRenderingContext.cpp:
(WebCore::NodeRenderingContext::NodeRenderingContext):
(WebCore):
(WebCore::NodeRenderingContext::moveToFlowThreadIfNeeded):
(WebCore::NodeRenderingContext::createRendererIfNeeded):
* dom/NodeRenderingContext.h:
(NodeRenderingContext):
(WebCore::NodeRenderingContext::style):
(WebCore):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (135418 => 135419)


--- trunk/Source/WebCore/ChangeLog	2012-11-21 18:52:19 UTC (rev 135418)
+++ trunk/Source/WebCore/ChangeLog	2012-11-21 18:53:09 UTC (rev 135419)
@@ -1,3 +1,24 @@
+2012-11-21  Antti Koivisto  <an...@apple.com>
+
+        Replace NodeRendererFactory class with a function
+        https://bugs.webkit.org/show_bug.cgi?id=102950
+
+        Reviewed by Andreas Kling.
+
+        Simplify the code by turning NodeRendererFactory single-use class into function of NodeRenderingContext.
+
+        * dom/Node.cpp:
+        (WebCore::Node::createRendererIfNeeded):
+        * dom/NodeRenderingContext.cpp:
+        (WebCore::NodeRenderingContext::NodeRenderingContext):
+        (WebCore):
+        (WebCore::NodeRenderingContext::moveToFlowThreadIfNeeded):
+        (WebCore::NodeRenderingContext::createRendererIfNeeded):
+        * dom/NodeRenderingContext.h:
+        (NodeRenderingContext):
+        (WebCore::NodeRenderingContext::style):
+        (WebCore):
+
 2012-11-21  W. James MacLean  <wjmacl...@chromium.org>
 
         [chromium] Change default tap highlight color for Chromium Windows & Linux.

Modified: trunk/Source/WebCore/dom/Node.cpp (135418 => 135419)


--- trunk/Source/WebCore/dom/Node.cpp	2012-11-21 18:52:19 UTC (rev 135418)
+++ trunk/Source/WebCore/dom/Node.cpp	2012-11-21 18:53:09 UTC (rev 135419)
@@ -1399,7 +1399,7 @@
 
 void Node::createRendererIfNeeded()
 {
-    NodeRendererFactory(this).createRendererIfNeeded();
+    NodeRenderingContext(this).createRendererIfNeeded();
 }
 
 bool Node::rendererIsNeeded(const NodeRenderingContext& context)

Modified: trunk/Source/WebCore/dom/NodeRenderingContext.cpp (135418 => 135419)


--- trunk/Source/WebCore/dom/NodeRenderingContext.cpp	2012-11-21 18:52:19 UTC (rev 135418)
+++ trunk/Source/WebCore/dom/NodeRenderingContext.cpp	2012-11-21 18:53:09 UTC (rev 135419)
@@ -52,7 +52,6 @@
 
 NodeRenderingContext::NodeRenderingContext(Node* node)
     : m_node(node)
-    , m_style(0)
     , m_parentFlowRenderer(0)
 {
     ComposedShadowTreeWalker::findParent(m_node, &m_parentDetails);
@@ -69,17 +68,6 @@
 {
 }
 
-void NodeRenderingContext::setStyle(PassRefPtr<RenderStyle> style)
-{
-    m_style = style;
-    moveToFlowThreadIfNeeded();
-}
-
-PassRefPtr<RenderStyle> NodeRenderingContext::releaseStyle()
-{
-    return m_style.release();
-}
-
 RenderObject* NodeRenderingContext::nextRenderer() const
 {
     if (RenderObject* renderer = m_node->renderer())
@@ -158,10 +146,11 @@
 
 void NodeRenderingContext::moveToFlowThreadIfNeeded()
 {
+    ASSERT(m_style);
     if (!m_node->document()->cssRegionsEnabled())
         return;
 
-    if (!m_node->isElementNode() || !m_style || m_style->flowThread().isEmpty())
+    if (!m_node->isElementNode() || m_style->flowThread().isEmpty())
         return;
 
     // FIXME: Do not collect elements if they are in shadow tree.
@@ -192,28 +181,6 @@
     return m_node->parentNode() && m_node->parentNode()->isShadowRoot();
 }
 
-NodeRendererFactory::NodeRendererFactory(Node* node)
-    : m_context(node)
-{
-}
-
-RenderObject* NodeRendererFactory::createRenderer()
-{
-    Node* node = m_context.node();
-    RenderObject* newRenderer = node->createRenderer(node->document()->renderArena(), m_context.style());
-    if (!newRenderer)
-        return 0;
-
-    if (!m_context.parentRenderer()->isChildAllowed(newRenderer, m_context.style())) {
-        newRenderer->destroy();
-        return 0;
-    }
-
-    node->setRenderer(newRenderer);
-    newRenderer->setAnimatableStyle(m_context.releaseStyle()); // setAnimatableStyle() can depend on renderer() already being set.
-    return newRenderer;
-}
-
 #if ENABLE(DIALOG_ELEMENT)
 static void adjustInsertionPointForTopLayerElement(Element* element, RenderObject*& parentRenderer, RenderObject*& nextRenderer)
 {
@@ -234,51 +201,52 @@
 }
 #endif
 
-void NodeRendererFactory::createRendererIfNeeded()
+void NodeRenderingContext::createRendererIfNeeded()
 {
-    Node* node = m_context.node();
-    ASSERT(!node->renderer());
+    ASSERT(!m_node->renderer());
 
-    if (!m_context.shouldCreateRenderer())
+    if (!shouldCreateRenderer())
         return;
+    Element* element = m_node->isElementNode() ? toElement(m_node) : 0;
+    
+    m_style = element ? element->styleForRenderer() : parentRenderer()->style();
+    ASSERT(m_style);
 
-    ASSERT(m_context.parentRenderer());
+    moveToFlowThreadIfNeeded();
 
-    Element* element = node->isElementNode() ? toElement(node) : 0;
-    if (element)
-        m_context.setStyle(element->styleForRenderer());
-    else
-        m_context.setStyle(m_context.parentRenderer()->style());
-
-    ASSERT(m_context.style());
-
-    if (!node->rendererIsNeeded(m_context)) {
-        if (element && m_context.style()->affectedByEmpty())
+    if (!m_node->rendererIsNeeded(*this)) {
+        if (element && m_style->affectedByEmpty())
             element->setStyleAffectedByEmpty();
         return;
     }
-
-    RenderObject* parentRenderer = m_context.hasFlowThreadParent() ? m_context.parentFlowRenderer() : m_context.parentRenderer();
+    RenderObject* parentRenderer = m_parentFlowRenderer ? m_parentFlowRenderer : this->parentRenderer();
     // Do not call m_context.nextRenderer() here in the first clause, because it expects to have
     // the renderer added to its parent already.
-    RenderObject* nextRenderer = m_context.hasFlowThreadParent() ? m_context.parentFlowRenderer()->nextRendererForNode(node) : m_context.nextRenderer();
+    RenderObject* nextRenderer = m_parentFlowRenderer ? m_parentFlowRenderer->nextRendererForNode(m_node) : this->nextRenderer();
 
 #if ENABLE(DIALOG_ELEMENT)
     if (element && element->isInTopLayer())
         adjustInsertionPointForTopLayerElement(element, parentRenderer, nextRenderer);
 #endif
 
-    RenderObject* newRenderer = createRenderer();
+    Document* document = m_node->document();
+    RenderObject* newRenderer = m_node->createRenderer(document->renderArena(), m_style.get());
+    if (!newRenderer)
+        return;
+    if (!parentRenderer->isChildAllowed(newRenderer, m_style.get())) {
+        newRenderer->destroy();
+        return;
+    }
+    m_node->setRenderer(newRenderer);
+    newRenderer->setAnimatableStyle(m_style.release()); // setAnimatableStyle() can depend on renderer() already being set.
 
 #if ENABLE(FULLSCREEN_API)
-    Document* document = node->document();
-    if (document->webkitIsFullScreen() && document->webkitCurrentFullScreenElement() == node)
+    if (document->webkitIsFullScreen() && document->webkitCurrentFullScreenElement() == m_node) {
         newRenderer = RenderFullScreen::wrapRenderer(newRenderer, parentRenderer, document);
+        if (!newRenderer)
+            return;
+    }
 #endif
-
-    if (!newRenderer)
-        return;
-
     // Note: Adding newRenderer instead of renderer(). renderer() may be a child of newRenderer.
     parentRenderer->addChild(newRenderer, nextRenderer);
 }

Modified: trunk/Source/WebCore/dom/NodeRenderingContext.h (135418 => 135419)


--- trunk/Source/WebCore/dom/NodeRenderingContext.h	2012-11-21 18:52:19 UTC (rev 135418)
+++ trunk/Source/WebCore/dom/NodeRenderingContext.h	2012-11-21 18:53:09 UTC (rev 135419)
@@ -48,6 +48,8 @@
     NodeRenderingContext(Node*, RenderStyle*);
     ~NodeRenderingContext();
 
+    void createRendererIfNeeded();
+
     Node* node() const;
     ContainerNode* parentNodeForRenderingAndStyle() const;
     bool resetStyleInheritance() const;
@@ -56,19 +58,15 @@
     RenderObject* previousRenderer() const;
     InsertionPoint* insertionPoint() const;
 
-    RenderStyle* style() const;
-    void setStyle(PassRefPtr<RenderStyle>);
-    PassRefPtr<RenderStyle> releaseStyle();
+    const RenderStyle* style() const;
 
-    bool shouldCreateRenderer() const;
-
     bool isOnUpperEncapsulationBoundary() const;
     bool isOnEncapsulationBoundary() const;
-    bool hasFlowThreadParent() const { return m_parentFlowRenderer; }
-    RenderNamedFlowThread* parentFlowRenderer() const { return m_parentFlowRenderer; }
-    void moveToFlowThreadIfNeeded();
 
 private:
+    bool shouldCreateRenderer() const;
+    void moveToFlowThreadIfNeeded();
+
     Node* m_node;
     ComposedShadowTreeWalker::ParentTraversalDetails m_parentDetails;
     RefPtr<RenderStyle> m_style;
@@ -91,7 +89,7 @@
     return m_parentDetails.resetStyleInheritance();
 }
 
-inline RenderStyle* NodeRenderingContext::style() const
+inline const RenderStyle* NodeRenderingContext::style() const
 {
     return m_style.get();
 }
@@ -101,26 +99,6 @@
     return m_parentDetails.insertionPoint();
 }
 
-class NodeRendererFactory {
-    WTF_MAKE_NONCOPYABLE(NodeRendererFactory);
-    WTF_MAKE_FAST_ALLOCATED;
-public:
-    explicit NodeRendererFactory(Node*);
-
-    const NodeRenderingContext& context() const;
-    void createRendererIfNeeded();
-
-private:
-    RenderObject* createRenderer();
-
-    NodeRenderingContext m_context;
-};
-
-inline const NodeRenderingContext& NodeRendererFactory::context() const
-{
-    return m_context;
-}
-
 } // namespace WebCore
 
 #endif
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to