diff options
author | Imanol Fernandez <mortimergoro@gmail.com> | 2017-03-29 15:41:40 +0200 |
---|---|---|
committer | Imanol Fernandez <mortimergoro@gmail.com> | 2017-04-12 15:43:14 +0200 |
commit | 0158b5b2af28a32eccdd36060c533bc33e862776 (patch) | |
tree | f006ef7d984e2c07458e72ac96fd62a4366f3f7c /components/script/dom/gamepadbutton.rs | |
parent | 69eda6a60cece433e91d4bc578e94d8d5dfc9544 (diff) | |
download | servo-0158b5b2af28a32eccdd36060c533bc33e862776.tar.gz servo-0158b5b2af28a32eccdd36060c533bc33e862776.zip |
Implement Gamepad API
Diffstat (limited to 'components/script/dom/gamepadbutton.rs')
-rw-r--r-- | components/script/dom/gamepadbutton.rs | 61 |
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); + } +} |