48 lines
1.5 KiB
Rust
48 lines
1.5 KiB
Rust
|
use core::{ffi::c_void, mem::variant_count};
|
||
|
|
||
|
use flipperzero_sys as sys;
|
||
|
|
||
|
use crate::{app::App, main_menu, popup_one, popup_two};
|
||
|
|
||
|
#[derive(Primitive)]
|
||
|
pub enum Scenes {
|
||
|
MainMenu = 0,
|
||
|
PopupOne = 1,
|
||
|
PopupTwo = 2
|
||
|
}
|
||
|
|
||
|
pub const SCENE_ON_ENTER_HANDLERS : [sys::AppSceneOnEnterCallback; variant_count::<Scenes>()] = [
|
||
|
Some(main_menu::scene_on_enter),
|
||
|
Some(popup_one::scene_on_enter),
|
||
|
Some(popup_two::scene_on_enter)
|
||
|
];
|
||
|
|
||
|
pub const SCENE_ON_EVENT_HANDLERS : [sys::AppSceneOnEventCallback; variant_count::<Scenes>()] = [
|
||
|
Some(main_menu::scene_on_event),
|
||
|
Some(popup_one::scene_on_event),
|
||
|
Some(popup_two::scene_on_event)
|
||
|
];
|
||
|
|
||
|
pub const SCENE_ON_EXIT_HANDLERS : [sys::AppSceneOnExitCallback; variant_count::<Scenes>()] = [
|
||
|
Some(main_menu::scene_on_exit),
|
||
|
Some(popup_one::scene_on_exit),
|
||
|
Some(popup_two::scene_on_exit)
|
||
|
];
|
||
|
|
||
|
pub const SCENE_EVENT_HANDLERS : sys::SceneManagerHandlers = sys::SceneManagerHandlers {
|
||
|
on_enter_handlers: SCENE_ON_ENTER_HANDLERS.as_ptr(),
|
||
|
on_event_handlers: SCENE_ON_EVENT_HANDLERS.as_ptr(),
|
||
|
on_exit_handlers: SCENE_ON_EXIT_HANDLERS.as_ptr(),
|
||
|
scene_num: variant_count::<Scenes>() as u32
|
||
|
};
|
||
|
|
||
|
pub unsafe extern "C" fn custom_event_callback(context: *mut c_void, event: u32) -> bool {
|
||
|
let app = context as *mut App;
|
||
|
sys::scene_manager_handle_custom_event((*app).scene_manager.unwrap(), event)
|
||
|
}
|
||
|
|
||
|
pub unsafe extern "C" fn navigation_event_callback(context: *mut c_void) -> bool {
|
||
|
let app = context as *mut App;
|
||
|
sys::scene_manager_handle_back_event((*app).scene_manager.unwrap())
|
||
|
}
|