hermet pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=b2070f8c390ec8d8c491aff51ab95a9bbb4fd630

commit b2070f8c390ec8d8c491aff51ab95a9bbb4fd630
Author: ChunEon Park <[email protected]>
Date:   Thu Mar 27 15:47:00 2014 +0900

    evas/proxy - redraw proxy source properly.
    
    This patch fixes the proxy drawing problem that source won't be updated in 
some case
    
    If the image object is the one member of the smart that has the proxy,
    the proxy(image part) won't be redrawed properly unless evas tries to draw 
the image object.
    This can be heppend if the image object is inactive cause of some 
reasone(ie. outside of the screen)
    So, the proxy object never can be never updated even the image part is 
changed.
    Now let try to be active if the parent is both active and source object.
    
    and revert previous change with regarded to 
a739716ceec531a2178ac3c0d59bc15b90bb9167,
    that's no more required now.
    
    @fix
---
 src/lib/evas/canvas/evas_object_image.c | 52 ++++++++-------------------------
 src/lib/evas/canvas/evas_render.c       | 23 ++++++++++-----
 2 files changed, 27 insertions(+), 48 deletions(-)

diff --git a/src/lib/evas/canvas/evas_object_image.c 
b/src/lib/evas/canvas/evas_object_image.c
index ebc0422..009014b 100644
--- a/src/lib/evas/canvas/evas_object_image.c
+++ b/src/lib/evas/canvas/evas_object_image.c
@@ -2815,44 +2815,6 @@ evas_object_image_render(Evas_Object *eo_obj, 
Evas_Object_Protected_Data *obj, v
         return;
      }
 
-   if (o->pixels->pixel_updates)
-     {
-        Eina_Rectangle *r;
-        Evas_Public_Data *e = obj->layer->evas;
-
-        if ((o->cur->border.l == 0) &&
-            (o->cur->border.r == 0) &&
-            (o->cur->border.t == 0) &&
-            (o->cur->border.b == 0) &&
-            (o->cur->image.w > 0) &&
-            (o->cur->image.h > 0) &&
-            (!((obj->map->cur.map) && (obj->map->cur.usemap))))
-          {
-             EINA_COW_PIXEL_WRITE_BEGIN(o, pixi_write)
-               {
-                  EINA_LIST_FREE(pixi_write->pixel_updates, r)
-                    {
-                       
e->engine.func->image_dirty_region(e->engine.data.output,
-                             o->engine_data, r->x, r->y, r->w, r->h);
-                       eina_rectangle_free(r);
-                    }
-               }
-             EINA_COW_PIXEL_WRITE_END(o, pixi_write);
-          }
-        else
-          {
-             EINA_COW_PIXEL_WRITE_BEGIN(o, pixi_write)
-               {
-                  EINA_LIST_FREE(pixi_write->pixel_updates, r)
-                    eina_rectangle_free(r);
-               }
-             EINA_COW_PIXEL_WRITE_END(o, pixi_write);
-
-             e->engine.func->image_dirty_region(e->engine.data.output,
-                   o->engine_data, 0, 0, o->cur->image.w, o->cur->image.h);
-          }
-     }
-
    obj->layer->evas->engine.func->context_color_set(output,
                                                     context,
                                                     255, 255, 255, 255);
@@ -3361,14 +3323,14 @@ evas_object_image_render_pre(Evas_Object *eo_obj,
                  (!((obj->map->cur.map) && (obj->map->cur.usemap))))
                {
                   Eina_Rectangle *rr;
-                  Eina_List *l;
 
                   EINA_COW_PIXEL_WRITE_BEGIN(o, pixi_write)
                     {
-                       EINA_LIST_FOREACH(pixi_write->pixel_updates, l, rr)
+                       EINA_LIST_FREE(pixi_write->pixel_updates, rr)
                          {
                             Evas_Coord idw, idh, idx, idy;
                             int x, y, w, h;
+                            
e->engine.func->image_dirty_region(e->engine.data.output, o->engine_data, 
rr->x, rr->y, rr->w, rr->h);
 
                             idx = evas_object_image_figure_x_fill(eo_obj, obj, 
o->cur->fill.x, o->cur->fill.w, &idw);
                             idy = evas_object_image_figure_y_fill(eo_obj, obj, 
o->cur->fill.y, o->cur->fill.h, &idh);
@@ -3413,6 +3375,16 @@ evas_object_image_render_pre(Evas_Object *eo_obj,
                }
              else
                {
+                  Eina_Rectangle *r;
+
+                  EINA_COW_PIXEL_WRITE_BEGIN(o, pixi_write)
+                    {
+                       EINA_LIST_FREE(pixi_write->pixel_updates, r)
+                         eina_rectangle_free(r);
+                    }
+                  EINA_COW_PIXEL_WRITE_END(o, pixi_write);
+                  e->engine.func->image_dirty_region(e->engine.data.output, 
o->engine_data, 0, 0, o->cur->image.w, o->cur->image.h);
+
                   evas_object_render_pre_prev_cur_add(&e->clip_changes, eo_obj,
                                                       obj);
                   goto done;
diff --git a/src/lib/evas/canvas/evas_render.c 
b/src/lib/evas/canvas/evas_render.c
index 1f9296c..15ef566 100644
--- a/src/lib/evas/canvas/evas_render.c
+++ b/src/lib/evas/canvas/evas_render.c
@@ -380,7 +380,8 @@ _evas_render_phase1_object_process(Evas_Public_Data *e, 
Evas_Object *eo_obj,
                                    Eina_Array *render_objects,
                                    int restack,
                                    int *redraw_all,
-                                   Eina_Bool mapped_parent
+                                   Eina_Bool mapped_parent,
+                                   Eina_Bool src_changed
 #ifdef REND_DBG
                                    , int level
 #endif
@@ -406,12 +407,12 @@ _evas_render_phase1_object_process(Evas_Public_Data *e, 
Evas_Object *eo_obj,
 
    /* build active object list */
    evas_object_clip_recalc(obj);
-   is_active = evas_object_is_active(eo_obj, obj);
-   obj->is_active = is_active;
 
+   if (src_changed) is_active = EINA_TRUE;
+   else is_active = evas_object_is_active(eo_obj, obj);
    RDI(level);
    RD("    [--- PROCESS [%p", obj);
-   if (obj->name) 
+   if (obj->name)
      {
         RD(":%s", obj->name);
      }
@@ -473,7 +474,8 @@ _evas_render_phase1_object_process(Evas_Public_Data *e, 
Evas_Object *eo_obj,
                                                                render_objects,
                                                                obj->restack,
                                                                redraw_all,
-                                                               EINA_TRUE
+                                                               EINA_TRUE,
+                                                               src_changed
 #ifdef REND_DBG
                                                                , level + 1
 #endif
@@ -511,6 +513,9 @@ _evas_render_phase1_object_process(Evas_Public_Data *e, 
Evas_Object *eo_obj,
              RDI(level);
              RD("      changed + smart - render ok\n");
              OBJ_ARRAY_PUSH(render_objects, obj);
+
+             if (!is_active && obj->proxy->proxies) src_changed = EINA_TRUE;
+
              obj->render_pre = EINA_TRUE;
              Evas_Object_Protected_Data *obj2;
              EINA_INLIST_FOREACH(evas_object_smart_members_get_direct(eo_obj),
@@ -523,7 +528,8 @@ _evas_render_phase1_object_process(Evas_Public_Data *e, 
Evas_Object *eo_obj,
                                                      render_objects,
                                                      obj->restack,
                                                      redraw_all,
-                                                     mapped_parent
+                                                     mapped_parent,
+                                                     src_changed
 #ifdef REND_DBG
                                                      , level + 1
 #endif
@@ -593,7 +599,8 @@ _evas_render_phase1_object_process(Evas_Public_Data *e, 
Evas_Object *eo_obj,
                                                              render_objects,
                                                              restack,
                                                              redraw_all,
-                                                             mapped_parent
+                                                             mapped_parent,
+                                                             src_changed
 #ifdef REND_DBG
                                                              , level + 1
 #endif
@@ -674,7 +681,7 @@ _evas_render_phase1_process(Evas_Public_Data *e,
           {
              clean_them |= _evas_render_phase1_object_process
                 (e, obj->object, active_objects, restack_objects, 
delete_objects,
-                 render_objects, 0, redraw_all, EINA_FALSE
+                 render_objects, 0, redraw_all, EINA_FALSE, EINA_FALSE
 #ifdef REND_DBG
                  , 1
 #endif

-- 


Reply via email to