| 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 |