aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/wlr/types/wlr_compositor.h11
-rw-r--r--types/wlr_compositor.c17
2 files changed, 28 insertions, 0 deletions
diff --git a/include/wlr/types/wlr_compositor.h b/include/wlr/types/wlr_compositor.h
index f65fbf84..e4ac7879 100644
--- a/include/wlr/types/wlr_compositor.h
+++ b/include/wlr/types/wlr_compositor.h
@@ -165,6 +165,8 @@ struct wlr_surface {
bool opaque;
int32_t preferred_buffer_scale;
+ bool preferred_buffer_transform_sent;
+ enum wl_output_transform preferred_buffer_transform;
};
struct wlr_renderer;
@@ -331,6 +333,15 @@ void wlr_surface_set_preferred_buffer_scale(struct wlr_surface *surface,
int32_t scale);
/**
+ * Set the preferred buffer transform for the surface.
+ *
+ * This sends an event to the client indicating the preferred transform to use
+ * for buffers attached to this surface.
+ */
+void wlr_surface_set_preferred_buffer_transform(struct wlr_surface *surface,
+ enum wl_output_transform transform);
+
+/**
* Create the wl_compositor global, which can be used by clients to create
* surfaces and regions.
*
diff --git a/types/wlr_compositor.c b/types/wlr_compositor.c
index e6d4c25f..df7352b0 100644
--- a/types/wlr_compositor.c
+++ b/types/wlr_compositor.c
@@ -1106,6 +1106,23 @@ void wlr_surface_set_preferred_buffer_scale(struct wlr_surface *surface,
surface->preferred_buffer_scale = scale;
}
+void wlr_surface_set_preferred_buffer_transform(struct wlr_surface *surface,
+ enum wl_output_transform transform) {
+ if (wl_resource_get_version(surface->resource) <
+ WL_SURFACE_PREFERRED_BUFFER_TRANSFORM_SINCE_VERSION) {
+ return;
+ }
+
+ if (surface->preferred_buffer_transform == transform &&
+ surface->preferred_buffer_transform_sent) {
+ return;
+ }
+
+ wl_surface_send_preferred_buffer_transform(surface->resource, transform);
+ surface->preferred_buffer_transform_sent = true;
+ surface->preferred_buffer_transform = transform;
+}
+
static const struct wl_compositor_interface compositor_impl;
static struct wlr_compositor *compositor_from_resource(