mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 00:47:34 +00:00
LibWeb: Apply transform origin in Element::get_client_rects()
This commit is contained in:
parent
5a20353bc4
commit
76f767c867
3 changed files with 8 additions and 5 deletions
|
@ -1 +1 @@
|
||||||
{"x":68,"y":118,"width":100,"height":100,"top":118,"right":168,"bottom":218,"left":68}
|
{"x":18,"y":68,"width":200,"height":200,"top":68,"right":218,"bottom":268,"left":18}
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
width: 100px;
|
width: 100px;
|
||||||
height: 100px;
|
height: 100px;
|
||||||
opacity: 0.1;
|
opacity: 0.1;
|
||||||
transform: translate(10px, 10px);
|
transform: translate(10px, 10px) scale(2);
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<div class="transform-1">
|
<div class="transform-1">
|
||||||
|
|
|
@ -923,14 +923,17 @@ JS::NonnullGCPtr<Geometry::DOMRectList> Element::get_client_rects() const
|
||||||
|
|
||||||
Gfx::AffineTransform transform;
|
Gfx::AffineTransform transform;
|
||||||
for (auto const* containing_block = this->paintable_box(); containing_block; containing_block = containing_block->containing_block()) {
|
for (auto const* containing_block = this->paintable_box(); containing_block; containing_block = containing_block->containing_block()) {
|
||||||
transform = transform.multiply(Gfx::extract_2d_affine_transform(containing_block->transform()));
|
transform = Gfx::extract_2d_affine_transform(containing_block->transform()).multiply(transform);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto const* paintable = this->paintable();
|
auto const* paintable = this->paintable();
|
||||||
if (auto const* paintable_box = this->paintable_box()) {
|
if (auto const* paintable_box = this->paintable_box()) {
|
||||||
auto absolute_rect = paintable_box->absolute_border_box_rect();
|
auto absolute_rect = paintable_box->absolute_border_box_rect();
|
||||||
absolute_rect.translate_by(-viewport_offset.x(), -viewport_offset.y());
|
auto transformed_rect = transform.map(absolute_rect.translated(-paintable_box->transform_origin()).to_type<float>())
|
||||||
rects.append(Geometry::DOMRect::create(realm(), transform.map(absolute_rect.to_type<float>())));
|
.to_type<CSSPixels>()
|
||||||
|
.translated(paintable_box->transform_origin())
|
||||||
|
.translated(-viewport_offset);
|
||||||
|
rects.append(Geometry::DOMRect::create(realm(), transformed_rect.to_type<float>()));
|
||||||
} else if (paintable && is<Painting::InlinePaintable>(*paintable)) {
|
} else if (paintable && is<Painting::InlinePaintable>(*paintable)) {
|
||||||
auto const& inline_paintable = static_cast<Painting::InlinePaintable const&>(*paintable);
|
auto const& inline_paintable = static_cast<Painting::InlinePaintable const&>(*paintable);
|
||||||
auto absolute_rect = inline_paintable.bounding_rect();
|
auto absolute_rect = inline_paintable.bounding_rect();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue