OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "core/paint/GridPainter.h" | 5 #include "core/paint/GridPainter.h" |
6 | 6 |
7 #include "core/layout/LayoutGrid.h" | 7 #include "core/layout/LayoutGrid.h" |
8 #include "core/paint/BlockPainter.h" | 8 #include "core/paint/BlockPainter.h" |
9 #include "core/paint/PaintInfo.h" | 9 #include "core/paint/PaintInfo.h" |
10 #include <algorithm> | 10 #include <algorithm> |
(...skipping 28 matching lines...) Expand all Loading... |
39 } | 39 } |
40 }; | 40 }; |
41 | 41 |
42 void GridPainter::paintChildren(const PaintInfo& paintInfo, const LayoutPoint& p
aintOffset) | 42 void GridPainter::paintChildren(const PaintInfo& paintInfo, const LayoutPoint& p
aintOffset) |
43 { | 43 { |
44 ASSERT(!m_layoutGrid.needsLayout()); | 44 ASSERT(!m_layoutGrid.needsLayout()); |
45 | 45 |
46 LayoutRect localPaintInvalidationRect = LayoutRect(paintInfo.cullRect().m_re
ct); | 46 LayoutRect localPaintInvalidationRect = LayoutRect(paintInfo.cullRect().m_re
ct); |
47 localPaintInvalidationRect.moveBy(-paintOffset); | 47 localPaintInvalidationRect.moveBy(-paintOffset); |
48 | 48 |
49 GridSpan dirtiedColumns = dirtiedGridAreas(m_layoutGrid.columnPositions(), l
ocalPaintInvalidationRect.x(), localPaintInvalidationRect.maxX()); | 49 Vector<LayoutUnit> columnPositions = m_layoutGrid.columnPositions(); |
| 50 if (!m_layoutGrid.styleRef().isLeftToRightDirection()) { |
| 51 // Translate columnPositions in RTL as we need the physical coordinates
of the columns in order to call dirtiedGridAreas(). |
| 52 for (size_t i = 0; i < columnPositions.size(); i++) |
| 53 columnPositions[i] = m_layoutGrid.translateRTLCoordinate(columnPosit
ions[i]); |
| 54 // We change the order of tracks in columnPositions, as in RTL the leftm
ost track will be the last one. |
| 55 std::sort(columnPositions.begin(), columnPositions.end()); |
| 56 } |
| 57 |
| 58 GridSpan dirtiedColumns = dirtiedGridAreas(columnPositions, localPaintInvali
dationRect.x(), localPaintInvalidationRect.maxX()); |
50 GridSpan dirtiedRows = dirtiedGridAreas(m_layoutGrid.rowPositions(), localPa
intInvalidationRect.y(), localPaintInvalidationRect.maxY()); | 59 GridSpan dirtiedRows = dirtiedGridAreas(m_layoutGrid.rowPositions(), localPa
intInvalidationRect.y(), localPaintInvalidationRect.maxY()); |
51 | 60 |
| 61 if (!m_layoutGrid.styleRef().isLeftToRightDirection()) { |
| 62 // As we changed the order of tracks previously, we need to swap the dir
tied columns in RTL. |
| 63 size_t lastLine = columnPositions.size() - 1; |
| 64 dirtiedColumns = GridSpan::translatedDefiniteGridSpan(lastLine - dirtied
Columns.endLine(), lastLine - dirtiedColumns.startLine()); |
| 65 } |
| 66 |
52 Vector<std::pair<LayoutBox*, size_t>> gridItemsToBePainted; | 67 Vector<std::pair<LayoutBox*, size_t>> gridItemsToBePainted; |
53 | 68 |
54 for (const auto& row : dirtiedRows) { | 69 for (const auto& row : dirtiedRows) { |
55 for (const auto& column : dirtiedColumns) { | 70 for (const auto& column : dirtiedColumns) { |
56 const Vector<LayoutBox*, 1>& children = m_layoutGrid.gridCell(row, c
olumn); | 71 const Vector<LayoutBox*, 1>& children = m_layoutGrid.gridCell(row, c
olumn); |
57 for (auto* child : children) | 72 for (auto* child : children) |
58 gridItemsToBePainted.append(std::make_pair(child, m_layoutGrid.p
aintIndexForGridItem(child))); | 73 gridItemsToBePainted.append(std::make_pair(child, m_layoutGrid.p
aintIndexForGridItem(child))); |
59 } | 74 } |
60 } | 75 } |
61 | 76 |
(...skipping 13 matching lines...) Expand all Loading... |
75 LayoutBox* current = gridItemAndPaintIndex.first; | 90 LayoutBox* current = gridItemAndPaintIndex.first; |
76 if (current == previous) | 91 if (current == previous) |
77 continue; | 92 continue; |
78 | 93 |
79 BlockPainter(m_layoutGrid).paintAllChildPhasesAtomically(*current, paint
Info, paintOffset); | 94 BlockPainter(m_layoutGrid).paintAllChildPhasesAtomically(*current, paint
Info, paintOffset); |
80 previous = current; | 95 previous = current; |
81 } | 96 } |
82 } | 97 } |
83 | 98 |
84 } // namespace blink | 99 } // namespace blink |
OLD | NEW |