compositor: add wlr_surface_set_preferred_buffer_scale()

References: https://gitlab.freedesktop.org/wayland/wayland/-/merge_requests/220
This commit is contained in:
Simon Ser 2022-09-05 15:51:16 +02:00
parent 0bb574239d
commit 42edd36785
2 changed files with 29 additions and 1 deletions

View file

@ -163,6 +163,8 @@ struct wlr_surface {
} previous; } previous;
bool opaque; bool opaque;
int32_t preferred_buffer_scale;
}; };
struct wlr_renderer; struct wlr_renderer;
@ -319,6 +321,15 @@ uint32_t wlr_surface_lock_pending(struct wlr_surface *surface);
*/ */
void wlr_surface_unlock_cached(struct wlr_surface *surface, uint32_t seq); void wlr_surface_unlock_cached(struct wlr_surface *surface, uint32_t seq);
/**
* Set the preferred buffer scale for the surface.
*
* This sends an event to the client indicating the preferred scale to use for
* buffers attached to this surface.
*/
void wlr_surface_set_preferred_buffer_scale(struct wlr_surface *surface,
int32_t scale);
/** /**
* Create the wl_compositor global, which can be used by clients to create * Create the wl_compositor global, which can be used by clients to create
* surfaces and regions. * surfaces and regions.

View file

@ -15,7 +15,7 @@
#include "types/wlr_subcompositor.h" #include "types/wlr_subcompositor.h"
#include "util/time.h" #include "util/time.h"
#define COMPOSITOR_VERSION 5 #define COMPOSITOR_VERSION 6
#define CALLBACK_VERSION 1 #define CALLBACK_VERSION 1
static int min(int fst, int snd) { static int min(int fst, int snd) {
@ -1089,6 +1089,23 @@ void wlr_surface_get_buffer_source_box(struct wlr_surface *surface,
} }
} }
void wlr_surface_set_preferred_buffer_scale(struct wlr_surface *surface,
int32_t scale) {
assert(scale > 0);
if (wl_resource_get_version(surface->resource) <
WL_SURFACE_PREFERRED_BUFFER_SCALE_SINCE_VERSION) {
return;
}
if (surface->preferred_buffer_scale == scale) {
return;
}
wl_surface_send_preferred_buffer_scale(surface->resource, scale);
surface->preferred_buffer_scale = scale;
}
static const struct wl_compositor_interface compositor_impl; static const struct wl_compositor_interface compositor_impl;
static struct wlr_compositor *compositor_from_resource( static struct wlr_compositor *compositor_from_resource(