diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/backend/drm/renderer.h | 3 | ||||
-rw-r--r-- | include/wlr/backend.h | 10 | ||||
-rw-r--r-- | include/wlr/backend/drm.h | 3 | ||||
-rw-r--r-- | include/wlr/backend/headless.h | 3 | ||||
-rw-r--r-- | include/wlr/backend/wayland.h | 3 | ||||
-rw-r--r-- | include/wlr/backend/x11.h | 2 | ||||
-rw-r--r-- | include/wlr/render/interface.h | 2 | ||||
-rw-r--r-- | include/wlr/render/wlr_renderer.h | 8 | ||||
-rw-r--r-- | include/wlr/types/wlr_keyboard.h | 13 | ||||
-rw-r--r-- | include/wlr/types/wlr_xdg_shell.h | 29 | ||||
-rw-r--r-- | include/wlr/types/wlr_xdg_shell_v6.h | 20 |
11 files changed, 88 insertions, 8 deletions
diff --git a/include/backend/drm/renderer.h b/include/backend/drm/renderer.h index 5e15f3d5..510abe43 100644 --- a/include/backend/drm/renderer.h +++ b/include/backend/drm/renderer.h @@ -5,6 +5,7 @@ #include <gbm.h> #include <stdbool.h> #include <stdint.h> +#include <wlr/backend.h> #include <wlr/render/wlr_renderer.h> struct wlr_drm_backend; @@ -32,7 +33,7 @@ struct wlr_drm_surface { }; bool init_drm_renderer(struct wlr_drm_backend *drm, - struct wlr_drm_renderer *renderer); + struct wlr_drm_renderer *renderer, wlr_renderer_create_func_t create_render); void finish_drm_renderer(struct wlr_drm_renderer *renderer); bool init_drm_surface(struct wlr_drm_surface *surf, diff --git a/include/wlr/backend.h b/include/wlr/backend.h index 2059e3b7..f40f5353 100644 --- a/include/wlr/backend.h +++ b/include/wlr/backend.h @@ -20,12 +20,20 @@ struct wlr_backend { } events; }; +typedef struct wlr_renderer *(*wlr_renderer_create_func_t)(struct wlr_egl *egl, EGLenum platform, + void *remote_display, EGLint *config_attribs, EGLint visual_id); /** * Automatically initializes the most suitable backend given the environment. * Will always return a multibackend. The backend is created but not started. * Returns NULL on failure. + * + * The compositor can request to initialize the backend's renderer by setting + * the create_render_func. The callback must initialize the given wlr_egl and + * return a valid wlr_renderer, or NULL if it has failed to initiaze it. + * Pass NULL as create_renderer_func to use the backend's default renderer. */ -struct wlr_backend *wlr_backend_autocreate(struct wl_display *display); +struct wlr_backend *wlr_backend_autocreate(struct wl_display *display, + wlr_renderer_create_func_t create_renderer_func); /** * Start the backend. This may signal new_input or new_output immediately, but * may also wait until the display's event loop begins. Returns false on diff --git a/include/wlr/backend/drm.h b/include/wlr/backend/drm.h index 14fafe10..7f41ca15 100644 --- a/include/wlr/backend/drm.h +++ b/include/wlr/backend/drm.h @@ -14,7 +14,8 @@ * a DRM backend, other kinds of backends raise SIGABRT). */ struct wlr_backend *wlr_drm_backend_create(struct wl_display *display, - struct wlr_session *session, int gpu_fd, struct wlr_backend *parent); + struct wlr_session *session, int gpu_fd, struct wlr_backend *parent, + wlr_renderer_create_func_t create_renderer_func); bool wlr_backend_is_drm(struct wlr_backend *backend); bool wlr_output_is_drm(struct wlr_output *output); diff --git a/include/wlr/backend/headless.h b/include/wlr/backend/headless.h index ee784a0d..02c7cd11 100644 --- a/include/wlr/backend/headless.h +++ b/include/wlr/backend/headless.h @@ -9,7 +9,8 @@ * Creates a headless backend. A headless backend has no outputs or inputs by * default. */ -struct wlr_backend *wlr_headless_backend_create(struct wl_display *display); +struct wlr_backend *wlr_headless_backend_create(struct wl_display *display, + wlr_renderer_create_func_t create_renderer_func); /** * Create a new headless output backed by an in-memory EGL framebuffer. You can * read pixels from this framebuffer via wlr_renderer_read_pixels but it is diff --git a/include/wlr/backend/wayland.h b/include/wlr/backend/wayland.h index 31a14c97..119ea247 100644 --- a/include/wlr/backend/wayland.h +++ b/include/wlr/backend/wayland.h @@ -16,7 +16,8 @@ * to NULL for the default behaviour (WAYLAND_DISPLAY env variable or wayland-0 * default) */ -struct wlr_backend *wlr_wl_backend_create(struct wl_display *display, const char *remote); +struct wlr_backend *wlr_wl_backend_create(struct wl_display *display, const char *remote, + wlr_renderer_create_func_t create_renderer_func); /** * Adds a new output to this backend. You may remove outputs by destroying them. diff --git a/include/wlr/backend/x11.h b/include/wlr/backend/x11.h index 7bc1f891..56360bf7 100644 --- a/include/wlr/backend/x11.h +++ b/include/wlr/backend/x11.h @@ -8,7 +8,7 @@ #include <wlr/types/wlr_output.h> struct wlr_backend *wlr_x11_backend_create(struct wl_display *display, - const char *x11_display); + const char *x11_display, wlr_renderer_create_func_t create_renderer_func); struct wlr_output *wlr_x11_output_create(struct wlr_backend *backend); bool wlr_backend_is_x11(struct wlr_backend *backend); diff --git a/include/wlr/render/interface.h b/include/wlr/render/interface.h index e7cdce0a..2267d376 100644 --- a/include/wlr/render/interface.h +++ b/include/wlr/render/interface.h @@ -49,6 +49,8 @@ struct wlr_renderer_impl { struct wlr_texture *(*texture_from_dmabuf)(struct wlr_renderer *renderer, struct wlr_dmabuf_buffer_attribs *attribs); void (*destroy)(struct wlr_renderer *renderer); + void (*init_wl_display)(struct wlr_renderer *renderer, + struct wl_display *wl_display); }; void wlr_renderer_init(struct wlr_renderer *renderer, diff --git a/include/wlr/render/wlr_renderer.h b/include/wlr/render/wlr_renderer.h index 21f9c16c..039bb66e 100644 --- a/include/wlr/render/wlr_renderer.h +++ b/include/wlr/render/wlr_renderer.h @@ -3,6 +3,7 @@ #include <stdint.h> #include <wayland-server-protocol.h> +#include <wlr/render/egl.h> #include <wlr/render/wlr_texture.h> #include <wlr/types/wlr_box.h> @@ -16,6 +17,9 @@ struct wlr_renderer { } events; }; +struct wlr_renderer *wlr_renderer_autocreate(struct wlr_egl *egl, EGLenum platform, + void *remote_display, EGLint *config_attribs, EGLint visual_id); + void wlr_renderer_begin(struct wlr_renderer *r, int width, int height); void wlr_renderer_end(struct wlr_renderer *r); void wlr_renderer_clear(struct wlr_renderer *r, const float color[static 4]); @@ -98,8 +102,8 @@ bool wlr_renderer_read_pixels(struct wlr_renderer *r, enum wl_shm_format fmt, */ bool wlr_renderer_format_supported(struct wlr_renderer *r, enum wl_shm_format fmt); -void wlr_renderer_init_wl_shm(struct wlr_renderer *r, - struct wl_display *display); +void wlr_renderer_init_wl_display(struct wlr_renderer *r, + struct wl_display *wl_display); /** * Destroys this wlr_renderer. Textures must be destroyed separately. */ diff --git a/include/wlr/types/wlr_keyboard.h b/include/wlr/types/wlr_keyboard.h index bfb4e611..97288508 100644 --- a/include/wlr/types/wlr_keyboard.h +++ b/include/wlr/types/wlr_keyboard.h @@ -59,7 +59,20 @@ struct wlr_keyboard { } repeat_info; struct { + /** + * The `key` event signals with a `wlr_event_keyboard_key` event that a + * key has been pressed or released on the keyboard. This event is + * emitted before the xkb state of the keyboard has been updated + * (including modifiers). + */ struct wl_signal key; + + /** + * The `modifiers` event signals that the modifier state of the + * `wlr_keyboard` has been updated. At this time, you can read the + * modifier state of the `wlr_keyboard` and handle the updated state by + * sending it to clients. + */ struct wl_signal modifiers; struct wl_signal keymap; struct wl_signal repeat_info; diff --git a/include/wlr/types/wlr_xdg_shell.h b/include/wlr/types/wlr_xdg_shell.h index 22008563..5eb30a16 100644 --- a/include/wlr/types/wlr_xdg_shell.h +++ b/include/wlr/types/wlr_xdg_shell.h @@ -14,6 +14,12 @@ struct wlr_xdg_shell { struct wl_listener display_destroy; struct { + /** + * The `new_surface` event signals that a client has requested to + * create a new shell surface. At this point, the surface is ready to + * be configured but is not mapped or ready receive input events. The + * surface will be ready to be managed on the `map` event. + */ struct wl_signal new_surface; } events; @@ -86,6 +92,7 @@ enum wlr_xdg_surface_role { struct wlr_xdg_toplevel_state { bool maximized, fullscreen, resizing, activated; + uint32_t tiled; // enum wlr_edges uint32_t width, height; uint32_t max_width, max_height; uint32_t min_width, min_height; @@ -161,7 +168,21 @@ struct wlr_xdg_surface { struct wl_signal destroy; struct wl_signal ping_timeout; struct wl_signal new_popup; + /** + * The `map` event signals that the shell surface is ready to be + * managed by the compositor and rendered on the screen. At this point, + * the surface has configured its properties, has had the opportunity + * to bind to the seat to receive input events, and has a buffer that + * is ready to be rendered. You can now safely add this surface to a + * list of views. + */ struct wl_signal map; + /** + * The `unmap` event signals that the surface is no longer in a state + * where it should be shown on the screen. This might happen if the + * surface no longer has a displayable buffer because either the + * surface has been hidden or is about to be destroyed. + */ struct wl_signal unmap; } events; @@ -247,6 +268,14 @@ uint32_t wlr_xdg_toplevel_set_resizing(struct wlr_xdg_surface *surface, bool resizing); /** + * Request that this toplevel surface consider itself in a tiled layout and some + * edges are adjacent to another part of the tiling grid. `tiled_edges` is a + * bitfield of `enum wlr_edges`. Returns the associated configure serial. + */ +uint32_t wlr_xdg_toplevel_set_tiled(struct wlr_xdg_surface *surface, + uint32_t tiled_edges); + +/** * Request that this xdg surface closes. */ void wlr_xdg_surface_send_close(struct wlr_xdg_surface *surface); diff --git a/include/wlr/types/wlr_xdg_shell_v6.h b/include/wlr/types/wlr_xdg_shell_v6.h index bce645da..2fdf49e5 100644 --- a/include/wlr/types/wlr_xdg_shell_v6.h +++ b/include/wlr/types/wlr_xdg_shell_v6.h @@ -15,6 +15,12 @@ struct wlr_xdg_shell_v6 { struct wl_listener display_destroy; struct { + /** + * The `new_surface` event signals that a client has requested to + * create a new shell surface. At this point, the surface is ready to + * be configured but is not mapped or ready receive input events. The + * surface will be ready to be managed on the `map` event. + */ struct wl_signal new_surface; } events; @@ -160,7 +166,21 @@ struct wlr_xdg_surface_v6 { struct wl_signal destroy; struct wl_signal ping_timeout; struct wl_signal new_popup; + /** + * The `map` event signals that the shell surface is ready to be + * managed by the compositor and rendered on the screen. At this point, + * the surface has configured its properties, has had the opportunity + * to bind to the seat to receive input events, and has a buffer that + * is ready to be rendered. You can now safely add this surface to a + * list of views. + */ struct wl_signal map; + /** + * The `unmap` event signals that the surface is no longer in a state + * where it should be shown on the screen. This might happen if the + * surface no longer has a displayable buffer because either the + * surface has been hidden or is about to be destroyed. + */ struct wl_signal unmap; } events; |