* eina: improve quadtree to support more stuff needed by evas.
authorcedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Mon, 21 Jun 2010 13:17:09 +0000 (13:17 +0000)
committercedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Mon, 21 Jun 2010 13:17:09 +0000 (13:17 +0000)
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/eina@49784 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/include/eina_quadtree.h
src/lib/eina_quadtree.c
src/tests/eina_test_quadtree.c

index 3a4f661..b3720f2 100644 (file)
@@ -39,7 +39,9 @@ EAPI Eina_QuadTree *eina_quadtree_new(size_t w, size_t h,
                                      Eina_Quad_Callback horizontal);
 EAPI void eina_quadtree_free(Eina_QuadTree *q);
 EAPI void eina_quadtree_resize(Eina_QuadTree *q, size_t w, size_t h);
+
 EAPI void eina_quadtree_cycle(Eina_QuadTree *q);
+EAPI void eina_quadtree_increase(Eina_QuadTree_Item *object);
 
 EAPI Eina_QuadTree_Item *eina_quadtree_add(Eina_QuadTree *q, const void *object);
 EAPI Eina_Bool eina_quadtree_del(Eina_QuadTree_Item *object);
index 3514a2c..10a5221 100644 (file)
@@ -654,7 +654,8 @@ eina_quadtree_add(Eina_QuadTree *q, const void *object)
    result->root = NULL;
    result->object = object;
 
-   result->index = 0;
+   result->index = q->index++;
+
    result->change = EINA_TRUE;
    result->delete_me = EINA_FALSE;
    result->visible = EINA_TRUE;
@@ -741,18 +742,8 @@ eina_quadtree_hide(Eina_QuadTree_Item *object)
 EAPI Eina_Bool
 eina_quadtree_show(Eina_QuadTree_Item *object)
 {
-   size_t tmp;
-
    EINA_MAGIC_CHECK_QUADTREE_ITEM(object, EINA_FALSE);
 
-   tmp = object->quad->index++;
-   if (object->index == tmp
-       && object->visible)
-     return EINA_TRUE;
-
-   object->index = tmp;
-   if (object->root)
-     object->root->sorted = EINA_FALSE;
    object->quad->lost = EINA_TRUE;
 
    if (object->visible) return EINA_TRUE;
@@ -851,6 +842,20 @@ eina_quadtree_cycle(Eina_QuadTree *q)
    q->index = 0;
 }
 
+EAPI void
+eina_quadtree_increase(Eina_QuadTree_Item *object)
+{
+   size_t tmp;
+
+   tmp = object->quad->index++;
+   if (object->index == tmp)
+     return ;
+
+   object->index = tmp;
+   if (object->root)
+     object->root->sorted = EINA_FALSE;
+}
+
 Eina_Bool
 eina_quadtree_init(void)
 {
index 1e9bdbd..8e17a90 100644 (file)
@@ -20,6 +20,9 @@
 # include "config.h"
 #endif
 
+#include <assert.h>
+#include <stdio.h>
+
 #include "eina_suite.h"
 #include "Eina.h"
 
@@ -150,9 +153,12 @@ START_TEST(eina_quadtree_collision)
 
    eina_quadtree_cycle(q);
    eina_quadtree_show(objects[4].item);
+   eina_quadtree_increase(objects[4].item);
    eina_quadtree_show(objects[5].item);
+   eina_quadtree_increase(objects[5].item);
    eina_quadtree_del(objects[5].item);
    eina_quadtree_change(objects[10].item);
+   eina_quadtree_increase(objects[10].item);
 
    eina_quadtree_resize(q, 641, 480);