#ifndef DIYAC_H #define DIYAC_H #include #include #include #include /* 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