fix map overdraw issue that has snuck in during development

SVN revision: 69534
This commit is contained in:
Carsten Haitzler 2012-03-21 04:04:03 +00:00
parent dd9945b9ed
commit e92d5fb2eb
3 changed files with 28 additions and 5 deletions

View 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

View 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)

View 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;