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

Side by Side Diff: Source/core/rendering/RenderTableSection.cpp

Issue 21430003: Implement interfaces in PaintInfo and make it a class. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@getterPaintInfo01
Patch Set: Fixed Linux compilation (hopefuly Windows too), addressing some reviewer's suggestions. Created 7 years, 4 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 /* 1 /*
2 * Copyright (C) 1997 Martin Jones (mjones@kde.org) 2 * Copyright (C) 1997 Martin Jones (mjones@kde.org)
3 * (C) 1997 Torben Weis (weis@kde.org) 3 * (C) 1997 Torben Weis (weis@kde.org)
4 * (C) 1998 Waldo Bastian (bastian@kde.org) 4 * (C) 1998 Waldo Bastian (bastian@kde.org)
5 * (C) 1999 Lars Knoll (knoll@kde.org) 5 * (C) 1999 Lars Knoll (knoll@kde.org)
6 * (C) 1999 Antti Koivisto (koivisto@kde.org) 6 * (C) 1999 Antti Koivisto (koivisto@kde.org)
7 * Copyright (C) 2003, 2004, 2005, 2006, 2008, 2009, 2010 Apple Inc. All rights reserved. 7 * Copyright (C) 2003, 2004, 2005, 2006, 2008, 2009, 2010 Apple Inc. All rights reserved.
8 * Copyright (C) 2006 Alexey Proskuryakov (ap@nypop.com) 8 * Copyright (C) 2006 Alexey Proskuryakov (ap@nypop.com)
9 * 9 *
10 * This library is free software; you can redistribute it and/or 10 * This library is free software; you can redistribute it and/or
(...skipping 1144 matching lines...) Expand 10 before | Expand all | Expand 10 after
1155 return; 1155 return;
1156 1156
1157 unsigned totalRows = m_grid.size(); 1157 unsigned totalRows = m_grid.size();
1158 unsigned totalCols = table()->columns().size(); 1158 unsigned totalCols = table()->columns().size();
1159 1159
1160 if (!totalRows || !totalCols) 1160 if (!totalRows || !totalCols)
1161 return; 1161 return;
1162 1162
1163 LayoutPoint adjustedPaintOffset = paintOffset + location(); 1163 LayoutPoint adjustedPaintOffset = paintOffset + location();
1164 1164
1165 PaintPhase phase = paintInfo.phase; 1165 PaintPhase phase = paintInfo.getPhase();
1166 bool pushedClip = pushContentsClip(paintInfo, adjustedPaintOffset); 1166 bool pushedClip = pushContentsClip(paintInfo, adjustedPaintOffset);
1167 paintObject(paintInfo, adjustedPaintOffset); 1167 paintObject(paintInfo, adjustedPaintOffset);
1168 if (pushedClip) 1168 if (pushedClip)
1169 popContentsClip(paintInfo, phase, adjustedPaintOffset); 1169 popContentsClip(paintInfo, phase, adjustedPaintOffset);
1170 1170
1171 if ((phase == PaintPhaseOutline || phase == PaintPhaseSelfOutline) && style( )->visibility() == VISIBLE) 1171 if ((phase == PaintPhaseOutline || phase == PaintPhaseSelfOutline) && style( )->visibility() == VISIBLE)
1172 paintOutline(paintInfo, LayoutRect(adjustedPaintOffset, size())); 1172 paintOutline(paintInfo, LayoutRect(adjustedPaintOffset, size()));
1173 } 1173 }
1174 1174
1175 static inline bool compareCellPositions(RenderTableCell* elem1, RenderTableCell* elem2) 1175 static inline bool compareCellPositions(RenderTableCell* elem1, RenderTableCell* elem2)
1176 { 1176 {
1177 return elem1->rowIndex() < elem2->rowIndex(); 1177 return elem1->rowIndex() < elem2->rowIndex();
1178 } 1178 }
1179 1179
1180 // This comparison is used only when we have overflowing cells as we have an uns orted array to sort. We thus need 1180 // This comparison is used only when we have overflowing cells as we have an uns orted array to sort. We thus need
1181 // to sort both on rows and columns to properly repaint. 1181 // to sort both on rows and columns to properly repaint.
1182 static inline bool compareCellPositionsWithOverflowingCells(RenderTableCell* ele m1, RenderTableCell* elem2) 1182 static inline bool compareCellPositionsWithOverflowingCells(RenderTableCell* ele m1, RenderTableCell* elem2)
1183 { 1183 {
1184 if (elem1->rowIndex() != elem2->rowIndex()) 1184 if (elem1->rowIndex() != elem2->rowIndex())
1185 return elem1->rowIndex() < elem2->rowIndex(); 1185 return elem1->rowIndex() < elem2->rowIndex();
1186 1186
1187 return elem1->col() < elem2->col(); 1187 return elem1->col() < elem2->col();
1188 } 1188 }
1189 1189
1190 void RenderTableSection::paintCell(RenderTableCell* cell, PaintInfo& paintInfo, const LayoutPoint& paintOffset) 1190 void RenderTableSection::paintCell(RenderTableCell* cell, PaintInfo& paintInfo, const LayoutPoint& paintOffset)
1191 { 1191 {
1192 LayoutPoint cellPoint = flipForWritingModeForChild(cell, paintOffset); 1192 LayoutPoint cellPoint = flipForWritingModeForChild(cell, paintOffset);
1193 PaintPhase paintPhase = paintInfo.phase; 1193 PaintPhase paintPhase = paintInfo.getPhase();
1194 RenderTableRow* row = toRenderTableRow(cell->parent()); 1194 RenderTableRow* row = toRenderTableRow(cell->parent());
1195 1195
1196 if (paintPhase == PaintPhaseBlockBackground || paintPhase == PaintPhaseChild BlockBackground) { 1196 if (paintPhase == PaintPhaseBlockBackground || paintPhase == PaintPhaseChild BlockBackground) {
1197 // We need to handle painting a stack of backgrounds. This stack (from bottom to top) consists of 1197 // We need to handle painting a stack of backgrounds. This stack (from bottom to top) consists of
1198 // the column group, column, row group, row, and then the cell. 1198 // the column group, column, row group, row, and then the cell.
1199 RenderTableCol* column = table()->colElement(cell->col()); 1199 RenderTableCol* column = table()->colElement(cell->col());
1200 RenderTableCol* columnGroup = column ? column->enclosingColumnGroup() : 0; 1200 RenderTableCol* columnGroup = column ? column->enclosingColumnGroup() : 0;
1201 1201
1202 // Column groups and columns first. 1202 // Column groups and columns first.
1203 // FIXME: Columns and column groups do not currently support opacity, an d they are being painted "too late" in 1203 // FIXME: Columns and column groups do not currently support opacity, an d they are being painted "too late" in
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
1319 if (endColumn == columnPos.size()) 1319 if (endColumn == columnPos.size())
1320 endColumn = columnPos.size() - 1; 1320 endColumn = columnPos.size() - 1;
1321 } 1321 }
1322 1322
1323 return CellSpan(startColumn, endColumn); 1323 return CellSpan(startColumn, endColumn);
1324 } 1324 }
1325 1325
1326 1326
1327 void RenderTableSection::paintObject(PaintInfo& paintInfo, const LayoutPoint& pa intOffset) 1327 void RenderTableSection::paintObject(PaintInfo& paintInfo, const LayoutPoint& pa intOffset)
1328 { 1328 {
1329 PaintPhase paintPhase = paintInfo.phase; 1329 PaintPhase paintPhase = paintInfo.getPhase();
1330 1330
1331 LayoutRect localRepaintRect = paintInfo.rect; 1331 LayoutRect localRepaintRect = paintInfo.getRect();
1332 localRepaintRect.moveBy(-paintOffset); 1332 localRepaintRect.moveBy(-paintOffset);
1333 localRepaintRect.inflate(maximalOutlineSize(paintPhase)); 1333 localRepaintRect.inflate(maximalOutlineSize(paintPhase));
1334 1334
1335 LayoutRect tableAlignedRect = logicalRectForWritingModeAndDirection(localRep aintRect); 1335 LayoutRect tableAlignedRect = logicalRectForWritingModeAndDirection(localRep aintRect);
1336 1336
1337 CellSpan dirtiedRows = this->dirtiedRows(tableAlignedRect); 1337 CellSpan dirtiedRows = this->dirtiedRows(tableAlignedRect);
1338 CellSpan dirtiedColumns = this->dirtiedColumns(tableAlignedRect); 1338 CellSpan dirtiedColumns = this->dirtiedColumns(tableAlignedRect);
1339 1339
1340 if (dirtiedColumns.start() < dirtiedColumns.end()) { 1340 if (dirtiedColumns.start() < dirtiedColumns.end()) {
1341 if (!m_hasMultipleCellLevels && !m_overflowingCells.size()) { 1341 if (!m_hasMultipleCellLevels && !m_overflowingCells.size()) {
1342 if (paintInfo.phase == PaintPhaseCollapsedTableBorders) { 1342 if (paintInfo.getPhase() == PaintPhaseCollapsedTableBorders) {
1343 // Collapsed borders are painted from the bottom right to the to p left so that precedence 1343 // Collapsed borders are painted from the bottom right to the to p left so that precedence
1344 // due to cell position is respected. 1344 // due to cell position is respected.
1345 for (unsigned r = dirtiedRows.end(); r > dirtiedRows.start(); r- -) { 1345 for (unsigned r = dirtiedRows.end(); r > dirtiedRows.start(); r- -) {
1346 unsigned row = r - 1; 1346 unsigned row = r - 1;
1347 for (unsigned c = dirtiedColumns.end(); c > dirtiedColumns.s tart(); c--) { 1347 for (unsigned c = dirtiedColumns.end(); c > dirtiedColumns.s tart(); c--) {
1348 unsigned col = c - 1; 1348 unsigned col = c - 1;
1349 CellStruct& current = cellAt(row, col); 1349 CellStruct& current = cellAt(row, col);
1350 RenderTableCell* cell = current.primaryCell(); 1350 RenderTableCell* cell = current.primaryCell();
1351 if (!cell || (row > dirtiedRows.start() && primaryCellAt (row - 1, col) == cell) || (col > dirtiedColumns.start() && primaryCellAt(row, c ol - 1) == cell)) 1351 if (!cell || (row > dirtiedRows.start() && primaryCellAt (row - 1, col) == cell) || (col > dirtiedColumns.start() && primaryCellAt(row, c ol - 1) == cell))
1352 continue; 1352 continue;
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
1404 } 1404 }
1405 } 1405 }
1406 } 1406 }
1407 1407
1408 // Sort the dirty cells by paint order. 1408 // Sort the dirty cells by paint order.
1409 if (!m_overflowingCells.size()) 1409 if (!m_overflowingCells.size())
1410 std::stable_sort(cells.begin(), cells.end(), compareCellPosition s); 1410 std::stable_sort(cells.begin(), cells.end(), compareCellPosition s);
1411 else 1411 else
1412 std::sort(cells.begin(), cells.end(), compareCellPositionsWithOv erflowingCells); 1412 std::sort(cells.begin(), cells.end(), compareCellPositionsWithOv erflowingCells);
1413 1413
1414 if (paintInfo.phase == PaintPhaseCollapsedTableBorders) { 1414 if (paintInfo.getPhase() == PaintPhaseCollapsedTableBorders) {
1415 for (unsigned i = cells.size(); i > 0; --i) { 1415 for (unsigned i = cells.size(); i > 0; --i) {
1416 LayoutPoint cellPoint = flipForWritingModeForChild(cells[i - 1], paintOffset); 1416 LayoutPoint cellPoint = flipForWritingModeForChild(cells[i - 1], paintOffset);
1417 cells[i - 1]->paintCollapsedBorders(paintInfo, cellPoint); 1417 cells[i - 1]->paintCollapsedBorders(paintInfo, cellPoint);
1418 } 1418 }
1419 } else { 1419 } else {
1420 for (unsigned i = 0; i < cells.size(); ++i) 1420 for (unsigned i = 0; i < cells.size(); ++i)
1421 paintCell(cells[i], paintInfo, paintOffset); 1421 paintCell(cells[i], paintInfo, paintOffset);
1422 } 1422 }
1423 } 1423 }
1424 } 1424 }
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after
1674 if (!style()->isLeftToRightDirection()) 1674 if (!style()->isLeftToRightDirection())
1675 cellLocation.setX(table()->columnPositions()[table()->numEffCols()] - ta ble()->columnPositions()[table()->colToEffCol(cell->col() + cell->colSpan())] + horizontalBorderSpacing); 1675 cellLocation.setX(table()->columnPositions()[table()->numEffCols()] - ta ble()->columnPositions()[table()->colToEffCol(cell->col() + cell->colSpan())] + horizontalBorderSpacing);
1676 else 1676 else
1677 cellLocation.setX(table()->columnPositions()[effectiveColumn] + horizont alBorderSpacing); 1677 cellLocation.setX(table()->columnPositions()[effectiveColumn] + horizont alBorderSpacing);
1678 1678
1679 cell->setLogicalLocation(cellLocation); 1679 cell->setLogicalLocation(cellLocation);
1680 view()->addLayoutDelta(oldCellLocation - cell->location()); 1680 view()->addLayoutDelta(oldCellLocation - cell->location());
1681 } 1681 }
1682 1682
1683 } // namespace WebCore 1683 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698