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:
@@ -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 {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user