aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/domquad.rs
diff options
context:
space:
mode:
authorGuillaume Gomez <guillaume1.gomez@gmail.com>2015-12-08 00:40:31 +0100
committerggomez <ggomez@ggo.ifr.lan>2015-12-18 17:37:10 +0100
commit823e1b96c3bd61c458f6ef91e2695c88f5312e09 (patch)
treefc24ceef96bc2b4a4b5a8c2a69d9f33fbc8985ec /components/script/dom/domquad.rs
parent338f66003e78250ce141584e87190661249c5589 (diff)
downloadservo-823e1b96c3bd61c458f6ef91e2695c88f5312e09.tar.gz
servo-823e1b96c3bd61c458f6ef91e2695c88f5312e09.zip
Add DOMQuad element
Diffstat (limited to 'components/script/dom/domquad.rs')
-rw-r--r--components/script/dom/domquad.rs119
1 files changed, 119 insertions, 0 deletions
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)
+ }
+}