]> git.mdlowis.com Git - proto/labwc.git/commitdiff
cursor: Move cursor specific function definitions into cursor.h
authorConsolatis <35009135+Consolatis@users.noreply.github.com>
Fri, 16 Sep 2022 00:03:32 +0000 (02:03 +0200)
committerJohan Malm <johanmalm@users.noreply.github.com>
Fri, 16 Sep 2022 20:30:40 +0000 (21:30 +0100)
include/cursor.h [new file with mode: 0644]
include/labwc.h

diff --git a/include/cursor.h b/include/cursor.h
new file mode 100644 (file)
index 0000000..62fd42a
--- /dev/null
@@ -0,0 +1,100 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+#ifndef __LABWC_CURSOR_H
+#define __LABWC_CURSOR_H
+
+#include <wlr/util/edges.h>
+#include "ssd.h"
+
+struct view;
+struct seat;
+struct server;
+struct wlr_surface;
+struct wlr_scene_node;
+
+/* Cursors used internally by labwc */
+enum lab_cursors {
+       LAB_CURSOR_CLIENT = 0,
+       LAB_CURSOR_DEFAULT,
+       LAB_CURSOR_GRAB,
+       LAB_CURSOR_RESIZE_NW,
+       LAB_CURSOR_RESIZE_N,
+       LAB_CURSOR_RESIZE_NE,
+       LAB_CURSOR_RESIZE_E,
+       LAB_CURSOR_RESIZE_SE,
+       LAB_CURSOR_RESIZE_S,
+       LAB_CURSOR_RESIZE_SW,
+       LAB_CURSOR_RESIZE_W,
+       LAB_CURSOR_COUNT
+};
+
+struct cursor_context {
+       struct view *view;
+       struct wlr_scene_node *node;
+       struct wlr_surface *surface;
+       enum ssd_part_type type;
+       double sx, sy;
+};
+
+/**
+ * get_cursor_context - find view and scene_node at cursor
+ *
+ * Behavior if node points to a surface:
+ *  - If surface is a layer-surface, type will be
+ *    set to LAB_SSD_LAYER_SURFACE and view will be NULL.
+ *
+ *  - If surface is a 'lost' unmanaged xsurface (one
+ *    with a never-mapped parent view), type will
+ *    be set to LAB_SSD_UNMANAGED and view will be NULL.
+ *
+ *    'Lost' unmanaged xsurfaces are usually caused by
+ *    X11 applications opening popups without setting
+ *    the main window as parent. Example: VLC submenus.
+ *
+ *  - Any other surface will cause type to be set to
+ *    LAB_SSD_CLIENT and return the attached view.
+ *
+ * Behavior if node points to internal elements:
+ *  - type will be set to the appropriate enum value
+ *    and view will be NULL if the node is not part of the SSD.
+ *
+ * If no node is found for the given layout coordinates,
+ * type will be set to LAB_SSD_ROOT and view will be NULL.
+ *
+ */
+struct cursor_context get_cursor_context(struct server *server);
+
+/**
+ * cursor_set - set cursor icon
+ * @seat - current seat
+ * @cursor_name - name of cursor, for example "left_ptr" or "grab"
+ */
+void cursor_set(struct seat *seat, const char *cursor_name);
+
+/**
+ * cursor_get_resize_edges - calculate resize edge based on cursor position
+ * @cursor - the current cursor (usually server->seat.cursor)
+ * @cursor_context - result of get_cursor_context()
+ *
+ * Calculates the resize edge combination that is most appropriate based
+ * on the current view and cursor position in relation to each other.
+ *
+ * This is mostly important when either resizing a window using a
+ * keyboard modifier or when using the Resize action from a keybind.
+ */
+uint32_t cursor_get_resize_edges(struct wlr_cursor *cursor,
+       struct cursor_context *ctx);
+
+/**
+ * cursor_update_focus - update cursor focus, may update the cursor icon
+ * @server - server
+ *
+ * This can be used to give the mouse focus to the surface under the cursor
+ * or to force an update of the cursor icon by sending an exit and enter
+ * event to an already focused surface.
+ */
+void cursor_update_focus(struct server *server);
+
+void cursor_init(struct seat *seat);
+void cursor_finish(struct seat *seat);
+
+#endif /* __LABWC_CURSOR_H */
index 40b7e351f47dbdf3c10aa3cc5a47189b234326ca..4a73d8aa345638ee57366c2c33aa804e3a8cfc02 100644 (file)
@@ -45,6 +45,7 @@
 #include <wlr/xwayland.h>
 #endif
 #include <xkbcommon/xkbcommon.h>
+#include "cursor.h"
 #include "config/keybind.h"
 #include "config/rcxml.h"
 #include "ssd.h"
@@ -502,65 +503,6 @@ struct view *desktop_focused_view(struct server *server);
 void desktop_focus_topmost_mapped_view(struct server *server);
 bool isfocusable(struct view *view);
 
-struct cursor_context {
-       struct view *view;
-       struct wlr_scene_node *node;
-       struct wlr_surface *surface;
-       enum ssd_part_type type;
-       double sx, sy;
-};
-
-/**
- * get_cursor_context - find view and scene_node at cursor
- *
- * Behavior if node points to a surface:
- *  - If surface is a layer-surface, type will be
- *    set to LAB_SSD_LAYER_SURFACE and view will be NULL.
- *
- *  - If surface is a 'lost' unmanaged xsurface (one
- *    with a never-mapped parent view), type will
- *    be set to LAB_SSD_UNMANAGED and view will be NULL.
- *
- *    'Lost' unmanaged xsurfaces are usually caused by
- *    X11 applications opening popups without setting
- *    the main window as parent. Example: VLC submenus.
- *
- *  - Any other surface will cause type to be set to
- *    LAB_SSD_CLIENT and return the attached view.
- *
- * Behavior if node points to internal elements:
- *  - type will be set to the appropriate enum value
- *    and view will be NULL if the node is not part of the SSD.
- *
- * If no node is found for the given layout coordinates,
- * type will be set to LAB_SSD_ROOT and view will be NULL.
- *
- */
-struct cursor_context get_cursor_context(struct server *server);
-
-/**
- * cursor_set - set cursor icon
- * @seat - current seat
- * @cursor_name - name of cursor, for example "left_ptr" or "grab"
- */
-void cursor_set(struct seat *seat, const char *cursor_name);
-
-uint32_t cursor_get_resize_edges(struct wlr_cursor *cursor,
-       struct cursor_context *ctx);
-
-/**
- * cursor_update_focus - update cursor focus, may update the cursor icon
- * @server - server
- *
- * This can be used to give the mouse focus to the surface under the cursor
- * or to force an update of the cursor icon by sending an exit and enter
- * event to an already focused surface.
- */
-void cursor_update_focus(struct server *server);
-
-void cursor_init(struct seat *seat);
-void cursor_finish(struct seat *seat);
-
 void keyboard_init(struct seat *seat);
 bool keyboard_any_modifiers_pressed(struct wlr_keyboard *keyboard);
 void keyboard_finish(struct seat *seat);