From f605136c39404828506ed011f5ed657be3f21f65 Mon Sep 17 00:00:00 2001 From: Tomas Frydrych Date: Wed, 11 Jul 2007 07:16:21 +0000 Subject: [PATCH] improvements to ClutterBehaviourEllipse --- ChangeLog | 18 ++++ clutter/clutter-behaviour-ellipse.c | 139 +++++++++++++++++++++++++--- clutter/clutter-behaviour-ellipse.h | 33 +++++-- clutter/clutter-fixed.h | 10 +- 4 files changed, 174 insertions(+), 26 deletions(-) diff --git a/ChangeLog b/ChangeLog index 843f1f3c8..6904201f5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,21 @@ +2007-07-11 Tomas Frydrych + + * clutter/clutter-fixed.h: + Fixed CLUTTER_ANGLE_ macros. + + * clutter/clutter-behaviour-ellipse.h: + * clutter/clutter-behaviour-ellipse.c: + Implemented "apply" signal closer to position actor on the start + of the elliptic path. + + (clutter_behaviour_ellipse_get_angle_begin): + (clutter_behaviour_ellipse_set_angle_begin): + (clutter_behaviour_ellipse_get_angle_end): + (clutter_behaviour_ellipse_set_angle_end): + (clutter_behaviour_ellipse_get_angle_tilt): + (clutter_behaviour_ellipse_set_angle_tilt): + Renamed with an x suffix; added versions for angles in degrees. + 2007-07-09 Matthew Allum * TODO: diff --git a/clutter/clutter-behaviour-ellipse.c b/clutter/clutter-behaviour-ellipse.c index 3db2f1fe8..046aa01a5 100644 --- a/clutter/clutter-behaviour-ellipse.c +++ b/clutter/clutter-behaviour-ellipse.c @@ -249,6 +249,22 @@ clutter_behaviour_ellipse_get_property (GObject *gobject, } } +static void +clutter_behaviour_ellipse_apply (ClutterBehaviour *behave, + ClutterActor *actor) +{ + ClutterKnot knot; + ClutterBehaviourEllipse * e = CLUTTER_BEHAVIOUR_ELLIPSE (behave); + + clutter_behaviour_ellipse_advance (e, e->priv->angle_begin, &knot); + + clutter_actor_set_position (actor, knot.x, knot.y); + + if (CLUTTER_BEHAVIOUR_CLASS (clutter_behaviour_ellipse_parent_class)->apply) + CLUTTER_BEHAVIOUR_CLASS (clutter_behaviour_ellipse_parent_class)->apply (behave, actor); +} + + static void clutter_behaviour_ellipse_class_init (ClutterBehaviourEllipseClass *klass) { @@ -260,7 +276,8 @@ clutter_behaviour_ellipse_class_init (ClutterBehaviourEllipseClass *klass) object_class->get_property = clutter_behaviour_ellipse_get_property; behave_class->alpha_notify = clutter_behaviour_ellipse_alpha_notify; - + behave_class->apply = clutter_behaviour_ellipse_apply; + /** * ClutterBehaviourEllipse:angle-begin: * @@ -588,10 +605,26 @@ clutter_behaviour_ellipse_get_height (ClutterBehaviourEllipse * self) return self->priv->b << 1; } - /** * clutter_behaviour_ellipse_set_angle_begin * @self: a #ClutterBehaviourEllipse + * @angle_begin: angle at which movement begins in degrees + * + * Sets the angle at which movement begins. + * + * Since: 0.4 + */ +void +clutter_behaviour_ellipse_set_angle_begin (ClutterBehaviourEllipse * self, + gdouble angle_begin) +{ + clutter_behaviour_ellipse_set_angle_beginx (self, + CLUTTER_ANGLE_FROM_DEG (angle_begin)); +} + +/** + * clutter_behaviour_ellipse_set_angle_beginx + * @self: a #ClutterBehaviourEllipse * @angle_begin: #ClutterAngle at which movement begins * * Sets the angle at which movement begins. @@ -599,8 +632,8 @@ clutter_behaviour_ellipse_get_height (ClutterBehaviourEllipse * self) * Since: 0.4 */ void -clutter_behaviour_ellipse_set_angle_begin (ClutterBehaviourEllipse * self, - ClutterAngle angle_begin) +clutter_behaviour_ellipse_set_angle_beginx (ClutterBehaviourEllipse * self, + ClutterAngle angle_begin) { if (self->priv->angle_begin != angle_begin) { @@ -617,20 +650,52 @@ clutter_behaviour_ellipse_set_angle_begin (ClutterBehaviourEllipse * self, * * Gets the angle at which movements begins. * + * Return value: angle in degrees + * + * Since: 0.4 + */ +gdouble +clutter_behaviour_ellipse_get_angle_begin (ClutterBehaviourEllipse * self) +{ + return CLUTTER_ANGLE_TO_DEG (self->priv->angle_begin); +} + +/** + * clutter_behaviour_ellipse_get_angle_beginx + * @self: a #ClutterBehaviourEllipse + * + * Gets the angle at which movements begins. + * * Return value: a #ClutterAngle * * Since: 0.4 */ ClutterAngle -clutter_behaviour_ellipse_get_angle_begin (ClutterBehaviourEllipse * self) +clutter_behaviour_ellipse_get_angle_beginx (ClutterBehaviourEllipse * self) { return self->priv->angle_begin; } - /** * clutter_behaviour_ellipse_set_angle_end * @self: a #ClutterBehaviourEllipse + * @angle_end: angle at which movement ends in degrees. + * + * Sets the angle at which movement ends. + * + * Since: 0.4 + */ +void +clutter_behaviour_ellipse_set_angle_end (ClutterBehaviourEllipse * self, + gdouble angle_end) +{ + clutter_behaviour_ellipse_set_angle_endx (self, + CLUTTER_ANGLE_FROM_DEG (angle_end)); +} + +/** + * clutter_behaviour_ellipse_set_angle_endx + * @self: a #ClutterBehaviourEllipse * @angle_end: #ClutterAngle at which movement ends * * Sets the angle at which movement ends. @@ -638,8 +703,8 @@ clutter_behaviour_ellipse_get_angle_begin (ClutterBehaviourEllipse * self) * Since: 0.4 */ void -clutter_behaviour_ellipse_set_angle_end (ClutterBehaviourEllipse * self, - ClutterAngle angle_end) +clutter_behaviour_ellipse_set_angle_endx (ClutterBehaviourEllipse * self, + ClutterAngle angle_end) { if (self->priv->angle_end != angle_end) { @@ -656,20 +721,52 @@ clutter_behaviour_ellipse_set_angle_end (ClutterBehaviourEllipse * self, * * Gets the at which movements ends. * + * Return value: angle in degrees + * + * Since: 0.4 + */ +gdouble +clutter_behaviour_ellipse_get_angle_end (ClutterBehaviourEllipse * self) +{ + return CLUTTER_ANGLE_TO_DEG (self->priv->angle_end); +} + +/** + * clutter_behaviour_ellipse_get_angle_endx + * @self: a #ClutterBehaviourEllipse + * + * Gets the angle at which movements ends. + * * Return value: a #ClutterAngle * * Since: 0.4 */ ClutterAngle -clutter_behaviour_ellipse_get_angle_end (ClutterBehaviourEllipse * self) +clutter_behaviour_ellipse_get_angle_endx (ClutterBehaviourEllipse * self) { return self->priv->angle_end; } - /** * clutter_behaviour_ellipse_set_angle_tilt * @self: a #ClutterBehaviourEllipse + * @angle_tilt: tilt of the elipse around the center in degrees. + * + * Sets the angle at which the ellipse should be tilted around it's center. + * + * Since: 0.4 + */ +void +clutter_behaviour_ellipse_set_angle_tilt (ClutterBehaviourEllipse * self, + gdouble angle_tilt) +{ + clutter_behaviour_ellipse_set_angle_tiltx (self, + CLUTTER_ANGLE_FROM_DEG (angle_tilt)); +} + +/** + * clutter_behaviour_ellipse_set_angle_tiltx + * @self: a #ClutterBehaviourEllipse * @angle_tilt: #ClutterAngle tilt of the elipse around the center * * Sets the angle at which the ellipse should be tilted around it's center. @@ -677,8 +774,8 @@ clutter_behaviour_ellipse_get_angle_end (ClutterBehaviourEllipse * self) * Since: 0.4 */ void -clutter_behaviour_ellipse_set_angle_tilt (ClutterBehaviourEllipse * self, - ClutterAngle angle_tilt) +clutter_behaviour_ellipse_set_angle_tiltx (ClutterBehaviourEllipse * self, + ClutterAngle angle_tilt) { if (self->priv->angle_tilt != angle_tilt) { @@ -695,12 +792,28 @@ clutter_behaviour_ellipse_set_angle_tilt (ClutterBehaviourEllipse * self, * * Gets the tilt of the ellipse around the center. * + * Return value: angle in degrees. + * + * Since: 0.4 + */ +gdouble +clutter_behaviour_ellipse_get_angle_tilt (ClutterBehaviourEllipse * self) +{ + return CLUTTER_ANGLE_TO_DEG (self->priv->angle_tilt); +} + +/** + * clutter_behaviour_ellipse_get_angle_tiltx + * @self: a #ClutterBehaviourEllipse + * + * Gets the tilt of the ellipse around the center. + * * Return value: a #ClutterAngle * * Since: 0.4 */ ClutterAngle -clutter_behaviour_ellipse_get_angle_tilt (ClutterBehaviourEllipse * self) +clutter_behaviour_ellipse_get_angle_tiltx (ClutterBehaviourEllipse * self) { return self->priv->angle_tilt; } diff --git a/clutter/clutter-behaviour-ellipse.h b/clutter/clutter-behaviour-ellipse.h index eb3a8a65e..d1f7f0fe0 100644 --- a/clutter/clutter-behaviour-ellipse.h +++ b/clutter/clutter-behaviour-ellipse.h @@ -115,20 +115,35 @@ void clutter_behaviour_ellipse_set_height (ClutterBehaviourEll gint clutter_behaviour_ellipse_get_height (ClutterBehaviourEllipse * self); -void clutter_behaviour_ellipse_set_angle_begin (ClutterBehaviourEllipse * self, - ClutterAngle angle_begin); +void clutter_behaviour_ellipse_set_angle_begin (ClutterBehaviourEllipse * self, + gdouble angle_begin); -ClutterAngle clutter_behaviour_ellipse_get_angle_begin (ClutterBehaviourEllipse * self); +void clutter_behaviour_ellipse_set_angle_beginx (ClutterBehaviourEllipse * self, + ClutterAngle angle_begin); -void clutter_behaviour_ellipse_set_angle_end (ClutterBehaviourEllipse * self, - ClutterAngle angle_end); +ClutterAngle clutter_behaviour_ellipse_get_angle_beginx (ClutterBehaviourEllipse * self); -ClutterAngle clutter_behaviour_ellipse_get_angle_end (ClutterBehaviourEllipse * self); +gdouble clutter_behaviour_ellipse_get_angle_begin (ClutterBehaviourEllipse * self); -void clutter_behaviour_ellipse_set_angle_tilt (ClutterBehaviourEllipse * self, - ClutterAngle angle_tilt); +void clutter_behaviour_ellipse_set_angle_endx (ClutterBehaviourEllipse * self, + ClutterAngle angle_end); -ClutterAngle clutter_behaviour_ellipse_get_angle_tilt (ClutterBehaviourEllipse * self); +void clutter_behaviour_ellipse_set_angle_end (ClutterBehaviourEllipse * self, + gdouble angle_end); + +ClutterAngle clutter_behaviour_ellipse_get_angle_endx (ClutterBehaviourEllipse * self); + +gdouble clutter_behaviour_ellipse_get_angle_end (ClutterBehaviourEllipse * self); + +void clutter_behaviour_ellipse_set_angle_tiltx (ClutterBehaviourEllipse * self, + ClutterAngle angle_tilt); + +void clutter_behaviour_ellipse_set_angle_tilt (ClutterBehaviourEllipse * self, + gdouble angle_tilt); + +ClutterAngle clutter_behaviour_ellipse_get_angle_tiltx (ClutterBehaviourEllipse * self); + +gdouble clutter_behaviour_ellipse_get_angle_tilt (ClutterBehaviourEllipse * self); G_END_DECLS diff --git a/clutter/clutter-fixed.h b/clutter/clutter-fixed.h index 3a2be5e14..61a79584a 100644 --- a/clutter/clutter-fixed.h +++ b/clutter/clutter-fixed.h @@ -46,10 +46,12 @@ typedef gint32 ClutterFixed; */ typedef gint32 ClutterAngle; /* angle such that 1024 == 2*PI */ -#define CLUTTER_ANGLE_FROM_DEG(x) (CLUTTER_FLOAT_TO_INT ((x * 1024.0) / 360.0)) -#define CLUTTER_ANGLE_FROM_DEGF(x) (CLUTTER_FLOAT_TO_INT (((float)x * 1024.0f) / 360.0f)) -#define CLUTTER_ANGLE_TO_DEGF(x) (((float)x * 360.0)/ 1024.0) -#define CLUTTER_ANGLE_FROM_DEGX(x) (CFX_INT(((x/360)*1024) + CFX_HALF)) +#define CLUTTER_ANGLE_FROM_DEG(x) (CLUTTER_FLOAT_TO_INT (((x) * 1024.0) / 360.0)) +#define CLUTTER_ANGLE_FROM_DEGF(x) (CLUTTER_FLOAT_TO_INT (((float)(x) * 1024.0f) / 360.0f)) +#define CLUTTER_ANGLE_FROM_DEGX(x) (CFX_INT((((x)/360)*1024) + CFX_HALF)) +#define CLUTTER_ANGLE_TO_DEG(x) (((x) * 360.0)/ 1024.0) +#define CLUTTER_ANGLE_TO_DEGF(x) (((float)(x) * 360.0)/ 1024.0) +#define CLUTTER_ANGLE_TO_DEGX(x) (CLUTTER_INT_TO_FIXED((x) * 45)/128) #define CFX_Q 16 /* Decimal part size in bits */ #define CFX_ONE (1 << CFX_Q) /* 1 */