mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-21 23:20:20 +00:00
LibWeb: Don't touch flex items after they we've been frozen
When using the flex shrink factor, the flexible length resolution algorithm was incorrectly ignoring the `frozen` flag on items and would update the same items again, causing overconsumption of the remaining free space on the flex line.
This commit is contained in:
parent
0808463a7d
commit
f3556f239e
Notes:
sideshowbarker
2024-07-16 23:05:04 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/f3556f239e
3 changed files with 46 additions and 0 deletions
|
@ -0,0 +1,29 @@
|
|||
Viewport <#document> at (0,0) content-size 800x600 children: not-inline
|
||||
BlockContainer <html> at (1,1) content-size 798x70 children: not-inline
|
||||
BlockContainer <body> at (10,10) content-size 780x52 children: not-inline
|
||||
Box <div.flexbox> at (11,11) content-size 778x50 flex-container(row) children: not-inline
|
||||
BlockContainer <div> at (12,12) content-size 136.3125x48 flex-item children: inline
|
||||
line 0 width: 136.3125, height: 17.46875, bottom: 17.46875, baseline: 13.53125
|
||||
frag 0 from TextNode start: 0, length: 15, rect: [12,12 136.3125x17.46875]
|
||||
"LongPieceOfText"
|
||||
TextNode <#text>
|
||||
BlockContainer <div> at (150.3125,12) content-size 136.3125x48 flex-item children: inline
|
||||
line 0 width: 136.3125, height: 17.46875, bottom: 17.46875, baseline: 13.53125
|
||||
frag 0 from TextNode start: 0, length: 15, rect: [150.3125,12 136.3125x17.46875]
|
||||
"LongPieceOfText"
|
||||
TextNode <#text>
|
||||
BlockContainer <div> at (288.625,12) content-size 136.3125x48 flex-item children: inline
|
||||
line 0 width: 136.3125, height: 17.46875, bottom: 17.46875, baseline: 13.53125
|
||||
frag 0 from TextNode start: 0, length: 15, rect: [288.625,12 136.3125x17.46875]
|
||||
"LongPieceOfText"
|
||||
TextNode <#text>
|
||||
BlockContainer <div> at (426.9375,12) content-size 136.3125x48 flex-item children: inline
|
||||
line 0 width: 136.3125, height: 17.46875, bottom: 17.46875, baseline: 13.53125
|
||||
frag 0 from TextNode start: 0, length: 15, rect: [426.9375,12 136.3125x17.46875]
|
||||
"LongPieceOfText"
|
||||
TextNode <#text>
|
||||
BlockContainer <div.last.item> at (565.25,12) content-size 222.75x48 flex-item children: inline
|
||||
line 0 width: 136.3125, height: 17.46875, bottom: 17.46875, baseline: 13.53125
|
||||
frag 0 from TextNode start: 0, length: 15, rect: [565.25,12 136.3125x17.46875]
|
||||
"LongPieceOfText"
|
||||
TextNode <#text>
|
|
@ -0,0 +1,13 @@
|
|||
<!DOCTYPE html><html><head><style>
|
||||
* {
|
||||
border: 1px solid black;
|
||||
font-family: 'SerenitySans';
|
||||
}
|
||||
.flexbox {
|
||||
display: flex;
|
||||
height: 50px;
|
||||
}
|
||||
.last {
|
||||
width: 500px;
|
||||
}
|
||||
</style></head><body><div class="flexbox"><div>LongPieceOfText</div><div>LongPieceOfText</div><div>LongPieceOfText</div><div>LongPieceOfText</div><div class="last item">LongPieceOfText</div></div></div></body></html>
|
|
@ -972,10 +972,14 @@ void FlexFormattingContext::resolve_flexible_lengths_for_line(FlexLine& line)
|
|||
else if (used_flex_factor == FlexFactor::FlexShrinkFactor) {
|
||||
// For every unfrozen item on the line, multiply its flex shrink factor by its inner flex base size, and note this as its scaled flex shrink factor.
|
||||
for (auto& item : line.items) {
|
||||
if (item.frozen)
|
||||
continue;
|
||||
item.scaled_flex_shrink_factor = item.flex_factor.value() * item.flex_base_size.value();
|
||||
}
|
||||
auto sum_of_scaled_flex_shrink_factors_of_all_unfrozen_items_on_line = line.sum_of_scaled_flex_shrink_factor_of_unfrozen_items();
|
||||
for (auto& item : line.items) {
|
||||
if (item.frozen)
|
||||
continue;
|
||||
// Find the ratio of the item’s scaled flex shrink factor to the sum of the scaled flex shrink factors of all unfrozen items on the line.
|
||||
float ratio = 1.0f;
|
||||
if (sum_of_scaled_flex_shrink_factors_of_all_unfrozen_items_on_line != 0)
|
||||
|
|
Loading…
Reference in a new issue