Changeset 135419 in webkit
- Timestamp:
- Nov 21, 2012, 10:53:09 AM (12 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r135418 r135419 1 2012-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 1 22 2012-11-21 W. James MacLean <wjmaclean@chromium.org> 2 23 -
trunk/Source/WebCore/dom/Node.cpp
r135242 r135419 1400 1400 void Node::createRendererIfNeeded() 1401 1401 { 1402 NodeRender erFactory(this).createRendererIfNeeded();1402 NodeRenderingContext(this).createRendererIfNeeded(); 1403 1403 } 1404 1404 -
trunk/Source/WebCore/dom/NodeRenderingContext.cpp
r135290 r135419 53 53 NodeRenderingContext::NodeRenderingContext(Node* node) 54 54 : m_node(node) 55 , m_style(0)56 55 , m_parentFlowRenderer(0) 57 56 { … … 68 67 NodeRenderingContext::~NodeRenderingContext() 69 68 { 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();81 69 } 82 70 … … 159 147 void NodeRenderingContext::moveToFlowThreadIfNeeded() 160 148 { 149 ASSERT(m_style); 161 150 if (!m_node->document()->cssRegionsEnabled()) 162 151 return; 163 152 164 if (!m_node->isElementNode() || !m_style ||m_style->flowThread().isEmpty())153 if (!m_node->isElementNode() || m_style->flowThread().isEmpty()) 165 154 return; 166 155 … … 191 180 { 192 181 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;215 182 } 216 183 … … 235 202 #endif 236 203 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()) 204 void 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()) 257 219 element->setStyleAffectedByEmpty(); 258 220 return; 259 221 } 260 261 RenderObject* parentRenderer = m_context.hasFlowThreadParent() ? m_context.parentFlowRenderer() : m_context.parentRenderer(); 222 RenderObject* parentRenderer = m_parentFlowRenderer ? m_parentFlowRenderer : this->parentRenderer(); 262 223 // Do not call m_context.nextRenderer() here in the first clause, because it expects to have 263 224 // 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(); 265 226 266 227 #if ENABLE(DIALOG_ELEMENT) … … 269 230 #endif 270 231 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. 272 242 273 243 #if ENABLE(FULLSCREEN_API) 274 Document* document = node->document(); 275 if (document->webkitIsFullScreen() && document->webkitCurrentFullScreenElement() == node) 244 if (document->webkitIsFullScreen() && document->webkitCurrentFullScreenElement() == m_node) { 276 245 newRenderer = RenderFullScreen::wrapRenderer(newRenderer, parentRenderer, document); 277 #endif 278 279 if (!newRenderer) 280 return; 281 246 if (!newRenderer) 247 return; 248 } 249 #endif 282 250 // Note: Adding newRenderer instead of renderer(). renderer() may be a child of newRenderer. 283 251 parentRenderer->addChild(newRenderer, nextRenderer); -
trunk/Source/WebCore/dom/NodeRenderingContext.h
r122447 r135419 49 49 ~NodeRenderingContext(); 50 50 51 void createRendererIfNeeded(); 52 51 53 Node* node() const; 52 54 ContainerNode* parentNodeForRenderingAndStyle() const; … … 57 59 InsertionPoint* insertionPoint() const; 58 60 59 RenderStyle* style() const; 60 void setStyle(PassRefPtr<RenderStyle>); 61 PassRefPtr<RenderStyle> releaseStyle(); 62 63 bool shouldCreateRenderer() const; 61 const RenderStyle* style() const; 64 62 65 63 bool isOnUpperEncapsulationBoundary() const; 66 64 bool isOnEncapsulationBoundary() const; 67 bool hasFlowThreadParent() const { return m_parentFlowRenderer; } 68 RenderNamedFlowThread* parentFlowRenderer() const { return m_parentFlowRenderer; } 65 66 private: 67 bool shouldCreateRenderer() const; 69 68 void moveToFlowThreadIfNeeded(); 70 69 71 private:72 70 Node* m_node; 73 71 ComposedShadowTreeWalker::ParentTraversalDetails m_parentDetails; … … 92 90 } 93 91 94 inline RenderStyle* NodeRenderingContext::style() const92 inline const RenderStyle* NodeRenderingContext::style() const 95 93 { 96 94 return m_style.get(); … … 102 100 } 103 101 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() const120 {121 return m_context;122 }123 124 102 } // namespace WebCore 125 103
Note:
See TracChangeset
for help on using the changeset viewer.