fix map overdraw issue that has snuck in during development
authorraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 21 Mar 2012 04:04:03 +0000 (04:04 +0000)
committerraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 21 Mar 2012 04:04:03 +0000 (04:04 +0000)
git-svn-id: http://svn.enlightenment.org/svn/e/trunk/evas@69534 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/canvas/evas_map.c
src/lib/canvas/evas_render.c
src/lib/include/evas_private.h

index 5fe61aa..5dcb760 100644 (file)
@@ -374,9 +374,11 @@ evas_object_map_enable_set(Evas_Object *obj, Eina_Bool enabled)
    MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
    return;
    MAGIC_CHECK_END();
+   Eina_Bool pchange = EINA_FALSE;
 
    enabled = !!enabled;
    if (obj->cur.usemap == enabled) return;
+   pchange = obj->changed;
    obj->cur.usemap = enabled;
    if (enabled)
      {
@@ -405,6 +407,8 @@ evas_object_map_enable_set(Evas_Object *obj, Eina_Bool enabled)
    /* This is a bit heavy handed, but it fixes the case of same geometry, but
     * changed colour or UV settings. */
    evas_object_change(obj);
+   if (!obj->changed_pchange) obj->changed_pchange = pchange;
+   obj->changed_map = EINA_TRUE;
 }
 
 EAPI Eina_Bool
index c23cdee..32ce988 100644 (file)
@@ -612,6 +612,8 @@ pending_change(void *data, void *gdata __UNUSED__)
         obj->changed_move_only = 0;
         obj->changed_nomove = 0;
         obj->changed_move = 0;
+        obj->changed_map = 0;
+        obj->changed_pchange = 0;
      }
    return obj->changed ? EINA_TRUE : EINA_FALSE;
 }
@@ -984,6 +986,8 @@ evas_render_mapped(Evas *e, Evas_Object *obj, void *context, void *surface,
                        o2->changed_move_only = 0;
                        o2->changed_nomove = 0;
                        o2->changed_move = 0;
+                       o2->changed_map = 0;
+                       o2->changed_pchange = 0;
                        continue;
                     }
                   if (o2->changed)
@@ -994,6 +998,8 @@ evas_render_mapped(Evas *e, Evas_Object *obj, void *context, void *surface,
                        o2->changed_move_only = 0;
                        o2->changed_nomove = 0;
                        o2->changed_move = 0;
+                       o2->changed_map = 0;
+                       o2->changed_pchange = 0;
                        break;
                     }
                }
@@ -1002,16 +1008,21 @@ evas_render_mapped(Evas *e, Evas_Object *obj, void *context, void *surface,
              obj->changed_move_only = 0;
              obj->changed_nomove = 0;
              obj->changed_move = 0;
+             obj->changed_map = 0;
+             obj->changed_pchange = 0;
           }
         else
           {
              if (obj->changed)
                {
-                  changed = 1;
+                  if ((obj->changed_pchange) && (obj->changed_map))
+                    changed = 1;
                   obj->changed = 0;
                   obj->changed_move_only = 0;
                   obj->changed_nomove = 0;
                   obj->changed_move = 0;
+                  obj->changed_map = 0;
+                  obj->changed_pchange = 0;
                }
           }
 
@@ -1144,10 +1155,12 @@ evas_render_mapped(Evas *e, Evas_Object *obj, void *context, void *surface,
                                             e->engine.data.context,
                                             ecx, ecy, ecw, ech);
         if (obj->cur.cache.clip.visible)
-          obj->layer->evas->engine.func->image_map_draw
-             (e->engine.data.output, e->engine.data.context, surface,
-              obj->cur.map->surface, obj->cur.map->count, pts,
-              obj->cur.map->smooth, 0);
+          {
+             obj->layer->evas->engine.func->image_map_draw
+               (e->engine.data.output, e->engine.data.context, surface,
+                   obj->cur.map->surface, obj->cur.map->count, pts,
+                   obj->cur.map->smooth, 0);
+          }
         // FIXME: needs to cache these maps and
         // keep them only rendering updates
         //        obj->layer->evas->engine.func->image_map_surface_free
@@ -1640,6 +1653,8 @@ evas_render_updates_internal(Evas *e,
              obj->changed_move_only = 0;
              obj->changed_nomove = 0;
              obj->changed_move = 0;
+             obj->changed_map = 0;
+             obj->changed_pchange = 0;
           }
         else if ((obj->cur.map != obj->prev.map) ||
                  (obj->cur.usemap != obj->prev.usemap))
@@ -1651,6 +1666,8 @@ evas_render_updates_internal(Evas *e,
              obj->changed_move_only = 0;
              obj->changed_nomove = 0;
              obj->changed_move = 0;
+             obj->changed_map = 0;
+             obj->changed_pchange = 0;
           }
         /* moved to other pre-process phase 1
            if (obj->delete_me == 2)
index 2e9eb79..bf0cfc5 100644 (file)
@@ -615,6 +615,8 @@ struct _Evas_Object
    Eina_Bool                   changed_move : 1;
    Eina_Bool                   changed_move_only : 1;
    Eina_Bool                   changed_nomove : 1;
+   Eina_Bool                   changed_map : 1;
+   Eina_Bool                   changed_pchange : 1;
    Eina_Bool                   del_ref : 1;
 
    Eina_Bool                   is_frame : 1;