73 lines
2.5 KiB
Rust
73 lines
2.5 KiB
Rust
use crate::VirtualMachineRuntime;
|
|
use crate::programs::prometeu_hub::window_manager::WindowManager;
|
|
use prometeu_hal::HardwareBridge;
|
|
use prometeu_hal::color::Color;
|
|
use prometeu_hal::log::{LogLevel, LogSource};
|
|
use prometeu_hal::window::Rect;
|
|
|
|
/// PrometeuHub: Launcher and system UI environment.
|
|
pub struct PrometeuHub {
|
|
pub window_manager: WindowManager,
|
|
}
|
|
|
|
impl PrometeuHub {
|
|
pub fn new() -> Self {
|
|
Self { window_manager: WindowManager::new() }
|
|
}
|
|
|
|
pub fn init(&mut self) {
|
|
// Initializes the Window System and lists apps
|
|
}
|
|
|
|
pub fn gui_update(&mut self, os: &mut VirtualMachineRuntime, hw: &mut dyn HardwareBridge) {
|
|
hw.gfx_mut().clear(Color::BLACK);
|
|
|
|
let mut next_window = None;
|
|
|
|
if hw.pad().a().pressed {
|
|
os.log(LogLevel::Debug, LogSource::Hub, 0, "window A opened".to_string());
|
|
next_window = Some((
|
|
"Green Window".to_string(),
|
|
Rect { x: 0, y: 0, w: 160, h: 90 },
|
|
Color::GREEN,
|
|
));
|
|
} else if hw.pad().b().pressed {
|
|
os.log(LogLevel::Debug, LogSource::Hub, 0, "window B opened".to_string());
|
|
next_window = Some((
|
|
"Indigo Window".to_string(),
|
|
Rect { x: 160, y: 0, w: 160, h: 90 },
|
|
Color::INDIGO,
|
|
));
|
|
} else if hw.pad().x().pressed {
|
|
os.log(LogLevel::Debug, LogSource::Hub, 0, "window X opened".to_string());
|
|
next_window = Some((
|
|
"Yellow Window".to_string(),
|
|
Rect { x: 0, y: 90, w: 160, h: 90 },
|
|
Color::YELLOW,
|
|
));
|
|
} else if hw.pad().y().pressed {
|
|
os.log(LogLevel::Debug, LogSource::Hub, 0, "window Y opened".to_string());
|
|
next_window =
|
|
Some(("Red Window".to_string(), Rect { x: 160, y: 90, w: 160, h: 90 }, Color::RED));
|
|
}
|
|
|
|
if let Some((title, rect, color)) = next_window {
|
|
self.window_manager.remove_all_windows();
|
|
let id = self.window_manager.add_window(title, rect, color);
|
|
self.window_manager.set_focus(id);
|
|
}
|
|
}
|
|
|
|
pub fn render(&mut self, _os: &mut VirtualMachineRuntime, hw: &mut dyn HardwareBridge) {
|
|
for window in &self.window_manager.windows {
|
|
hw.gfx_mut().fill_rect(
|
|
window.viewport.x,
|
|
window.viewport.y,
|
|
window.viewport.w,
|
|
window.viewport.h,
|
|
window.color,
|
|
);
|
|
}
|
|
}
|
|
}
|