1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 18:27:35 +00:00

LibWeb: Treate SVG paintable coordinates as relative to <svg> element

Normally, paintable coordinates are relative to the nearest containing
block, but in the SVG case, since <svg> doesn't form a containing block,
we have to specialize the computation of SVGPaintable::absolute_rect().
This commit is contained in:
Andreas Kling 2022-03-24 16:06:43 +01:00
parent 88aca4c996
commit d5aca1c6c4
4 changed files with 26 additions and 6 deletions

View file

@ -66,14 +66,18 @@ Gfx::FloatPoint PaintableBox::effective_offset() const
return m_offset;
}
Gfx::FloatRect PaintableBox::compute_absolute_rect() const
{
Gfx::FloatRect rect { effective_offset(), content_size() };
for (auto const* block = containing_block(); block && block->paintable(); block = block->paintable()->containing_block())
rect.translate_by(block->paint_box()->effective_offset());
return rect;
}
Gfx::FloatRect PaintableBox::absolute_rect() const
{
if (!m_absolute_rect.has_value()) {
Gfx::FloatRect rect { effective_offset(), content_size() };
for (auto const* block = containing_block(); block && block->paintable(); block = block->paintable()->containing_block())
rect.translate_by(block->paint_box()->effective_offset());
m_absolute_rect = rect;
}
if (!m_absolute_rect.has_value())
m_absolute_rect = compute_absolute_rect();
return *m_absolute_rect;
}