mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 17:57:35 +00:00
LibWeb: Use coordinate instead of WeakPtr for box->fragment connection
Using WeakPtr to remember which LineBoxFragment owns which Box was imposing some annoying constraints on the layout code. Importantly, it was forcing us to heap-allocate fragments, which makes it much harder to clone a FormattingState. This patch replaces the WeakPtr with a coordinate system instead. Fragments are referred to by their line box index + fragment index within the line box.
This commit is contained in:
parent
726edd2d3b
commit
16a47165ee
5 changed files with 21 additions and 14 deletions
|
@ -220,8 +220,10 @@ void Box::set_content_size(Gfx::FloatSize const& size)
|
|||
|
||||
Gfx::FloatPoint Box::effective_offset() const
|
||||
{
|
||||
if (m_containing_line_box_fragment)
|
||||
return m_containing_line_box_fragment->offset();
|
||||
if (m_containing_line_box_fragment.has_value()) {
|
||||
auto const& fragment = containing_block()->line_boxes()[m_containing_line_box_fragment->line_box_index].fragments()[m_containing_line_box_fragment->fragment_index];
|
||||
return fragment.offset();
|
||||
}
|
||||
return m_offset;
|
||||
}
|
||||
|
||||
|
@ -234,9 +236,9 @@ const Gfx::FloatRect Box::absolute_rect() const
|
|||
return rect;
|
||||
}
|
||||
|
||||
void Box::set_containing_line_box_fragment(LineBoxFragment& fragment)
|
||||
void Box::set_containing_line_box_fragment(LineBoxFragmentCoordinate fragment_coordinate)
|
||||
{
|
||||
m_containing_line_box_fragment = fragment.make_weak_ptr();
|
||||
m_containing_line_box_fragment = fragment_coordinate;
|
||||
}
|
||||
|
||||
StackingContext* Box::enclosing_stacking_context()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue