enlightenment/src/bin/efx/e_efx_private.h

131 lines
3.7 KiB
C

#ifndef E_EFX_PRIVATE_H
#define E_EFX_PRIVATE_H
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <math.h>
#include <Evas.h>
#include <Ecore.h>
#include "e_Efx.h"
#define DBG(...) EINA_LOG_DOM_DBG(_e_efx_log_dom, __VA_ARGS__)
#define INF(...) EINA_LOG_DOM_INFO(_e_efx_log_dom, __VA_ARGS__)
#define WRN(...) EINA_LOG_DOM_WARN(_e_efx_log_dom, __VA_ARGS__)
#define ERR(...) EINA_LOG_DOM_ERR(_e_efx_log_dom, __VA_ARGS__)
#define CRI(...) EINA_LOG_DOM_CRIT(_e_efx_log_dom, __VA_ARGS__)
#ifdef EAPI
# undef EAPI
#endif /* ifdef EAPI */
#ifdef _WIN32
# ifdef EFL_E_EFX_BUILD
# ifdef DLL_EXPORT
# define EAPI __declspec(dllexport)
# else /* ifdef DLL_EXPORT */
# define EAPI
# endif /* ! DLL_EXPORT */
# else /* ifdef EFL_BUILD */
# define EAPI __declspec(dllimport)
# endif /* ! EFL_BUILD */
#else /* ifdef _WIN32 */
# ifdef __GNUC__
# if __GNUC__ >= 4
# define EAPI __attribute__ ((visibility("default")))
# else /* if __GNUC__ >= 4 */
# define EAPI
# endif /* if __GNUC__ >= 4 */
# else /* ifdef __GNUC__ */
# define EAPI
# endif /* ifdef __GNUC__ */
#endif /* ! _WIN32 */
#ifndef MIN
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
#endif
static const char *e_efx_speed_str[] =
{
"LINEAR", "ACCELERATE", "DECELERATE", "SINUSOIDAL"
};
extern int _e_efx_log_dom;
typedef struct E_EFX E_EFX;
struct E_EFX
{
Evas_Object *obj;
E_EFX *owner;
void *spin_data;
void *rotate_data;
void *zoom_data;
void *move_data;
void *bumpmap_data;
void *pan_data;
void *fade_data;
void *resize_data;
E_Efx_Map_Data map_data;
Eina_List *followers;
Eina_List *queue;
int x, y, w, h;
};
void _e_efx_zoom_calc(void *, void *, Evas_Object *obj, Evas_Map *map);
void _e_efx_rotate_calc(void *, void *, Evas_Object *obj, Evas_Map *map);
void _e_efx_spin_calc(void *, void *, Evas_Object *obj, Evas_Map *map);
void _e_efx_resize_adjust(E_EFX *e, int *x, int *y);
#define E_EFX_MAPS_APPLY_ALL EINA_TRUE, EINA_TRUE, EINA_TRUE
#define E_EFX_MAPS_APPLY_ROTATE EINA_TRUE, EINA_FALSE, EINA_FALSE
#define E_EFX_MAPS_APPLY_SPIN EINA_FALSE, EINA_TRUE, EINA_FALSE
#define E_EFX_MAPS_APPLY_ZOOM EINA_FALSE, EINA_FALSE, EINA_TRUE
#define E_EFX_MAPS_APPLY_ROTATE_SPIN EINA_TRUE, EINA_TRUE, EINA_FALSE
void e_efx_maps_apply(E_EFX *e, Evas_Object *obj, Evas_Map *map, Eina_Bool rotate, Eina_Bool spin, Eina_Bool zoom);
E_EFX *e_efx_new(Evas_Object *obj);
void e_efx_free(E_EFX *e);
Evas_Map *e_efx_map_new(Evas_Object *obj);
void e_efx_map_set(Evas_Object *obj, Evas_Map *map);
Eina_Bool e_efx_rotate_center_init(E_EFX *e, const Evas_Point *center);
Eina_Bool e_efx_zoom_center_init(E_EFX *e, const Evas_Point *center);
Eina_Bool e_efx_move_center_init(E_EFX *e, const Evas_Point *center);
void e_efx_rotate_helper(E_EFX *e, Evas_Object *obj, Evas_Map *map, double degrees);
void e_efx_clip_setup(Evas_Object *obj, Evas_Object *clip);
void e_efx_fade_reclip(void *efd);
#define E_EFX_QUEUE_CHECK(X) do \
{ \
E_EFX *ee = (X)->e; \
evas_object_ref(ee->obj); \
if ((X)->cb) (X)->cb((X)->data, &(X)->e->map_data, (X)->e->obj); \
if (e_efx_queue_complete((X)->e, (X))) \
e_efx_queue_process(ee); \
evas_object_unref(ee->obj); \
} while (0)
Eina_Bool e_efx_queue_complete(E_EFX *e, void *effect_data);
void e_efx_queue_process(E_EFX *e);
static inline void
_size_debug(Evas_Object *obj)
{
Evas_Coord x, y, w, h;
evas_object_geometry_get(obj, &x, &y, &w, &h);
DBG("%s %p: x=%d,y=%d,w=%d,h=%d", evas_object_visible_get(obj) ? "vis" : "hid", obj, x, y, w, h);
}
static inline void
_color_debug(Evas_Object *obj)
{
Evas_Coord r, g, b, a;
evas_object_color_get(obj, &r, &g, &b, &a);
DBG("%d/%d/%d/%d", MIN(r, a), MIN(g, a), MIN(b, a), a);
}
#define HIT DBG("HIT")
#endif