mirror of
https://github.com/servo/servo.git
synced 2025-08-07 06:25:32 +01:00
Auto merge of #12593 - adamncasey:table-row-cell-height, r=pcwalton
Fix table vertical alignment (middle, bottom) <!-- Please describe your changes on the following line: --> Fixes table cell vertical alignment (middle, bottom, not yet baseline) when the row contains cells of differing heights. Moved the work done earlier by @notriddle into a separate public function on TableCellFlow. This function is then called by TableRowFlow once the cell's block size has been calculator. --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: --> - [X] `./mach build -d` does not report any errors - [X] `./mach test-tidy` does not report any errors - [X] These changes fix #12531 (github issue number if applicable). <!-- Either: --> - [X] There are tests for these changes <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. --> <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/12593) <!-- Reviewable:end -->
This commit is contained in:
commit
b374582e23
9 changed files with 102 additions and 12 deletions
|
@ -80,6 +80,10 @@ impl TableCellFlow {
|
|||
if !flow::base(self).restyle_damage.contains(REFLOW) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/// Position this cell's children according to vertical-align.
|
||||
pub fn valign_children(&mut self) {
|
||||
// Note to the reader: this code has been tested with negative margins.
|
||||
// We end up with a "end" that's before the "start," but the math still works out.
|
||||
let first_start = flow::base(self).children.front().map(|kid| {
|
||||
|
@ -106,6 +110,9 @@ impl TableCellFlow {
|
|||
let self_size = flow::base(self).position.size.block -
|
||||
self.block_flow.fragment.border_padding.block_start_end();
|
||||
let kids_self_gap = self_size - kids_size;
|
||||
|
||||
// This offset should also account for vertical_align::T::baseline.
|
||||
// Need max cell ascent from the first row of this cell.
|
||||
let offset = match self.block_flow.fragment.style().get_box().vertical_align {
|
||||
vertical_align::T::middle => kids_self_gap / 2,
|
||||
vertical_align::T::bottom => kids_self_gap,
|
||||
|
|
|
@ -162,6 +162,9 @@ impl TableRowFlow {
|
|||
// Assign the child's block size.
|
||||
child_table_cell.block_flow.base.position.size.block = block_size;
|
||||
|
||||
// Now we know the cell height, vertical align the cell's children.
|
||||
child_table_cell.valign_children();
|
||||
|
||||
// Write in the size of the relative containing block for children. (This information
|
||||
// is also needed to handle RTL.)
|
||||
child_table_cell.block_flow.base.early_absolute_position_info =
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue