clutter/actor: Remove anchor points and gravity

Drop the bomb.

https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1332
This commit is contained in:
Georges Basile Stavracas Neto 2020-06-26 19:18:14 -03:00 committed by Robert Mader
parent dbce29a0ae
commit 7146a6dddb
12 changed files with 16 additions and 732 deletions

View File

@ -110,35 +110,12 @@ typedef ClutterActorTraverseVisitFlags (*ClutterTraverseCallback) (ClutterActor
typedef gboolean (*ClutterForeachCallback) (ClutterActor *actor, typedef gboolean (*ClutterForeachCallback) (ClutterActor *actor,
gpointer user_data); gpointer user_data);
typedef struct _AnchorCoord AnchorCoord;
typedef struct _SizeRequest SizeRequest; typedef struct _SizeRequest SizeRequest;
typedef struct _ClutterLayoutInfo ClutterLayoutInfo; typedef struct _ClutterLayoutInfo ClutterLayoutInfo;
typedef struct _ClutterTransformInfo ClutterTransformInfo; typedef struct _ClutterTransformInfo ClutterTransformInfo;
typedef struct _ClutterAnimationInfo ClutterAnimationInfo; typedef struct _ClutterAnimationInfo ClutterAnimationInfo;
/* Internal helper struct to represent a point that can be stored in
either direct pixel coordinates or as a fraction of the actor's
size. It is used for the anchor point, scale center and rotation
centers. */
struct _AnchorCoord
{
gboolean is_fractional;
union
{
/* Used when is_fractional == TRUE */
struct
{
gdouble x;
gdouble y;
} fraction;
/* Use when is_fractional == FALSE */
graphene_point3d_t units;
} v;
};
struct _SizeRequest struct _SizeRequest
{ {
guint age; guint age;
@ -193,9 +170,6 @@ struct _ClutterTransformInfo
gdouble scale_y; gdouble scale_y;
gdouble scale_z; gdouble scale_z;
/* anchor point */
AnchorCoord anchor;
/* translation */ /* translation */
graphene_point3d_t translation; graphene_point3d_t translation;

View File

@ -43,8 +43,7 @@
* 5. rotation around the #ClutterActor:rotation-angle-x and #ClutterActor:rotation-center-x * 5. rotation around the #ClutterActor:rotation-angle-x and #ClutterActor:rotation-center-x
* 6. rotation around the #ClutterActor:rotation-angle-y and #ClutterActor:rotation-center-y * 6. rotation around the #ClutterActor:rotation-angle-y and #ClutterActor:rotation-center-y
* 7. rotation around the #ClutterActor:rotation-angle-z and #ClutterActor:rotation-center-z * 7. rotation around the #ClutterActor:rotation-angle-z and #ClutterActor:rotation-center-z
* 8. negative translation by the #ClutterActor:anchor-x and #ClutterActor:anchor-y point. * 8. negative translation by the actor's #ClutterActor:pivot-point
* 9. negative translation by the actor's #ClutterActor:pivot-point
* *
* ## Modifying an actor's geometry ## {#clutter-actor-geometry} * ## Modifying an actor's geometry ## {#clutter-actor-geometry}
* *
@ -657,7 +656,6 @@
#include "clutter-transition.h" #include "clutter-transition.h"
#include "clutter-units.h" #include "clutter-units.h"
#include "deprecated/clutter-actor.h"
#include "deprecated/clutter-container.h" #include "deprecated/clutter-container.h"
/* Internal enum used to control mapped state update. This is a hint /* Internal enum used to control mapped state update. This is a hint
@ -932,10 +930,6 @@ enum
PROP_ROTATION_ANGLE_Y, /* XXX:2.0 rename to rotation-y */ PROP_ROTATION_ANGLE_Y, /* XXX:2.0 rename to rotation-y */
PROP_ROTATION_ANGLE_Z, /* XXX:2.0 rename to rotation-z */ PROP_ROTATION_ANGLE_Z, /* XXX:2.0 rename to rotation-z */
PROP_ANCHOR_X, /* XXX:2.0 remove */
PROP_ANCHOR_Y, /* XXX:2.0 remove */
PROP_ANCHOR_GRAVITY, /*XXX:2.0 remove */
PROP_TRANSLATION_X, PROP_TRANSLATION_X,
PROP_TRANSLATION_Y, PROP_TRANSLATION_Y,
PROP_TRANSLATION_Z, PROP_TRANSLATION_Z,
@ -1054,23 +1048,6 @@ static void clutter_actor_update_map_state (ClutterActor *self,
MapStateChange change); MapStateChange change);
static void clutter_actor_unrealize_not_hiding (ClutterActor *self); static void clutter_actor_unrealize_not_hiding (ClutterActor *self);
/* Helper routines for managing anchor coords */
static void clutter_anchor_coord_get_units (ClutterActor *self,
const AnchorCoord *coord,
gfloat *x,
gfloat *y,
gfloat *z);
static void clutter_anchor_coord_set_units (AnchorCoord *coord,
gfloat x,
gfloat y,
gfloat z);
static ClutterGravity clutter_anchor_coord_get_gravity (const AnchorCoord *coord);
static void clutter_anchor_coord_set_gravity (AnchorCoord *coord,
ClutterGravity gravity);
static gboolean clutter_anchor_coord_is_zero (const AnchorCoord *coord);
static void _clutter_actor_get_relative_transformation_matrix (ClutterActor *self, static void _clutter_actor_get_relative_transformation_matrix (ClutterActor *self,
ClutterActor *ancestor, ClutterActor *ancestor,
CoglMatrix *matrix); CoglMatrix *matrix);
@ -3148,15 +3125,6 @@ clutter_actor_real_apply_transform (ClutterActor *self,
if (info->rx_angle) if (info->rx_angle)
cogl_matrix_rotate (transform, info->rx_angle, 1.0, 0, 0); cogl_matrix_rotate (transform, info->rx_angle, 1.0, 0, 0);
/* XXX:2.0 remove anchor point translation */
if (!clutter_anchor_coord_is_zero (&info->anchor))
{
gfloat x, y, z;
clutter_anchor_coord_get_units (self, &info->anchor, &x, &y, &z);
cogl_matrix_translate (transform, -x, -y, -z);
}
roll_back_pivot: roll_back_pivot:
/* roll back the pivot translation */ /* roll back the pivot translation */
if (pivot_x != 0.f || pivot_y != 0.f || info->pivot_z != 0.f) if (pivot_x != 0.f || pivot_y != 0.f || info->pivot_z != 0.f)
@ -4411,8 +4379,6 @@ static const ClutterTransformInfo default_transform_info = {
1.0, 1.0, 1.0, /* scale */ 1.0, 1.0, 1.0, /* scale */
{ 0, }, /* anchor XXX:2.0 - remove*/
GRAPHENE_POINT3D_INIT_ZERO, /* translation */ GRAPHENE_POINT3D_INIT_ZERO, /* translation */
0.f, /* z-position */ 0.f, /* z-position */
@ -4852,57 +4818,6 @@ clutter_actor_set_scale_factor (ClutterActor *self,
_clutter_actor_create_transition (self, pspec, *scale_p, factor); _clutter_actor_create_transition (self, pspec, *scale_p, factor);
} }
/* XXX:2.0 - remove */
static inline void
clutter_actor_set_anchor_coord (ClutterActor *self,
ClutterRotateAxis axis,
gfloat coord)
{
GObject *obj = G_OBJECT (self);
ClutterTransformInfo *info;
gfloat anchor_x, anchor_y;
info = _clutter_actor_get_transform_info (self);
g_object_freeze_notify (obj);
clutter_anchor_coord_get_units (self, &info->anchor,
&anchor_x,
&anchor_y,
NULL);
if (info->anchor.is_fractional)
g_object_notify_by_pspec (obj, obj_props[PROP_ANCHOR_GRAVITY]);
switch (axis)
{
case CLUTTER_X_AXIS:
clutter_anchor_coord_set_units (&info->anchor,
coord,
anchor_y,
0.0);
g_object_notify_by_pspec (obj, obj_props[PROP_ANCHOR_X]);
break;
case CLUTTER_Y_AXIS:
clutter_anchor_coord_set_units (&info->anchor,
anchor_x,
coord,
0.0);
g_object_notify_by_pspec (obj, obj_props[PROP_ANCHOR_Y]);
break;
default:
g_assert_not_reached ();
}
self->priv->transform_valid = FALSE;
clutter_actor_queue_redraw (self);
g_object_thaw_notify (obj);
}
static void static void
clutter_actor_set_clip_rect (ClutterActor *self, clutter_actor_set_clip_rect (ClutterActor *self,
const graphene_rect_t *clip) const graphene_rect_t *clip)
@ -5119,21 +5034,6 @@ clutter_actor_set_property (GObject *object,
g_value_get_double (value)); g_value_get_double (value));
break; break;
case PROP_ANCHOR_X: /* XXX:2.0 - remove */
clutter_actor_set_anchor_coord (actor, CLUTTER_X_AXIS,
g_value_get_float (value));
break;
case PROP_ANCHOR_Y: /* XXX:2.0 - remove */
clutter_actor_set_anchor_coord (actor, CLUTTER_Y_AXIS,
g_value_get_float (value));
break;
case PROP_ANCHOR_GRAVITY: /* XXX:2.0 - remove */
clutter_actor_set_anchor_point_from_gravity (actor,
g_value_get_enum (value));
break;
case PROP_TRANSFORM: case PROP_TRANSFORM:
clutter_actor_set_transform (actor, g_value_get_boxed (value)); clutter_actor_set_transform (actor, g_value_get_boxed (value));
break; break;
@ -5516,38 +5416,6 @@ clutter_actor_get_property (GObject *object,
} }
break; break;
case PROP_ANCHOR_X: /* XXX:2.0 - remove */
{
const ClutterTransformInfo *info;
gfloat anchor_x;
info = _clutter_actor_get_transform_info_or_defaults (actor);
clutter_anchor_coord_get_units (actor, &info->anchor,
&anchor_x,
NULL,
NULL);
g_value_set_float (value, anchor_x);
}
break;
case PROP_ANCHOR_Y: /* XXX:2.0 - remove */
{
const ClutterTransformInfo *info;
gfloat anchor_y;
info = _clutter_actor_get_transform_info_or_defaults (actor);
clutter_anchor_coord_get_units (actor, &info->anchor,
NULL,
&anchor_y,
NULL);
g_value_set_float (value, anchor_y);
}
break;
case PROP_ANCHOR_GRAVITY: /* XXX:2.0 - remove */
g_value_set_enum (value, clutter_actor_get_anchor_point_gravity (actor));
break;
case PROP_TRANSFORM: case PROP_TRANSFORM:
{ {
ClutterMatrix m; ClutterMatrix m;
@ -6880,92 +6748,6 @@ clutter_actor_class_init (ClutterActorClass *klass)
G_PARAM_STATIC_STRINGS | G_PARAM_STATIC_STRINGS |
CLUTTER_PARAM_ANIMATABLE); CLUTTER_PARAM_ANIMATABLE);
/**
* ClutterActor:anchor-x:
*
* The X coordinate of an actor's anchor point, relative to
* the actor coordinate space, in pixels.
*
* It is highly recommended not to use #ClutterActor:anchor-x,
* #ClutterActor:anchor-y, and #ClutterActor:anchor-gravity in newly
* written code; the anchor point adds an additional translation that
* will affect the actor's relative position with regards to its
* parent, as well as the position of its children. This change needs
* to always be taken into account when positioning the actor. It is
* recommended to use the #ClutterActor:pivot-point property instead,
* as it will affect only the transformations.
*
* Since: 0.8
*
* Deprecated: 1.12: Use #ClutterActor:pivot-point instead
*/
obj_props[PROP_ANCHOR_X] = /* XXX:2.0 - remove */
g_param_spec_float ("anchor-x",
P_("Anchor X"),
P_("X coordinate of the anchor point"),
-G_MAXFLOAT, G_MAXFLOAT,
0,
G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS |
G_PARAM_DEPRECATED);
/**
* ClutterActor:anchor-y:
*
* The Y coordinate of an actor's anchor point, relative to
* the actor coordinate space, in pixels
*
* It is highly recommended not to use #ClutterActor:anchor-x,
* #ClutterActor:anchor-y, and #ClutterActor:anchor-gravity in newly
* written code; the anchor point adds an additional translation that
* will affect the actor's relative position with regards to its
* parent, as well as the position of its children. This change needs
* to always be taken into account when positioning the actor. It is
* recommended to use the #ClutterActor:pivot-point property instead,
* as it will affect only the transformations.
*
* Since: 0.8
*
* Deprecated: 1.12: Use #ClutterActor:pivot-point instead
*/
obj_props[PROP_ANCHOR_Y] = /* XXX:2.0 - remove */
g_param_spec_float ("anchor-y",
P_("Anchor Y"),
P_("Y coordinate of the anchor point"),
-G_MAXFLOAT, G_MAXFLOAT,
0,
G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS |
G_PARAM_DEPRECATED);
/**
* ClutterActor:anchor-gravity:
*
* The anchor point expressed as a #ClutterGravity
*
* It is highly recommended not to use #ClutterActor:anchor-x,
* #ClutterActor:anchor-y, and #ClutterActor:anchor-gravity in newly
* written code; the anchor point adds an additional translation that
* will affect the actor's relative position with regards to its
* parent, as well as the position of its children. This change needs
* to always be taken into account when positioning the actor. It is
* recommended to use the #ClutterActor:pivot-point property instead,
* as it will affect only the transformations.
*
* Since: 1.0
*
* Deprecated: 1.12: Use #ClutterActor:pivot-point instead
*/
obj_props[PROP_ANCHOR_GRAVITY] = /* XXX:2.0 - remove */
g_param_spec_enum ("anchor-gravity",
P_("Anchor Gravity"),
P_("The anchor point as a ClutterGravity"),
CLUTTER_TYPE_GRAVITY,
CLUTTER_GRAVITY_NONE,
G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS |
G_PARAM_DEPRECATED);
/** /**
* ClutterActor:translation-x: * ClutterActor:translation-x:
* *
@ -9126,7 +8908,7 @@ clutter_actor_update_preferred_size_for_constraints (ClutterActor *self,
* An actor may not get its request - depending on the layout * An actor may not get its request - depending on the layout
* manager that's in effect. * manager that's in effect.
* *
* A request should not incorporate the actor's scale or anchor point; * A request should not incorporate the actor's scaleor translation;
* those transformations do not affect layout, only rendering. * those transformations do not affect layout, only rendering.
* *
* Since: 0.8 * Since: 0.8
@ -9291,7 +9073,7 @@ clutter_actor_get_preferred_width (ClutterActor *self,
* An actor may not get its request - depending on the layout * An actor may not get its request - depending on the layout
* manager that's in effect. * manager that's in effect.
* *
* A request should not incorporate the actor's scale or anchor point; * A request should not incorporate the actor's scale or translation;
* those transformations do not affect layout, only rendering. * those transformations do not affect layout, only rendering.
* *
* Since: 0.8 * Since: 0.8
@ -9448,7 +9230,7 @@ clutter_actor_get_preferred_height (ClutterActor *self,
* only be assumed valid inside a paint() method; anywhere else, it * only be assumed valid inside a paint() method; anywhere else, it
* may be out-of-date. * may be out-of-date.
* *
* An allocation does not incorporate the actor's scale or anchor point; * An allocation does not incorporate the actor's scale or translation;
* those transformations do not affect layout, only rendering. * those transformations do not affect layout, only rendering.
* *
* Do not call any of the clutter_actor_get_allocation_*() family * Do not call any of the clutter_actor_get_allocation_*() family
@ -9957,8 +9739,7 @@ clutter_actor_set_fixed_position_set (ClutterActor *self,
* *
* This function modifies the fixed position of an actor and thus removes * This function modifies the fixed position of an actor and thus removes
* it from any layout management. Another way to move an actor is with an * it from any layout management. Another way to move an actor is with an
* anchor point, see clutter_actor_set_anchor_point(), or with an additional * additional translation, using clutter_actor_set_translation().
* translation, using clutter_actor_set_translation().
* *
* Since: 0.2 * Since: 0.2
*/ */
@ -11570,8 +11351,7 @@ clutter_actor_get_pivot_point_z (ClutterActor *self)
* @height: Height of the clip rectangle * @height: Height of the clip rectangle
* *
* Sets clip area for @self. The clip area is always computed from the * Sets clip area for @self. The clip area is always computed from the
* upper left corner of the actor, even if the anchor point is set * upper left corner of the actor.
* otherwise.
* *
* Since: 0.6 * Since: 0.6
*/ */
@ -12913,242 +12693,6 @@ clutter_actor_get_reactive (ClutterActor *actor)
return CLUTTER_ACTOR_IS_REACTIVE (actor) ? TRUE : FALSE; return CLUTTER_ACTOR_IS_REACTIVE (actor) ? TRUE : FALSE;
} }
/**
* clutter_actor_set_anchor_point:
* @self: a #ClutterActor
* @anchor_x: X coordinate of the anchor point
* @anchor_y: Y coordinate of the anchor point
*
* Sets an anchor point for @self. The anchor point is a point in the
* coordinate space of an actor to which the actor position within its
* parent is relative; the default is (0, 0), i.e. the top-left corner
* of the actor.
*
* Since: 0.6
*
* Deprecated: 1.12: Use #ClutterActor:pivot-point instead.
*/
void
clutter_actor_set_anchor_point (ClutterActor *self,
gfloat anchor_x,
gfloat anchor_y)
{
ClutterTransformInfo *info;
ClutterActorPrivate *priv;
gboolean changed = FALSE;
gfloat old_anchor_x, old_anchor_y;
GObject *obj;
g_return_if_fail (CLUTTER_IS_ACTOR (self));
obj = G_OBJECT (self);
priv = self->priv;
info = _clutter_actor_get_transform_info (self);
g_object_freeze_notify (obj);
clutter_anchor_coord_get_units (self, &info->anchor,
&old_anchor_x,
&old_anchor_y,
NULL);
if (info->anchor.is_fractional)
g_object_notify_by_pspec (obj, obj_props[PROP_ANCHOR_GRAVITY]);
if (old_anchor_x != anchor_x)
{
g_object_notify_by_pspec (obj, obj_props[PROP_ANCHOR_X]);
changed = TRUE;
}
if (old_anchor_y != anchor_y)
{
g_object_notify_by_pspec (obj, obj_props[PROP_ANCHOR_Y]);
changed = TRUE;
}
clutter_anchor_coord_set_units (&info->anchor, anchor_x, anchor_y, 0);
if (changed)
{
priv->transform_valid = FALSE;
clutter_actor_queue_redraw (self);
}
g_object_thaw_notify (obj);
}
/**
* clutter_actor_get_anchor_point_gravity:
* @self: a #ClutterActor
*
* Retrieves the anchor position expressed as a #ClutterGravity. If
* the anchor point was specified using pixels or units this will
* return %CLUTTER_GRAVITY_NONE.
*
* Return value: the #ClutterGravity used by the anchor point
*
* Since: 1.0
*
* Deprecated: 1.12: Use #ClutterActor:pivot-point instead.
*/
ClutterGravity
clutter_actor_get_anchor_point_gravity (ClutterActor *self)
{
const ClutterTransformInfo *info;
g_return_val_if_fail (CLUTTER_IS_ACTOR (self), CLUTTER_GRAVITY_NONE);
info = _clutter_actor_get_transform_info_or_defaults (self);
return clutter_anchor_coord_get_gravity (&info->anchor);
}
/**
* clutter_actor_move_anchor_point:
* @self: a #ClutterActor
* @anchor_x: X coordinate of the anchor point
* @anchor_y: Y coordinate of the anchor point
*
* Sets an anchor point for the actor, and adjusts the actor postion so that
* the relative position of the actor toward its parent remains the same.
*
* Since: 0.6
*
* Deprecated: 1.12: Use #ClutterActor:pivot-point and
* clutter_actor_set_translation() instead.
*/
void
clutter_actor_move_anchor_point (ClutterActor *self,
gfloat anchor_x,
gfloat anchor_y)
{
gfloat old_anchor_x, old_anchor_y;
const ClutterTransformInfo *info;
g_return_if_fail (CLUTTER_IS_ACTOR (self));
info = _clutter_actor_get_transform_info (self);
clutter_anchor_coord_get_units (self, &info->anchor,
&old_anchor_x,
&old_anchor_y,
NULL);
g_object_freeze_notify (G_OBJECT (self));
clutter_actor_set_anchor_point (self, anchor_x, anchor_y);
if (self->priv->position_set)
clutter_actor_move_by (self,
anchor_x - old_anchor_x,
anchor_y - old_anchor_y);
g_object_thaw_notify (G_OBJECT (self));
}
/**
* clutter_actor_move_anchor_point_from_gravity:
* @self: a #ClutterActor
* @gravity: #ClutterGravity.
*
* Sets an anchor point on the actor based on the given gravity, adjusting the
* actor postion so that its relative position within its parent remains
* unchanged.
*
* Since version 1.0 the anchor point will be stored as a gravity so
* that if the actor changes size then the anchor point will move. For
* example, if you set the anchor point to %CLUTTER_GRAVITY_SOUTH_EAST
* and later double the size of the actor, the anchor point will move
* to the bottom right.
*
* Since: 0.6
*
* Deprecated: 1.12: Use #ClutterActor:pivot-point and
* clutter_actor_set_translation() instead.
*/
void
clutter_actor_move_anchor_point_from_gravity (ClutterActor *self,
ClutterGravity gravity)
{
gfloat old_anchor_x, old_anchor_y, new_anchor_x, new_anchor_y;
const ClutterTransformInfo *info;
ClutterActorPrivate *priv;
g_return_if_fail (CLUTTER_IS_ACTOR (self));
priv = self->priv;
info = _clutter_actor_get_transform_info (self);
g_object_freeze_notify (G_OBJECT (self));
clutter_anchor_coord_get_units (self, &info->anchor,
&old_anchor_x,
&old_anchor_y,
NULL);
clutter_actor_set_anchor_point_from_gravity (self, gravity);
clutter_anchor_coord_get_units (self, &info->anchor,
&new_anchor_x,
&new_anchor_y,
NULL);
if (priv->position_set)
clutter_actor_move_by (self,
new_anchor_x - old_anchor_x,
new_anchor_y - old_anchor_y);
g_object_thaw_notify (G_OBJECT (self));
}
/**
* clutter_actor_set_anchor_point_from_gravity:
* @self: a #ClutterActor
* @gravity: #ClutterGravity.
*
* Sets an anchor point on the actor, based on the given gravity (this is a
* convenience function wrapping clutter_actor_set_anchor_point()).
*
* Since version 1.0 the anchor point will be stored as a gravity so
* that if the actor changes size then the anchor point will move. For
* example, if you set the anchor point to %CLUTTER_GRAVITY_SOUTH_EAST
* and later double the size of the actor, the anchor point will move
* to the bottom right.
*
* Since: 0.6
*
* Deprecated: 1.12: Use #ClutterActor:pivot-point and
* clutter_actor_set_translation() instead. E.g. For %CLUTTER_GRAVITY_CENTER set
* pivot_point to (0.5,0.5) and the translation to (width/2,height/2).
*/
void
clutter_actor_set_anchor_point_from_gravity (ClutterActor *self,
ClutterGravity gravity)
{
g_return_if_fail (CLUTTER_IS_ACTOR (self));
if (gravity == CLUTTER_GRAVITY_NONE)
clutter_actor_set_anchor_point (self, 0, 0);
else
{
GObject *obj = G_OBJECT (self);
ClutterTransformInfo *info;
g_object_freeze_notify (obj);
info = _clutter_actor_get_transform_info (self);
clutter_anchor_coord_set_gravity (&info->anchor, gravity);
g_object_notify_by_pspec (obj, obj_props[PROP_ANCHOR_GRAVITY]);
g_object_notify_by_pspec (obj, obj_props[PROP_ANCHOR_X]);
g_object_notify_by_pspec (obj, obj_props[PROP_ANCHOR_Y]);
self->priv->transform_valid = FALSE;
clutter_actor_queue_redraw (self);
g_object_thaw_notify (obj);
}
}
static void static void
clutter_actor_store_content_box (ClutterActor *self, clutter_actor_store_content_box (ClutterActor *self,
const ClutterActorBox *box) const ClutterActorBox *box)
@ -13180,8 +12724,6 @@ typedef enum
PARSE_Y, PARSE_Y,
PARSE_WIDTH, PARSE_WIDTH,
PARSE_HEIGHT, PARSE_HEIGHT,
PARSE_ANCHOR_X,
PARSE_ANCHOR_Y
} ParseDimension; } ParseDimension;
static gfloat static gfloat
@ -13226,8 +12768,8 @@ parse_units (ClutterActor *self,
else else
{ {
g_warning ("Invalid value of type '%s': integers, strings of floating " g_warning ("Invalid value of type '%s': integers, strings of floating "
"point values can be used for the x, y, width, height " "point values can be used for the x, y, width, and height "
"anchor-x and anchor-y properties.", "properties.",
g_type_name (G_VALUE_TYPE (&value))); g_type_name (G_VALUE_TYPE (&value)));
} }
@ -13497,9 +13039,7 @@ clutter_actor_parse_custom_node (ClutterScriptable *scriptable,
if ((name[0] == 'x' && name[1] == '\0') || if ((name[0] == 'x' && name[1] == '\0') ||
(name[0] == 'y' && name[1] == '\0') || (name[0] == 'y' && name[1] == '\0') ||
(strcmp (name, "width") == 0) || (strcmp (name, "width") == 0) ||
(strcmp (name, "height") == 0) || (strcmp (name, "height") == 0))
(strcmp (name, "anchor_x") == 0) ||
(strcmp (name, "anchor_y") == 0))
{ {
ParseDimension dimension; ParseDimension dimension;
gfloat units; gfloat units;
@ -13512,10 +13052,6 @@ clutter_actor_parse_custom_node (ClutterScriptable *scriptable,
dimension = PARSE_WIDTH; dimension = PARSE_WIDTH;
else if (name[0] == 'h') else if (name[0] == 'h')
dimension = PARSE_HEIGHT; dimension = PARSE_HEIGHT;
else if (name[0] == 'a' && name[7] == 'x')
dimension = PARSE_ANCHOR_X;
else if (name[0] == 'a' && name[7] == 'y')
dimension = PARSE_ANCHOR_Y;
else else
return FALSE; return FALSE;
@ -14971,169 +14507,6 @@ _clutter_actor_set_enable_paint_unmapped (ClutterActor *self,
} }
} }
static void
clutter_anchor_coord_get_units (ClutterActor *self,
const AnchorCoord *coord,
gfloat *x,
gfloat *y,
gfloat *z)
{
if (coord->is_fractional)
{
gfloat actor_width, actor_height;
clutter_actor_get_size (self, &actor_width, &actor_height);
if (x)
*x = actor_width * coord->v.fraction.x;
if (y)
*y = actor_height * coord->v.fraction.y;
if (z)
*z = 0;
}
else
{
if (x)
*x = coord->v.units.x;
if (y)
*y = coord->v.units.y;
if (z)
*z = coord->v.units.z;
}
}
static void
clutter_anchor_coord_set_units (AnchorCoord *coord,
gfloat x,
gfloat y,
gfloat z)
{
coord->is_fractional = FALSE;
coord->v.units.x = x;
coord->v.units.y = y;
coord->v.units.z = z;
}
static ClutterGravity
clutter_anchor_coord_get_gravity (const AnchorCoord *coord)
{
if (coord->is_fractional)
{
if (coord->v.fraction.x == 0.0)
{
if (coord->v.fraction.y == 0.0)
return CLUTTER_GRAVITY_NORTH_WEST;
else if (coord->v.fraction.y == 0.5)
return CLUTTER_GRAVITY_WEST;
else if (coord->v.fraction.y == 1.0)
return CLUTTER_GRAVITY_SOUTH_WEST;
else
return CLUTTER_GRAVITY_NONE;
}
else if (coord->v.fraction.x == 0.5)
{
if (coord->v.fraction.y == 0.0)
return CLUTTER_GRAVITY_NORTH;
else if (coord->v.fraction.y == 0.5)
return CLUTTER_GRAVITY_CENTER;
else if (coord->v.fraction.y == 1.0)
return CLUTTER_GRAVITY_SOUTH;
else
return CLUTTER_GRAVITY_NONE;
}
else if (coord->v.fraction.x == 1.0)
{
if (coord->v.fraction.y == 0.0)
return CLUTTER_GRAVITY_NORTH_EAST;
else if (coord->v.fraction.y == 0.5)
return CLUTTER_GRAVITY_EAST;
else if (coord->v.fraction.y == 1.0)
return CLUTTER_GRAVITY_SOUTH_EAST;
else
return CLUTTER_GRAVITY_NONE;
}
else
return CLUTTER_GRAVITY_NONE;
}
else
return CLUTTER_GRAVITY_NONE;
}
static void
clutter_anchor_coord_set_gravity (AnchorCoord *coord,
ClutterGravity gravity)
{
switch (gravity)
{
case CLUTTER_GRAVITY_NORTH:
coord->v.fraction.x = 0.5;
coord->v.fraction.y = 0.0;
break;
case CLUTTER_GRAVITY_NORTH_EAST:
coord->v.fraction.x = 1.0;
coord->v.fraction.y = 0.0;
break;
case CLUTTER_GRAVITY_EAST:
coord->v.fraction.x = 1.0;
coord->v.fraction.y = 0.5;
break;
case CLUTTER_GRAVITY_SOUTH_EAST:
coord->v.fraction.x = 1.0;
coord->v.fraction.y = 1.0;
break;
case CLUTTER_GRAVITY_SOUTH:
coord->v.fraction.x = 0.5;
coord->v.fraction.y = 1.0;
break;
case CLUTTER_GRAVITY_SOUTH_WEST:
coord->v.fraction.x = 0.0;
coord->v.fraction.y = 1.0;
break;
case CLUTTER_GRAVITY_WEST:
coord->v.fraction.x = 0.0;
coord->v.fraction.y = 0.5;
break;
case CLUTTER_GRAVITY_NORTH_WEST:
coord->v.fraction.x = 0.0;
coord->v.fraction.y = 0.0;
break;
case CLUTTER_GRAVITY_CENTER:
coord->v.fraction.x = 0.5;
coord->v.fraction.y = 0.5;
break;
default:
coord->v.fraction.x = 0.0;
coord->v.fraction.y = 0.0;
break;
}
coord->is_fractional = TRUE;
}
static gboolean
clutter_anchor_coord_is_zero (const AnchorCoord *coord)
{
if (coord->is_fractional)
return coord->v.fraction.x == 0.0 && coord->v.fraction.y == 0.0;
else
return (coord->v.units.x == 0.0
&& coord->v.units.y == 0.0
&& coord->v.units.z == 0.0);
}
/** /**
* clutter_actor_get_flags: * clutter_actor_get_flags:
* @self: a #ClutterActor * @self: a #ClutterActor

View File

@ -3,7 +3,6 @@
#define __CLUTTER_DEPRECATED_H_INSIDE__ #define __CLUTTER_DEPRECATED_H_INSIDE__
#include "deprecated/clutter-actor.h"
#include "deprecated/clutter-container.h" #include "deprecated/clutter-container.h"
#undef __CLUTTER_DEPRECATED_H_INSIDE__ #undef __CLUTTER_DEPRECATED_H_INSIDE__

View File

@ -1,55 +0,0 @@
/*
* Clutter.
*
* An OpenGL based 'interactive canvas' library.
*
* Authored By Matthew Allum <mallum@openedhand.com>
*
* Copyright (C) 2006, 2007, 2008 OpenedHand Ltd
* Copyright (C) 2009, 2010 Intel Corp
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#if !defined(__CLUTTER_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
#error "Only <clutter/clutter.h> can be included directly."
#endif
#ifndef __CLUTTER_ACTOR_DEPRECATED_H__
#define __CLUTTER_ACTOR_DEPRECATED_H__
#include <clutter/clutter-types.h>
G_BEGIN_DECLS
CLUTTER_DEPRECATED
void clutter_actor_set_anchor_point (ClutterActor *self,
gfloat anchor_x,
gfloat anchor_y);
CLUTTER_DEPRECATED
void clutter_actor_move_anchor_point (ClutterActor *self,
gfloat anchor_x,
gfloat anchor_y);
CLUTTER_DEPRECATED
ClutterGravity clutter_actor_get_anchor_point_gravity (ClutterActor *self);
CLUTTER_DEPRECATED
void clutter_actor_set_anchor_point_from_gravity (ClutterActor *self,
ClutterGravity gravity);
CLUTTER_DEPRECATED
void clutter_actor_move_anchor_point_from_gravity (ClutterActor *self,
ClutterGravity gravity);
G_END_DECLS
#endif /* __CLUTTER_ACTOR_DEPRECATED_H__ */

View File

@ -219,7 +219,6 @@ clutter_nonintrospected_sources = [
] ]
clutter_deprecated_headers = [ clutter_deprecated_headers = [
'deprecated/clutter-actor.h',
'deprecated/clutter-container.h', 'deprecated/clutter-container.h',
] ]

View File

@ -207,7 +207,7 @@ verify_redraws (gpointer user_data)
/* Modifying the transformation on the parent should not cause a redraw, /* Modifying the transformation on the parent should not cause a redraw,
since the FBO stores pre-transformed rendering that can be reused with since the FBO stores pre-transformed rendering that can be reused with
any transformation. */ any transformation. */
clutter_actor_set_anchor_point (data->parent_container, 0, 1); clutter_actor_set_translation (data->parent_container, 0.f, -1.f, 0.f);
verify_redraw (data, 0); verify_redraw (data, 0);
/* Redrawing an unrelated actor shouldn't cause a redraw */ /* Redrawing an unrelated actor shouldn't cause a redraw */

View File

@ -247,9 +247,7 @@ test_actors_main (int argc, char *argv[])
- h / 2; - h / 2;
clutter_actor_set_position (oh->hand[i], x, y); clutter_actor_set_position (oh->hand[i], x, y);
clutter_actor_set_translation (oh->hand[i], -100.f, -106.5, 0);
clutter_actor_move_anchor_point_from_gravity (oh->hand[i],
CLUTTER_GRAVITY_CENTER);
/* Add to our group group */ /* Add to our group group */
clutter_container_add_actor (CLUTTER_CONTAINER (oh->group), oh->hand[i]); clutter_container_add_actor (CLUTTER_CONTAINER (oh->group), oh->hand[i]);

View File

@ -208,7 +208,7 @@ test_cogl_multitexture_main (int argc, char *argv[])
cogl_matrix_rotate (&state->rot_matrix1, -10.0, 0, 0, 1.0); cogl_matrix_rotate (&state->rot_matrix1, -10.0, 0, 0, 1.0);
cogl_matrix_translate (&state->rot_matrix1, -0.5, -0.5, 0); cogl_matrix_translate (&state->rot_matrix1, -0.5, -0.5, 0);
clutter_actor_set_anchor_point (state->group, 86, 125); clutter_actor_set_translation (data->parent_container, -86.f, -125.f, 0.f);
clutter_container_add_actor (CLUTTER_CONTAINER(stage), clutter_container_add_actor (CLUTTER_CONTAINER(stage),
state->group); state->group);

View File

@ -189,7 +189,7 @@ make_bouncer (gfloat width,
NULL); NULL);
clutter_actor_set_name (retval, "bouncer"); clutter_actor_set_name (retval, "bouncer");
clutter_actor_set_size (retval, width, height); clutter_actor_set_size (retval, width, height);
clutter_actor_set_anchor_point (retval, width / 2, height / 2); clutter_actor_set_translation (retval, -width / 2.f, -height / 2.f, 0.f);
clutter_actor_set_reactive (retval, TRUE); clutter_actor_set_reactive (retval, TRUE);
clutter_content_invalidate (canvas); clutter_content_invalidate (canvas);

View File

@ -297,9 +297,7 @@ test_paint_wrapper_main (int argc, char *argv[])
- h / 2; - h / 2;
clutter_actor_set_position (oh->hand[i], x, y); clutter_actor_set_position (oh->hand[i], x, y);
clutter_actor_set_translation (oh->hand[i], -100.f, -106.5, 0);
clutter_actor_move_anchor_point_from_gravity (oh->hand[i],
CLUTTER_GRAVITY_CENTER);
g_signal_connect (oh->hand[i], "button-press-event", g_signal_connect (oh->hand[i], "button-press-event",
G_CALLBACK (on_button_press_event), G_CALLBACK (on_button_press_event),

View File

@ -115,8 +115,7 @@ main (int argc, char **argv)
rect = clutter_actor_new (); rect = clutter_actor_new ();
clutter_actor_set_background_color (rect, &color); clutter_actor_set_background_color (rect, &color);
clutter_actor_set_size (rect, 100, 100); clutter_actor_set_size (rect, 100, 100);
clutter_actor_set_anchor_point_from_gravity (rect, clutter_actor_set_translation (rect, -50.f, -50.f, 0.f);
CLUTTER_GRAVITY_CENTER);
clutter_actor_set_position (rect, clutter_actor_set_position (rect,
256 + 206 * cos (angle), 256 + 206 * cos (angle),
256 + 206 * sin (angle)); 256 + 206 * sin (angle));

View File

@ -110,8 +110,7 @@ main (int argc, char **argv)
rect = clutter_actor_new (); rect = clutter_actor_new ();
clutter_actor_set_background_color (rect, &color); clutter_actor_set_background_color (rect, &color);
clutter_actor_set_size (rect, 100, 100); clutter_actor_set_size (rect, 100, 100);
clutter_actor_set_anchor_point_from_gravity (rect, clutter_actor_set_translation (rect, -50.f, -50.f, 0.f);
CLUTTER_GRAVITY_CENTER);
clutter_actor_set_position (rect, clutter_actor_set_position (rect,
256 + 206 * cos (angle), 256 + 206 * cos (angle),
256 + 206 * sin (angle)); 256 + 206 * sin (angle));