mod context;
mod inspector;
mod keybind;
mod manager;
mod overlay_draw_list;
mod overlay_renderer;
pub use context::{MiddlewareContext, OverlayContext};
pub use inspector::InspectorMiddleware;
pub use keybind::{Keybind, KeybindRegistry, Modifiers};
pub use manager::MiddlewareManager;
pub use overlay_draw_list::{
OverlayCommand, OverlayDrawList, OverlayLine, OverlayQuadCmd, OverlayText,
};
pub use overlay_renderer::OverlayRenderer;
use crate::tree::UiTree;
pub trait UiMiddleware: Send + Sync {
fn name(&self) -> &'static str;
fn priority(&self) -> i32 {
0
}
fn pre_layout(&mut self, _ctx: &MiddlewareContext) -> bool {
false
}
fn post_layout(&mut self, _ctx: &MiddlewareContext) {}
fn pre_render(&mut self, _ctx: &MiddlewareContext) {}
fn post_render(&mut self, _ctx: &MiddlewareContext, _overlay: &mut OverlayContext) {}
fn handle_keybind(&mut self, _keybind: &Keybind, _ctx: &MiddlewareContext) -> bool {
false
}
fn handle_key_event(
&mut self,
_key: astrelis_winit::event::KeyCode,
_modifiers: Modifiers,
_pressed: bool,
_ctx: &MiddlewareContext,
) -> bool {
false
}
fn update(&mut self, _ctx: &MiddlewareContext, _tree: &UiTree) {}
fn is_enabled(&self) -> bool {
true
}
fn set_enabled(&mut self, _enabled: bool) {}
}
#[cfg(test)]
mod tests {
use super::*;
struct TestMiddleware {
enabled: bool,
pre_layout_called: bool,
should_pause: bool,
}
impl UiMiddleware for TestMiddleware {
fn name(&self) -> &'static str {
"test"
}
fn priority(&self) -> i32 {
100
}
fn pre_layout(&mut self, _ctx: &MiddlewareContext) -> bool {
self.pre_layout_called = true;
self.should_pause
}
fn is_enabled(&self) -> bool {
self.enabled
}
fn set_enabled(&mut self, enabled: bool) {
self.enabled = enabled;
}
}
#[test]
fn test_middleware_trait() {
let mut middleware = TestMiddleware {
enabled: true,
pre_layout_called: false,
should_pause: false,
};
assert_eq!(middleware.name(), "test");
assert_eq!(middleware.priority(), 100);
assert!(middleware.is_enabled());
middleware.set_enabled(false);
assert!(!middleware.is_enabled());
}
}