From 777410eac253337b340046bd5f5ed4674a4e8454 Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Mon, 26 May 2008 13:08:54 +0000 Subject: [PATCH] Make the most used functions inline functions. SVN revision: 34675 --- legacy/evas/src/lib/canvas/evas_clip.c | 63 ------- legacy/evas/src/lib/canvas/evas_events.c | 18 -- legacy/evas/src/lib/canvas/evas_object_main.c | 75 -------- legacy/evas/src/lib/include/Makefile.am | 1 + legacy/evas/src/lib/include/evas_inline.x | 161 ++++++++++++++++++ legacy/evas/src/lib/include/evas_private.h | 18 +- 6 files changed, 169 insertions(+), 167 deletions(-) create mode 100644 legacy/evas/src/lib/include/evas_inline.x diff --git a/legacy/evas/src/lib/canvas/evas_clip.c b/legacy/evas/src/lib/canvas/evas_clip.c index bd7dd54d96..dfc3e4ffba 100644 --- a/legacy/evas/src/lib/canvas/evas_clip.c +++ b/legacy/evas/src/lib/canvas/evas_clip.c @@ -1,57 +1,6 @@ #include "evas_common.h" #include "evas_private.h" -void -evas_object_clip_recalc(Evas_Object *obj) -{ - int cx, cy, cw, ch, cvis, cr, cg, cb, ca; - int nx, ny, nw, nh, nvis, nr, ng, nb, na; - - if (obj->layer->evas->events_frozen > 0) return; -// if (!obj->cur.clipper->cur.cache.clip.dirty) return; - evas_object_coords_recalc(obj); - cx = obj->cur.geometry.x; cy = obj->cur.geometry.y; - cw = obj->cur.geometry.w; ch = obj->cur.geometry.h; -//// cx = obj->cur.cache.geometry.x; cy = obj->cur.cache.geometry.y; -//// cw = obj->cur.cache.geometry.w; ch = obj->cur.cache.geometry.h; - if (obj->cur.color.a == 0) cvis = 0; - else cvis = obj->cur.visible; - cr = obj->cur.color.r; cg = obj->cur.color.g; - cb = obj->cur.color.b; ca = obj->cur.color.a; - if (obj->cur.clipper) - { -// this causes problems... hmmm -// if (obj->cur.clipper->cur.cache.clip.dirty) - evas_object_clip_recalc(obj->cur.clipper); - nx = obj->cur.clipper->cur.cache.clip.x; - ny = obj->cur.clipper->cur.cache.clip.y; - nw = obj->cur.clipper->cur.cache.clip.w; - nh = obj->cur.clipper->cur.cache.clip.h; - nvis = obj->cur.clipper->cur.cache.clip.visible; - nr = obj->cur.clipper->cur.cache.clip.r; - ng = obj->cur.clipper->cur.cache.clip.g; - nb = obj->cur.clipper->cur.cache.clip.b; - na = obj->cur.clipper->cur.cache.clip.a; - RECTS_CLIP_TO_RECT(cx, cy, cw, ch, nx, ny, nw, nh); - cvis = cvis * nvis; - cr = (cr * (nr + 1)) >> 8; - cg = (cg * (ng + 1)) >> 8; - cb = (cb * (nb + 1)) >> 8; - ca = (ca * (na + 1)) >> 8; - } - if ((ca == 0) || (cw <= 0) || (ch <= 0)) cvis = 0; - obj->cur.cache.clip.x = cx; - obj->cur.cache.clip.y = cy; - obj->cur.cache.clip.w = cw; - obj->cur.cache.clip.h = ch; - obj->cur.cache.clip.visible = cvis; - obj->cur.cache.clip.r = cr; - obj->cur.cache.clip.g = cg; - obj->cur.cache.clip.b = cb; - obj->cur.cache.clip.a = ca; - obj->cur.cache.clip.dirty = 0; -} - void evas_object_clip_dirty(Evas_Object *obj) { @@ -75,18 +24,6 @@ evas_object_recalc_clippees(Evas_Object *obj) } } -int -evas_object_clippers_is_visible(Evas_Object *obj) -{ - if (obj->cur.visible) - { - if (obj->cur.clipper) - return evas_object_clippers_is_visible(obj->cur.clipper); - return 1; - } - return 0; -} - int evas_object_clippers_was_visible(Evas_Object *obj) { diff --git a/legacy/evas/src/lib/canvas/evas_events.c b/legacy/evas/src/lib/canvas/evas_events.c index 4ee23cec8f..1a26df7776 100644 --- a/legacy/evas/src/lib/canvas/evas_events.c +++ b/legacy/evas/src/lib/canvas/evas_events.c @@ -1,24 +1,6 @@ #include "evas_common.h" #include "evas_private.h" -int -evas_event_passes_through(Evas_Object *obj) -{ - if (obj->layer->evas->events_frozen > 0) return 1; - if (obj->pass_events) return 1; - if (obj->parent_cache_valid) return obj->parent_pass_events; - if (obj->smart.parent) - { - int par_pass; - - par_pass = evas_event_passes_through(obj->smart.parent); - obj->parent_cache_valid = 1; - obj->parent_pass_events = par_pass; - return par_pass; - } - return 0; -} - static Evas_List * _evas_event_object_list_in_get(Evas *e, Evas_List *in, const Evas_Object_List *list, Evas_Object *stop, int x, int y, int *no_rep) { diff --git a/legacy/evas/src/lib/canvas/evas_object_main.c b/legacy/evas/src/lib/canvas/evas_object_main.c index 056ee9bdd5..10df2b7239 100644 --- a/legacy/evas/src/lib/canvas/evas_object_main.c +++ b/legacy/evas/src/lib/canvas/evas_object_main.c @@ -303,53 +303,6 @@ evas_object_render_pre_effect_updates(Evas_List *updates, Evas_Object *obj, int } } -void -evas_object_coords_recalc(Evas_Object *obj) -{ - if (obj->smart.smart) return; -//// if (obj->cur.cache.geometry.validity == obj->layer->evas->output_validity) -//// return; -//// obj->cur.cache.geometry.x = -//// evas_coord_world_x_to_screen(obj->layer->evas, obj->cur.geometry.x); -//// obj->cur.cache.geometry.y = -//// evas_coord_world_y_to_screen(obj->layer->evas, obj->cur.geometry.y); -//// obj->cur.cache.geometry.w = -//// evas_coord_world_x_to_screen(obj->layer->evas, obj->cur.geometry.w) - -//// evas_coord_world_x_to_screen(obj->layer->evas, 0); -//// obj->cur.cache.geometry.h = -//// evas_coord_world_y_to_screen(obj->layer->evas, obj->cur.geometry.h) - -//// evas_coord_world_y_to_screen(obj->layer->evas, 0); - if (obj->func->coords_recalc) obj->func->coords_recalc(obj); -//// obj->cur.cache.geometry.validity = obj->layer->evas->output_validity; -} - -int -evas_object_is_active(Evas_Object *obj) -{ - if (obj->smart.smart) return 0; - if ((evas_object_is_visible(obj) || evas_object_was_visible(obj)) && - (evas_object_is_in_output_rect(obj, 0, 0, obj->layer->evas->output.w, - obj->layer->evas->output.h) || - evas_object_was_in_output_rect(obj, 0, 0, obj->layer->evas->output.w, - obj->layer->evas->output.h))) - return 1; - return 0; -} - -int -evas_object_is_in_output_rect(Evas_Object *obj, int x, int y, int w, int h) -{ - if (obj->smart.smart) return 0; - /* assumes coords have been recalced */ - if ((RECTS_INTERSECT(x, y, w, h, - obj->cur.cache.clip.x, - obj->cur.cache.clip.y, - obj->cur.cache.clip.w, - obj->cur.cache.clip.h))) - return 1; - return 0; -} - int evas_object_was_in_output_rect(Evas_Object *obj, int x, int y, int w, int h) { @@ -364,21 +317,6 @@ evas_object_was_in_output_rect(Evas_Object *obj, int x, int y, int w, int h) return 0; } -int -evas_object_is_visible(Evas_Object *obj) -{ - if (obj->smart.smart) return 0; - if ((obj->cur.visible) && - (obj->cur.cache.clip.visible) && - (obj->cur.cache.clip.a > 0)) - { - if (obj->func->is_visible) - return obj->func->is_visible(obj); - return 1; - } - return 0; -} - int evas_object_was_visible(Evas_Object *obj) { @@ -394,19 +332,6 @@ evas_object_was_visible(Evas_Object *obj) return 0; } -int -evas_object_is_opaque(Evas_Object *obj) -{ - if (obj->smart.smart) return 0; - if (obj->cur.cache.clip.a == 255) - { - if (obj->func->is_opaque) - return obj->func->is_opaque(obj); - return 1; - } - return 0; -} - int evas_object_was_opaque(Evas_Object *obj) { diff --git a/legacy/evas/src/lib/include/Makefile.am b/legacy/evas/src/lib/include/Makefile.am index 07bb2c0ac7..1570bf4654 100644 --- a/legacy/evas/src/lib/include/Makefile.am +++ b/legacy/evas/src/lib/include/Makefile.am @@ -2,6 +2,7 @@ MAINTAINERCLEANFILES = Makefile.in EXTRA_DIST = \ +evas_inline.x \ evas_private.h \ evas_options.h \ evas_macros.h \ diff --git a/legacy/evas/src/lib/include/evas_inline.x b/legacy/evas/src/lib/include/evas_inline.x new file mode 100644 index 0000000000..2489c94c66 --- /dev/null +++ b/legacy/evas/src/lib/include/evas_inline.x @@ -0,0 +1,161 @@ +#ifndef EVAS_INLINE_H +#define EVAS_INLINE_H + +static inline int +evas_object_is_opaque(Evas_Object *obj) +{ + if (obj->smart.smart) return 0; + if (obj->cur.cache.clip.a == 255) + { + if (obj->func->is_opaque) + return obj->func->is_opaque(obj); + return 1; + } + return 0; +} + +static inline int +evas_event_passes_through(Evas_Object *obj) +{ + if (obj->layer->evas->events_frozen > 0) return 1; + if (obj->pass_events) return 1; + if (obj->parent_cache_valid) return obj->parent_pass_events; + if (obj->smart.parent) + { + int par_pass; + + par_pass = evas_event_passes_through(obj->smart.parent); + obj->parent_cache_valid = 1; + obj->parent_pass_events = par_pass; + return par_pass; + } + return 0; +} + +static inline int +evas_object_is_visible(Evas_Object *obj) +{ + if (obj->smart.smart) return 0; + if ((obj->cur.visible) && + (obj->cur.cache.clip.visible) && + (obj->cur.cache.clip.a > 0)) + { + if (obj->func->is_visible) + return obj->func->is_visible(obj); + return 1; + } + return 0; +} + +static inline int +evas_object_clippers_is_visible(Evas_Object *obj) +{ + if (obj->cur.visible) + { + if (obj->cur.clipper) + return evas_object_clippers_is_visible(obj->cur.clipper); + return 1; + } + return 0; +} + +static inline int +evas_object_is_in_output_rect(Evas_Object *obj, int x, int y, int w, int h) +{ + if (obj->smart.smart) return 0; + /* assumes coords have been recalced */ + if ((RECTS_INTERSECT(x, y, w, h, + obj->cur.cache.clip.x, + obj->cur.cache.clip.y, + obj->cur.cache.clip.w, + obj->cur.cache.clip.h))) + return 1; + return 0; +} + +static inline int +evas_object_is_active(Evas_Object *obj) +{ + if (obj->smart.smart) return 0; + if ((evas_object_is_visible(obj) || evas_object_was_visible(obj)) && + (evas_object_is_in_output_rect(obj, 0, 0, obj->layer->evas->output.w, + obj->layer->evas->output.h) || + evas_object_was_in_output_rect(obj, 0, 0, obj->layer->evas->output.w, + obj->layer->evas->output.h))) + return 1; + return 0; +} + +static inline void +evas_object_coords_recalc(Evas_Object *obj) +{ + if (obj->smart.smart) return; +//// if (obj->cur.cache.geometry.validity == obj->layer->evas->output_validity) +//// return; +//// obj->cur.cache.geometry.x = +//// evas_coord_world_x_to_screen(obj->layer->evas, obj->cur.geometry.x); +//// obj->cur.cache.geometry.y = +//// evas_coord_world_y_to_screen(obj->layer->evas, obj->cur.geometry.y); +//// obj->cur.cache.geometry.w = +//// evas_coord_world_x_to_screen(obj->layer->evas, obj->cur.geometry.w) - +//// evas_coord_world_x_to_screen(obj->layer->evas, 0); +//// obj->cur.cache.geometry.h = +//// evas_coord_world_y_to_screen(obj->layer->evas, obj->cur.geometry.h) - +//// evas_coord_world_y_to_screen(obj->layer->evas, 0); + if (obj->func->coords_recalc) obj->func->coords_recalc(obj); +//// obj->cur.cache.geometry.validity = obj->layer->evas->output_validity; +} + +static inline void +evas_object_clip_recalc(Evas_Object *obj) +{ + int cx, cy, cw, ch, cvis, cr, cg, cb, ca; + int nx, ny, nw, nh, nvis, nr, ng, nb, na; + + if (obj->layer->evas->events_frozen > 0) return; +// if (!obj->cur.clipper->cur.cache.clip.dirty) return; + evas_object_coords_recalc(obj); + cx = obj->cur.geometry.x; cy = obj->cur.geometry.y; + cw = obj->cur.geometry.w; ch = obj->cur.geometry.h; +//// cx = obj->cur.cache.geometry.x; cy = obj->cur.cache.geometry.y; +//// cw = obj->cur.cache.geometry.w; ch = obj->cur.cache.geometry.h; + if (obj->cur.color.a == 0) cvis = 0; + else cvis = obj->cur.visible; + cr = obj->cur.color.r; cg = obj->cur.color.g; + cb = obj->cur.color.b; ca = obj->cur.color.a; + if (obj->cur.clipper) + { +// this causes problems... hmmm +// if (obj->cur.clipper->cur.cache.clip.dirty) + evas_object_clip_recalc(obj->cur.clipper); + nx = obj->cur.clipper->cur.cache.clip.x; + ny = obj->cur.clipper->cur.cache.clip.y; + nw = obj->cur.clipper->cur.cache.clip.w; + nh = obj->cur.clipper->cur.cache.clip.h; + RECTS_CLIP_TO_RECT(cx, cy, cw, ch, nx, ny, nw, nh); + + nvis = obj->cur.clipper->cur.cache.clip.visible; + nr = obj->cur.clipper->cur.cache.clip.r; + ng = obj->cur.clipper->cur.cache.clip.g; + nb = obj->cur.clipper->cur.cache.clip.b; + na = obj->cur.clipper->cur.cache.clip.a; + cvis = cvis * nvis; + cr = (cr * (nr + 1)) >> 8; + cg = (cg * (ng + 1)) >> 8; + cb = (cb * (nb + 1)) >> 8; + ca = (ca * (na + 1)) >> 8; + } + if ((ca == 0) || (cw <= 0) || (ch <= 0)) cvis = 0; + obj->cur.cache.clip.x = cx; + obj->cur.cache.clip.y = cy; + obj->cur.cache.clip.w = cw; + obj->cur.cache.clip.h = ch; + obj->cur.cache.clip.visible = cvis; + obj->cur.cache.clip.r = cr; + obj->cur.cache.clip.g = cg; + obj->cur.cache.clip.b = cb; + obj->cur.cache.clip.a = ca; + obj->cur.cache.clip.dirty = 0; +} + +#endif diff --git a/legacy/evas/src/lib/include/evas_private.h b/legacy/evas/src/lib/include/evas_private.h index 0f2b04c02d..043f19cb84 100644 --- a/legacy/evas/src/lib/include/evas_private.h +++ b/legacy/evas/src/lib/include/evas_private.h @@ -688,7 +688,7 @@ Evas_List *evas_object_render_pre_clipper_change(Evas_List *updates, Evas_Object Evas_List *evas_object_render_pre_prev_cur_add(Evas_List *updates, Evas_Object *obj); void evas_object_render_pre_effect_updates(Evas_List *updates, Evas_Object *obj, int is_v, int was_v); Evas_List * evas_rects_return_difference_rects(int x, int y, int w, int h, int xx, int yy, int ww, int hh); -void evas_object_clip_recalc(Evas_Object *obj); + void evas_object_clip_dirty(Evas_Object *obj); void evas_object_recalc_clippees(Evas_Object *obj); Evas_Layer *evas_layer_new(Evas *e); @@ -697,21 +697,15 @@ void evas_layer_free(Evas_Layer *lay); Evas_Layer *evas_layer_find(Evas *e, short layer_num); void evas_layer_add(Evas_Layer *lay); void evas_layer_del(Evas_Layer *lay); -void evas_object_coords_recalc(Evas_Object *obj); -int evas_object_is_active(Evas_Object *obj); -int evas_object_is_in_output_rect(Evas_Object *obj, int x, int y, int w, int h); -int evas_object_was_in_output_rect(Evas_Object *obj, int x, int y, int w, int h); -int evas_object_is_visible(Evas_Object *obj); + int evas_object_was_visible(Evas_Object *obj); -int evas_object_is_opaque(Evas_Object *obj); +int evas_object_was_in_output_rect(Evas_Object *obj, int x, int y, int w, int h); + int evas_object_was_opaque(Evas_Object *obj); int evas_object_is_inside(Evas_Object *obj, Evas_Coord x, Evas_Coord y); int evas_object_was_inside(Evas_Object *obj, Evas_Coord x, Evas_Coord y); -//void evas_object_recalc_clippees(Evas_Object *obj); -int evas_object_clippers_is_visible(Evas_Object *obj); int evas_object_clippers_was_visible(Evas_Object *obj); void evas_object_event_callback_call(Evas_Object *obj, Evas_Callback_Type type, void *event_info); -int evas_event_passes_through(Evas_Object *obj); Evas_List *evas_event_objects_event_list(Evas *e, Evas_Object *stop, int x, int y); int evas_file_path_is_full_path(const char *path); char *evas_file_path_join(const char *path, const char *end); @@ -819,7 +813,9 @@ void _evas_unwalk(Evas *e); EAPI int _evas_module_engine_inherit(Evas_Func *funcs, char *name); -#define EVAS_API_OVERRIDE(func, api, prefix) \ +#include "evas_inline.x" + +#define EVAS_API_OVERRIDE(func, api, prefix) \ (api)->func = prefix##func #ifdef __cplusplus }