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:
parent
fe8304d5de
commit
7088a87f49
3 changed files with 70 additions and 3 deletions
|
@ -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();
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue