Show resize mouse cursor when resizing windows
This commit is contained in:
parent
472e0b9afe
commit
98178e9d69
4 changed files with 31 additions and 2 deletions
|
@ -4,6 +4,18 @@ use parking_lot::Mutex;
|
||||||
|
|
||||||
use crate::{layout::align_rect, *};
|
use crate::{layout::align_rect, *};
|
||||||
|
|
||||||
|
#[derive(Clone, Copy)]
|
||||||
|
pub enum CursorIcon {
|
||||||
|
Default,
|
||||||
|
ResizeNorthWestSouthEast,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for CursorIcon {
|
||||||
|
fn default() -> Self {
|
||||||
|
CursorIcon::Default
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Contains the input, style and output of all GUI commands.
|
/// Contains the input, style and output of all GUI commands.
|
||||||
pub struct Context {
|
pub struct Context {
|
||||||
/// The default style for new regions
|
/// The default style for new regions
|
||||||
|
@ -13,6 +25,9 @@ pub struct Context {
|
||||||
pub(crate) memory: Mutex<Memory>,
|
pub(crate) memory: Mutex<Memory>,
|
||||||
pub(crate) graphics: Mutex<GraphicLayers>,
|
pub(crate) graphics: Mutex<GraphicLayers>,
|
||||||
|
|
||||||
|
/// Set each frame to what the mouse cursor should look like.
|
||||||
|
pub cursor_icon: Mutex<CursorIcon>,
|
||||||
|
|
||||||
/// Used to debug name clashes of e.g. windows
|
/// Used to debug name clashes of e.g. windows
|
||||||
used_ids: Mutex<HashMap<Id, Pos2>>,
|
used_ids: Mutex<HashMap<Id, Pos2>>,
|
||||||
}
|
}
|
||||||
|
@ -26,6 +41,7 @@ impl Clone for Context {
|
||||||
input: self.input,
|
input: self.input,
|
||||||
memory: Mutex::new(self.memory.lock().clone()),
|
memory: Mutex::new(self.memory.lock().clone()),
|
||||||
graphics: Mutex::new(self.graphics.lock().clone()),
|
graphics: Mutex::new(self.graphics.lock().clone()),
|
||||||
|
cursor_icon: Mutex::new(self.cursor_icon.lock().clone()),
|
||||||
used_ids: Mutex::new(self.used_ids.lock().clone()),
|
used_ids: Mutex::new(self.used_ids.lock().clone()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -39,6 +55,7 @@ impl Context {
|
||||||
input: Default::default(),
|
input: Default::default(),
|
||||||
memory: Default::default(),
|
memory: Default::default(),
|
||||||
graphics: Default::default(),
|
graphics: Default::default(),
|
||||||
|
cursor_icon: Default::default(),
|
||||||
used_ids: Default::default(),
|
used_ids: Default::default(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -59,6 +76,7 @@ impl Context {
|
||||||
pub fn new_frame(&mut self, gui_input: GuiInput) {
|
pub fn new_frame(&mut self, gui_input: GuiInput) {
|
||||||
self.used_ids.lock().clear();
|
self.used_ids.lock().clear();
|
||||||
self.input = gui_input;
|
self.input = gui_input;
|
||||||
|
*self.cursor_icon.lock() = CursorIcon::Default;
|
||||||
if !gui_input.mouse_down || gui_input.mouse_pos.is_none() {
|
if !gui_input.mouse_down || gui_input.mouse_pos.is_none() {
|
||||||
self.memory.lock().active_id = None;
|
self.memory.lock().active_id = None;
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,7 @@ mod window;
|
||||||
pub use {
|
pub use {
|
||||||
crate::emigui::Emigui,
|
crate::emigui::Emigui,
|
||||||
color::Color,
|
color::Color,
|
||||||
context::Context,
|
context::{Context, CursorIcon},
|
||||||
fonts::{FontDefinitions, Fonts, TextStyle},
|
fonts::{FontDefinitions, Fonts, TextStyle},
|
||||||
id::Id,
|
id::Id,
|
||||||
layers::*,
|
layers::*,
|
||||||
|
|
|
@ -170,6 +170,10 @@ impl Window {
|
||||||
state.rect = state.rect.translate(ctx.input().mouse_move);
|
state.rect = state.rect.translate(ctx.input().mouse_move);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if corner_interact.hovered || corner_interact.active {
|
||||||
|
*ctx.cursor_icon.lock() = CursorIcon::ResizeNorthWestSouthEast;
|
||||||
|
}
|
||||||
|
|
||||||
let mut memory = ctx.memory.lock();
|
let mut memory = ctx.memory.lock();
|
||||||
if win_interact.active || corner_interact.active {
|
if win_interact.active || corner_interact.active {
|
||||||
memory.move_window_to_top(id);
|
memory.move_window_to_top(id);
|
||||||
|
|
|
@ -8,7 +8,7 @@ use {
|
||||||
label,
|
label,
|
||||||
math::*,
|
math::*,
|
||||||
widgets::{Button, Label},
|
widgets::{Button, Label},
|
||||||
Align, Emigui, Window,
|
Align, CursorIcon, Emigui, Window,
|
||||||
},
|
},
|
||||||
emigui_glium::Painter,
|
emigui_glium::Painter,
|
||||||
glium::glutin,
|
glium::glutin,
|
||||||
|
@ -110,5 +110,12 @@ fn main() {
|
||||||
|
|
||||||
let mesh = emigui.paint();
|
let mesh = emigui.paint();
|
||||||
painter.paint(&display, mesh, emigui.texture());
|
painter.paint(&display, mesh, emigui.texture());
|
||||||
|
|
||||||
|
let cursor = *emigui.ctx.cursor_icon.lock();
|
||||||
|
let cursor = match cursor {
|
||||||
|
CursorIcon::Default => glutin::MouseCursor::Default,
|
||||||
|
CursorIcon::ResizeNorthWestSouthEast => glutin::MouseCursor::NwseResize,
|
||||||
|
};
|
||||||
|
display.gl_window().set_cursor(cursor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue