diff options
author | Emmanuele Bassi <ebassi@linux.intel.com> | 2009-07-18 20:44:04 +0100 |
---|---|---|
committer | Emmanuele Bassi <ebassi@linux.intel.com> | 2009-07-18 20:52:07 +0100 |
commit | 0da2fa2f79733bf8dcfe32c2e744ea22a84beff7 (patch) | |
tree | ccaf2ae8e384d6a4a384ede1dfa9bf79718ec966 | |
parent | a5b166c47791986b2f95146f8aebc22e365d975b (diff) | |
download | clutter-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.c | 40 |
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; |