Skip to content

Commit d936138

Browse files
DRKV333tordex
authored andcommitted
Use hypothetical main size for collecting lines and choosing factor
1 parent 6f20541 commit d936138

File tree

4 files changed

+26
-11
lines changed

4 files changed

+26
-11
lines changed

include/litehtml/flex_item.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,13 @@ namespace litehtml
1515
{
1616
public:
1717
std::shared_ptr<render_item> el;
18+
19+
// All sizes should be interpreted as outer/margin-box sizes.
1820
pixel_t base_size;
1921
pixel_t min_size;
2022
def_value<pixel_t> max_size;
21-
pixel_t main_size;
23+
pixel_t main_size; // Holds the outer hypothetical main size before distribute_free_space, and the used outer main size after.
24+
2225
int grow;
2326
int shrink;
2427
pixel_t scaled_flex_shrink_factor;

src/flex_item.cpp

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,18 @@ void litehtml::flex_item::init(const litehtml::containing_block_context &self_si
2828
{
2929
align = el->css().get_flex_align_self();
3030
}
31-
main_size = base_size;
31+
32+
if (base_size < min_size)
33+
{
34+
main_size = min_size;
35+
} else if (!max_size.is_default() && base_size > max_size)
36+
{
37+
main_size = max_size;
38+
} else
39+
{
40+
main_size = base_size;
41+
}
42+
3243
scaled_flex_shrink_factor = base_size * shrink;
3344
frozen = false;
3445
}

src/flex_line.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ void litehtml::flex_line::distribute_free_space(pixel_t container_main_size)
77
// Determine the used flex factor. Sum the outer hypothetical main sizes of all items on the line.
88
// If the sum is less than the flex container’s inner main size, use the flex grow factor for the
99
// rest of this algorithm; otherwise, use the flex shrink factor.
10-
pixel_t initial_free_space = container_main_size - base_size;
10+
pixel_t initial_free_space = container_main_size - main_size;
1111
bool grow;
1212
int total_flex_factor;
1313
if(initial_free_space < 0)
@@ -21,7 +21,7 @@ void litehtml::flex_line::distribute_free_space(pixel_t container_main_size)
2121
{
2222
for(auto &item : items)
2323
{
24-
item->main_size += initial_free_space * item->shrink / 1000;
24+
item->main_size = item->base_size + initial_free_space * item->shrink / 1000;
2525
}
2626
return;
2727
}
@@ -36,7 +36,7 @@ void litehtml::flex_line::distribute_free_space(pixel_t container_main_size)
3636
{
3737
for(auto &item : items)
3838
{
39-
item->main_size += initial_free_space * item->grow / 1000;
39+
item->main_size = item->base_size + initial_free_space * item->grow / 1000;
4040
}
4141
return;
4242
}
@@ -195,16 +195,16 @@ void litehtml::flex_line::init(pixel_t container_main_size, bool fit_container,
195195
const litehtml::containing_block_context &self_size,
196196
litehtml::formatting_context *fmt_ctx)
197197
{
198-
cross_size = 0;
199-
main_size = 0;
200-
first_baseline.set(0, baseline::baseline_type_none);
201-
last_baseline.set(0, baseline::baseline_type_none);
202-
203198
if(!fit_container)
204199
{
205200
distribute_free_space(container_main_size);
206201
}
207202

203+
cross_size = 0;
204+
main_size = 0;
205+
first_baseline.set(0, baseline::baseline_type_none);
206+
last_baseline.set(0, baseline::baseline_type_none);
207+
208208
if(is_row_direction)
209209
{
210210
def_value<pixel_t> first_baseline_top = 0;

src/render_flex.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -301,12 +301,13 @@ std::list<litehtml::flex_line> litehtml::render_item_flex::get_lines(const liteh
301301
// Add flex items to lines
302302
for(auto& item : items)
303303
{
304-
if(!line.items.empty() && !single_line && line.base_size + item->base_size > container_main_size)
304+
if(!line.items.empty() && !single_line && line.main_size + item->main_size > container_main_size)
305305
{
306306
lines.emplace_back(line);
307307
line = flex_line(reverse_main, reverse_cross);
308308
}
309309
line.base_size += item->base_size;
310+
line.main_size += item->main_size;
310311
line.total_grow += item->grow;
311312
line.total_shrink += item->shrink;
312313
if(!item->auto_margin_main_start.is_default()) line.num_auto_margin_main_start++;

0 commit comments

Comments
 (0)