Changeset 135419 in webkit


Ignore:
Timestamp:
Nov 21, 2012, 10:53:09 AM (12 years ago)
Author:
Antti Koivisto
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):

Location:
trunk/Source/WebCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r135418 r135419  
     12012-11-21  Antti Koivisto  <antti@apple.com>
     2
     3        Replace NodeRendererFactory class with a function
     4        https://bugs.webkit.org/show_bug.cgi?id=102950
     5
     6        Reviewed by Andreas Kling.
     7
     8        Simplify the code by turning NodeRendererFactory single-use class into function of NodeRenderingContext.
     9
     10        * dom/Node.cpp:
     11        (WebCore::Node::createRendererIfNeeded):
     12        * dom/NodeRenderingContext.cpp:
     13        (WebCore::NodeRenderingContext::NodeRenderingContext):
     14        (WebCore):
     15        (WebCore::NodeRenderingContext::moveToFlowThreadIfNeeded):
     16        (WebCore::NodeRenderingContext::createRendererIfNeeded):
     17        * dom/NodeRenderingContext.h:
     18        (NodeRenderingContext):
     19        (WebCore::NodeRenderingContext::style):
     20        (WebCore):
     21
    1222012-11-21  W. James MacLean  <wjmaclean@chromium.org>
    223
  • trunk/Source/WebCore/dom/Node.cpp

    r135242 r135419  
    14001400void Node::createRendererIfNeeded()
    14011401{
    1402     NodeRendererFactory(this).createRendererIfNeeded();
     1402    NodeRenderingContext(this).createRendererIfNeeded();
    14031403}
    14041404
  • trunk/Source/WebCore/dom/NodeRenderingContext.cpp

    r135290 r135419  
    5353NodeRenderingContext::NodeRenderingContext(Node* node)
    5454    : m_node(node)
    55     , m_style(0)
    5655    , m_parentFlowRenderer(0)
    5756{
     
    6867NodeRenderingContext::~NodeRenderingContext()
    6968{
    70 }
    71 
    72 void NodeRenderingContext::setStyle(PassRefPtr<RenderStyle> style)
    73 {
    74     m_style = style;
    75     moveToFlowThreadIfNeeded();
    76 }
    77 
    78 PassRefPtr<RenderStyle> NodeRenderingContext::releaseStyle()
    79 {
    80     return m_style.release();
    8169}
    8270
     
    159147void NodeRenderingContext::moveToFlowThreadIfNeeded()
    160148{
     149    ASSERT(m_style);
    161150    if (!m_node->document()->cssRegionsEnabled())
    162151        return;
    163152
    164     if (!m_node->isElementNode() || !m_style || m_style->flowThread().isEmpty())
     153    if (!m_node->isElementNode() || m_style->flowThread().isEmpty())
    165154        return;
    166155
     
    191180{
    192181    return m_node->parentNode() && m_node->parentNode()->isShadowRoot();
    193 }
    194 
    195 NodeRendererFactory::NodeRendererFactory(Node* node)
    196     : m_context(node)
    197 {
    198 }
    199 
    200 RenderObject* NodeRendererFactory::createRenderer()
    201 {
    202     Node* node = m_context.node();
    203     RenderObject* newRenderer = node->createRenderer(node->document()->renderArena(), m_context.style());
    204     if (!newRenderer)
    205         return 0;
    206 
    207     if (!m_context.parentRenderer()->isChildAllowed(newRenderer, m_context.style())) {
    208         newRenderer->destroy();
    209         return 0;
    210     }
    211 
    212     node->setRenderer(newRenderer);
    213     newRenderer->setAnimatableStyle(m_context.releaseStyle()); // setAnimatableStyle() can depend on renderer() already being set.
    214     return newRenderer;
    215182}
    216183
     
    235202#endif
    236203
    237 void NodeRendererFactory::createRendererIfNeeded()
    238 {
    239     Node* node = m_context.node();
    240     ASSERT(!node->renderer());
    241 
    242     if (!m_context.shouldCreateRenderer())
    243         return;
    244 
    245     ASSERT(m_context.parentRenderer());
    246 
    247     Element* element = node->isElementNode() ? toElement(node) : 0;
    248     if (element)
    249         m_context.setStyle(element->styleForRenderer());
    250     else
    251         m_context.setStyle(m_context.parentRenderer()->style());
    252 
    253     ASSERT(m_context.style());
    254 
    255     if (!node->rendererIsNeeded(m_context)) {
    256         if (element && m_context.style()->affectedByEmpty())
     204void NodeRenderingContext::createRendererIfNeeded()
     205{
     206    ASSERT(!m_node->renderer());
     207
     208    if (!shouldCreateRenderer())
     209        return;
     210    Element* element = m_node->isElementNode() ? toElement(m_node) : 0;
     211   
     212    m_style = element ? element->styleForRenderer() : parentRenderer()->style();
     213    ASSERT(m_style);
     214
     215    moveToFlowThreadIfNeeded();
     216
     217    if (!m_node->rendererIsNeeded(*this)) {
     218        if (element && m_style->affectedByEmpty())
    257219            element->setStyleAffectedByEmpty();
    258220        return;
    259221    }
    260 
    261     RenderObject* parentRenderer = m_context.hasFlowThreadParent() ? m_context.parentFlowRenderer() : m_context.parentRenderer();
     222    RenderObject* parentRenderer = m_parentFlowRenderer ? m_parentFlowRenderer : this->parentRenderer();
    262223    // Do not call m_context.nextRenderer() here in the first clause, because it expects to have
    263224    // the renderer added to its parent already.
    264     RenderObject* nextRenderer = m_context.hasFlowThreadParent() ? m_context.parentFlowRenderer()->nextRendererForNode(node) : m_context.nextRenderer();
     225    RenderObject* nextRenderer = m_parentFlowRenderer ? m_parentFlowRenderer->nextRendererForNode(m_node) : this->nextRenderer();
    265226
    266227#if ENABLE(DIALOG_ELEMENT)
     
    269230#endif
    270231
    271     RenderObject* newRenderer = createRenderer();
     232    Document* document = m_node->document();
     233    RenderObject* newRenderer = m_node->createRenderer(document->renderArena(), m_style.get());
     234    if (!newRenderer)
     235        return;
     236    if (!parentRenderer->isChildAllowed(newRenderer, m_style.get())) {
     237        newRenderer->destroy();
     238        return;
     239    }
     240    m_node->setRenderer(newRenderer);
     241    newRenderer->setAnimatableStyle(m_style.release()); // setAnimatableStyle() can depend on renderer() already being set.
    272242
    273243#if ENABLE(FULLSCREEN_API)
    274     Document* document = node->document();
    275     if (document->webkitIsFullScreen() && document->webkitCurrentFullScreenElement() == node)
     244    if (document->webkitIsFullScreen() && document->webkitCurrentFullScreenElement() == m_node) {
    276245        newRenderer = RenderFullScreen::wrapRenderer(newRenderer, parentRenderer, document);
    277 #endif
    278 
    279     if (!newRenderer)
    280         return;
    281 
     246        if (!newRenderer)
     247            return;
     248    }
     249#endif
    282250    // Note: Adding newRenderer instead of renderer(). renderer() may be a child of newRenderer.
    283251    parentRenderer->addChild(newRenderer, nextRenderer);
  • trunk/Source/WebCore/dom/NodeRenderingContext.h

    r122447 r135419  
    4949    ~NodeRenderingContext();
    5050
     51    void createRendererIfNeeded();
     52
    5153    Node* node() const;
    5254    ContainerNode* parentNodeForRenderingAndStyle() const;
     
    5759    InsertionPoint* insertionPoint() const;
    5860
    59     RenderStyle* style() const;
    60     void setStyle(PassRefPtr<RenderStyle>);
    61     PassRefPtr<RenderStyle> releaseStyle();
    62 
    63     bool shouldCreateRenderer() const;
     61    const RenderStyle* style() const;
    6462
    6563    bool isOnUpperEncapsulationBoundary() const;
    6664    bool isOnEncapsulationBoundary() const;
    67     bool hasFlowThreadParent() const { return m_parentFlowRenderer; }
    68     RenderNamedFlowThread* parentFlowRenderer() const { return m_parentFlowRenderer; }
     65
     66private:
     67    bool shouldCreateRenderer() const;
    6968    void moveToFlowThreadIfNeeded();
    7069
    71 private:
    7270    Node* m_node;
    7371    ComposedShadowTreeWalker::ParentTraversalDetails m_parentDetails;
     
    9290}
    9391
    94 inline RenderStyle* NodeRenderingContext::style() const
     92inline const RenderStyle* NodeRenderingContext::style() const
    9593{
    9694    return m_style.get();
     
    102100}
    103101
    104 class NodeRendererFactory {
    105     WTF_MAKE_NONCOPYABLE(NodeRendererFactory);
    106     WTF_MAKE_FAST_ALLOCATED;
    107 public:
    108     explicit NodeRendererFactory(Node*);
    109 
    110     const NodeRenderingContext& context() const;
    111     void createRendererIfNeeded();
    112 
    113 private:
    114     RenderObject* createRenderer();
    115 
    116     NodeRenderingContext m_context;
    117 };
    118 
    119 inline const NodeRenderingContext& NodeRendererFactory::context() const
    120 {
    121     return m_context;
    122 }
    123 
    124102} // namespace WebCore
    125103
Note: See TracChangeset for help on using the changeset viewer.