script/dom/gamepad/
gamepadbutton.rs1use std::cell::Cell;
6
7use dom_struct::dom_struct;
8
9use crate::dom::bindings::codegen::Bindings::GamepadButtonBinding::GamepadButtonMethods;
10use crate::dom::bindings::num::Finite;
11use crate::dom::bindings::reflector::{Reflector, reflect_dom_object};
12use crate::dom::bindings::root::DomRoot;
13use crate::dom::window::Window;
14use crate::script_runtime::CanGc;
15
16#[dom_struct]
17pub(crate) struct GamepadButton {
18 reflector_: Reflector,
19 pressed: Cell<bool>,
20 touched: Cell<bool>,
21 value: Cell<f64>,
22}
23
24impl GamepadButton {
25 pub(crate) fn new_inherited(pressed: bool, touched: bool) -> GamepadButton {
26 Self {
27 reflector_: Reflector::new(),
28 pressed: Cell::new(pressed),
29 touched: Cell::new(touched),
30 value: Cell::new(0.0),
31 }
32 }
33
34 pub(crate) fn new(
35 window: &Window,
36 pressed: bool,
37 touched: bool,
38 can_gc: CanGc,
39 ) -> DomRoot<GamepadButton> {
40 reflect_dom_object(
41 Box::new(GamepadButton::new_inherited(pressed, touched)),
42 window,
43 can_gc,
44 )
45 }
46}
47
48impl GamepadButtonMethods<crate::DomTypeHolder> for GamepadButton {
49 fn Pressed(&self) -> bool {
51 self.pressed.get()
52 }
53
54 fn Touched(&self) -> bool {
56 self.touched.get()
57 }
58
59 fn Value(&self) -> Finite<f64> {
61 Finite::wrap(self.value.get())
62 }
63}
64
65impl GamepadButton {
66 pub(crate) fn update(&self, pressed: bool, touched: bool, value: f64) {
67 self.pressed.set(pressed);
68 self.touched.set(touched);
69 self.value.set(value);
70 }
71}