LibWeb: Resolve subgrid inline sizing before row contributions
When collecting row-axis contributions from subgrid descendants, resolve the subgrid column metrics first so intrinsic height measurement uses the correct inline size. This prevents text from being measured as if it had no usable width, which inflated auto row sizes.
This commit is contained in:
parent
8c06273dbf
commit
870aaa8a1f
3 changed files with 53 additions and 0 deletions
|
|
@ -369,6 +369,14 @@ void GridFormattingContext::for_each_subgrid_item_contributing_to_track_sizing(G
|
|||
subgrid_context.place_grid_items();
|
||||
subgrid_context.initialize_grid_tracks_for_columns_and_rows();
|
||||
subgrid_context.initialize_gap_tracks(*m_available_space);
|
||||
|
||||
if (dimension == GridDimension::Row) {
|
||||
subgrid_context.resolve_items_box_metrics(GridDimension::Column);
|
||||
subgrid_context.run_track_sizing(GridDimension::Column);
|
||||
subgrid_context.resolve_items_box_metrics(GridDimension::Column);
|
||||
subgrid_context.resolve_grid_item_sizes(GridDimension::Column);
|
||||
}
|
||||
|
||||
subgrid_context.resolve_items_box_metrics(dimension);
|
||||
|
||||
subgrid_context.for_each_item_contributing_to_track_sizing(dimension, [&](GridItem const& item) {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,23 @@
|
|||
Viewport <#document> at [0,0] [0+0+0 800 0+0+0] [0+0+0 600 0+0+0] [BFC] children: not-inline
|
||||
BlockContainer <html> at [0,0] [0+0+0 800 0+0+0] [0+0+0 40 0+0+0] [BFC] children: not-inline
|
||||
BlockContainer <body> at [0,0] [0+0+0 800 0+0+0] [0+0+0 40 0+0+0] children: not-inline
|
||||
Box <div.outer> at [0,0] [0+0+0 800 0+0+0] [0+0+0 40 0+0+0] [GFC] children: not-inline
|
||||
Box <div.subgrid> at [0,0] [0+0+0 800 0+0+0] [0+0+0 40 0+0+0] [GFC] children: not-inline
|
||||
ImageBox <img> at [0,0] [0+0+0 800 0+0+0] [0+0+0 40 0+0+0] children: not-inline
|
||||
(SVG-as-image isolated context)
|
||||
Viewport <#document> at [0,0] [0+0+0 800 0+0+0] [0+0+0 40 0+0+0] [BFC] children: not-inline
|
||||
SVGSVGBox <svg> at [0,0] [0+0+0 800 0+0+0] [0+0+0 40 0+0+0] [SVG] children: not-inline
|
||||
SVGGeometryBox <rect> at [0,0] [0+0+0 800 0+0+0] [0+0+0 40 0+0+0] children: not-inline
|
||||
BlockContainer <(anonymous)> at [0,40] [0+0+0 800 0+0+0] [0+0+0 0 0+0+0] children: inline
|
||||
TextNode <#text> (not painted)
|
||||
|
||||
ViewportPaintable (Viewport<#document>) [0,0 800x600]
|
||||
PaintableWithLines (BlockContainer<HTML>) [0,0 800x40]
|
||||
PaintableWithLines (BlockContainer<BODY>) [0,0 800x40]
|
||||
PaintableBox (Box<DIV>.outer) [0,0 800x40]
|
||||
PaintableBox (Box<DIV>.subgrid) [0,0 800x40]
|
||||
ImagePaintable (ImageBox<IMG>) [0,0 800x40]
|
||||
PaintableWithLines (BlockContainer(anonymous)) [0,40 800x0]
|
||||
|
||||
SC for Viewport<#document> [0,0 800x600] (z-index: auto)
|
||||
SC for BlockContainer<HTML> [0,0 800x40] (z-index: auto)
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
<!DOCTYPE html>
|
||||
<style>
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.outer {
|
||||
display: grid;
|
||||
outline: 2px solid red;
|
||||
}
|
||||
|
||||
.subgrid {
|
||||
display: grid;
|
||||
grid-template-rows: subgrid;
|
||||
}
|
||||
|
||||
img {
|
||||
display: block;
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
<div class="outer"><div class="subgrid"><img src="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='800' height='40'><rect width='800' height='40' fill='green'/></svg>"></div></div>
|
||||
Loading…
Reference in a new issue