summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--NEWS2
-rw-r--r--src/lib/evas/canvas/evas_render.c66
3 files changed, 43 insertions, 30 deletions
diff --git a/ChangeLog b/ChangeLog
index de43e9edc1..1763750cf3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
12013-11-25 ChunEon Park (Hermet)
2
3 * Evas: Fix proxy render to update the proxies recursively. If a proxy
4 has proxies, all the chainged proxies should be updated recursively.
5
12013-11-21 ChunEon Park (Hermet) 62013-11-21 ChunEon Park (Hermet)
2 7
3 * Edje: Fix to update map-enabled part when the edje object is moved. 8 * Edje: Fix to update map-enabled part when the edje object is moved.
diff --git a/NEWS b/NEWS
index cdb7d7dd03..9660f573c5 100644
--- a/NEWS
+++ b/NEWS
@@ -362,6 +362,8 @@ Fixes:
362 - Fixed the textblock format to be drawn according to the glyph's horizontal advance width. 362 - Fixed the textblock format to be drawn according to the glyph's horizontal advance width.
363 - Fixed the textblock set to context with the textblock object's render operation. 363 - Fixed the textblock set to context with the textblock object's render operation.
364 - Evas textblock: Fixed order of tags inserted with markup_app/prepend. 364 - Evas textblock: Fixed order of tags inserted with markup_app/prepend.
365 - Fix proxy render to update the proxies recursively. If a proxy has proxies, all the chainged proxies should be updated recursively.
366
365 * Ecore: 367 * Ecore:
366 - Don't leak fd on exec. 368 - Don't leak fd on exec.
367 - Fix fd handler increase issue when ecore_pipe_add/del is called repeatedly. 369 - Fix fd handler increase issue when ecore_pipe_add/del is called repeatedly.
diff --git a/src/lib/evas/canvas/evas_render.c b/src/lib/evas/canvas/evas_render.c
index 4a3a4e1df0..18d196f350 100644
--- a/src/lib/evas/canvas/evas_render.c
+++ b/src/lib/evas/canvas/evas_render.c
@@ -284,6 +284,35 @@ _evas_render_cur_clip_cache_del(Evas_Public_Data *e, Evas_Object_Protected_Data
284} 284}
285 285
286static void 286static void
287_evas_proxy_redraw_set(Evas_Public_Data *e, Evas_Object_Protected_Data *obj,
288 Eina_Bool render)
289{
290 Evas_Object *eo_proxy;
291 Evas_Object_Protected_Data *proxy;
292 Eina_List *l;
293
294 EINA_LIST_FOREACH(obj->proxy->proxies, l, eo_proxy)
295 {
296 proxy = eo_data_scope_get(eo_proxy, EVAS_OBJ_CLASS);
297
298 /* Flag need redraw on proxy too */
299 EINA_COW_WRITE_BEGIN(evas_object_proxy_cow, proxy->proxy,
300 Evas_Object_Proxy_Data, proxy_write)
301 proxy_write->redraw = EINA_TRUE;
302 EINA_COW_WRITE_END(evas_object_proxy_cow, proxy->proxy, proxy_write);
303
304 if (render)
305 {
306 proxy->func->render_pre(eo_proxy, proxy, proxy->private_data);
307 _evas_render_prev_cur_clip_cache_add(e, proxy);
308 }
309
310 //Update the proxies recursively.
311 _evas_proxy_redraw_set(e, proxy, render);
312 }
313}
314
315static void
287_evas_render_phase1_direct(Evas_Public_Data *e, 316_evas_render_phase1_direct(Evas_Public_Data *e,
288 Eina_Array *active_objects, 317 Eina_Array *active_objects,
289 Eina_Array *restack_objects EINA_UNUSED, 318 Eina_Array *restack_objects EINA_UNUSED,
@@ -291,8 +320,7 @@ _evas_render_phase1_direct(Evas_Public_Data *e,
291 Eina_Array *render_objects) 320 Eina_Array *render_objects)
292{ 321{
293 unsigned int i; 322 unsigned int i;
294 Eina_List *l; 323 Evas_Object *eo_obj;
295 Evas_Object *eo_proxy;
296 Eina_Bool changed; 324 Eina_Bool changed;
297 325
298 RD(" [--- PHASE 1 DIRECT\n"); 326 RD(" [--- PHASE 1 DIRECT\n");
@@ -308,37 +336,23 @@ _evas_render_phase1_direct(Evas_Public_Data *e,
308 changed = evas_object_smart_changed_get(obj->object); 336 changed = evas_object_smart_changed_get(obj->object);
309 else changed = obj->changed; 337 else changed = obj->changed;
310 338
311 if (changed) 339 if (changed) _evas_proxy_redraw_set(e, obj, EINA_FALSE);
312 {
313 /* Flag need redraw on proxy too */
314 EINA_LIST_FOREACH(obj->proxy->proxies, l, eo_proxy)
315 {
316 Evas_Object_Protected_Data *proxy;
317 proxy = eo_data_scope_get(eo_proxy, EVAS_OBJ_CLASS);
318
319 EINA_COW_WRITE_BEGIN(evas_object_proxy_cow, proxy->proxy,
320 Evas_Object_Proxy_Data, proxy_write)
321 proxy_write->redraw = EINA_TRUE;
322 EINA_COW_WRITE_END(evas_object_proxy_cow, proxy->proxy,
323 proxy_write);
324 }
325 }
326 } 340 }
327 for (i = 0; i < render_objects->count; i++) 341 for (i = 0; i < render_objects->count; i++)
328 { 342 {
329 Evas_Object *eo_obj; 343 Evas_Object_Protected_Data *obj =
330 344 eina_array_data_get(render_objects, i);
331 Evas_Object_Protected_Data *obj = eina_array_data_get(render_objects, i);
332 eo_obj = obj->object; 345 eo_obj = obj->object;
346
333 RD(" OBJ [%p", obj); 347 RD(" OBJ [%p", obj);
334 if (obj->name) 348 if (obj->name)
335 { 349 {
336 RD(":%s", obj->name); 350 RD(":%s", obj->name);
337 } 351 }
338 RD("] changed %i\n", obj->changed); 352 RD("] changed %i\n", obj->changed);
353
339 if (obj->changed) 354 if (obj->changed)
340 { 355 {
341 /* Flag need redraw on proxy too */
342 evas_object_clip_recalc(obj); 356 evas_object_clip_recalc(obj);
343 obj->func->render_pre(eo_obj, obj, obj->private_data); 357 obj->func->render_pre(eo_obj, obj, obj->private_data);
344 if (obj->proxy->redraw) 358 if (obj->proxy->redraw)
@@ -352,15 +366,7 @@ _evas_render_phase1_direct(Evas_Public_Data *e,
352 proxy_write->redraw = EINA_TRUE; 366 proxy_write->redraw = EINA_TRUE;
353 EINA_COW_WRITE_END(evas_object_proxy_cow, obj->proxy, 367 EINA_COW_WRITE_END(evas_object_proxy_cow, obj->proxy,
354 proxy_write); 368 proxy_write);
355 369 _evas_proxy_redraw_set(e, obj, EINA_TRUE);
356 EINA_LIST_FOREACH(obj->proxy->proxies, l, eo_proxy)
357 {
358 Evas_Object_Protected_Data *proxy =
359 eo_data_scope_get(eo_proxy, EVAS_OBJ_CLASS);
360 proxy->func->render_pre(eo_proxy,
361 proxy, proxy->private_data);
362 _evas_render_prev_cur_clip_cache_add(e, proxy);
363 }
364 } 370 }
365 } 371 }
366 372