mirror of
https://github.com/a-b-street/abstreet.git
synced 2024-11-25 11:44:25 +03:00
spawn submenus... but not in the right place. no input wiring yet.
This commit is contained in:
parent
7c5ba61e89
commit
b571f410ef
@ -90,7 +90,7 @@ pub fn run<T, G: GUI<T>>(mut gui: G, window_title: &str, initial_width: u32, ini
|
||||
gui.get_mut_canvas(),
|
||||
);
|
||||
if let Some(ref mut menu) = top_menu {
|
||||
menu.event(&mut input);
|
||||
menu.event(&mut input, gui.get_mut_canvas());
|
||||
}
|
||||
let (new_event_mode, data) =
|
||||
match panic::catch_unwind(panic::AssertUnwindSafe(|| gui.event(&mut input))) {
|
||||
|
@ -1,3 +1,4 @@
|
||||
use crate::menu::Menu;
|
||||
use crate::text::LINE_HEIGHT;
|
||||
use crate::{Canvas, Color, GfxCtx, Key, Text, UserInput};
|
||||
use geom::{Polygon, Pt2D};
|
||||
@ -9,6 +10,7 @@ pub struct TopMenu {
|
||||
txt: Text,
|
||||
|
||||
highlighted: Option<usize>,
|
||||
submenu: Option<Menu<Key>>,
|
||||
}
|
||||
|
||||
impl TopMenu {
|
||||
@ -46,16 +48,32 @@ impl TopMenu {
|
||||
folders,
|
||||
txt,
|
||||
highlighted: None,
|
||||
submenu: None,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn event(&mut self, input: &mut UserInput) {
|
||||
pub fn event(&mut self, input: &mut UserInput, canvas: &Canvas) {
|
||||
if let Some(cursor) = input.get_moved_mouse() {
|
||||
// TODO Could quickly filter out by checking y
|
||||
self.highlighted = self
|
||||
.folders
|
||||
.iter()
|
||||
.position(|f| f.rectangle.contains(cursor));
|
||||
return;
|
||||
}
|
||||
|
||||
if self.highlighted.is_some() && input.left_mouse_button_pressed() {
|
||||
self.submenu = Some(Menu::new(
|
||||
None,
|
||||
self.folders[self.highlighted.unwrap()]
|
||||
.actions
|
||||
.iter()
|
||||
.map(|(key, action)| (Some(*key), action.to_string(), *key))
|
||||
.collect(),
|
||||
false,
|
||||
canvas.get_cursor_in_map_space(),
|
||||
canvas,
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
@ -80,6 +98,10 @@ impl TopMenu {
|
||||
g.unfork(old_ctx);
|
||||
|
||||
canvas.draw_text_at_screenspace_topleft(g, self.txt.clone(), (0.0, 0.0));
|
||||
|
||||
if let Some(ref menu) = self.submenu {
|
||||
menu.draw(g, canvas);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user