Support rebinding gamepad inputs
This commit is contained in:
+13
-7
@@ -8,7 +8,7 @@ use egui::{
|
||||
use gilrs::{EventType, Gilrs};
|
||||
use winit::{
|
||||
application::ApplicationHandler,
|
||||
event::{KeyEvent, WindowEvent},
|
||||
event::WindowEvent,
|
||||
event_loop::{ActiveEventLoop, EventLoopProxy},
|
||||
window::Window,
|
||||
};
|
||||
@@ -83,7 +83,7 @@ impl ApplicationHandler<UserEvent> for Application {
|
||||
match &event {
|
||||
WindowEvent::KeyboardInput { event, .. } => {
|
||||
self.controllers.handle_key_event(event);
|
||||
viewport.handle_key_event(event);
|
||||
viewport.app.handle_key_event(event);
|
||||
}
|
||||
WindowEvent::Focused(new_focused) => {
|
||||
self.focused = new_focused.then_some(viewport_id);
|
||||
@@ -143,7 +143,17 @@ impl ApplicationHandler<UserEvent> for Application {
|
||||
|
||||
fn user_event(&mut self, event_loop: &ActiveEventLoop, event: UserEvent) {
|
||||
match event {
|
||||
UserEvent::GamepadEvent(event) => self.controllers.handle_gamepad_event(&event),
|
||||
UserEvent::GamepadEvent(event) => {
|
||||
self.controllers.handle_gamepad_event(&event);
|
||||
let Some(viewport) = self
|
||||
.focused
|
||||
.as_ref()
|
||||
.and_then(|id| self.viewports.get_mut(id))
|
||||
else {
|
||||
return;
|
||||
};
|
||||
viewport.app.handle_gamepad_event(&event);
|
||||
}
|
||||
UserEvent::OpenInput => {
|
||||
let input = InputWindow::new(self.mappings.clone());
|
||||
self.open(event_loop, Box::new(input));
|
||||
@@ -248,10 +258,6 @@ impl Viewport {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn handle_key_event(&mut self, event: &KeyEvent) {
|
||||
self.app.handle_key_event(event);
|
||||
}
|
||||
|
||||
fn redraw(&mut self, event_loop: &ActiveEventLoop) -> Option<Action> {
|
||||
let mut input = self.state.take_egui_input(&self.window);
|
||||
input.viewports = std::iter::once((ViewportId::ROOT, self.info.clone())).collect();
|
||||
|
||||
Reference in New Issue
Block a user