e_comp_wl: Deprecate opaque of E_Comp_Wl_Surface_State 92/315792/1
authorSeunghun Lee <shiin.lee@samsung.com>
Thu, 22 Aug 2024 00:57:29 +0000 (09:57 +0900)
committerSeunghun Lee <shiin@samsung.com>
Wed, 4 Dec 2024 23:45:30 +0000 (08:45 +0900)
It's no longer necessary since it's been handled libds.

Change-Id: I6a53e98ad912ff53e2b1532e4c4649c4a85fbcc6

src/bin/server/e_comp_wl.c
src/bin/server/e_comp_wl_intern.h
src/bin/server/e_compositor.c
src/include/e_comp_wl.h

index c4c76b937962070e9aeac2f3119f4d045cde35d2..449d7c57b535fca4b5c459fdc9ac7999b2888c53 100644 (file)
@@ -2726,9 +2726,6 @@ _e_comp_wl_surface_state_init(E_Comp_Wl_Surface_State *state, int w, int h)
    state->input = eina_tiler_new(w, h);
    eina_tiler_tile_size_set(state->input, 1, 1);
 
-   state->opaque = eina_tiler_new(w, h);
-   eina_tiler_tile_size_set(state->opaque, 1, 1);
-
    state->buffer_viewport.buffer.transform = WL_OUTPUT_TRANSFORM_NORMAL;
    state->buffer_viewport.buffer.scale = 1;
    state->buffer_viewport.buffer.src_width = wl_fixed_from_int(-1);
@@ -2746,9 +2743,6 @@ _e_comp_wl_surface_state_finish(E_Comp_Wl_Surface_State *state)
    EINA_LIST_FREE(state->frames, cb)
      wl_resource_destroy(cb);
 
-   if (state->opaque) eina_tiler_free(state->opaque);
-   state->opaque = NULL;
-
    if (state->input) eina_tiler_free(state->input);
    state->input = NULL;
 
@@ -2918,6 +2912,37 @@ _e_comp_wl_surface_damage_update(E_Client *ec)
      _e_comp_wl_surface_damage_set(ec);
 }
 
+static void
+_e_comp_wl_client_pixmap_opaque_region_update(E_Client *ec, int buffer_width, int buffer_height)
+{
+   E_Surface *surface = e_surface_from_ec(ec);
+   pixman_region32_t region;
+   pixman_region32_t *opaque_region;
+   pixman_box32_t *rects;
+   int nrects, i;
+
+   e_pixmap_image_opaque_set(ec->pixmap, 0, 0, 0, 0);
+
+   opaque_region = e_surface_opaque_region_get(surface);
+   if (!opaque_region)
+     return;
+
+   pixman_region32_init(&region);
+
+   pixman_region32_intersect_rect(&region, opaque_region, 0, 0, buffer_width, buffer_height);
+   rects = pixman_region32_rectangles(&region, &nrects);
+   for (i = 0; i < nrects; i++)
+     {
+        e_pixmap_image_opaque_set(ec->pixmap,
+                                  rects[i].x1,
+                                  rects[i].y1,
+                                  rects[i].x2 - rects[i].x1,
+                                  rects[i].y2 - rects[i].y1);
+     }
+
+   pixman_region32_fini(&region);
+}
+
 static void
 _e_comp_wl_surface_state_commit(E_Client *ec, E_Comp_Wl_Surface_State *state)
 {
@@ -3108,26 +3133,7 @@ _e_comp_wl_surface_state_commit(E_Client *ec, E_Comp_Wl_Surface_State *state)
    if (e_client_view_get(ec))
      _e_comp_wl_surface_damage_update(ec);
 
-   /* put state opaque into surface */
-   e_pixmap_image_opaque_set(ec->pixmap, 0, 0, 0, 0);
-   if (state->opaque)
-     {
-        Eina_Rectangle *rect;
-        Eina_Iterator *itr;
-
-        itr = eina_tiler_iterator_new(state->opaque);
-        EINA_ITERATOR_FOREACH(itr, rect)
-          {
-             Eina_Rectangle r;
-
-             EINA_RECTANGLE_SET(&r, rect->x, rect->y, rect->w, rect->h);
-             E_RECTS_CLIP_TO_RECT(r.x, r.y, r.w, r.h, 0, 0, state->bw, state->bh);
-             e_pixmap_image_opaque_set(ec->pixmap, r.x, r.y, r.w, r.h);
-             break;
-          }
-
-        eina_iterator_free(itr);
-     }
+   _e_comp_wl_client_pixmap_opaque_region_update(ec, state->bw, state->bh);
 
    /* put state input into surface */
    if ((state->input) &&
@@ -6406,25 +6412,17 @@ e_comp_wl_client_surface_pending_buffer_set(E_Client *ec, E_Comp_Wl_Buffer *buff
 }
 
 EINTERN void
-e_comp_wl_client_surface_pending_opaque_region_set(E_Client *ec, Eina_Tiler *region)
+e_comp_wl_client_opaque_region_set(E_Client *ec, pixman_region32_t *region)
 {
-   if (ec->comp_data->pending.opaque)
-     eina_tiler_clear(ec->comp_data->pending.opaque);
-
-   if (region)
+   if (pixman_region32_not_empty(region))
      {
-        eina_tiler_union(ec->comp_data->pending.opaque, region);
-
-        if (!eina_tiler_empty(ec->comp_data->pending.opaque))
+        if (ec->argb)
           {
-             if (ec->argb)
-               {
-                  ec->argb = EINA_FALSE;
-                  ELOGF("COMP", "Set argb:%d", ec, ec->argb);
-                  EC_CHANGED(ec);
-                  _e_comp_wl_hook_call(E_COMP_WL_HOOK_CLIENT_ALPHA_CHANGE, ec);
-                  e_view_client_alpha_set(e_client_view_get(ec), EINA_FALSE);
-               }
+             ec->argb = EINA_FALSE;
+             ELOGF("COMP", "Set argb:%d", ec, ec->argb);
+             EC_CHANGED(ec);
+             _e_comp_wl_hook_call(E_COMP_WL_HOOK_CLIENT_ALPHA_CHANGE, ec);
+             e_view_client_alpha_set(e_client_view_get(ec), EINA_FALSE);
           }
      }
    else
index e89deca1740ab5fa3c13b0b3c02f8d278f53d241..cee44cbe50274dea33859b2d319a749fd905afe9 100644 (file)
@@ -6,6 +6,8 @@
 #include "e_policy_wl.h"
 #include "e_device_intern.h"
 
+#include <pixman.h>
+
 EINTERN E_Comp_Wl_Data *e_comp_wl_init(void);
 EINTERN void            e_comp_wl_shutdown(void);
 EINTERN E_Comp_Wl_Data *e_comp_wl_get(void);
@@ -90,7 +92,7 @@ EINTERN void e_comp_wl_client_evas_deinit(E_Client *ec);
 EINTERN void e_comp_wl_client_surface_init(E_Client *ec);
 EINTERN void e_comp_wl_client_surface_finish(E_Client *ec);
 EINTERN void e_comp_wl_client_surface_pending_buffer_set(E_Client *ec, E_Comp_Wl_Buffer *buffer, int32_t sx, int32_t sy);
-EINTERN void e_comp_wl_client_surface_pending_opaque_region_set(E_Client *ec, Eina_Tiler *region);
+EINTERN void e_comp_wl_client_opaque_region_set(E_Client *ec, pixman_region32_t *region);
 EINTERN void e_comp_wl_client_surface_pending_input_region_set(E_Client *ec, Eina_Tiler *region);
 EINTERN void e_comp_wl_client_surface_pending_commit(E_Client *ec);
 
index f05561756a29c7fe265efde3fa15203f66f57c4c..d47e6aace40d062d27f25de8c805309a8c2e059f 100644 (file)
@@ -1092,22 +1092,8 @@ _e_surface_pending_opaque_region_update(E_Surface *surface)
 {
    struct ds_surface *ds_surface = surface->ds_surface;
    E_Client *ec = surface->ec;
-   Eina_Tiler *region;
-
-   if (pixman_region32_not_empty(&ds_surface->current.opaque))
-     {
-        region = _tiler_new_from_pixman_region(&ds_surface->current.opaque);
-        if (!region)
-          return;
-
-        e_comp_wl_client_surface_pending_opaque_region_set(ec, region);
 
-        eina_tiler_free(region);
-     }
-   else
-     {
-        e_comp_wl_client_surface_pending_opaque_region_set(ec, NULL);
-     }
+   e_comp_wl_client_opaque_region_set(ec, &ds_surface->current.opaque);
 }
 
 static void
index bb289a64a9126a7915925d2baeefef6a0f8f23ac..35ddf537b736fc558d9396ef61a9415092e8bfea 100644 (file)
@@ -185,7 +185,8 @@ struct _E_Comp_Wl_Surface_State
    struct wl_listener buffer_destroy_listener;
    EINA_DEPRECATED Eina_List *damages, *buffer_damages;
    Eina_List *frames;
-   Eina_Tiler *input, *opaque;
+   Eina_Tiler *input;
+   EINA_DEPRECATED Eina_Tiler *opaque;
    E_Comp_Wl_Buffer_Viewport buffer_viewport;
    Eina_Bool new_attach : 1;
    Eina_Bool has_data : 1;