mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 17:47:36 +00:00
LibWeb: Make DOMRect, DOMRectReadOnly and DOMRectList GC-allocated
This commit is contained in:
parent
44415af428
commit
57db2529cf
11 changed files with 125 additions and 79 deletions
|
@ -561,7 +561,7 @@ bool Element::serializes_as_void() const
|
|||
}
|
||||
|
||||
// https://drafts.csswg.org/cssom-view/#dom-element-getboundingclientrect
|
||||
NonnullRefPtr<Geometry::DOMRect> Element::get_bounding_client_rect() const
|
||||
JS::NonnullGCPtr<Geometry::DOMRect> Element::get_bounding_client_rect() const
|
||||
{
|
||||
// // NOTE: Ensure that layout is up-to-date before looking at metrics.
|
||||
const_cast<Document&>(document()).update_layout();
|
||||
|
@ -569,22 +569,22 @@ NonnullRefPtr<Geometry::DOMRect> Element::get_bounding_client_rect() const
|
|||
// FIXME: Support inline layout nodes as well.
|
||||
auto* paint_box = this->paint_box();
|
||||
if (!paint_box)
|
||||
return Geometry::DOMRect::create(0, 0, 0, 0);
|
||||
return Geometry::DOMRect::create_with_global_object(window(), 0, 0, 0, 0);
|
||||
|
||||
VERIFY(document().browsing_context());
|
||||
auto viewport_offset = document().browsing_context()->viewport_scroll_offset();
|
||||
|
||||
return Geometry::DOMRect::create(paint_box->absolute_rect().translated(-viewport_offset.x(), -viewport_offset.y()));
|
||||
return Geometry::DOMRect::create(window(), paint_box->absolute_rect().translated(-viewport_offset.x(), -viewport_offset.y()));
|
||||
}
|
||||
|
||||
// https://drafts.csswg.org/cssom-view/#dom-element-getclientrects
|
||||
NonnullRefPtr<Geometry::DOMRectList> Element::get_client_rects() const
|
||||
JS::NonnullGCPtr<Geometry::DOMRectList> Element::get_client_rects() const
|
||||
{
|
||||
NonnullRefPtrVector<Geometry::DOMRect> rects;
|
||||
Vector<JS::Handle<Geometry::DOMRect>> rects;
|
||||
|
||||
// 1. If the element on which it was invoked does not have an associated layout box return an empty DOMRectList object and stop this algorithm.
|
||||
if (!layout_node() || !layout_node()->is_box())
|
||||
return Geometry::DOMRectList::create(move(rects));
|
||||
return Geometry::DOMRectList::create(window(), move(rects));
|
||||
|
||||
// FIXME: 2. If the element has an associated SVG layout box return a DOMRectList object containing a single DOMRect object that describes
|
||||
// the bounding box of the element as defined by the SVG specification, applying the transforms that apply to the element and its ancestors.
|
||||
|
@ -597,8 +597,8 @@ NonnullRefPtr<Geometry::DOMRectList> Element::get_client_rects() const
|
|||
// - Replace each anonymous block box with its child box(es) and repeat this until no anonymous block boxes are left in the final list.
|
||||
|
||||
auto bounding_rect = get_bounding_client_rect();
|
||||
rects.append(bounding_rect);
|
||||
return Geometry::DOMRectList::create(move(rects));
|
||||
rects.append(*bounding_rect);
|
||||
return Geometry::DOMRectList::create(window(), move(rects));
|
||||
}
|
||||
|
||||
int Element::client_top() const
|
||||
|
|
|
@ -125,8 +125,8 @@ public:
|
|||
bool is_void_element() const;
|
||||
bool serializes_as_void() const;
|
||||
|
||||
NonnullRefPtr<Geometry::DOMRect> get_bounding_client_rect() const;
|
||||
NonnullRefPtr<Geometry::DOMRectList> get_client_rects() const;
|
||||
JS::NonnullGCPtr<Geometry::DOMRect> get_bounding_client_rect() const;
|
||||
JS::NonnullGCPtr<Geometry::DOMRectList> get_client_rects() const;
|
||||
|
||||
virtual RefPtr<Layout::Node> create_layout_node(NonnullRefPtr<CSS::StyleProperties>);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue