OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
4 * (C) 2001 Dirk Mueller (mueller@kde.org) | 4 * (C) 2001 Dirk Mueller (mueller@kde.org) |
5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r
ights reserved. | 5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r
ights reserved. |
6 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) | 6 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) |
7 * Copyright (C) 2011 Google Inc. All rights reserved. | 7 * Copyright (C) 2011 Google Inc. All rights reserved. |
8 * | 8 * |
9 * This library is free software; you can redistribute it and/or | 9 * This library is free software; you can redistribute it and/or |
10 * modify it under the terms of the GNU Library General Public | 10 * modify it under the terms of the GNU Library General Public |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
72 if (element && element->shouldBeReparentedUnderRenderView(m_style.get())) { | 72 if (element && element->shouldBeReparentedUnderRenderView(m_style.get())) { |
73 // FIXME: Reparented renderers not in the top layer should probably be | 73 // FIXME: Reparented renderers not in the top layer should probably be |
74 // ordered in DOM tree order. We don't have a good way to do that yet, | 74 // ordered in DOM tree order. We don't have a good way to do that yet, |
75 // since NodeRenderingTraversal isn't aware of reparenting. It's safe to | 75 // since NodeRenderingTraversal isn't aware of reparenting. It's safe to |
76 // just append for now; it doesn't disrupt the top layer rendering as | 76 // just append for now; it doesn't disrupt the top layer rendering as |
77 // the layer collection in RenderLayer only requires that top layer | 77 // the layer collection in RenderLayer only requires that top layer |
78 // renderers are orderered correctly relative to each other. | 78 // renderers are orderered correctly relative to each other. |
79 if (!element->isInTopLayer()) | 79 if (!element->isInTopLayer()) |
80 return 0; | 80 return 0; |
81 | 81 |
82 const Vector<RefPtr<Element> >& topLayerElements = element->document()->
topLayerElements(); | 82 const Vector<RefPtr<Element> >& topLayerElements = element->document().t
opLayerElements(); |
83 size_t position = topLayerElements.find(element); | 83 size_t position = topLayerElements.find(element); |
84 ASSERT(position != notFound); | 84 ASSERT(position != notFound); |
85 for (size_t i = position + 1; i < topLayerElements.size(); ++i) { | 85 for (size_t i = position + 1; i < topLayerElements.size(); ++i) { |
86 if (RenderObject* renderer = topLayerElements[i]->renderer()) | 86 if (RenderObject* renderer = topLayerElements[i]->renderer()) |
87 return renderer; | 87 return renderer; |
88 } | 88 } |
89 return 0; | 89 return 0; |
90 } | 90 } |
91 | 91 |
92 if (m_parentFlowRenderer) | 92 if (m_parentFlowRenderer) |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
137 | 137 |
138 if (m_node->isElementNode() && toElement(m_node)->shouldBeReparentedUnderRen
derView(m_style.get())) { | 138 if (m_node->isElementNode() && toElement(m_node)->shouldBeReparentedUnderRen
derView(m_style.get())) { |
139 // The parent renderer of reparented elements is the RenderView, but onl
y | 139 // The parent renderer of reparented elements is the RenderView, but onl
y |
140 // if the normal parent would have had a renderer. | 140 // if the normal parent would have had a renderer. |
141 // FIXME: This behavior isn't quite right as the spec for top layer | 141 // FIXME: This behavior isn't quite right as the spec for top layer |
142 // only talks about display: none ancestors so putting a <dialog> inside | 142 // only talks about display: none ancestors so putting a <dialog> inside |
143 // an <optgroup> seems like it should still work even though this check | 143 // an <optgroup> seems like it should still work even though this check |
144 // will prevent it. | 144 // will prevent it. |
145 if (!m_renderingParent || !m_renderingParent->renderer()) | 145 if (!m_renderingParent || !m_renderingParent->renderer()) |
146 return 0; | 146 return 0; |
147 return m_node->document()->renderView(); | 147 return m_node->document().renderView(); |
148 } | 148 } |
149 | 149 |
150 if (m_parentFlowRenderer) | 150 if (m_parentFlowRenderer) |
151 return m_parentFlowRenderer; | 151 return m_parentFlowRenderer; |
152 | 152 |
153 return m_renderingParent ? m_renderingParent->renderer() : 0; | 153 return m_renderingParent ? m_renderingParent->renderer() : 0; |
154 } | 154 } |
155 | 155 |
156 bool NodeRenderingContext::shouldCreateRenderer() const | 156 bool NodeRenderingContext::shouldCreateRenderer() const |
157 { | 157 { |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
192 void NodeRenderingContext::moveToFlowThreadIfNeeded() | 192 void NodeRenderingContext::moveToFlowThreadIfNeeded() |
193 { | 193 { |
194 if (!RuntimeEnabledFeatures::cssRegionsEnabled()) | 194 if (!RuntimeEnabledFeatures::cssRegionsEnabled()) |
195 return; | 195 return; |
196 | 196 |
197 Element* element = toElement(m_node); | 197 Element* element = toElement(m_node); |
198 | 198 |
199 if (!element->shouldMoveToFlowThread(m_style.get())) | 199 if (!element->shouldMoveToFlowThread(m_style.get())) |
200 return; | 200 return; |
201 | 201 |
202 ASSERT(m_node->document()->renderView()); | 202 ASSERT(m_node->document().renderView()); |
203 FlowThreadController* flowThreadController = m_node->document()->renderView(
)->flowThreadController(); | 203 FlowThreadController* flowThreadController = m_node->document().renderView()
->flowThreadController(); |
204 m_parentFlowRenderer = flowThreadController->ensureRenderFlowThreadWithName(
m_style->flowThread()); | 204 m_parentFlowRenderer = flowThreadController->ensureRenderFlowThreadWithName(
m_style->flowThread()); |
205 flowThreadController->registerNamedFlowContentNode(m_node, m_parentFlowRende
rer); | 205 flowThreadController->registerNamedFlowContentNode(m_node, m_parentFlowRende
rer); |
206 } | 206 } |
207 | 207 |
208 void NodeRenderingContext::createRendererForElementIfNeeded() | 208 void NodeRenderingContext::createRendererForElementIfNeeded() |
209 { | 209 { |
210 ASSERT(!m_node->renderer()); | 210 ASSERT(!m_node->renderer()); |
211 | 211 |
212 Element* element = toElement(m_node); | 212 Element* element = toElement(m_node); |
213 | 213 |
(...skipping 26 matching lines...) Expand all Loading... |
240 | 240 |
241 // Make sure the RenderObject already knows it is going to be added to a Ren
derFlowThread before we set the style | 241 // Make sure the RenderObject already knows it is going to be added to a Ren
derFlowThread before we set the style |
242 // for the first time. Otherwise code using inRenderFlowThread() in the styl
eWillChange and styleDidChange will fail. | 242 // for the first time. Otherwise code using inRenderFlowThread() in the styl
eWillChange and styleDidChange will fail. |
243 newRenderer->setFlowThreadState(parentRenderer->flowThreadState()); | 243 newRenderer->setFlowThreadState(parentRenderer->flowThreadState()); |
244 | 244 |
245 RenderObject* nextRenderer = this->nextRenderer(); | 245 RenderObject* nextRenderer = this->nextRenderer(); |
246 element->setRenderer(newRenderer); | 246 element->setRenderer(newRenderer); |
247 newRenderer->setAnimatableStyle(m_style.release()); // setAnimatableStyle()
can depend on renderer() already being set. | 247 newRenderer->setAnimatableStyle(m_style.release()); // setAnimatableStyle()
can depend on renderer() already being set. |
248 | 248 |
249 if (FullscreenElementStack::isActiveFullScreenElement(element)) { | 249 if (FullscreenElementStack::isActiveFullScreenElement(element)) { |
250 newRenderer = RenderFullScreen::wrapRenderer(newRenderer, parentRenderer
, element->document()); | 250 newRenderer = RenderFullScreen::wrapRenderer(newRenderer, parentRenderer
, &element->document()); |
251 if (!newRenderer) | 251 if (!newRenderer) |
252 return; | 252 return; |
253 } | 253 } |
254 | 254 |
255 // Note: Adding newRenderer instead of renderer(). renderer() may be a child
of newRenderer. | 255 // Note: Adding newRenderer instead of renderer(). renderer() may be a child
of newRenderer. |
256 parentRenderer->addChild(newRenderer, nextRenderer); | 256 parentRenderer->addChild(newRenderer, nextRenderer); |
257 } | 257 } |
258 | 258 |
259 void NodeRenderingContext::createRendererForTextIfNeeded() | 259 void NodeRenderingContext::createRendererForTextIfNeeded() |
260 { | 260 { |
261 ASSERT(!m_node->renderer()); | 261 ASSERT(!m_node->renderer()); |
262 | 262 |
263 Text* textNode = toText(m_node); | 263 Text* textNode = toText(m_node); |
264 | 264 |
265 if (!shouldCreateRenderer()) | 265 if (!shouldCreateRenderer()) |
266 return; | 266 return; |
267 | 267 |
268 RenderObject* parentRenderer = this->parentRenderer(); | 268 RenderObject* parentRenderer = this->parentRenderer(); |
269 | 269 |
270 if (m_parentDetails.resetStyleInheritance()) | 270 if (m_parentDetails.resetStyleInheritance()) |
271 m_style = textNode->document()->styleResolver()->defaultStyleForElement(
); | 271 m_style = textNode->document().styleResolver()->defaultStyleForElement()
; |
272 else | 272 else |
273 m_style = parentRenderer->style(); | 273 m_style = parentRenderer->style(); |
274 | 274 |
275 if (!textNode->textRendererIsNeeded(*this)) | 275 if (!textNode->textRendererIsNeeded(*this)) |
276 return; | 276 return; |
277 | 277 |
278 RenderText* newRenderer = textNode->createTextRenderer(m_style.get()); | 278 RenderText* newRenderer = textNode->createTextRenderer(m_style.get()); |
279 if (!parentRenderer->isChildAllowed(newRenderer, m_style.get())) { | 279 if (!parentRenderer->isChildAllowed(newRenderer, m_style.get())) { |
280 newRenderer->destroy(); | 280 newRenderer->destroy(); |
281 return; | 281 return; |
282 } | 282 } |
283 | 283 |
284 // Make sure the RenderObject already knows it is going to be added to a Ren
derFlowThread before we set the style | 284 // Make sure the RenderObject already knows it is going to be added to a Ren
derFlowThread before we set the style |
285 // for the first time. Otherwise code using inRenderFlowThread() in the styl
eWillChange and styleDidChange will fail. | 285 // for the first time. Otherwise code using inRenderFlowThread() in the styl
eWillChange and styleDidChange will fail. |
286 newRenderer->setFlowThreadState(parentRenderer->flowThreadState()); | 286 newRenderer->setFlowThreadState(parentRenderer->flowThreadState()); |
287 | 287 |
288 RenderObject* nextRenderer = this->nextRenderer(); | 288 RenderObject* nextRenderer = this->nextRenderer(); |
289 textNode->setRenderer(newRenderer); | 289 textNode->setRenderer(newRenderer); |
290 // Parent takes care of the animations, no need to call setAnimatableStyle. | 290 // Parent takes care of the animations, no need to call setAnimatableStyle. |
291 newRenderer->setStyle(m_style.release()); | 291 newRenderer->setStyle(m_style.release()); |
292 parentRenderer->addChild(newRenderer, nextRenderer); | 292 parentRenderer->addChild(newRenderer, nextRenderer); |
293 } | 293 } |
294 | 294 |
295 } | 295 } |
OLD | NEW |