summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@linux.intel.com>2009-07-18 20:44:04 +0100
committerEmmanuele Bassi <ebassi@linux.intel.com>2009-07-18 20:52:07 +0100
commit0da2fa2f79733bf8dcfe32c2e744ea22a84beff7 (patch)
treeccaf2ae8e384d6a4a384ede1dfa9bf79718ec966
parenta5b166c47791986b2f95146f8aebc22e365d975b (diff)
downloadclutter-gtk-0da2fa2f79733bf8dcfe32c2e744ea22a84beff7.tar.gz
[viewport] Use the ::apply_transform vfunc
Since Clutter added the ::apply_transform() virtual function for actors adding a layer of transformations on top of the usual scenegraph-related ones, GtkClutterViewport should use it.
-rw-r--r--clutter-gtk/gtk-clutter-viewport.c40
1 files changed, 24 insertions, 16 deletions
diff --git a/clutter-gtk/gtk-clutter-viewport.c b/clutter-gtk/gtk-clutter-viewport.c
index c46f29f..95c6106 100644
--- a/clutter-gtk/gtk-clutter-viewport.c
+++ b/clutter-gtk/gtk-clutter-viewport.c
@@ -548,35 +548,42 @@ gtk_clutter_viewport_allocate (ClutterActor *actor,
}
static void
-gtk_clutter_viewport_paint (ClutterActor *actor)
+gtk_clutter_viewport_apply_transform (ClutterActor *actor,
+ CoglMatrix *matrix)
{
GtkClutterViewportPrivate *priv = GTK_CLUTTER_VIEWPORT (actor)->priv;
+ ClutterActorClass *parent_class;
- cogl_push_matrix ();
+ parent_class = CLUTTER_ACTOR_CLASS (gtk_clutter_viewport_parent_class);
+ parent_class->apply_transform (actor, matrix);
- /* translate the paint environment by the same amount
- * defined by the origin value
- */
- cogl_translate (priv->origin.x * -1,
- priv->origin.y * -1,
- priv->origin.z * -1);
+ cogl_matrix_translate (matrix,
+ priv->origin.x * -1,
+ priv->origin.y * -1,
+ priv->origin.z * -1);
+}
- /* the child will be painted in the new frame of reference */
- if (priv->child && CLUTTER_ACTOR_IS_VISIBLE (priv->child))
- clutter_actor_paint (priv->child);
+static void
+gtk_clutter_viewport_paint (ClutterActor *actor)
+{
+ GtkClutterViewportPrivate *priv = GTK_CLUTTER_VIEWPORT (actor)->priv;
- cogl_pop_matrix ();
+ if (priv->child)
+ clutter_actor_paint (priv->child);
}
static void
gtk_clutter_viewport_pick (ClutterActor *actor,
const ClutterColor *pick_color)
{
- /* chain up to get the default pick */
- CLUTTER_ACTOR_CLASS (gtk_clutter_viewport_parent_class)->pick (actor, pick_color);
+ GtkClutterViewportPrivate *priv = GTK_CLUTTER_VIEWPORT (actor)->priv;
+ ClutterActorClass *parent_class;
- /* this will cause the child (if any) to be painted in pick mode */
- gtk_clutter_viewport_paint (actor);
+ parent_class = CLUTTER_ACTOR_CLASS (gtk_clutter_viewport_parent_class);
+ parent_class->pick (actor, pick_color);
+
+ if (priv->child)
+ clutter_actor_paint (priv->child);
}
static void
@@ -595,6 +602,7 @@ gtk_clutter_viewport_class_init (GtkClutterViewportClass *klass)
actor_class->get_preferred_width = gtk_clutter_viewport_get_preferred_width;
actor_class->get_preferred_height = gtk_clutter_viewport_get_preferred_height;
actor_class->allocate = gtk_clutter_viewport_allocate;
+ actor_class->apply_transform = gtk_clutter_viewport_apply_transform;
actor_class->paint = gtk_clutter_viewport_paint;
actor_class->pick = gtk_clutter_viewport_pick;