OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "config.h" | 5 #include "config.h" |
6 | 6 |
7 #include "core/layout/MultiColumnFragmentainerGroup.h" | 7 #include "core/layout/MultiColumnFragmentainerGroup.h" |
8 | 8 |
9 #include "core/layout/LayoutMultiColumnSet.h" | 9 #include "core/layout/LayoutMultiColumnSet.h" |
10 | 10 |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
125 // to encompass that remaining height and overflow. The idea is that we will
generate | 125 // to encompass that remaining height and overflow. The idea is that we will
generate |
126 // additional columns and pages to hold that overflow, since people do write
bad | 126 // additional columns and pages to hold that overflow, since people do write
bad |
127 // content like <body style="height:0px"> in multi-column layouts. | 127 // content like <body style="height:0px"> in multi-column layouts. |
128 LayoutMultiColumnFlowThread* flowThread = m_columnSet.multiColumnFlowThread(
); | 128 LayoutMultiColumnFlowThread* flowThread = m_columnSet.multiColumnFlowThread(
); |
129 LayoutRect layoutRect = flowThread->layoutOverflowRect(); | 129 LayoutRect layoutRect = flowThread->layoutOverflowRect(); |
130 m_logicalBottomInFlowThread = flowThread->isHorizontalWritingMode() ? layout
Rect.maxY() : layoutRect.maxX(); | 130 m_logicalBottomInFlowThread = flowThread->isHorizontalWritingMode() ? layout
Rect.maxY() : layoutRect.maxX(); |
131 } | 131 } |
132 | 132 |
133 LayoutSize MultiColumnFragmentainerGroup::flowThreadTranslationAtOffset(LayoutUn
it offsetInFlowThread) const | 133 LayoutSize MultiColumnFragmentainerGroup::flowThreadTranslationAtOffset(LayoutUn
it offsetInFlowThread) const |
134 { | 134 { |
| 135 LayoutFlowThread* flowThread = m_columnSet.flowThread(); |
135 unsigned columnIndex = columnIndexAtOffset(offsetInFlowThread); | 136 unsigned columnIndex = columnIndexAtOffset(offsetInFlowThread); |
136 LayoutRect portionRect(flowThreadPortionRectAt(columnIndex)); | 137 LayoutRect portionRect(flowThreadPortionRectAt(columnIndex)); |
137 m_columnSet.flipForWritingMode(portionRect); | 138 flowThread->flipForWritingMode(portionRect); |
138 LayoutSize translation(translationAtColumn(columnIndex)); | 139 LayoutRect columnRect(columnRectAt(columnIndex)); |
139 // TODO(mstensho): need a rectangle (not a point) to flip for writing mode h
ere, once we get support for multiple rows. | 140 m_columnSet.flipForWritingMode(columnRect); |
140 return toLayoutPoint(translation) - portionRect.location(); | 141 LayoutSize translationRelativeToGroup = columnRect.location() - portionRect.
location(); |
| 142 return translationRelativeToGroup + offsetFromColumnSet() + m_columnSet.topL
eftLocationOffset() - flowThread->topLeftLocationOffset(); |
141 } | 143 } |
142 | 144 |
143 LayoutUnit MultiColumnFragmentainerGroup::columnLogicalTopForOffset(LayoutUnit o
ffsetInFlowThread) const | 145 LayoutUnit MultiColumnFragmentainerGroup::columnLogicalTopForOffset(LayoutUnit o
ffsetInFlowThread) const |
144 { | 146 { |
145 unsigned columnIndex = columnIndexAtOffset(offsetInFlowThread, AssumeNewColu
mns); | 147 unsigned columnIndex = columnIndexAtOffset(offsetInFlowThread, AssumeNewColu
mns); |
146 return logicalTopInFlowThreadAt(columnIndex); | 148 return logicalTopInFlowThreadAt(columnIndex); |
147 } | 149 } |
148 | 150 |
149 LayoutPoint MultiColumnFragmentainerGroup::visualPointToFlowThreadPoint(const La
youtPoint& visualPoint) const | 151 LayoutPoint MultiColumnFragmentainerGroup::visualPointToFlowThreadPoint(const La
youtPoint& visualPoint) const |
150 { | 152 { |
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
431 // amount of space shortage found during layout. | 433 // amount of space shortage found during layout. |
432 | 434 |
433 ASSERT(m_minSpaceShortage > 0); // We should never _shrink_ the height! | 435 ASSERT(m_minSpaceShortage > 0); // We should never _shrink_ the height! |
434 ASSERT(m_minSpaceShortage != LayoutFlowThread::maxLogicalHeight()); // If th
is happens, we probably have a bug. | 436 ASSERT(m_minSpaceShortage != LayoutFlowThread::maxLogicalHeight()); // If th
is happens, we probably have a bug. |
435 if (m_minSpaceShortage == LayoutFlowThread::maxLogicalHeight()) | 437 if (m_minSpaceShortage == LayoutFlowThread::maxLogicalHeight()) |
436 return m_columnHeight; // So bail out rather than looping infinitely. | 438 return m_columnHeight; // So bail out rather than looping infinitely. |
437 | 439 |
438 return m_columnHeight + m_minSpaceShortage; | 440 return m_columnHeight + m_minSpaceShortage; |
439 } | 441 } |
440 | 442 |
441 LayoutSize MultiColumnFragmentainerGroup::translationAtColumn(unsigned columnInd
ex) const | |
442 { | |
443 LayoutUnit logicalTopOffset; | |
444 LayoutUnit logicalLeftOffset; | |
445 LayoutUnit columnGap = m_columnSet.columnGap(); | |
446 if (m_columnSet.multiColumnFlowThread()->progressionIsInline()) { | |
447 logicalLeftOffset = columnIndex * (m_columnSet.pageLogicalWidth() + colu
mnGap); | |
448 if (!m_columnSet.style()->isLeftToRightDirection()) | |
449 logicalLeftOffset = -logicalLeftOffset; | |
450 } else { | |
451 logicalTopOffset = columnIndex * (m_columnHeight + columnGap); | |
452 } | |
453 | |
454 LayoutSize offset(logicalLeftOffset, logicalTopOffset); | |
455 return m_columnSet.isHorizontalWritingMode() ? offset : offset.transposedSiz
e(); | |
456 } | |
457 | |
458 LayoutRect MultiColumnFragmentainerGroup::columnRectAt(unsigned columnIndex) con
st | 443 LayoutRect MultiColumnFragmentainerGroup::columnRectAt(unsigned columnIndex) con
st |
459 { | 444 { |
460 LayoutUnit columnLogicalWidth = m_columnSet.pageLogicalWidth(); | 445 LayoutUnit columnLogicalWidth = m_columnSet.pageLogicalWidth(); |
461 LayoutUnit columnLogicalHeight = m_columnHeight; | 446 LayoutUnit columnLogicalHeight = m_columnHeight; |
462 LayoutUnit columnLogicalTop; | 447 LayoutUnit columnLogicalTop; |
463 LayoutUnit columnLogicalLeft; | 448 LayoutUnit columnLogicalLeft; |
464 LayoutUnit columnGap = m_columnSet.columnGap(); | 449 LayoutUnit columnGap = m_columnSet.columnGap(); |
465 | 450 |
466 if (m_columnSet.multiColumnFlowThread()->progressionIsInline()) { | 451 if (m_columnSet.multiColumnFlowThread()->progressionIsInline()) { |
467 if (m_columnSet.style()->isLeftToRightDirection()) | 452 if (m_columnSet.style()->isLeftToRightDirection()) |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
578 append(MultiColumnFragmentainerGroup(m_columnSet)); | 563 append(MultiColumnFragmentainerGroup(m_columnSet)); |
579 return last(); | 564 return last(); |
580 } | 565 } |
581 | 566 |
582 void MultiColumnFragmentainerGroupList::deleteExtraGroups() | 567 void MultiColumnFragmentainerGroupList::deleteExtraGroups() |
583 { | 568 { |
584 shrink(1); | 569 shrink(1); |
585 } | 570 } |
586 | 571 |
587 } // namespace blink | 572 } // namespace blink |
OLD | NEW |