diff --git a/src/lib/eina/eina_tiler.c b/src/lib/eina/eina_tiler.c index 25ecee158d..32833e95ff 100644 --- a/src/lib/eina/eina_tiler.c +++ b/src/lib/eina/eina_tiler.c @@ -1444,10 +1444,6 @@ eina_tiler_intersection(Eina_Tiler *t1, if (!(eina_rectangles_intersect(&t1->area, &t2->area))) return NULL; - w = MIN(t1->area.w, t2->area.w); - h = MIN(t1->area.h, t2->area.h); - t = eina_tiler_new(w, h); - itr1 = eina_tiler_iterator_new(t1); itr2 = eina_tiler_iterator_new(t2); @@ -1459,6 +1455,10 @@ eina_tiler_intersection(Eina_Tiler *t1, if ((!eina_iterator_next(itr2, (void**)(void*)(&rect2))) && (!rect2)) goto cleanup; + w = MIN(t1->area.w, t2->area.w); + h = MIN(t1->area.h, t2->area.h); + t = eina_tiler_new(w, h); + while((rect1) && (rect2)) { if (eina_rectangles_intersect(rect1, rect2)) @@ -1498,6 +1498,12 @@ eina_tiler_intersection(Eina_Tiler *t1, break; } + if (eina_tiler_empty(t)) + { + eina_tiler_free(t); + t = NULL; + } + cleanup: eina_iterator_free(itr1); eina_iterator_free(itr2); diff --git a/src/lib/eina/eina_tiler.h b/src/lib/eina/eina_tiler.h index 0f60751f9b..e82922cf36 100644 --- a/src/lib/eina/eina_tiler.h +++ b/src/lib/eina/eina_tiler.h @@ -338,10 +338,10 @@ EAPI Eina_Bool eina_tiler_subtract(Eina_Tiler *dst, Eina_Tiler *src); * * @param t1 The first tile. * @param t2 The second tiler. - * @return A pointer of intersection result. @c NULL on failure. + * @return A pointer of intersection result. @c NULL if intersection doesn't exist. * * This fuction gest intersection of two tilers @p t1 and @p t2. - * It returns a pointer of result if it succeeds., otherwise returns NULL. + * It returns a pointer of result if intersection of two tilers exists., otherwise returns NULL. */ EAPI Eina_Tiler *eina_tiler_intersection(Eina_Tiler *t1, Eina_Tiler *t2); diff --git a/src/tests/eina/eina_test_tiler.c b/src/tests/eina/eina_test_tiler.c index 554dc11996..6766b629ac 100644 --- a/src/tests/eina/eina_test_tiler.c +++ b/src/tests/eina/eina_test_tiler.c @@ -224,7 +224,7 @@ START_TEST(eina_test_tiler_calculation) { Eina_Tiler *t1, *t2, *t; Eina_Iterator *itr; - Eina_Rectangle r1, r2, *rp; + Eina_Rectangle r1, r2, r3, *rp; int i = 0; eina_init(); @@ -288,6 +288,13 @@ START_TEST(eina_test_tiler_calculation) fail_if(i != 4); + EINA_RECTANGLE_SET(&r3, 0, 0, 50, 50); + eina_tiler_rect_add(t1, &r3); + + t = eina_tiler_intersection(t1, t2); + fail_if(t); + + eina_tiler_clear(t1); eina_tiler_rect_add(t1, &r1);