Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(257)

Side by Side Diff: third_party/WebKit/Source/core/paint/GridPainter.cpp

Issue 2392443009: reflow comments in core/paint (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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>
11 11
12 namespace blink { 12 namespace blink {
13 13
14 static GridSpan dirtiedGridAreas(const Vector<LayoutUnit>& coordinates, 14 static GridSpan dirtiedGridAreas(const Vector<LayoutUnit>& coordinates,
15 LayoutUnit start, 15 LayoutUnit start,
16 LayoutUnit end) { 16 LayoutUnit end) {
17 // This function does a binary search over the coordinates. 17 // This function does a binary search over the coordinates.
18 // This doesn't work with grid items overflowing their grid areas, but that is managed with m_gridItemsOverflowingGridArea. 18 // This doesn't work with grid items overflowing their grid areas, but that is
19 // managed with m_gridItemsOverflowingGridArea.
19 20
20 size_t startGridAreaIndex = 21 size_t startGridAreaIndex =
21 std::upper_bound(coordinates.begin(), coordinates.end() - 1, start) - 22 std::upper_bound(coordinates.begin(), coordinates.end() - 1, start) -
22 coordinates.begin(); 23 coordinates.begin();
23 if (startGridAreaIndex > 0) 24 if (startGridAreaIndex > 0)
24 --startGridAreaIndex; 25 --startGridAreaIndex;
25 26
26 size_t endGridAreaIndex = 27 size_t endGridAreaIndex =
27 std::upper_bound(coordinates.begin() + startGridAreaIndex, 28 std::upper_bound(coordinates.begin() + startGridAreaIndex,
28 coordinates.end() - 1, end) - 29 coordinates.end() - 1, end) -
(...skipping 22 matching lines...) Expand all
51 void GridPainter::paintChildren(const PaintInfo& paintInfo, 52 void GridPainter::paintChildren(const PaintInfo& paintInfo,
52 const LayoutPoint& paintOffset) { 53 const LayoutPoint& paintOffset) {
53 ASSERT(!m_layoutGrid.needsLayout()); 54 ASSERT(!m_layoutGrid.needsLayout());
54 55
55 LayoutRect localPaintInvalidationRect = 56 LayoutRect localPaintInvalidationRect =
56 LayoutRect(paintInfo.cullRect().m_rect); 57 LayoutRect(paintInfo.cullRect().m_rect);
57 localPaintInvalidationRect.moveBy(-paintOffset); 58 localPaintInvalidationRect.moveBy(-paintOffset);
58 59
59 Vector<LayoutUnit> columnPositions = m_layoutGrid.columnPositions(); 60 Vector<LayoutUnit> columnPositions = m_layoutGrid.columnPositions();
60 if (!m_layoutGrid.styleRef().isLeftToRightDirection()) { 61 if (!m_layoutGrid.styleRef().isLeftToRightDirection()) {
61 // Translate columnPositions in RTL as we need the physical coordinates of t he columns in order to call dirtiedGridAreas(). 62 // Translate columnPositions in RTL as we need the physical coordinates of
63 // the columns in order to call dirtiedGridAreas().
62 for (size_t i = 0; i < columnPositions.size(); i++) 64 for (size_t i = 0; i < columnPositions.size(); i++)
63 columnPositions[i] = 65 columnPositions[i] =
64 m_layoutGrid.translateRTLCoordinate(columnPositions[i]); 66 m_layoutGrid.translateRTLCoordinate(columnPositions[i]);
65 // We change the order of tracks in columnPositions, as in RTL the leftmost track will be the last one. 67 // We change the order of tracks in columnPositions, as in RTL the leftmost
68 // track will be the last one.
66 std::sort(columnPositions.begin(), columnPositions.end()); 69 std::sort(columnPositions.begin(), columnPositions.end());
67 } 70 }
68 71
69 GridSpan dirtiedColumns = 72 GridSpan dirtiedColumns =
70 dirtiedGridAreas(columnPositions, localPaintInvalidationRect.x(), 73 dirtiedGridAreas(columnPositions, localPaintInvalidationRect.x(),
71 localPaintInvalidationRect.maxX()); 74 localPaintInvalidationRect.maxX());
72 GridSpan dirtiedRows = dirtiedGridAreas(m_layoutGrid.rowPositions(), 75 GridSpan dirtiedRows = dirtiedGridAreas(m_layoutGrid.rowPositions(),
73 localPaintInvalidationRect.y(), 76 localPaintInvalidationRect.y(),
74 localPaintInvalidationRect.maxY()); 77 localPaintInvalidationRect.maxY());
75 78
76 if (!m_layoutGrid.styleRef().isLeftToRightDirection()) { 79 if (!m_layoutGrid.styleRef().isLeftToRightDirection()) {
77 // As we changed the order of tracks previously, we need to swap the dirtied columns in RTL. 80 // As we changed the order of tracks previously, we need to swap the dirtied
81 // columns in RTL.
78 size_t lastLine = columnPositions.size() - 1; 82 size_t lastLine = columnPositions.size() - 1;
79 dirtiedColumns = GridSpan::translatedDefiniteGridSpan( 83 dirtiedColumns = GridSpan::translatedDefiniteGridSpan(
80 lastLine - dirtiedColumns.endLine(), 84 lastLine - dirtiedColumns.endLine(),
81 lastLine - dirtiedColumns.startLine()); 85 lastLine - dirtiedColumns.startLine());
82 } 86 }
83 87
84 Vector<std::pair<LayoutBox*, size_t>> gridItemsToBePainted; 88 Vector<std::pair<LayoutBox*, size_t>> gridItemsToBePainted;
85 89
86 for (const auto& row : dirtiedRows) { 90 for (const auto& row : dirtiedRows) {
87 for (const auto& column : dirtiedColumns) { 91 for (const auto& column : dirtiedColumns) {
(...skipping 11 matching lines...) Expand all
99 std::make_pair(item, m_layoutGrid.paintIndexForGridItem(item))); 103 std::make_pair(item, m_layoutGrid.paintIndexForGridItem(item)));
100 } 104 }
101 105
102 // Sort grid items following order-modified document order. 106 // Sort grid items following order-modified document order.
103 // See http://www.w3.org/TR/css-flexbox/#order-modified-document-order 107 // See http://www.w3.org/TR/css-flexbox/#order-modified-document-order
104 std::stable_sort(gridItemsToBePainted.begin(), gridItemsToBePainted.end(), 108 std::stable_sort(gridItemsToBePainted.begin(), gridItemsToBePainted.end(),
105 GridItemsSorter()); 109 GridItemsSorter());
106 110
107 LayoutBox* previous = 0; 111 LayoutBox* previous = 0;
108 for (const auto& gridItemAndPaintIndex : gridItemsToBePainted) { 112 for (const auto& gridItemAndPaintIndex : gridItemsToBePainted) {
109 // We might have duplicates because of spanning children are included in all cells they span. 113 // We might have duplicates because of spanning children are included in all
110 // Skip them here to avoid painting items several times. 114 // cells they span. Skip them here to avoid painting items several times.
111 LayoutBox* current = gridItemAndPaintIndex.first; 115 LayoutBox* current = gridItemAndPaintIndex.first;
112 if (current == previous) 116 if (current == previous)
113 continue; 117 continue;
114 118
115 BlockPainter(m_layoutGrid) 119 BlockPainter(m_layoutGrid)
116 .paintAllChildPhasesAtomically(*current, paintInfo, paintOffset); 120 .paintAllChildPhasesAtomically(*current, paintInfo, paintOffset);
117 previous = current; 121 previous = current;
118 } 122 }
119 } 123 }
120 124
121 } // namespace blink 125 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/paint/FrameSetPainter.cpp ('k') | third_party/WebKit/Source/core/paint/HTMLCanvasPainter.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698