Add macro to do magic check on elm_animator EAPI funcs

By: 박춘언 <hermet@naver.com>


SVN revision: 54588
This commit is contained in:
Bruno Dilly 2010-11-16 13:07:25 +00:00
parent 7debb66407
commit 7d64614307
1 changed files with 39 additions and 21 deletions

View File

@ -1,17 +1,36 @@
#include <Elementary.h>
#include "elm_priv.h"
#define ELM_ANIMATOR_CHECK_OR_RETURN(animator, ...) \
do { \
if (!animator) { \
CRITICAL("Elm_Animator " # animator " is NULL!"); \
return __VA_ARGS__; \
} \
if (!EINA_MAGIC_CHECK(animator, ELM_ANIMATOR_MAGIC)) { \
EINA_MAGIC_FAIL(animator, ELM_ANIMATOR_MAGIC); \
return __VA_ARGS__; \
} \
} while (0)
/**
* @addtogroup Animator Animator
* @ingroup Elementary
*
* Support normalized frame value for animation.
*/
#define MAGIC_OBJ_ANIMATOR 0x40777770
* elm_animator is designed to provides animation frame.
* It is somewhat different with any others widgets however elm_animator
* might useful when your GUIs have animation.
* Basically, it computes normalized frame value for animation,
* provides additional functions to adjust this also.
*
*/
struct _Elm_Animator
{
int magic;
#define ELM_ANIMATOR_MAGIC 0x40777770
EINA_MAGIC;
Evas_Object *parent;
Ecore_Animator *animator;
double begin_time;
@ -139,7 +158,7 @@ _animator_parent_del(void *data, Evas *evas __UNUSED__,
EAPI Eina_Bool
elm_animator_auto_reverse_get(const Elm_Animator *animator)
{
if ((!animator) || (animator->magic != MAGIC_OBJ_ANIMATOR)) return EINA_FALSE;
ELM_ANIMATOR_CHECK_OR_RETURN(animator, EINA_FALSE);
return animator->auto_reverse;
}
@ -154,7 +173,7 @@ elm_animator_auto_reverse_get(const Elm_Animator *animator)
EAPI unsigned int
elm_animator_repeat_get(const Elm_Animator *animator)
{
if ((!animator) || (animator->magic != MAGIC_OBJ_ANIMATOR)) return 0;
ELM_ANIMATOR_CHECK_OR_RETURN(animator, 0);
return animator->repeat_cnt;
}
@ -169,7 +188,7 @@ elm_animator_repeat_get(const Elm_Animator *animator)
EAPI void
elm_animator_auto_reverse_set(Elm_Animator *animator, Eina_Bool reverse)
{
if ((!animator) || (animator->magic != MAGIC_OBJ_ANIMATOR)) return;
ELM_ANIMATOR_CHECK_OR_RETURN(animator);
if (animator->auto_reverse == reverse) return;
animator->auto_reverse = reverse;
if (reverse)
@ -192,7 +211,7 @@ EAPI void
elm_animator_curve_style_set(Elm_Animator *animator,
Elm_Animator_Curve_Style cs)
{
if ((!animator) || (animator->magic != MAGIC_OBJ_ANIMATOR)) return;
ELM_ANIMATOR_CHECK_OR_RETURN(animator);
switch (cs)
{
case ELM_ANIMATOR_CURVE_LINEAR:
@ -224,7 +243,7 @@ elm_animator_curve_style_set(Elm_Animator *animator,
EAPI void
elm_animator_duration_set(Elm_Animator *animator, double duration)
{
if ((!animator) || (animator->magic != MAGIC_OBJ_ANIMATOR)) return;
ELM_ANIMATOR_CHECK_OR_RETURN(animator);
if (animator->on_animating) return;
animator->duration = duration;
}
@ -244,7 +263,7 @@ elm_animator_operation_callback_set(Elm_Animator *animator,
Elm_Animator_Operation_Cb func,
void *data)
{
if ((!animator) || (animator->magic != MAGIC_OBJ_ANIMATOR)) return;
ELM_ANIMATOR_CHECK_OR_RETURN(animator);
if (animator->on_animating) return;
animator->animator_op = func;
animator->animator_arg = data;
@ -263,14 +282,13 @@ elm_animator_add(Evas_Object *parent)
{
Elm_Animator *animator = ELM_NEW(Elm_Animator);
if (!animator) return NULL;
EINA_MAGIC_SET(animator, ELM_ANIMATOR_MAGIC);
animator->parent = parent;
animator->magic = MAGIC_OBJ_ANIMATOR;
elm_animator_auto_reverse_set(animator, EINA_FALSE);
elm_animator_curve_style_set(animator, ELM_ANIMATOR_CURVE_LINEAR);
if (parent)
evas_object_event_callback_add(parent, EVAS_CALLBACK_DEL,
_animator_parent_del, animator);
return animator;
}
@ -285,7 +303,7 @@ elm_animator_add(Evas_Object *parent)
EAPI Eina_Bool
elm_animator_operating_get(const Elm_Animator *animator)
{
if ((!animator) || (animator->magic != MAGIC_OBJ_ANIMATOR)) return EINA_FALSE;
ELM_ANIMATOR_CHECK_OR_RETURN(animator, EINA_FALSE);
return animator->on_animating;
}
@ -299,13 +317,13 @@ elm_animator_operating_get(const Elm_Animator *animator)
EAPI void
elm_animator_del(Elm_Animator *animator)
{
if ((!animator) || (animator->magic != MAGIC_OBJ_ANIMATOR)) return;
ELM_ANIMATOR_CHECK_OR_RETURN(animator);
_delete_animator(animator);
if (animator->parent)
evas_object_event_callback_del(animator->parent, EVAS_CALLBACK_DEL,
_animator_parent_del);
memset(animator, 0x0, sizeof(Elm_Animator));
EINA_MAGIC_SET(animator, EINA_MAGIC_NONE);
free(animator);
}
@ -323,7 +341,7 @@ elm_animator_completion_callback_set(Elm_Animator *animator,
Elm_Animator_Completion_Cb func,
void *data)
{
if (!animator || (animator->magic != MAGIC_OBJ_ANIMATOR)) return;
ELM_ANIMATOR_CHECK_OR_RETURN(animator);
if (animator->on_animating) return;
animator->completion_op = func;
animator->completion_arg = data;
@ -339,7 +357,7 @@ elm_animator_completion_callback_set(Elm_Animator *animator,
EAPI void
elm_animator_pause(Elm_Animator *animator)
{
if ((!animator) || (animator->magic != MAGIC_OBJ_ANIMATOR)) return;
ELM_ANIMATOR_CHECK_OR_RETURN(animator);
if (!animator->on_animating) return;
ecore_animator_freeze(animator->animator);
}
@ -354,7 +372,7 @@ elm_animator_pause(Elm_Animator *animator)
EAPI void
elm_animator_resume(Elm_Animator *animator)
{
if ((!animator) || (animator->magic != MAGIC_OBJ_ANIMATOR)) return;
ELM_ANIMATOR_CHECK_OR_RETURN(animator);
if (!animator->on_animating) return;
ecore_animator_thaw(animator->animator);
}
@ -369,7 +387,7 @@ elm_animator_resume(Elm_Animator *animator)
EAPI void
elm_animator_stop(Elm_Animator *animator)
{
if ((!animator) || (animator->magic != MAGIC_OBJ_ANIMATOR)) return;
ELM_ANIMATOR_CHECK_OR_RETURN(animator);
animator->on_animating = EINA_FALSE;
_delete_animator(animator);
}
@ -385,7 +403,7 @@ elm_animator_stop(Elm_Animator *animator)
EAPI void
elm_animator_repeat_set(Elm_Animator *animator, unsigned int repeat_cnt)
{
if ((!animator) || (animator->magic != MAGIC_OBJ_ANIMATOR)) return;
ELM_ANIMATOR_CHECK_OR_RETURN(animator);
if (!animator->auto_reverse) animator->repeat_cnt = repeat_cnt;
else
animator->repeat_cnt = _animator_compute_reverse_repeat_count(repeat_cnt);
@ -401,7 +419,7 @@ elm_animator_repeat_set(Elm_Animator *animator, unsigned int repeat_cnt)
EAPI void
elm_animator_animate(Elm_Animator *animator)
{
if ((!animator) || (animator->magic != MAGIC_OBJ_ANIMATOR)) return;
ELM_ANIMATOR_CHECK_OR_RETURN(animator);
if (!animator->animator_op) return;
animator->begin_time = ecore_loop_time_get();
animator->cur_repeat_cnt = animator->repeat_cnt;