(!eina_tiler_empty(state->input)) &&
ec->first_mapped)
{
- Eina_Rectangle *rect;
- Eina_Iterator *itr;
+ Eina_Tiler *src, *tmp;
+ int sw, sh;
- e_comp_object_input_objs_del(ec->frame);
- itr = eina_tiler_iterator_new(state->input);
- EINA_ITERATOR_FOREACH(itr, rect)
+ 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});
+
+ if ((src = eina_tiler_intersection(state->input, tmp)))
{
- Eina_Rectangle r;
+ Eina_Rectangle *rect, *rect_input;
+ Eina_Iterator *itr, *itr_input;
- 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);
+ 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_iterator_free(itr);
+ eina_tiler_free(src);
}
- eina_iterator_free(itr);
+ else
+ e_comp_object_input_area_set(ec->frame, 0, 0, ec->w, ec->h);
+
+ eina_tiler_free(tmp);
/* clear input tiler */
eina_tiler_clear(state->input);