}
static void
-_render_tvg_buffer_to_screen(Evas_Object_Protected_Data *obj, void *engine, void *output,
- void *context, void *surface, void *buffer, int x, int y,
- int w, int h, Eina_Bool do_async)
+_render_tvg_buffer_to_screen(Evas_Object_Protected_Data *obj, Efl_Canvas_Vg_Object_Data *pd,
+ void *engine, void *output, void *context, void *surface,
+ int x, int y, Eina_Bool do_async)
{
Eina_Bool async_unref = EINA_FALSE;
Image_Entry *image = NULL;
- if (!buffer)
+ if (!pd || !pd->tvg_buffer)
return;
- image = ENFN->image_new_from_copied_data(engine, w, h, buffer, 255, EVAS_COLORSPACE_ARGB8888);
+ image = ENFN->image_new_from_copied_data(engine,
+ pd->tvg_canvas_size.w,
+ pd->tvg_canvas_size.h,
+ pd->tvg_buffer, 255,
+ EVAS_COLORSPACE_ARGB8888);
- async_unref = ENFN->image_draw(engine, output, context, surface,
- image, 0, 0, w, h, x, y, w, h,
+ async_unref = ENFN->image_draw(engine, output, context, surface, image, 0, 0,
+ pd->tvg_canvas_size.w, pd->tvg_canvas_size.h, x, y,
+ pd->tvg_canvas_size.w, pd->tvg_canvas_size.h,
EINA_TRUE, do_async);
if (do_async && async_unref)
int x, int y, Eina_Bool do_async)
{
Efl_Canvas_Vg_Object_Data *pd = type_private_data;
+ Eina_Bool updated = EINA_FALSE;
ENFN->context_color_set(engine, context, 255, 255, 255, 255);
ENFN->context_multiplier_set(engine, context,
tvg_swcanvas_set_target(pd->tvg_canvas, pd->tvg_buffer,
size.w, size.w, size.h,
TVG_COLORSPACE_ARGB8888);
+ updated = EINA_TRUE;
}
+ if (pd->changed) updated = EINA_TRUE;
+
Vg_Cache_Entry *vg_entry = pd->vg_entry;
if (vg_entry)
{
vg_entry = evas_cache_vg_entry_resize(vg_entry, size.w, size.h);
evas_cache_vg_entry_del(pd->vg_entry);
pd->vg_entry = vg_entry;
+ pd->changed = EINA_TRUE;
}
Efl_VG *root = evas_cache_vg_tree_get(pd->vg_entry, pd->frame_idx);
if (!root) return;
- _render_to_tvg_buffer(obj, pd, root);
+ if (updated)
+ _render_to_tvg_buffer(obj, pd, root);
}
- if (pd->user_entry)
+ if (pd->user_entry && updated)
_render_to_tvg_buffer(obj, pd, pd->user_entry->root);
- _render_tvg_buffer_to_screen(obj, engine, output, context, surface,
- pd->tvg_buffer, obj->cur->geometry.x + x,
- obj->cur->geometry.y + y, size.w, size.h, do_async);
+ _render_tvg_buffer_to_screen(obj, pd, engine, output, context, surface,
+ obj->cur->geometry.x + x,
+ obj->cur->geometry.y + y,
+ do_async);
tvg_canvas_clear(pd->tvg_canvas, EINA_FALSE);
pd->changed = EINA_FALSE;