|
Lines 75-80
RenderObject* NodeRenderingContext::nextRenderer() const
a/Source/WebCore/dom/NodeRenderingContext.cpp_sec1
|
| 75 |
if (RenderObject* renderer = m_node->renderer()) |
75 |
if (RenderObject* renderer = m_node->renderer()) |
| 76 |
return renderer->nextSibling(); |
76 |
return renderer->nextSibling(); |
| 77 |
|
77 |
|
|
|
78 |
#if ENABLE(DIALOG_ELEMENT) |
| 79 |
Element* element = m_node->isElementNode() ? toElement(m_node) : 0; |
| 80 |
if (element && element->isInTopLayer()) { |
| 81 |
const Vector<RefPtr<Element> >& topLayerElements = element->document()->topLayerElements(); |
| 82 |
size_t position = topLayerElements.find(element); |
| 83 |
ASSERT(position != notFound); |
| 84 |
for (size_t i = position + 1; i < topLayerElements.size(); ++i) { |
| 85 |
if (RenderObject* renderer = topLayerElements[i]->renderer()) |
| 86 |
return renderer; |
| 87 |
} |
| 88 |
return 0; |
| 89 |
} |
| 90 |
#endif |
| 91 |
|
| 78 |
if (m_parentFlowRenderer) |
92 |
if (m_parentFlowRenderer) |
| 79 |
return m_parentFlowRenderer->nextRendererForNode(m_node); |
93 |
return m_parentFlowRenderer->nextRendererForNode(m_node); |
| 80 |
|
94 |
|
|
Lines 101-106
RenderObject* NodeRenderingContext::previousRenderer() const
a/Source/WebCore/dom/NodeRenderingContext.cpp_sec2
|
| 101 |
if (RenderObject* renderer = m_node->renderer()) |
115 |
if (RenderObject* renderer = m_node->renderer()) |
| 102 |
return renderer->previousSibling(); |
116 |
return renderer->previousSibling(); |
| 103 |
|
117 |
|
|
|
118 |
#if ENABLE(DIALOG_ELEMENT) |
| 119 |
// FIXME: This doesn't work correctly for things in the top layer that are |
| 120 |
// display: none. We'd need to duplicate the logic in nextRenderer, but since |
| 121 |
// nothing needs that yet just assert. |
| 122 |
ASSERT(!m_node->isElementNode() || !toElement(m_node)->isInTopLayer()); |
| 123 |
#endif |
| 124 |
|
| 104 |
if (m_parentFlowRenderer) |
125 |
if (m_parentFlowRenderer) |
| 105 |
return m_parentFlowRenderer->previousRendererForNode(m_node); |
126 |
return m_parentFlowRenderer->previousRendererForNode(m_node); |
| 106 |
|
127 |
|
|
Lines 124-129
RenderObject* NodeRenderingContext::parentRenderer() const
a/Source/WebCore/dom/NodeRenderingContext.cpp_sec3
|
| 124 |
{ |
145 |
{ |
| 125 |
if (RenderObject* renderer = m_node->renderer()) |
146 |
if (RenderObject* renderer = m_node->renderer()) |
| 126 |
return renderer->parent(); |
147 |
return renderer->parent(); |
|
|
148 |
|
| 149 |
#if ENABLE(DIALOG_ELEMENT) |
| 150 |
if (m_node->isElementNode() && toElement(m_node)->isInTopLayer()) |
| 151 |
return m_node->document()->renderView(); |
| 152 |
#endif |
| 153 |
|
| 127 |
if (m_parentFlowRenderer) |
154 |
if (m_parentFlowRenderer) |
| 128 |
return m_parentFlowRenderer; |
155 |
return m_parentFlowRenderer; |
| 129 |
|
156 |
|
|
Lines 184-209
bool NodeRenderingContext::isOnUpperEncapsulationBoundary() const
a/Source/WebCore/dom/NodeRenderingContext.cpp_sec4
|
| 184 |
return m_node->parentNode() && m_node->parentNode()->isShadowRoot(); |
211 |
return m_node->parentNode() && m_node->parentNode()->isShadowRoot(); |
| 185 |
} |
212 |
} |
| 186 |
|
213 |
|
| 187 |
#if ENABLE(DIALOG_ELEMENT) |
|
|
| 188 |
static void adjustInsertionPointForTopLayerElement(Element* element, RenderObject*& parentRenderer, RenderObject*& nextRenderer) |
| 189 |
{ |
| 190 |
parentRenderer = parentRenderer->view(); |
| 191 |
nextRenderer = 0; |
| 192 |
const Vector<RefPtr<Element> >& topLayerElements = element->document()->topLayerElements(); |
| 193 |
size_t topLayerPosition = topLayerElements.find(element); |
| 194 |
ASSERT(topLayerPosition != notFound); |
| 195 |
// Find the next top layer renderer that's stacked above this element. Note that the immediate next element in the top layer |
| 196 |
// stack might not have a renderer (due to display: none, or possibly it is not attached yet). |
| 197 |
for (size_t i = topLayerPosition + 1; i < topLayerElements.size(); ++i) { |
| 198 |
nextRenderer = topLayerElements[i]->renderer(); |
| 199 |
if (nextRenderer) { |
| 200 |
ASSERT(nextRenderer->parent() == parentRenderer); |
| 201 |
break; |
| 202 |
} |
| 203 |
} |
| 204 |
} |
| 205 |
#endif |
| 206 |
|
| 207 |
void NodeRenderingContext::createRendererForElementIfNeeded() |
214 |
void NodeRenderingContext::createRendererForElementIfNeeded() |
| 208 |
{ |
215 |
{ |
| 209 |
ASSERT(!m_node->renderer()); |
216 |
ASSERT(!m_node->renderer()); |
|
Lines 225-235
void NodeRenderingContext::createRendererForElementIfNeeded()
a/Source/WebCore/dom/NodeRenderingContext.cpp_sec5
|
| 225 |
RenderObject* parentRenderer = this->parentRenderer(); |
232 |
RenderObject* parentRenderer = this->parentRenderer(); |
| 226 |
RenderObject* nextRenderer = this->nextRenderer(); |
233 |
RenderObject* nextRenderer = this->nextRenderer(); |
| 227 |
|
234 |
|
| 228 |
#if ENABLE(DIALOG_ELEMENT) |
|
|
| 229 |
if (element->isInTopLayer()) |
| 230 |
adjustInsertionPointForTopLayerElement(element, parentRenderer, nextRenderer); |
| 231 |
#endif |
| 232 |
|
| 233 |
Document* document = element->document(); |
235 |
Document* document = element->document(); |
| 234 |
RenderObject* newRenderer = element->createRenderer(document->renderArena(), m_style.get()); |
236 |
RenderObject* newRenderer = element->createRenderer(document->renderArena(), m_style.get()); |
| 235 |
if (!newRenderer) |
237 |
if (!newRenderer) |