Skip to content

Commit f0ee329

Browse files
committed
Make canvas_text example render on expose
Before this change, the `canvas_text` example would become blank after navigating to another workspace or being put beneath another window. This change will listen for the SDL window exposed event, and will render then instead of only at the beginning.
1 parent e75b347 commit f0ee329

File tree

1 file changed

+19
-18
lines changed

1 file changed

+19
-18
lines changed

examples/canvas_text/src/main.rs

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use pathfinder_renderer::gpu::renderer::Renderer;
2020
use pathfinder_renderer::options::BuildOptions;
2121
use pathfinder_resources::ResourceLoader;
2222
use pathfinder_resources::fs::FilesystemResourceLoader;
23-
use sdl2::event::Event;
23+
use sdl2::event::{Event, WindowEvent};
2424
use sdl2::keyboard::Keycode;
2525
use sdl2::video::GLProfile;
2626
use std::iter;
@@ -64,28 +64,29 @@ fn main() {
6464
let font = Handle::from_memory(font_data, 0);
6565
let font_context = CanvasFontContext::from_fonts(iter::once(font));
6666

67-
// Make a canvas.
68-
let mut canvas = Canvas::new(window_size.to_f32()).get_context_2d(font_context);
69-
70-
// Draw the text.
71-
canvas.set_font("Overpass-Regular");
72-
canvas.set_font_size(32.0);
73-
canvas.fill_text("Hello Pathfinder!", vec2f(32.0, 48.0));
74-
canvas.set_text_align(TextAlign::Right);
75-
canvas.stroke_text("Goodbye Pathfinder!", vec2f(608.0, 464.0));
76-
77-
// Render the canvas to screen.
78-
let mut scene = SceneProxy::from_scene(canvas.into_canvas().into_scene(),
79-
renderer.mode().level,
80-
RayonExecutor);
81-
scene.build_and_render(&mut renderer, BuildOptions::default());
82-
window.gl_swap_window();
83-
8467
// Wait for a keypress.
8568
let mut event_pump = sdl_context.event_pump().unwrap();
8669
loop {
8770
match event_pump.wait_event() {
8871
Event::Quit {..} | Event::KeyDown { keycode: Some(Keycode::Escape), .. } => return,
72+
Event::Window { win_event: WindowEvent::Exposed, .. } => {
73+
// Make a canvas.
74+
let mut canvas = Canvas::new(window_size.to_f32()).get_context_2d(font_context.clone());
75+
76+
// Draw the text.
77+
canvas.set_font("Overpass-Regular");
78+
canvas.set_font_size(32.0);
79+
canvas.fill_text("Hello Pathfinder!", vec2f(32.0, 48.0));
80+
canvas.set_text_align(TextAlign::Right);
81+
canvas.stroke_text("Goodbye Pathfinder!", vec2f(608.0, 464.0));
82+
83+
// Render the canvas to screen.
84+
let mut scene = SceneProxy::from_scene(canvas.into_canvas().into_scene(),
85+
renderer.mode().level,
86+
RayonExecutor);
87+
scene.build_and_render(&mut renderer, BuildOptions::default());
88+
window.gl_swap_window();
89+
},
8990
_ => {}
9091
}
9192
}

0 commit comments

Comments
 (0)