2007-07-24 Emmanuele Bassi <ebassi@openedhand.com>
* clutter/clutter-behaviour-rotate.[ch]: Add a center property for the center or rotation; implement the set_bounds() methods.
This commit is contained in:
parent
3db49c4f12
commit
403f0bdb2f
@ -1,3 +1,8 @@
|
|||||||
|
2007-07-24 Emmanuele Bassi <ebassi@openedhand.com>
|
||||||
|
|
||||||
|
* clutter/clutter-behaviour-rotate.[ch]: Add a center property
|
||||||
|
for the center or rotation; implement the set_bounds() methods.
|
||||||
|
|
||||||
2007-07-24 Emmanuele Bassi <ebassi@openedhand.com>
|
2007-07-24 Emmanuele Bassi <ebassi@openedhand.com>
|
||||||
|
|
||||||
* clutter/eglx/clutter-backend-egl.c:
|
* clutter/eglx/clutter-backend-egl.c:
|
||||||
|
@ -59,6 +59,7 @@ struct _ClutterBehaviourRotatePrivate
|
|||||||
|
|
||||||
ClutterRotateAxis axis;
|
ClutterRotateAxis axis;
|
||||||
ClutterRotateDirection direction;
|
ClutterRotateDirection direction;
|
||||||
|
ClutterKnot center;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define CLUTTER_BEHAVIOUR_ROTATE_GET_PRIVATE(obj) \
|
#define CLUTTER_BEHAVIOUR_ROTATE_GET_PRIVATE(obj) \
|
||||||
@ -73,7 +74,8 @@ enum
|
|||||||
PROP_ANGLE_BEGIN,
|
PROP_ANGLE_BEGIN,
|
||||||
PROP_ANGLE_END,
|
PROP_ANGLE_END,
|
||||||
PROP_AXIS,
|
PROP_AXIS,
|
||||||
PROP_DIRECTION
|
PROP_DIRECTION,
|
||||||
|
PROP_CENTER
|
||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -113,17 +115,17 @@ clutter_behaviour_rotate_alpha_notify (ClutterBehaviour *behaviour,
|
|||||||
case CLUTTER_X_AXIS:
|
case CLUTTER_X_AXIS:
|
||||||
clutter_actor_rotate_x (actor,
|
clutter_actor_rotate_x (actor,
|
||||||
CLUTTER_FIXED_TO_FLOAT (angle),
|
CLUTTER_FIXED_TO_FLOAT (angle),
|
||||||
0, 0);
|
priv->center.x, priv->center.y);
|
||||||
break;
|
break;
|
||||||
case CLUTTER_Y_AXIS:
|
case CLUTTER_Y_AXIS:
|
||||||
clutter_actor_rotate_y (actor,
|
clutter_actor_rotate_y (actor,
|
||||||
CLUTTER_FIXED_TO_FLOAT (angle),
|
CLUTTER_FIXED_TO_FLOAT (angle),
|
||||||
0, 0);
|
priv->center.x, priv->center.y);
|
||||||
break;
|
break;
|
||||||
case CLUTTER_Z_AXIS:
|
case CLUTTER_Z_AXIS:
|
||||||
clutter_actor_rotate_z (actor,
|
clutter_actor_rotate_z (actor,
|
||||||
CLUTTER_FIXED_TO_FLOAT (angle),
|
CLUTTER_FIXED_TO_FLOAT (angle),
|
||||||
0, 0);
|
priv->center.x, priv->center.y);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -136,9 +138,11 @@ clutter_behaviour_rotate_set_property (GObject *gobject,
|
|||||||
const GValue *value,
|
const GValue *value,
|
||||||
GParamSpec *pspec)
|
GParamSpec *pspec)
|
||||||
{
|
{
|
||||||
|
ClutterBehaviourRotate *rotate;
|
||||||
ClutterBehaviourRotatePrivate *priv;
|
ClutterBehaviourRotatePrivate *priv;
|
||||||
|
|
||||||
priv = CLUTTER_BEHAVIOUR_ROTATE (gobject)->priv;
|
rotate = CLUTTER_BEHAVIOUR_ROTATE (gobject);
|
||||||
|
priv = rotate->priv;
|
||||||
|
|
||||||
switch (prop_id)
|
switch (prop_id)
|
||||||
{
|
{
|
||||||
@ -154,6 +158,13 @@ clutter_behaviour_rotate_set_property (GObject *gobject,
|
|||||||
case PROP_DIRECTION:
|
case PROP_DIRECTION:
|
||||||
priv->direction = g_value_get_enum (value);
|
priv->direction = g_value_get_enum (value);
|
||||||
break;
|
break;
|
||||||
|
case PROP_CENTER:
|
||||||
|
{
|
||||||
|
ClutterKnot *knot = g_value_get_boxed (value);
|
||||||
|
if (knot)
|
||||||
|
clutter_behaviour_rotate_set_center (rotate, knot);
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
@ -184,6 +195,9 @@ clutter_behaviour_rotate_get_property (GObject *gobject,
|
|||||||
case PROP_DIRECTION:
|
case PROP_DIRECTION:
|
||||||
g_value_set_enum (value, priv->direction);
|
g_value_set_enum (value, priv->direction);
|
||||||
break;
|
break;
|
||||||
|
case PROP_CENTER:
|
||||||
|
g_value_set_boxed (value, &priv->center);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
@ -259,6 +273,21 @@ clutter_behaviour_rotate_class_init (ClutterBehaviourRotateClass *klass)
|
|||||||
CLUTTER_TYPE_ROTATE_DIRECTION,
|
CLUTTER_TYPE_ROTATE_DIRECTION,
|
||||||
CLUTTER_ROTATE_CW,
|
CLUTTER_ROTATE_CW,
|
||||||
CLUTTER_PARAM_READWRITE));
|
CLUTTER_PARAM_READWRITE));
|
||||||
|
/**
|
||||||
|
* ClutterBehaviourRotate:center:
|
||||||
|
*
|
||||||
|
* The center of rotation. The coordinates are relative to the plane normal
|
||||||
|
* to the axis of rotation.
|
||||||
|
*
|
||||||
|
* Since: 0.4
|
||||||
|
*/
|
||||||
|
g_object_class_install_property (gobject_class,
|
||||||
|
PROP_CENTER,
|
||||||
|
g_param_spec_boxed ("center",
|
||||||
|
"Center",
|
||||||
|
"Center of rotation",
|
||||||
|
CLUTTER_TYPE_KNOT,
|
||||||
|
CLUTTER_PARAM_READWRITE));
|
||||||
|
|
||||||
g_type_class_add_private (klass, sizeof (ClutterBehaviourRotatePrivate));
|
g_type_class_add_private (klass, sizeof (ClutterBehaviourRotatePrivate));
|
||||||
}
|
}
|
||||||
@ -271,9 +300,10 @@ clutter_behaviour_rotate_init (ClutterBehaviourRotate *rotate)
|
|||||||
rotate->priv = priv = CLUTTER_BEHAVIOUR_ROTATE_GET_PRIVATE (rotate);
|
rotate->priv = priv = CLUTTER_BEHAVIOUR_ROTATE_GET_PRIVATE (rotate);
|
||||||
|
|
||||||
priv->angle_begin = CLUTTER_FLOAT_TO_FIXED (0.0);
|
priv->angle_begin = CLUTTER_FLOAT_TO_FIXED (0.0);
|
||||||
priv->angle_end = CLUTTER_FLOAT_TO_FIXED (359.0);
|
priv->angle_end = CLUTTER_FLOAT_TO_FIXED (360.0);
|
||||||
priv->axis = CLUTTER_Z_AXIS;
|
priv->axis = CLUTTER_Z_AXIS;
|
||||||
priv->direction = CLUTTER_ROTATE_CW;
|
priv->direction = CLUTTER_ROTATE_CW;
|
||||||
|
priv->center.x = priv->center.y = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -472,19 +502,11 @@ clutter_behaviour_rotate_set_bounds (ClutterBehaviourRotate *rotate,
|
|||||||
gdouble angle_begin,
|
gdouble angle_begin,
|
||||||
gdouble angle_end)
|
gdouble angle_end)
|
||||||
{
|
{
|
||||||
#if 0
|
|
||||||
ClutterBehaviourRotatePrivate *priv;
|
|
||||||
|
|
||||||
g_return_if_fail (CLUTTER_IS_BEHAVIOUR_ROTATE (rotate));
|
g_return_if_fail (CLUTTER_IS_BEHAVIOUR_ROTATE (rotate));
|
||||||
|
|
||||||
priv = rotate->priv;
|
clutter_behaviour_rotate_set_boundsx (rotate,
|
||||||
|
CLUTTER_FLOAT_TO_FIXED (angle_begin),
|
||||||
g_object_ref (rotate);
|
CLUTTER_FLOAT_TO_FIXED (angle_end));
|
||||||
g_object_freeze_notify (G_OBJECT (rotate));
|
|
||||||
|
|
||||||
g_object_thaw_notify (G_OBJECT (rotate));
|
|
||||||
g_object_unref (rotate);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -521,7 +543,6 @@ clutter_behaviour_rotate_set_boundsx (ClutterBehaviourRotate *rotate,
|
|||||||
ClutterFixed angle_begin,
|
ClutterFixed angle_begin,
|
||||||
ClutterFixed angle_end)
|
ClutterFixed angle_end)
|
||||||
{
|
{
|
||||||
#if 0
|
|
||||||
ClutterBehaviourRotatePrivate *priv;
|
ClutterBehaviourRotatePrivate *priv;
|
||||||
|
|
||||||
g_return_if_fail (CLUTTER_IS_BEHAVIOUR_ROTATE (rotate));
|
g_return_if_fail (CLUTTER_IS_BEHAVIOUR_ROTATE (rotate));
|
||||||
@ -531,7 +552,75 @@ clutter_behaviour_rotate_set_boundsx (ClutterBehaviourRotate *rotate,
|
|||||||
g_object_ref (rotate);
|
g_object_ref (rotate);
|
||||||
g_object_freeze_notify (G_OBJECT (rotate));
|
g_object_freeze_notify (G_OBJECT (rotate));
|
||||||
|
|
||||||
|
if (priv->angle_begin != angle_begin)
|
||||||
|
{
|
||||||
|
priv->angle_begin = angle_begin;
|
||||||
|
|
||||||
|
g_object_notify (G_OBJECT (rotate), "angle-begin");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (priv->angle_end != angle_end)
|
||||||
|
{
|
||||||
|
priv->angle_end = angle_end;
|
||||||
|
|
||||||
|
g_object_notify (G_OBJECT (rotate), "angle-end");
|
||||||
|
}
|
||||||
|
|
||||||
g_object_thaw_notify (G_OBJECT (rotate));
|
g_object_thaw_notify (G_OBJECT (rotate));
|
||||||
g_object_unref (rotate);
|
g_object_unref (rotate);
|
||||||
#endif
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* clutter_behaviour_rotate_set_center:
|
||||||
|
* @rotate: a #ClutterBehaviourRotate
|
||||||
|
* @center: a #ClutterKnot
|
||||||
|
*
|
||||||
|
* Sets the center of rotation. The coordinates are relative to the plane
|
||||||
|
* normal to the rotation axis set with clutter_behaviour_rotate_set_axis().
|
||||||
|
*
|
||||||
|
* Since: 0.4
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
clutter_behaviour_rotate_set_center (ClutterBehaviourRotate *rotate,
|
||||||
|
const ClutterKnot *center)
|
||||||
|
{
|
||||||
|
ClutterBehaviourRotatePrivate *priv;
|
||||||
|
|
||||||
|
g_return_if_fail (CLUTTER_IS_BEHAVIOUR_ROTATE (rotate));
|
||||||
|
g_return_if_fail (center != NULL);
|
||||||
|
|
||||||
|
priv = rotate->priv;
|
||||||
|
|
||||||
|
if (priv->center.x != center->x || priv->center.y != center->y)
|
||||||
|
{
|
||||||
|
priv->center.x = center->x;
|
||||||
|
priv->center.y = center->y;
|
||||||
|
|
||||||
|
g_object_notify (G_OBJECT (rotate), "center");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* clutter_behaviour_rotate_get_center:
|
||||||
|
* @rotate: a #ClutterBehaviourRotate
|
||||||
|
* @center: return location for the center of rotation
|
||||||
|
*
|
||||||
|
* Retrieves the center of rotation set using
|
||||||
|
* clutter_behaviour_rotate_set_center().
|
||||||
|
*
|
||||||
|
* Since: 0.4
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
clutter_behaviour_rotate_get_center (ClutterBehaviourRotate *rotate,
|
||||||
|
ClutterKnot *center)
|
||||||
|
{
|
||||||
|
ClutterBehaviourRotatePrivate *priv;
|
||||||
|
|
||||||
|
g_return_if_fail (CLUTTER_IS_BEHAVIOUR_ROTATE (rotate));
|
||||||
|
g_return_if_fail (center != NULL);
|
||||||
|
|
||||||
|
priv = rotate->priv;
|
||||||
|
|
||||||
|
center->x = priv->center.x;
|
||||||
|
center->y = priv->center.y;
|
||||||
}
|
}
|
||||||
|
@ -79,6 +79,10 @@ ClutterBehaviour *clutter_behaviour_rotate_newx (ClutterAlpha *alpha,
|
|||||||
ClutterFixed angle_begin,
|
ClutterFixed angle_begin,
|
||||||
ClutterFixed angle_end);
|
ClutterFixed angle_end);
|
||||||
|
|
||||||
|
void clutter_behaviour_rotate_get_center (ClutterBehaviourRotate *rotate,
|
||||||
|
ClutterKnot *center);
|
||||||
|
void clutter_behaviour_rotate_set_center (ClutterBehaviourRotate *rotate,
|
||||||
|
const ClutterKnot *knot);
|
||||||
ClutterRotateAxis clutter_behaviour_rotate_get_axis (ClutterBehaviourRotate *rotate);
|
ClutterRotateAxis clutter_behaviour_rotate_get_axis (ClutterBehaviourRotate *rotate);
|
||||||
void clutter_behaviour_rotate_set_axis (ClutterBehaviourRotate *rotate,
|
void clutter_behaviour_rotate_set_axis (ClutterBehaviourRotate *rotate,
|
||||||
ClutterRotateAxis axis);
|
ClutterRotateAxis axis);
|
||||||
|
Loading…
Reference in New Issue
Block a user