OLD | NEW |
---|---|
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, 2009, 2013 Apple Inc. | 7 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009, 2013 Apple Inc. |
8 * All rights reserved. | 8 * All rights reserved. |
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 17 matching lines...) Expand all Loading... | |
28 | 28 |
29 #include "core/CoreExport.h" | 29 #include "core/CoreExport.h" |
30 #include "core/layout/LayoutBlockFlow.h" | 30 #include "core/layout/LayoutBlockFlow.h" |
31 #include "core/layout/LayoutTableRow.h" | 31 #include "core/layout/LayoutTableRow.h" |
32 #include "core/layout/LayoutTableSection.h" | 32 #include "core/layout/LayoutTableSection.h" |
33 #include "platform/LengthFunctions.h" | 33 #include "platform/LengthFunctions.h" |
34 #include <memory> | 34 #include <memory> |
35 | 35 |
36 namespace blink { | 36 namespace blink { |
37 | 37 |
38 static const unsigned kUnsetColumnIndex = 0x1FFFFFFF; | 38 static const unsigned kUnsetColumnIndex = 0x07FFFFFF; |
wkorman
2017/04/27 20:11:15
How are these numbers here and below determined an
Xianzhu
2017/04/28 20:31:45
Changed to self-explanation code:
#define BITS_OF_
| |
39 static const unsigned kMaxColumnIndex = 0x1FFFFFFE; // 536,870,910 | 39 static const unsigned kMaxColumnIndex = 0x07FFFFFE; // 134,217,726 |
40 | |
41 enum IncludeBorderColorOrNot { kDoNotIncludeBorderColor, kIncludeBorderColor }; | |
42 | 40 |
43 class SubtreeLayoutScope; | 41 class SubtreeLayoutScope; |
44 | 42 |
45 // LayoutTableCell is used to represent a table cell (display: table-cell). | 43 // LayoutTableCell is used to represent a table cell (display: table-cell). |
46 // | 44 // |
47 // Because rows are as tall as the tallest cell, cells need to be aligned into | 45 // Because rows are as tall as the tallest cell, cells need to be aligned into |
48 // the enclosing row space. To achieve this, LayoutTableCell introduces the | 46 // the enclosing row space. To achieve this, LayoutTableCell introduces the |
49 // concept of 'intrinsic padding'. Those 2 paddings are used to shift the box | 47 // concept of 'intrinsic padding'. Those 2 paddings are used to shift the box |
50 // into the row as follows: | 48 // into the row as follows: |
51 // | 49 // |
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
320 private: | 318 private: |
321 const LayoutTableCell& layout_table_cell_; | 319 const LayoutTableCell& layout_table_cell_; |
322 CollapsedBorderValue start_border_; | 320 CollapsedBorderValue start_border_; |
323 CollapsedBorderValue end_border_; | 321 CollapsedBorderValue end_border_; |
324 CollapsedBorderValue before_border_; | 322 CollapsedBorderValue before_border_; |
325 CollapsedBorderValue after_border_; | 323 CollapsedBorderValue after_border_; |
326 }; | 324 }; |
327 | 325 |
328 bool UsesCompositedCellDisplayItemClients() const; | 326 bool UsesCompositedCellDisplayItemClients() const; |
329 const CollapsedBorderValues* GetCollapsedBorderValues() const { | 327 const CollapsedBorderValues* GetCollapsedBorderValues() const { |
328 DCHECK(collapsed_border_values_valid_); | |
330 return collapsed_border_values_.get(); | 329 return collapsed_border_values_.get(); |
331 } | 330 } |
331 void InvalidateCollapsedBorderValues() { | |
332 collapsed_border_values_valid_ = false; | |
wkorman
2017/04/27 20:11:15
When are they valid/invalid? Worth documenting in
Xianzhu
2017/04/28 20:31:45
Done.
| |
333 } | |
332 | 334 |
333 LayoutRect DebugRect() const override; | 335 LayoutRect DebugRect() const override; |
334 | 336 |
335 void AdjustChildDebugRect(LayoutRect&) const override; | 337 void AdjustChildDebugRect(LayoutRect&) const override; |
336 | 338 |
337 // A table cell's location is relative to its containing section. | 339 // A table cell's location is relative to its containing section. |
338 LayoutBox* LocationContainer() const override { return Section(); } | 340 LayoutBox* LocationContainer() const override { return Section(); } |
339 | 341 |
340 bool HasLineIfEmpty() const override; | 342 bool HasLineIfEmpty() const override; |
341 | 343 |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
397 // column, column group). | 399 // column, column group). |
398 // TODO(jchaffraix): It should be easier to compute all the borders in | 400 // TODO(jchaffraix): It should be easier to compute all the borders in |
399 // physical coordinates. However this is not the design of the current code. | 401 // physical coordinates. However this is not the design of the current code. |
400 // | 402 // |
401 // Blink's support for mixed directionality is currently partial. We only | 403 // Blink's support for mixed directionality is currently partial. We only |
402 // support the directionality up to |styleForCellFlow|. See comment on the | 404 // support the directionality up to |styleForCellFlow|. See comment on the |
403 // function above for more details. | 405 // function above for more details. |
404 // See also https://code.google.com/p/chromium/issues/detail?id=128227 for | 406 // See also https://code.google.com/p/chromium/issues/detail?id=128227 for |
405 // some history. | 407 // some history. |
406 // | 408 // |
407 // Those functions are called when the cache (m_collapsedBorders) is | 409 // Those functions are called during recalcCollapsedBorderValuesIfNeeded(). |
408 // invalidated on LayoutTable. | 410 CollapsedBorderValue ComputeCollapsedStartBorder() const; |
409 CollapsedBorderValue ComputeCollapsedStartBorder( | 411 CollapsedBorderValue ComputeCollapsedEndBorder() const; |
410 IncludeBorderColorOrNot = kIncludeBorderColor) const; | 412 CollapsedBorderValue ComputeCollapsedBeforeBorder() const; |
411 CollapsedBorderValue ComputeCollapsedEndBorder( | 413 CollapsedBorderValue ComputeCollapsedAfterBorder() const; |
412 IncludeBorderColorOrNot = kIncludeBorderColor) const; | 414 |
413 CollapsedBorderValue ComputeCollapsedBeforeBorder( | 415 void RecalcCollapsedBorderValuesIfNeeded() const; |
414 IncludeBorderColorOrNot = kIncludeBorderColor) const; | |
415 CollapsedBorderValue ComputeCollapsedAfterBorder( | |
416 IncludeBorderColorOrNot = kIncludeBorderColor) const; | |
417 | 416 |
418 Length LogicalWidthFromColumns(LayoutTableCol* first_col_for_this_cell, | 417 Length LogicalWidthFromColumns(LayoutTableCol* first_col_for_this_cell, |
419 Length width_from_style) const; | 418 Length width_from_style) const; |
420 | 419 |
421 void UpdateColAndRowSpanFlags(); | 420 void UpdateColAndRowSpanFlags(); |
422 | 421 |
423 unsigned ParseRowSpanFromDOM() const; | 422 unsigned ParseRowSpanFromDOM() const; |
424 unsigned ParseColSpanFromDOM() const; | 423 unsigned ParseColSpanFromDOM() const; |
425 | 424 |
426 void NextSibling() const = delete; | 425 void NextSibling() const = delete; |
427 void PreviousSibling() const = delete; | 426 void PreviousSibling() const = delete; |
428 | 427 |
429 // Note MSVC will only pack members if they have identical types, hence we use | 428 // Note MSVC will only pack members if they have identical types, hence we use |
430 // unsigned instead of bool here. | 429 // unsigned instead of bool here. |
431 unsigned absolute_column_index_ : 29; | 430 unsigned absolute_column_index_ : 27; |
432 unsigned cell_width_changed_ : 1; | 431 unsigned cell_width_changed_ : 1; |
433 unsigned has_col_span_ : 1; | 432 unsigned has_col_span_ : 1; |
434 unsigned has_row_span_ : 1; | 433 unsigned has_row_span_ : 1; |
435 | 434 |
435 mutable unsigned collapsed_border_values_valid_ : 1; | |
436 mutable unsigned collapsed_borders_visually_changed_ : 1; | |
437 mutable std::unique_ptr<CollapsedBorderValues> collapsed_border_values_; | |
438 | |
436 // The intrinsic padding. | 439 // The intrinsic padding. |
437 // See class comment for what they are. | 440 // See class comment for what they are. |
438 // | 441 // |
439 // Note: Those fields are using non-subpixel units (int) | 442 // Note: Those fields are using non-subpixel units (int) |
440 // because we don't do fractional arithmetic on tables. | 443 // because we don't do fractional arithmetic on tables. |
441 int intrinsic_padding_before_; | 444 int intrinsic_padding_before_; |
442 int intrinsic_padding_after_; | 445 int intrinsic_padding_after_; |
443 | |
444 std::unique_ptr<CollapsedBorderValues> collapsed_border_values_; | |
445 }; | 446 }; |
446 | 447 |
447 DEFINE_LAYOUT_OBJECT_TYPE_CASTS(LayoutTableCell, IsTableCell()); | 448 DEFINE_LAYOUT_OBJECT_TYPE_CASTS(LayoutTableCell, IsTableCell()); |
448 | 449 |
449 inline LayoutTableCell* LayoutTableCell::PreviousCell() const { | 450 inline LayoutTableCell* LayoutTableCell::PreviousCell() const { |
450 return ToLayoutTableCell(LayoutObject::PreviousSibling()); | 451 return ToLayoutTableCell(LayoutObject::PreviousSibling()); |
451 } | 452 } |
452 | 453 |
453 inline LayoutTableCell* LayoutTableCell::NextCell() const { | 454 inline LayoutTableCell* LayoutTableCell::NextCell() const { |
454 return ToLayoutTableCell(LayoutObject::NextSibling()); | 455 return ToLayoutTableCell(LayoutObject::NextSibling()); |
455 } | 456 } |
456 | 457 |
457 inline LayoutTableCell* LayoutTableRow::FirstCell() const { | 458 inline LayoutTableCell* LayoutTableRow::FirstCell() const { |
458 return ToLayoutTableCell(FirstChild()); | 459 return ToLayoutTableCell(FirstChild()); |
459 } | 460 } |
460 | 461 |
461 inline LayoutTableCell* LayoutTableRow::LastCell() const { | 462 inline LayoutTableCell* LayoutTableRow::LastCell() const { |
462 return ToLayoutTableCell(LastChild()); | 463 return ToLayoutTableCell(LastChild()); |
463 } | 464 } |
464 | 465 |
465 } // namespace blink | 466 } // namespace blink |
466 | 467 |
467 #endif // LayoutTableCell_h | 468 #endif // LayoutTableCell_h |
OLD | NEW |