| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2007 Apple Inc. All rights reserved. | 2 * Copyright (C) 2007 Apple Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 */ | 24 */ |
| 25 | 25 |
| 26 #include "core/layout/LayoutState.h" | 26 #include "core/layout/LayoutState.h" |
| 27 | 27 |
| 28 #include "core/layout/LayoutFlowThread.h" | 28 #include "core/layout/LayoutFlowThread.h" |
| 29 #include "core/layout/LayoutInline.h" | 29 #include "core/layout/LayoutInline.h" |
| 30 #include "core/layout/LayoutView.h" | 30 #include "core/layout/LayoutView.h" |
| 31 | 31 |
| 32 namespace blink { | 32 namespace blink { |
| 33 | 33 |
| 34 LayoutState::LayoutState(LayoutUnit pageLogicalHeight, | 34 LayoutState::LayoutState(LayoutView& view) |
| 35 LayoutView& view) | 35 : m_isPaginated(view.pageLogicalHeight()), |
| 36 : m_isPaginated(pageLogicalHeight), | |
| 37 m_containingBlockLogicalWidthChanged(false), | 36 m_containingBlockLogicalWidthChanged(false), |
| 38 m_paginationStateChanged(false), | 37 m_paginationStateChanged(false), |
| 39 m_flowThread(nullptr), | 38 m_flowThread(nullptr), |
| 40 m_next(nullptr), | 39 m_next(nullptr), |
| 41 m_pageLogicalHeight(pageLogicalHeight), | |
| 42 m_layoutObject(view) { | 40 m_layoutObject(view) { |
| 43 ASSERT(!view.layoutState()); | 41 ASSERT(!view.layoutState()); |
| 44 view.pushLayoutState(*this); | 42 view.pushLayoutState(*this); |
| 45 } | 43 } |
| 46 | 44 |
| 47 LayoutState::LayoutState(LayoutBox& layoutObject, | 45 LayoutState::LayoutState(LayoutBox& layoutObject, |
| 48 LayoutUnit pageLogicalHeight, | |
| 49 bool containingBlockLogicalWidthChanged) | 46 bool containingBlockLogicalWidthChanged) |
| 50 : m_containingBlockLogicalWidthChanged(containingBlockLogicalWidthChanged), | 47 : m_containingBlockLogicalWidthChanged(containingBlockLogicalWidthChanged), |
| 51 m_next(layoutObject.view()->layoutState()), | 48 m_next(layoutObject.view()->layoutState()), |
| 52 m_layoutObject(layoutObject) { | 49 m_layoutObject(layoutObject) { |
| 53 if (layoutObject.isLayoutFlowThread()) | 50 if (layoutObject.isLayoutFlowThread()) |
| 54 m_flowThread = toLayoutFlowThread(&layoutObject); | 51 m_flowThread = toLayoutFlowThread(&layoutObject); |
| 55 else | 52 else |
| 56 m_flowThread = m_next->flowThread(); | 53 m_flowThread = m_next->flowThread(); |
| 57 m_paginationStateChanged = m_next->m_paginationStateChanged; | 54 m_paginationStateChanged = m_next->m_paginationStateChanged; |
| 58 layoutObject.view()->pushLayoutState(*this); | 55 layoutObject.view()->pushLayoutState(*this); |
| 59 m_heightOffsetForTableHeaders = m_next->heightOffsetForTableHeaders(); | 56 m_heightOffsetForTableHeaders = m_next->heightOffsetForTableHeaders(); |
| 60 | 57 |
| 61 if (pageLogicalHeight || layoutObject.isLayoutFlowThread()) { | 58 if (layoutObject.isLayoutFlowThread()) { |
| 62 // Entering a new pagination context. | 59 // Entering a new pagination context. |
| 63 m_pageLogicalHeight = pageLogicalHeight; | |
| 64 m_paginationOffset = LayoutSize(); | 60 m_paginationOffset = LayoutSize(); |
| 65 m_isPaginated = true; | 61 m_isPaginated = true; |
| 66 return; | 62 return; |
| 67 } | 63 } |
| 68 | 64 |
| 69 // Disable pagination for objects we don't support. For now this includes | 65 // Disable pagination for objects we don't support. For now this includes |
| 70 // overflow:scroll/auto, inline blocks and writing mode roots. Additionally, | 66 // overflow:scroll/auto, inline blocks and writing mode roots. Additionally, |
| 71 // pagination inside SVG is not allowed. | 67 // pagination inside SVG is not allowed. |
| 72 if (layoutObject.getPaginationBreakability() == LayoutBox::ForbidBreaks || | 68 if (layoutObject.getPaginationBreakability() == LayoutBox::ForbidBreaks || |
| 73 (m_layoutObject.isSVG() && !m_layoutObject.isSVGRoot())) { | 69 (m_layoutObject.isSVG() && !m_layoutObject.isSVGRoot())) { |
| 74 m_flowThread = nullptr; | 70 m_flowThread = nullptr; |
| 75 m_pageLogicalHeight = LayoutUnit(); | |
| 76 m_isPaginated = false; | 71 m_isPaginated = false; |
| 77 return; | 72 return; |
| 78 } | 73 } |
| 79 | 74 |
| 80 // Propagate the old page height and offset down. | 75 m_isPaginated = m_next->m_isPaginated; |
| 81 m_pageLogicalHeight = m_next->m_pageLogicalHeight; | |
| 82 | |
| 83 m_isPaginated = m_pageLogicalHeight || m_flowThread; | |
| 84 if (!m_isPaginated) | 76 if (!m_isPaginated) |
| 85 return; | 77 return; |
| 86 | 78 |
| 87 // Now adjust the pagination offset, so that we can easily figure out how far | 79 // Now adjust the pagination offset, so that we can easily figure out how far |
| 88 // away we are from the start of the pagination context. | 80 // away we are from the start of the pagination context. |
| 89 m_paginationOffset = m_next->m_paginationOffset; | 81 m_paginationOffset = m_next->m_paginationOffset; |
| 90 bool fixed = layoutObject.isOutOfFlowPositioned() && | 82 bool fixed = layoutObject.isOutOfFlowPositioned() && |
| 91 layoutObject.style()->position() == FixedPosition; | 83 layoutObject.style()->position() == FixedPosition; |
| 92 if (fixed) | 84 if (fixed) |
| 93 return; | 85 return; |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 132 | 124 |
| 133 LayoutUnit LayoutState::pageLogicalOffset( | 125 LayoutUnit LayoutState::pageLogicalOffset( |
| 134 const LayoutBox& child, | 126 const LayoutBox& child, |
| 135 const LayoutUnit& childLogicalOffset) const { | 127 const LayoutUnit& childLogicalOffset) const { |
| 136 if (child.isHorizontalWritingMode()) | 128 if (child.isHorizontalWritingMode()) |
| 137 return m_paginationOffset.height() + childLogicalOffset; | 129 return m_paginationOffset.height() + childLogicalOffset; |
| 138 return m_paginationOffset.width() + childLogicalOffset; | 130 return m_paginationOffset.width() + childLogicalOffset; |
| 139 } | 131 } |
| 140 | 132 |
| 141 } // namespace blink | 133 } // namespace blink |
| OLD | NEW |