summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibWeb/Geometry
diff options
context:
space:
mode:
authorAndreas Kling <kling@serenityos.org>2021-10-08 22:59:15 +0200
committerAndreas Kling <kling@serenityos.org>2021-10-08 23:00:49 +0200
commit3c0b55c284ba2a7e64a0c311f96cf3f3b9bcc14a (patch)
tree1e7c8412d96d41f0495649bcf35cb17087f9a743 /Userland/Libraries/LibWeb/Geometry
parent77f72c7cfeba83994815cd6aee859ea6336cb130 (diff)
downloadserenity-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.h21
-rw-r--r--Userland/Libraries/LibWeb/Geometry/DOMRect.idl15
-rw-r--r--Userland/Libraries/LibWeb/Geometry/DOMRectReadOnly.h51
-rw-r--r--Userland/Libraries/LibWeb/Geometry/DOMRectReadOnly.idl15
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;
+
+};