2007-07-22 Emmanuele Bassi <ebassi@openedhand.com>

* clutter/clutter-behaviour-ellipse.c: Remove pointer indirections;
	add sanity checks on the public entry points; make all the public
	properties floating point (where needed) andconvert them to fixed
	point internally. (Partial fix for #389)
This commit is contained in:
Emmanuele Bassi 2007-07-22 22:35:45 +00:00
parent fe11263b84
commit 049f2feedc
2 changed files with 225 additions and 172 deletions

View File

@ -1,3 +1,10 @@
2007-07-22 Emmanuele Bassi <ebassi@openedhand.com>
* clutter/clutter-behaviour-ellipse.c: Remove pointer indirections;
add sanity checks on the public entry points; make all the public
properties floating point (where needed) andconvert them to fixed
point internally. (Partial fix for #389)
2007-07-22 Emmanuele Bassi <ebassi@openedhand.com> 2007-07-22 Emmanuele Bassi <ebassi@openedhand.com>
* clutter/clutter-behaviour.[ch]: Rename ClutterBehaviour::apply * clutter/clutter-behaviour.[ch]: Rename ClutterBehaviour::apply

View File

@ -37,6 +37,7 @@
#include "clutter-fixed.h" #include "clutter-fixed.h"
#include "clutter-marshal.h" #include "clutter-marshal.h"
#include "clutter-behaviour-ellipse.h" #include "clutter-behaviour-ellipse.h"
#include "clutter-debug.h"
#include "clutter-enum-types.h" #include "clutter-enum-types.h"
#include "clutter-private.h" #include "clutter-private.h"
@ -72,30 +73,26 @@ enum
struct _ClutterBehaviourEllipsePrivate struct _ClutterBehaviourEllipsePrivate
{ {
/*
* Ellipse center
*/
ClutterKnot center; ClutterKnot center;
gint a; gint a;
gint b; gint b;
ClutterAngle angle_begin; ClutterAngle angle_begin;
ClutterAngle angle_end; ClutterAngle angle_end;
ClutterAngle angle_tilt; ClutterAngle angle_tilt;
}; };
static void
clutter_behaviour_ellipse_finalize (GObject *object)
{
G_OBJECT_CLASS (clutter_behaviour_ellipse_parent_class)->finalize (object);
}
static void static void
clutter_behaviour_ellipse_advance (ClutterBehaviourEllipse *e, clutter_behaviour_ellipse_advance (ClutterBehaviourEllipse *e,
ClutterAngle angle, ClutterAngle angle,
ClutterKnot *knot) ClutterKnot *knot)
{ {
gint x = CFX_INT (e->priv->a * clutter_cosi (angle)); ClutterBehaviourEllipsePrivate *priv = e->priv;
gint y = CFX_INT (e->priv->b * clutter_sini (angle)); gint x, y;
x = CLUTTER_FIXED_INT (priv->a * clutter_cosi (angle));
y = CLUTTER_FIXED_INT (priv->b * clutter_sini (angle));
if (e->priv->angle_tilt) if (e->priv->angle_tilt)
{ {
@ -109,14 +106,14 @@ clutter_behaviour_ellipse_advance (ClutterBehaviourEllipse * e,
*/ */
ClutterFixed x2, y2; ClutterFixed x2, y2;
x2 = x * clutter_cosi (e->priv->angle_tilt) - x2 = x * clutter_cosi (priv->angle_tilt)
y * clutter_sini (e->priv->angle_tilt); - y * clutter_sini (priv->angle_tilt);
y2 = y * clutter_cosi (e->priv->angle_tilt) + y2 = y * clutter_cosi (priv->angle_tilt)
x * clutter_sini (e->priv->angle_tilt); + x * clutter_sini (priv->angle_tilt);
knot->x = CFX_INT (x2); knot->x = CLUTTER_FIXED_INT (x2);
knot->y = CFX_INT (y2); knot->y = CLUTTER_FIXED_INT (y2);
} }
else else
{ {
@ -124,10 +121,10 @@ clutter_behaviour_ellipse_advance (ClutterBehaviourEllipse * e,
knot->y = y; knot->y = y;
} }
#if 0 CLUTTER_NOTE (BEHAVIOUR, "advancing to angle %d [%d, %d] (a: %d, b: %d)",
g_debug ("advancing to angle %d [%d, %d] (a: %d, b: %d)", angle,
angle, knot->x, knot->y, e->priv->a, e->priv->b); knot->x, knot->y,
#endif priv->a, priv->b);
} }
@ -137,6 +134,7 @@ actor_apply_knot_foreach (ClutterBehaviour *behave,
gpointer data) gpointer data)
{ {
ClutterKnot *knot = data; ClutterKnot *knot = data;
clutter_actor_set_position (actor, knot->x, knot->y); clutter_actor_set_position (actor, knot->x, knot->y);
} }
@ -144,31 +142,31 @@ static void
clutter_behaviour_ellipse_alpha_notify (ClutterBehaviour *behave, clutter_behaviour_ellipse_alpha_notify (ClutterBehaviour *behave,
guint32 alpha) guint32 alpha)
{ {
ClutterKnot knot;
ClutterBehaviourEllipse *self = CLUTTER_BEHAVIOUR_ELLIPSE (behave); ClutterBehaviourEllipse *self = CLUTTER_BEHAVIOUR_ELLIPSE (behave);
ClutterBehaviourEllipsePrivate *priv = self->priv;
ClutterKnot knot;
ClutterAngle angle; ClutterAngle angle;
if (self->priv->angle_end >= self->priv->angle_begin) if (priv->angle_end >= priv->angle_begin)
{ {
angle = self->priv->angle_end - self->priv->angle_begin; angle = (priv->angle_end - priv->angle_begin)
angle = * alpha
(angle * alpha) / CLUTTER_ALPHA_MAX_ALPHA + self->priv->angle_begin; / CLUTTER_ALPHA_MAX_ALPHA
+ priv->angle_begin;
} }
else else
{ {
angle = self->priv->angle_begin - self->priv->angle_end; angle = priv->angle_begin
angle = - ((priv->angle_begin - priv->angle_end) * alpha)
self->priv->angle_begin - (angle * alpha) / CLUTTER_ALPHA_MAX_ALPHA; / CLUTTER_ALPHA_MAX_ALPHA;
} }
clutter_behaviour_ellipse_advance (self, angle, &knot); clutter_behaviour_ellipse_advance (self, angle, &knot);
knot.x += self->priv->center.x; knot.x += priv->center.x;
knot.y += self->priv->center.y; knot.y += priv->center.y;
clutter_behaviour_actors_foreach (behave, clutter_behaviour_actors_foreach (behave, actor_apply_knot_foreach, &knot);
actor_apply_knot_foreach,
&knot);
} }
static void static void
@ -178,20 +176,18 @@ clutter_behaviour_ellipse_set_property (GObject *gobject,
GParamSpec *pspec) GParamSpec *pspec)
{ {
ClutterBehaviourEllipse *el = CLUTTER_BEHAVIOUR_ELLIPSE (gobject); ClutterBehaviourEllipse *el = CLUTTER_BEHAVIOUR_ELLIPSE (gobject);
ClutterBehaviourEllipsePrivate *priv; ClutterBehaviourEllipsePrivate *priv = el->priv;
priv = CLUTTER_BEHAVIOUR_ELLIPSE (gobject)->priv;
switch (prop_id) switch (prop_id)
{ {
case PROP_ANGLE_BEGIN: case PROP_ANGLE_BEGIN:
priv->angle_begin = g_value_get_int (value); priv->angle_begin = CLUTTER_ANGLE_FROM_DEG (g_value_get_double (value));
break; break;
case PROP_ANGLE_END: case PROP_ANGLE_END:
priv->angle_end = g_value_get_int (value); priv->angle_end = CLUTTER_ANGLE_FROM_DEG (g_value_get_double (value));
break; break;
case PROP_ANGLE_TILT: case PROP_ANGLE_TILT:
priv->angle_tilt = g_value_get_int (value); priv->angle_tilt = CLUTTER_ANGLE_FROM_DEG (g_value_get_double (value));
break; break;
case PROP_WIDTH: case PROP_WIDTH:
priv->a = g_value_get_int (value) >> 1; priv->a = g_value_get_int (value) >> 1;
@ -201,11 +197,10 @@ clutter_behaviour_ellipse_set_property (GObject *gobject,
break; break;
case PROP_CENTER: case PROP_CENTER:
{ {
ClutterKnot * k = g_value_get_boxed (value); ClutterKnot *knot = g_value_get_boxed (value);
if (k) if (knot)
clutter_behaviour_ellipse_set_center (el, k->x, k->y); clutter_behaviour_ellipse_set_center (el, knot->x, knot->y);
} }
break; break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
@ -226,19 +221,19 @@ clutter_behaviour_ellipse_get_property (GObject *gobject,
switch (prop_id) switch (prop_id)
{ {
case PROP_ANGLE_BEGIN: case PROP_ANGLE_BEGIN:
g_value_set_int (value, priv->angle_begin); g_value_set_double (value, CLUTTER_ANGLE_TO_DEG (priv->angle_begin));
break; break;
case PROP_ANGLE_END: case PROP_ANGLE_END:
g_value_set_int (value, priv->angle_end); g_value_set_double (value, CLUTTER_ANGLE_TO_DEG (priv->angle_end));
break; break;
case PROP_ANGLE_TILT: case PROP_ANGLE_TILT:
g_value_set_int (value, priv->angle_tilt); g_value_set_double (value, CLUTTER_ANGLE_TO_DEG (priv->angle_tilt));
break; break;
case PROP_WIDTH: case PROP_WIDTH:
g_value_set_int (value, 2 * priv->a); g_value_set_int (value, (priv->a << 1));
break; break;
case PROP_HEIGHT: case PROP_HEIGHT:
g_value_set_int (value, 2 * priv->b); g_value_set_int (value, (priv->b << 1));
break; break;
case PROP_CENTER: case PROP_CENTER:
g_value_set_boxed (value, &priv->center); g_value_set_boxed (value, &priv->center);
@ -250,33 +245,36 @@ clutter_behaviour_ellipse_get_property (GObject *gobject,
} }
static void static void
clutter_behaviour_ellipse_apply (ClutterBehaviour *behave, clutter_behaviour_ellipse_applied (ClutterBehaviour *behave,
ClutterActor *actor) ClutterActor *actor)
{ {
ClutterKnot knot;
ClutterBehaviourEllipse *e = CLUTTER_BEHAVIOUR_ELLIPSE (behave); ClutterBehaviourEllipse *e = CLUTTER_BEHAVIOUR_ELLIPSE (behave);
ClutterKnot knot;
clutter_behaviour_ellipse_advance (e, e->priv->angle_begin, &knot); clutter_behaviour_ellipse_advance (e, e->priv->angle_begin, &knot);
clutter_actor_set_position (actor, knot.x, knot.y); clutter_actor_set_position (actor, knot.x, knot.y);
#if 0
/* no need to chain up: ClutterBehaviourEllipse's parent class does
* not have a class closure for ::apply
*/
if (CLUTTER_BEHAVIOUR_CLASS (clutter_behaviour_ellipse_parent_class)->apply) if (CLUTTER_BEHAVIOUR_CLASS (clutter_behaviour_ellipse_parent_class)->apply)
CLUTTER_BEHAVIOUR_CLASS (clutter_behaviour_ellipse_parent_class)->apply (behave, actor); CLUTTER_BEHAVIOUR_CLASS (clutter_behaviour_ellipse_parent_class)->apply (behave, actor);
#endif
} }
static void static void
clutter_behaviour_ellipse_class_init (ClutterBehaviourEllipseClass *klass) clutter_behaviour_ellipse_class_init (ClutterBehaviourEllipseClass *klass)
{ {
GObjectClass *object_class = G_OBJECT_CLASS (klass); GObjectClass *object_class = G_OBJECT_CLASS (klass);
ClutterBehaviourClass *behave_class = CLUTTER_BEHAVIOUR_CLASS (klass); ClutterBehaviourClass *behave_class = CLUTTER_BEHAVIOUR_CLASS (klass);
object_class->finalize = clutter_behaviour_ellipse_finalize;
object_class->set_property = clutter_behaviour_ellipse_set_property; object_class->set_property = clutter_behaviour_ellipse_set_property;
object_class->get_property = clutter_behaviour_ellipse_get_property; object_class->get_property = clutter_behaviour_ellipse_get_property;
behave_class->alpha_notify = clutter_behaviour_ellipse_alpha_notify; behave_class->alpha_notify = clutter_behaviour_ellipse_alpha_notify;
behave_class->apply = clutter_behaviour_ellipse_apply; behave_class->applied = clutter_behaviour_ellipse_applied;
/** /**
* ClutterBehaviourEllipse:angle-begin: * ClutterBehaviourEllipse:angle-begin:
@ -287,10 +285,10 @@ clutter_behaviour_ellipse_class_init (ClutterBehaviourEllipseClass *klass)
*/ */
g_object_class_install_property (object_class, g_object_class_install_property (object_class,
PROP_ANGLE_BEGIN, PROP_ANGLE_BEGIN,
g_param_spec_int ("angle-begin", g_param_spec_double ("angle-begin",
"Angle Begin", "Angle Begin",
"Initial angle", "Initial angle",
G_MININT, G_MAXINT, 0, 0.0, 360.0, 0.0,
CLUTTER_PARAM_READWRITE)); CLUTTER_PARAM_READWRITE));
/** /**
* ClutterBehaviourEllipse:angle-end: * ClutterBehaviourEllipse:angle-end:
@ -301,27 +299,25 @@ clutter_behaviour_ellipse_class_init (ClutterBehaviourEllipseClass *klass)
*/ */
g_object_class_install_property (object_class, g_object_class_install_property (object_class,
PROP_ANGLE_END, PROP_ANGLE_END,
g_param_spec_int ("angle-end", g_param_spec_double ("angle-end",
"Angle End", "Angle End",
"Final angle", "Final angle",
G_MININT, G_MAXINT, 1024, 0.0, 360.0, 360.0,
CLUTTER_PARAM_READWRITE)); CLUTTER_PARAM_READWRITE));
/** /**
* ClutterBehaviourEllipse:angle-end: * ClutterBehaviourEllipse:angle-tilt:
* *
* The final angle to where the rotation should end. * The tilt angle for the rotation
* *
* Since: 0.4 * Since: 0.4
*/ */
g_object_class_install_property (object_class, g_object_class_install_property (object_class,
PROP_ANGLE_TILT, PROP_ANGLE_TILT,
g_param_spec_int ("angle-tilt", g_param_spec_double ("angle-tilt",
"Angle Tilt", "Angle Tilt",
"Tilt of the ellipse", "Tilt of the ellipse",
G_MININT, G_MAXINT, 1024, 0.0, 360.0, 360.0,
CLUTTER_PARAM_READWRITE)); CLUTTER_PARAM_READWRITE));
/** /**
* ClutterBehaviourEllipse:width: * ClutterBehaviourEllipse:width:
* *
@ -407,25 +403,22 @@ clutter_behaviour_ellipse_new (ClutterAlpha * alpha,
gdouble end, gdouble end,
gdouble tilt) gdouble tilt)
{ {
ClutterBehaviourEllipse *bc; ClutterKnot center;
g_return_val_if_fail (alpha == NULL || CLUTTER_IS_ALPHA (alpha), NULL); g_return_val_if_fail (alpha == NULL || CLUTTER_IS_ALPHA (alpha), NULL);
ClutterKnot center;
center.x = x; center.x = x;
center.y = y; center.y = y;
bc = g_object_new (CLUTTER_TYPE_BEHAVIOUR_ELLIPSE, return g_object_new (CLUTTER_TYPE_BEHAVIOUR_ELLIPSE,
"alpha", alpha, "alpha", alpha,
"center", &center, "center", &center,
"width", width, "width", width,
"height", height, "height", height,
"angle-begin", CLUTTER_ANGLE_FROM_DEG (begin) - 256, "angle-begin", begin,
"angle-end", CLUTTER_ANGLE_FROM_DEG (end) - 256, "angle-end", end,
"angle-tilt", CLUTTER_ANGLE_FROM_DEG (tilt), "angle-tilt", tilt,
NULL); NULL);
return CLUTTER_BEHAVIOUR (bc);
} }
/** /**
@ -459,25 +452,22 @@ clutter_behaviour_ellipse_newx (ClutterAlpha * alpha,
ClutterFixed end, ClutterFixed end,
ClutterFixed tilt) ClutterFixed tilt)
{ {
ClutterBehaviourEllipse *bc; ClutterKnot center;
g_return_val_if_fail (alpha == NULL || CLUTTER_IS_ALPHA (alpha), NULL); g_return_val_if_fail (alpha == NULL || CLUTTER_IS_ALPHA (alpha), NULL);
ClutterKnot center;
center.x = x; center.x = x;
center.y = y; center.y = y;
bc = g_object_new (CLUTTER_TYPE_BEHAVIOUR_ELLIPSE, return g_object_new (CLUTTER_TYPE_BEHAVIOUR_ELLIPSE,
"alpha", alpha, "alpha", alpha,
"center", &center, "center", &center,
"width", width, "width", width,
"height", height, "height", height,
"angle-begin", CLUTTER_ANGLE_FROM_DEGX (begin) - 256, "angle-begin", CLUTTER_ANGLE_FROM_DEGX (begin),
"angle-end", CLUTTER_ANGLE_FROM_DEGX (end) - 256, "angle-end", CLUTTER_ANGLE_FROM_DEGX (end),
"angle-tilt", CLUTTER_ANGLE_FROM_DEGX (tilt), "angle-tilt", CLUTTER_ANGLE_FROM_DEGX (tilt),
NULL); NULL);
return CLUTTER_BEHAVIOUR (bc);
} }
@ -496,13 +486,18 @@ clutter_behaviour_ellipse_set_center (ClutterBehaviourEllipse * self,
gint x, gint x,
gint y) gint y)
{ {
if (self->priv->center.x != x || self->priv->center.y != y) ClutterBehaviourEllipsePrivate *priv;
g_return_if_fail (CLUTTER_IS_BEHAVIOUR_ELLIPSE (self));
priv = self->priv;
if (priv->center.x != x || priv->center.y != y)
{ {
g_object_ref (self); priv->center.x = x;
self->priv->center.x = x; priv->center.y = y;
self->priv->center.y = y;
g_object_notify (G_OBJECT (self), "center"); g_object_notify (G_OBJECT (self), "center");
g_object_unref (self);
} }
} }
@ -521,11 +516,17 @@ clutter_behaviour_ellipse_get_center (ClutterBehaviourEllipse * self,
gint *x, gint *x,
gint *y) gint *y)
{ {
ClutterBehaviourEllipsePrivate *priv;
g_return_if_fail (CLUTTER_IS_BEHAVIOUR_ELLIPSE (self));
priv = self->priv;
if (x) if (x)
*x = self->priv->center.x; *x = priv->center.x;
if (y) if (y)
*y = self->priv->center.y; *y = priv->center.y;
} }
@ -542,12 +543,17 @@ void
clutter_behaviour_ellipse_set_width (ClutterBehaviourEllipse * self, clutter_behaviour_ellipse_set_width (ClutterBehaviourEllipse * self,
gint width) gint width)
{ {
if (self->priv->a != width >> 1) ClutterBehaviourEllipsePrivate *priv;
g_return_if_fail (CLUTTER_IS_BEHAVIOUR_ELLIPSE (self));
priv = self->priv;
if (priv->a != width >> 1)
{ {
g_object_ref (self); priv->a = width >> 1;
self->priv->a = width >> 1;
g_object_notify (G_OBJECT (self), "width"); g_object_notify (G_OBJECT (self), "width");
g_object_unref (self);
} }
} }
@ -564,6 +570,8 @@ clutter_behaviour_ellipse_set_width (ClutterBehaviourEllipse * self,
gint gint
clutter_behaviour_ellipse_get_width (ClutterBehaviourEllipse *self) clutter_behaviour_ellipse_get_width (ClutterBehaviourEllipse *self)
{ {
g_return_val_if_fail (CLUTTER_IS_BEHAVIOUR_ELLIPSE (self), 0);
return self->priv->a << 1; return self->priv->a << 1;
} }
@ -580,12 +588,17 @@ void
clutter_behaviour_ellipse_set_height (ClutterBehaviourEllipse *self, clutter_behaviour_ellipse_set_height (ClutterBehaviourEllipse *self,
gint height) gint height)
{ {
if (self->priv->b != height >> 1) ClutterBehaviourEllipsePrivate *priv;
g_return_if_fail (CLUTTER_IS_BEHAVIOUR_ELLIPSE (self));
priv = self->priv;
if (priv->b != height >> 1)
{ {
g_object_ref (self); priv->b = height >> 1;
self->priv->b = height >> 1;
g_object_notify (G_OBJECT (self), "height"); g_object_notify (G_OBJECT (self), "height");
g_object_unref (self);
} }
} }
@ -602,6 +615,8 @@ clutter_behaviour_ellipse_set_height (ClutterBehaviourEllipse * self,
gint gint
clutter_behaviour_ellipse_get_height (ClutterBehaviourEllipse *self) clutter_behaviour_ellipse_get_height (ClutterBehaviourEllipse *self)
{ {
g_return_val_if_fail (CLUTTER_IS_BEHAVIOUR_ELLIPSE (self), 0);
return self->priv->b << 1; return self->priv->b << 1;
} }
@ -618,6 +633,8 @@ void
clutter_behaviour_ellipse_set_angle_begin (ClutterBehaviourEllipse *self, clutter_behaviour_ellipse_set_angle_begin (ClutterBehaviourEllipse *self,
gdouble angle_begin) gdouble angle_begin)
{ {
g_return_if_fail (CLUTTER_IS_BEHAVIOUR_ELLIPSE (self));
clutter_behaviour_ellipse_set_angle_beginx (self, clutter_behaviour_ellipse_set_angle_beginx (self,
CLUTTER_ANGLE_FROM_DEG (angle_begin)); CLUTTER_ANGLE_FROM_DEG (angle_begin));
} }
@ -635,12 +652,15 @@ void
clutter_behaviour_ellipse_set_angle_beginx (ClutterBehaviourEllipse *self, clutter_behaviour_ellipse_set_angle_beginx (ClutterBehaviourEllipse *self,
ClutterAngle angle_begin) ClutterAngle angle_begin)
{ {
if (self->priv->angle_begin != angle_begin) ClutterBehaviourEllipsePrivate *priv;
g_return_if_fail (CLUTTER_IS_BEHAVIOUR_ELLIPSE (self));
priv = self->priv;
if (priv->angle_begin != angle_begin)
{ {
g_object_ref (self); priv->angle_begin = angle_begin;
self->priv->angle_begin = angle_begin;
g_object_notify (G_OBJECT (self), "angle-begin"); g_object_notify (G_OBJECT (self), "angle-begin");
g_object_unref (self);
} }
} }
@ -657,6 +677,8 @@ clutter_behaviour_ellipse_set_angle_beginx (ClutterBehaviourEllipse * self,
gdouble gdouble
clutter_behaviour_ellipse_get_angle_begin (ClutterBehaviourEllipse *self) clutter_behaviour_ellipse_get_angle_begin (ClutterBehaviourEllipse *self)
{ {
g_return_val_if_fail (CLUTTER_IS_BEHAVIOUR_ELLIPSE (self), 0.0);
return CLUTTER_ANGLE_TO_DEG (self->priv->angle_begin); return CLUTTER_ANGLE_TO_DEG (self->priv->angle_begin);
} }
@ -673,6 +695,8 @@ clutter_behaviour_ellipse_get_angle_begin (ClutterBehaviourEllipse * self)
ClutterAngle ClutterAngle
clutter_behaviour_ellipse_get_angle_beginx (ClutterBehaviourEllipse *self) clutter_behaviour_ellipse_get_angle_beginx (ClutterBehaviourEllipse *self)
{ {
g_return_val_if_fail (CLUTTER_IS_BEHAVIOUR_ELLIPSE (self), 0);
return self->priv->angle_begin; return self->priv->angle_begin;
} }
@ -689,6 +713,8 @@ void
clutter_behaviour_ellipse_set_angle_end (ClutterBehaviourEllipse *self, clutter_behaviour_ellipse_set_angle_end (ClutterBehaviourEllipse *self,
gdouble angle_end) gdouble angle_end)
{ {
g_return_if_fail (CLUTTER_IS_BEHAVIOUR_ELLIPSE (self));
clutter_behaviour_ellipse_set_angle_endx (self, clutter_behaviour_ellipse_set_angle_endx (self,
CLUTTER_ANGLE_FROM_DEG (angle_end)); CLUTTER_ANGLE_FROM_DEG (angle_end));
} }
@ -706,12 +732,17 @@ void
clutter_behaviour_ellipse_set_angle_endx (ClutterBehaviourEllipse *self, clutter_behaviour_ellipse_set_angle_endx (ClutterBehaviourEllipse *self,
ClutterAngle angle_end) ClutterAngle angle_end)
{ {
if (self->priv->angle_end != angle_end) ClutterBehaviourEllipsePrivate *priv;
g_return_if_fail (CLUTTER_IS_BEHAVIOUR_ELLIPSE (self));
priv = self->priv;
if (priv->angle_end != angle_end)
{ {
g_object_ref (self); priv->angle_end = angle_end;
self->priv->angle_end = angle_end;
g_object_notify (G_OBJECT (self), "angle-end"); g_object_notify (G_OBJECT (self), "angle-end");
g_object_unref (self);
} }
} }
@ -728,6 +759,8 @@ clutter_behaviour_ellipse_set_angle_endx (ClutterBehaviourEllipse * self,
gdouble gdouble
clutter_behaviour_ellipse_get_angle_end (ClutterBehaviourEllipse *self) clutter_behaviour_ellipse_get_angle_end (ClutterBehaviourEllipse *self)
{ {
g_return_val_if_fail (CLUTTER_IS_BEHAVIOUR_ELLIPSE (self), 0.0);
return CLUTTER_ANGLE_TO_DEG (self->priv->angle_end); return CLUTTER_ANGLE_TO_DEG (self->priv->angle_end);
} }
@ -744,6 +777,8 @@ clutter_behaviour_ellipse_get_angle_end (ClutterBehaviourEllipse * self)
ClutterAngle ClutterAngle
clutter_behaviour_ellipse_get_angle_endx (ClutterBehaviourEllipse *self) clutter_behaviour_ellipse_get_angle_endx (ClutterBehaviourEllipse *self)
{ {
g_return_val_if_fail (CLUTTER_IS_BEHAVIOUR_ELLIPSE (self), 0);
return self->priv->angle_end; return self->priv->angle_end;
} }
@ -760,6 +795,8 @@ void
clutter_behaviour_ellipse_set_angle_tilt (ClutterBehaviourEllipse *self, clutter_behaviour_ellipse_set_angle_tilt (ClutterBehaviourEllipse *self,
gdouble angle_tilt) gdouble angle_tilt)
{ {
g_return_if_fail (CLUTTER_IS_BEHAVIOUR_ELLIPSE (self));
clutter_behaviour_ellipse_set_angle_tiltx (self, clutter_behaviour_ellipse_set_angle_tiltx (self,
CLUTTER_ANGLE_FROM_DEG (angle_tilt)); CLUTTER_ANGLE_FROM_DEG (angle_tilt));
} }
@ -777,12 +814,17 @@ void
clutter_behaviour_ellipse_set_angle_tiltx (ClutterBehaviourEllipse *self, clutter_behaviour_ellipse_set_angle_tiltx (ClutterBehaviourEllipse *self,
ClutterAngle angle_tilt) ClutterAngle angle_tilt)
{ {
if (self->priv->angle_tilt != angle_tilt) ClutterBehaviourEllipsePrivate *priv;
g_return_if_fail (CLUTTER_IS_BEHAVIOUR_ELLIPSE (self));
priv = self->priv;
if (priv->angle_tilt != angle_tilt)
{ {
g_object_ref (self); priv->angle_tilt = angle_tilt;
self->priv->angle_tilt = angle_tilt;
g_object_notify (G_OBJECT (self), "angle-tilt"); g_object_notify (G_OBJECT (self), "angle-tilt");
g_object_unref (self);
} }
} }
@ -799,6 +841,8 @@ clutter_behaviour_ellipse_set_angle_tiltx (ClutterBehaviourEllipse * self,
gdouble gdouble
clutter_behaviour_ellipse_get_angle_tilt (ClutterBehaviourEllipse *self) clutter_behaviour_ellipse_get_angle_tilt (ClutterBehaviourEllipse *self)
{ {
g_return_val_if_fail (CLUTTER_IS_BEHAVIOUR_ELLIPSE (self), 0.0);
return CLUTTER_ANGLE_TO_DEG (self->priv->angle_tilt); return CLUTTER_ANGLE_TO_DEG (self->priv->angle_tilt);
} }
@ -815,6 +859,8 @@ clutter_behaviour_ellipse_get_angle_tilt (ClutterBehaviourEllipse * self)
ClutterAngle ClutterAngle
clutter_behaviour_ellipse_get_angle_tiltx (ClutterBehaviourEllipse *self) clutter_behaviour_ellipse_get_angle_tiltx (ClutterBehaviourEllipse *self)
{ {
g_return_val_if_fail (CLUTTER_IS_BEHAVIOUR_ELLIPSE (self), 0);
return self->priv->angle_tilt; return self->priv->angle_tilt;
} }