From: Seunghun Lee Date: Thu, 22 Aug 2024 03:29:47 +0000 (+0900) Subject: e_comp_wl: Deprecate input of E_Comp_Wl_Surface_State X-Git-Tag: accepted/tizen/unified/20241206.132905~7 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F94%2F315794%2F1;p=platform%2Fupstream%2Fenlightenment.git e_comp_wl: Deprecate input of E_Comp_Wl_Surface_State Change-Id: I2d407909dba10d5ce4b965062a7160fb24452532 --- diff --git a/src/bin/server/e_comp_wl.c b/src/bin/server/e_comp_wl.c index 449d7c57b5..2ef1e29ded 100644 --- a/src/bin/server/e_comp_wl.c +++ b/src/bin/server/e_comp_wl.c @@ -2723,9 +2723,6 @@ _e_comp_wl_surface_state_init(E_Comp_Wl_Surface_State *state, int w, int h) _e_comp_wl_surface_state_cb_buffer_destroy; state->sx = state->sy = 0; - state->input = eina_tiler_new(w, h); - eina_tiler_tile_size_set(state->input, 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); @@ -2743,9 +2740,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->input) eina_tiler_free(state->input); - state->input = NULL; - if (state->buffer) wl_list_remove(&state->buffer_destroy_listener.link); state->buffer = NULL; @@ -2943,6 +2937,89 @@ _e_comp_wl_client_pixmap_opaque_region_update(E_Client *ec, int buffer_width, in pixman_region32_fini(®ion); } +static void +_e_comp_wl_client_input_region_update(E_Client *ec) +{ + E_Surface *surface = e_surface_from_ec(ec); + pixman_region32_t *input_region = e_surface_input_region_get(surface); + pixman_region32_t region; + pixman_box32_t *rects; + int nrects, i; + int x, y, w, h; + int sw = ec->w; + int sh = ec->h; + + if (!input_region || !pixman_region32_not_empty(input_region) || !ec->first_mapped) + return; + + pixman_region32_init(®ion); + + pixman_region32_intersect_rect(®ion, input_region, 0, 0, sw, sh); + if (pixman_region32_not_empty(®ion)) + { + E_Input_Thread_Request_EClient_Data ec_data; + memset(&ec_data, 0, sizeof(E_Input_Thread_Request_EClient_Data)); + + e_view_client_input_objs_del(e_client_view_get(ec)); + if (e_input_thread_check_client_cloning_needed()) + { + ec_data.ec = ec; + INF("[%s] ec(%p)\n", __func__, ec); + e_input_backend_thread_safe_call(_e_comp_wl_input_thread_input_area_clear, &ec_data, sizeof(E_Input_Thread_Request_EClient_Data)); + } + + rects = pixman_region32_rectangles(®ion, &nrects); + for (i = 0; i < nrects; i++) + { + x = rects[i].x1; + y = rects[i].y1; + w = rects[i].x2 - x; + h = rects[i].y2 - y; + + ELOGF("COMP", "Set Input Area x:%d, y:%d, w:%d, h:%d, ec(%dx%d)", + ec, x, y, w, h, sw, sh); + e_view_client_input_area_set(e_client_view_get(ec), x, y, w, h); + + if (e_input_thread_check_client_cloning_needed()) + { + Eina_Rectangle *input_rect; + input_rect = eina_rectangle_new(x, y, w, h); + + if (input_rect) + { + ec_data.rect = input_rect; + INF("[%s] ec(%p), x(%d), y(%d), w(%d), h(%d)\n", __func__, ec, EINA_RECTANGLE_ARGS(input_rect)); + e_input_backend_thread_safe_call(_e_comp_wl_input_thread_input_area_append, &ec_data, sizeof(E_Input_Thread_Request_EClient_Data)); + } + } + } + } + else + { + e_view_client_input_area_set(e_client_view_get(ec), 0, 0, sw, sh); + + if (e_input_thread_check_client_cloning_needed()) + { + E_Input_Thread_Request_EClient_Data ec_data; + memset(&ec_data, 0, sizeof(E_Input_Thread_Request_EClient_Data)); + + Eina_Rectangle *input_rect; + input_rect = eina_rectangle_new(0, 0, sw, sh); + + if (input_rect) + { + ec_data.ec = ec; + ec_data.rect = input_rect; + + INF("[%s] ec(%p), x(0), y(0), w(%d), h(%d)\n", __func__, ec, sw, sh); + e_input_backend_thread_safe_call(_e_comp_wl_input_thread_input_area_append, &ec_data, sizeof(E_Input_Thread_Request_EClient_Data)); + } + } + } + + pixman_region32_fini(®ion); +} + static void _e_comp_wl_surface_state_commit(E_Client *ec, E_Comp_Wl_Surface_State *state) { @@ -3134,92 +3211,7 @@ _e_comp_wl_surface_state_commit(E_Client *ec, E_Comp_Wl_Surface_State *state) _e_comp_wl_surface_damage_update(ec); _e_comp_wl_client_pixmap_opaque_region_update(ec, state->bw, state->bh); - - /* put state input into surface */ - if ((state->input) && - (!eina_tiler_empty(state->input)) && - ec->first_mapped) - { - Eina_Tiler *src, *tmp; - int sw = ec->w; - int sh = ec->h; - - tmp = eina_tiler_new(sw, sh); - eina_tiler_tile_size_set(tmp, 1, 1); - - eina_tiler_rect_add(tmp, - &(Eina_Rectangle){0, 0, sw, sh}); - - if ((src = eina_tiler_intersection(state->input, tmp))) - { - Eina_Rectangle *rect; - Eina_Iterator *itr; - E_Input_Thread_Request_EClient_Data ec_data; - memset(&ec_data, 0, sizeof(E_Input_Thread_Request_EClient_Data)); - - e_view_client_input_objs_del(e_client_view_get(ec)); - if (e_input_thread_check_client_cloning_needed()) - { - ec_data.ec = ec; - ICINF("[%s] ec(%p)\n", __func__, ec); - e_input_backend_thread_safe_call(_e_comp_wl_input_thread_input_area_clear, &ec_data, sizeof(E_Input_Thread_Request_EClient_Data)); - } - - itr = eina_tiler_iterator_new(src); - EINA_ITERATOR_FOREACH(itr, rect) - { - ELOGF("COMP", "Set Input Area x:%d, y:%d, w:%d, h:%d, ec(%dx%d), state(%dx%d)", - ec, rect->x, rect->y, rect->w, rect->h, - ec->w, ec->h, state->bw, state->bh); - e_view_client_input_area_set(e_client_view_get(ec), - rect->x, rect->y, - rect->w, rect->h); - - if (e_input_thread_check_client_cloning_needed()) - { - Eina_Rectangle *input_rect; - input_rect = eina_rectangle_new(rect->x, rect->y, rect->w, rect->h); - - if (input_rect) - { - ec_data.rect = input_rect; - ICINF("[%s] ec(%p), x(%d), y(%d), w(%d), h(%d)\n", __func__, ec, EINA_RECTANGLE_ARGS(rect)); - e_input_backend_thread_safe_call(_e_comp_wl_input_thread_input_area_append, &ec_data, sizeof(E_Input_Thread_Request_EClient_Data)); - } - } - } - - eina_iterator_free(itr); - eina_tiler_free(src); - } - else - { - e_view_client_input_area_set(e_client_view_get(ec), 0, 0, ec->w, ec->h); - - if (e_input_thread_check_client_cloning_needed()) - { - E_Input_Thread_Request_EClient_Data ec_data; - memset(&ec_data, 0, sizeof(E_Input_Thread_Request_EClient_Data)); - - Eina_Rectangle *input_rect; - input_rect = eina_rectangle_new(0, 0, ec->w, ec->h); - - if (input_rect) - { - ec_data.ec = ec; - ec_data.rect = input_rect; - - ICINF("[%s] ec(%p), x(0), y(0), w(%d), h(%d)\n", __func__, ec, ec->w, ec->h); - e_input_backend_thread_safe_call(_e_comp_wl_input_thread_input_area_append, &ec_data, sizeof(E_Input_Thread_Request_EClient_Data)); - } - } - } - - eina_tiler_free(tmp); - - /* clear input tiler */ - eina_tiler_clear(state->input); - } + _e_comp_wl_client_input_region_update(ec); e_comp_wl_subsurface_check_alpha_mask_rect(ec); @@ -6439,45 +6431,32 @@ 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) +e_comp_wl_client_input_region_set(E_Client *ec, pixman_region32_t *region) { - if (ec->comp_data->pending.input) - eina_tiler_clear(ec->comp_data->pending.input); + if (pixman_region32_not_empty(region)) + return; - if (region) - { - if (eina_tiler_empty(region)) - { - ELOGF("COMP", " |unset input rect", NULL); - e_view_client_input_objs_del(e_client_view_get(ec)); - e_view_client_input_area_set(e_client_view_get(ec), -1, -1, 1, 1); + ELOGF("COMP", " |unset input rect", NULL); + e_view_client_input_objs_del(e_client_view_get(ec)); + e_view_client_input_area_set(e_client_view_get(ec), -1, -1, 1, 1); - if (e_input_thread_check_client_cloning_needed()) - { - E_Input_Thread_Request_EClient_Data ec_data; - memset(&ec_data, 0, sizeof(E_Input_Thread_Request_EClient_Data)); + if (e_input_thread_check_client_cloning_needed()) + { + E_Input_Thread_Request_EClient_Data ec_data; + memset(&ec_data, 0, sizeof(E_Input_Thread_Request_EClient_Data)); - Eina_Rectangle *input_rect; - input_rect = eina_rectangle_new(-1, -1, 1, 1); + Eina_Rectangle *input_rect; + input_rect = eina_rectangle_new(-1, -1, 1, 1); - if (input_rect) - { - ec_data.ec = ec; - ec_data.rect = input_rect; + if (input_rect) + { + ec_data.ec = ec; + ec_data.rect = input_rect; - ICINF("[%s] ec(%p), x(-1), y(-1), w(1), h(1)\n", __func__, ec); - e_input_backend_thread_safe_call(_e_comp_wl_input_thread_input_area_clear, &ec_data, sizeof(E_Input_Thread_Request_EClient_Data)); - e_input_backend_thread_safe_call(_e_comp_wl_input_thread_input_area_append, &ec_data, sizeof(E_Input_Thread_Request_EClient_Data)); - } - } + ICINF("[%s] ec(%p), x(-1), y(-1), w(1), h(1)\n", __func__, ec); + e_input_backend_thread_safe_call(_e_comp_wl_input_thread_input_area_clear, &ec_data, sizeof(E_Input_Thread_Request_EClient_Data)); + e_input_backend_thread_safe_call(_e_comp_wl_input_thread_input_area_append, &ec_data, sizeof(E_Input_Thread_Request_EClient_Data)); } - else - eina_tiler_union(ec->comp_data->pending.input, region); - } - else - { - eina_tiler_rect_add(ec->comp_data->pending.input, - &(Eina_Rectangle){0, 0, ec->client.w, ec->client.h}); } } diff --git a/src/bin/server/e_comp_wl_intern.h b/src/bin/server/e_comp_wl_intern.h index cee44cbe50..40964f40e1 100644 --- a/src/bin/server/e_comp_wl_intern.h +++ b/src/bin/server/e_comp_wl_intern.h @@ -93,7 +93,7 @@ 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_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_input_region_set(E_Client *ec, pixman_region32_t *region); EINTERN void e_comp_wl_client_surface_pending_commit(E_Client *ec); EINTERN Eina_Bool e_comp_wl_client_subsurface_cyclic_reference_check(E_Client *ec, E_Client *parent); diff --git a/src/bin/server/e_compositor.c b/src/bin/server/e_compositor.c index c799754ad5..7d9a624d1c 100644 --- a/src/bin/server/e_compositor.c +++ b/src/bin/server/e_compositor.c @@ -1039,63 +1039,6 @@ _e_surface_pending_buffer_update(E_Surface *surface) ds_surface->current.dy); } -static void -_region_area_check(Eina_Tiler *tiler, int32_t x, int32_t y, int32_t w, int32_t h) -{ - Eina_Bool need_set = EINA_FALSE; - int area_w = 0; - int area_h = 0; - - eina_tiler_area_size_get(tiler, &area_w, &area_h); - if (x + w > area_w) - { - area_w = x + w; - need_set = EINA_TRUE; - } - - if (y + h > area_h) - { - area_h = y + h; - need_set = EINA_TRUE; - } - - if (need_set) - { - INF("change region area. (%dx%d)", area_w, area_h); - eina_tiler_area_size_set(tiler, area_w, area_h); - } -} - -static Eina_Tiler * -_tiler_new_from_pixman_region(pixman_region32_t *pixman_region) -{ - Eina_Tiler *tiler; - pixman_box32_t *rects; - int32_t x, y, w, h; - int nrects, i; - int comp_w = 0, comp_h = 0; - - e_comp_size_get(&comp_w, &comp_h); - tiler = eina_tiler_new(comp_w, comp_h); - if (!tiler) - return NULL; - - eina_tiler_tile_size_set(tiler, 1, 1); - - rects = pixman_region32_rectangles(pixman_region, &nrects); - for (i = 0; i < nrects; i++) - { - x = rects[i].x1; - y = rects[i].y1; - w = rects[i].x2 - x; - h = rects[i].y2 - y; - _region_area_check(tiler, x, y, w, h); - eina_tiler_rect_add(tiler, &(Eina_Rectangle){x, y, w, h}); - } - - return tiler; -} - static void _e_surface_pending_opaque_region_update(E_Surface *surface) { @@ -1110,23 +1053,8 @@ _e_surface_pending_input_region_update(E_Surface *surface) { struct ds_surface *ds_surface = surface->ds_surface; E_Client *ec = surface->ec; - Eina_Tiler *region; - pixman_region32_t infinite_region; - pixman_region32_init_rect(&infinite_region, INT32_MIN, INT32_MIN, UINT32_MAX, UINT32_MAX); - if (pixman_region32_equal(&ds_surface->current.input, &infinite_region)) - { - e_comp_wl_client_surface_pending_input_region_set(ec, NULL); - } - else - { - region = _tiler_new_from_pixman_region(&ds_surface->current.input); - if (region) - { - e_comp_wl_client_surface_pending_input_region_set(ec, region); - eina_tiler_free(region); - } - } + e_comp_wl_client_input_region_set(ec, &ds_surface->current.input); } static void diff --git a/src/include/e_comp_wl.h b/src/include/e_comp_wl.h index 35ddf537b7..11d8f9664e 100644 --- a/src/include/e_comp_wl.h +++ b/src/include/e_comp_wl.h @@ -185,7 +185,7 @@ 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; + EINA_DEPRECATED Eina_Tiler *input; EINA_DEPRECATED Eina_Tiler *opaque; E_Comp_Wl_Buffer_Viewport buffer_viewport; Eina_Bool new_attach : 1;