evas map: Fix test case "Flip Page"

Since 9b7ac51943 evas map tries to avoid recalculating
stuff when the map parameters have not changed. Unfortunately the
code in elementary_test -to "Flip Page" was badly written. It was
modifying a constant's internal value (after ugly cast). So the
memcmp() and all other checks would return successfully, as the
exact same pointer was being compared to itself.

So, I've fixed the comparison by adding some forgotten parameters
(perspective) but most importantly I fixed the map API usage in the
test case.
This commit is contained in:
Jean-Philippe Andre 2017-04-10 19:38:56 +09:00
parent f3c9500a6d
commit fd69113f6a
2 changed files with 8 additions and 5 deletions

View File

@ -130,7 +130,7 @@ _slice_apply(State *st, Slice *sl,
static void
_slice_3d(State *st EINA_UNUSED, Slice *sl, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h)
{
Evas_Map *m = (Evas_Map *)evas_object_map_get(sl->obj);
Evas_Map *m = evas_map_dup(evas_object_map_get(sl->obj));
int i;
if (!m) return;
@ -145,6 +145,7 @@ _slice_3d(State *st EINA_UNUSED, Slice *sl, Evas_Coord x, Evas_Coord y, Evas_Coo
if (evas_map_util_clockwise_get(m)) evas_object_show(sl->obj);
else evas_object_hide(sl->obj);
evas_object_map_set(sl->obj, m);
evas_map_free(m);
}
static void
@ -663,7 +664,6 @@ _state_update(State *st)
num++;
}
}
num = 0;
for (i = 0; i < st->slices_w; i++)
{

View File

@ -556,22 +556,25 @@ evas_object_map_set(Evas_Object *eo_obj, const Evas_Map *map)
{
Evas_Object_Protected_Data *obj = EVAS_OBJ_GET_OR_RETURN(eo_obj);
evas_object_async_block(obj);
// check if the new map and current map attributes are same
if (map && obj->map->cur.map &&
(obj->map->cur.map->alpha == map->alpha) &&
(obj->map->cur.map->smooth == map->smooth) &&
(obj->map->cur.map->move_sync.enabled == map->move_sync.enabled) &&
(obj->map->cur.map->move_sync.diff_x == map->move_sync.diff_x) &&
(obj->map->cur.map->move_sync.diff_y == map->move_sync.diff_y) &&
(obj->map->cur.map->count == map->count))
{
const Evas_Map_Point *p1, *p2;
p1 = obj->map->cur.map->points;
p2 = map->points;
if (memcmp(p1, p2, sizeof(Evas_Map_Point) *
map->count) == 0)
if (!memcmp(p1, p2, sizeof(Evas_Map_Point) * map->count) &&
!memcmp(&map->persp, &obj->map->cur.map->persp, sizeof(map->persp)))
return;
}
evas_object_async_block(obj);
if ((!map) || (map->count < 4))
{
if (obj->map->surface)