1 | use cursor_icon::CursorIcon; |
2 | |
3 | use crate::globals::GlobalData; |
4 | use crate::reexports::client::globals::{BindError, GlobalList}; |
5 | use crate::reexports::client::protocol::wl_pointer::WlPointer; |
6 | use crate::reexports::client::{Connection, Dispatch, Proxy, QueueHandle}; |
7 | use crate::reexports::protocols::wp::cursor_shape::v1::client::wp_cursor_shape_device_v1::Shape; |
8 | use crate::reexports::protocols::wp::cursor_shape::v1::client::wp_cursor_shape_device_v1::WpCursorShapeDeviceV1; |
9 | use crate::reexports::protocols::wp::cursor_shape::v1::client::wp_cursor_shape_manager_v1::WpCursorShapeManagerV1; |
10 | |
11 | #[derive (Debug)] |
12 | pub struct CursorShapeManager { |
13 | cursor_shape_manager: WpCursorShapeManagerV1, |
14 | } |
15 | |
16 | impl CursorShapeManager { |
17 | pub fn bind<State>( |
18 | globals: &GlobalList, |
19 | queue_handle: &QueueHandle<State>, |
20 | ) -> Result<Self, BindError> |
21 | where |
22 | State: Dispatch<WpCursorShapeManagerV1, GlobalData> + 'static, |
23 | { |
24 | let cursor_shape_manager = globals.bind(queue_handle, 1..=1, GlobalData)?; |
25 | Ok(Self { cursor_shape_manager }) |
26 | } |
27 | |
28 | pub(crate) fn from_existing(cursor_shape_manager: WpCursorShapeManagerV1) -> Self { |
29 | Self { cursor_shape_manager } |
30 | } |
31 | |
32 | pub fn get_shape_device<State>( |
33 | &self, |
34 | pointer: &WlPointer, |
35 | queue_handle: &QueueHandle<State>, |
36 | ) -> WpCursorShapeDeviceV1 |
37 | where |
38 | State: Dispatch<WpCursorShapeDeviceV1, GlobalData> + 'static, |
39 | { |
40 | self.cursor_shape_manager.get_pointer(pointer, queue_handle, GlobalData) |
41 | } |
42 | |
43 | pub fn inner(&self) -> &WpCursorShapeManagerV1 { |
44 | &self.cursor_shape_manager |
45 | } |
46 | } |
47 | |
48 | impl<State> Dispatch<WpCursorShapeManagerV1, GlobalData, State> for CursorShapeManager |
49 | where |
50 | State: Dispatch<WpCursorShapeManagerV1, GlobalData>, |
51 | { |
52 | fn event( |
53 | _: &mut State, |
54 | _: &WpCursorShapeManagerV1, |
55 | _: <WpCursorShapeManagerV1 as Proxy>::Event, |
56 | _: &GlobalData, |
57 | _: &Connection, |
58 | _: &QueueHandle<State>, |
59 | ) { |
60 | unreachable!("wl_cursor_shape_manager_v1 has no events" ) |
61 | } |
62 | } |
63 | |
64 | impl<State> Dispatch<WpCursorShapeDeviceV1, GlobalData, State> for CursorShapeManager |
65 | where |
66 | State: Dispatch<WpCursorShapeDeviceV1, GlobalData>, |
67 | { |
68 | fn event( |
69 | _: &mut State, |
70 | _: &WpCursorShapeDeviceV1, |
71 | _: <WpCursorShapeDeviceV1 as Proxy>::Event, |
72 | _: &GlobalData, |
73 | _: &Connection, |
74 | _: &QueueHandle<State>, |
75 | ) { |
76 | unreachable!("wl_cursor_shape_device_v1 has no events" ) |
77 | } |
78 | } |
79 | |
80 | pub(crate) fn cursor_icon_to_shape(cursor_icon: CursorIcon) -> Shape { |
81 | match cursor_icon { |
82 | CursorIcon::Default => Shape::Default, |
83 | CursorIcon::ContextMenu => Shape::ContextMenu, |
84 | CursorIcon::Help => Shape::Help, |
85 | CursorIcon::Pointer => Shape::Pointer, |
86 | CursorIcon::Progress => Shape::Progress, |
87 | CursorIcon::Wait => Shape::Wait, |
88 | CursorIcon::Cell => Shape::Cell, |
89 | CursorIcon::Crosshair => Shape::Crosshair, |
90 | CursorIcon::Text => Shape::Text, |
91 | CursorIcon::VerticalText => Shape::VerticalText, |
92 | CursorIcon::Alias => Shape::Alias, |
93 | CursorIcon::Copy => Shape::Copy, |
94 | CursorIcon::Move => Shape::Move, |
95 | CursorIcon::NoDrop => Shape::NoDrop, |
96 | CursorIcon::NotAllowed => Shape::NotAllowed, |
97 | CursorIcon::Grab => Shape::Grab, |
98 | CursorIcon::Grabbing => Shape::Grabbing, |
99 | CursorIcon::EResize => Shape::EResize, |
100 | CursorIcon::NResize => Shape::NResize, |
101 | CursorIcon::NeResize => Shape::NeResize, |
102 | CursorIcon::NwResize => Shape::NwResize, |
103 | CursorIcon::SResize => Shape::SResize, |
104 | CursorIcon::SeResize => Shape::SeResize, |
105 | CursorIcon::SwResize => Shape::SwResize, |
106 | CursorIcon::WResize => Shape::WResize, |
107 | CursorIcon::EwResize => Shape::EwResize, |
108 | CursorIcon::NsResize => Shape::NsResize, |
109 | CursorIcon::NeswResize => Shape::NeswResize, |
110 | CursorIcon::NwseResize => Shape::NwseResize, |
111 | CursorIcon::ColResize => Shape::ColResize, |
112 | CursorIcon::RowResize => Shape::RowResize, |
113 | CursorIcon::AllScroll => Shape::AllScroll, |
114 | CursorIcon::ZoomIn => Shape::ZoomIn, |
115 | CursorIcon::ZoomOut => Shape::ZoomOut, |
116 | _ => Shape::Default, |
117 | } |
118 | } |
119 | |