1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 04:57:44 +00:00

LibWeb: Margin top collapsing between parent and first child

Implement collapsing of a box margin-top and first in-flow
child margin-top by saving function that updates y position
of containing block inside BlockMarginState and then for
every child until "non-collapsed through" child is reached
y position of containing block is updated by calling
update_box_waiting_fox_final_y_position_callback.
This commit is contained in:
Aliaksandr Kalenik 2022-12-25 14:01:14 +03:00 committed by Andreas Kling
parent fe8304d5de
commit 7088a87f49
3 changed files with 70 additions and 3 deletions

View file

@ -113,16 +113,36 @@ private:
struct BlockMarginState {
Vector<float> current_collapsible_margins;
Function<void(float)> block_container_y_position_update_callback;
void add_margin(float margin)
{
current_collapsible_margins.append(margin);
}
void register_block_container_y_position_update_callback(Function<void(float)> callback)
{
block_container_y_position_update_callback = move(callback);
}
float current_collapsed_margin() const;
bool has_block_container_waiting_for_final_y_position() const
{
return static_cast<bool>(block_container_y_position_update_callback);
}
void update_block_waiting_for_final_y_position() const
{
if (block_container_y_position_update_callback) {
float collapsed_margin = current_collapsed_margin();
block_container_y_position_update_callback(collapsed_margin);
}
}
void reset()
{
block_container_y_position_update_callback = {};
current_collapsible_margins.clear();
}
};