wlroots-hyprland/include/wlr/types/wlr_surface.h

139 lines
4.0 KiB
C
Raw Normal View History

#ifndef WLR_TYPES_WLR_SURFACE_H
#define WLR_TYPES_WLR_SURFACE_H
#include <wayland-server.h>
#include <pixman.h>
#include <stdint.h>
2017-09-22 04:17:29 +02:00
#include <stdbool.h>
struct wlr_frame_callback {
struct wl_resource *resource;
struct wl_list link;
};
#define WLR_SURFACE_INVALID_BUFFER 1
#define WLR_SURFACE_INVALID_SURFACE_DAMAGE 2
#define WLR_SURFACE_INVALID_BUFFER_DAMAGE 4
#define WLR_SURFACE_INVALID_OPAQUE_REGION 8
#define WLR_SURFACE_INVALID_INPUT_REGION 16
2017-08-11 20:30:42 +02:00
#define WLR_SURFACE_INVALID_TRANSFORM 32
#define WLR_SURFACE_INVALID_SCALE 64
2017-09-25 00:24:48 +02:00
#define WLR_SURFACE_INVALID_SUBSURFACE_POSITION 128
#define WLR_SURFACE_INVALID_FRAME_CALLBACK_LIST 256
struct wlr_surface_state {
uint32_t invalid;
struct wl_resource *buffer;
struct wl_listener buffer_destroy_listener;
int32_t sx, sy;
pixman_region32_t surface_damage, buffer_damage;
pixman_region32_t opaque, input;
2017-08-14 22:30:53 +02:00
enum wl_output_transform transform;
int32_t scale;
int width, height;
int buffer_width, buffer_height;
2017-09-25 00:24:48 +02:00
struct {
int32_t x, y;
} subsurface_position;
struct wl_list frame_callback_list; // wl_surface.frame
};
2017-09-24 17:17:17 +02:00
struct wlr_subsurface {
struct wl_resource *resource;
struct wlr_surface *surface;
struct wlr_surface *parent;
2017-09-25 00:24:48 +02:00
struct wlr_surface_state *cached;
bool has_cache;
2017-09-24 17:17:17 +02:00
bool synchronized;
2017-09-29 14:40:37 +02:00
bool reordered;
2017-09-25 00:24:48 +02:00
struct wl_list parent_link;
2017-09-29 14:40:37 +02:00
struct wl_list parent_pending_link;
2017-09-30 19:24:59 +02:00
struct wl_listener parent_destroy_listener;
2017-09-24 17:17:17 +02:00
};
struct wlr_surface {
struct wl_resource *resource;
2017-08-11 04:15:37 +02:00
struct wlr_renderer *renderer;
struct wlr_texture *texture;
2017-09-25 00:24:48 +02:00
struct wlr_surface_state *current, *pending;
const char *role; // the lifetime-bound role or null
float buffer_to_surface_matrix[16];
float surface_to_buffer_matrix[16];
struct {
struct wl_signal commit;
2017-09-11 19:01:53 +02:00
struct wl_signal destroy;
2017-10-08 19:12:28 +02:00
} events;
2017-09-24 14:25:53 +02:00
// destroy listener used by compositor
struct wl_listener compositor_listener;
2017-08-10 12:42:35 +02:00
void *compositor_data;
2017-09-24 14:23:18 +02:00
// subsurface properties
struct wlr_subsurface *subsurface;
2017-09-25 00:24:48 +02:00
struct wl_list subsurface_list; // wlr_subsurface::parent_link
2017-09-24 14:23:18 +02:00
2017-09-29 14:40:37 +02:00
// wlr_subsurface::parent_pending_link
struct wl_list subsurface_pending_list;
void *data;
};
2017-08-09 15:58:10 +02:00
struct wlr_renderer;
struct wlr_surface *wlr_surface_create(struct wl_resource *res,
struct wlr_renderer *renderer);
/**
* Gets a matrix you can pass into wlr_render_with_matrix to display this
* surface. `matrix` is the output matrix, `projection` is the wlr_output
* projection matrix, and `transform` is any additional transformations you want
* to perform on the surface (or NULL/the identity matrix if you don't).
* `transform` is used before the surface is scaled, so its geometry extends
* from 0 to 1 in both dimensions.
*/
void wlr_surface_get_matrix(struct wlr_surface *surface,
float (*matrix)[16],
const float (*projection)[16],
const float (*transform)[16]);
2017-09-12 00:06:19 +02:00
/**
* Set the lifetime role for this surface. Returns 0 on success or -1 if the
* role cannot be set.
*/
int wlr_surface_set_role(struct wlr_surface *surface, const char *role,
struct wl_resource *error_resource, uint32_t error_code);
2017-10-23 03:07:32 +02:00
/**
* Whether or not this surface currently has an attached buffer. A surface has
* an attached buffer when it commits with a non-null buffer in its pending
* state. A surface will not have a buffer if it has never committed one, has
* committed a null buffer, or something went wrong with uploading the buffer.
*/
bool wlr_surface_has_buffer(struct wlr_surface *surface);
2017-09-24 14:23:18 +02:00
/**
* Create the subsurface implementation for this surface.
*/
void wlr_surface_make_subsurface(struct wlr_surface *surface,
struct wlr_surface *parent, uint32_t id);
2017-09-29 14:58:17 +02:00
/**
* Get the top of the subsurface tree for this surface.
*/
struct wlr_surface *wlr_surface_get_main_surface(struct wlr_surface *surface);
/**
* Find a subsurface within this surface at the surface-local coordinates.
* Returns the surface and coordinates in the topmost surface coordinate system
* or NULL if no subsurface is found at that location.
*/
struct wlr_subsurface *wlr_surface_subsurface_at(struct wlr_surface *surface,
double sx, double sy, double *sub_x, double *sub_y);
#endif