43 lines
1.1 KiB
Rust
43 lines
1.1 KiB
Rust
// Copyright (c) 2022 Marceline Cramer
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
#![allow(dead_code)]
|
|
|
|
use super::*;
|
|
|
|
static mut PANEL_IMPLS: Vec<Box<dyn PanelImpl>> = Vec::new();
|
|
|
|
pub fn bind_panel<T: BindPanel>(panel: u32, msg: u32) -> u32 {
|
|
unsafe {
|
|
let panel = Panel(panel);
|
|
let msg = Message(msg);
|
|
let panel_impl = T::bind(panel, msg);
|
|
let id = PANEL_IMPLS.len() as u32;
|
|
PANEL_IMPLS.push(panel_impl);
|
|
id
|
|
}
|
|
}
|
|
|
|
pub fn update(panel_data: u32, dt: f32) {
|
|
let panel = unsafe { &mut PANEL_IMPLS[panel_data as usize] };
|
|
panel.update(dt);
|
|
}
|
|
|
|
pub fn draw(panel_data: u32) {
|
|
let panel = unsafe { &mut PANEL_IMPLS[panel_data as usize] };
|
|
panel.draw();
|
|
}
|
|
|
|
pub fn on_cursor_event(panel_data: u32, kind: u32, x: f32, y: f32) {
|
|
let panel = unsafe { &mut PANEL_IMPLS[panel_data as usize] };
|
|
let at = Vec2::new(x, y);
|
|
let kind = CursorEventKind::from_u32(kind).unwrap();
|
|
panel.on_cursor_event(kind, at);
|
|
}
|
|
|
|
pub fn on_message(panel_data: u32, msg: u32) {
|
|
let panel = unsafe { &mut PANEL_IMPLS[panel_data as usize] };
|
|
let msg = Message(msg);
|
|
panel.on_message(msg)
|
|
}
|