Index: third_party/WebKit/Source/core/layout/LayoutTableSection.cpp |
diff --git a/third_party/WebKit/Source/core/layout/LayoutTableSection.cpp b/third_party/WebKit/Source/core/layout/LayoutTableSection.cpp |
index 2899bc53beb04101f6b4d49581903d96d20d9a76..0665497504bbb6fa047c5f579269e881b020f5ec 100644 |
--- a/third_party/WebKit/Source/core/layout/LayoutTableSection.cpp |
+++ b/third_party/WebKit/Source/core/layout/LayoutTableSection.cpp |
@@ -1068,7 +1068,7 @@ void LayoutTableSection::DistributeRemainingExtraLogicalHeight( |
if (extra_logical_height <= 0 || !row_pos_[total_rows]) |
return; |
- // FIXME: m_rowPos[totalRows] - m_rowPos[0] is the total rows' size. |
+ // FIXME: row_pos_[totalRows] - row_pos_[0] is the total rows' size. |
int total_row_size = row_pos_[total_rows]; |
int total_logical_height_added = 0; |
int previous_row_position = row_pos_[0]; |
@@ -2164,13 +2164,45 @@ bool LayoutTableSection::MapToVisualRectInAncestorSpaceInternal( |
ancestor, transform_state, flags); |
} |
-bool LayoutTableSection::PaintedOutputOfObjectHasNoEffectRegardlessOfSize() |
- const { |
- // LayoutTableSection paints background from columns. |
- if (Table()->HasColElements()) |
- return false; |
- return LayoutTableBoxComponent:: |
- PaintedOutputOfObjectHasNoEffectRegardlessOfSize(); |
+LayoutRect LayoutTableSection::GetCellPosition( |
+ unsigned row, |
+ unsigned effective_column) const { |
+ LayoutTable* table = this->Table(); |
+ LayoutUnit left = |
+ LayoutUnit(table->EffectiveColumnPositions()[effective_column]); |
+ LayoutUnit top = LayoutUnit(row_pos_[row]); |
+ unsigned rightCol = std::min<unsigned>( |
+ table->EffectiveColumnPositions().size() - 1, effective_column + 1); |
+ unsigned bottom_row = std::min<unsigned>(row_pos_.size() - 1, row + 1); |
+ LayoutUnit right = LayoutUnit(table->EffectiveColumnPositions()[rightCol]); |
+ LayoutUnit bottom = LayoutUnit(row_pos_[bottom_row]); |
+ left += LayoutUnit(table->HBorderSpacing()); |
+ return LayoutRect(left, top, right - left, bottom - top); |
+} |
+ |
+LayoutRect LayoutTableSection::GetCellPhysicalPosition( |
+ unsigned row, |
+ unsigned effective_column) const { |
+ return TransformLogicalToPhysicalPosition( |
+ GetCellPosition(row, effective_column)); |
+} |
+ |
+LayoutRect LayoutTableSection::TransformLogicalToPhysicalPosition( |
+ const LayoutRect& position) const { |
+ WritingMode writingMode = Style()->GetWritingMode(); |
+ bool is_ltr = Style()->IsLeftToRightDirection(); |
+ LayoutRect transformed_position = position; |
+ if (blink::IsHorizontalWritingMode(writingMode)) { |
+ if (!is_ltr) |
+ transformed_position.SetX(Size().Width() - transformed_position.MaxX()); |
+ } else { |
+ transformed_position = transformed_position.TransposedRect(); |
+ if (!is_ltr) |
+ transformed_position.SetY(Size().Height() - transformed_position.MaxY()); |
+ if (blink::IsFlippedBlocksWritingMode(writingMode)) |
+ transformed_position.SetX(Size().Width() - transformed_position.MaxX()); |
+ } |
+ return transformed_position; |
} |
} // namespace blink |