Skip to main content

dear_imgui_rs/input/
mouse.rs

1use crate::sys;
2#[cfg(feature = "serde")]
3use serde::{Deserialize, Serialize};
4
5/// Mouse button identifier
6#[repr(i32)]
7#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq)]
8#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
9pub enum MouseButton {
10    /// Left mouse button
11    Left = sys::ImGuiMouseButton_Left as i32,
12    /// Right mouse button
13    Right = sys::ImGuiMouseButton_Right as i32,
14    /// Middle mouse button
15    Middle = sys::ImGuiMouseButton_Middle as i32,
16    /// Extra mouse button 1 (typically Back)
17    Extra1 = 3,
18    /// Extra mouse button 2 (typically Forward)
19    Extra2 = 4,
20}
21
22/// Mouse cursor types
23#[repr(i32)]
24#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq)]
25#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
26pub enum MouseCursor {
27    /// No cursor
28    None = sys::ImGuiMouseCursor_None as i32,
29    /// Arrow cursor
30    Arrow = sys::ImGuiMouseCursor_Arrow as i32,
31    /// Text input I-beam cursor
32    TextInput = sys::ImGuiMouseCursor_TextInput as i32,
33    /// Resize all directions cursor
34    ResizeAll = sys::ImGuiMouseCursor_ResizeAll as i32,
35    /// Resize north-south cursor
36    ResizeNS = sys::ImGuiMouseCursor_ResizeNS as i32,
37    /// Resize east-west cursor
38    ResizeEW = sys::ImGuiMouseCursor_ResizeEW as i32,
39    /// Resize northeast-southwest cursor
40    ResizeNESW = sys::ImGuiMouseCursor_ResizeNESW as i32,
41    /// Resize northwest-southeast cursor
42    ResizeNWSE = sys::ImGuiMouseCursor_ResizeNWSE as i32,
43    /// Hand cursor
44    Hand = sys::ImGuiMouseCursor_Hand as i32,
45    /// Not allowed cursor
46    NotAllowed = sys::ImGuiMouseCursor_NotAllowed as i32,
47}
48
49/// Source of mouse-like input events.
50///
51/// Backends can use this to mark whether a mouse event originates from a
52/// physical mouse, a touch screen, or a pen/stylus so Dear ImGui can
53/// correctly handle multiple input sources.
54#[repr(i32)]
55#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq)]
56#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
57pub enum MouseSource {
58    /// Events coming from a physical mouse
59    Mouse = sys::ImGuiMouseSource_Mouse as i32,
60    /// Events coming from a touch screen
61    TouchScreen = sys::ImGuiMouseSource_TouchScreen as i32,
62    /// Events coming from a pen or stylus
63    Pen = sys::ImGuiMouseSource_Pen as i32,
64}
65
66impl From<MouseButton> for sys::ImGuiMouseButton {
67    #[inline]
68    fn from(value: MouseButton) -> sys::ImGuiMouseButton {
69        value as sys::ImGuiMouseButton
70    }
71}
72
73impl From<MouseSource> for sys::ImGuiMouseSource {
74    #[inline]
75    fn from(value: MouseSource) -> sys::ImGuiMouseSource {
76        value as sys::ImGuiMouseSource
77    }
78}