Implement the refresh button
This commit is contained in:
parent
3bcfc6aa4c
commit
0d3ff98ad5
|
@ -109,12 +109,12 @@ fn handle_window_event(
|
|||
let (width, height) = window.get_size();
|
||||
let (xpos, ypos) = window.get_cursor_pos();
|
||||
let (fw, fh) = window.get_framebuffer_size();
|
||||
ui_container.click_at(renderer, xpos*((fw as f64)/(width as f64)), ypos*((fh as f64)/(height as f64)), fw as f64, fh as f64)
|
||||
ui_container.click_at(screen_sys, renderer, xpos*((fw as f64)/(width as f64)), ypos*((fh as f64)/(height as f64)), fw as f64, fh as f64)
|
||||
},
|
||||
glfw::WindowEvent::CursorPos(xpos, ypos) => {
|
||||
let (width, height) = window.get_size();
|
||||
let (fw, fh) = window.get_framebuffer_size();
|
||||
ui_container.hover_at(renderer, xpos*((fw as f64)/(width as f64)), ypos*((fh as f64)/(height as f64)), fw as f64, fh as f64)
|
||||
ui_container.hover_at(screen_sys, renderer, xpos*((fw as f64)/(width as f64)), ypos*((fh as f64)/(height as f64)), fw as f64, fh as f64)
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
|
|
|
@ -451,6 +451,13 @@ impl TextureManager {
|
|||
rel_height: 1.0,
|
||||
is_rel: false,
|
||||
};
|
||||
let rect = atlas::Rect {
|
||||
x: rect.x,
|
||||
y: rect.y,
|
||||
width: width,
|
||||
height: height,
|
||||
};
|
||||
self.pending_uploads.push((atlas, rect, data));
|
||||
self.textures.insert(full_name.to_owned(), t.clone());
|
||||
t
|
||||
}
|
||||
|
|
|
@ -147,10 +147,10 @@ pub fn new_button_text(renderer: &mut render::Renderer, val: &str, x: f64, y: f6
|
|||
|
||||
pub fn button_action(ui_container: &mut ui::Container,
|
||||
btn: ui::ElementRef<ui::Batch>, txt: Option<ui::ElementRef<ui::Text>>,
|
||||
click: Option<Rc<Fn(&mut render::Renderer, &mut ui::Container)>>
|
||||
click: Option<ui::ClickFunc>
|
||||
) {
|
||||
let batch = ui_container.get_mut(&btn);
|
||||
batch.add_hover_func(Rc::new(move |over, renderer, ui_container| {
|
||||
batch.add_hover_func(Rc::new(move |over, screen_sys, renderer, ui_container| {
|
||||
let texture = render::Renderer::get_texture(renderer.get_textures_ref(), "gui/widgets").relative(
|
||||
0.0, (if over { 86.0 } else { 66.0 }) / 256.0, 200.0 / 256.0, 20.0 / 256.0
|
||||
);
|
||||
|
|
|
@ -3,6 +3,7 @@ use std::fs;
|
|||
use std::thread;
|
||||
use std::sync::mpsc;
|
||||
use std::rc::Rc;
|
||||
use std::cell::RefCell;
|
||||
|
||||
use ui;
|
||||
use render;
|
||||
|
@ -20,6 +21,8 @@ use rand::{Rng};
|
|||
pub struct ServerList {
|
||||
elements: Option<UIElements>,
|
||||
disconnect_reason: Option<Component>,
|
||||
|
||||
needs_reload: Rc<RefCell<bool>>,
|
||||
}
|
||||
|
||||
struct UIElements {
|
||||
|
@ -72,11 +75,13 @@ impl ServerList {
|
|||
ServerList {
|
||||
elements: None,
|
||||
disconnect_reason: disconnect_reason,
|
||||
needs_reload: Rc::new(RefCell::new(false)),
|
||||
}
|
||||
}
|
||||
|
||||
fn reload_server_list(&mut self, renderer: &mut render::Renderer, ui_container: &mut ui::Container) {
|
||||
let elements = self.elements.as_mut().unwrap();
|
||||
*self.needs_reload.borrow_mut() = false;
|
||||
{
|
||||
let mut tex = renderer.get_textures_ref().write().unwrap();
|
||||
for server in &mut elements.servers {
|
||||
|
@ -133,12 +138,12 @@ impl ServerList {
|
|||
let back = ui_container.get_mut(&server.back);
|
||||
let back_ref = server.back.clone();
|
||||
let address = address.clone();
|
||||
back.add_hover_func(Rc::new(move |over, renderer, ui_container| {
|
||||
back.add_hover_func(Rc::new(move |over, screen_sys, renderer, ui_container| {
|
||||
let back = ui_container.get_mut(&back_ref);
|
||||
back.set_a(if over { 200 } else { 100 });
|
||||
}));
|
||||
|
||||
back.add_click_func(Rc::new(move |renderer, ui_container| {
|
||||
back.add_click_func(Rc::new(move |screen_sys, renderer, ui_container| {
|
||||
println!("Connecting to {}", address);
|
||||
}));
|
||||
}
|
||||
|
@ -255,7 +260,10 @@ impl super::Screen for ServerList {
|
|||
let re = ui_container.add(refresh);
|
||||
txt.set_parent(&re);
|
||||
let tre = ui_container.add(txt);
|
||||
super::button_action(ui_container, re.clone(), Some(tre.clone()), None);
|
||||
let nr = self.needs_reload.clone();
|
||||
super::button_action(ui_container, re.clone(), Some(tre.clone()), Some(Rc::new(move |screen_sys, renderer, ui_container| {
|
||||
*nr.borrow_mut() = true;
|
||||
})));
|
||||
elements.add(re);
|
||||
elements.add(tre);
|
||||
|
||||
|
@ -265,9 +273,7 @@ impl super::Screen for ServerList {
|
|||
let re = ui_container.add(add);
|
||||
txt.set_parent(&re);
|
||||
let tre = ui_container.add(txt);
|
||||
super::button_action(ui_container, re.clone(), Some(tre.clone()), Some(Rc::new(|renderer, ui_container| {
|
||||
|
||||
})));
|
||||
super::button_action(ui_container, re.clone(), Some(tre.clone()), None);
|
||||
elements.add(re);
|
||||
elements.add(tre);
|
||||
|
||||
|
@ -328,7 +334,11 @@ impl super::Screen for ServerList {
|
|||
}
|
||||
|
||||
fn tick(&mut self, delta: f64, renderer: &mut render::Renderer, ui_container: &mut ui::Container) {
|
||||
if *self.needs_reload.borrow() {
|
||||
self.reload_server_list(renderer, ui_container);
|
||||
}
|
||||
let elements = self.elements.as_mut().unwrap();
|
||||
|
||||
elements.logo.tick(renderer, ui_container);
|
||||
|
||||
for s in &mut elements.servers {
|
||||
|
|
|
@ -20,6 +20,7 @@ use std::rc::Rc;
|
|||
use rand;
|
||||
use render;
|
||||
use format;
|
||||
use screen;
|
||||
|
||||
const SCALED_WIDTH: f64 = 854.0;
|
||||
const SCALED_HEIGHT: f64 = 480.0;
|
||||
|
@ -32,10 +33,13 @@ pub enum Element {
|
|||
None,
|
||||
}
|
||||
|
||||
pub type ClickFunc = Rc<Fn(&mut screen::ScreenSystem, &mut render::Renderer, &mut Container)>;
|
||||
pub type HoverFunc = Rc<Fn(bool, &mut screen::ScreenSystem, &mut render::Renderer, &mut Container)>;
|
||||
|
||||
macro_rules! element_impl {
|
||||
($($name:ident),+) => (
|
||||
impl Element {
|
||||
fn get_click_funcs(&self) -> Vec<Rc<Fn(&mut render::Renderer, &mut Container)>> {
|
||||
fn get_click_funcs(&self) -> Vec<ClickFunc> {
|
||||
match self {
|
||||
$(
|
||||
&Element::$name(ref val) => val.click_funcs.clone(),
|
||||
|
@ -44,7 +48,7 @@ impl Element {
|
|||
}
|
||||
}
|
||||
|
||||
fn get_hover_funcs(&self) -> Vec<Rc<Fn(bool, &mut render::Renderer, &mut Container)>> {
|
||||
fn get_hover_funcs(&self) -> Vec<HoverFunc> {
|
||||
match self {
|
||||
$(
|
||||
&Element::$name(ref val) => val.hover_funcs.clone(),
|
||||
|
@ -368,7 +372,7 @@ impl Container {
|
|||
map
|
||||
}
|
||||
|
||||
pub fn click_at(&mut self, renderer: &mut render::Renderer, x: f64, y: f64, width: f64, height: f64) {
|
||||
pub fn click_at(&mut self, screen_sys: &mut screen::ScreenSystem, renderer: &mut render::Renderer, x: f64, y: f64, width: f64, height: f64) {
|
||||
let (sw, sh) = match self.mode {
|
||||
Mode::Scaled => (SCALED_WIDTH / width, SCALED_HEIGHT / height),
|
||||
Mode::Unscaled(scale) => (scale, scale),
|
||||
|
@ -389,12 +393,12 @@ impl Container {
|
|||
}
|
||||
if let Some(click) = click {
|
||||
for c in &click {
|
||||
c(renderer, self);
|
||||
c(screen_sys, renderer, self);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn hover_at(&mut self, renderer: &mut render::Renderer, x: f64, y: f64, width: f64, height: f64) {
|
||||
pub fn hover_at(&mut self, screen_sys: &mut screen::ScreenSystem, renderer: &mut render::Renderer, x: f64, y: f64, width: f64, height: f64) {
|
||||
let (sw, sh) = match self.mode {
|
||||
Mode::Scaled => (SCALED_WIDTH / width, SCALED_HEIGHT / height),
|
||||
Mode::Unscaled(scale) => (scale, scale),
|
||||
|
@ -417,7 +421,7 @@ impl Container {
|
|||
};
|
||||
if call {
|
||||
for f in &hover.1 {
|
||||
f(hover.2, renderer, self);
|
||||
f(hover.2, screen_sys, renderer, self);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -493,8 +497,8 @@ macro_rules! ui_element {
|
|||
y: f64,
|
||||
v_attach: VAttach,
|
||||
h_attach: HAttach,
|
||||
click_funcs: Vec<Rc<Fn(&mut render::Renderer, &mut Container)>>,
|
||||
hover_funcs: Vec<Rc<Fn(bool, &mut render::Renderer, &mut Container)>>,
|
||||
click_funcs: Vec<ClickFunc>,
|
||||
hover_funcs: Vec<HoverFunc>,
|
||||
hovered: bool,
|
||||
$(
|
||||
$field: $field_ty
|
||||
|
@ -510,11 +514,11 @@ macro_rules! base_impl {
|
|||
self.dirty = true;
|
||||
}
|
||||
|
||||
pub fn add_click_func(&mut self, f: Rc<Fn(&mut render::Renderer, &mut Container)>) {
|
||||
pub fn add_click_func(&mut self, f: ClickFunc) {
|
||||
self.click_funcs.push(f);
|
||||
}
|
||||
|
||||
pub fn add_hover_func(&mut self, f: Rc<Fn(bool, &mut render::Renderer, &mut Container)>) {
|
||||
pub fn add_hover_func(&mut self, f: HoverFunc) {
|
||||
self.hover_funcs.push(f);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue