[Pkg-e-commits] [SCM] Enlightenment DR17 advanced canvas library branch, upstream-vcs, updated. 069f3cc6c93f253bffbc90289fe21d868f745bb6

cedric cedric at alioth.debian.org
Sat Jun 7 18:24:22 UTC 2008


The following commit has been merged in the upstream-vcs branch:
commit 300b02e6ee1a7edc4d01c789fa91fbfab427c3eb
Author: cedric <cedric>
Date:   Mon May 26 13:17:12 2008 +0000

    Add array type to evas.

diff --git a/src/lib/Evas.h b/src/lib/Evas.h
index c31bdee..7899c10 100644
--- a/src/lib/Evas.h
+++ b/src/lib/Evas.h
@@ -84,6 +84,7 @@ typedef enum _Evas_Colorspace
    EVAS_COLORSPACE_RGB565_A5P /**< 16bit rgb565 + Alpha plane at end - 5 bits of the 8 being used per alpha byte */
 } Evas_Colorspace; /**< Colorspaces for pixel data supported by Evas */
 
+typedef struct _Evas_Array            Evas_Array; /**< A generic vector */
 typedef struct _Evas_List             Evas_List; /**< A generic linked list node handle */
 typedef struct _Evas_Rectangle        Evas_Rectangle; /**< A generic rectangle handle */
 typedef struct _Evas_Coord_Rectangle  Evas_Coord_Rectangle; /**< A generic rectangle handle */
@@ -104,6 +105,14 @@ typedef int           Evas_Font_Size;
 typedef int           Evas_Angle;
 typedef unsigned char Evas_Bool;
 
+struct _Evas_Array /** An array of data */
+{
+   void		**data; /**< Pointer to a vector of pointer to payload */
+   unsigned int   total; /**< Total number of slot in the vector */
+   unsigned int   count; /**< Number of activ slot in the vector */
+   unsigned int	  step; /**< How much must we grow the vector When it is full */
+};
+
 struct _Evas_List /** A linked list node */
 {
    void      *data; /**< Pointer to list element payload */
@@ -417,6 +426,14 @@ extern "C" {
    EAPI Evas_List        *evas_list_sort                    (Evas_List *list, int size, int(*func)(void*,void*));
    EAPI int               evas_list_alloc_error             (void);
 
+   EAPI Evas_Array	 *evas_array_new		    (unsigned int step);
+   EAPI void		  evas_array_setup		    (Evas_Array *array, unsigned int step);
+   EAPI void		  evas_array_free		    (Evas_Array *array);
+   EAPI void		  evas_array_append		    (Evas_Array *array, void *data);
+   EAPI void		 *evas_array_get		    (Evas_Array *array, unsigned int index);
+   EAPI void		  evas_array_clean		    (Evas_Array *array);
+   EAPI void		  evas_array_flush		    (Evas_Array *array);
+
    /* FIXME: add:
     * api to add find, del members by data, size not just string and also
     * provide hash generation functions settable by the app
diff --git a/src/lib/data/Makefile.am b/src/lib/data/Makefile.am
index dfb8470..0d4bcec 100644
--- a/src/lib/data/Makefile.am
+++ b/src/lib/data/Makefile.am
@@ -13,6 +13,7 @@ noinst_LTLIBRARIES      = libevas_data.la
 libevas_data_la_SOURCES  = \
 evas_hash.c \
 evas_list.c \
+evas_array.c \
 evas_object_list.c \
 evas_stringshare.c
 
diff --git a/src/lib/data/evas_array.c b/src/lib/data/evas_array.c
new file mode 100644
index 0000000..54583a0
--- /dev/null
+++ b/src/lib/data/evas_array.c
@@ -0,0 +1,75 @@
+#include "evas_common.h"
+#include "evas_private.h"
+
+Evas_Bool
+_evas_array_grow(Evas_Array *array)
+{
+   void **tmp;
+   unsigned int total;
+
+   total = array->total + array->step;
+   tmp = realloc(array->data, sizeof (void*) * total);
+   if (!tmp) return 0;
+
+   array->total = total;
+   array->data = tmp;
+
+   return 1;
+}
+
+EAPI void
+evas_array_append(Evas_Array *array, void *data)
+{
+   _evas_array_append(array, data);
+}
+
+EAPI void*
+evas_array_get(Evas_Array *array, unsigned int index)
+{
+   return _evas_array_get(array, index);
+}
+
+EAPI void
+evas_array_clean(Evas_Array *array)
+{
+   array->count = 0;
+}
+
+EAPI void
+evas_array_setup(Evas_Array *array, unsigned int step)
+{
+   array->step = step;
+}
+
+EAPI void
+evas_array_flush(Evas_Array *array)
+{
+   array->count = 0;
+   array->total = 0;
+
+   if (array->data) free(array->data);
+   array->data = NULL;
+}
+
+EAPI Evas_Array*
+evas_array_new(unsigned int step)
+{
+   Evas_Array *array;
+
+   array = malloc(sizeof (Evas_Array));
+   if (!array) return NULL;
+
+   array->data = NULL;
+   array->total = 0;
+   array->count = 0;
+   array->step = step;
+
+   return array;
+}
+
+EAPI void
+evas_array_free(Evas_Array *array)
+{
+   evas_array_flush(array);
+   free(array);
+}
diff --git a/src/lib/include/evas_inline.x b/src/lib/include/evas_inline.x
index 2489c94..1f2e24d 100644
--- a/src/lib/include/evas_inline.x
+++ b/src/lib/include/evas_inline.x
@@ -158,4 +158,19 @@ evas_object_clip_recalc(Evas_Object *obj)
    obj->cur.cache.clip.dirty = 0;
 }
 
+static inline void
+_evas_array_append(Evas_Array *array, void *data)
+{
+   if (UNLIKELY(array->count + array->step > array->total))
+     if (!_evas_array_grow(array)) return ;
+
+   array->data[array->count++] = data;
+}
+
+static inline void*
+_evas_array_get(Evas_Array *array, unsigned int index)
+{
+   return array->data[index];
+}
+
 #endif
diff --git a/src/lib/include/evas_private.h b/src/lib/include/evas_private.h
index 043f19c..385e71a 100644
--- a/src/lib/include/evas_private.h
+++ b/src/lib/include/evas_private.h
@@ -339,6 +339,12 @@ struct _Evas
       int   info_magic;
    } engine;
 
+   Evas_Array     delete_objects;
+   Evas_Array     active_objects;
+   Evas_Array     restack_objects;
+   Evas_Array	  render_objects;
+   Evas_Array	  pending_objects;
+
    int            delete_grabs;
    int            walking_grabs;
    Evas_List     *grabs;
@@ -466,6 +472,9 @@ struct _Evas_Object
    Evas_Bool                   repeat_events : 1;
    Evas_Bool                   restack : 1;
    Evas_Bool                   changed : 1;
+   Evas_Bool                   is_active : 1;
+   Evas_Bool                   render_pre : 1;
+   Evas_Bool                   rect_del : 1;
    Evas_Bool                   mouse_in : 1;
    Evas_Bool                   pre_render_done : 1;
    Evas_Bool                   intercepted : 1;
@@ -813,10 +822,16 @@ void _evas_unwalk(Evas *e);
 
 EAPI int _evas_module_engine_inherit(Evas_Func *funcs, char *name);
 
-#include "evas_inline.x"
+void evas_render_invalidate(Evas *e);
+void evas_render_object_recalc(Evas_Object *obj);
+
+Evas_Bool _evas_array_grow(Evas_Array *array);
 
-#define EVAS_API_OVERRIDE(func, api, prefix)    \
+#define EVAS_API_OVERRIDE(func, api, prefix) \
      (api)->func = prefix##func
+
+#include "evas_inline.x"
+
 #ifdef __cplusplus
 }
 #endif

-- 
Enlightenment DR17 advanced canvas library



More information about the Pkg-e-commits mailing list