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

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

Issue 2890733002: Make EBorderStyle an enum class. (Closed)
Patch Set: Build for Mac 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 1172 matching lines...) Expand 10 before | Expand all | Expand 10 after
1183 return LayoutBlock::BorderStart().ToInt(); 1183 return LayoutBlock::BorderStart().ToInt();
1184 1184
1185 // Determined by the first cell of the first row. See the CSS 2.1 spec, 1185 // Determined by the first cell of the first row. See the CSS 2.1 spec,
1186 // section 17.6.2. 1186 // section 17.6.2.
1187 if (!NumEffectiveColumns()) 1187 if (!NumEffectiveColumns())
1188 return 0; 1188 return 0;
1189 1189
1190 int border_width = 0; 1190 int border_width = 0;
1191 1191
1192 const BorderValue& table_start_border = Style()->BorderStart(); 1192 const BorderValue& table_start_border = Style()->BorderStart();
1193 if (table_start_border.Style() == kBorderStyleHidden) 1193 if (table_start_border.Style() == EBorderStyle::kHidden)
1194 return 0; 1194 return 0;
1195 if (table_start_border.Style() > kBorderStyleHidden) 1195 if (table_start_border.Style() > EBorderStyle::kHidden)
1196 border_width = table_start_border.Width(); 1196 border_width = table_start_border.Width();
1197 1197
1198 // TODO(dgrogan): This logic doesn't properly account for the first column in 1198 // TODO(dgrogan): This logic doesn't properly account for the first column in
1199 // the first column-group case. 1199 // the first column-group case.
1200 if (LayoutTableCol* column = 1200 if (LayoutTableCol* column =
1201 ColElementAtAbsoluteColumn(0).InnermostColOrColGroup()) { 1201 ColElementAtAbsoluteColumn(0).InnermostColOrColGroup()) {
1202 // FIXME: We don't account for direction on columns and column groups. 1202 // FIXME: We don't account for direction on columns and column groups.
1203 const BorderValue& column_adjoining_border = column->Style()->BorderStart(); 1203 const BorderValue& column_adjoining_border = column->Style()->BorderStart();
1204 if (column_adjoining_border.Style() == kBorderStyleHidden) 1204 if (column_adjoining_border.Style() == EBorderStyle::kHidden)
1205 return 0; 1205 return 0;
1206 if (column_adjoining_border.Style() > kBorderStyleHidden) 1206 if (column_adjoining_border.Style() > EBorderStyle::kHidden)
1207 border_width = 1207 border_width =
1208 std::max<int>(border_width, column_adjoining_border.Width()); 1208 std::max<int>(border_width, column_adjoining_border.Width());
1209 } 1209 }
1210 1210
1211 if (const LayoutTableSection* top_non_empty_section = 1211 if (const LayoutTableSection* top_non_empty_section =
1212 this->TopNonEmptySection()) { 1212 this->TopNonEmptySection()) {
1213 const BorderValue& section_adjoining_border = 1213 const BorderValue& section_adjoining_border =
1214 top_non_empty_section->BorderAdjoiningTableStart(); 1214 top_non_empty_section->BorderAdjoiningTableStart();
1215 if (section_adjoining_border.Style() == kBorderStyleHidden) 1215 if (section_adjoining_border.Style() == EBorderStyle::kHidden)
1216 return 0; 1216 return 0;
1217 1217
1218 if (section_adjoining_border.Style() > kBorderStyleHidden) 1218 if (section_adjoining_border.Style() > EBorderStyle::kHidden)
1219 border_width = 1219 border_width =
1220 std::max<int>(border_width, section_adjoining_border.Width()); 1220 std::max<int>(border_width, section_adjoining_border.Width());
1221 1221
1222 if (const LayoutTableCell* adjoining_start_cell = 1222 if (const LayoutTableCell* adjoining_start_cell =
1223 top_non_empty_section->FirstRowCellAdjoiningTableStart()) { 1223 top_non_empty_section->FirstRowCellAdjoiningTableStart()) {
1224 // FIXME: Make this work with perpendicular and flipped cells. 1224 // FIXME: Make this work with perpendicular and flipped cells.
1225 const BorderValue& start_cell_adjoining_border = 1225 const BorderValue& start_cell_adjoining_border =
1226 adjoining_start_cell->BorderAdjoiningTableStart(); 1226 adjoining_start_cell->BorderAdjoiningTableStart();
1227 if (start_cell_adjoining_border.Style() == kBorderStyleHidden) 1227 if (start_cell_adjoining_border.Style() == EBorderStyle::kHidden)
1228 return 0; 1228 return 0;
1229 1229
1230 const BorderValue& first_row_adjoining_border = 1230 const BorderValue& first_row_adjoining_border =
1231 adjoining_start_cell->Row()->BorderAdjoiningTableStart(); 1231 adjoining_start_cell->Row()->BorderAdjoiningTableStart();
1232 if (first_row_adjoining_border.Style() == kBorderStyleHidden) 1232 if (first_row_adjoining_border.Style() == EBorderStyle::kHidden)
1233 return 0; 1233 return 0;
1234 1234
1235 if (start_cell_adjoining_border.Style() > kBorderStyleHidden) { 1235 if (start_cell_adjoining_border.Style() > EBorderStyle::kHidden) {
1236 border_width = 1236 border_width =
1237 std::max<int>(border_width, start_cell_adjoining_border.Width()); 1237 std::max<int>(border_width, start_cell_adjoining_border.Width());
1238 } 1238 }
1239 if (first_row_adjoining_border.Style() > kBorderStyleHidden) { 1239 if (first_row_adjoining_border.Style() > EBorderStyle::kHidden) {
1240 border_width = 1240 border_width =
1241 std::max<int>(border_width, first_row_adjoining_border.Width()); 1241 std::max<int>(border_width, first_row_adjoining_border.Width());
1242 } 1242 }
1243 } 1243 }
1244 } 1244 }
1245 return (border_width + (Style()->IsLeftToRightDirection() ? 0 : 1)) / 2; 1245 return (border_width + (Style()->IsLeftToRightDirection() ? 0 : 1)) / 2;
1246 } 1246 }
1247 1247
1248 int LayoutTable::CalcBorderEnd() const { 1248 int LayoutTable::CalcBorderEnd() const {
1249 if (!ShouldCollapseBorders()) 1249 if (!ShouldCollapseBorders())
1250 return LayoutBlock::BorderEnd().ToInt(); 1250 return LayoutBlock::BorderEnd().ToInt();
1251 1251
1252 // Determined by the last cell of the first row. See the CSS 2.1 spec, section 1252 // Determined by the last cell of the first row. See the CSS 2.1 spec, section
1253 // 17.6.2. 1253 // 17.6.2.
1254 if (!NumEffectiveColumns()) 1254 if (!NumEffectiveColumns())
1255 return 0; 1255 return 0;
1256 1256
1257 int border_width = 0; 1257 int border_width = 0;
1258 1258
1259 const BorderValue& table_end_border = Style()->BorderEnd(); 1259 const BorderValue& table_end_border = Style()->BorderEnd();
1260 if (table_end_border.Style() == kBorderStyleHidden) 1260 if (table_end_border.Style() == EBorderStyle::kHidden)
1261 return 0; 1261 return 0;
1262 if (table_end_border.Style() > kBorderStyleHidden) 1262 if (table_end_border.Style() > EBorderStyle::kHidden)
1263 border_width = table_end_border.Width(); 1263 border_width = table_end_border.Width();
1264 1264
1265 unsigned end_column = NumEffectiveColumns() - 1; 1265 unsigned end_column = NumEffectiveColumns() - 1;
1266 1266
1267 // TODO(dgrogan): This logic doesn't properly account for the last column in 1267 // TODO(dgrogan): This logic doesn't properly account for the last column in
1268 // the last column-group case. 1268 // the last column-group case.
1269 if (LayoutTableCol* column = 1269 if (LayoutTableCol* column =
1270 ColElementAtAbsoluteColumn(end_column).InnermostColOrColGroup()) { 1270 ColElementAtAbsoluteColumn(end_column).InnermostColOrColGroup()) {
1271 // FIXME: We don't account for direction on columns and column groups. 1271 // FIXME: We don't account for direction on columns and column groups.
1272 const BorderValue& column_adjoining_border = column->Style()->BorderEnd(); 1272 const BorderValue& column_adjoining_border = column->Style()->BorderEnd();
1273 if (column_adjoining_border.Style() == kBorderStyleHidden) 1273 if (column_adjoining_border.Style() == EBorderStyle::kHidden)
1274 return 0; 1274 return 0;
1275 if (column_adjoining_border.Style() > kBorderStyleHidden) 1275 if (column_adjoining_border.Style() > EBorderStyle::kHidden)
1276 border_width = 1276 border_width =
1277 std::max<int>(border_width, column_adjoining_border.Width()); 1277 std::max<int>(border_width, column_adjoining_border.Width());
1278 } 1278 }
1279 1279
1280 if (const LayoutTableSection* top_non_empty_section = 1280 if (const LayoutTableSection* top_non_empty_section =
1281 this->TopNonEmptySection()) { 1281 this->TopNonEmptySection()) {
1282 const BorderValue& section_adjoining_border = 1282 const BorderValue& section_adjoining_border =
1283 top_non_empty_section->BorderAdjoiningTableEnd(); 1283 top_non_empty_section->BorderAdjoiningTableEnd();
1284 if (section_adjoining_border.Style() == kBorderStyleHidden) 1284 if (section_adjoining_border.Style() == EBorderStyle::kHidden)
1285 return 0; 1285 return 0;
1286 1286
1287 if (section_adjoining_border.Style() > kBorderStyleHidden) 1287 if (section_adjoining_border.Style() > EBorderStyle::kHidden)
1288 border_width = 1288 border_width =
1289 std::max<int>(border_width, section_adjoining_border.Width()); 1289 std::max<int>(border_width, section_adjoining_border.Width());
1290 1290
1291 if (const LayoutTableCell* adjoining_end_cell = 1291 if (const LayoutTableCell* adjoining_end_cell =
1292 top_non_empty_section->FirstRowCellAdjoiningTableEnd()) { 1292 top_non_empty_section->FirstRowCellAdjoiningTableEnd()) {
1293 // FIXME: Make this work with perpendicular and flipped cells. 1293 // FIXME: Make this work with perpendicular and flipped cells.
1294 const BorderValue& end_cell_adjoining_border = 1294 const BorderValue& end_cell_adjoining_border =
1295 adjoining_end_cell->BorderAdjoiningTableEnd(); 1295 adjoining_end_cell->BorderAdjoiningTableEnd();
1296 if (end_cell_adjoining_border.Style() == kBorderStyleHidden) 1296 if (end_cell_adjoining_border.Style() == EBorderStyle::kHidden)
1297 return 0; 1297 return 0;
1298 1298
1299 const BorderValue& first_row_adjoining_border = 1299 const BorderValue& first_row_adjoining_border =
1300 adjoining_end_cell->Row()->BorderAdjoiningTableEnd(); 1300 adjoining_end_cell->Row()->BorderAdjoiningTableEnd();
1301 if (first_row_adjoining_border.Style() == kBorderStyleHidden) 1301 if (first_row_adjoining_border.Style() == EBorderStyle::kHidden)
1302 return 0; 1302 return 0;
1303 1303
1304 if (end_cell_adjoining_border.Style() > kBorderStyleHidden) { 1304 if (end_cell_adjoining_border.Style() > EBorderStyle::kHidden) {
1305 border_width = 1305 border_width =
1306 std::max<int>(border_width, end_cell_adjoining_border.Width()); 1306 std::max<int>(border_width, end_cell_adjoining_border.Width());
1307 } 1307 }
1308 if (first_row_adjoining_border.Style() > kBorderStyleHidden) { 1308 if (first_row_adjoining_border.Style() > EBorderStyle::kHidden) {
1309 border_width = 1309 border_width =
1310 std::max<int>(border_width, first_row_adjoining_border.Width()); 1310 std::max<int>(border_width, first_row_adjoining_border.Width());
1311 } 1311 }
1312 } 1312 }
1313 } 1313 }
1314 return (border_width + (Style()->IsLeftToRightDirection() ? 1 : 0)) / 2; 1314 return (border_width + (Style()->IsLeftToRightDirection() ? 1 : 0)) / 2;
1315 } 1315 }
1316 1316
1317 void LayoutTable::RecalcBordersInRowDirection() { 1317 void LayoutTable::RecalcBordersInRowDirection() {
1318 // FIXME: We need to compute the collapsed before / after borders in the same 1318 // FIXME: We need to compute the collapsed before / after borders in the same
(...skipping 21 matching lines...) Expand all
1340 int LayoutTable::OuterBorderBefore() const { 1340 int LayoutTable::OuterBorderBefore() const {
1341 if (!ShouldCollapseBorders()) 1341 if (!ShouldCollapseBorders())
1342 return 0; 1342 return 0;
1343 int border_width = 0; 1343 int border_width = 0;
1344 if (LayoutTableSection* top_section = this->TopSection()) { 1344 if (LayoutTableSection* top_section = this->TopSection()) {
1345 border_width = top_section->OuterBorderBefore(); 1345 border_width = top_section->OuterBorderBefore();
1346 if (border_width < 0) 1346 if (border_width < 0)
1347 return 0; // Overridden by hidden 1347 return 0; // Overridden by hidden
1348 } 1348 }
1349 const BorderValue& tb = Style()->BorderBefore(); 1349 const BorderValue& tb = Style()->BorderBefore();
1350 if (tb.Style() == kBorderStyleHidden) 1350 if (tb.Style() == EBorderStyle::kHidden)
1351 return 0; 1351 return 0;
1352 if (tb.Style() > kBorderStyleHidden) 1352 if (tb.Style() > EBorderStyle::kHidden)
1353 border_width = std::max<int>(border_width, tb.Width() / 2); 1353 border_width = std::max<int>(border_width, tb.Width() / 2);
1354 return border_width; 1354 return border_width;
1355 } 1355 }
1356 1356
1357 int LayoutTable::OuterBorderAfter() const { 1357 int LayoutTable::OuterBorderAfter() const {
1358 if (!ShouldCollapseBorders()) 1358 if (!ShouldCollapseBorders())
1359 return 0; 1359 return 0;
1360 int border_width = 0; 1360 int border_width = 0;
1361 1361
1362 if (LayoutTableSection* section = BottomSection()) { 1362 if (LayoutTableSection* section = BottomSection()) {
1363 border_width = section->OuterBorderAfter(); 1363 border_width = section->OuterBorderAfter();
1364 if (border_width < 0) 1364 if (border_width < 0)
1365 return 0; // Overridden by hidden 1365 return 0; // Overridden by hidden
1366 } 1366 }
1367 const BorderValue& tb = Style()->BorderAfter(); 1367 const BorderValue& tb = Style()->BorderAfter();
1368 if (tb.Style() == kBorderStyleHidden) 1368 if (tb.Style() == EBorderStyle::kHidden)
1369 return 0; 1369 return 0;
1370 if (tb.Style() > kBorderStyleHidden) 1370 if (tb.Style() > EBorderStyle::kHidden)
1371 border_width = std::max<int>(border_width, (tb.Width() + 1) / 2); 1371 border_width = std::max<int>(border_width, (tb.Width() + 1) / 2);
1372 return border_width; 1372 return border_width;
1373 } 1373 }
1374 1374
1375 int LayoutTable::OuterBorderStart() const { 1375 int LayoutTable::OuterBorderStart() const {
1376 if (!ShouldCollapseBorders()) 1376 if (!ShouldCollapseBorders())
1377 return 0; 1377 return 0;
1378 1378
1379 int border_width = 0; 1379 int border_width = 0;
1380 1380
1381 const BorderValue& tb = Style()->BorderStart(); 1381 const BorderValue& tb = Style()->BorderStart();
1382 if (tb.Style() == kBorderStyleHidden) 1382 if (tb.Style() == EBorderStyle::kHidden)
1383 return 0; 1383 return 0;
1384 if (tb.Style() > kBorderStyleHidden) 1384 if (tb.Style() > EBorderStyle::kHidden)
1385 border_width = 1385 border_width =
1386 (tb.Width() + (Style()->IsLeftToRightDirection() ? 0 : 1)) / 2; 1386 (tb.Width() + (Style()->IsLeftToRightDirection() ? 0 : 1)) / 2;
1387 1387
1388 bool all_hidden = true; 1388 bool all_hidden = true;
1389 for (LayoutTableSection* section = TopSection(); section; 1389 for (LayoutTableSection* section = TopSection(); section;
1390 section = SectionBelow(section)) { 1390 section = SectionBelow(section)) {
1391 int sw = section->OuterBorderStart(); 1391 int sw = section->OuterBorderStart();
1392 if (sw < 0) 1392 if (sw < 0)
1393 continue; 1393 continue;
1394 all_hidden = false; 1394 all_hidden = false;
1395 border_width = std::max(border_width, sw); 1395 border_width = std::max(border_width, sw);
1396 } 1396 }
1397 if (all_hidden) 1397 if (all_hidden)
1398 return 0; 1398 return 0;
1399 1399
1400 return border_width; 1400 return border_width;
1401 } 1401 }
1402 1402
1403 int LayoutTable::OuterBorderEnd() const { 1403 int LayoutTable::OuterBorderEnd() const {
1404 if (!ShouldCollapseBorders()) 1404 if (!ShouldCollapseBorders())
1405 return 0; 1405 return 0;
1406 1406
1407 int border_width = 0; 1407 int border_width = 0;
1408 1408
1409 const BorderValue& tb = Style()->BorderEnd(); 1409 const BorderValue& tb = Style()->BorderEnd();
1410 if (tb.Style() == kBorderStyleHidden) 1410 if (tb.Style() == EBorderStyle::kHidden)
1411 return 0; 1411 return 0;
1412 if (tb.Style() > kBorderStyleHidden) 1412 if (tb.Style() > EBorderStyle::kHidden)
1413 border_width = 1413 border_width =
1414 (tb.Width() + (Style()->IsLeftToRightDirection() ? 1 : 0)) / 2; 1414 (tb.Width() + (Style()->IsLeftToRightDirection() ? 1 : 0)) / 2;
1415 1415
1416 bool all_hidden = true; 1416 bool all_hidden = true;
1417 for (LayoutTableSection* section = TopSection(); section; 1417 for (LayoutTableSection* section = TopSection(); section;
1418 section = SectionBelow(section)) { 1418 section = SectionBelow(section)) {
1419 int sw = section->OuterBorderEnd(); 1419 int sw = section->OuterBorderEnd();
1420 if (sw < 0) 1420 if (sw < 0)
1421 continue; 1421 continue;
1422 all_hidden = false; 1422 all_hidden = false;
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after
1760 } 1760 }
1761 1761
1762 LayoutUnit LayoutTable::PaddingRight() const { 1762 LayoutUnit LayoutTable::PaddingRight() const {
1763 if (ShouldCollapseBorders()) 1763 if (ShouldCollapseBorders())
1764 return LayoutUnit(); 1764 return LayoutUnit();
1765 1765
1766 return LayoutBlock::PaddingRight(); 1766 return LayoutBlock::PaddingRight();
1767 } 1767 }
1768 1768
1769 } // namespace blink 1769 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698