aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authoremersion <contact@emersion.fr>2017-11-12 11:10:56 +0100
committeremersion <contact@emersion.fr>2017-11-12 11:10:56 +0100
commit8605243459629f566ed5109ffd896fd57b329ceb (patch)
tree1737e11b416068d1ff6ce19aab7eedf1b047faf8 /include
parent2dccb11741abd99fd71d4ccaba1ad42362d8f204 (diff)
Introduce wlr_xcursor_manager
Diffstat (limited to 'include')
-rw-r--r--include/rootston/cursor.h2
-rw-r--r--include/rootston/desktop.h2
-rw-r--r--include/rootston/xcursor.h40
-rw-r--r--include/wlr/types/wlr_cursor.h1
-rw-r--r--include/wlr/types/wlr_xcursor_manager.h53
-rw-r--r--include/wlr/xcursor.h2
6 files changed, 61 insertions, 39 deletions
diff --git a/include/rootston/cursor.h b/include/rootston/cursor.h
index 575c9d0e..f49b6439 100644
--- a/include/rootston/cursor.h
+++ b/include/rootston/cursor.h
@@ -30,7 +30,7 @@ struct roots_cursor {
enum roots_cursor_mode mode;
// state from input (review if this is necessary)
- struct roots_xcursor_theme *xcursor_theme;
+ struct wlr_xcursor_manager *xcursor_manager;
struct wlr_seat *wl_seat;
struct wl_client *cursor_client;
int offs_x, offs_y;
diff --git a/include/rootston/desktop.h b/include/rootston/desktop.h
index b12fff70..7371284f 100644
--- a/include/rootston/desktop.h
+++ b/include/rootston/desktop.h
@@ -30,9 +30,9 @@ struct roots_desktop {
struct roots_server *server;
struct roots_config *config;
- struct roots_xcursor_theme *xcursor_theme;
struct wlr_output_layout *layout;
+ struct wlr_xcursor_manager *xcursor_manager;
struct wlr_compositor *compositor;
struct wlr_wl_shell *wl_shell;
diff --git a/include/rootston/xcursor.h b/include/rootston/xcursor.h
index 45fac481..bc00f79c 100644
--- a/include/rootston/xcursor.h
+++ b/include/rootston/xcursor.h
@@ -1,44 +1,14 @@
#ifndef _ROOTSTON_XCURSOR_H
#define _ROOTSTON_XCURSOR_H
-#include <wayland-server.h>
-#include <wlr/xcursor.h>
-#include <wlr/xwayland.h>
-#include <wlr/types/wlr_cursor.h>
+#include <stdint.h>
#define ROOTS_XCURSOR_SIZE 16
-struct roots_xcursor_scaled_theme {
- uint32_t scale;
- struct wlr_xcursor_theme *theme;
- struct wl_list link;
-};
+#define ROOTS_XCURSOR_DEFAULT "left_ptr"
+#define ROOTS_XCURSOR_MOVE "grabbing"
+#define ROOTS_XCURSOR_ROTATE "grabbing"
-struct roots_xcursor_theme {
- char *name;
- struct wl_list scaled_themes; // roots_xcursor_scaled_theme::link
-};
-
-struct roots_xcursor_theme *roots_xcursor_theme_create(const char *name);
-
-void roots_xcursor_theme_destroy(struct roots_xcursor_theme *theme);
-
-int roots_xcursor_theme_load(struct roots_xcursor_theme *theme,
- uint32_t scale);
-
-void roots_xcursor_theme_set_default(struct roots_xcursor_theme *theme,
- struct wlr_cursor *cursor);
-
-void roots_xcursor_theme_set_move(struct roots_xcursor_theme *theme,
- struct wlr_cursor *cursor);
-
-void roots_xcursor_theme_set_resize(struct roots_xcursor_theme *theme,
- struct wlr_cursor *cursor, uint32_t edges);
-
-void roots_xcursor_theme_set_rotate(struct roots_xcursor_theme *theme,
- struct wlr_cursor *cursor);
-
-void roots_xcursor_theme_xwayland_set_default(struct roots_xcursor_theme *theme,
- struct wlr_xwayland *xwayland);
+const char *roots_xcursor_get_resize_name(uint32_t edges);
#endif
diff --git a/include/wlr/types/wlr_cursor.h b/include/wlr/types/wlr_cursor.h
index 3df74d28..0db32eb2 100644
--- a/include/wlr/types/wlr_cursor.h
+++ b/include/wlr/types/wlr_cursor.h
@@ -6,7 +6,6 @@
#include <wlr/types/wlr_output_layout.h>
#include <wlr/types/wlr_input_device.h>
#include <wlr/types/wlr_box.h>
-#include <wlr/xcursor.h>
struct wlr_cursor_state;
diff --git a/include/wlr/types/wlr_xcursor_manager.h b/include/wlr/types/wlr_xcursor_manager.h
new file mode 100644
index 00000000..c78a6e8d
--- /dev/null
+++ b/include/wlr/types/wlr_xcursor_manager.h
@@ -0,0 +1,53 @@
+#ifndef WLR_TYPES_WLR_XCURSOR_MANAGER_H
+#define WLR_TYPES_WLR_XCURSOR_MANAGER_H
+
+#include <wayland-server.h>
+#include <wlr/types/wlr_cursor.h>
+#include <wlr/xcursor.h>
+
+/**
+ * A scaled XCursor theme.
+ */
+struct wlr_xcursor_manager_theme {
+ uint32_t scale;
+ struct wlr_xcursor_theme *theme;
+ struct wl_list link;
+};
+
+/**
+ * Manage multiple XCursor themes with different scales and set `wlr_cursor`
+ * images.
+ *
+ * This manager can be used to display cursor images on multiple outputs having
+ * different scale factors.
+ */
+struct wlr_xcursor_manager {
+ char *name;
+ uint32_t size;
+ struct wl_list scaled_themes; // wlr_xcursor_manager_theme::link
+};
+
+/**
+ * Create a new XCursor manager. After initialization, scaled themes need to be
+ * loaded with `wlr_xcursor_manager_load`. `size` is the unscaled cursor theme
+ * size.
+ */
+struct wlr_xcursor_manager *wlr_xcursor_manager_create(const char *name,
+ uint32_t size);
+
+void wlr_xcursor_manager_destroy(struct wlr_xcursor_manager *manager);
+
+int wlr_xcursor_manager_load(struct wlr_xcursor_manager *manager,
+ uint32_t scale);
+
+struct wlr_xcursor *wlr_xcursor_manager_get_xcursor(
+ struct wlr_xcursor_manager *manager, const char *name, uint32_t scale);
+
+/**
+ * Set a `wlr_cursor` image. The manager uses all currently loaded scaled
+ * themes.
+ */
+void wlr_xcursor_manager_set_cursor_image(struct wlr_xcursor_manager *manager,
+ const char *name, struct wlr_cursor *cursor);
+
+#endif
diff --git a/include/wlr/xcursor.h b/include/wlr/xcursor.h
index c12d5405..b6362b06 100644
--- a/include/wlr/xcursor.h
+++ b/include/wlr/xcursor.h
@@ -61,7 +61,7 @@ struct wlr_xcursor_theme *wlr_xcursor_theme_load(const char *name, int size);
void wlr_xcursor_theme_destroy(struct wlr_xcursor_theme *theme);
struct wlr_xcursor *wlr_xcursor_theme_get_cursor(
- struct wlr_xcursor_theme *theme, const char *name);
+ struct wlr_xcursor_theme *theme, const char *name);
int wlr_xcursor_frame(struct wlr_xcursor *cursor, uint32_t time);