make canvas know initial screen size, so centering on map pt initially does work

This commit is contained in:
Dustin Carlino 2018-12-18 15:30:06 -08:00
parent 78f3107d8a
commit b7f31cc8f4
9 changed files with 19 additions and 25 deletions

View File

@ -20,7 +20,7 @@
"y": 394.67230224609377
},
"intersection_type": "TrafficSignal",
"label": "bottleneck"
"label": null
}
],
[

View File

@ -33,16 +33,14 @@ fn main() {
.unwrap()
.start("./profile")
.unwrap();*/
let canvas = ezgui::Canvas::new();
let mut canvas = ezgui::Canvas::new(1024, 768);
if flags.sim_flags.load == "../data/raw_maps/ban_left_turn.abst" {
ezgui::run(
ui::UI::new(
tutorial::TutorialState::new(flags.sim_flags, &canvas),
tutorial::TutorialState::new(flags.sim_flags, &mut canvas),
canvas,
),
"A/B Street",
1024,
768,
);
} else {
ezgui::run(
@ -51,8 +49,6 @@ fn main() {
canvas,
),
"A/B Street",
1024,
768,
);
}
}

View File

@ -23,8 +23,8 @@ enum State {
const SPAWN_CARS_PER_BORDER: usize = 100 * 10;
impl TutorialState {
pub fn new(flags: SimFlags, canvas: &Canvas) -> TutorialState {
TutorialState {
pub fn new(flags: SimFlags, canvas: &mut Canvas) -> TutorialState {
let s = TutorialState {
main: DefaultUIState::new(flags, None, canvas),
state: State::GiveInstructions(LogScroller::new_from_lines(vec![
"Welcome to the A/B Street tutorial!".to_string(),
@ -35,7 +35,8 @@ impl TutorialState {
"".to_string(),
"Press ENTER to start the game!".to_string(),
])),
}
};
s
}
}
@ -56,9 +57,6 @@ impl UIState for TutorialState {
) {
match self.state {
State::GiveInstructions(ref mut scroller) => {
// TODO We really want to do this once in the constructor, but window size isn't
// known yet.
canvas.center_on_map_pt(self.main.primary.map.intersection("bottleneck").point);
if scroller.event(input) {
setup_scenario(&mut self.main.primary);
// TODO Levels of indirection now feel bad. I almost want dependency injection

View File

@ -281,7 +281,6 @@ impl<S: UIState> UI<S> {
}
_ => {
warn!("Couldn't load editor_state or it's for a different map, so just focusing on an arbitrary building");
// TODO window_size isn't set yet, so this actually kinda breaks
let focus_pt = ID::Building(BuildingID(0))
.canonical_point(
&ui.state.primary().map,

View File

@ -27,7 +27,7 @@ pub struct Canvas {
}
impl Canvas {
pub fn new() -> Canvas {
pub fn new(initial_width: u32, initial_height: u32) -> Canvas {
let texture_settings = TextureSettings::new().filter(Filter::Nearest);
// TODO We could also preload everything and not need the RefCell.
let glyphs = RefCell::new(
@ -50,8 +50,8 @@ impl Canvas {
left_mouse_drag_from: None,
window_size: Size {
width: 0,
height: 0,
width: initial_width,
height: initial_height,
},
glyphs,

View File

@ -29,9 +29,10 @@ pub enum EventLoopMode {
InputOnly,
}
pub fn run<T, G: GUI<T>>(mut gui: G, window_title: &str, initial_width: u32, initial_height: u32) {
pub fn run<T, G: GUI<T>>(mut gui: G, window_title: &str) {
let opengl = OpenGL::V3_2;
let settings = WindowSettings::new(window_title, [initial_width, initial_height])
let initial_size = gui.get_mut_canvas().window_size;
let settings = WindowSettings::new(window_title, [initial_size.width, initial_size.height])
.opengl(opengl)
.exit_on_esc(false)
// TODO it'd be cool to dynamically tweak antialiasing settings as we zoom in

View File

@ -34,7 +34,7 @@ impl UI {
)
.unwrap();
UI {
canvas: Canvas::new(),
canvas: Canvas::new(1024, 768),
draw_map: DrawMap::new(map),
cycler: Cycler::new(ANIMATION_PERIOD_S),
}
@ -62,5 +62,5 @@ impl GUI<()> for UI {
fn main() {
let flags = Flags::from_args();
ezgui::run(UI::new(flags), "Halloween tech demo", 1024, 768);
ezgui::run(UI::new(flags), "Halloween tech demo");
}

View File

@ -19,7 +19,7 @@ pub struct UI {
impl UI {
pub fn new() -> UI {
let mut canvas = Canvas::new();
let mut canvas = Canvas::new(1024, 768);
// Start with mode 1's settings
canvas.window_size.width = 1024;
canvas.window_size.height = 768;
@ -121,5 +121,5 @@ impl GUI<()> for UI {
}
fn main() {
ezgui::run(UI::new(), "GUI Playground", 1024, 768);
ezgui::run(UI::new(), "GUI Playground");
}

View File

@ -31,7 +31,7 @@ impl UI {
Model::new()
};
UI {
canvas: Canvas::new(),
canvas: Canvas::new(1024, 768),
model,
state: State::Viewing,
}
@ -210,5 +210,5 @@ impl GUI<Text> for UI {
fn main() {
let args: Vec<String> = env::args().collect();
ezgui::run(UI::new(args.get(1)), "Synthetic map editor", 1024, 768);
ezgui::run(UI::new(args.get(1)), "Synthetic map editor");
}