mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Merge branch 'ui_improvements' into 'master'
Ui improvements Closes #23 See merge request veloren/veloren!54 Former-commit-id: 227b25c971c2576e5121d884a5e102307dd471c3
This commit is contained in:
@ -83,7 +83,10 @@ impl Chat {
|
||||
self.new_messages = false;
|
||||
}
|
||||
|
||||
// Only show if it has the keyboard captured
|
||||
// Chat input with rectangle as background
|
||||
let keyboard_captured = ui_widgets.global_input().current.widget_capturing_keyboard.map_or(false, |id| id == self.ids.input);
|
||||
if keyboard_captured {
|
||||
let text_edit = TextEdit::new(&self.input)
|
||||
.w(460.0)
|
||||
.restrict_to_height(false)
|
||||
@ -106,11 +109,16 @@ impl Chat {
|
||||
self.input = str.to_string();
|
||||
self.input.retain(|c| c != '\n');
|
||||
}
|
||||
}
|
||||
|
||||
// Message box
|
||||
Rectangle::fill([470.0, 174.0])
|
||||
.rgba(0.0, 0.0, 0.0, 0.4)
|
||||
.up_from(self.ids.input_bg, 0.0)
|
||||
.and(|r| if keyboard_captured {
|
||||
r.up_from(self.ids.input_bg, 0.0)
|
||||
} else {
|
||||
r.bottom_left_with_margins_on(ui_widgets.window, 10.0, 10.0)
|
||||
})
|
||||
.set(self.ids.message_box_bg, ui_widgets);
|
||||
let (mut items, _) = List::flow_down(self.messages.len() + 1)
|
||||
.top_left_of(self.ids.message_box_bg)
|
||||
@ -154,13 +162,13 @@ impl Chat {
|
||||
}
|
||||
}
|
||||
|
||||
// If enter is pressed send the current message
|
||||
// If enter is pressed and the input box is not empty send the current message
|
||||
if ui_widgets
|
||||
.widget_input(self.ids.input)
|
||||
.presses()
|
||||
.key()
|
||||
.any(|key_press| match key_press.key {
|
||||
Key::Return => true,
|
||||
Key::Return if !self.input.is_empty() => true,
|
||||
_ => false,
|
||||
})
|
||||
{
|
||||
|
@ -4,6 +4,7 @@ use crate::{
|
||||
render::Renderer,
|
||||
ui::{self, ScaleMode, ToggleButton, Ui},
|
||||
window::{Event as WinEvent, Key, Window},
|
||||
GlobalState,
|
||||
};
|
||||
use common::assets;
|
||||
use conrod_core::{
|
||||
@ -249,7 +250,7 @@ pub(self) struct Imgs {
|
||||
}
|
||||
impl Imgs {
|
||||
fn new(ui: &mut Ui, renderer: &mut Renderer) -> Imgs {
|
||||
let mut load = |filename, ui: &mut Ui| {
|
||||
let load = |filename, ui: &mut Ui| {
|
||||
let fullpath: String = ["/voxygen/", filename].concat();
|
||||
let image = image::load_from_memory(
|
||||
assets::load(fullpath.as_str())
|
||||
@ -406,7 +407,6 @@ pub struct Hud {
|
||||
ids: Ids,
|
||||
imgs: Imgs,
|
||||
chat: chat::Chat,
|
||||
cursor_grabbed: bool,
|
||||
font_metamorph: FontId,
|
||||
font_opensans: FontId,
|
||||
show_help: bool,
|
||||
@ -438,28 +438,23 @@ impl Hud {
|
||||
// Load images
|
||||
let imgs = Imgs::new(&mut ui, window.renderer_mut());
|
||||
// Load fonts
|
||||
let font_opensans = ui.new_font(
|
||||
conrod_core::text::font::from_file(concat!(
|
||||
env!("CARGO_MANIFEST_DIR"),
|
||||
"/../assets/voxygen/font/OpenSans-Regular.ttf"
|
||||
))
|
||||
.unwrap(),
|
||||
);
|
||||
let font_metamorph = ui.new_font(
|
||||
conrod_core::text::font::from_file(concat!(
|
||||
env!("CARGO_MANIFEST_DIR"),
|
||||
"/../assets/voxygen/font/Metamorphous-Regular.ttf"
|
||||
))
|
||||
.unwrap(),
|
||||
);
|
||||
let load_font = |filename, ui: &mut Ui| {
|
||||
let fullpath: String = ["/voxygen/font", filename].concat();
|
||||
ui.new_font(conrod_core::text::Font::from_bytes(
|
||||
assets::load(fullpath.as_str())
|
||||
.expect("Error loading file")
|
||||
).unwrap())
|
||||
};
|
||||
let font_opensans = load_font("/OpenSans-Regular.ttf", &mut ui);
|
||||
let font_metamorph = load_font("/Metamorphous-Regular.ttf", &mut ui);
|
||||
// Chat box
|
||||
let chat = chat::Chat::new(&mut ui);
|
||||
|
||||
Self {
|
||||
ui,
|
||||
imgs,
|
||||
ids,
|
||||
chat,
|
||||
cursor_grabbed: true,
|
||||
settings_tab: SettingsTab::Interface,
|
||||
show_help: true,
|
||||
bag_open: false,
|
||||
@ -487,7 +482,11 @@ impl Hud {
|
||||
const MANA_COLOR: Color = Color::Rgba(0.42, 0.41, 0.66, 1.0);
|
||||
const XP_COLOR: Color = Color::Rgba(0.59, 0.41, 0.67, 1.0);
|
||||
|
||||
if self.show_ui {
|
||||
// Don't show anything if the ui is toggled off
|
||||
if !self.show_ui {
|
||||
return events;
|
||||
}
|
||||
|
||||
// Add Bag-Space Button
|
||||
if self.inventorytest_button {
|
||||
if Button::image(self.imgs.mmap_button)
|
||||
@ -858,7 +857,7 @@ impl Hud {
|
||||
//.label_font_size(5)
|
||||
//.set(self.ids.inv_slot[i], ui_widgets);}
|
||||
}
|
||||
}
|
||||
|
||||
// Bag
|
||||
if !self.map_open {
|
||||
self.bag_open = ToggleButton::new(self.bag_open, self.imgs.bag, self.imgs.bag_open)
|
||||
@ -1456,13 +1455,17 @@ impl Hud {
|
||||
self.chat.new_message(msg);
|
||||
}
|
||||
|
||||
pub fn toggle_menu(&mut self) {
|
||||
fn toggle_menu(&mut self) {
|
||||
self.menu_open = !self.menu_open;
|
||||
}
|
||||
pub fn toggle_bag(&mut self) {
|
||||
fn toggle_bag(&mut self) {
|
||||
self.bag_open = !self.bag_open
|
||||
}
|
||||
pub fn toggle_questlog(&mut self) {
|
||||
fn toggle_map(&mut self) {
|
||||
self.map_open = !self.map_open;
|
||||
self.bag_open = false;
|
||||
}
|
||||
fn toggle_questlog(&mut self) {
|
||||
self.open_windows = match self.open_windows {
|
||||
Windows::Small(Small::Questlog) => Windows::None,
|
||||
Windows::None | Windows::Small(_) => Windows::Small(Small::Questlog),
|
||||
@ -1473,11 +1476,7 @@ impl Hud {
|
||||
Windows::Settings => Windows::Settings,
|
||||
};
|
||||
}
|
||||
pub fn toggle_map(&mut self) {
|
||||
self.map_open = !self.map_open;
|
||||
self.bag_open = false;
|
||||
}
|
||||
pub fn toggle_charwindow(&mut self) {
|
||||
fn toggle_charwindow(&mut self) {
|
||||
self.open_windows = match self.open_windows {
|
||||
Windows::CharacterAnd(small) => match small {
|
||||
Some(small) => Windows::Small(small),
|
||||
@ -1488,7 +1487,7 @@ impl Hud {
|
||||
Windows::Settings => Windows::Settings,
|
||||
}
|
||||
}
|
||||
pub fn toggle_social(&mut self) {
|
||||
fn toggle_social(&mut self) {
|
||||
self.open_windows = match self.open_windows {
|
||||
Windows::Small(Small::Social) => Windows::None,
|
||||
Windows::None | Windows::Small(_) => Windows::Small(Small::Social),
|
||||
@ -1499,7 +1498,7 @@ impl Hud {
|
||||
Windows::Settings => Windows::Settings,
|
||||
};
|
||||
}
|
||||
pub fn toggle_spellbook(&mut self) {
|
||||
fn toggle_spellbook(&mut self) {
|
||||
self.open_windows = match self.open_windows {
|
||||
Windows::Small(Small::Spellbook) => Windows::None,
|
||||
Windows::None | Windows::Small(_) => Windows::Small(Small::Spellbook),
|
||||
@ -1510,22 +1509,36 @@ impl Hud {
|
||||
Windows::Settings => Windows::Settings,
|
||||
};
|
||||
}
|
||||
pub fn toggle_settings(&mut self) {
|
||||
fn toggle_settings(&mut self) {
|
||||
self.open_windows = match self.open_windows {
|
||||
Windows::Settings => Windows::None,
|
||||
_ => Windows::Settings,
|
||||
};
|
||||
self.bag_open = false;
|
||||
}
|
||||
pub fn toggle_help(&mut self) {
|
||||
fn toggle_help(&mut self) {
|
||||
self.show_help = !self.show_help
|
||||
}
|
||||
pub fn toggle_ui(&mut self) {
|
||||
fn toggle_ui(&mut self) {
|
||||
self.show_ui = !self.show_ui;
|
||||
}
|
||||
|
||||
pub fn update_grab(&mut self, cursor_grabbed: bool) {
|
||||
self.cursor_grabbed = cursor_grabbed;
|
||||
fn toggle_windows(&mut self) {
|
||||
if self.bag_open
|
||||
|| self.menu_open
|
||||
|| self.map_open
|
||||
|| match self.open_windows {
|
||||
Windows::None => false,
|
||||
_ => true,
|
||||
}
|
||||
{
|
||||
self.bag_open = false;
|
||||
self.menu_open = false;
|
||||
self.map_open = false;
|
||||
self.open_windows = Windows::None;
|
||||
} else {
|
||||
self.menu_open = true;
|
||||
}
|
||||
}
|
||||
|
||||
fn typing(&self) -> bool {
|
||||
@ -1535,17 +1548,23 @@ impl Hud {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn handle_event(&mut self, event: WinEvent) -> bool {
|
||||
pub fn handle_event(&mut self, event: WinEvent, global_state: &mut GlobalState) -> bool {
|
||||
let cursor_grabbed = global_state.window.is_cursor_grabbed();
|
||||
match event {
|
||||
WinEvent::Ui(event) => {
|
||||
if (self.typing() && event.is_keyboard())
|
||||
|| !(self.cursor_grabbed && event.is_keyboard_or_mouse())
|
||||
if (self.typing() && event.is_keyboard() && self.show_ui)
|
||||
|| !(cursor_grabbed && event.is_keyboard_or_mouse())
|
||||
{
|
||||
self.ui.handle_event(event);
|
||||
}
|
||||
true
|
||||
}
|
||||
WinEvent::Zoom(_) => !self.cursor_grabbed && !self.ui.no_widget_capturing_mouse(),
|
||||
WinEvent::KeyDown(Key::ToggleInterface) => {
|
||||
self.toggle_ui();
|
||||
true
|
||||
}
|
||||
_ if !self.show_ui => false,
|
||||
WinEvent::Zoom(_) => !cursor_grabbed && !self.ui.no_widget_capturing_mouse(),
|
||||
WinEvent::KeyDown(Key::Enter) => {
|
||||
self.ui.focus_widget(if self.typing() {
|
||||
None
|
||||
@ -1596,10 +1615,6 @@ impl Hud {
|
||||
self.toggle_help();
|
||||
true
|
||||
}
|
||||
Key::Interface => {
|
||||
self.toggle_ui();
|
||||
true
|
||||
}
|
||||
_ => false,
|
||||
},
|
||||
WinEvent::KeyDown(key) | WinEvent::KeyUp(key) => match key {
|
||||
@ -1620,21 +1635,4 @@ impl Hud {
|
||||
pub fn render(&self, renderer: &mut Renderer) {
|
||||
self.ui.render(renderer);
|
||||
}
|
||||
pub fn toggle_windows(&mut self) {
|
||||
if self.bag_open
|
||||
|| self.menu_open
|
||||
|| self.map_open
|
||||
|| match self.open_windows {
|
||||
Windows::None => false,
|
||||
_ => true,
|
||||
}
|
||||
{
|
||||
self.bag_open = false;
|
||||
self.menu_open = false;
|
||||
self.map_open = false;
|
||||
self.open_windows = Windows::None;
|
||||
} else {
|
||||
self.menu_open = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -67,7 +67,7 @@ impl PlayState for CharSelectionState {
|
||||
global_state.singleplayer = None;
|
||||
return PlayStateResult::Pop;
|
||||
},
|
||||
ui::Event::Play => return PlayStateResult::Push(
|
||||
ui::Event::Play => return PlayStateResult::Switch(
|
||||
Box::new(SessionState::new(&mut global_state.window, self.client.clone()))
|
||||
),
|
||||
}
|
||||
|
@ -377,20 +377,16 @@ impl CharSelectionUi {
|
||||
// Load images
|
||||
let imgs = Imgs::new(&mut ui, window.renderer_mut());
|
||||
// Load fonts
|
||||
let font_opensans = ui.new_font(
|
||||
conrod_core::text::font::from_file(concat!(
|
||||
env!("CARGO_MANIFEST_DIR"),
|
||||
"/../assets/voxygen/font/OpenSans-Regular.ttf"
|
||||
))
|
||||
.unwrap(),
|
||||
);
|
||||
let font_metamorph = ui.new_font(
|
||||
conrod_core::text::font::from_file(concat!(
|
||||
env!("CARGO_MANIFEST_DIR"),
|
||||
"/../assets/voxygen/font/Metamorphous-Regular.ttf"
|
||||
))
|
||||
.unwrap(),
|
||||
);
|
||||
let load_font = |filename, ui: &mut Ui| {
|
||||
let fullpath: String = ["/voxygen/font", filename].concat();
|
||||
ui.new_font(conrod_core::text::Font::from_bytes(
|
||||
assets::load(fullpath.as_str())
|
||||
.expect("Error loading file")
|
||||
).unwrap())
|
||||
};
|
||||
let font_opensans = load_font("/OpenSans-Regular.ttf", &mut ui);
|
||||
let font_metamorph = load_font("/Metamorphous-Regular.ttf", &mut ui);
|
||||
|
||||
Self {
|
||||
ui,
|
||||
imgs,
|
||||
|
@ -68,7 +68,7 @@ struct Imgs {
|
||||
}
|
||||
impl Imgs {
|
||||
fn new(ui: &mut Ui, renderer: &mut Renderer) -> Imgs {
|
||||
let mut load_img = |filename, ui: &mut Ui| {
|
||||
let load_img = |filename, ui: &mut Ui| {
|
||||
let fullpath: String = ["/voxygen/", filename].concat();
|
||||
let image = image::load_from_memory(
|
||||
assets::load(fullpath.as_str())
|
||||
@ -78,7 +78,7 @@ impl Imgs {
|
||||
.unwrap();
|
||||
ui.new_graphic(ui::Graphic::Image(image))
|
||||
};
|
||||
let mut load_vox = |filename, ui: &mut Ui| {
|
||||
let load_vox = |filename, ui: &mut Ui| {
|
||||
let fullpath: String = ["/voxygen/", filename].concat();
|
||||
let dot_vox = dot_vox::load_bytes(
|
||||
assets::load(fullpath.as_str())
|
||||
@ -146,20 +146,16 @@ impl MainMenuUi {
|
||||
// Load images
|
||||
let imgs = Imgs::new(&mut ui, window.renderer_mut());
|
||||
// Load fonts
|
||||
let font_opensans = ui.new_font(
|
||||
conrod_core::text::font::from_file(concat!(
|
||||
env!("CARGO_MANIFEST_DIR"),
|
||||
"/../assets/voxygen/font/OpenSans-Regular.ttf"
|
||||
))
|
||||
.unwrap(),
|
||||
);
|
||||
let font_metamorph = ui.new_font(
|
||||
conrod_core::text::font::from_file(concat!(
|
||||
env!("CARGO_MANIFEST_DIR"),
|
||||
"/../assets/voxygen/font/Metamorphous-Regular.ttf"
|
||||
))
|
||||
.unwrap(),
|
||||
);
|
||||
let load_font = |filename, ui: &mut Ui| {
|
||||
let fullpath: String = ["/voxygen/font", filename].concat();
|
||||
ui.new_font(conrod_core::text::Font::from_bytes(
|
||||
assets::load(fullpath.as_str())
|
||||
.expect("Error loading file")
|
||||
).unwrap())
|
||||
};
|
||||
let font_opensans = load_font("/OpenSans-Regular.ttf", &mut ui);
|
||||
let font_metamorph = load_font("/Metamorphous-Regular.ttf", &mut ui);
|
||||
|
||||
Self {
|
||||
ui,
|
||||
imgs,
|
||||
|
@ -8,7 +8,8 @@ use client::Client;
|
||||
use common::{
|
||||
comp,
|
||||
figure::Segment,
|
||||
msg
|
||||
msg,
|
||||
assets,
|
||||
};
|
||||
use crate::{
|
||||
Error,
|
||||
@ -43,7 +44,12 @@ impl Figures {
|
||||
pub fn new(renderer: &mut Renderer) -> Self {
|
||||
// TODO: Make a proper asset loading system
|
||||
fn load_segment(filename: &'static str) -> Segment {
|
||||
Segment::from(dot_vox::load(&(concat!(env!("CARGO_MANIFEST_DIR"), "/../assets/voxygen/voxel/").to_string() + filename)).unwrap())
|
||||
let fullpath: String = ["/voxygen/voxel/", filename].concat();
|
||||
Segment::from(dot_vox::load_bytes(
|
||||
assets::load(fullpath.as_str())
|
||||
.expect("Error loading file")
|
||||
.as_slice(),
|
||||
).unwrap())
|
||||
}
|
||||
|
||||
let bone_meshes = [
|
||||
|
@ -121,7 +121,7 @@ impl PlayState for SessionState {
|
||||
for event in global_state.window.fetch_events() {
|
||||
|
||||
// Pass all events to the ui first
|
||||
if self.hud.handle_event(event.clone()) {
|
||||
if self.hud.handle_event(event.clone(), global_state) {
|
||||
continue;
|
||||
}
|
||||
let _handled = match event {
|
||||
@ -134,8 +134,6 @@ impl PlayState for SessionState {
|
||||
global_state
|
||||
.window
|
||||
.grab_cursor(!global_state.window.is_cursor_grabbed());
|
||||
self.hud
|
||||
.update_grab(global_state.window.is_cursor_grabbed());
|
||||
}
|
||||
// Movement Key Pressed
|
||||
Event::KeyDown(Key::MoveForward) => self.key_state.up = true,
|
||||
|
@ -34,7 +34,7 @@ pub struct ControlSettings {
|
||||
pub spellbook: VirtualKeyCode,
|
||||
pub settings: VirtualKeyCode,
|
||||
pub help: VirtualKeyCode,
|
||||
pub interface: VirtualKeyCode,
|
||||
pub toggle_interface: VirtualKeyCode,
|
||||
}
|
||||
|
||||
impl Default for Settings {
|
||||
@ -56,7 +56,7 @@ impl Default for Settings {
|
||||
spellbook: VirtualKeyCode::P,
|
||||
settings: VirtualKeyCode::N,
|
||||
help: VirtualKeyCode::F1,
|
||||
interface: VirtualKeyCode::F2,
|
||||
toggle_interface: VirtualKeyCode::F2,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
@ -51,7 +51,7 @@ impl Window {
|
||||
key_map.insert(settings.controls.spellbook, Key::Spellbook);
|
||||
key_map.insert(settings.controls.settings, Key::Settings);
|
||||
key_map.insert(settings.controls.help, Key::Help);
|
||||
key_map.insert(settings.controls.interface, Key::Interface);
|
||||
key_map.insert(settings.controls.toggle_interface, Key::ToggleInterface);
|
||||
|
||||
let tmp = Ok(Self {
|
||||
events_loop,
|
||||
@ -180,7 +180,7 @@ pub enum Key {
|
||||
Social,
|
||||
Spellbook,
|
||||
Settings,
|
||||
Interface,
|
||||
ToggleInterface,
|
||||
Help,
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user