improve wl compositor tiler usage

pixman <-> tiler api naming seems similar but functionality is totally
different
This commit is contained in:
Mike Blumenkrantz 2015-07-20 14:10:55 -04:00
parent 4d76741533
commit 4acce00428
1 changed files with 7 additions and 27 deletions

View File

@ -1212,6 +1212,7 @@ _e_comp_wl_surface_state_commit(E_Client *ec, E_Comp_Wl_Surface_State *state)
itr = eina_tiler_iterator_new(state->opaque); itr = eina_tiler_iterator_new(state->opaque);
EINA_ITERATOR_FOREACH(itr, rect) EINA_ITERATOR_FOREACH(itr, rect)
{ {
E_RECTS_CLIP_TO_RECT(rect->x, rect->y, rect->w, rect->h, 0, 0, state->bw, state->bh);
e_pixmap_image_opaque_set(ec->pixmap, rect->x, rect->y, e_pixmap_image_opaque_set(ec->pixmap, rect->x, rect->y,
rect->w, rect->h); rect->w, rect->h);
break; break;
@ -1356,6 +1357,8 @@ _e_comp_wl_surface_cb_opaque_region_set(struct wl_client *client EINA_UNUSED, st
if (!(ec = wl_resource_get_user_data(resource))) return; if (!(ec = wl_resource_get_user_data(resource))) return;
if (e_object_is_del(E_OBJECT(ec))) return; if (e_object_is_del(E_OBJECT(ec))) return;
if (ec->comp_data->pending.opaque)
eina_tiler_clear(ec->comp_data->pending.opaque);
if (region_resource) if (region_resource)
{ {
Eina_Tiler *tmp; Eina_Tiler *tmp;
@ -1365,14 +1368,6 @@ _e_comp_wl_surface_cb_opaque_region_set(struct wl_client *client EINA_UNUSED, st
eina_tiler_union(ec->comp_data->pending.opaque, tmp); eina_tiler_union(ec->comp_data->pending.opaque, tmp);
} }
else
{
if (ec->comp_data->pending.opaque)
{
eina_tiler_clear(ec->comp_data->pending.opaque);
/* eina_tiler_free(ec->comp_data->pending.opaque); */
}
}
} }
static void static void
@ -1383,6 +1378,8 @@ _e_comp_wl_surface_cb_input_region_set(struct wl_client *client EINA_UNUSED, str
if (!(ec = wl_resource_get_user_data(resource))) return; if (!(ec = wl_resource_get_user_data(resource))) return;
if (e_object_is_del(E_OBJECT(ec))) return; if (e_object_is_del(E_OBJECT(ec))) return;
if (ec->comp_data->pending.input)
eina_tiler_clear(ec->comp_data->pending.input);
if (region_resource) if (region_resource)
{ {
Eina_Tiler *tmp; Eina_Tiler *tmp;
@ -1550,15 +1547,7 @@ _e_comp_wl_region_cb_add(struct wl_client *client EINA_UNUSED, struct wl_resourc
/* get the tiler from the resource */ /* get the tiler from the resource */
if ((tiler = wl_resource_get_user_data(resource))) if ((tiler = wl_resource_get_user_data(resource)))
{ eina_tiler_rect_add(tiler, &(Eina_Rectangle){x, y, w, h});
Eina_Tiler *src;
src = eina_tiler_new(w + x, h + y);
eina_tiler_tile_size_set(src, 1, 1);
eina_tiler_rect_add(src, &(Eina_Rectangle){x, y, w, h});
eina_tiler_union(tiler, src);
eina_tiler_free(src);
}
} }
static void static void
@ -1571,16 +1560,7 @@ _e_comp_wl_region_cb_subtract(struct wl_client *client EINA_UNUSED, struct wl_re
/* get the tiler from the resource */ /* get the tiler from the resource */
if ((tiler = wl_resource_get_user_data(resource))) if ((tiler = wl_resource_get_user_data(resource)))
{ eina_tiler_rect_del(tiler, &(Eina_Rectangle){x, y, w, h});
Eina_Tiler *src;
src = eina_tiler_new(w + x, h + y);
eina_tiler_tile_size_set(src, 1, 1);
eina_tiler_rect_add(src, &(Eina_Rectangle){x, y, w, h});
eina_tiler_subtract(tiler, src);
eina_tiler_free(src);
}
} }
static const struct wl_region_interface _e_region_interface = static const struct wl_region_interface _e_region_interface =