From: Seunghun Lee Date: Thu, 22 Aug 2024 00:57:29 +0000 (+0900) Subject: e_comp_wl: Deprecate opaque of E_Comp_Wl_Surface_State X-Git-Tag: accepted/tizen/unified/20241206.132905~9 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e99d35329d288173ad8dbf99ee2c4afbd0f9d14e;p=platform%2Fupstream%2Fenlightenment.git e_comp_wl: Deprecate opaque of E_Comp_Wl_Surface_State It's no longer necessary since it's been handled libds. Change-Id: I6a53e98ad912ff53e2b1532e4c4649c4a85fbcc6 --- diff --git a/src/bin/server/e_comp_wl.c b/src/bin/server/e_comp_wl.c index c4c76b9379..449d7c57b5 100644 --- a/src/bin/server/e_comp_wl.c +++ b/src/bin/server/e_comp_wl.c @@ -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(®ion); + + pixman_region32_intersect_rect(®ion, opaque_region, 0, 0, buffer_width, buffer_height); + rects = pixman_region32_rectangles(®ion, &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(®ion); +} + 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 diff --git a/src/bin/server/e_comp_wl_intern.h b/src/bin/server/e_comp_wl_intern.h index e89deca174..cee44cbe50 100644 --- a/src/bin/server/e_comp_wl_intern.h +++ b/src/bin/server/e_comp_wl_intern.h @@ -6,6 +6,8 @@ #include "e_policy_wl.h" #include "e_device_intern.h" +#include + 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); diff --git a/src/bin/server/e_compositor.c b/src/bin/server/e_compositor.c index f05561756a..d47e6aace4 100644 --- a/src/bin/server/e_compositor.c +++ b/src/bin/server/e_compositor.c @@ -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 diff --git a/src/include/e_comp_wl.h b/src/include/e_comp_wl.h index bb289a64a9..35ddf537b7 100644 --- a/src/include/e_comp_wl.h +++ b/src/include/e_comp_wl.h @@ -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;