| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
| 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv
ed. | 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv
ed. |
| 4 * | 4 * |
| 5 * This library is free software; you can redistribute it and/or | 5 * This library is free software; you can redistribute it and/or |
| 6 * modify it under the terms of the GNU Library General Public | 6 * modify it under the terms of the GNU Library General Public |
| 7 * License as published by the Free Software Foundation; either | 7 * License as published by the Free Software Foundation; either |
| 8 * version 2 of the License, or (at your option) any later version. | 8 * version 2 of the License, or (at your option) any later version. |
| 9 * | 9 * |
| 10 * This library is distributed in the hope that it will be useful, | 10 * This library is distributed in the hope that it will be useful, |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 129 | 129 |
| 130 #ifndef NDEBUG | 130 #ifndef NDEBUG |
| 131 void RenderView::checkLayoutState(const LayoutState& state) | 131 void RenderView::checkLayoutState(const LayoutState& state) |
| 132 { | 132 { |
| 133 ASSERT(layoutDeltaMatches(LayoutSize())); | 133 ASSERT(layoutDeltaMatches(LayoutSize())); |
| 134 ASSERT(!m_layoutStateDisableCount); | 134 ASSERT(!m_layoutStateDisableCount); |
| 135 ASSERT(m_layoutState == &state); | 135 ASSERT(m_layoutState == &state); |
| 136 } | 136 } |
| 137 #endif | 137 #endif |
| 138 | 138 |
| 139 static RenderBox* enclosingSeamlessRenderer(Document* doc) | 139 static RenderBox* enclosingSeamlessRenderer(const Document& doc) |
| 140 { | 140 { |
| 141 if (!doc) | 141 Element* ownerElement = doc.seamlessParentIFrame(); |
| 142 return 0; | |
| 143 Element* ownerElement = doc->seamlessParentIFrame(); | |
| 144 if (!ownerElement) | 142 if (!ownerElement) |
| 145 return 0; | 143 return 0; |
| 146 return ownerElement->renderBox(); | 144 return ownerElement->renderBox(); |
| 147 } | 145 } |
| 148 | 146 |
| 149 void RenderView::addChild(RenderObject* newChild, RenderObject* beforeChild) | 147 void RenderView::addChild(RenderObject* newChild, RenderObject* beforeChild) |
| 150 { | 148 { |
| 151 // Seamless iframes are considered part of an enclosing render flow thread f
rom the parent document. This is necessary for them to look | 149 // Seamless iframes are considered part of an enclosing render flow thread f
rom the parent document. This is necessary for them to look |
| 152 // up regions in the parent document during layout. | 150 // up regions in the parent document during layout. |
| 153 if (newChild && !newChild->isRenderFlowThread()) { | 151 if (newChild && !newChild->isRenderFlowThread()) { |
| 154 RenderBox* seamlessBox = enclosingSeamlessRenderer(&document()); | 152 RenderBox* seamlessBox = enclosingSeamlessRenderer(document()); |
| 155 if (seamlessBox && seamlessBox->flowThreadContainingBlock()) | 153 if (seamlessBox && seamlessBox->flowThreadContainingBlock()) |
| 156 newChild->setFlowThreadState(seamlessBox->flowThreadState()); | 154 newChild->setFlowThreadState(seamlessBox->flowThreadState()); |
| 157 } | 155 } |
| 158 RenderBlock::addChild(newChild, beforeChild); | 156 RenderBlock::addChild(newChild, beforeChild); |
| 159 } | 157 } |
| 160 | 158 |
| 161 bool RenderView::initializeLayoutState(LayoutState& state) | 159 bool RenderView::initializeLayoutState(LayoutState& state) |
| 162 { | 160 { |
| 163 bool isSeamlessAncestorInFlowThread = false; | 161 bool isSeamlessAncestorInFlowThread = false; |
| 164 | 162 |
| 165 // FIXME: May be better to push a clip and avoid issuing offscreen repaints. | 163 // FIXME: May be better to push a clip and avoid issuing offscreen repaints. |
| 166 state.m_clipped = false; | 164 state.m_clipped = false; |
| 167 | 165 |
| 168 // Check the writing mode of the seamless ancestor. It has to match our docu
ment's writing mode, or we won't inherit any | 166 // Check the writing mode of the seamless ancestor. It has to match our docu
ment's writing mode, or we won't inherit any |
| 169 // pagination information. | 167 // pagination information. |
| 170 RenderBox* seamlessAncestor = enclosingSeamlessRenderer(&document()); | 168 RenderBox* seamlessAncestor = enclosingSeamlessRenderer(document()); |
| 171 LayoutState* seamlessLayoutState = seamlessAncestor ? seamlessAncestor->view
()->layoutState() : 0; | 169 LayoutState* seamlessLayoutState = seamlessAncestor ? seamlessAncestor->view
()->layoutState() : 0; |
| 172 bool shouldInheritPagination = seamlessLayoutState && !m_pageLogicalHeight &
& seamlessAncestor->style()->writingMode() == style()->writingMode(); | 170 bool shouldInheritPagination = seamlessLayoutState && !m_pageLogicalHeight &
& seamlessAncestor->style()->writingMode() == style()->writingMode(); |
| 173 | 171 |
| 174 state.m_pageLogicalHeight = shouldInheritPagination ? seamlessLayoutState->m
_pageLogicalHeight : m_pageLogicalHeight; | 172 state.m_pageLogicalHeight = shouldInheritPagination ? seamlessLayoutState->m
_pageLogicalHeight : m_pageLogicalHeight; |
| 175 state.m_pageLogicalHeightChanged = shouldInheritPagination ? seamlessLayoutS
tate->m_pageLogicalHeightChanged : m_pageLogicalHeightChanged; | 173 state.m_pageLogicalHeightChanged = shouldInheritPagination ? seamlessLayoutS
tate->m_pageLogicalHeightChanged : m_pageLogicalHeightChanged; |
| 176 state.m_isPaginated = state.m_pageLogicalHeight; | 174 state.m_isPaginated = state.m_pageLogicalHeight; |
| 177 if (state.m_isPaginated && shouldInheritPagination) { | 175 if (state.m_isPaginated && shouldInheritPagination) { |
| 178 // Set up the correct pagination offset. We can use a negative offset in
order to push the top of the RenderView into its correct place | 176 // Set up the correct pagination offset. We can use a negative offset in
order to push the top of the RenderView into its correct place |
| 179 // on a page. We can take the iframe's offset from the logical top of th
e first page and make the negative into the pagination offset within the child | 177 // on a page. We can take the iframe's offset from the logical top of th
e first page and make the negative into the pagination offset within the child |
| 180 // view. | 178 // view. |
| (...skipping 970 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1151 #endif | 1149 #endif |
| 1152 | 1150 |
| 1153 if (layoutState) | 1151 if (layoutState) |
| 1154 layoutState->m_isPaginated = m_fragmenting; | 1152 layoutState->m_isPaginated = m_fragmenting; |
| 1155 | 1153 |
| 1156 if (m_flowThreadState != RenderObject::NotInsideFlowThread) | 1154 if (m_flowThreadState != RenderObject::NotInsideFlowThread) |
| 1157 m_root->setFlowThreadStateIncludingDescendants(m_flowThreadState); | 1155 m_root->setFlowThreadStateIncludingDescendants(m_flowThreadState); |
| 1158 } | 1156 } |
| 1159 | 1157 |
| 1160 } // namespace WebCore | 1158 } // namespace WebCore |
| OLD | NEW |