Implement a background for the option menus
This commit is contained in:
parent
ebc11224e7
commit
380a844272
|
@ -79,8 +79,8 @@ pub struct Renderer {
|
|||
|
||||
trans: Option<TransInfo>,
|
||||
|
||||
last_width: u32,
|
||||
last_height: u32,
|
||||
pub width: u32,
|
||||
pub height: u32,
|
||||
|
||||
// Light renderering
|
||||
pub light_level: f32,
|
||||
|
@ -217,8 +217,8 @@ impl Renderer {
|
|||
element_buffer_size: 0,
|
||||
element_buffer_type: gl::UNSIGNED_BYTE,
|
||||
|
||||
last_width: 0,
|
||||
last_height: 0,
|
||||
width: 0,
|
||||
height: 0,
|
||||
|
||||
camera: Camera {
|
||||
pos: cgmath::Point3::new(0.0, 0.0, 0.0),
|
||||
|
@ -255,9 +255,9 @@ impl Renderer {
|
|||
}
|
||||
}
|
||||
|
||||
if self.last_height != height || self.last_width != width {
|
||||
self.last_width = width;
|
||||
self.last_height = height;
|
||||
if self.height != height || self.width != width {
|
||||
self.width = width;
|
||||
self.height = height;
|
||||
gl::viewport(0, 0, width as i32, height as i32);
|
||||
|
||||
self.perspective_matrix = cgmath::Matrix4::from(
|
||||
|
|
|
@ -41,14 +41,14 @@ macro_rules! get_matched_str {
|
|||
)
|
||||
}
|
||||
|
||||
pub struct UIElement {
|
||||
elements: ui::Collection
|
||||
// TODO: Add background of some sort
|
||||
pub struct UIElements {
|
||||
elements: ui::Collection,
|
||||
background: ui::ElementRef<ui::Image>,
|
||||
}
|
||||
|
||||
pub struct SettingsMenu {
|
||||
console: Arc<Mutex<console::Console>>,
|
||||
elements: Option<UIElement>,
|
||||
elements: Option<UIElements>,
|
||||
show_disconnect_button: bool
|
||||
}
|
||||
|
||||
|
@ -66,6 +66,15 @@ impl super::Screen for SettingsMenu {
|
|||
fn on_active(&mut self, renderer: &mut render::Renderer, ui_container: &mut ui::Container) {
|
||||
let mut elements = ui::Collection::new();
|
||||
|
||||
let mut background = ui::Image::new(
|
||||
render::Renderer::get_texture(renderer.get_textures_ref(), "steven:solid"),
|
||||
0.0, 0.0, 854.0, 480.0,
|
||||
0.0, 0.0, 1.0, 1.0,
|
||||
0, 0, 0
|
||||
);
|
||||
background.set_a(100);
|
||||
let background = elements.add(ui_container.add(background));
|
||||
|
||||
// From top and down
|
||||
let (btn_audio_settings, txt_audio_settings) = new_submenu_button("Audio settings...", renderer, ui_container, -160.0, -50.0);
|
||||
super::button_action(ui_container, btn_audio_settings.clone(), Some(txt_audio_settings.clone()), move |game, _| {
|
||||
|
@ -114,8 +123,9 @@ impl super::Screen for SettingsMenu {
|
|||
elements.add(txt_exit_game);
|
||||
}
|
||||
|
||||
self.elements = Some(UIElement {
|
||||
elements: elements
|
||||
self.elements = Some(UIElements {
|
||||
elements: elements,
|
||||
background: background,
|
||||
});
|
||||
|
||||
}
|
||||
|
@ -128,7 +138,20 @@ impl super::Screen for SettingsMenu {
|
|||
}
|
||||
|
||||
// Called every frame the screen is active
|
||||
fn tick(&mut self, _delta: f64, _renderer: &mut render::Renderer, _ui_container: &mut ui::Container) -> Option<Box<super::Screen>> {
|
||||
fn tick(&mut self, _delta: f64, renderer: &mut render::Renderer, ui_container: &mut ui::Container) -> Option<Box<super::Screen>> {
|
||||
let elements = self.elements.as_mut().unwrap();
|
||||
{
|
||||
let mode = ui_container.mode;
|
||||
let background = ui_container.get_mut(&elements.background);
|
||||
background.set_width(match mode {
|
||||
ui::Mode::Unscaled(scale) => 854.0 / scale,
|
||||
ui::Mode::Scaled => renderer.width as f64,
|
||||
});
|
||||
background.set_height(match mode {
|
||||
ui::Mode::Unscaled(scale) => 480.0 / scale,
|
||||
ui::Mode::Scaled => renderer.height as f64,
|
||||
});
|
||||
}
|
||||
None
|
||||
}
|
||||
|
||||
|
@ -144,7 +167,7 @@ impl super::Screen for SettingsMenu {
|
|||
|
||||
pub struct VideoSettingsMenu {
|
||||
console: Arc<Mutex<console::Console>>,
|
||||
elements: Option<UIElement>,
|
||||
elements: Option<UIElements>,
|
||||
}
|
||||
|
||||
impl VideoSettingsMenu {
|
||||
|
@ -160,6 +183,15 @@ impl super::Screen for VideoSettingsMenu {
|
|||
fn on_active(&mut self, renderer: &mut render::Renderer, ui_container: &mut ui::Container) {
|
||||
let mut elements = ui::Collection::new();
|
||||
|
||||
let mut background = ui::Image::new(
|
||||
render::Renderer::get_texture(renderer.get_textures_ref(), "steven:solid"),
|
||||
0.0, 0.0, 854.0, 480.0,
|
||||
0.0, 0.0, 1.0, 1.0,
|
||||
0, 0, 0
|
||||
);
|
||||
background.set_a(100);
|
||||
let background = elements.add(ui_container.add(background));
|
||||
|
||||
// Load defaults
|
||||
let (r_max_fps, r_fov, r_vsync) = {
|
||||
let console = self.console.lock().unwrap();
|
||||
|
@ -198,8 +230,9 @@ impl super::Screen for VideoSettingsMenu {
|
|||
});
|
||||
elements.add(btn_done);
|
||||
elements.add(txt_done);
|
||||
self.elements = Some(UIElement {
|
||||
elements: elements
|
||||
self.elements = Some(UIElements {
|
||||
elements: elements,
|
||||
background: background,
|
||||
});
|
||||
|
||||
}
|
||||
|
@ -212,7 +245,20 @@ impl super::Screen for VideoSettingsMenu {
|
|||
}
|
||||
|
||||
// Called every frame the screen is active
|
||||
fn tick(&mut self, _delta: f64, _renderer: &mut render::Renderer, _ui_container: &mut ui::Container) -> Option<Box<super::Screen>> {
|
||||
fn tick(&mut self, _delta: f64, renderer: &mut render::Renderer, ui_container: &mut ui::Container) -> Option<Box<super::Screen>> {
|
||||
let elements = self.elements.as_mut().unwrap();
|
||||
{
|
||||
let mode = ui_container.mode;
|
||||
let background = ui_container.get_mut(&elements.background);
|
||||
background.set_width(match mode {
|
||||
ui::Mode::Unscaled(scale) => 854.0 / scale,
|
||||
ui::Mode::Scaled => renderer.width as f64,
|
||||
});
|
||||
background.set_height(match mode {
|
||||
ui::Mode::Unscaled(scale) => 480.0 / scale,
|
||||
ui::Mode::Scaled => renderer.height as f64,
|
||||
});
|
||||
}
|
||||
None
|
||||
}
|
||||
|
||||
|
@ -228,7 +274,7 @@ impl super::Screen for VideoSettingsMenu {
|
|||
|
||||
pub struct AudioSettingsMenu {
|
||||
console: Arc<Mutex<console::Console>>,
|
||||
elements: Option<UIElement>
|
||||
elements: Option<UIElements>
|
||||
}
|
||||
|
||||
impl AudioSettingsMenu {
|
||||
|
@ -244,6 +290,15 @@ impl super::Screen for AudioSettingsMenu {
|
|||
fn on_active(&mut self, renderer: &mut render::Renderer, ui_container: &mut ui::Container) {
|
||||
let mut elements = ui::Collection::new();
|
||||
|
||||
let mut background = ui::Image::new(
|
||||
render::Renderer::get_texture(renderer.get_textures_ref(), "steven:solid"),
|
||||
0.0, 0.0, 854.0, 480.0,
|
||||
0.0, 0.0, 1.0, 1.0,
|
||||
0, 0, 0
|
||||
);
|
||||
background.set_a(100);
|
||||
let background = elements.add(ui_container.add(background));
|
||||
|
||||
let master_volume = {
|
||||
let console = self.console.lock().unwrap();
|
||||
(console.get(settings::CL_MASTER_VOLUME).clone())
|
||||
|
@ -260,8 +315,9 @@ impl super::Screen for AudioSettingsMenu {
|
|||
elements.add(btn_done);
|
||||
elements.add(txt_done);
|
||||
|
||||
self.elements = Some(UIElement {
|
||||
elements: elements
|
||||
self.elements = Some(UIElements {
|
||||
elements: elements,
|
||||
background: background,
|
||||
});
|
||||
|
||||
}
|
||||
|
@ -274,7 +330,20 @@ impl super::Screen for AudioSettingsMenu {
|
|||
}
|
||||
|
||||
// Called every frame the screen is active
|
||||
fn tick(&mut self, _delta: f64, _renderer: &mut render::Renderer, _ui_container: &mut ui::Container) -> Option<Box<super::Screen>> {
|
||||
fn tick(&mut self, _delta: f64, renderer: &mut render::Renderer, ui_container: &mut ui::Container) -> Option<Box<super::Screen>> {
|
||||
let elements = self.elements.as_mut().unwrap();
|
||||
{
|
||||
let mode = ui_container.mode;
|
||||
let background = ui_container.get_mut(&elements.background);
|
||||
background.set_width(match mode {
|
||||
ui::Mode::Unscaled(scale) => 854.0 / scale,
|
||||
ui::Mode::Scaled => renderer.width as f64,
|
||||
});
|
||||
background.set_height(match mode {
|
||||
ui::Mode::Unscaled(scale) => 480.0 / scale,
|
||||
ui::Mode::Scaled => renderer.height as f64,
|
||||
});
|
||||
}
|
||||
None
|
||||
}
|
||||
|
||||
|
|
|
@ -193,6 +193,7 @@ element_impl!(
|
|||
Button
|
||||
);
|
||||
|
||||
#[derive(Clone, Copy, PartialEq)]
|
||||
pub enum Mode {
|
||||
Scaled,
|
||||
Unscaled(f64),
|
||||
|
@ -290,6 +291,7 @@ const SCREEN: Region = Region {
|
|||
|
||||
pub struct Container {
|
||||
pub mode: Mode,
|
||||
last_mode: Mode,
|
||||
elements: HashMap<ElementRefInner, Element>,
|
||||
// We need the order
|
||||
elements_list: Vec<ElementRefInner>,
|
||||
|
@ -305,6 +307,7 @@ impl Container {
|
|||
pub fn new() -> Container {
|
||||
Container {
|
||||
mode: Mode::Scaled,
|
||||
last_mode: Mode::Scaled,
|
||||
elements: HashMap::new(),
|
||||
elements_list: Vec::new(),
|
||||
version: 0xFFFF,
|
||||
|
@ -356,11 +359,12 @@ impl Container {
|
|||
};
|
||||
|
||||
if self.last_sw != sw || self.last_sh != sh || self.last_width != width ||
|
||||
self.last_height != height || self.version != renderer.ui.version {
|
||||
self.last_height != height || self.version != renderer.ui.version || self.last_mode != self.mode {
|
||||
self.last_sw = sw;
|
||||
self.last_sh = sh;
|
||||
self.last_width = width;
|
||||
self.last_height = height;
|
||||
self.last_mode = self.mode;
|
||||
for (_, e) in &mut self.elements {
|
||||
e.set_dirty(true);
|
||||
if self.version != renderer.ui.version {
|
||||
|
|
Loading…
Reference in New Issue