e_comp_wl: Change input region set method 72/289272/1
authorJunkyeong Kim <jk0430.kim@samsung.com>
Fri, 3 Mar 2023 08:22:46 +0000 (17:22 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Fri, 3 Mar 2023 10:26:52 +0000 (19:26 +0900)
eina_tiler_intersection API has round off error. so do not use this API.
intead, use input region rectangle directly.

Change-Id: I744b79ebd3ac6ae759403709362730516b6e8797
Signed-off-by: Junkyeong Kim <jk0430.kim@samsung.com>
src/bin/e_comp_wl.c

index 53418e3..d555f91 100644 (file)
@@ -2938,54 +2938,20 @@ _e_comp_wl_surface_state_commit(E_Client *ec, E_Comp_Wl_Surface_State *state)
        (!eina_tiler_empty(state->input)) &&
        ec->first_mapped)
      {
-        Eina_Tiler *src, *tmp;
-        int sw, sh;
-
-        if (state->bw > 0) sw = state->bw;
-        else sw = ec->w;
-
-        if (state->bh > 0) sh = state->bh;
-        else 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});
+        Eina_Rectangle *rect;
+        Eina_Iterator *itr;
 
-        if ((src = eina_tiler_intersection(state->input, tmp)))
+        e_comp_object_input_objs_del(ec->frame);
+        itr = eina_tiler_iterator_new(state->input);
+        EINA_ITERATOR_FOREACH(itr, rect)
           {
-             Eina_Rectangle *rect, *rect_input;
-             Eina_Iterator *itr, *itr_input;
-
-             e_comp_object_input_objs_del(ec->frame);
-             itr = eina_tiler_iterator_new(src);
-             EINA_ITERATOR_FOREACH(itr, rect)
-               {
-                  itr_input = eina_tiler_iterator_new(state->input);
-                  EINA_ITERATOR_FOREACH(itr_input, rect_input)
-                    {
-                       if ((rect->x == rect_input->x) && (rect->y == rect_input->y))
-                         {
-                            if (rect->w > rect_input->w) rect->w = rect_input->w;
-                            if (rect->h > rect_input->h) rect->h = rect_input->h;
-                         }
-                    }
-                  ELOGF("COMP", "Set Input Area x:%d, y:%d, w:%d, h:%d",
-                        ec, rect->x, rect->y, rect->w, rect->h);
-                  e_comp_object_input_area_set(ec->frame,
-                                               rect->x, rect->y,
-                                               rect->w, rect->h);
-                  eina_iterator_free(itr_input);
-               }
+             Eina_Rectangle r;
 
-             eina_iterator_free(itr);
-             eina_tiler_free(src);
+             EINA_RECTANGLE_SET(&r, rect->x, rect->y, rect->w, rect->h);
+             ELOGF("COMP", "Set Input Area x:%d, y:%d, w:%d, h:%d", ec, r.x, r.y, r.w, r.h);
+             e_comp_object_input_area_set(ec->frame, r.x, r.y, r.w, r.h);
           }
-        else
-          e_comp_object_input_area_set(ec->frame, 0, 0, ec->w, ec->h);
-
-        eina_tiler_free(tmp);
+        eina_iterator_free(itr);
 
         /* clear input tiler */
         eina_tiler_clear(state->input);