aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/gamepadbutton.rs
diff options
context:
space:
mode:
authorImanol Fernandez <mortimergoro@gmail.com>2017-03-29 15:41:40 +0200
committerImanol Fernandez <mortimergoro@gmail.com>2017-04-12 15:43:14 +0200
commit0158b5b2af28a32eccdd36060c533bc33e862776 (patch)
treef006ef7d984e2c07458e72ac96fd62a4366f3f7c /components/script/dom/gamepadbutton.rs
parent69eda6a60cece433e91d4bc578e94d8d5dfc9544 (diff)
downloadservo-0158b5b2af28a32eccdd36060c533bc33e862776.tar.gz
servo-0158b5b2af28a32eccdd36060c533bc33e862776.zip
Implement Gamepad API
Diffstat (limited to 'components/script/dom/gamepadbutton.rs')
-rw-r--r--components/script/dom/gamepadbutton.rs61
1 files changed, 61 insertions, 0 deletions
diff --git a/components/script/dom/gamepadbutton.rs b/components/script/dom/gamepadbutton.rs
new file mode 100644
index 00000000000..ff0c7271e5b
--- /dev/null
+++ b/components/script/dom/gamepadbutton.rs
@@ -0,0 +1,61 @@
+/* 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::GamepadButtonBinding;
+use dom::bindings::codegen::Bindings::GamepadButtonBinding::GamepadButtonMethods;
+use dom::bindings::js::Root;
+use dom::bindings::num::Finite;
+use dom::bindings::reflector::{Reflector, reflect_dom_object};
+use dom::globalscope::GlobalScope;
+use dom_struct::dom_struct;
+use std::cell::Cell;
+
+#[dom_struct]
+pub struct GamepadButton {
+ reflector_: Reflector,
+ pressed: Cell<bool>,
+ touched: Cell<bool>,
+ value: Cell<f64>,
+}
+
+impl GamepadButton {
+ pub fn new_inherited(pressed: bool, touched: bool) -> GamepadButton {
+ Self {
+ reflector_: Reflector::new(),
+ pressed: Cell::new(pressed),
+ touched: Cell::new(touched),
+ value: Cell::new(0.0),
+ }
+ }
+
+ pub fn new(global: &GlobalScope, pressed: bool, touched: bool) -> Root<GamepadButton> {
+ reflect_dom_object(box GamepadButton::new_inherited(pressed, touched),
+ global,
+ GamepadButtonBinding::Wrap)
+ }
+}
+
+impl GamepadButtonMethods for GamepadButton {
+ // https://www.w3.org/TR/gamepad/#widl-GamepadButton-pressed
+ fn Pressed(&self) -> bool {
+ self.pressed.get()
+ }
+
+ // https://www.w3.org/TR/gamepad/#widl-GamepadButton-touched
+ fn Touched(&self) -> bool {
+ self.touched.get()
+ }
+
+ // https://www.w3.org/TR/gamepad/#widl-GamepadButton-value
+ fn Value(&self) -> Finite<f64> {
+ Finite::wrap(self.value.get())
+ }
+}
+
+impl GamepadButton {
+ pub fn update(&self, pressed: bool, touched: bool) {
+ self.pressed.set(pressed);
+ self.touched.set(touched);
+ }
+}