mirror of
https://github.com/eliasstepanik/imgui-rs.git
synced 2026-01-11 21:48:36 +00:00
Merge pull request #109 from malikolivier/update_mouse_cursor
Allow mouse cursor to be updated
This commit is contained in:
commit
65ac8d1aa8
@ -1,4 +1,4 @@
|
||||
use imgui::{ImGui, Ui};
|
||||
use imgui::{ImGui, ImGuiMouseCursor, Ui};
|
||||
use std::time::Instant;
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Debug, Default)]
|
||||
@ -105,6 +105,26 @@ pub fn run<F: FnMut(&Ui) -> bool>(title: String, clear_color: [f32; 4], mut run_
|
||||
update_mouse(&mut imgui, &mut mouse_state);
|
||||
|
||||
let gl_window = display.gl_window();
|
||||
|
||||
let mouse_cursor = imgui.mouse_cursor();
|
||||
if imgui.mouse_draw_cursor() || mouse_cursor == ImGuiMouseCursor::None {
|
||||
// Hide OS cursor
|
||||
gl_window.set_cursor_state(glutin::CursorState::Hide).unwrap();
|
||||
} else {
|
||||
// Set OS cursor
|
||||
gl_window.set_cursor_state(glutin::CursorState::Normal).unwrap();
|
||||
gl_window.set_cursor(match mouse_cursor {
|
||||
ImGuiMouseCursor::None => unreachable!("mouse_cursor was None!"),
|
||||
ImGuiMouseCursor::Arrow => glutin::MouseCursor::Arrow,
|
||||
ImGuiMouseCursor::TextInput => glutin::MouseCursor::Text,
|
||||
ImGuiMouseCursor::Move => glutin::MouseCursor::Move,
|
||||
ImGuiMouseCursor::ResizeNS => glutin::MouseCursor::NsResize,
|
||||
ImGuiMouseCursor::ResizeEW => glutin::MouseCursor::EwResize,
|
||||
ImGuiMouseCursor::ResizeNESW => glutin::MouseCursor::NeswResize,
|
||||
ImGuiMouseCursor::ResizeNWSE => glutin::MouseCursor::NwseResize,
|
||||
});
|
||||
}
|
||||
|
||||
let size_pixels = gl_window.get_inner_size().unwrap();
|
||||
let hdipi = gl_window.hidpi_factor();
|
||||
let size_points = (
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
use imgui::{ImGui, Ui};
|
||||
use imgui::{ImGui, ImGuiMouseCursor, Ui};
|
||||
use imgui_gfx_renderer::{Renderer, Shaders};
|
||||
use std::time::Instant;
|
||||
|
||||
@ -131,6 +131,25 @@ pub fn run<F: FnMut(&Ui) -> bool>(title: String, clear_color: [f32; 4], mut run_
|
||||
|
||||
update_mouse(&mut imgui, &mut mouse_state);
|
||||
|
||||
let mouse_cursor = imgui.mouse_cursor();
|
||||
if imgui.mouse_draw_cursor() || mouse_cursor == ImGuiMouseCursor::None {
|
||||
// Hide OS cursor
|
||||
window.set_cursor_state(glutin::CursorState::Hide).unwrap();
|
||||
} else {
|
||||
// Set OS cursor
|
||||
window.set_cursor_state(glutin::CursorState::Normal).unwrap();
|
||||
window.set_cursor(match mouse_cursor {
|
||||
ImGuiMouseCursor::None => unreachable!("mouse_cursor was None!"),
|
||||
ImGuiMouseCursor::Arrow => glutin::MouseCursor::Arrow,
|
||||
ImGuiMouseCursor::TextInput => glutin::MouseCursor::Text,
|
||||
ImGuiMouseCursor::Move => glutin::MouseCursor::Move,
|
||||
ImGuiMouseCursor::ResizeNS => glutin::MouseCursor::NsResize,
|
||||
ImGuiMouseCursor::ResizeEW => glutin::MouseCursor::EwResize,
|
||||
ImGuiMouseCursor::ResizeNESW => glutin::MouseCursor::NeswResize,
|
||||
ImGuiMouseCursor::ResizeNWSE => glutin::MouseCursor::NwseResize,
|
||||
});
|
||||
}
|
||||
|
||||
let size_pixels = window.get_inner_size().unwrap();
|
||||
let hdipi = window.hidpi_factor();
|
||||
let size_points = (
|
||||
|
||||
25
src/lib.rs
25
src/lib.rs
@ -9,8 +9,8 @@ use std::str;
|
||||
use sys::ImGuiStyleVar;
|
||||
|
||||
pub use sys::{ImDrawIdx, ImDrawVert, ImGuiColorEditFlags, ImGuiHoveredFlags, ImGuiInputTextFlags,
|
||||
ImGuiKey, ImGuiSelectableFlags, ImGuiCond, ImGuiCol, ImGuiStyle, ImGuiTreeNodeFlags,
|
||||
ImGuiWindowFlags, ImVec2, ImVec4};
|
||||
ImGuiKey, ImGuiMouseCursor, ImGuiSelectableFlags, ImGuiCond, ImGuiCol, ImGuiStyle,
|
||||
ImGuiTreeNodeFlags, ImGuiWindowFlags, ImVec2, ImVec4};
|
||||
pub use child_frame::ChildFrame;
|
||||
pub use color_editors::{ColorButton, ColorEdit, ColorEditMode, ColorFormat, ColorPicker,
|
||||
ColorPickerMode, ColorPreview, EditableColor};
|
||||
@ -198,10 +198,31 @@ impl ImGui {
|
||||
let io = self.io_mut();
|
||||
io.mouse_wheel = value;
|
||||
}
|
||||
/// Set to `true` to have ImGui draw the cursor in software.
|
||||
/// If `false`, the OS cursor is used (default to `false`).
|
||||
pub fn set_mouse_draw_cursor(&mut self, value: bool) {
|
||||
let io = self.io_mut();
|
||||
io.mouse_draw_cursor = value;
|
||||
}
|
||||
pub fn mouse_draw_cursor(&self) -> bool {
|
||||
let io = self.io();
|
||||
io.mouse_draw_cursor
|
||||
}
|
||||
/// Set currently displayed cursor.
|
||||
/// Requires support in the windowing back-end if OS cursor is used.
|
||||
/// OS cursor is used if `mouse_draw_cursor` is set to `false` with
|
||||
/// [set_mouse_draw_cursor](#method.set_mouse_draw_cursor).
|
||||
pub fn set_mouse_cursor(&self, cursor: ImGuiMouseCursor) {
|
||||
unsafe {
|
||||
sys::igSetMouseCursor(cursor);
|
||||
}
|
||||
}
|
||||
/// Get currently displayed cursor.
|
||||
pub fn mouse_cursor(&self) -> ImGuiMouseCursor {
|
||||
unsafe {
|
||||
sys::igGetMouseCursor()
|
||||
}
|
||||
}
|
||||
pub fn key_ctrl(&self) -> bool {
|
||||
let io = self.io();
|
||||
io.key_ctrl
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user