119 lines
2.9 KiB
C
119 lines
2.9 KiB
C
|
#ifndef DIYAC_H
|
||
|
#define DIYAC_H
|
||
|
#include <wayland-server-core.h>
|
||
|
#include <wlr/backend.h>
|
||
|
#include <wlr/types/wlr_xdg_shell.h>
|
||
|
#include <wlr/types/wlr_layer_shell_v1.h>
|
||
|
/* For brevity's sake, struct members are annotated where they are used. */
|
||
|
enum diyac_cursor_mode
|
||
|
{
|
||
|
DIYAC_CURSOR_PASSTHROUGH,
|
||
|
DIYAC_CURSOR_MOVE,
|
||
|
DIYAC_CURSOR_RESIZE,
|
||
|
};
|
||
|
|
||
|
struct diyac_seat {
|
||
|
struct wlr_seat* wlr_seat;
|
||
|
struct diyac_server *server;
|
||
|
|
||
|
struct wlr_cursor *cursor;
|
||
|
enum diyac_cursor_mode cursor_mode;
|
||
|
struct wlr_xcursor_manager *cursor_mgr;
|
||
|
struct wl_listener cursor_motion;
|
||
|
struct wl_listener cursor_motion_absolute;
|
||
|
struct wl_listener cursor_button;
|
||
|
struct wl_listener cursor_axis;
|
||
|
struct wl_listener cursor_frame;
|
||
|
|
||
|
struct wl_listener new_input;
|
||
|
struct wl_listener request_cursor;
|
||
|
struct wl_listener request_set_selection;
|
||
|
struct wl_list keyboards;
|
||
|
};
|
||
|
|
||
|
struct diyac_server
|
||
|
{
|
||
|
struct wl_display *wl_display;
|
||
|
struct wlr_backend *backend;
|
||
|
struct wlr_renderer *renderer;
|
||
|
struct wlr_allocator *allocator;
|
||
|
struct wlr_scene *scene;
|
||
|
struct wlr_scene_output_layout *scene_layout;
|
||
|
|
||
|
struct wlr_xdg_shell *xdg_shell;
|
||
|
struct wlr_layer_shell_v1 *layer_shell;
|
||
|
struct wl_listener new_xdg_surface;
|
||
|
struct wl_listener new_layer_surface;
|
||
|
struct wl_list toplevels;
|
||
|
|
||
|
struct diyac_seat seat;
|
||
|
|
||
|
struct diyac_toplevel *grabbed_toplevel;
|
||
|
double grab_x, grab_y;
|
||
|
struct wlr_box grab_geobox;
|
||
|
uint32_t resize_edges;
|
||
|
|
||
|
struct wlr_output_layout *output_layout;
|
||
|
struct wl_list outputs;
|
||
|
struct wl_listener new_output;
|
||
|
};
|
||
|
|
||
|
struct diyac_layer_surface
|
||
|
{
|
||
|
struct wlr_scene_layer_surface_v1 *scene_layer_surface;
|
||
|
struct diyac_server *server;
|
||
|
bool mapped;
|
||
|
struct wl_listener map;
|
||
|
struct wl_listener unmap;
|
||
|
struct wl_listener surface_commit;
|
||
|
struct wl_listener output_destroy;
|
||
|
struct wl_listener node_destroy;
|
||
|
struct wl_listener new_popup;
|
||
|
};
|
||
|
|
||
|
struct diyac_output
|
||
|
{
|
||
|
struct wl_list link;
|
||
|
struct diyac_server *server;
|
||
|
struct wlr_output *wlr_output;
|
||
|
struct wl_listener frame;
|
||
|
struct wl_listener request_state;
|
||
|
struct wl_listener destroy;
|
||
|
|
||
|
// layer output
|
||
|
struct wlr_scene_tree *layer_tree[4];
|
||
|
};
|
||
|
|
||
|
struct diyac_toplevel
|
||
|
{
|
||
|
struct wl_list link;
|
||
|
struct diyac_server *server;
|
||
|
struct wlr_xdg_toplevel *xdg_toplevel;
|
||
|
struct wlr_scene_tree *scene_tree;
|
||
|
struct wlr_output *output;
|
||
|
struct wl_listener map;
|
||
|
struct wl_listener unmap;
|
||
|
struct wl_listener destroy;
|
||
|
struct wl_listener request_move;
|
||
|
struct wl_listener request_resize;
|
||
|
struct wl_listener request_maximize;
|
||
|
struct wl_listener request_fullscreen;
|
||
|
};
|
||
|
|
||
|
struct diyac_keyboard
|
||
|
{
|
||
|
struct wl_list link;
|
||
|
struct diyac_server *server;
|
||
|
struct wlr_keyboard *wlr_keyboard;
|
||
|
|
||
|
struct wl_listener modifiers;
|
||
|
struct wl_listener key;
|
||
|
struct wl_listener destroy;
|
||
|
};
|
||
|
|
||
|
void diyac_focus_toplevel(struct diyac_toplevel *toplevel, struct wlr_surface *surface);
|
||
|
struct diyac_toplevel *diyac_toplevel_at(
|
||
|
struct diyac_server *server, double lx, double ly,
|
||
|
struct wlr_surface **surface, double *sx, double *sy);
|
||
|
|
||
|
#endif
|