Skip to content

Commit 448ede2

Browse files
authored
Auto merge of #402 - leroycep:text-example-rerendering, r=pcwalton
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.
2 parents e75b347 + f0ee329 commit 448ede2

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)