compositor: Handle unset viewport 38/313438/1
authorSeunghun Lee <shiin.lee@samsung.com>
Mon, 24 Jun 2024 04:06:56 +0000 (13:06 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Wed, 26 Jun 2024 00:34:33 +0000 (09:34 +0900)
Change-Id: I1776c29f6a41fe293e659ee63ebf2c5b87a8acd2

src/bin/server/e_compositor.c

index 32fe7e8..58f5e21 100644 (file)
@@ -1712,28 +1712,44 @@ _ds_surface_buffer_transform_set(struct ds_surface *ds_surface, enum wl_output_t
 static void
 _ds_surface_viewport_source_box_set(struct ds_surface *ds_surface, Eina_Rectangle *box)
 {
-   ds_surface->pending.viewport.has_src = true;
-   ds_surface->pending.viewport.src.x = (double)box->x;
-   ds_surface->pending.viewport.src.y = (double)box->y;
-   ds_surface->pending.viewport.src.width = (double)box->w;
-   ds_surface->pending.viewport.src.height = (double)box->h;
-   ds_surface->current.viewport.has_src = true;
-   ds_surface->current.viewport.src = ds_surface->pending.viewport.src;
+   if (box->x == -1 && box->y == -1 && box->w == -1 && box->h == -1)
+     {
+        ds_surface->pending.viewport.has_src = false;
+        ds_surface->current.viewport.has_src = false;
+     }
+   else
+     {
+        ds_surface->pending.viewport.has_src = true;
+        ds_surface->pending.viewport.src.x = (double)box->x;
+        ds_surface->pending.viewport.src.y = (double)box->y;
+        ds_surface->pending.viewport.src.width = (double)box->w;
+        ds_surface->pending.viewport.src.height = (double)box->h;
+        ds_surface->current.viewport.has_src = true;
+        ds_surface->current.viewport.src = ds_surface->pending.viewport.src;
+     }
 }
 
 static void
 _ds_surface_viewport_destination_set(struct ds_surface *ds_surface, int32_t width, int32_t height)
 {
-   ds_surface->pending.viewport.has_dst = true;
-   ds_surface->pending.viewport.dst_width = width;
-   ds_surface->pending.viewport.dst_height = height;
-   ds_surface->pending.width = width;
-   ds_surface->pending.height = height;
-   ds_surface->current.viewport.has_dst = true;
-   ds_surface->current.viewport.dst_width = width;
-   ds_surface->current.viewport.dst_height = height;
-   ds_surface->current.width = width;
-   ds_surface->current.height = height;
+   if (width == -1 && height == -1)
+     {
+        ds_surface->pending.viewport.has_src = false;
+        ds_surface->current.viewport.has_src = false;
+     }
+   else
+     {
+        ds_surface->pending.viewport.has_dst = true;
+        ds_surface->pending.viewport.dst_width = width;
+        ds_surface->pending.viewport.dst_height = height;
+        ds_surface->pending.width = width;
+        ds_surface->pending.height = height;
+        ds_surface->current.viewport.has_dst = true;
+        ds_surface->current.viewport.dst_width = width;
+        ds_surface->current.viewport.dst_height = height;
+        ds_surface->current.width = width;
+        ds_surface->current.height = height;
+     }
 }
 
 static void