@property
transition
@parameters
- [type] [length] [[interp val 1]] [[interp val 2]]
+ [type] [length] [[interp val 1]] [[interp val 2]] [[option]]
@effect
Defines how transitions occur using STATE_SET action.\n
Where 'type' is the style of the transition and 'length' is a double
spring "swings" and val 1 specifies the decay, but it can exceed 1.0
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
*/
static void
"SPRING", EDJE_TWEEN_MODE_SPRING,
NULL);
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
// EDJE_TWEEN_MODE_ACCELERATE_FACTOR
// EDJE_TWEEN_MODE_DECELERATE_FACTOR
// EDJE_TWEEN_MODE_SINUSOIDAL_FACTOR
// 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))
{
- 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. "
"Need 3rd parameter to set factor",
else if ((current_program->tween.mode >= EDJE_TWEEN_MODE_DIVISOR_INTERP) &&
(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. "
"Need 3rd and 4th parameters to set factor and counts",
EDJE_TWEEN_MODE_DIVISOR_INTERP = 8,
EDJE_TWEEN_MODE_BOUNCE = 9,
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;
typedef enum _Edje_Cursor
break;
}
#else
- switch (mode)
+ switch (mode & EDJE_TWEEN_MODE_MASK)
{
case EDJE_TWEEN_MODE_SINUSOIDAL:
npos = FROM_DOUBLE(ecore_animator_pos_map(TO_DOUBLE(pos),
#endif
}
}
- if (ep->param2 && ep->description_pos != ZERO)
+ if (ep->param2)
{
int beginning_pos, part_type;
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;
#ifndef EDJE_CALC_CACHE
Edje_Real_Part_State param1; // 20
// WITH EDJE_CALC_CACHE: 140
Edje_Real_Part_State *param2, *custom; // 8
+ Edje_Calc_Params *current; // 4
#ifdef EDJE_CALC_CACHE
int state; // 4
#ifdef EDJE_CALC_CACHE
unsigned char invalidate : 1; // 0
#endif
-}; // 260
-// WITH EDJE_CALC_CACHE: 400
+}; // 264
+// WITH EDJE_CALC_CACHE: 404
struct _Edje_Running_Program
{
rp = ed->table_parts[pt->id % ed->table_parts_size];
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)
_edje_program_end(ed, rp->program);
_edje_part_description_apply(ed, rp,