Skip to content

Commit

Permalink
[GridNG] Decouple ComputeUsedTrackSizes to be used within subgrids
Browse files Browse the repository at this point in the history
1. Separating the cache logic in `ComputeUsedTrackSizes` to be handled
   by a new method `CompleteTrackSizingAlgorithm`. The purpose of this
   change is to reuse the core track sizing algorithm to both, finalize
   the grid tree geometry and compute the contribution size of subgrids.

2. Updating `GridItemData` to cache the `has_subgridded_[columns|rows]`
   properties relative to its parent grid's direction.

3. Adding some minor quality of life changes in preparation for an
   upcoming change that will expand `CompleteTrackSizingAlgorithm` to
   make it work for multiple levels of subgrids.

Bug: 618969
Change-Id: I505b333b1ea59ae286964920483c26c959e8594b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4370637
Reviewed-by: Ian Kilpatrick <ikilpatrick@chromium.org>
Commit-Queue: Ethan Jimenez <ethavar@microsoft.com>
Cr-Commit-Position: refs/heads/main@{#1122209}
  • Loading branch information
ethanjv authored and Chromium LUCI CQ committed Mar 26, 2023
1 parent 3db85b4 commit 5369af6
Show file tree
Hide file tree
Showing 6 changed files with 274 additions and 188 deletions.
23 changes: 12 additions & 11 deletions third_party/blink/renderer/core/layout/ng/grid/ng_grid_item.cc
Expand Up @@ -177,23 +177,24 @@ GridItemData::GridItemData(

if (node.IsGrid()) {
// TODO(ethavar): Don't consider subgrids with size containment.
has_subgridded_columns = style.GridTemplateColumns().IsSubgriddedAxis();
has_subgridded_rows = style.GridTemplateRows().IsSubgriddedAxis();
has_subgridded_columns =
is_parallel_with_root_grid
? style.GridTemplateColumns().IsSubgriddedAxis()
: style.GridTemplateRows().IsSubgriddedAxis();

has_subgridded_rows = is_parallel_with_root_grid
? style.GridTemplateRows().IsSubgriddedAxis()
: style.GridTemplateColumns().IsSubgriddedAxis();
}

if (parent_must_consider_grid_items_for_column_sizing) {
is_considered_for_column_sizing = is_parallel_with_root_grid
? !has_subgridded_columns
: !has_subgridded_rows;
must_consider_grid_items_for_column_sizing =
!is_considered_for_column_sizing;
must_consider_grid_items_for_column_sizing = has_subgridded_columns;
is_considered_for_column_sizing = !has_subgridded_columns;
}

if (parent_must_consider_grid_items_for_row_sizing) {
is_considered_for_row_sizing = is_parallel_with_root_grid
? !has_subgridded_rows
: !has_subgridded_columns;
must_consider_grid_items_for_row_sizing = !is_considered_for_row_sizing;
must_consider_grid_items_for_row_sizing = has_subgridded_rows;
is_considered_for_row_sizing = !has_subgridded_rows;
}
}

Expand Down
10 changes: 10 additions & 0 deletions third_party/blink/renderer/core/layout/ng/grid/ng_grid_item.h
Expand Up @@ -58,6 +58,11 @@ struct CORE_EXPORT GridItemData {

bool IsBaselineAlignedForDirection(
GridTrackSizingDirection track_direction) const {
// TODO(ethavar): Baseline alignment for subgrids is dependent on
// accumulating the baseline in `ComputeSubgridContributionSize`.
if (has_subgridded_columns || has_subgridded_rows) {
return false;
}
return (track_direction == kForColumns)
? (InlineAxisAlignment() == AxisEdge::kFirstBaseline ||
InlineAxisAlignment() == AxisEdge::kLastBaseline)
Expand All @@ -67,6 +72,11 @@ struct CORE_EXPORT GridItemData {

bool IsBaselineSpecifiedForDirection(
GridTrackSizingDirection track_direction) const {
// TODO(ethavar): Baseline alignment for subgrids is dependent on
// accumulating the baseline in `ComputeSubgridContributionSize`.
if (has_subgridded_columns || has_subgridded_rows) {
return false;
}
return (track_direction == kForColumns)
? (inline_axis_alignment == AxisEdge::kFirstBaseline ||
inline_axis_alignment == AxisEdge::kLastBaseline)
Expand Down

0 comments on commit 5369af6

Please sign in to comment.