e_comp_wl: Use e_surface_buffer_source_box_get 15/320915/1
authorSeunghun Lee <shiin.lee@samsung.com>
Fri, 7 Mar 2025 06:28:44 +0000 (15:28 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Tue, 11 Mar 2025 04:41:13 +0000 (13:41 +0900)
Change-Id: Ie58438b0f021f213b653c5c08c204e5ff41f1430

src/bin/server/e_comp_wl.c

index 9b8a89a72c410d3f376fa416dd38c7b443d166e5..c0983fb1980efc86c2e3324a14a1acc5dae83700 100644 (file)
@@ -5646,88 +5646,16 @@ e_comp_wl_surface_state_finish(E_Comp_Wl_Surface_State *state)
 }
 
 static void
-buffer_transform(int width, int height, uint32_t transform, int32_t scale,
-                 int sx, int sy, int *dx, int *dy)
+_buffer_viewport_get(E_Surface *surface, Eina_Rectangle *out)
 {
-   switch (transform)
-     {
-      case WL_OUTPUT_TRANSFORM_NORMAL:
-      default:
-         *dx = sx, *dy = sy;
-         break;
-      case WL_OUTPUT_TRANSFORM_FLIPPED:
-         *dx = width - sx, *dy = sy;
-         break;
-      case WL_OUTPUT_TRANSFORM_90:
-         *dx = height - sy, *dy = sx;
-         break;
-      case WL_OUTPUT_TRANSFORM_FLIPPED_90:
-         *dx = height - sy, *dy = width - sx;
-         break;
-      case WL_OUTPUT_TRANSFORM_180:
-         *dx = width - sx, *dy = height - sy;
-         break;
-      case WL_OUTPUT_TRANSFORM_FLIPPED_180:
-         *dx = sx, *dy = height - sy;
-         break;
-      case WL_OUTPUT_TRANSFORM_270:
-         *dx = sy, *dy = width - sx;
-         break;
-      case WL_OUTPUT_TRANSFORM_FLIPPED_270:
-         *dx = sy, *dy = sx;
-         break;
-     }
+   struct ds_fbox source_box;
 
-   *dx *= scale;
-   *dy *= scale;
-}
-
-static void
-_buffer_viewport_get(E_Comp_Wl_Buffer_Viewport *vp, int bw, int bh, Eina_Rectangle *out)
-{
-   int x1, y1, x2, y2;
-   int tx1, ty1, tx2, ty2;
-   int width_from_buffer, height_from_buffer;
+   e_surface_buffer_source_box_get(surface, &source_box);
 
-   switch (vp->buffer.transform)
-     {
-      case WL_OUTPUT_TRANSFORM_90:
-      case WL_OUTPUT_TRANSFORM_270:
-      case WL_OUTPUT_TRANSFORM_FLIPPED_90:
-      case WL_OUTPUT_TRANSFORM_FLIPPED_270:
-         width_from_buffer = bh / vp->buffer.scale;
-         height_from_buffer = bw / vp->buffer.scale;
-         break;
-      default:
-         width_from_buffer = bw / vp->buffer.scale;
-         height_from_buffer = bh / vp->buffer.scale;
-         break;
-     }
-
-   if (vp->buffer.src_width == wl_fixed_from_int(-1))
-     {
-        x1 = 0.0;
-        y1 = 0.0;
-        x2 = width_from_buffer;
-        y2 = height_from_buffer;
-     }
-   else
-     {
-        x1 = wl_fixed_to_int(vp->buffer.src_x);
-        y1 = wl_fixed_to_int(vp->buffer.src_y);
-        x2 = wl_fixed_to_int(vp->buffer.src_x + vp->buffer.src_width);
-        y2 = wl_fixed_to_int(vp->buffer.src_y + vp->buffer.src_height);
-     }
-
-   buffer_transform(width_from_buffer, height_from_buffer,
-                    vp->buffer.transform, vp->buffer.scale, x1, y1, &tx1, &ty1);
-   buffer_transform(width_from_buffer, height_from_buffer,
-                    vp->buffer.transform, vp->buffer.scale, x2, y2, &tx2, &ty2);
-
-   out->x = (tx1 <= tx2) ? tx1 : tx2;
-   out->y = (ty1 <= ty2) ? ty1 : ty2;
-   out->w = (tx1 <= tx2) ? tx2 - tx1 : tx1 - tx2;
-   out->h = (ty1 <= ty2) ? ty2 - ty1 : ty1 - ty2;
+   out->x = (int)source_box.x;
+   out->y = (int)source_box.y;
+   out->w = (int)source_box.width;
+   out->h = (int)source_box.height;
 }
 
 /**
@@ -5858,33 +5786,21 @@ _e_comp_wl_surface_output_viewport_get(E_Client *ec, Eina_Rectangle *out)
 EINTERN Eina_Bool
 e_comp_wl_surface_viewport_get(E_Client *ec, Eina_Rectangle *buffer_viewport, Eina_Rectangle *output_viewport, unsigned int *transform)
 {
-   E_Comp_Wl_Buffer *buffer;
-   E_Comp_Wl_Buffer_Viewport *vp;
    E_Map *m;
-   E_Surface *surface;
    enum wl_output_transform buffer_transform;
    unsigned int rotation;
    Eina_Bool res = EINA_FALSE;
-   int32_t bw, bh;
 
    EINA_SAFETY_ON_NULL_RETURN_VAL(ec, EINA_FALSE);
 
    if (e_object_is_del(E_OBJECT(ec)))
      return EINA_FALSE;
 
-   surface = e_surface_from_ec(ec);
-
-   vp = &ec->comp_data->scaler.buffer_viewport;
-
    if (buffer_viewport)
      {
-        buffer = e_surface_buffer_try_get(surface);
-        /* Getting a viewport of buffer needs geometry of buffer. */
-        if (!buffer)
+        _buffer_viewport_get(e_surface_from_ec(ec), buffer_viewport);
+        if (buffer_viewport->w == 0 || buffer_viewport->h == 0)
           return EINA_FALSE;
-
-        e_comp_wl_buffer_size_get(buffer, &bw, &bh);
-        _buffer_viewport_get(vp, bw, bh, buffer_viewport);
      }
 
    if ((output_viewport) || (transform))