aboutsummaryrefslogtreecommitdiffstats
path: root/components/script
diff options
context:
space:
mode:
Diffstat (limited to 'components/script')
-rw-r--r--components/script/dom/dompoint.rs6
-rw-r--r--components/script/dom/domquad.rs119
-rw-r--r--components/script/dom/mod.rs1
-rw-r--r--components/script/dom/webidls/DOMPoint.webidl7
-rw-r--r--components/script/dom/webidls/DOMPointReadOnly.webidl7
-rw-r--r--components/script/dom/webidls/DOMQuad.webidl33
6 files changed, 165 insertions, 8 deletions
diff --git a/components/script/dom/dompoint.rs b/components/script/dom/dompoint.rs
index e654b56c730..906a30ea617 100644
--- a/components/script/dom/dompoint.rs
+++ b/components/script/dom/dompoint.rs
@@ -2,7 +2,7 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-use dom::bindings::codegen::Bindings::DOMPointBinding::{DOMPointMethods, Wrap};
+use dom::bindings::codegen::Bindings::DOMPointBinding::{DOMPointInit, DOMPointMethods, Wrap};
use dom::bindings::codegen::Bindings::DOMPointReadOnlyBinding::DOMPointReadOnlyMethods;
use dom::bindings::error::Fallible;
use dom::bindings::global::GlobalRef;
@@ -35,6 +35,10 @@ impl DOMPoint {
-> Fallible<Root<DOMPoint>> {
Ok(DOMPoint::new(global, x, y, z, w))
}
+
+ pub fn new_from_init(global: GlobalRef, p: &DOMPointInit) -> Root<DOMPoint> {
+ DOMPoint::new(global, p.x, p.y, p.z, p.w)
+ }
}
impl DOMPointMethods for DOMPoint {
diff --git a/components/script/dom/domquad.rs b/components/script/dom/domquad.rs
new file mode 100644
index 00000000000..bdbc45737ba
--- /dev/null
+++ b/components/script/dom/domquad.rs
@@ -0,0 +1,119 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use dom::bindings::codegen::Bindings::DOMPointBinding::{DOMPointInit, DOMPointMethods};
+use dom::bindings::codegen::Bindings::DOMPointReadOnlyBinding::DOMPointReadOnlyMethods;
+use dom::bindings::codegen::Bindings::DOMQuadBinding::{DOMQuadInit, DOMQuadMethods, Wrap};
+use dom::bindings::codegen::Bindings::DOMRectBinding::DOMRectMethods;
+use dom::bindings::codegen::Bindings::DOMRectReadOnlyBinding::{DOMRectInit, DOMRectReadOnlyMethods};
+use dom::bindings::error::Fallible;
+use dom::bindings::global::{GlobalRef, global_root_from_reflector};
+use dom::bindings::js::{Root, JS};
+use dom::bindings::reflector::{Reflector, reflect_dom_object};
+use dom::dompoint::DOMPoint;
+use dom::domrect::DOMRect;
+
+// https://drafts.fxtf.org/geometry/#DOMQuad
+#[dom_struct]
+pub struct DOMQuad {
+ reflector_: Reflector,
+ p1: JS<DOMPoint>,
+ p2: JS<DOMPoint>,
+ p3: JS<DOMPoint>,
+ p4: JS<DOMPoint>,
+}
+
+impl DOMQuad {
+ fn new_inherited(p1: &DOMPoint,
+ p2: &DOMPoint,
+ p3: &DOMPoint,
+ p4: &DOMPoint)
+ -> DOMQuad {
+
+ DOMQuad {
+ reflector_: Reflector::new(),
+ p1: JS::from_ref(p1),
+ p2: JS::from_ref(p2),
+ p3: JS::from_ref(p3),
+ p4: JS::from_ref(p4),
+ }
+ }
+
+ pub fn new(global: GlobalRef,
+ p1: &DOMPoint,
+ p2: &DOMPoint,
+ p3: &DOMPoint,
+ p4: &DOMPoint) -> Root<DOMQuad> {
+ reflect_dom_object(box DOMQuad::new_inherited(p1, p2, p3, p4),
+ global,
+ Wrap)
+ }
+
+ pub fn Constructor(global: GlobalRef,
+ p1: &DOMPointInit,
+ p2: &DOMPointInit,
+ p3: &DOMPointInit,
+ p4: &DOMPointInit)
+ -> Fallible<Root<DOMQuad>> {
+ Ok(DOMQuad::new(global,
+ &*DOMPoint::new_from_init(global, p1),
+ &*DOMPoint::new_from_init(global, p2),
+ &*DOMPoint::new_from_init(global, p3),
+ &*DOMPoint::new_from_init(global, p4)))
+ }
+
+ // https://drafts.fxtf.org/geometry/#dom-domquad-fromrect
+ pub fn FromRect(global: GlobalRef, other: &DOMRectInit) -> Root<DOMQuad> {
+ DOMQuad::new(global,
+ &*DOMPoint::new(global, other.x, other.y, 0f64, 1f64),
+ &*DOMPoint::new(global, other.x + other.width, other.y, 0f64, 1f64),
+ &*DOMPoint::new(global, other.x + other.width, other.y + other.height, 0f64, 1f64),
+ &*DOMPoint::new(global, other.x, other.y + other.height, 0f64, 1f64))
+ }
+
+ // https://drafts.fxtf.org/geometry/#dom-domquad-fromquad
+ pub fn FromQuad(global: GlobalRef, other: &DOMQuadInit) -> Root<DOMQuad> {
+ DOMQuad::new(global,
+ &DOMPoint::new_from_init(global, &other.p1),
+ &DOMPoint::new_from_init(global, &other.p2),
+ &DOMPoint::new_from_init(global, &other.p3),
+ &DOMPoint::new_from_init(global, &other.p4))
+ }
+}
+
+impl DOMQuadMethods for DOMQuad {
+ // https://drafts.fxtf.org/geometry/#dom-domquad-p1
+ fn P1(&self) -> Root<DOMPoint> {
+ Root::from_ref(&self.p1)
+ }
+
+ // https://drafts.fxtf.org/geometry/#dom-domquad-p2
+ fn P2(&self) -> Root<DOMPoint> {
+ Root::from_ref(&self.p2)
+ }
+
+ // https://drafts.fxtf.org/geometry/#dom-domquad-p3
+ fn P3(&self) -> Root<DOMPoint> {
+ Root::from_ref(&self.p3)
+ }
+
+ // https://drafts.fxtf.org/geometry/#dom-domquad-p4
+ fn P4(&self) -> Root<DOMPoint> {
+ Root::from_ref(&self.p4)
+ }
+
+ // https://drafts.fxtf.org/geometry/#dom-domquad-getbounds
+ fn GetBounds(&self) -> Root<DOMRect> {
+ let left = self.p1.X().min(self.p2.X()).min(self.p3.X()).min(self.p4.X());
+ let top = self.p1.Y().min(self.p2.Y()).min(self.p3.Y()).min(self.p4.Y());
+ let right = self.p1.X().max(self.p2.X()).max(self.p3.X()).max(self.p4.X());
+ let bottom = self.p1.Y().max(self.p2.Y()).max(self.p3.Y()).max(self.p4.Y());
+
+ DOMRect::new(global_root_from_reflector(self).r(),
+ left,
+ top,
+ right - left,
+ bottom - top)
+ }
+}
diff --git a/components/script/dom/mod.rs b/components/script/dom/mod.rs
index 5e4c5609735..dedbcff986a 100644
--- a/components/script/dom/mod.rs
+++ b/components/script/dom/mod.rs
@@ -236,6 +236,7 @@ pub mod domimplementation;
pub mod domparser;
pub mod dompoint;
pub mod dompointreadonly;
+pub mod domquad;
pub mod domrect;
pub mod domrectlist;
pub mod domrectreadonly;
diff --git a/components/script/dom/webidls/DOMPoint.webidl b/components/script/dom/webidls/DOMPoint.webidl
index f3b9d8cd3c5..b8fc78d571f 100644
--- a/components/script/dom/webidls/DOMPoint.webidl
+++ b/components/script/dom/webidls/DOMPoint.webidl
@@ -20,3 +20,10 @@ interface DOMPoint : DOMPointReadOnly {
inherit attribute unrestricted double z;
inherit attribute unrestricted double w;
};
+
+dictionary DOMPointInit {
+ unrestricted double x = 0;
+ unrestricted double y = 0;
+ unrestricted double z = 0;
+ unrestricted double w = 1;
+};
diff --git a/components/script/dom/webidls/DOMPointReadOnly.webidl b/components/script/dom/webidls/DOMPointReadOnly.webidl
index cab781a2f97..021d129f132 100644
--- a/components/script/dom/webidls/DOMPointReadOnly.webidl
+++ b/components/script/dom/webidls/DOMPointReadOnly.webidl
@@ -20,10 +20,3 @@ interface DOMPointReadOnly {
readonly attribute unrestricted double z;
readonly attribute unrestricted double w;
};
-
-dictionary DOMPointInit {
- unrestricted double x = 0;
- unrestricted double y = 0;
- unrestricted double z = 0;
- unrestricted double w = 1;
-};
diff --git a/components/script/dom/webidls/DOMQuad.webidl b/components/script/dom/webidls/DOMQuad.webidl
new file mode 100644
index 00000000000..0f3f11fac41
--- /dev/null
+++ b/components/script/dom/webidls/DOMQuad.webidl
@@ -0,0 +1,33 @@
+/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+/*
+ * The origin of this IDL file is
+ * https://drafts.fxtf.org/geometry/#DOMQuad
+ *
+ * Copyright:
+ * To the extent possible under law, the editors have waived all copyright and
+ * related or neighboring rights to this work.
+ */
+
+[Constructor(optional DOMPointInit p1, optional DOMPointInit p2,
+ optional DOMPointInit p3, optional DOMPointInit p4),
+ /*Exposed=(Window,Worker)*/]
+interface DOMQuad {
+ [NewObject] static DOMQuad fromRect(optional DOMRectInit other);
+ [NewObject] static DOMQuad fromQuad(optional DOMQuadInit other);
+
+ [SameObject] readonly attribute DOMPoint p1;
+ [SameObject] readonly attribute DOMPoint p2;
+ [SameObject] readonly attribute DOMPoint p3;
+ [SameObject] readonly attribute DOMPoint p4;
+ [NewObject] DOMRect getBounds();
+};
+
+dictionary DOMQuadInit {
+ DOMPointInit p1;
+ DOMPointInit p2;
+ DOMPointInit p3;
+ DOMPointInit p4;
+};