use crate::handlers::lua_handler::{LuaDeviceHandler, LuaHandler};
use crate::handlers::static_handler::{StaticDeviceHandler, StaticHandler};
use crate::{DeviceHandler, HandledDeviceRef, Handler};
#[derive(Debug)]
pub struct CombinedHandler {
stc: StaticHandler,
lua: Option<LuaHandler>,
}
#[derive(Clone, Debug)]
struct CombinedDeviceHandler {
stc: StaticDeviceHandler,
lua: Option<LuaDeviceHandler>,
}
impl CombinedHandler {
pub fn new(stc: StaticHandler, lua: Option<LuaHandler>) -> Self {
CombinedHandler { stc, lua }
}
}
impl Handler for CombinedHandler {
fn handler_for_device(&self, device_ref: HandledDeviceRef) -> impl DeviceHandler {
CombinedDeviceHandler {
stc: self.stc.handler_for_device(device_ref.clone()),
lua: self
.lua
.as_ref()
.map(|lua| lua.handler_for_device(device_ref.clone())),
}
}
}
impl DeviceHandler for CombinedDeviceHandler {
fn g_key_down(&mut self, key: u16) {
if let Some(lua) = self.lua.as_mut() {
lua.g_key_down(key)
};
self.stc.g_key_down(key);
}
fn g_key_up(&mut self, key: u16) {
if let Some(lua) = self.lua.as_mut() {
lua.g_key_up(key)
};
self.stc.g_key_up(key);
}
fn m_key_down(&mut self, key: u16) {
if let Some(lua) = self.lua.as_mut() {
lua.m_key_down(key)
};
self.stc.m_key_down(key);
}
fn m_key_up(&mut self, key: u16) {
if let Some(lua) = self.lua.as_mut() {
lua.m_key_up(key)
};
self.stc.m_key_up(key);
}
fn x_axis(&mut self, val: i32) {
if let Some(lua) = self.lua.as_mut() {
lua.x_axis(val)
};
self.stc.x_axis(val);
}
fn y_axis(&mut self, val: i32) {
if let Some(lua) = self.lua.as_mut() {
lua.y_axis(val)
};
self.stc.y_axis(val);
}
}