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

Side by Side Diff: third_party/WebKit/Source/core/layout/LayoutTable.cpp

Issue 2630723002: Fix blink_perf.paint regression about tables (Closed)
Patch Set: Issues fixed in patch set 4 Created 3 years, 11 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, 2007, 2008, 2009, 2010, 2013 Apple Inc. 7 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2013 Apple Inc.
8 * All rights reserved. 8 * All rights reserved.
9 * Copyright (C) 2006 Alexey Proskuryakov (ap@nypop.com) 9 * Copyright (C) 2006 Alexey Proskuryakov (ap@nypop.com)
10 * 10 *
(...skipping 1427 matching lines...) Expand 10 before | Expand all | Expand 10 after
1438 if (section) { 1438 if (section) {
1439 ASSERT(section->numRows()); 1439 ASSERT(section->numRows());
1440 rAbove = section->numRows() - 1; 1440 rAbove = section->numRows() - 1;
1441 } 1441 }
1442 } 1442 }
1443 1443
1444 // Look up the cell in the section's grid, which requires effective col index 1444 // Look up the cell in the section's grid, which requires effective col index
1445 if (section) { 1445 if (section) {
1446 unsigned effCol = 1446 unsigned effCol =
1447 absoluteColumnToEffectiveColumn(cell->absoluteColumnIndex()); 1447 absoluteColumnToEffectiveColumn(cell->absoluteColumnIndex());
1448 return section->primaryCellAt(rAbove, effCol); 1448 return effCol < section->numCols(rAbove)
1449 ? section->primaryCellAt(rAbove, effCol)
1450 : nullptr;
1449 } 1451 }
1450 return nullptr; 1452 return nullptr;
1451 } 1453 }
1452 1454
1453 LayoutTableCell* LayoutTable::cellBelow(const LayoutTableCell* cell) const { 1455 LayoutTableCell* LayoutTable::cellBelow(const LayoutTableCell* cell) const {
1454 recalcSectionsIfNeeded(); 1456 recalcSectionsIfNeeded();
1455 1457
1456 // Find the section and row to look in 1458 // Find the section and row to look in
1457 unsigned r = cell->rowIndex() + cell->rowSpan() - 1; 1459 unsigned r = cell->rowIndex() + cell->rowSpan() - 1;
1458 LayoutTableSection* section = nullptr; 1460 LayoutTableSection* section = nullptr;
1459 unsigned rBelow = 0; 1461 unsigned rBelow = 0;
1460 if (r < cell->section()->numRows() - 1) { 1462 if (r < cell->section()->numRows() - 1) {
1461 // The cell is not in the last row, so use the next row in the section. 1463 // The cell is not in the last row, so use the next row in the section.
1462 section = cell->section(); 1464 section = cell->section();
1463 rBelow = r + 1; 1465 rBelow = r + 1;
1464 } else { 1466 } else {
1465 section = sectionBelow(cell->section(), SkipEmptySections); 1467 section = sectionBelow(cell->section(), SkipEmptySections);
1466 if (section) 1468 if (section)
1467 rBelow = 0; 1469 rBelow = 0;
1468 } 1470 }
1469 1471
1470 // Look up the cell in the section's grid, which requires effective col index 1472 // Look up the cell in the section's grid, which requires effective col index
1471 if (section) { 1473 if (section) {
1472 unsigned effCol = 1474 unsigned effCol =
1473 absoluteColumnToEffectiveColumn(cell->absoluteColumnIndex()); 1475 absoluteColumnToEffectiveColumn(cell->absoluteColumnIndex());
1474 return section->primaryCellAt(rBelow, effCol); 1476 return effCol < section->numCols(rBelow)
1477 ? section->primaryCellAt(rBelow, effCol)
1478 : nullptr;
1475 } 1479 }
1476 return nullptr; 1480 return nullptr;
1477 } 1481 }
1478 1482
1479 LayoutTableCell* LayoutTable::cellBefore(const LayoutTableCell* cell) const { 1483 LayoutTableCell* LayoutTable::cellBefore(const LayoutTableCell* cell) const {
1480 recalcSectionsIfNeeded(); 1484 recalcSectionsIfNeeded();
1481 1485
1482 LayoutTableSection* section = cell->section(); 1486 LayoutTableSection* section = cell->section();
1483 unsigned effCol = 1487 unsigned effCol =
1484 absoluteColumnToEffectiveColumn(cell->absoluteColumnIndex()); 1488 absoluteColumnToEffectiveColumn(cell->absoluteColumnIndex());
1485 if (!effCol) 1489 if (!effCol)
1486 return nullptr; 1490 return nullptr;
1487 1491
1488 // If we hit a colspan back up to a real cell. 1492 // If we hit a colspan back up to a real cell.
1489 LayoutTableSection::CellStruct& prevCell = 1493 return section->primaryCellAt(cell->rowIndex(), effCol - 1);
mstensho (USE GERRIT) 2017/01/20 10:02:04 This is just clean-up, right?
a.suchit 2017/01/23 06:35:32 yes
1490 section->cellAt(cell->rowIndex(), effCol - 1);
1491 return prevCell.primaryCell();
1492 } 1494 }
1493 1495
1494 LayoutTableCell* LayoutTable::cellAfter(const LayoutTableCell* cell) const { 1496 LayoutTableCell* LayoutTable::cellAfter(const LayoutTableCell* cell) const {
1495 recalcSectionsIfNeeded(); 1497 recalcSectionsIfNeeded();
1496 1498
1497 unsigned effCol = absoluteColumnToEffectiveColumn( 1499 unsigned effCol = absoluteColumnToEffectiveColumn(
1498 cell->absoluteColumnIndex() + cell->colSpan()); 1500 cell->absoluteColumnIndex() + cell->colSpan());
1499 return cell->section()->primaryCellAt(cell->rowIndex(), effCol); 1501 unsigned row = cell->rowIndex();
1502 LayoutTableSection* section = cell->section();
1503 return effCol < section->numCols(row) ? section->primaryCellAt(row, effCol)
1504 : nullptr;
1500 } 1505 }
1501 1506
1502 int LayoutTable::baselinePosition(FontBaseline baselineType, 1507 int LayoutTable::baselinePosition(FontBaseline baselineType,
1503 bool firstLine, 1508 bool firstLine,
1504 LineDirectionMode direction, 1509 LineDirectionMode direction,
1505 LinePositionMode linePositionMode) const { 1510 LinePositionMode linePositionMode) const {
1506 ASSERT(linePositionMode == PositionOnContainingLine); 1511 ASSERT(linePositionMode == PositionOnContainingLine);
1507 int baseline = firstLineBoxBaseline(); 1512 int baseline = firstLineBoxBaseline();
1508 if (baseline != -1) { 1513 if (baseline != -1) {
1509 if (isInline()) 1514 if (isInline())
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
1688 } 1693 }
1689 1694
1690 LayoutUnit LayoutTable::paddingRight() const { 1695 LayoutUnit LayoutTable::paddingRight() const {
1691 if (collapseBorders()) 1696 if (collapseBorders())
1692 return LayoutUnit(); 1697 return LayoutUnit();
1693 1698
1694 return LayoutBlock::paddingRight(); 1699 return LayoutBlock::paddingRight();
1695 } 1700 }
1696 1701
1697 } // namespace blink 1702 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698