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

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

Issue 2770123003: Replace ASSERT with DCHECK in core/layout/ excluding subdirs (Closed)
Patch Set: Split some DCHECKs and add DCHECK_ops wherever possible Created 3 years, 8 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 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 m_collapsedBordersValid(false), 60 m_collapsedBordersValid(false),
61 m_hasColElements(false), 61 m_hasColElements(false),
62 m_needsSectionRecalc(false), 62 m_needsSectionRecalc(false),
63 m_columnLogicalWidthChanged(false), 63 m_columnLogicalWidthChanged(false),
64 m_columnLayoutObjectsValid(false), 64 m_columnLayoutObjectsValid(false),
65 m_noCellColspanAtLeast(0), 65 m_noCellColspanAtLeast(0),
66 m_hSpacing(0), 66 m_hSpacing(0),
67 m_vSpacing(0), 67 m_vSpacing(0),
68 m_borderStart(0), 68 m_borderStart(0),
69 m_borderEnd(0) { 69 m_borderEnd(0) {
70 ASSERT(!childrenInline()); 70 DCHECK(!childrenInline());
71 m_effectiveColumnPositions.fill(0, 1); 71 m_effectiveColumnPositions.fill(0, 1);
72 } 72 }
73 73
74 LayoutTable::~LayoutTable() {} 74 LayoutTable::~LayoutTable() {}
75 75
76 void LayoutTable::styleDidChange(StyleDifference diff, 76 void LayoutTable::styleDidChange(StyleDifference diff,
77 const ComputedStyle* oldStyle) { 77 const ComputedStyle* oldStyle) {
78 LayoutBlock::styleDidChange(diff, oldStyle); 78 LayoutBlock::styleDidChange(diff, oldStyle);
79 79
80 bool oldFixedTableLayout = oldStyle ? oldStyle->isFixedTableLayout() : false; 80 bool oldFixedTableLayout = oldStyle ? oldStyle->isFixedTableLayout() : false;
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 needsTableSection(beforeChild)) 208 needsTableSection(beforeChild))
209 beforeChild = 0; 209 beforeChild = 0;
210 210
211 LayoutTableSection* section = 211 LayoutTableSection* section =
212 LayoutTableSection::createAnonymousWithParent(this); 212 LayoutTableSection::createAnonymousWithParent(this);
213 addChild(section, beforeChild); 213 addChild(section, beforeChild);
214 section->addChild(child); 214 section->addChild(child);
215 } 215 }
216 216
217 void LayoutTable::addCaption(const LayoutTableCaption* caption) { 217 void LayoutTable::addCaption(const LayoutTableCaption* caption) {
218 ASSERT(m_captions.find(caption) == kNotFound); 218 DCHECK_EQ(m_captions.find(caption), kNotFound);
219 m_captions.push_back(const_cast<LayoutTableCaption*>(caption)); 219 m_captions.push_back(const_cast<LayoutTableCaption*>(caption));
220 } 220 }
221 221
222 void LayoutTable::removeCaption(const LayoutTableCaption* oldCaption) { 222 void LayoutTable::removeCaption(const LayoutTableCaption* oldCaption) {
223 size_t index = m_captions.find(oldCaption); 223 size_t index = m_captions.find(oldCaption);
224 ASSERT(index != kNotFound); 224 DCHECK_NE(index, kNotFound);
225 if (index == kNotFound) 225 if (index == kNotFound)
226 return; 226 return;
227 227
228 m_captions.erase(index); 228 m_captions.erase(index);
229 } 229 }
230 230
231 void LayoutTable::invalidateCachedColumns() { 231 void LayoutTable::invalidateCachedColumns() {
232 m_columnLayoutObjectsValid = false; 232 m_columnLayoutObjectsValid = false;
233 m_columnLayoutObjects.resize(0); 233 m_columnLayoutObjects.resize(0);
234 } 234 }
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
347 marginValues.m_end, style()->marginStart(), 347 marginValues.m_end, style()->marginStart(),
348 style()->marginEnd()); 348 style()->marginEnd());
349 setMarginStart(marginValues.m_start); 349 setMarginStart(marginValues.m_start);
350 setMarginEnd(marginValues.m_end); 350 setMarginEnd(marginValues.m_end);
351 351
352 // We should NEVER shrink the table below the min-content logical width, or 352 // We should NEVER shrink the table below the min-content logical width, or
353 // else the table can't accommodate its own content which doesn't match CSS 353 // else the table can't accommodate its own content which doesn't match CSS
354 // nor what authors expect. 354 // nor what authors expect.
355 // FIXME: When we convert to sub-pixel layout for tables we can remove the int 355 // FIXME: When we convert to sub-pixel layout for tables we can remove the int
356 // conversion. http://crbug.com/241198 356 // conversion. http://crbug.com/241198
357 ASSERT(logicalWidth().floor() >= minPreferredLogicalWidth().floor()); 357 DCHECK_GE(logicalWidth().floor(), minPreferredLogicalWidth().floor());
358 } 358 }
359 359
360 // This method takes a ComputedStyle's logical width, min-width, or max-width 360 // This method takes a ComputedStyle's logical width, min-width, or max-width
361 // length and computes its actual value. 361 // length and computes its actual value.
362 LayoutUnit LayoutTable::convertStyleLogicalWidthToComputedWidth( 362 LayoutUnit LayoutTable::convertStyleLogicalWidthToComputedWidth(
363 const Length& styleLogicalWidth, 363 const Length& styleLogicalWidth,
364 LayoutUnit availableWidth) const { 364 LayoutUnit availableWidth) const {
365 if (styleLogicalWidth.isIntrinsic()) 365 if (styleLogicalWidth.isIntrinsic())
366 return computeIntrinsicLogicalWidthUsing( 366 return computeIntrinsicLogicalWidthUsing(
367 styleLogicalWidth, availableWidth, 367 styleLogicalWidth, availableWidth,
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
502 // FIXME: Distribute the extra logical height between all table sections 502 // FIXME: Distribute the extra logical height between all table sections
503 // instead of giving it all to the first one. 503 // instead of giving it all to the first one.
504 if (LayoutTableSection* section = firstBody()) 504 if (LayoutTableSection* section = firstBody())
505 extraLogicalHeight -= 505 extraLogicalHeight -=
506 section->distributeExtraLogicalHeightToRows(extraLogicalHeight); 506 section->distributeExtraLogicalHeightToRows(extraLogicalHeight);
507 507
508 // crbug.com/690087: We really would like to enable this ASSERT to ensure that 508 // crbug.com/690087: We really would like to enable this ASSERT to ensure that
509 // all the extra space has been distributed. 509 // all the extra space has been distributed.
510 // However our current distribution algorithm does not round properly and thus 510 // However our current distribution algorithm does not round properly and thus
511 // we can have some remaining height. 511 // we can have some remaining height.
512 // ASSERT(!topSection() || !extraLogicalHeight); 512 // DCHECK(!topSection() || !extraLogicalHeight);
513 } 513 }
514 514
515 void LayoutTable::simplifiedNormalFlowLayout() { 515 void LayoutTable::simplifiedNormalFlowLayout() {
516 // FIXME: We should walk through the items in the tree in tree order to do the 516 // FIXME: We should walk through the items in the tree in tree order to do the
517 // layout here instead of walking through individual parts of the tree. 517 // layout here instead of walking through individual parts of the tree.
518 // crbug.com/442737 518 // crbug.com/442737
519 for (auto& caption : m_captions) 519 for (auto& caption : m_captions)
520 caption->layoutIfNeeded(); 520 caption->layoutIfNeeded();
521 521
522 for (LayoutTableSection* section = topSection(); section; 522 for (LayoutTableSection* section = topSection(); section;
523 section = sectionBelow(section)) { 523 section = sectionBelow(section)) {
524 section->layoutIfNeeded(); 524 section->layoutIfNeeded();
525 section->layoutRows(); 525 section->layoutRows();
526 section->computeOverflowFromCells(); 526 section->computeOverflowFromCells();
527 section->updateLayerTransformAfterLayout(); 527 section->updateLayerTransformAfterLayout();
528 section->addVisualEffectOverflow(); 528 section->addVisualEffectOverflow();
529 } 529 }
530 } 530 }
531 531
532 bool LayoutTable::recalcChildOverflowAfterStyleChange() { 532 bool LayoutTable::recalcChildOverflowAfterStyleChange() {
533 ASSERT(childNeedsOverflowRecalcAfterStyleChange()); 533 DCHECK(childNeedsOverflowRecalcAfterStyleChange());
534 clearChildNeedsOverflowRecalcAfterStyleChange(); 534 clearChildNeedsOverflowRecalcAfterStyleChange();
535 535
536 // If the table sections we keep pointers to have gone away then the table 536 // If the table sections we keep pointers to have gone away then the table
537 // will be rebuilt and overflow will get recalculated anyway so return early. 537 // will be rebuilt and overflow will get recalculated anyway so return early.
538 if (needsSectionRecalc()) 538 if (needsSectionRecalc())
539 return false; 539 return false;
540 540
541 bool childrenOverflowChanged = false; 541 bool childrenOverflowChanged = false;
542 for (LayoutTableSection* section = topSection(); section; 542 for (LayoutTableSection* section = topSection(); section;
543 section = sectionBelow(section)) { 543 section = sectionBelow(section)) {
544 if (!section->childNeedsOverflowRecalcAfterStyleChange()) 544 if (!section->childNeedsOverflowRecalcAfterStyleChange())
545 continue; 545 continue;
546 childrenOverflowChanged = section->recalcChildOverflowAfterStyleChange() || 546 childrenOverflowChanged = section->recalcChildOverflowAfterStyleChange() ||
547 childrenOverflowChanged; 547 childrenOverflowChanged;
548 } 548 }
549 return recalcPositionedDescendantsOverflowAfterStyleChange() || 549 return recalcPositionedDescendantsOverflowAfterStyleChange() ||
550 childrenOverflowChanged; 550 childrenOverflowChanged;
551 } 551 }
552 552
553 void LayoutTable::layout() { 553 void LayoutTable::layout() {
554 ASSERT(needsLayout()); 554 DCHECK(needsLayout());
555 LayoutAnalyzer::Scope analyzer(*this); 555 LayoutAnalyzer::Scope analyzer(*this);
556 556
557 if (simplifiedLayout()) 557 if (simplifiedLayout())
558 return; 558 return;
559 559
560 // Note: LayoutTable is handled differently than other LayoutBlocks and the 560 // Note: LayoutTable is handled differently than other LayoutBlocks and the
561 // LayoutScope 561 // LayoutScope
562 // must be created before the table begins laying out. 562 // must be created before the table begins laying out.
563 TextAutosizer::LayoutScope textAutosizerLayoutScope(this); 563 TextAutosizer::LayoutScope textAutosizerLayoutScope(this);
564 564
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
782 m_collapsedBordersValid = true; 782 m_collapsedBordersValid = true;
783 m_collapsedBorders.clear(); 783 m_collapsedBorders.clear();
784 for (LayoutObject* section = firstChild(); section; 784 for (LayoutObject* section = firstChild(); section;
785 section = section->nextSibling()) { 785 section = section->nextSibling()) {
786 if (!section->isTableSection()) 786 if (!section->isTableSection())
787 continue; 787 continue;
788 for (LayoutTableRow* row = toLayoutTableSection(section)->firstRow(); row; 788 for (LayoutTableRow* row = toLayoutTableSection(section)->firstRow(); row;
789 row = row->nextRow()) { 789 row = row->nextRow()) {
790 for (LayoutTableCell* cell = row->firstCell(); cell; 790 for (LayoutTableCell* cell = row->firstCell(); cell;
791 cell = cell->nextCell()) { 791 cell = cell->nextCell()) {
792 ASSERT(cell->table() == this); 792 DCHECK_EQ(cell->table(), this);
793 cell->collectBorderValues(m_collapsedBorders); 793 cell->collectBorderValues(m_collapsedBorders);
794 } 794 }
795 } 795 }
796 } 796 }
797 LayoutTableCell::sortBorderValues(m_collapsedBorders); 797 LayoutTableCell::sortBorderValues(m_collapsedBorders);
798 } 798 }
799 799
800 void LayoutTable::addOverflowFromChildren() { 800 void LayoutTable::addOverflowFromChildren() {
801 // Add overflow from borders. 801 // Add overflow from borders.
802 // Technically it's odd that we are incorporating the borders into layout 802 // Technically it's odd that we are incorporating the borders into layout
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
889 // FIXME: Restructure the table layout code so that we can make this method 889 // FIXME: Restructure the table layout code so that we can make this method
890 // const. 890 // const.
891 const_cast<LayoutTable*>(this)->m_tableLayout->computeIntrinsicLogicalWidths( 891 const_cast<LayoutTable*>(this)->m_tableLayout->computeIntrinsicLogicalWidths(
892 minWidth, maxWidth); 892 minWidth, maxWidth);
893 893
894 // FIXME: We should include captions widths here like we do in 894 // FIXME: We should include captions widths here like we do in
895 // computePreferredLogicalWidths. 895 // computePreferredLogicalWidths.
896 } 896 }
897 897
898 void LayoutTable::computePreferredLogicalWidths() { 898 void LayoutTable::computePreferredLogicalWidths() {
899 ASSERT(preferredLogicalWidthsDirty()); 899 DCHECK(preferredLogicalWidthsDirty());
900 900
901 computeIntrinsicLogicalWidths(m_minPreferredLogicalWidth, 901 computeIntrinsicLogicalWidths(m_minPreferredLogicalWidth,
902 m_maxPreferredLogicalWidth); 902 m_maxPreferredLogicalWidth);
903 903
904 int bordersPaddingAndSpacing = 904 int bordersPaddingAndSpacing =
905 bordersPaddingAndSpacingInRowDirection().toInt(); 905 bordersPaddingAndSpacingInRowDirection().toInt();
906 m_minPreferredLogicalWidth += bordersPaddingAndSpacing; 906 m_minPreferredLogicalWidth += bordersPaddingAndSpacing;
907 m_maxPreferredLogicalWidth += bordersPaddingAndSpacing; 907 m_maxPreferredLogicalWidth += bordersPaddingAndSpacing;
908 908
909 m_tableLayout->applyPreferredLogicalWidthQuirks(m_minPreferredLogicalWidth, 909 m_tableLayout->applyPreferredLogicalWidthQuirks(m_minPreferredLogicalWidth,
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
946 946
947 LayoutTableSection* LayoutTable::topNonEmptySection() const { 947 LayoutTableSection* LayoutTable::topNonEmptySection() const {
948 LayoutTableSection* section = topSection(); 948 LayoutTableSection* section = topSection();
949 if (section && !section->numRows()) 949 if (section && !section->numRows())
950 section = sectionBelow(section, SkipEmptySections); 950 section = sectionBelow(section, SkipEmptySections);
951 return section; 951 return section;
952 } 952 }
953 953
954 void LayoutTable::splitEffectiveColumn(unsigned index, unsigned firstSpan) { 954 void LayoutTable::splitEffectiveColumn(unsigned index, unsigned firstSpan) {
955 // We split the column at |index|, taking |firstSpan| cells from the span. 955 // We split the column at |index|, taking |firstSpan| cells from the span.
956 ASSERT(m_effectiveColumns[index].span > firstSpan); 956 DCHECK_GT(m_effectiveColumns[index].span, firstSpan);
957 m_effectiveColumns.insert(index, firstSpan); 957 m_effectiveColumns.insert(index, firstSpan);
958 m_effectiveColumns[index + 1].span -= firstSpan; 958 m_effectiveColumns[index + 1].span -= firstSpan;
959 959
960 // Propagate the change in our columns representation to the sections that 960 // Propagate the change in our columns representation to the sections that
961 // don't need cell recalc. If they do, they will be synced up directly with 961 // don't need cell recalc. If they do, they will be synced up directly with
962 // m_columns later. 962 // m_columns later.
963 for (LayoutObject* child = firstChild(); child; 963 for (LayoutObject* child = firstChild(); child;
964 child = child->nextSibling()) { 964 child = child->nextSibling()) {
965 if (!child->isTableSection()) 965 if (!child->isTableSection())
966 continue; 966 continue;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1008 for (LayoutObject* child = firstChild(); child; 1008 for (LayoutObject* child = firstChild(); child;
1009 child = child->nextSibling()) { 1009 child = child->nextSibling()) {
1010 if (child->isLayoutTableCol()) 1010 if (child->isLayoutTableCol())
1011 return toLayoutTableCol(child); 1011 return toLayoutTableCol(child);
1012 } 1012 }
1013 1013
1014 return nullptr; 1014 return nullptr;
1015 } 1015 }
1016 1016
1017 void LayoutTable::updateColumnCache() const { 1017 void LayoutTable::updateColumnCache() const {
1018 ASSERT(m_hasColElements); 1018 DCHECK(m_hasColElements);
1019 ASSERT(m_columnLayoutObjects.isEmpty()); 1019 DCHECK(m_columnLayoutObjects.isEmpty());
1020 ASSERT(!m_columnLayoutObjectsValid); 1020 DCHECK(!m_columnLayoutObjectsValid);
1021 1021
1022 for (LayoutTableCol* columnLayoutObject = firstColumn(); columnLayoutObject; 1022 for (LayoutTableCol* columnLayoutObject = firstColumn(); columnLayoutObject;
1023 columnLayoutObject = columnLayoutObject->nextColumn()) { 1023 columnLayoutObject = columnLayoutObject->nextColumn()) {
1024 if (columnLayoutObject->isTableColumnGroupWithColumnChildren()) 1024 if (columnLayoutObject->isTableColumnGroupWithColumnChildren())
1025 continue; 1025 continue;
1026 m_columnLayoutObjects.push_back(columnLayoutObject); 1026 m_columnLayoutObjects.push_back(columnLayoutObject);
1027 } 1027 }
1028 m_columnLayoutObjectsValid = true; 1028 m_columnLayoutObjectsValid = true;
1029 } 1029 }
1030 1030
1031 LayoutTable::ColAndColGroup LayoutTable::slowColElementAtAbsoluteColumn( 1031 LayoutTable::ColAndColGroup LayoutTable::slowColElementAtAbsoluteColumn(
1032 unsigned absoluteColumnIndex) const { 1032 unsigned absoluteColumnIndex) const {
1033 ASSERT(m_hasColElements); 1033 DCHECK(m_hasColElements);
1034 1034
1035 if (!m_columnLayoutObjectsValid) 1035 if (!m_columnLayoutObjectsValid)
1036 updateColumnCache(); 1036 updateColumnCache();
1037 1037
1038 unsigned columnCount = 0; 1038 unsigned columnCount = 0;
1039 for (unsigned i = 0; i < m_columnLayoutObjects.size(); i++) { 1039 for (unsigned i = 0; i < m_columnLayoutObjects.size(); i++) {
1040 LayoutTableCol* columnLayoutObject = m_columnLayoutObjects[i]; 1040 LayoutTableCol* columnLayoutObject = m_columnLayoutObjects[i];
1041 ASSERT(!columnLayoutObject->isTableColumnGroupWithColumnChildren()); 1041 DCHECK(!columnLayoutObject->isTableColumnGroupWithColumnChildren());
1042 unsigned span = columnLayoutObject->span(); 1042 unsigned span = columnLayoutObject->span();
1043 unsigned startCol = columnCount; 1043 unsigned startCol = columnCount;
1044 ASSERT(span >= 1); 1044 DCHECK_GE(span, 1u);
1045 unsigned endCol = columnCount + span - 1; 1045 unsigned endCol = columnCount + span - 1;
1046 columnCount += span; 1046 columnCount += span;
1047 if (columnCount > absoluteColumnIndex) { 1047 if (columnCount > absoluteColumnIndex) {
1048 ColAndColGroup colAndColGroup; 1048 ColAndColGroup colAndColGroup;
1049 bool isAtStartEdge = startCol == absoluteColumnIndex; 1049 bool isAtStartEdge = startCol == absoluteColumnIndex;
1050 bool isAtEndEdge = endCol == absoluteColumnIndex; 1050 bool isAtEndEdge = endCol == absoluteColumnIndex;
1051 if (columnLayoutObject->isTableColumnGroup()) { 1051 if (columnLayoutObject->isTableColumnGroup()) {
1052 colAndColGroup.colgroup = columnLayoutObject; 1052 colAndColGroup.colgroup = columnLayoutObject;
1053 colAndColGroup.adjoinsStartBorderOfColGroup = isAtStartEdge; 1053 colAndColGroup.adjoinsStartBorderOfColGroup = isAtStartEdge;
1054 colAndColGroup.adjoinsEndBorderOfColGroup = isAtEndEdge; 1054 colAndColGroup.adjoinsEndBorderOfColGroup = isAtEndEdge;
1055 } else { 1055 } else {
1056 colAndColGroup.col = columnLayoutObject; 1056 colAndColGroup.col = columnLayoutObject;
1057 colAndColGroup.colgroup = columnLayoutObject->enclosingColumnGroup(); 1057 colAndColGroup.colgroup = columnLayoutObject->enclosingColumnGroup();
1058 if (colAndColGroup.colgroup) { 1058 if (colAndColGroup.colgroup) {
1059 colAndColGroup.adjoinsStartBorderOfColGroup = 1059 colAndColGroup.adjoinsStartBorderOfColGroup =
1060 isAtStartEdge && !colAndColGroup.col->previousSibling(); 1060 isAtStartEdge && !colAndColGroup.col->previousSibling();
1061 colAndColGroup.adjoinsEndBorderOfColGroup = 1061 colAndColGroup.adjoinsEndBorderOfColGroup =
1062 isAtEndEdge && !colAndColGroup.col->nextSibling(); 1062 isAtEndEdge && !colAndColGroup.col->nextSibling();
1063 } 1063 }
1064 } 1064 }
1065 return colAndColGroup; 1065 return colAndColGroup;
1066 } 1066 }
1067 } 1067 }
1068 return ColAndColGroup(); 1068 return ColAndColGroup();
1069 } 1069 }
1070 1070
1071 void LayoutTable::recalcSections() const { 1071 void LayoutTable::recalcSections() const {
1072 ASSERT(m_needsSectionRecalc); 1072 DCHECK(m_needsSectionRecalc);
1073 1073
1074 m_head = nullptr; 1074 m_head = nullptr;
1075 m_foot = nullptr; 1075 m_foot = nullptr;
1076 m_firstBody = nullptr; 1076 m_firstBody = nullptr;
1077 m_hasColElements = false; 1077 m_hasColElements = false;
1078 1078
1079 // We need to get valid pointers to caption, head, foot and first body again 1079 // We need to get valid pointers to caption, head, foot and first body again
1080 LayoutObject* nextSibling; 1080 LayoutObject* nextSibling;
1081 for (LayoutObject* child = firstChild(); child; child = nextSibling) { 1081 for (LayoutObject* child = firstChild(); child; child = nextSibling) {
1082 nextSibling = child->nextSibling(); 1082 nextSibling = child->nextSibling();
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1128 unsigned sectionCols = section->numEffectiveColumns(); 1128 unsigned sectionCols = section->numEffectiveColumns();
1129 if (sectionCols > maxCols) 1129 if (sectionCols > maxCols)
1130 maxCols = sectionCols; 1130 maxCols = sectionCols;
1131 } 1131 }
1132 } 1132 }
1133 1133
1134 m_effectiveColumns.resize(maxCols); 1134 m_effectiveColumns.resize(maxCols);
1135 m_effectiveColumnPositions.resize(maxCols + 1); 1135 m_effectiveColumnPositions.resize(maxCols + 1);
1136 m_noCellColspanAtLeast = calcNoCellColspanAtLeast(); 1136 m_noCellColspanAtLeast = calcNoCellColspanAtLeast();
1137 1137
1138 ASSERT(selfNeedsLayout()); 1138 DCHECK(selfNeedsLayout());
1139 1139
1140 m_needsSectionRecalc = false; 1140 m_needsSectionRecalc = false;
1141 } 1141 }
1142 1142
1143 int LayoutTable::calcBorderStart() const { 1143 int LayoutTable::calcBorderStart() const {
1144 if (!collapseBorders()) 1144 if (!collapseBorders())
1145 return LayoutBlock::borderStart().toInt(); 1145 return LayoutBlock::borderStart().toInt();
1146 1146
1147 // Determined by the first cell of the first row. See the CSS 2.1 spec, 1147 // Determined by the first cell of the first row. See the CSS 2.1 spec,
1148 // section 17.6.2. 1148 // section 17.6.2.
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after
1454 unsigned r = cell->rowIndex(); 1454 unsigned r = cell->rowIndex();
1455 LayoutTableSection* section = nullptr; 1455 LayoutTableSection* section = nullptr;
1456 unsigned rAbove = 0; 1456 unsigned rAbove = 0;
1457 if (r > 0) { 1457 if (r > 0) {
1458 // cell is not in the first row, so use the above row in its own section 1458 // cell is not in the first row, so use the above row in its own section
1459 section = cell->section(); 1459 section = cell->section();
1460 rAbove = r - 1; 1460 rAbove = r - 1;
1461 } else { 1461 } else {
1462 section = sectionAbove(cell->section(), SkipEmptySections); 1462 section = sectionAbove(cell->section(), SkipEmptySections);
1463 if (section) { 1463 if (section) {
1464 ASSERT(section->numRows()); 1464 DCHECK(section->numRows());
1465 rAbove = section->numRows() - 1; 1465 rAbove = section->numRows() - 1;
1466 } 1466 }
1467 } 1467 }
1468 1468
1469 // Look up the cell in the section's grid, which requires effective col index 1469 // Look up the cell in the section's grid, which requires effective col index
1470 if (section) { 1470 if (section) {
1471 unsigned effCol = 1471 unsigned effCol =
1472 absoluteColumnToEffectiveColumn(cell->absoluteColumnIndex()); 1472 absoluteColumnToEffectiveColumn(cell->absoluteColumnIndex());
1473 return section->primaryCellAt(rAbove, effCol); 1473 return section->primaryCellAt(rAbove, effCol);
1474 } 1474 }
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1519 1519
1520 unsigned effCol = absoluteColumnToEffectiveColumn( 1520 unsigned effCol = absoluteColumnToEffectiveColumn(
1521 cell->absoluteColumnIndex() + cell->colSpan()); 1521 cell->absoluteColumnIndex() + cell->colSpan());
1522 return cell->section()->primaryCellAt(cell->rowIndex(), effCol); 1522 return cell->section()->primaryCellAt(cell->rowIndex(), effCol);
1523 } 1523 }
1524 1524
1525 int LayoutTable::baselinePosition(FontBaseline baselineType, 1525 int LayoutTable::baselinePosition(FontBaseline baselineType,
1526 bool firstLine, 1526 bool firstLine,
1527 LineDirectionMode direction, 1527 LineDirectionMode direction,
1528 LinePositionMode linePositionMode) const { 1528 LinePositionMode linePositionMode) const {
1529 ASSERT(linePositionMode == PositionOnContainingLine); 1529 DCHECK_EQ(linePositionMode, PositionOnContainingLine);
1530 int baseline = firstLineBoxBaseline(); 1530 int baseline = firstLineBoxBaseline();
1531 if (baseline != -1) { 1531 if (baseline != -1) {
1532 if (isInline()) 1532 if (isInline())
1533 return beforeMarginInLineDirection(direction) + baseline; 1533 return beforeMarginInLineDirection(direction) + baseline;
1534 return baseline; 1534 return baseline;
1535 } 1535 }
1536 1536
1537 return LayoutBox::baselinePosition(baselineType, firstLine, direction, 1537 return LayoutBox::baselinePosition(baselineType, firstLine, direction,
1538 linePositionMode); 1538 linePositionMode);
1539 } 1539 }
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
1647 parent->styleRef(), 1647 parent->styleRef(),
1648 parent->isLayoutInline() ? EDisplay::kInlineTable : EDisplay::kTable); 1648 parent->isLayoutInline() ? EDisplay::kInlineTable : EDisplay::kTable);
1649 LayoutTable* newTable = new LayoutTable(nullptr); 1649 LayoutTable* newTable = new LayoutTable(nullptr);
1650 newTable->setDocumentForAnonymous(&parent->document()); 1650 newTable->setDocumentForAnonymous(&parent->document());
1651 newTable->setStyle(std::move(newStyle)); 1651 newTable->setStyle(std::move(newStyle));
1652 return newTable; 1652 return newTable;
1653 } 1653 }
1654 1654
1655 const BorderValue& LayoutTable::tableStartBorderAdjoiningCell( 1655 const BorderValue& LayoutTable::tableStartBorderAdjoiningCell(
1656 const LayoutTableCell* cell) const { 1656 const LayoutTableCell* cell) const {
1657 ASSERT(cell->isFirstOrLastCellInRow()); 1657 #if DCHECK_IS_ON()
1658 DCHECK(cell->isFirstOrLastCellInRow());
1659 #endif
1658 if (hasSameDirectionAs(cell->row())) 1660 if (hasSameDirectionAs(cell->row()))
1659 return style()->borderStart(); 1661 return style()->borderStart();
1660 1662
1661 return style()->borderEnd(); 1663 return style()->borderEnd();
1662 } 1664 }
1663 1665
1664 const BorderValue& LayoutTable::tableEndBorderAdjoiningCell( 1666 const BorderValue& LayoutTable::tableEndBorderAdjoiningCell(
1665 const LayoutTableCell* cell) const { 1667 const LayoutTableCell* cell) const {
1666 ASSERT(cell->isFirstOrLastCellInRow()); 1668 #if DCHECK_IS_ON()
1669 DCHECK(cell->isFirstOrLastCellInRow());
1670 #endif
1667 if (hasSameDirectionAs(cell->row())) 1671 if (hasSameDirectionAs(cell->row()))
1668 return style()->borderEnd(); 1672 return style()->borderEnd();
1669 1673
1670 return style()->borderStart(); 1674 return style()->borderStart();
1671 } 1675 }
1672 1676
1673 void LayoutTable::ensureIsReadyForPaintInvalidation() { 1677 void LayoutTable::ensureIsReadyForPaintInvalidation() {
1674 LayoutBlock::ensureIsReadyForPaintInvalidation(); 1678 LayoutBlock::ensureIsReadyForPaintInvalidation();
1675 recalcCollapsedBordersIfNeeded(); 1679 recalcCollapsedBordersIfNeeded();
1676 } 1680 }
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1711 } 1715 }
1712 1716
1713 LayoutUnit LayoutTable::paddingRight() const { 1717 LayoutUnit LayoutTable::paddingRight() const {
1714 if (collapseBorders()) 1718 if (collapseBorders())
1715 return LayoutUnit(); 1719 return LayoutUnit();
1716 1720
1717 return LayoutBlock::paddingRight(); 1721 return LayoutBlock::paddingRight();
1718 } 1722 }
1719 1723
1720 } // namespace blink 1724 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/layout/LayoutTable.h ('k') | third_party/WebKit/Source/core/layout/LayoutTableCell.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698