aboutsummaryrefslogtreecommitdiffstats
path: root/src/bin/e_comp_object.c
diff options
context:
space:
mode:
authorMike Blumenkrantz <zmike@osg.samsung.com>2017-07-28 13:49:31 -0400
committerMike Blumenkrantz <zmike@osg.samsung.com>2017-07-28 15:44:55 -0400
commit5702f0975e890f07cfbba4d9beeec8cc13a12c8e (patch)
treedc1f7e47fd7c30fdf3d23625dff63bc9e2d22a15 /src/bin/e_comp_object.c
parenthandle updates_full when adding comp object update regions (diff)
downloadenlightenment-5702f0975e890f07cfbba4d9beeec8cc13a12c8e.tar.gz
reset comp object update regions when a render occurs
allow saving the current update regions in case evas decides not to render this object
Diffstat (limited to 'src/bin/e_comp_object.c')
-rw-r--r--src/bin/e_comp_object.c28
1 files changed, 18 insertions, 10 deletions
diff --git a/src/bin/e_comp_object.c b/src/bin/e_comp_object.c
index 406de2e3c..084f7d6f0 100644
--- a/src/bin/e_comp_object.c
+++ b/src/bin/e_comp_object.c
@@ -949,6 +949,20 @@ _e_comp_object_mirror_pixels_get(void *data, Evas_Object *obj)
/////////////////////////////////////////////
+static void
+_e_comp_object_updates_reset(E_Comp_Object *cw)
+{
+ if (cw->pending_updates)
+ eina_tiler_clear(cw->updates);
+ else
+ {
+ cw->pending_updates = cw->updates;
+ cw->updates = eina_tiler_new(cw->ec->client.w, cw->ec->client.h);
+ eina_tiler_tile_size_set(cw->updates, 1, 1);
+ }
+ cw->update_count = cw->updates_full = cw->updates_exist = 0;
+}
+
/* for fast path evas rendering; only called during render */
static void
_e_comp_object_pixels_get(void *data, Evas_Object *obj)
@@ -961,6 +975,7 @@ _e_comp_object_pixels_get(void *data, Evas_Object *obj)
if ((!ec->pixmap) || (!e_pixmap_size_get(ec->pixmap, &pw, &ph)))
{
evas_object_image_data_set(obj, NULL);
+ _e_comp_object_updates_reset(cw);
return;
}
//INF("PIXEL GET %p: %dx%d || %dx%d", ec, ec->w, ec->h, pw, ph);
@@ -995,6 +1010,7 @@ _e_comp_object_pixels_get(void *data, Evas_Object *obj)
msg2.val = id;
edje_object_message_send(cw->shobj, EDJE_MESSAGE_INT, 0, &msg2);
}
+ _e_comp_object_updates_reset(cw);
if (cw->native)
{
E_FREE_FUNC(cw->pending_updates, eina_tiler_free);
@@ -4104,20 +4120,12 @@ e_comp_object_dirty(Evas_Object *obj)
}
eina_iterator_free(it);
}
- if (cw->pending_updates)
- eina_tiler_clear(cw->updates);
- else
- {
- cw->pending_updates = cw->updates;
- cw->updates = eina_tiler_new(w, h);
- eina_tiler_tile_size_set(cw->updates, 1, 1);
- }
- cw->update_count = cw->updates_full = cw->updates_exist = 0;
evas_object_smart_callback_call(obj, "dirty", NULL);
- if (cw->real_hid || cw->visible || (!visible) || (!cw->pending_updates) || cw->native) return;
+ if (cw->real_hid || cw->visible || (!visible) || (!cw->updates) || cw->native) return;
/* force render if main object is hidden but mirrors are visible */
RENDER_DEBUG("FORCING RENDER %p", cw->ec);
e_comp_object_render(obj);
+ _e_comp_object_updates_reset(cw);
}
E_API Eina_Bool