1
0
mirror of https://github.com/emilk/egui.git synced 2026-08-31 22:00:03 -04:00

Add a lot more CursorIcon's

This commit is contained in:
Emil Ernerfeldt
2021-03-13 12:38:03 +01:00
parent ee1fcf1ead
commit 958aea922f
8 changed files with 216 additions and 48 deletions

View File

@@ -173,7 +173,7 @@ pub fn run(mut app: Box<dyn epi::App>) -> ! {
let mut previous_frame_time = None;
let mut painter = Painter::new(&display);
let mut clipboard = init_clipboard();
let mut previous_cursor_icon = None;
let mut current_cursor_icon = CursorIcon::Default;
#[cfg(feature = "persistence")]
let mut last_auto_save = Instant::now();
@@ -209,14 +209,10 @@ pub fn run(mut app: Box<dyn epi::App>) -> ! {
ctx.clear_animations();
let (egui_output, _shapes) = ctx.end_frame();
let new_cursor_icon = egui_output.cursor_icon;
handle_output(egui_output, clipboard.as_mut());
display
.gl_window()
.window()
.set_cursor_icon(translate_cursor(new_cursor_icon));
previous_cursor_icon = Some(new_cursor_icon);
set_cursor_icon(&display, egui_output.cursor_icon);
current_cursor_icon = egui_output.cursor_icon;
handle_output(egui_output, clipboard.as_mut());
// TODO: handle app_output
// eprintln!("Warmed up in {} ms", warm_up_start.elapsed().as_millis())
@@ -285,18 +281,13 @@ pub fn run(mut app: Box<dyn epi::App>) -> ! {
}
screen_reader.speak(&egui_output.events_description());
let new_cursor_icon = egui_output.cursor_icon;
handle_output(egui_output, clipboard.as_mut());
if Some(new_cursor_icon) != previous_cursor_icon {
if current_cursor_icon != egui_output.cursor_icon {
// call only when changed to prevent flickering near frame boundary
// when Windows OS tries to control cursor icon for window resizing
display
.gl_window()
.window()
.set_cursor_icon(translate_cursor(new_cursor_icon));
previous_cursor_icon = Some(new_cursor_icon);
set_cursor_icon(&display, egui_output.cursor_icon);
current_cursor_icon = egui_output.cursor_icon;
}
handle_output(egui_output, clipboard.as_mut());
#[cfg(feature = "persistence")]
if let Some(storage) = &mut storage {

View File

@@ -263,17 +263,43 @@ pub fn translate_virtual_key_code(key: VirtualKeyCode) -> Option<egui::Key> {
})
}
pub fn translate_cursor(cursor_icon: egui::CursorIcon) -> glutin::window::CursorIcon {
fn translate_cursor(cursor_icon: egui::CursorIcon) -> Option<glutin::window::CursorIcon> {
match cursor_icon {
CursorIcon::Default => glutin::window::CursorIcon::Default,
CursorIcon::PointingHand => glutin::window::CursorIcon::Hand,
CursorIcon::ResizeHorizontal => glutin::window::CursorIcon::EwResize,
CursorIcon::ResizeNeSw => glutin::window::CursorIcon::NeswResize,
CursorIcon::ResizeNwSe => glutin::window::CursorIcon::NwseResize,
CursorIcon::ResizeVertical => glutin::window::CursorIcon::NsResize,
CursorIcon::Text => glutin::window::CursorIcon::Text,
CursorIcon::Grab => glutin::window::CursorIcon::Grab,
CursorIcon::Grabbing => glutin::window::CursorIcon::Grabbing,
CursorIcon::None => None,
CursorIcon::Alias => Some(glutin::window::CursorIcon::Alias),
CursorIcon::AllScroll => Some(glutin::window::CursorIcon::AllScroll),
CursorIcon::Cell => Some(glutin::window::CursorIcon::Cell),
CursorIcon::ContextMenu => Some(glutin::window::CursorIcon::ContextMenu),
CursorIcon::Copy => Some(glutin::window::CursorIcon::Copy),
CursorIcon::Crosshair => Some(glutin::window::CursorIcon::Crosshair),
CursorIcon::Default => Some(glutin::window::CursorIcon::Default),
CursorIcon::Grab => Some(glutin::window::CursorIcon::Grab),
CursorIcon::Grabbing => Some(glutin::window::CursorIcon::Grabbing),
CursorIcon::Help => Some(glutin::window::CursorIcon::Help),
CursorIcon::Move => Some(glutin::window::CursorIcon::Move),
CursorIcon::NoDrop => Some(glutin::window::CursorIcon::NoDrop),
CursorIcon::NotAllowed => Some(glutin::window::CursorIcon::NotAllowed),
CursorIcon::PointingHand => Some(glutin::window::CursorIcon::Hand),
CursorIcon::Progress => Some(glutin::window::CursorIcon::Progress),
CursorIcon::ResizeHorizontal => Some(glutin::window::CursorIcon::EwResize),
CursorIcon::ResizeNeSw => Some(glutin::window::CursorIcon::NeswResize),
CursorIcon::ResizeNwSe => Some(glutin::window::CursorIcon::NwseResize),
CursorIcon::ResizeVertical => Some(glutin::window::CursorIcon::NsResize),
CursorIcon::Text => Some(glutin::window::CursorIcon::Text),
CursorIcon::VerticalText => Some(glutin::window::CursorIcon::VerticalText),
CursorIcon::Wait => Some(glutin::window::CursorIcon::Wait),
CursorIcon::ZoomIn => Some(glutin::window::CursorIcon::ZoomIn),
CursorIcon::ZoomOut => Some(glutin::window::CursorIcon::ZoomOut),
}
}
fn set_cursor_icon(display: &glium::backend::glutin::Display, cursor_icon: egui::CursorIcon) {
if let Some(cursor_icon) = translate_cursor(cursor_icon) {
display.gl_window().window().set_cursor_visible(true);
display.gl_window().window().set_cursor_icon(cursor_icon);
} else {
display.gl_window().window().set_cursor_visible(false);
}
}