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:
parent
88aca4c996
commit
d5aca1c6c4
4 changed files with 26 additions and 6 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue