[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