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

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

Issue 2791433003: Fix Border collapsing with colpsan / rowspan cells
Patch Set: bug 2902 Created 3 years, 7 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 946 matching lines...) Expand 10 before | Expand all | Expand 10 after
957 ClearPreferredLogicalWidthsDirty(); 957 ClearPreferredLogicalWidthsDirty();
958 } 958 }
959 959
960 LayoutTableSection* LayoutTable::TopNonEmptySection() const { 960 LayoutTableSection* LayoutTable::TopNonEmptySection() const {
961 LayoutTableSection* section = TopSection(); 961 LayoutTableSection* section = TopSection();
962 if (section && !section->NumRows()) 962 if (section && !section->NumRows())
963 section = SectionBelow(section, kSkipEmptySections); 963 section = SectionBelow(section, kSkipEmptySections);
964 return section; 964 return section;
965 } 965 }
966 966
967 LayoutTableSection* LayoutTable::BottomNonEmptySection() const {
968 LayoutTableSection* section = BottomSection();
969 if (section && !section->NumRows())
970 section = SectionAbove(section, kSkipEmptySections);
971 return section;
972 }
973
967 void LayoutTable::SplitEffectiveColumn(unsigned index, unsigned first_span) { 974 void LayoutTable::SplitEffectiveColumn(unsigned index, unsigned first_span) {
968 // We split the column at |index|, taking |firstSpan| cells from the span. 975 // We split the column at |index|, taking |firstSpan| cells from the span.
969 DCHECK_GT(effective_columns_[index].span, first_span); 976 DCHECK_GT(effective_columns_[index].span, first_span);
970 effective_columns_.insert(index, first_span); 977 effective_columns_.insert(index, first_span);
971 effective_columns_[index + 1].span -= first_span; 978 effective_columns_[index + 1].span -= first_span;
972 979
973 // Propagate the change in our columns representation to the sections that 980 // Propagate the change in our columns representation to the sections that
974 // don't need cell recalc. If they do, they will be synced up directly with 981 // don't need cell recalc. If they do, they will be synced up directly with
975 // m_columns later. 982 // m_columns later.
976 for (LayoutObject* child = FirstChild(); child; 983 for (LayoutObject* child = FirstChild(); child;
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
1076 col_and_col_group.adjoins_end_border_of_col_group = 1083 col_and_col_group.adjoins_end_border_of_col_group =
1077 is_at_end_edge && !col_and_col_group.col->NextSibling(); 1084 is_at_end_edge && !col_and_col_group.col->NextSibling();
1078 } 1085 }
1079 } 1086 }
1080 return col_and_col_group; 1087 return col_and_col_group;
1081 } 1088 }
1082 } 1089 }
1083 return ColAndColGroup(); 1090 return ColAndColGroup();
1084 } 1091 }
1085 1092
1093 // Maps LayoutTableCol => absoluteColumnIndex,
1094 // an inverse of slowColElementAtAbsoluteColumn
1095 unsigned LayoutTable::ColElementToAbsoluteColumn(
1096 const LayoutTableCol* col_element) const {
1097 unsigned col = 0;
1098 for (LayoutTableCol* column_layout_object = FirstColumn();
1099 column_layout_object;
1100 column_layout_object = column_layout_object->NextColumn()) {
1101 if (column_layout_object == col_element)
1102 break;
1103 if (column_layout_object->IsTableColumnGroupWithColumnChildren()) {
1104 // Do nothing, span will increase with children
1105 } else {
1106 col += column_layout_object->Span();
1107 }
1108 }
1109 return col;
1110 }
1111
1086 void LayoutTable::RecalcSections() const { 1112 void LayoutTable::RecalcSections() const {
1087 DCHECK(needs_section_recalc_); 1113 DCHECK(needs_section_recalc_);
1088 1114
1089 head_ = nullptr; 1115 head_ = nullptr;
1090 foot_ = nullptr; 1116 foot_ = nullptr;
1091 first_body_ = nullptr; 1117 first_body_ = nullptr;
1092 has_col_elements_ = false; 1118 has_col_elements_ = false;
1093 1119
1094 // We need to get valid pointers to caption, head, foot and first body again 1120 // We need to get valid pointers to caption, head, foot and first body again
1095 LayoutObject* next_sibling; 1121 LayoutObject* next_sibling;
(...skipping 641 matching lines...) Expand 10 before | Expand all | Expand 10 after
1737 } 1763 }
1738 1764
1739 LayoutUnit LayoutTable::PaddingRight() const { 1765 LayoutUnit LayoutTable::PaddingRight() const {
1740 if (CollapseBorders()) 1766 if (CollapseBorders())
1741 return LayoutUnit(); 1767 return LayoutUnit();
1742 1768
1743 return LayoutBlock::PaddingRight(); 1769 return LayoutBlock::PaddingRight();
1744 } 1770 }
1745 1771
1746 } // namespace blink 1772 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/layout/LayoutTable.h ('k') | third_party/WebKit/Source/core/layout/LayoutTableCell.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698