forked from enlightenment/efl
Add CURRENT option which edje object moves from current position.
Currently, when the part in edc move by transition, it moves from the one of the states to another of the states even if it is ainimating. We need it to move from current position, because the animation is not natural and smooth. So I made the "CURRENT" option. SVN revision: 64675
This commit is contained in:
parent
a059403a8c
commit
6afeb6b150
|
@ -7121,7 +7121,7 @@ st_collections_group_programs_program_action(void)
|
||||||
@property
|
@property
|
||||||
transition
|
transition
|
||||||
@parameters
|
@parameters
|
||||||
[type] [length] [[interp val 1]] [[interp val 2]]
|
[type] [length] [[interp val 1]] [[interp val 2]] [[option]]
|
||||||
@effect
|
@effect
|
||||||
Defines how transitions occur using STATE_SET action.\n
|
Defines how transitions occur using STATE_SET action.\n
|
||||||
Where 'type' is the style of the transition and 'length' is a double
|
Where 'type' is the style of the transition and 'length' is a double
|
||||||
|
@ -7157,6 +7157,11 @@ st_collections_group_programs_program_action(void)
|
||||||
spring "swings" and val 1 specifies the decay, but it can exceed 1.0
|
spring "swings" and val 1 specifies the decay, but it can exceed 1.0
|
||||||
on the outer swings.
|
on the outer swings.
|
||||||
|
|
||||||
|
Valid option is CURRENT.
|
||||||
|
|
||||||
|
CURRENT is the option which the edje object moves from current position.
|
||||||
|
It can be used as the last parameter of the every type.
|
||||||
|
|
||||||
@endproperty
|
@endproperty
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
|
@ -7190,15 +7195,30 @@ st_collections_group_programs_program_transition(void)
|
||||||
"SPRING", EDJE_TWEEN_MODE_SPRING,
|
"SPRING", EDJE_TWEEN_MODE_SPRING,
|
||||||
NULL);
|
NULL);
|
||||||
current_program->tween.time = FROM_DOUBLE(parse_float_range(1, 0.0, 999999999.0));
|
current_program->tween.time = FROM_DOUBLE(parse_float_range(1, 0.0, 999999999.0));
|
||||||
|
if ((current_program->tween.mode >= EDJE_TWEEN_MODE_LINEAR) &&
|
||||||
|
(current_program->tween.mode <= EDJE_TWEEN_MODE_DECELERATE))
|
||||||
|
{
|
||||||
|
if ((get_arg_count() == 3) && (!strcmp(parse_str(2), "CURRENT")))
|
||||||
|
current_program->tween.mode |= EDJE_TWEEN_MODE_OPT_FROM_CURRENT;
|
||||||
|
else if (get_arg_count() != 2)
|
||||||
|
{
|
||||||
|
ERR("%s: Error. parse error %s:%i. "
|
||||||
|
"Need 2rd parameter to set time",
|
||||||
|
progname, file_in, line - 1);
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
// the following need v1
|
// the following need v1
|
||||||
// EDJE_TWEEN_MODE_ACCELERATE_FACTOR
|
// EDJE_TWEEN_MODE_ACCELERATE_FACTOR
|
||||||
// EDJE_TWEEN_MODE_DECELERATE_FACTOR
|
// EDJE_TWEEN_MODE_DECELERATE_FACTOR
|
||||||
// EDJE_TWEEN_MODE_SINUSOIDAL_FACTOR
|
// EDJE_TWEEN_MODE_SINUSOIDAL_FACTOR
|
||||||
// current_program->tween.v1
|
// current_program->tween.v1
|
||||||
if ((current_program->tween.mode >= EDJE_TWEEN_MODE_ACCELERATE_FACTOR) &&
|
else if ((current_program->tween.mode >= EDJE_TWEEN_MODE_ACCELERATE_FACTOR) &&
|
||||||
(current_program->tween.mode <= EDJE_TWEEN_MODE_SINUSOIDAL_FACTOR))
|
(current_program->tween.mode <= EDJE_TWEEN_MODE_SINUSOIDAL_FACTOR))
|
||||||
{
|
{
|
||||||
if (get_arg_count() != 3)
|
if ((get_arg_count() == 4) && (!strcmp(parse_str(3), "CURRENT")))
|
||||||
|
current_program->tween.mode |= EDJE_TWEEN_MODE_OPT_FROM_CURRENT;
|
||||||
|
else if (get_arg_count() != 3)
|
||||||
{
|
{
|
||||||
ERR("%s: Error. parse error %s:%i. "
|
ERR("%s: Error. parse error %s:%i. "
|
||||||
"Need 3rd parameter to set factor",
|
"Need 3rd parameter to set factor",
|
||||||
|
@ -7215,7 +7235,9 @@ st_collections_group_programs_program_transition(void)
|
||||||
else if ((current_program->tween.mode >= EDJE_TWEEN_MODE_DIVISOR_INTERP) &&
|
else if ((current_program->tween.mode >= EDJE_TWEEN_MODE_DIVISOR_INTERP) &&
|
||||||
(current_program->tween.mode <= EDJE_TWEEN_MODE_SPRING))
|
(current_program->tween.mode <= EDJE_TWEEN_MODE_SPRING))
|
||||||
{
|
{
|
||||||
if (get_arg_count() != 4)
|
if ((get_arg_count() == 5) && (!strcmp(parse_str(4), "CURRENT")))
|
||||||
|
current_program->tween.mode |= EDJE_TWEEN_MODE_OPT_FROM_CURRENT;
|
||||||
|
else if (get_arg_count() != 4)
|
||||||
{
|
{
|
||||||
ERR("%s: Error. parse error %s:%i. "
|
ERR("%s: Error. parse error %s:%i. "
|
||||||
"Need 3rd and 4th parameters to set factor and counts",
|
"Need 3rd and 4th parameters to set factor and counts",
|
||||||
|
|
|
@ -631,7 +631,9 @@ typedef enum _Edje_Tween_Mode
|
||||||
EDJE_TWEEN_MODE_DIVISOR_INTERP = 8,
|
EDJE_TWEEN_MODE_DIVISOR_INTERP = 8,
|
||||||
EDJE_TWEEN_MODE_BOUNCE = 9,
|
EDJE_TWEEN_MODE_BOUNCE = 9,
|
||||||
EDJE_TWEEN_MODE_SPRING = 10,
|
EDJE_TWEEN_MODE_SPRING = 10,
|
||||||
EDJE_TWEEN_MODE_LAST = 11
|
EDJE_TWEEN_MODE_LAST = 11,
|
||||||
|
EDJE_TWEEN_MODE_MASK = 0xff,
|
||||||
|
EDJE_TWEEN_MODE_OPT_FROM_CURRENT = (1 << 31)
|
||||||
} Edje_Tween_Mode;
|
} Edje_Tween_Mode;
|
||||||
|
|
||||||
typedef enum _Edje_Cursor
|
typedef enum _Edje_Cursor
|
||||||
|
|
|
@ -56,7 +56,7 @@ _edje_part_pos_set(Edje *ed, Edje_Real_Part *ep, int mode, FLOAT_T pos, FLOAT_T
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
switch (mode)
|
switch (mode & EDJE_TWEEN_MODE_MASK)
|
||||||
{
|
{
|
||||||
case EDJE_TWEEN_MODE_SINUSOIDAL:
|
case EDJE_TWEEN_MODE_SINUSOIDAL:
|
||||||
npos = FROM_DOUBLE(ecore_animator_pos_map(TO_DOUBLE(pos),
|
npos = FROM_DOUBLE(ecore_animator_pos_map(TO_DOUBLE(pos),
|
||||||
|
@ -2212,11 +2212,32 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ep->param2 && ep->description_pos != ZERO)
|
if (ep->param2)
|
||||||
{
|
{
|
||||||
int beginning_pos, part_type;
|
int beginning_pos, part_type;
|
||||||
Edje_Calc_Params *p2, *p3;
|
Edje_Calc_Params *p2, *p3;
|
||||||
|
|
||||||
|
if (ep->current)
|
||||||
|
{
|
||||||
|
p1->x = ep->current->x - ed->x;
|
||||||
|
p1->y = ep->current->y - ed->y;
|
||||||
|
p1->w = ep->current->w;
|
||||||
|
p1->h = ep->current->h;
|
||||||
|
p1->color.r = ep->current->color.r;
|
||||||
|
p1->color.g = ep->current->color.g;
|
||||||
|
p1->color.b = ep->current->color.b;
|
||||||
|
p1->color.a = ep->current->color.a;
|
||||||
|
p1->type.text.size = ep->current->type.text.size;
|
||||||
|
p1->type.text.color2.r = ep->current->type.text.color2.r;
|
||||||
|
p1->type.text.color2.g = ep->current->type.text.color2.g;
|
||||||
|
p1->type.text.color2.b = ep->current->type.text.color2.b;
|
||||||
|
p1->type.text.color2.a = ep->current->type.text.color2.a;
|
||||||
|
p1->type.text.color3.r = ep->current->type.text.color3.r;
|
||||||
|
p1->type.text.color3.g = ep->current->type.text.color3.g;
|
||||||
|
p1->type.text.color3.b = ep->current->type.text.color3.b;
|
||||||
|
p1->type.text.color3.a = ep->current->type.text.color3.a;
|
||||||
|
}
|
||||||
|
|
||||||
p3 = &lp3;
|
p3 = &lp3;
|
||||||
|
|
||||||
#ifndef EDJE_CALC_CACHE
|
#ifndef EDJE_CALC_CACHE
|
||||||
|
|
|
@ -1212,6 +1212,7 @@ struct _Edje_Real_Part
|
||||||
Edje_Real_Part_State param1; // 20
|
Edje_Real_Part_State param1; // 20
|
||||||
// WITH EDJE_CALC_CACHE: 140
|
// WITH EDJE_CALC_CACHE: 140
|
||||||
Edje_Real_Part_State *param2, *custom; // 8
|
Edje_Real_Part_State *param2, *custom; // 8
|
||||||
|
Edje_Calc_Params *current; // 4
|
||||||
|
|
||||||
#ifdef EDJE_CALC_CACHE
|
#ifdef EDJE_CALC_CACHE
|
||||||
int state; // 4
|
int state; // 4
|
||||||
|
@ -1230,8 +1231,8 @@ struct _Edje_Real_Part
|
||||||
#ifdef EDJE_CALC_CACHE
|
#ifdef EDJE_CALC_CACHE
|
||||||
unsigned char invalidate : 1; // 0
|
unsigned char invalidate : 1; // 0
|
||||||
#endif
|
#endif
|
||||||
}; // 260
|
}; // 264
|
||||||
// WITH EDJE_CALC_CACHE: 400
|
// WITH EDJE_CALC_CACHE: 404
|
||||||
|
|
||||||
struct _Edje_Running_Program
|
struct _Edje_Running_Program
|
||||||
{
|
{
|
||||||
|
|
|
@ -478,6 +478,35 @@ _edje_program_run(Edje *ed, Edje_Program *pr, Eina_Bool force, const char *ssig,
|
||||||
rp = ed->table_parts[pt->id % ed->table_parts_size];
|
rp = ed->table_parts[pt->id % ed->table_parts_size];
|
||||||
if (rp)
|
if (rp)
|
||||||
{
|
{
|
||||||
|
if ((rp->object) && (pr->tween.mode & EDJE_TWEEN_MODE_OPT_FROM_CURRENT))
|
||||||
|
{
|
||||||
|
rp->current = calloc(1, sizeof(Edje_Calc_Params));
|
||||||
|
evas_object_geometry_get(rp->object, &(rp->current->x),
|
||||||
|
&(rp->current->y),
|
||||||
|
&(rp->current->w),
|
||||||
|
&(rp->current->h));
|
||||||
|
evas_object_color_get(rp->object, (int *)&(rp->current->color.r),
|
||||||
|
(int *)&(rp->current->color.g),
|
||||||
|
(int *)&(rp->current->color.b),
|
||||||
|
(int *)&(rp->current->color.a));
|
||||||
|
evas_object_text_font_get(rp->object, NULL, &(rp->current->type.text.size));
|
||||||
|
evas_object_text_outline_color_get(rp->object,
|
||||||
|
(int *)&(rp->current->type.text.color2.r),
|
||||||
|
(int *)&(rp->current->type.text.color2.g),
|
||||||
|
(int *)&(rp->current->type.text.color2.b),
|
||||||
|
(int *)&(rp->current->type.text.color2.a));
|
||||||
|
evas_object_text_shadow_color_get(rp->object,
|
||||||
|
(int *)&(rp->current->type.text.color3.r),
|
||||||
|
(int *)&(rp->current->type.text.color3.g),
|
||||||
|
(int *)&(rp->current->type.text.color3.b),
|
||||||
|
(int *)&(rp->current->type.text.color3.a));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (rp->current) free(rp->current);
|
||||||
|
rp->current = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (rp->program)
|
if (rp->program)
|
||||||
_edje_program_end(ed, rp->program);
|
_edje_program_end(ed, rp->program);
|
||||||
_edje_part_description_apply(ed, rp,
|
_edje_part_description_apply(ed, rp,
|
||||||
|
|
Loading…
Reference in New Issue