diff options
author | Daniel Adams <70986246+msub2@users.noreply.github.com> | 2024-04-07 23:43:48 -1000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-08 09:43:48 +0000 |
commit | e38b34a6298f3144e13ff41a5ab2021a35010923 (patch) | |
tree | a764e042a568eb8c56b4b8e3749c9ed10fc7429b /components/script/dom/gamepadlist.rs | |
parent | ddbec46e1fe6716e2cba5e073f62014c22539589 (diff) | |
download | servo-e38b34a6298f3144e13ff41a5ab2021a35010923.tar.gz servo-e38b34a6298f3144e13ff41a5ab2021a35010923.zip |
Gamepad: Remove GamepadList and fix dropped connection event on startup (#31684)
* Replace GamepadList
* Fix initial gamepad connection event from gilrs getting dropped
* Fix gamepad reconnection issues, use MutNullableDom
* Reduce some repetition in handle_gamepad_events
* Address feedback, move some steps to navigator methods
* Refactor internal navigator gamepad methods
* Add note re: unused gilrs index, adjust navigator gamepad methods
Diffstat (limited to 'components/script/dom/gamepadlist.rs')
-rw-r--r-- | components/script/dom/gamepadlist.rs | 79 |
1 files changed, 0 insertions, 79 deletions
diff --git a/components/script/dom/gamepadlist.rs b/components/script/dom/gamepadlist.rs deleted file mode 100644 index 847f8632ab7..00000000000 --- a/components/script/dom/gamepadlist.rs +++ /dev/null @@ -1,79 +0,0 @@ -/* 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 https://mozilla.org/MPL/2.0/. */ - -use dom_struct::dom_struct; - -use crate::dom::bindings::cell::DomRefCell; -use crate::dom::bindings::codegen::Bindings::GamepadListBinding::GamepadListMethods; -use crate::dom::bindings::reflector::{reflect_dom_object, Reflector}; -use crate::dom::bindings::root::{Dom, DomRoot}; -use crate::dom::gamepad::Gamepad; -use crate::dom::globalscope::GlobalScope; - -// https://www.w3.org/TR/gamepad/ -#[dom_struct] -pub struct GamepadList { - reflector_: Reflector, - list: DomRefCell<Vec<Dom<Gamepad>>>, -} - -impl GamepadList { - fn new_inherited(list: &[&Gamepad]) -> GamepadList { - GamepadList { - reflector_: Reflector::new(), - list: DomRefCell::new(list.iter().map(|g| Dom::from_ref(&**g)).collect()), - } - } - - pub fn new(global: &GlobalScope, list: &[&Gamepad]) -> DomRoot<GamepadList> { - reflect_dom_object(Box::new(GamepadList::new_inherited(list)), global) - } - - pub fn add_if_not_exists(&self, gamepads: &[DomRoot<Gamepad>]) { - for gamepad in gamepads { - if !self - .list - .borrow() - .iter() - .any(|g| g.gamepad_id() == gamepad.gamepad_id()) - { - self.list.borrow_mut().push(Dom::from_ref(gamepad)); - // Ensure that the gamepad has the correct index - gamepad.update_index(self.list.borrow().len() as i32 - 1); - } - } - } - - pub fn remove_gamepad(&self, index: usize) { - self.list.borrow_mut().remove(index); - } - - pub fn list(&self) -> Vec<Option<DomRoot<Gamepad>>> { - self.list - .borrow() - .iter() - .map(|gamepad| Some(DomRoot::from_ref(&**gamepad))) - .collect() - } -} - -impl GamepadListMethods for GamepadList { - // https://w3c.github.io/gamepad/#dom-navigator-getgamepads - fn Length(&self) -> u32 { - self.list.borrow().len() as u32 - } - - // https://w3c.github.io/gamepad/#dom-navigator-getgamepads - fn Item(&self, index: u32) -> Option<DomRoot<Gamepad>> { - self.list - .borrow() - .get(index as usize) - .map(|gamepad| DomRoot::from_ref(&**gamepad)) - } - - // https://w3c.github.io/gamepad/#dom-navigator-getgamepads - fn IndexedGetter(&self, index: u32) -> Option<DomRoot<Gamepad>> { - self.Item(index) - } -} |