diff --git a/clutter/clutter-actor.c b/clutter/clutter-actor.c index a1c4c6e2d..e3e5e09f9 100644 --- a/clutter/clutter-actor.c +++ b/clutter/clutter-actor.c @@ -4229,7 +4229,24 @@ clutter_actor_set_rotation_angle_internal (ClutterActor *self, clutter_actor_queue_redraw (self); } -static inline void +/** + * clutter_actor_set_rotation_angle: + * @self: a #ClutterActor + * @axis: the axis to set the angle one + * @angle: the angle of rotation, in degrees + * + * Sets the @angle of rotation of a #ClutterActor on the given @axis. + * + * This function is a convenience for setting the rotation properties + * #ClutterActor:rotation-angle-x, #ClutterActor:rotation-angle-y, + * and #ClutterActor:rotation-angle-z. + * + * The center of rotation is established by the #ClutterActor:pivot-point + * property. + * + * Since: 1.12 + */ +void clutter_actor_set_rotation_angle (ClutterActor *self, ClutterRotateAxis axis, gdouble angle) @@ -4238,6 +4255,8 @@ clutter_actor_set_rotation_angle (ClutterActor *self, const double *cur_angle_p = NULL; GParamSpec *pspec = NULL; + g_return_if_fail (CLUTTER_IS_ACTOR (self)); + info = _clutter_actor_get_transform_info_or_defaults (self); switch (axis) @@ -4269,6 +4288,51 @@ clutter_actor_set_rotation_angle (ClutterActor *self, clutter_actor_queue_redraw (self); } +/** + * clutter_actor_get_rotation_angle: + * @self: a #ClutterActor + * @axis: the axis of the rotation + * + * Retrieves the angle of rotation set by clutter_actor_set_rotation_angle(). + * + * Return value: the angle of rotation, in degrees + * + * Since: 1.12 + */ +gdouble +clutter_actor_get_rotation_angle (ClutterActor *self, + ClutterRotateAxis axis) +{ + const ClutterTransformInfo *info; + gdouble retval; + + g_return_val_if_fail (CLUTTER_IS_ACTOR (self), 0.0); + + info = _clutter_actor_get_transform_info_or_defaults (self); + + switch (axis) + { + case CLUTTER_X_AXIS: + retval = info->rx_angle; + break; + + case CLUTTER_Y_AXIS: + retval = info->ry_angle; + break; + + case CLUTTER_Z_AXIS: + retval = info->rz_angle; + break; + + default: + g_warn_if_reached (); + retval = 0.0; + break; + } + + return retval; +} + /*< private > * clutter_actor_set_rotation_center_internal: * @self: a #ClutterActor diff --git a/clutter/clutter-actor.h b/clutter/clutter-actor.h index 200ea9b42..b91875f0a 100644 --- a/clutter/clutter-actor.h +++ b/clutter/clutter-actor.h @@ -633,6 +633,13 @@ CLUTTER_AVAILABLE_IN_1_12 void clutter_actor_get_pivot_point (ClutterActor *self, gfloat *pivot_x, gfloat *pivot_y); +CLUTTER_AVAILABLE_IN_1_12 +void clutter_actor_set_rotation_angle (ClutterActor *self, + ClutterRotateAxis axis, + gdouble angle); +CLUTTER_AVAILABLE_IN_1_12 +gdouble clutter_actor_get_rotation_angle (ClutterActor *self, + ClutterRotateAxis axis); void clutter_actor_set_rotation (ClutterActor *self, ClutterRotateAxis axis, gdouble angle, diff --git a/clutter/clutter.symbols b/clutter/clutter.symbols index ec2bf5a88..a32a219b7 100644 --- a/clutter/clutter.symbols +++ b/clutter/clutter.symbols @@ -138,6 +138,7 @@ clutter_actor_get_preferred_width clutter_actor_get_previous_sibling clutter_actor_get_reactive clutter_actor_get_request_mode +clutter_actor_get_rotation_angle clutter_actor_get_rotation clutter_actor_get_scale clutter_actor_get_scale_center @@ -257,6 +258,7 @@ clutter_actor_set_pivot_point clutter_actor_set_position clutter_actor_set_reactive clutter_actor_set_request_mode +clutter_actor_set_rotation_angle clutter_actor_set_rotation clutter_actor_set_scale clutter_actor_set_scale_full