mirror of
https://github.com/fergalmoran/ladybird.git
synced 2026-01-06 00:25:12 +00:00
LibWeb: Make Painting::Box virtual and add Painting::BoxWithLines
BlockContainer paint boxes are the only ones that have line boxes associated, so let's not waste memory on line boxes in all the other types of boxes. This also adds Layout::Box::paint_box() and the more tightly typed Layout::BlockContainer::paint_box() to get at the paint box from the corresponding layout box.
This commit is contained in:
@@ -51,11 +51,11 @@ void BlockContainer::paint(PaintContext& context, Painting::PaintPhase phase)
|
||||
context.painter().translate(-m_scroll_offset.to_type<int>());
|
||||
}
|
||||
|
||||
for (auto& line_box : m_paint_box->m_line_boxes) {
|
||||
for (auto& line_box : paint_box()->line_boxes()) {
|
||||
for (auto& fragment : line_box.fragments()) {
|
||||
if (context.should_show_line_box_borders())
|
||||
context.painter().draw_rect(enclosing_int_rect(fragment.absolute_rect()), Color::Green);
|
||||
fragment.paint(context, phase);
|
||||
const_cast<LineBoxFragment&>(fragment).paint(context, phase);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -65,7 +65,7 @@ void BlockContainer::paint(PaintContext& context, Painting::PaintPhase phase)
|
||||
|
||||
// FIXME: Merge this loop with the above somehow..
|
||||
if (phase == Painting::PaintPhase::FocusOutline) {
|
||||
for (auto& line_box : m_paint_box->m_line_boxes) {
|
||||
for (auto& line_box : paint_box()->line_boxes()) {
|
||||
for (auto& fragment : line_box.fragments()) {
|
||||
auto* node = fragment.layout_node().dom_node();
|
||||
if (!node)
|
||||
@@ -86,7 +86,7 @@ HitTestResult BlockContainer::hit_test(const Gfx::IntPoint& position, HitTestTyp
|
||||
return Box::hit_test(position, type);
|
||||
|
||||
HitTestResult last_good_candidate;
|
||||
for (auto& line_box : m_paint_box->m_line_boxes) {
|
||||
for (auto& line_box : paint_box()->line_boxes()) {
|
||||
for (auto& fragment : line_box.fragments()) {
|
||||
if (is<Box>(fragment.layout_node()) && verify_cast<Box>(fragment.layout_node()).m_paint_box->stacking_context())
|
||||
continue;
|
||||
@@ -131,4 +131,9 @@ bool BlockContainer::handle_mousewheel(Badge<EventHandler>, const Gfx::IntPoint&
|
||||
return true;
|
||||
}
|
||||
|
||||
Painting::BoxWithLines const* BlockContainer::paint_box() const
|
||||
{
|
||||
return static_cast<Painting::BoxWithLines const*>(Box::paint_box());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user