[clutter/wip/master-next: 20/31] actor: Add scaling factor in the Z axis
- From: Emmanuele Bassi <ebassi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [clutter/wip/master-next: 20/31] actor: Add scaling factor in the Z axis
- Date: Wed, 11 Jul 2012 14:41:11 +0000 (UTC)
commit 9b52f9b3f559815e7a8f39f8fac5d4679f0c3a56
Author: Emmanuele Bassi <ebassi gnome org>
Date: Mon Jul 9 10:59:13 2012 +0100
actor: Add scaling factor in the Z axis
Having a scaling factor on the Z axis helps with projects that use fully
3D elements, like Mash.
https://bugzilla.gnome.org/show_bug.cgi?id=677853
clutter/clutter-actor-private.h | 1 +
clutter/clutter-actor.c | 88 +++++++++++++++++++++++++++++++++++++-
clutter/clutter-actor.h | 5 ++
clutter/clutter.symbols | 2 +
4 files changed, 93 insertions(+), 3 deletions(-)
---
diff --git a/clutter/clutter-actor-private.h b/clutter/clutter-actor-private.h
index c13840a..b911011 100644
--- a/clutter/clutter-actor-private.h
+++ b/clutter/clutter-actor-private.h
@@ -194,6 +194,7 @@ struct _ClutterTransformInfo
/* scaling */
gdouble scale_x;
gdouble scale_y;
+ gdouble scale_z;
AnchorCoord scale_center;
/* anchor point */
diff --git a/clutter/clutter-actor.c b/clutter/clutter-actor.c
index 3078713..1fc1241 100644
--- a/clutter/clutter-actor.c
+++ b/clutter/clutter-actor.c
@@ -875,6 +875,7 @@ enum
PROP_SCALE_X,
PROP_SCALE_Y,
+ PROP_SCALE_Z,
PROP_SCALE_CENTER_X, /* XXX:2.0 remove */
PROP_SCALE_CENTER_Y, /* XXX:2.0 remove */
PROP_SCALE_GRAVITY, /* XXX:2.0 remove */
@@ -3000,7 +3001,7 @@ clutter_actor_real_apply_transform (ClutterActor *self,
cogl_matrix_scale (transform,
info->scale_x,
info->scale_y,
- 1.0));
+ info->scale_z));
}
if (info->rz_angle)
@@ -4111,7 +4112,7 @@ static const ClutterTransformInfo default_transform_info = {
0.0, { 0, }, /* rotation-y */
0.0, { 0, }, /* rotation-z */
- 1.0, 1.0, { 0, }, /* scale */
+ 1.0, 1.0, 1.0, { 0, }, /* scale */
{ 0, }, /* anchor */
@@ -4578,8 +4579,12 @@ clutter_actor_set_scale_factor_internal (ClutterActor *self,
if (pspec == obj_props[PROP_SCALE_X])
info->scale_x = factor;
- else
+ else if (pspec == obj_props[PROP_SCALE_Y])
info->scale_y = factor;
+ else if (pspec == obj_props[PROP_SCALE_Z])
+ info->scale_z = factor;
+ else
+ g_assert_not_reached ();
self->priv->transform_valid = FALSE;
clutter_actor_queue_redraw (self);
@@ -4610,6 +4615,8 @@ clutter_actor_set_scale_factor (ClutterActor *self,
break;
case CLUTTER_Z_AXIS:
+ pspec = obj_props[PROP_SCALE_Z];
+ scale_p = &info->scale_z;
break;
}
@@ -4910,6 +4917,11 @@ clutter_actor_set_property (GObject *object,
g_value_get_double (value));
break;
+ case PROP_SCALE_Z:
+ clutter_actor_set_scale_factor (actor, CLUTTER_Z_AXIS,
+ g_value_get_double (value));
+ break;
+
case PROP_SCALE_CENTER_X:
clutter_actor_set_scale_center (actor, CLUTTER_X_AXIS,
g_value_get_float (value));
@@ -5340,6 +5352,15 @@ clutter_actor_get_property (GObject *object,
}
break;
+ case PROP_SCALE_Z:
+ {
+ const ClutterTransformInfo *info;
+
+ info = _clutter_actor_get_transform_info_or_defaults (actor);
+ g_value_set_double (value, info->scale_z);
+ }
+ break;
+
case PROP_SCALE_CENTER_X:
{
gfloat center;
@@ -6654,6 +6675,25 @@ clutter_actor_class_init (ClutterActorClass *klass)
CLUTTER_PARAM_ANIMATABLE);
/**
+ * ClutterActor:scale-z:
+ *
+ * The scale factor of the actor along the Z axis.
+ *
+ * The #ClutterActor:scale-y property is animatable.
+ *
+ * Since: 1.12
+ */
+ obj_props[PROP_SCALE_Z] =
+ g_param_spec_double ("scale-z",
+ P_("Scale Z"),
+ P_("Scale factor on the Z axis"),
+ 0.0, G_MAXDOUBLE,
+ 1.0,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS |
+ CLUTTER_PARAM_ANIMATABLE);
+
+ /**
* ClutterActor:scale-center-x:
*
* The horizontal center point for scaling
@@ -10900,6 +10940,28 @@ clutter_actor_set_scale (ClutterActor *self,
}
/**
+ * clutter_actor_set_scale_z:
+ * @self: a #ClutterActor
+ * @scale_z: the scaling factor along the Z axis
+ *
+ * Scales an actor on the Z axis by the given @scale_z factor.
+ *
+ * The scale transformation is relative the the #ClutterActor:pivot-point.
+ *
+ * The #ClutterActor:scale-z property is animatable.
+ *
+ * Since: 1.12
+ */
+void
+clutter_actor_set_scale_z (ClutterActor *self,
+ gdouble scale_z)
+{
+ g_return_if_fail (CLUTTER_IS_ACTOR (self));
+
+ clutter_actor_set_scale_factor (self, CLUTTER_Z_AXIS, scale_z);
+}
+
+/**
* clutter_actor_set_scale_full:
* @self: A #ClutterActor
* @scale_x: double factor to scale actor by horizontally.
@@ -11008,6 +11070,25 @@ clutter_actor_get_scale (ClutterActor *self,
}
/**
+ * clutter_actor_get_scale_z:
+ * @self: A #ClutterActor
+ *
+ * Retrieves the scaling factor along the Z axis, as set using
+ * clutter_actor_set_scale_z().
+ *
+ * Return value: the scaling factor along the Z axis
+ *
+ * Since: 1.12
+ */
+gdouble
+clutter_actor_get_scale_z (ClutterActor *self)
+{
+ g_return_val_if_fail (CLUTTER_IS_ACTOR (self), 1.0);
+
+ return _clutter_actor_get_transform_info_or_defaults (self)->scale_z;
+}
+
+/**
* clutter_actor_get_scale_center:
* @self: A #ClutterActor
* @center_x: (out) (allow-none): Location to store the X position
@@ -14456,6 +14537,7 @@ clutter_actor_set_animatable_property (ClutterActor *actor,
case PROP_SCALE_X:
case PROP_SCALE_Y:
+ case PROP_SCALE_Z:
clutter_actor_set_scale_factor_internal (actor,
g_value_get_double (value),
pspec);
diff --git a/clutter/clutter-actor.h b/clutter/clutter-actor.h
index 2c47631..561d7f7 100644
--- a/clutter/clutter-actor.h
+++ b/clutter/clutter-actor.h
@@ -652,6 +652,11 @@ void clutter_actor_get_scale
gdouble *scale_x,
gdouble *scale_y);
CLUTTER_AVAILABLE_IN_1_12
+void clutter_actor_set_scale_z (ClutterActor *self,
+ gdouble scale_z);
+CLUTTER_AVAILABLE_IN_1_12
+gdouble clutter_actor_get_scale_z (ClutterActor *self);
+CLUTTER_AVAILABLE_IN_1_12
void clutter_actor_set_translation (ClutterActor *self,
gfloat translate_x,
gfloat translate_y,
diff --git a/clutter/clutter.symbols b/clutter/clutter.symbols
index f47a2ee..fc4f68c 100644
--- a/clutter/clutter.symbols
+++ b/clutter/clutter.symbols
@@ -144,6 +144,7 @@ clutter_actor_get_rotation
clutter_actor_get_scale
clutter_actor_get_scale_center
clutter_actor_get_scale_gravity
+clutter_actor_get_scale_z
clutter_actor_get_shader
clutter_actor_get_size
clutter_actor_get_stage
@@ -266,6 +267,7 @@ clutter_actor_set_rotation
clutter_actor_set_scale
clutter_actor_set_scale_full
clutter_actor_set_scale_with_gravity
+clutter_actor_set_scale_z
clutter_actor_set_shader
clutter_actor_set_shader_param
clutter_actor_set_shader_param_float
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]