Cleaned up GUI rendering code a bit.
This commit is contained in:
parent
ea6d1c56d1
commit
b4e0a2e234
|
@ -1,7 +1,5 @@
|
||||||
#![allow(dead_code)]
|
#![allow(dead_code)]
|
||||||
|
|
||||||
use std::cmp::min;
|
|
||||||
|
|
||||||
use sdl2;
|
use sdl2;
|
||||||
use sdl2::event::WindowEventId;
|
use sdl2::event::WindowEventId;
|
||||||
use sdl2::render::{Renderer, Texture};
|
use sdl2::render::{Renderer, Texture};
|
||||||
|
@ -25,8 +23,7 @@ impl GUI {
|
||||||
// Get the window and renderer for sdl
|
// Get the window and renderer for sdl
|
||||||
let window = sdl2::video::Window::new("Led Editor", sdl2::video::WindowPos::PosCentered, sdl2::video::WindowPos::PosCentered, 800, 600, sdl2::video::OPENGL | sdl2::video::RESIZABLE).unwrap();
|
let window = sdl2::video::Window::new("Led Editor", sdl2::video::WindowPos::PosCentered, sdl2::video::WindowPos::PosCentered, 800, 600, sdl2::video::OPENGL | sdl2::video::RESIZABLE).unwrap();
|
||||||
let renderer = sdl2::render::Renderer::from_window(window, sdl2::render::RenderDriverIndex::Auto, sdl2::render::ACCELERATED).unwrap();
|
let renderer = sdl2::render::Renderer::from_window(window, sdl2::render::RenderDriverIndex::Auto, sdl2::render::ACCELERATED).unwrap();
|
||||||
let (w, h) = renderer.get_output_size().unwrap();
|
let draw_buf = renderer.create_texture(sdl2::pixels::PixelFormatFlag::RGBA8888, sdl2::render::TextureAccess::Target, 1, 1).unwrap();
|
||||||
let draw_buf = renderer.create_texture(sdl2::pixels::PixelFormatFlag::RGBA8888, sdl2::render::TextureAccess::Target, w, h).unwrap();
|
|
||||||
|
|
||||||
let mut editor = Editor::new();
|
let mut editor = Editor::new();
|
||||||
editor.update_dim(renderer.get_output_size().unwrap().1 as usize, renderer.get_output_size().unwrap().0 as usize);
|
editor.update_dim(renderer.get_output_size().unwrap().1 as usize, renderer.get_output_size().unwrap().0 as usize);
|
||||||
|
@ -46,8 +43,7 @@ impl GUI {
|
||||||
// Get the window and renderer for sdl
|
// Get the window and renderer for sdl
|
||||||
let window = sdl2::video::Window::new("Led Editor", sdl2::video::WindowPos::PosCentered, sdl2::video::WindowPos::PosCentered, 800, 600, sdl2::video::OPENGL | sdl2::video::RESIZABLE).unwrap();
|
let window = sdl2::video::Window::new("Led Editor", sdl2::video::WindowPos::PosCentered, sdl2::video::WindowPos::PosCentered, 800, 600, sdl2::video::OPENGL | sdl2::video::RESIZABLE).unwrap();
|
||||||
let renderer = sdl2::render::Renderer::from_window(window, sdl2::render::RenderDriverIndex::Auto, sdl2::render::ACCELERATED).unwrap();
|
let renderer = sdl2::render::Renderer::from_window(window, sdl2::render::RenderDriverIndex::Auto, sdl2::render::ACCELERATED).unwrap();
|
||||||
let (w, h) = renderer.get_output_size().unwrap();
|
let draw_buf = renderer.create_texture(sdl2::pixels::PixelFormatFlag::RGBA8888, sdl2::render::TextureAccess::Target, 1, 1).unwrap();
|
||||||
let draw_buf = renderer.create_texture(sdl2::pixels::PixelFormatFlag::RGBA8888, sdl2::render::TextureAccess::Target, w, h).unwrap();
|
|
||||||
|
|
||||||
let mut editor = ed;
|
let mut editor = ed;
|
||||||
editor.update_dim(renderer.get_output_size().unwrap().1 as usize, renderer.get_output_size().unwrap().0 as usize);
|
editor.update_dim(renderer.get_output_size().unwrap().1 as usize, renderer.get_output_size().unwrap().0 as usize);
|
||||||
|
@ -79,40 +75,25 @@ impl GUI {
|
||||||
// Get renderer size
|
// Get renderer size
|
||||||
let (w, h) = self.renderer.get_output_size().unwrap();
|
let (w, h) = self.renderer.get_output_size().unwrap();
|
||||||
|
|
||||||
// Display last rendered contents to fill things in quickly
|
// Check if we should re-render the UI before blitting
|
||||||
match self.draw_buf.query() {
|
// it over.
|
||||||
Ok(tq) => {
|
let redraw = match self.draw_buf.query() {
|
||||||
let wm = min(w, tq.width) as i32;
|
Ok(tq) => tq.width != w || tq.height != h,
|
||||||
let hm = min(h, tq.height) as i32;
|
_ => true,
|
||||||
let _ = self.renderer.copy(&self.draw_buf, Some(Rect{x:0, y:0, h:hm, w:wm}), Some(Rect{x:0, y:0, h:hm, w:wm}));
|
};
|
||||||
self.renderer.present();
|
|
||||||
},
|
|
||||||
|
|
||||||
_ => {
|
if redraw {
|
||||||
}
|
// Realloc texture to match renderer size
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Make sure the texture still matches the render size
|
|
||||||
match self.draw_buf.query() {
|
|
||||||
Ok(tq) => {
|
|
||||||
if tq.width != w || tq.height != h {
|
|
||||||
self.draw_buf = self.renderer.create_texture(sdl2::pixels::PixelFormatFlag::RGBA8888, sdl2::render::TextureAccess::Target, w, h).unwrap();
|
self.draw_buf = self.renderer.create_texture(sdl2::pixels::PixelFormatFlag::RGBA8888, sdl2::render::TextureAccess::Target, w, h).unwrap();
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_ => {
|
|
||||||
self.draw_buf = self.renderer.create_texture(sdl2::pixels::PixelFormatFlag::RGBA8888, sdl2::render::TextureAccess::Target, w, h).unwrap();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Draw UI to texture
|
// Draw UI to texture
|
||||||
let _ = self.renderer.set_render_target(Some(&self.draw_buf));
|
let _ = self.renderer.set_render_target(Some(&self.draw_buf));
|
||||||
let _ = self.renderer.set_draw_color(sdl2::pixels::Color::RGB(80, 80, 80));
|
let _ = self.renderer.set_draw_color(sdl2::pixels::Color::RGB(80, 80, 80));
|
||||||
let _ = self.renderer.clear();
|
let _ = self.renderer.clear();
|
||||||
self.draw_editor_text((50, 50), (300, 300));
|
self.draw_editor_text((50, 50), (300, 300));
|
||||||
|
}
|
||||||
|
|
||||||
// Copy texture over
|
// Blit texture over
|
||||||
let _ = self.renderer.set_render_target(None);
|
let _ = self.renderer.set_render_target(None);
|
||||||
let _ = self.renderer.copy(&self.draw_buf, Some(Rect{x:0, y:0, h:h as i32, w:w as i32}), Some(Rect{x:0, y:0, h:h as i32, w:w as i32}));
|
let _ = self.renderer.copy(&self.draw_buf, Some(Rect{x:0, y:0, h:h as i32, w:w as i32}), Some(Rect{x:0, y:0, h:h as i32, w:w as i32}));
|
||||||
self.renderer.present();
|
self.renderer.present();
|
||||||
|
|
Loading…
Reference in New Issue
Block a user