diff options
author | Andreas Kling <kling@serenityos.org> | 2021-10-08 22:59:15 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2021-10-08 23:00:49 +0200 |
commit | 3c0b55c284ba2a7e64a0c311f96cf3f3b9bcc14a (patch) | |
tree | 1e7c8412d96d41f0495649bcf35cb17087f9a743 /Userland/Libraries/LibWeb/Geometry | |
parent | 77f72c7cfeba83994815cd6aee859ea6336cb130 (diff) | |
download | serenity-3c0b55c284ba2a7e64a0c311f96cf3f3b9bcc14a.zip |
LibWeb: Add DOMRectReadOnly and make DOMRect inherit from it
This matches the class hierarchy of the CSS Geometry Interfaces Module.
Diffstat (limited to 'Userland/Libraries/LibWeb/Geometry')
-rw-r--r-- | Userland/Libraries/LibWeb/Geometry/DOMRect.h | 21 | ||||
-rw-r--r-- | Userland/Libraries/LibWeb/Geometry/DOMRect.idl | 15 | ||||
-rw-r--r-- | Userland/Libraries/LibWeb/Geometry/DOMRectReadOnly.h | 51 | ||||
-rw-r--r-- | Userland/Libraries/LibWeb/Geometry/DOMRectReadOnly.idl | 15 |
4 files changed, 78 insertions, 24 deletions
diff --git a/Userland/Libraries/LibWeb/Geometry/DOMRect.h b/Userland/Libraries/LibWeb/Geometry/DOMRect.h index bed9698107..dd46bec587 100644 --- a/Userland/Libraries/LibWeb/Geometry/DOMRect.h +++ b/Userland/Libraries/LibWeb/Geometry/DOMRect.h @@ -6,18 +6,13 @@ #pragma once -#include <AK/RefCounted.h> -#include <LibGfx/Rect.h> -#include <LibWeb/Bindings/Wrappable.h> -#include <LibWeb/Forward.h> +#include <LibWeb/Geometry/DOMRectReadOnly.h> namespace Web::Geometry { -// FIXME: Split this into DOMRectReadOnly and DOMRect // https://drafts.fxtf.org/geometry/#DOMRect class DOMRect final - : public RefCounted<DOMRect> - , public Bindings::Wrappable { + : public DOMRectReadOnly { public: using WrapperType = Bindings::DOMRectWrapper; @@ -41,17 +36,15 @@ public: double width() const { return m_rect.width(); } double height() const { return m_rect.height(); } - double top() const { return min(y(), y() + height()); } - double right() const { return max(x(), x() + width()); } - double bottom() const { return max(y(), y() + height()); } - double left() const { return min(x(), x() + width()); } + void set_x(double x) { m_rect.set_x(x); } + void set_y(double y) { m_rect.set_y(y); } + void set_width(double width) { m_rect.set_width(width); } + void set_height(double height) { m_rect.set_height(height); } private: DOMRect(float x, float y, float width, float height) - : m_rect(x, y, width, height) + : DOMRectReadOnly(x, y, width, height) { } - - Gfx::FloatRect m_rect; }; } diff --git a/Userland/Libraries/LibWeb/Geometry/DOMRect.idl b/Userland/Libraries/LibWeb/Geometry/DOMRect.idl index 0e0c599f6b..de5ad59fb7 100644 --- a/Userland/Libraries/LibWeb/Geometry/DOMRect.idl +++ b/Userland/Libraries/LibWeb/Geometry/DOMRect.idl @@ -1,15 +1,10 @@ -interface DOMRect { +interface DOMRect : DOMRectReadOnly { constructor(optional double x = 0, optional double y = 0, optional double width = 0, optional double height = 0); - readonly attribute double x; - readonly attribute double y; - readonly attribute double width; - readonly attribute double height; - - readonly attribute double top; - readonly attribute double right; - readonly attribute double bottom; - readonly attribute double left; + attribute double x; + attribute double y; + attribute double width; + attribute double height; }; diff --git a/Userland/Libraries/LibWeb/Geometry/DOMRectReadOnly.h b/Userland/Libraries/LibWeb/Geometry/DOMRectReadOnly.h new file mode 100644 index 0000000000..1581ef6318 --- /dev/null +++ b/Userland/Libraries/LibWeb/Geometry/DOMRectReadOnly.h @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2021, Andreas Kling <kling@serenityos.org> + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include <AK/RefCounted.h> +#include <LibGfx/Rect.h> +#include <LibWeb/Bindings/Wrappable.h> +#include <LibWeb/Forward.h> + +namespace Web::Geometry { + +// https://drafts.fxtf.org/geometry/#domrectreadonly +class DOMRectReadOnly + : public RefCounted<DOMRectReadOnly> + , public Bindings::Wrappable { +public: + using WrapperType = Bindings::DOMRectReadOnlyWrapper; + + static NonnullRefPtr<DOMRectReadOnly> create_with_global_object(Bindings::WindowObject&, double x = 0, double y = 0, double width = 0, double height = 0) + { + return DOMRectReadOnly::create(x, y, width, height); + } + + static NonnullRefPtr<DOMRectReadOnly> create(double x = 0, double y = 0, double width = 0, double height = 0) + { + return adopt_ref(*new DOMRectReadOnly(x, y, width, height)); + } + + double x() const { return m_rect.x(); } + double y() const { return m_rect.y(); } + double width() const { return m_rect.width(); } + double height() const { return m_rect.height(); } + + double top() const { return min(y(), y() + height()); } + double right() const { return max(x(), x() + width()); } + double bottom() const { return max(y(), y() + height()); } + double left() const { return min(x(), x() + width()); } + +protected: + DOMRectReadOnly(float x, float y, float width, float height) + : m_rect(x, y, width, height) + { + } + + Gfx::FloatRect m_rect; +}; +} diff --git a/Userland/Libraries/LibWeb/Geometry/DOMRectReadOnly.idl b/Userland/Libraries/LibWeb/Geometry/DOMRectReadOnly.idl new file mode 100644 index 0000000000..9e503c5d47 --- /dev/null +++ b/Userland/Libraries/LibWeb/Geometry/DOMRectReadOnly.idl @@ -0,0 +1,15 @@ +interface DOMRectReadOnly { + + constructor(optional double x = 0, optional double y = 0, optional double width = 0, optional double height = 0); + + readonly attribute double x; + readonly attribute double y; + readonly attribute double width; + readonly attribute double height; + + readonly attribute double top; + readonly attribute double right; + readonly attribute double bottom; + readonly attribute double left; + +}; |