diff --git a/legacy/evas/src/lib/canvas/evas_callbacks.c b/legacy/evas/src/lib/canvas/evas_callbacks.c index 5d53940a0b..9d755269b6 100644 --- a/legacy/evas/src/lib/canvas/evas_callbacks.c +++ b/legacy/evas/src/lib/canvas/evas_callbacks.c @@ -44,45 +44,68 @@ static void evas_object_event_callback_clear(Evas_Object *obj) { Evas_Callback_Type t; - - if (!obj->callbacks.deletions_waiting) return; - obj->callbacks.deletions_waiting = 0; - evas_object_event_callback_list_post_free(&(obj->callbacks.in)); - evas_object_event_callback_list_post_free(&(obj->callbacks.out)); - evas_object_event_callback_list_post_free(&(obj->callbacks.down)); - evas_object_event_callback_list_post_free(&(obj->callbacks.up)); - evas_object_event_callback_list_post_free(&(obj->callbacks.move)); - evas_object_event_callback_list_post_free(&(obj->callbacks.free)); - evas_object_event_callback_list_post_free(&(obj->callbacks.key_down)); - evas_object_event_callback_list_post_free(&(obj->callbacks.key_up)); - evas_object_event_callback_list_post_free(&(obj->callbacks.obj_focus_in)); - evas_object_event_callback_list_post_free(&(obj->callbacks.obj_focus_out)); - evas_object_event_callback_list_post_free(&(obj->callbacks.obj_show)); - evas_object_event_callback_list_post_free(&(obj->callbacks.obj_hide)); - evas_object_event_callback_list_post_free(&(obj->callbacks.obj_move)); - evas_object_event_callback_list_post_free(&(obj->callbacks.obj_resize)); - evas_object_event_callback_list_post_free(&(obj->callbacks.obj_restack)); + + if (!obj->callbacks) return; + if (!obj->callbacks->deletions_waiting) return; + obj->callbacks->deletions_waiting = 0; + evas_object_event_callback_list_post_free(&(obj->callbacks->in)); + evas_object_event_callback_list_post_free(&(obj->callbacks->out)); + evas_object_event_callback_list_post_free(&(obj->callbacks->down)); + evas_object_event_callback_list_post_free(&(obj->callbacks->up)); + evas_object_event_callback_list_post_free(&(obj->callbacks->move)); + evas_object_event_callback_list_post_free(&(obj->callbacks->free)); + evas_object_event_callback_list_post_free(&(obj->callbacks->key_down)); + evas_object_event_callback_list_post_free(&(obj->callbacks->key_up)); + evas_object_event_callback_list_post_free(&(obj->callbacks->obj_focus_in)); + evas_object_event_callback_list_post_free(&(obj->callbacks->obj_focus_out)); + evas_object_event_callback_list_post_free(&(obj->callbacks->obj_show)); + evas_object_event_callback_list_post_free(&(obj->callbacks->obj_hide)); + evas_object_event_callback_list_post_free(&(obj->callbacks->obj_move)); + evas_object_event_callback_list_post_free(&(obj->callbacks->obj_resize)); + evas_object_event_callback_list_post_free(&(obj->callbacks->obj_restack)); + if ((!obj->callbacks->in) && + (!obj->callbacks->out) && + (!obj->callbacks->down) && + (!obj->callbacks->up) && + (!obj->callbacks->move) && + (!obj->callbacks->free) && + (!obj->callbacks->key_down) && + (!obj->callbacks->key_up) && + (!obj->callbacks->obj_focus_in) && + (!obj->callbacks->obj_focus_out) && + (!obj->callbacks->obj_show) && + (!obj->callbacks->obj_hide) && + (!obj->callbacks->obj_move) && + (!obj->callbacks->obj_resize) && + (!obj->callbacks->obj_restack)) + { + free(obj->callbacks); + obj->callbacks = NULL; + } } void evas_object_event_callback_cleanup(Evas_Object *obj) { /* MEM OK */ - evas_object_event_callback_list_free(&(obj->callbacks.in)); - evas_object_event_callback_list_free(&(obj->callbacks.out)); - evas_object_event_callback_list_free(&(obj->callbacks.down)); - evas_object_event_callback_list_free(&(obj->callbacks.up)); - evas_object_event_callback_list_free(&(obj->callbacks.move)); - evas_object_event_callback_list_free(&(obj->callbacks.free)); - evas_object_event_callback_list_free(&(obj->callbacks.key_down)); - evas_object_event_callback_list_free(&(obj->callbacks.key_up)); - evas_object_event_callback_list_free(&(obj->callbacks.obj_focus_in)); - evas_object_event_callback_list_free(&(obj->callbacks.obj_focus_out)); - evas_object_event_callback_list_free(&(obj->callbacks.obj_show)); - evas_object_event_callback_list_free(&(obj->callbacks.obj_hide)); - evas_object_event_callback_list_free(&(obj->callbacks.obj_move)); - evas_object_event_callback_list_free(&(obj->callbacks.obj_resize)); - evas_object_event_callback_list_free(&(obj->callbacks.obj_restack)); + if (!obj->callbacks) return; + evas_object_event_callback_list_free(&(obj->callbacks->in)); + evas_object_event_callback_list_free(&(obj->callbacks->out)); + evas_object_event_callback_list_free(&(obj->callbacks->down)); + evas_object_event_callback_list_free(&(obj->callbacks->up)); + evas_object_event_callback_list_free(&(obj->callbacks->move)); + evas_object_event_callback_list_free(&(obj->callbacks->free)); + evas_object_event_callback_list_free(&(obj->callbacks->key_down)); + evas_object_event_callback_list_free(&(obj->callbacks->key_up)); + evas_object_event_callback_list_free(&(obj->callbacks->obj_focus_in)); + evas_object_event_callback_list_free(&(obj->callbacks->obj_focus_out)); + evas_object_event_callback_list_free(&(obj->callbacks->obj_show)); + evas_object_event_callback_list_free(&(obj->callbacks->obj_hide)); + evas_object_event_callback_list_free(&(obj->callbacks->obj_move)); + evas_object_event_callback_list_free(&(obj->callbacks->obj_resize)); + evas_object_event_callback_list_free(&(obj->callbacks->obj_restack)); + free(obj->callbacks); + obj->callbacks = NULL; } void @@ -91,58 +114,59 @@ evas_object_event_callback_call(Evas_Object *obj, Evas_Callback_Type type, void /* MEM OK */ Evas_Object_List **l_mod, *l; + if (!obj->callbacks) return; switch (type) { case EVAS_CALLBACK_MOUSE_IN: - l_mod = &(obj->callbacks.in); + l_mod = &(obj->callbacks->in); break; case EVAS_CALLBACK_MOUSE_OUT: - l_mod = &(obj->callbacks.out); + l_mod = &(obj->callbacks->out); break; case EVAS_CALLBACK_MOUSE_DOWN: - l_mod = &(obj->callbacks.down); + l_mod = &(obj->callbacks->down); break; case EVAS_CALLBACK_MOUSE_UP: - l_mod = &(obj->callbacks.up); + l_mod = &(obj->callbacks->up); break; case EVAS_CALLBACK_MOUSE_MOVE: - l_mod = &(obj->callbacks.move); + l_mod = &(obj->callbacks->move); break; case EVAS_CALLBACK_FREE: - l_mod = &(obj->callbacks.free); + l_mod = &(obj->callbacks->free); break; case EVAS_CALLBACK_KEY_DOWN: - l_mod = &(obj->callbacks.key_down); + l_mod = &(obj->callbacks->key_down); break; case EVAS_CALLBACK_KEY_UP: - l_mod = &(obj->callbacks.key_up); + l_mod = &(obj->callbacks->key_up); break; case EVAS_CALLBACK_FOCUS_IN: - l_mod = &(obj->callbacks.obj_focus_in); + l_mod = &(obj->callbacks->obj_focus_in); break; case EVAS_CALLBACK_FOCUS_OUT: - l_mod = &(obj->callbacks.obj_focus_out); + l_mod = &(obj->callbacks->obj_focus_out); break; case EVAS_CALLBACK_SHOW: - l_mod = &(obj->callbacks.obj_show); + l_mod = &(obj->callbacks->obj_show); break; case EVAS_CALLBACK_HIDE: - l_mod = &(obj->callbacks.obj_hide); + l_mod = &(obj->callbacks->obj_hide); break; case EVAS_CALLBACK_MOVE: - l_mod = &(obj->callbacks.obj_move); + l_mod = &(obj->callbacks->obj_move); break; case EVAS_CALLBACK_RESIZE: - l_mod = &(obj->callbacks.obj_resize); + l_mod = &(obj->callbacks->obj_resize); break; case EVAS_CALLBACK_RESTACK: - l_mod = &(obj->callbacks.obj_restack); + l_mod = &(obj->callbacks->obj_restack); break; default: return; break; } - obj->callbacks.walking_list++; + obj->callbacks->walking_list++; for (l = *l_mod; l; l = l->next) { Evas_Func_Node *fn; @@ -152,8 +176,8 @@ evas_object_event_callback_call(Evas_Object *obj, Evas_Callback_Type type, void fn->func(fn->data, obj->layer->evas, obj, event_info); if (obj->delete_me) break; } - obj->callbacks.walking_list--; - if (!obj->callbacks.walking_list) + obj->callbacks->walking_list--; + if (!obj->callbacks->walking_list) evas_object_event_callback_clear(obj); } @@ -328,52 +352,59 @@ evas_object_event_callback_add(Evas_Object *obj, Evas_Callback_Type type, void ( fn->func = func; fn->data = (void *)data; + if (!obj->callbacks) + obj->callbacks = evas_mem_calloc(sizeof(Evas_Callbacks)); + if (!obj->callbacks) + { + free(fn); + return; + } switch (type) { case EVAS_CALLBACK_MOUSE_IN: - l_mod = &(obj->callbacks.in); + l_mod = &(obj->callbacks->in); break; case EVAS_CALLBACK_MOUSE_OUT: - l_mod = &(obj->callbacks.out); + l_mod = &(obj->callbacks->out); break; case EVAS_CALLBACK_MOUSE_DOWN: - l_mod = &(obj->callbacks.down); + l_mod = &(obj->callbacks->down); break; case EVAS_CALLBACK_MOUSE_UP: - l_mod = &(obj->callbacks.up); + l_mod = &(obj->callbacks->up); break; case EVAS_CALLBACK_MOUSE_MOVE: - l_mod = &(obj->callbacks.move); + l_mod = &(obj->callbacks->move); break; case EVAS_CALLBACK_FREE: - l_mod = &(obj->callbacks.free); + l_mod = &(obj->callbacks->free); break; case EVAS_CALLBACK_KEY_DOWN: - l_mod = &(obj->callbacks.key_down); + l_mod = &(obj->callbacks->key_down); break; case EVAS_CALLBACK_KEY_UP: - l_mod = &(obj->callbacks.key_up); + l_mod = &(obj->callbacks->key_up); break; case EVAS_CALLBACK_FOCUS_IN: - l_mod = &(obj->callbacks.obj_focus_in); + l_mod = &(obj->callbacks->obj_focus_in); break; case EVAS_CALLBACK_FOCUS_OUT: - l_mod = &(obj->callbacks.obj_focus_out); + l_mod = &(obj->callbacks->obj_focus_out); break; case EVAS_CALLBACK_SHOW: - l_mod = &(obj->callbacks.obj_show); + l_mod = &(obj->callbacks->obj_show); break; case EVAS_CALLBACK_HIDE: - l_mod = &(obj->callbacks.obj_hide); + l_mod = &(obj->callbacks->obj_hide); break; case EVAS_CALLBACK_MOVE: - l_mod = &(obj->callbacks.obj_move); + l_mod = &(obj->callbacks->obj_move); break; case EVAS_CALLBACK_RESIZE: - l_mod = &(obj->callbacks.obj_resize); + l_mod = &(obj->callbacks->obj_resize); break; case EVAS_CALLBACK_RESTACK: - l_mod = &(obj->callbacks.obj_restack); + l_mod = &(obj->callbacks->obj_restack); break; default: free(fn); @@ -418,52 +449,54 @@ evas_object_event_callback_del(Evas_Object *obj, Evas_Callback_Type type, void ( if (!func) return NULL; + if (!obj->callbacks) return NULL; + switch (type) { case EVAS_CALLBACK_MOUSE_IN: - l_mod = &(obj->callbacks.in); + l_mod = &(obj->callbacks->in); break; case EVAS_CALLBACK_MOUSE_OUT: - l_mod = &(obj->callbacks.out); + l_mod = &(obj->callbacks->out); break; case EVAS_CALLBACK_MOUSE_DOWN: - l_mod = &(obj->callbacks.down); + l_mod = &(obj->callbacks->down); break; case EVAS_CALLBACK_MOUSE_UP: - l_mod = &(obj->callbacks.up); + l_mod = &(obj->callbacks->up); break; case EVAS_CALLBACK_MOUSE_MOVE: - l_mod = &(obj->callbacks.move); + l_mod = &(obj->callbacks->move); break; case EVAS_CALLBACK_FREE: - l_mod = &(obj->callbacks.free); + l_mod = &(obj->callbacks->free); break; case EVAS_CALLBACK_KEY_DOWN: - l_mod = &(obj->callbacks.key_down); + l_mod = &(obj->callbacks->key_down); break; case EVAS_CALLBACK_KEY_UP: - l_mod = &(obj->callbacks.key_up); + l_mod = &(obj->callbacks->key_up); break; case EVAS_CALLBACK_FOCUS_IN: - l_mod = &(obj->callbacks.obj_focus_in); + l_mod = &(obj->callbacks->obj_focus_in); break; case EVAS_CALLBACK_FOCUS_OUT: - l_mod = &(obj->callbacks.obj_focus_out); + l_mod = &(obj->callbacks->obj_focus_out); break; case EVAS_CALLBACK_SHOW: - l_mod = &(obj->callbacks.obj_show); + l_mod = &(obj->callbacks->obj_show); break; case EVAS_CALLBACK_HIDE: - l_mod = &(obj->callbacks.obj_hide); + l_mod = &(obj->callbacks->obj_hide); break; case EVAS_CALLBACK_MOVE: - l_mod = &(obj->callbacks.obj_move); + l_mod = &(obj->callbacks->obj_move); break; case EVAS_CALLBACK_RESIZE: - l_mod = &(obj->callbacks.obj_resize); + l_mod = &(obj->callbacks->obj_resize); break; case EVAS_CALLBACK_RESTACK: - l_mod = &(obj->callbacks.obj_restack); + l_mod = &(obj->callbacks->obj_restack); break; default: return NULL; @@ -480,8 +513,8 @@ evas_object_event_callback_del(Evas_Object *obj, Evas_Callback_Type type, void ( data = fn->data; fn->delete_me = 1; - obj->callbacks.deletions_waiting = 1; - if (!obj->callbacks.walking_list) + obj->callbacks->deletions_waiting = 1; + if (!obj->callbacks->walking_list) evas_object_event_callback_clear(obj); return data; } diff --git a/legacy/evas/src/lib/canvas/evas_object_gradient.c b/legacy/evas/src/lib/canvas/evas_object_gradient.c index aa3aabb80d..c2a5de5e02 100644 --- a/legacy/evas/src/lib/canvas/evas_object_gradient.c +++ b/legacy/evas/src/lib/canvas/evas_object_gradient.c @@ -15,9 +15,9 @@ struct _Evas_Object_Gradient struct { double angle; } cur, prev; - int changed : 1; - int gradient_changed : 1; - int gradient_opaque : 1; + char changed : 1; + char gradient_changed : 1; + char gradient_opaque : 1; void *engine_data; }; diff --git a/legacy/evas/src/lib/canvas/evas_object_image.c b/legacy/evas/src/lib/canvas/evas_object_image.c index 870cebc6d6..87fe3d8225 100644 --- a/legacy/evas/src/lib/canvas/evas_object_image.c +++ b/legacy/evas/src/lib/canvas/evas_object_image.c @@ -15,24 +15,22 @@ struct _Evas_Object_Image struct { struct { double x, y, w, h; - } fill; - + } fill; struct { - int w, h; + short w, h; } image; - struct { - int l, r, t, b; + short l, r, t, b; } border; char *file; char *key; - int smooth_scale : 1; - int has_alpha :1; + char smooth_scale : 1; + char has_alpha :1; } cur, prev; - int changed : 1; + char changed : 1; int load_error; Evas_List *pixel_updates; diff --git a/legacy/evas/src/lib/canvas/evas_object_line.c b/legacy/evas/src/lib/canvas/evas_object_line.c index 43d59d28ba..821dc7237e 100644 --- a/legacy/evas/src/lib/canvas/evas_object_line.c +++ b/legacy/evas/src/lib/canvas/evas_object_line.c @@ -20,7 +20,7 @@ struct _Evas_Object_Line } cache; double x1, y1, x2, y2; } cur, prev; - int changed : 1; + char changed : 1; void *engine_data; }; diff --git a/legacy/evas/src/lib/canvas/evas_object_polygon.c b/legacy/evas/src/lib/canvas/evas_object_polygon.c index bec15f22af..7e81bd7cb3 100644 --- a/legacy/evas/src/lib/canvas/evas_object_polygon.c +++ b/legacy/evas/src/lib/canvas/evas_object_polygon.c @@ -12,9 +12,9 @@ typedef struct _Evas_Polygon_Point Evas_Polygon_Point; struct _Evas_Object_Polygon { DATA32 magic; - int changed : 1; - Evas_List *points; - + Evas_List *points; + char changed : 1; + void *engine_data; }; diff --git a/legacy/evas/src/lib/canvas/evas_object_smart.c b/legacy/evas/src/lib/canvas/evas_object_smart.c index 244205e081..ccb706d0d5 100644 --- a/legacy/evas/src/lib/canvas/evas_object_smart.c +++ b/legacy/evas/src/lib/canvas/evas_object_smart.c @@ -14,7 +14,7 @@ struct _Evas_Object_Smart struct _Evas_Smart_Callback { char *event; - int delete_me : 1; + char delete_me : 1; void (*func) (void *data, Evas_Object *obj, void *event_info); void *func_data; }; diff --git a/legacy/evas/src/lib/canvas/evas_object_text.c b/legacy/evas/src/lib/canvas/evas_object_text.c index d4c9e9b17a..0703311907 100644 --- a/legacy/evas/src/lib/canvas/evas_object_text.c +++ b/legacy/evas/src/lib/canvas/evas_object_text.c @@ -17,10 +17,10 @@ struct _Evas_Object_Text char *font; double size; } cur, prev; - int changed : 1; + char changed : 1; - double ascent, descent; - double max_ascent, max_descent; + float ascent, descent; + float max_ascent, max_descent; void *engine_data; }; diff --git a/legacy/evas/src/lib/include/evas_private.h b/legacy/evas/src/lib/include/evas_private.h index 24d8b2f9b0..18ab56187b 100644 --- a/legacy/evas/src/lib/include/evas_private.h +++ b/legacy/evas/src/lib/include/evas_private.h @@ -53,6 +53,7 @@ typedef struct _Evas_Intercept_Func_SizePos Evas_Intercept_Func_SizePos; typedef struct _Evas_Intercept_Func_Obj Evas_Intercept_Func_Obj; typedef struct _Evas_Intercept_Func_Int Evas_Intercept_Func_Int; typedef struct _Evas_Key_Grab Evas_Key_Grab; +typedef struct _Evas_Callbacks Evas_Callbacks; #define MAGIC_EVAS 0x70777770 #define MAGIC_OBJ 0x71777770 @@ -128,7 +129,7 @@ struct _Evas_Key_Grab Evas_Modifier_Mask modifiers; Evas_Modifier_Mask not_modifiers; Evas_Object *object; - int exclusive : 1; + char exclusive : 1; }; struct _Evas_Intercept_Func @@ -152,7 +153,7 @@ struct _Evas_Smart int usage; void *data; - int delete_me : 1; + char delete_me : 1; void (*func_add) (Evas_Object *o); void (*func_del) (Evas_Object *o); @@ -188,6 +189,27 @@ struct _Evas_Lock Evas_Modifier_Mask mask; /* we have a max of 64 locks */ }; +struct _Evas_Callbacks +{ + char deletions_waiting : 1; + int walking_list; + Evas_Object_List *down; + Evas_Object_List *up; + Evas_Object_List *move; + Evas_Object_List *in; + Evas_Object_List *out; + Evas_Object_List *key_down; + Evas_Object_List *key_up; + Evas_Object_List *free; + Evas_Object_List *obj_focus_in; + Evas_Object_List *obj_focus_out; + Evas_Object_List *obj_show; + Evas_Object_List *obj_hide; + Evas_Object_List *obj_move; + Evas_Object_List *obj_resize; + Evas_Object_List *obj_restack; +}; + struct _Evas { Evas_Object_List _list_data; @@ -195,8 +217,8 @@ struct _Evas DATA32 magic; struct { - int inside : 1; - int mouse_grabbed : 1; + char inside : 1; + char mouse_grabbed : 1; DATA32 button; int x, y; @@ -210,13 +232,13 @@ struct _Evas struct { double x, y, w, h; - int changed : 1; + char changed : 1; } viewport; struct { int w, h; DATA32 render_method; - int changed : 1; + char changed : 1; } output; int output_validity; @@ -228,7 +250,7 @@ struct _Evas Evas_Hash *name_hash; - int changed : 1; + char changed : 1; int events_frozen; @@ -260,8 +282,6 @@ struct _Evas_Layer int layer; Evas_Object *objects; - int store : 1; - Evas *evas; void *engine_data; @@ -273,8 +293,7 @@ struct _Evas_Object DATA32 magic; - const char *type; - + const char *type; Evas_Layer *layer; struct { @@ -285,39 +304,22 @@ struct _Evas_Object } geometry; struct { int x, y, w, h; - int r, g, b, a; - int visible; + unsigned char r, g, b, a; + char visible : 1; } clip; } cache; struct { double x, y, w, h; } geometry; struct { - int r, g, b, a; - } color; - - int visible : 1; - - int layer; - - Evas_Object *clipper; - + unsigned char r, g, b, a; + } color; + char visible : 1; + int layer; + Evas_Object *clipper; } cur, prev; - char *name; - - int store : 1; - int pass_events : 1; - int repeat_events : 1; - int restack : 1; - int changed : 1; - int mouse_in : 1; - int mouse_grabbed : 1; - int pre_render_done : 1; - int intercepted : 1; - int focused : 1; - - int delete_me; + char *name; Evas_Intercept_Func *interceptors; @@ -326,26 +328,8 @@ struct _Evas_Object } data; Evas_List *grabs; - - struct { - int deletions_waiting : 1; - int walking_list; - Evas_Object_List *in; - Evas_Object_List *out; - Evas_Object_List *down; - Evas_Object_List *up; - Evas_Object_List *move; - Evas_Object_List *free; - Evas_Object_List *key_down; - Evas_Object_List *key_up; - Evas_Object_List *obj_focus_in; - Evas_Object_List *obj_focus_out; - Evas_Object_List *obj_show; - Evas_Object_List *obj_hide; - Evas_Object_List *obj_move; - Evas_Object_List *obj_resize; - Evas_Object_List *obj_restack; - } callbacks; + + Evas_Callbacks *callbacks; struct { Evas_List *clipees; @@ -353,24 +337,37 @@ struct _Evas_Object } clip; Evas_Object_Func *func; + + void *object_data; struct { int walking_list; - int deletions_waiting : 1; Evas_Smart *smart; void *data; Evas_Object *parent; Evas_List *contained; Evas_List *callbacks; + char deletions_waiting : 1; } smart; - void *object_data; + short store : 1; + short pass_events : 1; + short repeat_events : 1; + short restack : 1; + short changed : 1; + short mouse_in : 1; + short mouse_grabbed : 1; + short pre_render_done : 1; + short intercepted : 1; + short focused : 1; + + unsigned char delete_me; }; struct _Evas_Func_Node { Evas_Object_List _list_data; - int delete_me : 1; + char delete_me : 1; void (*func) (void *data, Evas *e, Evas_Object *obj, void *event_info); void *data; };