Merge pull request #109 from malikolivier/update_mouse_cursor

Allow mouse cursor to be updated
This commit is contained in:
Joonas Javanainen 2018-03-26 19:11:03 +02:00 committed by GitHub
commit 65ac8d1aa8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 64 additions and 4 deletions

View File

@ -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 = (

View File

@ -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 = (

View File

@ -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