[PATCH weston] toytoolkit: Take into account transform when sending output allocation.

Scott Moreau oreaus at gmail.com
Sat Sep 29 01:03:11 PDT 2012


---

It seems only wscreensaver and tablet-shell use output_get_allocation(). This
fixes a problem when screensaver gets the wrong size for transformed outputs
where width and height are swapped.

 clients/window.c | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/clients/window.c b/clients/window.c
index 41f9d2c..0a66e65 100644
--- a/clients/window.c
+++ b/clients/window.c
@@ -237,6 +237,7 @@ struct output {
 	struct wl_output *output;
 	struct rectangle allocation;
 	struct wl_list link;
+	int transform;
 
 	display_output_handler_t destroy_handler;
 	void *user_data;
@@ -3441,6 +3442,7 @@ display_handle_geometry(void *data,
 
 	output->allocation.x = x;
 	output->allocation.y = y;
+	output->transform = transform;
 }
 
 static void
@@ -3533,9 +3535,22 @@ output_set_destroy_handler(struct output *output,
 }
 
 void
-output_get_allocation(struct output *output, struct rectangle *allocation)
+output_get_allocation(struct output *output, struct rectangle *base)
 {
-	*allocation = output->allocation;
+	struct rectangle allocation = output->allocation;
+
+	switch (output->transform) {
+	case WL_OUTPUT_TRANSFORM_90:
+	case WL_OUTPUT_TRANSFORM_270:
+	case WL_OUTPUT_TRANSFORM_FLIPPED_90:
+	case WL_OUTPUT_TRANSFORM_FLIPPED_270:
+	        /* Swap width and height */
+	        allocation.width = output->allocation.height;
+	        allocation.height = output->allocation.width;
+	        break;
+	}
+
+	*base = allocation;
 }
 
 struct wl_output *
-- 
1.7.11.4



More information about the wayland-devel mailing list