2007-11-18 Emmanuele Bassi <ebassi@openedhand.com>

* clutter.symbols: Update exported symbols.

	* clutter/clutter-actor.[ch]: Remove clutter_actor_rotate_*
	and clutter_actor_get_rx* and provide a simpler rotation API:
	clutter_actor_set_rotation() and clutter_actor_get_rotation().

	* clutter/clutter-deprecated.h: Deprecate the old rotation API.

	* clutter/clutter-behaviour-bspline.c:
	* clutter/clutter-behaviour-rotate.c:
	* clutter/clutter-effect.c: Update internal usage of the
	rotation API.

	* tests/test-project.c: Ditto as above.
This commit is contained in:
Emmanuele Bassi 2007-11-18 15:36:04 +00:00
parent b7a79cf198
commit 7495848f14
9 changed files with 214 additions and 257 deletions

View File

@ -1,3 +1,20 @@
2007-11-18 Emmanuele Bassi <ebassi@openedhand.com>
* clutter.symbols: Update exported symbols.
* clutter/clutter-actor.[ch]: Remove clutter_actor_rotate_*
and clutter_actor_get_rx* and provide a simpler rotation API:
clutter_actor_set_rotation() and clutter_actor_get_rotation().
* clutter/clutter-deprecated.h: Deprecate the old rotation API.
* clutter/clutter-behaviour-bspline.c:
* clutter/clutter-behaviour-rotate.c:
* clutter/clutter-effect.c: Update internal usage of the
rotation API.
* tests/test-project.c: Ditto as above.
2007-11-17 Emmanuele Bassi <ebassi@openedhand.com>
Optimise Atoms usage in the X11 and X11-based backends.

View File

@ -26,18 +26,10 @@ clutter_actor_get_x
clutter_actor_set_x
clutter_actor_get_y
clutter_actor_set_y
clutter_actor_rotate_x
clutter_actor_rotate_y
clutter_actor_rotate_z
clutter_actor_rotate_xx
clutter_actor_rotate_yx
clutter_actor_rotate_zx
clutter_actor_get_rxang
clutter_actor_get_ryang
clutter_actor_get_rzang
clutter_actor_get_rxangx
clutter_actor_get_ryangx
clutter_actor_get_rzangx
clutter_actor_set_rotation
clutter_actor_set_rotationx
clutter_actor_get_rotation
clutter_actor_get_rotationx
clutter_actor_set_opacity
clutter_actor_get_opacity
clutter_actor_set_name
@ -221,7 +213,6 @@ clutter_container_remove_actor
clutter_container_remove_valist
clutter_container_get_children
clutter_container_foreach
clutter_container_find_child_by_id
clutter_container_find_child_by_name
clutter_container_raise_child
clutter_container_lower_child

View File

@ -2534,261 +2534,184 @@ clutter_actor_get_depth (ClutterActor *self)
}
/**
* clutter_actor_rotate_z:
* @self: A #ClutterActor
* @angle: Angle of rotation
* @x: X co-ord to rotate actor around ( relative to actor position )
* @y: Y co-ord to rotate actor around ( relative to actor position )
* clutter_actor_set_rotationx:
* @self: a #ClutterActor
* @angle: the angle of rotation
* @axis: the axis of rotation
* @x: X coordinate of the rotation center
* @y: Y coordinate of the rotation center
* @z: Z coordinate of the rotation center
*
* Rotates actor around the Z axis.
* Sets the rotation angle of @self around the given axis.
*
* This function is the fixed point variant of clutter_actor_set_rotation().
*
* Since: 0.6
*/
void
clutter_actor_rotate_z (ClutterActor *self,
gfloat angle,
clutter_actor_set_rotationx (ClutterActor *self,
ClutterFixed angle,
ClutterRotateAxis axis,
gint x,
gint y)
gint y,
gint z)
{
ClutterActorPrivate *priv;
g_return_if_fail (CLUTTER_IS_ACTOR (self));
self->priv->rzang = CLUTTER_FLOAT_TO_FIXED (angle);
self->priv->rzx = x;
self->priv->rzy = y;
priv = self->priv;
switch (axis)
{
case CLUTTER_X_AXIS:
priv->rxang = angle;
priv->rxy = y;
priv->rxz = z;
break;
case CLUTTER_Y_AXIS:
priv->ryang = angle;
priv->ryx = x;
priv->ryz = z;
break;
case CLUTTER_Z_AXIS:
priv->rzang = angle;
priv->rzx = x;
priv->rzy = y;
break;
}
if (CLUTTER_ACTOR_IS_VISIBLE (self))
clutter_actor_queue_redraw (self);
}
/**
* clutter_actor_rotate_x:
* @self: A #ClutterActor
* @angle: Angle of rotation
* @y: Y co-ord to rotate actor around ( relative to actor position )
* @z: Z co-ord to rotate actor around ( relative to actor position )
* clutter_actor_set_rotation:
* @self: a #ClutterActor
* @angle: the angle of rotation
* @axis: the axis of rotation
* @x: X coordinate of the rotation center
* @y: Y coordinate of the rotation center
* @z: Z coordinate of the rotation center
*
* Rotates actor around the X axis.
* Sets the rotation angle of @self around the given axis.
*
* The rotation center coordinates depend on the value of @axis:
* <itemizedlist>
* <listitem><para>%CLUTTER_X_AXIS requires @y and @z</para></listitem>
* <listitem><para>%CLUTTER_Y_AXIS requires @x and @z</para></listitem>
* <listitem><para>%CLUTTER_Z_AXIS requires @x and @y</para></listitem>
* </itemizedlist>
*
* Since: 0.6
*/
void
clutter_actor_rotate_x (ClutterActor *self,
gfloat angle,
clutter_actor_set_rotation (ClutterActor *self,
gdouble angle,
ClutterRotateAxis axis,
gint x,
gint y,
gint z)
{
g_return_if_fail (CLUTTER_IS_ACTOR (self));
self->priv->rxang = CLUTTER_FLOAT_TO_FIXED(angle);
self->priv->rxy = y;
self->priv->rxz = z;
if (CLUTTER_ACTOR_IS_VISIBLE (self))
clutter_actor_queue_redraw (self);
clutter_actor_set_rotationx (self, CLUTTER_FLOAT_TO_FIXED (angle),
axis,
x, y, z);
}
/**
* clutter_actor_rotate_y:
* @self: A #ClutterActor
* @angle: Angle of rotation
* @x: X co-ord to rotate actor around ( relative to actor position )
* @z: Z co-ord to rotate actor around ( relative to actor position )
* clutter_actor_get_rotationx:
* @self: a #ClutterActor
* @axis: the axis of rotation
* @x: return value for the X coordinate of the center of rotation
* @y: return value for the Y coordinate of the center of rotation
* @z: return value for the Z coordinate of the center of rotation
*
* Rotates actor around the X axis.
*/
void
clutter_actor_rotate_y (ClutterActor *self,
gfloat angle,
gint x,
gint z)
{
g_return_if_fail (CLUTTER_IS_ACTOR (self));
self->priv->ryang = CLUTTER_FLOAT_TO_FIXED(angle);
self->priv->ryx = x;
self->priv->ryz = z;
if (CLUTTER_ACTOR_IS_VISIBLE (self))
clutter_actor_queue_redraw (self);
}
/**
* clutter_actor_rotate_zx:
* @self: A #ClutterActor
* @angle: Angle of rotation
* @x: X co-ord to rotate actor around ( relative to actor position )
* @y: Y co-ord to rotate actor around ( relative to actor position )
* Retrieves the angle and center of rotation on the given axis,
* set using clutter_actor_set_rotation().
*
* Rotates actor around the Z axis.
*/
void
clutter_actor_rotate_zx (ClutterActor *self,
ClutterFixed angle,
gint x,
gint y)
{
g_return_if_fail (CLUTTER_IS_ACTOR (self));
self->priv->rzang = angle;
self->priv->rzx = x;
self->priv->rzy = y;
if (CLUTTER_ACTOR_IS_VISIBLE (self))
clutter_actor_queue_redraw (self);
}
/**
* clutter_actor_rotate_xx:
* @self: A #ClutterActor
* @angle: Angle of rotation
* @y: Y co-ord to rotate actor around ( relative to actor position )
* @z: Z co-ord to rotate actor around ( relative to actor position )
* This function is the fixed point variant of clutter_actor_get_rotation().
*
* Rotates actor around the X axis.
*/
void
clutter_actor_rotate_xx (ClutterActor *self,
ClutterFixed angle,
gint y,
gint z)
{
g_return_if_fail (CLUTTER_IS_ACTOR (self));
self->priv->rxang = angle;
self->priv->rxy = y;
self->priv->rxz = z;
if (CLUTTER_ACTOR_IS_VISIBLE (self))
clutter_actor_queue_redraw (self);
}
/**
* clutter_actor_rotate_yx:
* @self: A #ClutterActor
* @angle: Angle of rotation
* @x: X co-ord to rotate actor around ( relative to actor position )
* @z: Z co-ord to rotate actor around ( relative to actor position )
* Return value: the angle of rotation as a fixed point value.
*
* Rotates actor around the X axis.
*/
void
clutter_actor_rotate_yx (ClutterActor *self,
ClutterFixed angle,
gint x,
gint z)
{
g_return_if_fail (CLUTTER_IS_ACTOR (self));
self->priv->ryang = angle;
self->priv->ryx = x;
self->priv->ryz = z;
if (CLUTTER_ACTOR_IS_VISIBLE (self))
clutter_actor_queue_redraw (self);
}
/**
* clutter_actor_get_rxangx:
* @self: A #ClutterActor
*
* Gets the angle of rotation around the X axis.
*
* Returns: the angle or rotation, as a fixed point value
*
* Since: 0.4
* Since: 0.6
*/
ClutterFixed
clutter_actor_get_rxangx (ClutterActor *self)
clutter_actor_get_rotationx (ClutterActor *self,
ClutterRotateAxis axis,
gint *x,
gint *y,
gint *z)
{
ClutterActorPrivate *priv;
ClutterFixed retval = 0;
g_return_val_if_fail (CLUTTER_IS_ACTOR (self), 0);
return self->priv->rxang;
priv = self->priv;
switch (axis)
{
case CLUTTER_X_AXIS:
retval = priv->rxang;
if (y)
*y = priv->rxy;
if (z)
*z = priv->rxz;
break;
case CLUTTER_Y_AXIS:
retval = priv->ryang;
if (x)
*x = priv->ryx;
if (z)
*z = priv->ryz;
break;
case CLUTTER_Z_AXIS:
retval = priv->rzang;
if (x)
*x = priv->rzx;
if (y)
*y = priv->rzy;
break;
}
return retval;
}
/**
* clutter_actor_get_rxang:
* clutter_actor_get_rotation:
* @self: a #ClutterActor
* @axis: the axis of rotation
* @x: return value for the X coordinate of the center of rotation
* @y: return value for the Y coordinate of the center of rotation
* @z: return value for the Z coordinate of the center of rotation
*
* Gets the angle of rotation around the X axis.
* Retrieves the angle and center of rotation on the given axis,
* set using clutter_actor_set_angle().
*
* Return value: the angle of rotation
* The coordinates of the center depend on the axis used.
*
* Since: 0.4
* Return value: the angle of rotation.
*
* Since: 0.6
*/
gdouble
clutter_actor_get_rxang (ClutterActor *self)
clutter_actor_get_rotation (ClutterActor *self,
ClutterRotateAxis axis,
gint *x,
gint *y,
gint *z)
{
g_return_val_if_fail (CLUTTER_IS_ACTOR (self), 0.);
g_return_val_if_fail (CLUTTER_IS_ACTOR (self), 0.0);
return CLUTTER_FIXED_TO_FLOAT (self->priv->rxang);
}
/**
* clutter_actor_get_ryangx:
* @self: A #ClutterActor
*
* Gets the angle of rotation around the Y axis.
*
* Return value: the angle of rotation, as a fixed point value
*
* Since: 0.4
*/
ClutterFixed
clutter_actor_get_ryangx (ClutterActor *self)
{
g_return_val_if_fail (CLUTTER_IS_ACTOR (self), 0);
return self->priv->ryang;
}
/**
* clutter_actor_get_ryang:
* @self: a #ClutterActor
*
* Gets the angle of rotation around the Y axis.
*
* Return value: the angle of rotation
*
* Since: 0.4
*/
gdouble
clutter_actor_get_ryang (ClutterActor *self)
{
g_return_val_if_fail (CLUTTER_IS_ACTOR (self), 0.);
return CLUTTER_FIXED_TO_FLOAT (self->priv->ryang);
}
/**
* clutter_actor_get_rzangx:
* @self: A #ClutterActor
*
* Gets the angle of rotation around x axis in degrees.
*
* Return value: the angle of rotation, as a fixed point value
*
* Since: 0.4
*/
ClutterFixed
clutter_actor_get_rzangx (ClutterActor *self)
{
g_return_val_if_fail (CLUTTER_IS_ACTOR (self), 0);
return self->priv->rzang;
}
/**
* clutter_actor_get_rzang:
* @self: a #ClutterActor
*
* Gets the angle of rotation around the Z axis.
*
* Return value: the angle of rotation
*
* Since: 0.4
*/
gdouble
clutter_actor_get_rzang (ClutterActor *self)
{
g_return_val_if_fail (CLUTTER_IS_ACTOR (self), 0.);
return CLUTTER_FIXED_TO_FLOAT (self->priv->rzang);
return CLUTTER_FIXED_TO_FLOAT (clutter_actor_get_rotationx (self,
axis,
x, y, z));
}
/**

View File

@ -273,6 +273,27 @@ void clutter_actor_set_x (ClutterActor *sel
void clutter_actor_set_y (ClutterActor *self,
gint y);
void clutter_actor_set_rotation (ClutterActor *self,
gdouble angle,
ClutterRotateAxis axis,
gint x,
gint y,
gint z);void clutter_actor_set_rotationx (ClutterActor *self,
ClutterFixed fixed,
ClutterRotateAxis axis,
gint x,
gint y,
gint z);
gdouble clutter_actor_get_rotation (ClutterActor *self,
ClutterRotateAxis axis,
gint *x,
gint *y,
gint *z);
ClutterFixed clutter_actor_get_rotationx (ClutterActor *self,
ClutterRotateAxis axis,
gint *x,
gint *y,
gint *z);
void clutter_actor_rotate_x (ClutterActor *self,
gfloat angle,
gint y,

View File

@ -35,7 +35,7 @@
* control points given when creating a new #ClutterBehaviourBspline instance.
*
* Additional bezier curves can be added to the end of the bspline using
* clutter_behaviour_bspline_append() family of functions, control points can
* clutter_behaviour_bspline_append_* family of functions, control points can
* be moved using clutter_behaviour_bspline_adjust(). The bspline can be split
* into two with clutter_behaviour_bspline_split(), and bsplines can be
* concatenated using clutter_behaviour_bspline_join().
@ -725,7 +725,7 @@ clutter_scriptable_iface_init (ClutterScriptableIface *iface)
*
* Bspline is defined by 3n + 1 points, n >=1; any trailing points passed
* into this function are stored internally and used during any subsequent
* clutter_behaviour_bspline_append() operations.
* clutter_behaviour_bspline_append_* operations.
*
* Return value: a #ClutterBehaviour
*
@ -860,7 +860,7 @@ clutter_behaviour_bspline_append_knots_valist (ClutterBehaviourBspline *bs,
}
/**
* clutter_behaviour_bspline_append_knots
* clutter_behaviour_bspline_append_knots:
* @bs: a #ClutterBehaviourBspline
* @first_knot: first #ClutterKnot
* @VarArgs: a NULL-terminated array of #ClutterKnot control points.

View File

@ -88,33 +88,18 @@ alpha_notify_foreach (ClutterBehaviour *behaviour,
ClutterActor *actor,
gpointer data)
{
ClutterFixed angle;
ClutterFixed angle = GPOINTER_TO_UINT (data);
ClutterBehaviourRotate *rotate_behaviour;
ClutterBehaviourRotatePrivate *priv;
rotate_behaviour = CLUTTER_BEHAVIOUR_ROTATE (behaviour);
priv = rotate_behaviour->priv;
angle = GPOINTER_TO_UINT(data);
switch (priv->axis)
{
case CLUTTER_X_AXIS:
clutter_actor_rotate_xx (actor,
angle,
priv->center_y, priv->center_z);
break;
case CLUTTER_Y_AXIS:
clutter_actor_rotate_yx (actor,
angle,
priv->center_x, priv->center_z);
break;
case CLUTTER_Z_AXIS:
clutter_actor_rotate_zx (actor,
angle,
priv->center_x, priv->center_y);
break;
}
clutter_actor_set_rotationx (actor, angle,
priv->axis,
priv->center_x,
priv->center_y,
priv->center_z);
}
static void

View File

@ -8,7 +8,7 @@
*
* Functions that are simply renamed should give errors containing
* _REPLACED_BY_ whilst functions that are deprecated by new functions with
* new * functionality should giver errors containing _DEPRECATED_BY_.
* new functionality should giver errors containing _DEPRECATED_BY_.
*/
#define clutter_behaviour_ellipse_set_angle_begin clutter_behaviour_ellipse_set_angle_begin_REPLACED_BY_clutter_behaviour_set_angle_start
@ -16,6 +16,20 @@
#define clutter_behaviour_ellipse_get_angle_begin clutter_behaviour_ellipse_get_angle_begin_REPLACED_BY_clutter_behaviour_get_angle_start
#define clutter_behaviour_ellipse_get_angle_beginx clutter_behaviour_ellipse_get_angle_beginx_REPLACED_BY_clutter_behaviour_get_angle_startx
#define clutter_behaviour_bspline_append clutter_behaviour_bspline_append_REPLACED_BY_clutter_behaviour_bspline_append_knots
#define clutter_actor_get_id clutter_actor_get_id_REPLACED_BY_clutter_actor_get_gid
#define clutter_actor_rotate_x clutter_actor_rotate_x_DEPRECATED_BY_clutter_actor_set_rotation
#define clutter_actor_rotate_y clutter_actor_rotate_y_DEPRECATED_BY_clutter_actor_set_rotation
#define clutter_actor_rotate_z clutter_actor_rotate_z_DEPRECATED_BY_clutter_actor_set_rotation
#define clutter_actor_rotate_xx clutter_actor_rotate_xx_DEPRECATED_BY_clutter_actor_set_rotationx
#define clutter_actor_rotate_yx clutter_actor_rotate_yx_DEPRECATED_BY_clutter_actor_set_rotationx
#define clutter_actor_rotate_zx clutter_actor_rotate_zx_DEPRECATED_BY_clutter_actor_set_rotationx
#define clutter_actor_get_rxang clutter_actor_get_rxang_DEPRECATED_BY_clutter_actor_get_rotation
#define clutter_actor_get_ryang clutter_actor_get_ryang_DEPRECATED_BY_clutter_actor_get_rotation
#define clutter_actor_get_rzang clutter_actor_get_rzang_DEPRECATED_BY_clutter_actor_get_rotation
#define clutter_actor_get_rxangx clutter_actor_get_rxangx_DEPRECATED_BY_clutter_actor_get_rotationx
#define clutter_actor_get_ryangx clutter_actor_get_ryangx_DEPRECATED_BY_clutter_actor_get_rotationx
#define clutter_actor_get_rzangx clutter_actor_get_rzangx_DEPRECATED_BY_clutter_actor_get_rotationx
#endif /* CLUTTER_DEPRECATED_H */

View File

@ -743,7 +743,9 @@ clutter_effect_rotate_x (ClutterEffectTemplate *template_,
c->completed_data = completed_data;
clutter_actor_rotate_x (actor, angle_start, center_y, center_y);
clutter_actor_set_rotation (actor, angle_start,
CLUTTER_X_AXIS,
0, center_y, center_z);
c->behave = clutter_behaviour_rotate_new (c->alpha,
CLUTTER_X_AXIS,
@ -803,7 +805,9 @@ clutter_effect_rotate_y (ClutterEffectTemplate *template_,
c->completed_data = completed_data;
clutter_actor_rotate_y (actor, angle_start, center_x, center_z);
clutter_actor_set_rotation (actor, angle_start,
CLUTTER_Y_AXIS,
center_x, 0, center_z);
c->behave = clutter_behaviour_rotate_new (c->alpha,
CLUTTER_Y_AXIS,
@ -863,7 +867,9 @@ clutter_effect_rotate_z (ClutterEffectTemplate *template_,
c->completed_data = completed_data;
clutter_actor_rotate_z (actor, angle_start, center_x, center_y);
clutter_actor_set_rotation (actor, angle_start,
CLUTTER_Z_AXIS,
center_x, center_y, 0);
c->behave = clutter_behaviour_rotate_new (c->alpha,
CLUTTER_Z_AXIS,

View File

@ -216,7 +216,7 @@ main (int argc, char *argv[])
rect = clutter_rectangle_new_with_color (&white);
clutter_actor_set_size (rect, 320, 240);
clutter_actor_set_position (rect, 180, 120);
clutter_actor_rotate_y (rect, 60, 0, 0);
clutter_actor_set_rotation (rect, 60, CLUTTER_Y_AXIS, 0, 0, 0);
clutter_group_add (CLUTTER_GROUP (main_stage), rect);
label = clutter_label_new_with_text ("Mono 8pt", "Drag the blue rectangles");