[viewport] Use the ::apply_transform vfunc
authorEmmanuele Bassi <ebassi@linux.intel.com>
Sat, 18 Jul 2009 19:44:04 +0000 (20:44 +0100)
committerEmmanuele Bassi <ebassi@linux.intel.com>
Sat, 18 Jul 2009 19:52:07 +0000 (20:52 +0100)
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.

clutter-gtk/gtk-clutter-viewport.c

index c46f29f..95c6106 100644 (file)
@@ -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;