forked from enlightenment/efl
use the ecore pos map call for edje as opposed to do it yourself. this
also opens up new position mappings like factored accel/decel/sin, divis, bounce and spring! :) documentation provided. SVN revision: 59449
This commit is contained in:
parent
1594c4d07e
commit
87ec659bc6
|
@ -90,3 +90,10 @@
|
||||||
text to the end of the textblock part. This lets us do cool thing
|
text to the end of the textblock part. This lets us do cool thing
|
||||||
like population of textblock using idler.
|
like population of textblock using idler.
|
||||||
|
|
||||||
|
2011-05-16 Carsten Haitzler (The Rasterman)
|
||||||
|
|
||||||
|
* Add new interpolation modes for programs to make animation
|
||||||
|
much easier. Added: ACCEL_FAC, DECEL_FAC, SIN_FAC, DIVIS,
|
||||||
|
BOUNCE, SPRING (also made short name versions of the long ones
|
||||||
|
possible too).
|
||||||
|
|
||||||
|
|
|
@ -7187,26 +7187,110 @@ st_collections_group_programs_program_action(void)
|
||||||
@property
|
@property
|
||||||
transition
|
transition
|
||||||
@parameters
|
@parameters
|
||||||
[type] [length]
|
[type] [length] [[interp val 1]] [[interp val 2]]
|
||||||
@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
|
||||||
specifying the number of seconds in which to preform the transition.\n
|
specifying the number of seconds in which to preform the transition.\n
|
||||||
Valid types are: LINEAR, SINUSOIDAL, ACCELERATE, and DECELERATE.
|
Valid types are: LIN or LINEAR, SIN or SINUSOIDAL,
|
||||||
|
ACCEL or ACCELERATE, DECEL or DECELERATE,
|
||||||
|
ACCEL_FAC or ACCELERATE_FACTOR, DECEL_FAC or DECELERATE_FACTOR,
|
||||||
|
SIN_FAC or SINUSOIDAL_FACTOR, DIVIS or DIVISOR_INTERP,
|
||||||
|
BOUNCE, SPRING.
|
||||||
|
|
||||||
|
ACCEL_FAC, DECEL_FAC and SIN_FAC need the extra optional
|
||||||
|
"interp val 1" to determine the "factor" of curviness. 1.0 is the same
|
||||||
|
as their non-factor counterparts, where 0.0 is equal to linear.
|
||||||
|
numbers higher than one make the curve angles steeper with a more
|
||||||
|
prnounced curve point.
|
||||||
|
|
||||||
|
DIVIS, BOUNCE and SPRING also require "interp val 2" in addition
|
||||||
|
to "interp val 1".
|
||||||
|
|
||||||
|
DIVIS uses val 1 as the initial graident start
|
||||||
|
(0.0 is horizontal, 1.0 is diagonal (linear), 2.0 is twice the
|
||||||
|
gradient of linear etc.). val 2 is interpreted as an integer factor
|
||||||
|
defining how much the value swings "outside" the gradient only to come
|
||||||
|
back to the final resting spot at the end. 0.0 for val 2 is equivalent
|
||||||
|
to linear interpolation. Note that DIVIS can exceed 1.0
|
||||||
|
|
||||||
|
BOUNCE uses val 2 as the number of bounces (so its rounded down to
|
||||||
|
the nearest integer value), with val 2 determining how much the
|
||||||
|
bounce decays, with 0.0 giving linear decay per bounce, and higher
|
||||||
|
values giving much more decay.
|
||||||
|
|
||||||
|
SPRING is similar to bounce, where val 2 specifies the number of
|
||||||
|
spring "swings" and val 1 specifies the decay, but it can exceed 1.0
|
||||||
|
on the outer swings.
|
||||||
|
|
||||||
@endproperty
|
@endproperty
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
st_collections_group_programs_program_transition(void)
|
st_collections_group_programs_program_transition(void)
|
||||||
{
|
{
|
||||||
check_arg_count(2);
|
check_min_arg_count(2);
|
||||||
|
|
||||||
current_program->tween.mode = parse_enum(0,
|
current_program->tween.mode = parse_enum(0,
|
||||||
|
// short names
|
||||||
|
"LIN", EDJE_TWEEN_MODE_LINEAR,
|
||||||
|
"SIN", EDJE_TWEEN_MODE_SINUSOIDAL,
|
||||||
|
"ACCEL", EDJE_TWEEN_MODE_ACCELERATE,
|
||||||
|
"DECEL", EDJE_TWEEN_MODE_DECELERATE,
|
||||||
|
"ACCEL_FAC", EDJE_TWEEN_MODE_ACCELERATE_FACTOR,
|
||||||
|
"DECEL_FAC", EDJE_TWEEN_MODE_DECELERATE_FACTOR,
|
||||||
|
"SIN_FAC", EDJE_TWEEN_MODE_SINUSOIDAL_FACTOR,
|
||||||
|
"DIVIS", EDJE_TWEEN_MODE_DIVISOR_INTERP,
|
||||||
|
|
||||||
|
// long/full names
|
||||||
"LINEAR", EDJE_TWEEN_MODE_LINEAR,
|
"LINEAR", EDJE_TWEEN_MODE_LINEAR,
|
||||||
"SINUSOIDAL", EDJE_TWEEN_MODE_SINUSOIDAL,
|
"SINUSOIDAL", EDJE_TWEEN_MODE_SINUSOIDAL,
|
||||||
"ACCELERATE", EDJE_TWEEN_MODE_ACCELERATE,
|
"ACCELERATE", EDJE_TWEEN_MODE_ACCELERATE,
|
||||||
"DECELERATE", EDJE_TWEEN_MODE_DECELERATE,
|
"DECELERATE", EDJE_TWEEN_MODE_DECELERATE,
|
||||||
|
"ACCELERATE_FACTOR", EDJE_TWEEN_MODE_ACCELERATE_FACTOR,
|
||||||
|
"DECELERATE_FACTOR", EDJE_TWEEN_MODE_DECELERATE_FACTOR,
|
||||||
|
"SINUSOIDAL_FACTOR", EDJE_TWEEN_MODE_SINUSOIDAL_FACTOR,
|
||||||
|
"DIVISOR_INTERP", EDJE_TWEEN_MODE_DIVISOR_INTERP,
|
||||||
|
|
||||||
|
// long/full is short enough
|
||||||
|
"BOUNCE", EDJE_TWEEN_MODE_BOUNCE,
|
||||||
|
"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));
|
||||||
|
// 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) &&
|
||||||
|
(current_program->tween.mode <= EDJE_TWEEN_MODE_SINUSOIDAL_FACTOR))
|
||||||
|
{
|
||||||
|
if (get_arg_count() != 3)
|
||||||
|
{
|
||||||
|
ERR("%s: Error. parse error %s:%i. "
|
||||||
|
"Need 3rd parameter to set factor",
|
||||||
|
progname, file_in, line - 1);
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
current_program->tween.v1 = FROM_DOUBLE(parse_float_range(2, 0.0, 999999999.0));
|
||||||
|
}
|
||||||
|
// the followjng also need v2
|
||||||
|
// EDJE_TWEEN_MODE_DIVISOR_INTERP
|
||||||
|
// EDJE_TWEEN_MODE_BOUNCE
|
||||||
|
// EDJE_TWEEN_MODE_SPRING
|
||||||
|
// current_program->tween.v2
|
||||||
|
else if ((current_program->tween.mode >= EDJE_TWEEN_MODE_DIVISOR_INTERP) &&
|
||||||
|
(current_program->tween.mode <= EDJE_TWEEN_MODE_SPRING))
|
||||||
|
{
|
||||||
|
if (get_arg_count() != 4)
|
||||||
|
{
|
||||||
|
ERR("%s: Error. parse error %s:%i. "
|
||||||
|
"Need 3rd and 4th parameters to set factor and counts",
|
||||||
|
progname, file_in, line - 1);
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
current_program->tween.v1 = FROM_DOUBLE(parse_float_range(2, 0.0, 999999999.0));
|
||||||
|
current_program->tween.v2 = FROM_DOUBLE(parse_float_range(3, 0.0, 999999999.0));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -683,12 +683,18 @@ typedef enum _Edje_Action_Type
|
||||||
|
|
||||||
typedef enum _Edje_Tween_Mode
|
typedef enum _Edje_Tween_Mode
|
||||||
{
|
{
|
||||||
EDJE_TWEEN_MODE_NONE = 0,
|
EDJE_TWEEN_MODE_NONE = 0,
|
||||||
EDJE_TWEEN_MODE_LINEAR = 1,
|
EDJE_TWEEN_MODE_LINEAR = 1,
|
||||||
EDJE_TWEEN_MODE_SINUSOIDAL = 2,
|
EDJE_TWEEN_MODE_SINUSOIDAL = 2,
|
||||||
EDJE_TWEEN_MODE_ACCELERATE = 3,
|
EDJE_TWEEN_MODE_ACCELERATE = 3,
|
||||||
EDJE_TWEEN_MODE_DECELERATE = 4,
|
EDJE_TWEEN_MODE_DECELERATE = 4,
|
||||||
EDJE_TWEEN_MODE_LAST = 5
|
EDJE_TWEEN_MODE_ACCELERATE_FACTOR = 5,
|
||||||
|
EDJE_TWEEN_MODE_DECELERATE_FACTOR = 6,
|
||||||
|
EDJE_TWEEN_MODE_SINUSOIDAL_FACTOR = 7,
|
||||||
|
EDJE_TWEEN_MODE_DIVISOR_INTERP = 8,
|
||||||
|
EDJE_TWEEN_MODE_BOUNCE = 9,
|
||||||
|
EDJE_TWEEN_MODE_SPRING = 10,
|
||||||
|
EDJE_TWEEN_MODE_LAST = 11
|
||||||
} Edje_Tween_Mode;
|
} Edje_Tween_Mode;
|
||||||
|
|
||||||
typedef enum _Edje_Cursor
|
typedef enum _Edje_Cursor
|
||||||
|
|
|
@ -16,7 +16,7 @@ static void _edje_part_recalc_single(Edje *ed, Edje_Real_Part *ep,
|
||||||
static void _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags);
|
static void _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags);
|
||||||
|
|
||||||
void
|
void
|
||||||
_edje_part_pos_set(Edje *ed, Edje_Real_Part *ep, int mode, FLOAT_T pos)
|
_edje_part_pos_set(Edje *ed, Edje_Real_Part *ep, int mode, FLOAT_T pos, FLOAT_T v1, FLOAT_T v2)
|
||||||
{
|
{
|
||||||
FLOAT_T fp_pos;
|
FLOAT_T fp_pos;
|
||||||
FLOAT_T npos;
|
FLOAT_T npos;
|
||||||
|
@ -26,6 +26,7 @@ _edje_part_pos_set(Edje *ed, Edje_Real_Part *ep, int mode, FLOAT_T pos)
|
||||||
fp_pos = pos;
|
fp_pos = pos;
|
||||||
|
|
||||||
npos = ZERO;
|
npos = ZERO;
|
||||||
|
#if 0 // old code - easy to enable for comparing float vs fixed point
|
||||||
/* take linear pos along timescale and use interpolation method */
|
/* take linear pos along timescale and use interpolation method */
|
||||||
switch (mode)
|
switch (mode)
|
||||||
{
|
{
|
||||||
|
@ -51,8 +52,69 @@ _edje_part_pos_set(Edje *ed, Edje_Real_Part *ep, int mode, FLOAT_T pos)
|
||||||
npos = fp_pos;
|
npos = fp_pos;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
npos = fp_pos;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
switch (mode)
|
||||||
|
{
|
||||||
|
case EDJE_TWEEN_MODE_SINUSOIDAL:
|
||||||
|
npos = FROM_DOUBLE(ecore_animator_pos_map(TO_DOUBLE(pos),
|
||||||
|
ECORE_POS_MAP_SINUSOIDAL,
|
||||||
|
0.0, 0.0));
|
||||||
|
break;
|
||||||
|
case EDJE_TWEEN_MODE_ACCELERATE:
|
||||||
|
npos = FROM_DOUBLE(ecore_animator_pos_map(TO_DOUBLE(pos),
|
||||||
|
ECORE_POS_MAP_ACCELERATE,
|
||||||
|
0.0, 0.0));
|
||||||
|
break;
|
||||||
|
case EDJE_TWEEN_MODE_DECELERATE:
|
||||||
|
npos = FROM_DOUBLE(ecore_animator_pos_map(TO_DOUBLE(pos),
|
||||||
|
ECORE_POS_MAP_DECELERATE,
|
||||||
|
0.0, 0.0));
|
||||||
|
break;
|
||||||
|
case EDJE_TWEEN_MODE_LINEAR:
|
||||||
|
npos = fp_pos;
|
||||||
|
/* npos = FROM_DOUBLE(ecore_animator_pos_map(TO_DOUBLE(pos),
|
||||||
|
ECORE_POS_MAP_LINEAR,
|
||||||
|
0.0, 0.0));
|
||||||
|
*/
|
||||||
|
break;
|
||||||
|
case EDJE_TWEEN_MODE_ACCELERATE_FACTOR:
|
||||||
|
npos = FROM_DOUBLE(ecore_animator_pos_map(TO_DOUBLE(pos),
|
||||||
|
ECORE_POS_MAP_ACCELERATE_FACTOR,
|
||||||
|
TO_DOUBLE(v1), 0.0));
|
||||||
|
break;
|
||||||
|
case EDJE_TWEEN_MODE_DECELERATE_FACTOR:
|
||||||
|
npos = FROM_DOUBLE(ecore_animator_pos_map(TO_DOUBLE(pos),
|
||||||
|
ECORE_POS_MAP_DECELERATE_FACTOR,
|
||||||
|
TO_DOUBLE(v1), 0.0));
|
||||||
|
break;
|
||||||
|
case EDJE_TWEEN_MODE_SINUSOIDAL_FACTOR:
|
||||||
|
npos = FROM_DOUBLE(ecore_animator_pos_map(TO_DOUBLE(pos),
|
||||||
|
ECORE_POS_MAP_SINUSOIDAL_FACTOR,
|
||||||
|
TO_DOUBLE(v1), 0.0));
|
||||||
|
break;
|
||||||
|
case EDJE_TWEEN_MODE_DIVISOR_INTERP:
|
||||||
|
npos = FROM_DOUBLE(ecore_animator_pos_map(TO_DOUBLE(pos),
|
||||||
|
ECORE_POS_MAP_DIVISOR_INTERP,
|
||||||
|
TO_DOUBLE(v1), TO_DOUBLE(v2)));
|
||||||
|
break;
|
||||||
|
case EDJE_TWEEN_MODE_BOUNCE:
|
||||||
|
npos = FROM_DOUBLE(ecore_animator_pos_map(TO_DOUBLE(pos),
|
||||||
|
ECORE_POS_MAP_BOUNCE,
|
||||||
|
TO_DOUBLE(v1), TO_DOUBLE(v2)));
|
||||||
|
break;
|
||||||
|
case EDJE_TWEEN_MODE_SPRING:
|
||||||
|
npos = FROM_DOUBLE(ecore_animator_pos_map(TO_DOUBLE(pos),
|
||||||
|
ECORE_POS_MAP_SPRING,
|
||||||
|
TO_DOUBLE(v1), TO_DOUBLE(v2)));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
npos = fp_pos;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
if (npos == ep->description_pos) return;
|
if (npos == ep->description_pos) return;
|
||||||
|
|
||||||
ep->description_pos = npos;
|
ep->description_pos = npos;
|
||||||
|
@ -1859,7 +1921,7 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags)
|
||||||
Edje_Calc_Params *p1, *pf;
|
Edje_Calc_Params *p1, *pf;
|
||||||
Edje_Part_Description_Common *chosen_desc;
|
Edje_Part_Description_Common *chosen_desc;
|
||||||
Edje_Real_Part *confine_to = NULL;
|
Edje_Real_Part *confine_to = NULL;
|
||||||
FLOAT_T pos = ZERO;
|
FLOAT_T pos = ZERO, pos2;
|
||||||
Edje_Calc_Params lp3;
|
Edje_Calc_Params lp3;
|
||||||
|
|
||||||
/* GRADIENT ARE GONE, WE MUST IGNORE IT FROM OLD FILE. */
|
/* GRADIENT ARE GONE, WE MUST IGNORE IT FROM OLD FILE. */
|
||||||
|
@ -2058,6 +2120,9 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags)
|
||||||
}
|
}
|
||||||
|
|
||||||
pos = ep->description_pos;
|
pos = ep->description_pos;
|
||||||
|
pos2 = pos;
|
||||||
|
if (pos2 < ZERO) pos2 = ZERO;
|
||||||
|
else if (pos2 > FROM_INT(1)) pos2 = FROM_INT(1);
|
||||||
beginning_pos = (pos < FROM_DOUBLE(0.5));
|
beginning_pos = (pos < FROM_DOUBLE(0.5));
|
||||||
part_type = ep->part->type;
|
part_type = ep->part->type;
|
||||||
|
|
||||||
|
@ -2106,10 +2171,10 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags)
|
||||||
p3->req_drag.h = INTP(p1->req_drag.h, p2->req_drag.h, pos);
|
p3->req_drag.h = INTP(p1->req_drag.h, p2->req_drag.h, pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
p3->color.r = INTP(p1->color.r, p2->color.r, pos);
|
p3->color.r = INTP(p1->color.r, p2->color.r, pos2);
|
||||||
p3->color.g = INTP(p1->color.g, p2->color.g, pos);
|
p3->color.g = INTP(p1->color.g, p2->color.g, pos2);
|
||||||
p3->color.b = INTP(p1->color.b, p2->color.b, pos);
|
p3->color.b = INTP(p1->color.b, p2->color.b, pos2);
|
||||||
p3->color.a = INTP(p1->color.a, p2->color.a, pos);
|
p3->color.a = INTP(p1->color.a, p2->color.a, pos2);
|
||||||
|
|
||||||
switch (part_type)
|
switch (part_type)
|
||||||
{
|
{
|
||||||
|
@ -2127,19 +2192,19 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags)
|
||||||
case EDJE_PART_TYPE_TEXT:
|
case EDJE_PART_TYPE_TEXT:
|
||||||
p3->type.text.size = INTP(p1->type.text.size, p2->type.text.size, pos);
|
p3->type.text.size = INTP(p1->type.text.size, p2->type.text.size, pos);
|
||||||
case EDJE_PART_TYPE_TEXTBLOCK:
|
case EDJE_PART_TYPE_TEXTBLOCK:
|
||||||
p3->type.text.color2.r = INTP(p1->type.text.color2.r, p2->type.text.color2.r, pos);
|
p3->type.text.color2.r = INTP(p1->type.text.color2.r, p2->type.text.color2.r, pos2);
|
||||||
p3->type.text.color2.g = INTP(p1->type.text.color2.g, p2->type.text.color2.g, pos);
|
p3->type.text.color2.g = INTP(p1->type.text.color2.g, p2->type.text.color2.g, pos2);
|
||||||
p3->type.text.color2.b = INTP(p1->type.text.color2.b, p2->type.text.color2.b, pos);
|
p3->type.text.color2.b = INTP(p1->type.text.color2.b, p2->type.text.color2.b, pos2);
|
||||||
p3->type.text.color2.a = INTP(p1->type.text.color2.a, p2->type.text.color2.a, pos);
|
p3->type.text.color2.a = INTP(p1->type.text.color2.a, p2->type.text.color2.a, pos2);
|
||||||
|
|
||||||
p3->type.text.color3.r = INTP(p1->type.text.color3.r, p2->type.text.color3.r, pos);
|
p3->type.text.color3.r = INTP(p1->type.text.color3.r, p2->type.text.color3.r, pos2);
|
||||||
p3->type.text.color3.g = INTP(p1->type.text.color3.g, p2->type.text.color3.g, pos);
|
p3->type.text.color3.g = INTP(p1->type.text.color3.g, p2->type.text.color3.g, pos2);
|
||||||
p3->type.text.color3.b = INTP(p1->type.text.color3.b, p2->type.text.color3.b, pos);
|
p3->type.text.color3.b = INTP(p1->type.text.color3.b, p2->type.text.color3.b, pos2);
|
||||||
p3->type.text.color3.a = INTP(p1->type.text.color3.a, p2->type.text.color3.a, pos);
|
p3->type.text.color3.a = INTP(p1->type.text.color3.a, p2->type.text.color3.a, pos2);
|
||||||
|
|
||||||
p3->type.text.align.x = FFP(p1->type.text.align.x, p2->type.text.align.x, pos);
|
p3->type.text.align.x = FFP(p1->type.text.align.x, p2->type.text.align.x, pos);
|
||||||
p3->type.text.align.y = FFP(p1->type.text.align.y, p2->type.text.align.y, pos);
|
p3->type.text.align.y = FFP(p1->type.text.align.y, p2->type.text.align.y, pos);
|
||||||
p3->type.text.elipsis = TO_DOUBLE(FINTP(p1->type.text.elipsis, p2->type.text.elipsis, pos));
|
p3->type.text.elipsis = TO_DOUBLE(FINTP(p1->type.text.elipsis, p2->type.text.elipsis, pos2));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2277,6 +2342,9 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags)
|
||||||
desc2 = NULL;
|
desc2 = NULL;
|
||||||
if (ep->param2) desc2 = ep->param2->description;
|
if (ep->param2) desc2 = ep->param2->description;
|
||||||
pos = ep->description_pos;
|
pos = ep->description_pos;
|
||||||
|
pos2 = pos;
|
||||||
|
if (pos2 < ZERO) pos2 = ZERO;
|
||||||
|
else if (pos2 > FROM_INT(1)) pos2 = FROM_INT(1);
|
||||||
|
|
||||||
ed->have_mapped_part = 1;
|
ed->have_mapped_part = 1;
|
||||||
// create map and populate with part geometry
|
// create map and populate with part geometry
|
||||||
|
@ -2387,7 +2455,7 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags)
|
||||||
if (ep2)
|
if (ep2)
|
||||||
{
|
{
|
||||||
Edje_Part_Description_Common *ep2desc1, *ep2desc2;
|
Edje_Part_Description_Common *ep2desc1, *ep2desc2;
|
||||||
FLOAT_T ep2pos;
|
FLOAT_T ep2pos, ep2pos2;
|
||||||
|
|
||||||
do1 = 1;
|
do1 = 1;
|
||||||
if (!ep2->calculated)
|
if (!ep2->calculated)
|
||||||
|
@ -2396,6 +2464,9 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags)
|
||||||
ep2desc2 = NULL;
|
ep2desc2 = NULL;
|
||||||
if (ep2->param2) ep2desc2 = ep2->param2->description;
|
if (ep2->param2) ep2desc2 = ep2->param2->description;
|
||||||
ep2pos = ep2->description_pos;
|
ep2pos = ep2->description_pos;
|
||||||
|
ep2pos2 = ep2pos;
|
||||||
|
if (ep2pos2 < ZERO) ep2pos2 = ZERO;
|
||||||
|
else if (ep2pos2 > FROM_INT(1)) ep2pos2 = FROM_INT(1);
|
||||||
|
|
||||||
// light x and y are already interpolated in part geom
|
// light x and y are already interpolated in part geom
|
||||||
lx1 = ed->x + ep2->x + (ep2->w / 2);
|
lx1 = ed->x + ep2->x + (ep2->w / 2);
|
||||||
|
@ -2407,22 +2478,22 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags)
|
||||||
TO_INT(SCALE(ep2pos, ep2desc2->persp.zplane -
|
TO_INT(SCALE(ep2pos, ep2desc2->persp.zplane -
|
||||||
ep2desc1->persp.zplane));
|
ep2desc1->persp.zplane));
|
||||||
lr1 = ep2desc1->color.r +
|
lr1 = ep2desc1->color.r +
|
||||||
TO_INT(SCALE(ep2pos, ep2desc2->color.r -
|
TO_INT(SCALE(ep2pos2, ep2desc2->color.r -
|
||||||
ep2desc1->color.r));
|
ep2desc1->color.r));
|
||||||
lg1 = ep2desc1->color.g +
|
lg1 = ep2desc1->color.g +
|
||||||
TO_INT(SCALE(ep2pos, ep2desc2->color.g -
|
TO_INT(SCALE(ep2pos2, ep2desc2->color.g -
|
||||||
ep2desc1->color.b));
|
ep2desc1->color.b));
|
||||||
lb1 = ep2desc1->color.b +
|
lb1 = ep2desc1->color.b +
|
||||||
TO_INT(SCALE(ep2pos, ep2desc2->color.g -
|
TO_INT(SCALE(ep2pos2, ep2desc2->color.g -
|
||||||
ep2desc1->color.b));
|
ep2desc1->color.b));
|
||||||
lar1 = ep2desc1->color2.r +
|
lar1 = ep2desc1->color2.r +
|
||||||
TO_INT(SCALE(ep2pos, ep2desc2->color2.r -
|
TO_INT(SCALE(ep2pos2, ep2desc2->color2.r -
|
||||||
ep2desc1->color2.r));
|
ep2desc1->color2.r));
|
||||||
lag1 = ep2desc1->color2.g +
|
lag1 = ep2desc1->color2.g +
|
||||||
TO_INT(SCALE(ep2pos, ep2desc2->color2.g -
|
TO_INT(SCALE(ep2pos2, ep2desc2->color2.g -
|
||||||
ep2desc1->color2.b));
|
ep2desc1->color2.b));
|
||||||
lab1 = ep2desc1->color2.b +
|
lab1 = ep2desc1->color2.b +
|
||||||
TO_INT(SCALE(ep2pos, ep2desc2->color2.g -
|
TO_INT(SCALE(ep2pos2, ep2desc2->color2.g -
|
||||||
ep2desc1->color2.b));
|
ep2desc1->color2.b));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -2448,7 +2519,7 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags)
|
||||||
if (ep2)
|
if (ep2)
|
||||||
{
|
{
|
||||||
Edje_Part_Description_Common *ep2desc1, *ep2desc2;
|
Edje_Part_Description_Common *ep2desc1, *ep2desc2;
|
||||||
FLOAT_T ep2pos;
|
FLOAT_T ep2pos, ep2pos2;
|
||||||
|
|
||||||
do2 = 1;
|
do2 = 1;
|
||||||
if (!ep2->calculated)
|
if (!ep2->calculated)
|
||||||
|
@ -2457,6 +2528,9 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags)
|
||||||
ep2desc2 = NULL;
|
ep2desc2 = NULL;
|
||||||
if (ep2->param2) ep2desc2 = ep2->param2->description;
|
if (ep2->param2) ep2desc2 = ep2->param2->description;
|
||||||
ep2pos = ep2->description_pos;
|
ep2pos = ep2->description_pos;
|
||||||
|
ep2pos2 = ep2pos;
|
||||||
|
if (ep2pos2 < ZERO) ep2pos2 = ZERO;
|
||||||
|
else if (ep2pos2 > FROM_INT(1)) ep2pos2 = FROM_INT(1);
|
||||||
|
|
||||||
// light x and y are already interpolated in part geom
|
// light x and y are already interpolated in part geom
|
||||||
lx2 = ed->x + ep2->x + (ep2->w / 2);
|
lx2 = ed->x + ep2->x + (ep2->w / 2);
|
||||||
|
@ -2468,22 +2542,22 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags)
|
||||||
TO_INT(SCALE(ep2pos, ep2desc2->persp.zplane -
|
TO_INT(SCALE(ep2pos, ep2desc2->persp.zplane -
|
||||||
ep2desc1->persp.zplane));
|
ep2desc1->persp.zplane));
|
||||||
lr2 = ep2desc1->color.r +
|
lr2 = ep2desc1->color.r +
|
||||||
TO_INT(SCALE(ep2pos, ep2desc2->color.r -
|
TO_INT(SCALE(ep2pos2, ep2desc2->color.r -
|
||||||
ep2desc1->color.r));
|
ep2desc1->color.r));
|
||||||
lg2 = ep2desc1->color.g +
|
lg2 = ep2desc1->color.g +
|
||||||
TO_INT(SCALE(ep2pos, ep2desc2->color.g -
|
TO_INT(SCALE(ep2pos2, ep2desc2->color.g -
|
||||||
ep2desc1->color.b));
|
ep2desc1->color.b));
|
||||||
lb2 = ep2desc1->color.b +
|
lb2 = ep2desc1->color.b +
|
||||||
TO_INT(SCALE(ep2pos, ep2desc2->color.g -
|
TO_INT(SCALE(ep2pos2, ep2desc2->color.g -
|
||||||
ep2desc1->color.b));
|
ep2desc1->color.b));
|
||||||
lar2 = ep2desc1->color2.r +
|
lar2 = ep2desc1->color2.r +
|
||||||
TO_INT(SCALE(ep2pos, ep2desc2->color2.r -
|
TO_INT(SCALE(ep2pos2, ep2desc2->color2.r -
|
||||||
ep2desc1->color2.r));
|
ep2desc1->color2.r));
|
||||||
lag2 = ep2desc1->color2.g +
|
lag2 = ep2desc1->color2.g +
|
||||||
TO_INT(SCALE(ep2pos, ep2desc2->color2.g -
|
TO_INT(SCALE(ep2pos2, ep2desc2->color2.g -
|
||||||
ep2desc1->color2.b));
|
ep2desc1->color2.b));
|
||||||
lab2 = ep2desc1->color2.b +
|
lab2 = ep2desc1->color2.b +
|
||||||
TO_INT(SCALE(ep2pos, ep2desc2->color2.g -
|
TO_INT(SCALE(ep2pos2, ep2desc2->color2.g -
|
||||||
ep2desc1->color2.b));
|
ep2desc1->color2.b));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -2503,12 +2577,12 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags)
|
||||||
lx = lx1 + TO_INT(SCALE(pos, lx2 - lx1));
|
lx = lx1 + TO_INT(SCALE(pos, lx2 - lx1));
|
||||||
ly = ly1 + TO_INT(SCALE(pos, ly2 - ly1));
|
ly = ly1 + TO_INT(SCALE(pos, ly2 - ly1));
|
||||||
lz = lz1 + TO_INT(SCALE(pos, lz2 - lz1));
|
lz = lz1 + TO_INT(SCALE(pos, lz2 - lz1));
|
||||||
lr = lr1 + TO_INT(SCALE(pos, lr2 - lr1));
|
lr = lr1 + TO_INT(SCALE(pos2, lr2 - lr1));
|
||||||
lg = lg1 + TO_INT(SCALE(pos, lg2 - lg1));
|
lg = lg1 + TO_INT(SCALE(pos2, lg2 - lg1));
|
||||||
lb = lb1 + TO_INT(SCALE(pos, lb2 - lb1));
|
lb = lb1 + TO_INT(SCALE(pos2, lb2 - lb1));
|
||||||
lar = lar1 + TO_INT(SCALE(pos, lar2 - lar1));
|
lar = lar1 + TO_INT(SCALE(pos2, lar2 - lar1));
|
||||||
lag = lag1 + TO_INT(SCALE(pos, lag2 - lag1));
|
lag = lag1 + TO_INT(SCALE(pos2, lag2 - lag1));
|
||||||
lab = lab1 + TO_INT(SCALE(pos, lab2 - lab1));
|
lab = lab1 + TO_INT(SCALE(pos2, lab2 - lab1));
|
||||||
}
|
}
|
||||||
else if (do1)
|
else if (do1)
|
||||||
{
|
{
|
||||||
|
|
|
@ -373,6 +373,8 @@ _edje_edd_init(void)
|
||||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "value2", value2, EET_T_DOUBLE);
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "value2", value2, EET_T_DOUBLE);
|
||||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "tween.mode", tween.mode, EET_T_INT);
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "tween.mode", tween.mode, EET_T_INT);
|
||||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "tween.time", tween.time, EDJE_T_FLOAT);
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "tween.time", tween.time, EDJE_T_FLOAT);
|
||||||
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "v1", tween.v1, EDJE_T_FLOAT);
|
||||||
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "v2", tween.v2, EDJE_T_FLOAT);
|
||||||
EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_program, Edje_Program, "targets", targets, _edje_edd_edje_program_target);
|
EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_program, Edje_Program, "targets", targets, _edje_edd_edje_program_target);
|
||||||
EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_program, Edje_Program, "after", after, _edje_edd_edje_program_after);
|
EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_program, Edje_Program, "after", after, _edje_edd_edje_program_after);
|
||||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "api.name", api.name, EET_T_STRING);
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "api.name", api.name, EET_T_STRING);
|
||||||
|
|
|
@ -846,7 +846,7 @@ _edje_embryo_fn_set_state(Embryo_Program *ep, Embryo_Cell *params)
|
||||||
{
|
{
|
||||||
if (rp->program) _edje_program_end(ed, rp->program);
|
if (rp->program) _edje_program_end(ed, rp->program);
|
||||||
_edje_part_description_apply(ed, rp, state, value, NULL, 0.0);
|
_edje_part_description_apply(ed, rp, state, value, NULL, 0.0);
|
||||||
_edje_part_pos_set(ed, rp, EDJE_TWEEN_MODE_LINEAR, ZERO);
|
_edje_part_pos_set(ed, rp, EDJE_TWEEN_MODE_LINEAR, ZERO, ZERO, ZERO);
|
||||||
_edje_recalc(ed);
|
_edje_recalc(ed);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -928,7 +928,7 @@ _edje_embryo_fn_set_tween_state(Embryo_Program *ep, Embryo_Cell *params)
|
||||||
{
|
{
|
||||||
if (rp->program) _edje_program_end(ed, rp->program);
|
if (rp->program) _edje_program_end(ed, rp->program);
|
||||||
_edje_part_description_apply(ed, rp, state1, value1, state2, value2);
|
_edje_part_description_apply(ed, rp, state1, value1, state2, value2);
|
||||||
_edje_part_pos_set(ed, rp, EDJE_TWEEN_MODE_LINEAR, FROM_DOUBLE(tween));
|
_edje_part_pos_set(ed, rp, EDJE_TWEEN_MODE_LINEAR, FROM_DOUBLE(tween), ZERO, ZERO);
|
||||||
_edje_recalc(ed);
|
_edje_recalc(ed);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -3761,7 +3761,7 @@ _edje_lua_part_set_state(lua_State *L)
|
||||||
_edje_part_description_apply(obj->ed, obj->rp,
|
_edje_part_description_apply(obj->ed, obj->rp,
|
||||||
luaL_checkstring(L, -2), luaL_checknumber(L, -1),
|
luaL_checkstring(L, -2), luaL_checknumber(L, -1),
|
||||||
NULL, 0.0);
|
NULL, 0.0);
|
||||||
_edje_part_pos_set(obj->ed, obj->rp, EDJE_TWEEN_MODE_LINEAR, ZERO);
|
_edje_part_pos_set(obj->ed, obj->rp, EDJE_TWEEN_MODE_LINEAR, ZERO, ZERO, ZERO);
|
||||||
_edje_recalc(obj->ed);
|
_edje_recalc(obj->ed);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -3780,7 +3780,7 @@ _edje_lua_part_set_tween_state(lua_State *L)
|
||||||
luaL_checkstring(L, -4), luaL_checknumber(L, -3),
|
luaL_checkstring(L, -4), luaL_checknumber(L, -3),
|
||||||
luaL_checkstring(L, -2), luaL_checknumber(L, -1));
|
luaL_checkstring(L, -2), luaL_checknumber(L, -1));
|
||||||
_edje_part_pos_set(obj->ed, obj->rp, EDJE_TWEEN_MODE_LINEAR,
|
_edje_part_pos_set(obj->ed, obj->rp, EDJE_TWEEN_MODE_LINEAR,
|
||||||
FROM_DOUBLE(luaL_checknumber(L, -5)));
|
FROM_DOUBLE(luaL_checknumber(L, -5)), ZERO, ZERO);
|
||||||
_edje_recalc(obj->ed);
|
_edje_recalc(obj->ed);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -544,6 +544,8 @@ struct _Edje_Program /* a conditional program to be run */
|
||||||
struct {
|
struct {
|
||||||
int mode; /* how to tween - linear, sinusoidal etc. */
|
int mode; /* how to tween - linear, sinusoidal etc. */
|
||||||
FLOAT_T time; /* time to graduate between current and new state */
|
FLOAT_T time; /* time to graduate between current and new state */
|
||||||
|
FLOAT_T v1; /* other value for drag actions */
|
||||||
|
FLOAT_T v2; /* other value for drag actions */
|
||||||
} tween;
|
} tween;
|
||||||
|
|
||||||
Eina_List *targets; /* list of target parts to apply the state to */
|
Eina_List *targets; /* list of target parts to apply the state to */
|
||||||
|
@ -1455,7 +1457,7 @@ extern Eina_Mempool *_emp_TABLE;
|
||||||
extern Eina_Mempool *_emp_EXTERNAL;
|
extern Eina_Mempool *_emp_EXTERNAL;
|
||||||
extern Eina_Mempool *_emp_part;
|
extern Eina_Mempool *_emp_part;
|
||||||
|
|
||||||
void _edje_part_pos_set(Edje *ed, Edje_Real_Part *ep, int mode, FLOAT_T pos);
|
void _edje_part_pos_set(Edje *ed, Edje_Real_Part *ep, int mode, FLOAT_T pos, FLOAT_T v1, FLOAT_T v2);
|
||||||
Edje_Part_Description_Common *_edje_part_description_find(Edje *ed,
|
Edje_Part_Description_Common *_edje_part_description_find(Edje *ed,
|
||||||
Edje_Real_Part *rp,
|
Edje_Real_Part *rp,
|
||||||
const char *name, double val);
|
const char *name, double val);
|
||||||
|
|
|
@ -294,7 +294,9 @@ _edje_program_run_iterate(Edje_Running_Program *runp, double tim)
|
||||||
{
|
{
|
||||||
rp = ed->table_parts[pt->id % ed->table_parts_size];
|
rp = ed->table_parts[pt->id % ed->table_parts_size];
|
||||||
if (rp) _edje_part_pos_set(ed, rp,
|
if (rp) _edje_part_pos_set(ed, rp,
|
||||||
runp->program->tween.mode, t);
|
runp->program->tween.mode, t,
|
||||||
|
runp->program->tween.v1,
|
||||||
|
runp->program->tween.v2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (t >= FROM_INT(1))
|
if (t >= FROM_INT(1))
|
||||||
|
@ -314,7 +316,9 @@ _edje_program_run_iterate(Edje_Running_Program *runp, double tim)
|
||||||
NULL,
|
NULL,
|
||||||
0.0);
|
0.0);
|
||||||
_edje_part_pos_set(ed, rp,
|
_edje_part_pos_set(ed, rp,
|
||||||
runp->program->tween.mode, ZERO);
|
runp->program->tween.mode, ZERO,
|
||||||
|
runp->program->tween.v1,
|
||||||
|
runp->program->tween.v2);
|
||||||
rp->program = NULL;
|
rp->program = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -389,7 +393,9 @@ _edje_program_end(Edje *ed, Edje_Running_Program *runp)
|
||||||
NULL,
|
NULL,
|
||||||
0.0);
|
0.0);
|
||||||
_edje_part_pos_set(ed, rp,
|
_edje_part_pos_set(ed, rp,
|
||||||
runp->program->tween.mode, ZERO);
|
runp->program->tween.mode, ZERO,
|
||||||
|
runp->program->tween.v1,
|
||||||
|
runp->program->tween.v2);
|
||||||
rp->program = NULL;
|
rp->program = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -479,7 +485,9 @@ _edje_program_run(Edje *ed, Edje_Program *pr, Eina_Bool force, const char *ssig,
|
||||||
rp->param1.description->state.value,
|
rp->param1.description->state.value,
|
||||||
pr->state,
|
pr->state,
|
||||||
pr->value);
|
pr->value);
|
||||||
_edje_part_pos_set(ed, rp, pr->tween.mode, ZERO);
|
_edje_part_pos_set(ed, rp, pr->tween.mode, ZERO,
|
||||||
|
pr->tween.v1,
|
||||||
|
pr->tween.v2);
|
||||||
rp->program = runp;
|
rp->program = runp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -516,7 +524,9 @@ _edje_program_run(Edje *ed, Edje_Program *pr, Eina_Bool force, const char *ssig,
|
||||||
pr->value,
|
pr->value,
|
||||||
NULL,
|
NULL,
|
||||||
0.0);
|
0.0);
|
||||||
_edje_part_pos_set(ed, rp, pr->tween.mode, ZERO);
|
_edje_part_pos_set(ed, rp, pr->tween.mode, ZERO,
|
||||||
|
pr->tween.v1,
|
||||||
|
pr->tween.v2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue