diff options
author | Matthias Clasen <mclasen@redhat.com> | 2013-04-22 09:42:48 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2013-04-22 12:42:38 -0400 |
commit | d7f43c30a36a366bb47a4bc7dab831d3d218dd11 (patch) | |
tree | 14002f8ce47fa393c427bd46d1e602a29b7e099d | |
parent | 0bd173e3d8d400f05529bef4956896d306b11696 (diff) | |
download | gtk+-d7f43c30a36a366bb47a4bc7dab831d3d218dd11.tar.gz |
GtkRevealer: Add a fading animation
Using a container for this is not necessarily the most
elegant solution, but it lets us reuse the animation
machinery in GtkRevealer.
-rw-r--r-- | gtk/gtkrevealer.c | 13 | ||||
-rw-r--r-- | gtk/gtkrevealer.h | 1 | ||||
-rw-r--r-- | tests/testrevealer.c | 4 |
3 files changed, 12 insertions, 6 deletions
diff --git a/gtk/gtkrevealer.c b/gtk/gtkrevealer.c index 133793e251..3e40d004aa 100644 --- a/gtk/gtkrevealer.c +++ b/gtk/gtkrevealer.c @@ -439,7 +439,15 @@ gtk_revealer_set_position (GtkRevealer *revealer, new_visible != gtk_widget_get_child_visible (child)) gtk_widget_set_child_visible (child, new_visible); - gtk_widget_queue_resize (GTK_WIDGET (revealer)); + if (priv->transition_type == GTK_REVEALER_TRANSITION_TYPE_CROSSFADE) + { + gtk_widget_set_opacity (GTK_WIDGET (revealer), priv->current_pos); + gtk_widget_queue_draw (GTK_WIDGET (revealer)); + } + else + { + gtk_widget_queue_resize (GTK_WIDGET (revealer)); + } if (priv->current_pos == priv->target_pos) g_object_notify (G_OBJECT (revealer), "child-revealed"); @@ -480,7 +488,6 @@ gtk_revealer_animate_cb (GtkRevealer *revealer, gtk_revealer_animate_step (revealer, now); if (priv->current_pos == priv->target_pos) { - gtk_widget_set_opacity (GTK_WIDGET (revealer), 1.0); priv->tick_id = 0; return FALSE; } @@ -505,8 +512,6 @@ gtk_revealer_start_animation (GtkRevealer *revealer, priv->transition_duration != 0 && priv->transition_type != GTK_REVEALER_TRANSITION_TYPE_NONE) { - gtk_widget_set_opacity (widget, 0.999); - priv->source_pos = priv->current_pos; priv->start_time = gdk_frame_clock_get_frame_time (gtk_widget_get_frame_clock (widget)); priv->end_time = priv->start_time + (priv->transition_duration * 1000); diff --git a/gtk/gtkrevealer.h b/gtk/gtkrevealer.h index c6da3d794a..30db0a6fc0 100644 --- a/gtk/gtkrevealer.h +++ b/gtk/gtkrevealer.h @@ -40,6 +40,7 @@ typedef struct _GtkRevealerPrivate GtkRevealerPrivate; typedef enum { GTK_REVEALER_TRANSITION_TYPE_NONE, + GTK_REVEALER_TRANSITION_TYPE_CROSSFADE, GTK_REVEALER_TRANSITION_TYPE_SLIDE_RIGHT, GTK_REVEALER_TRANSITION_TYPE_SLIDE_LEFT, GTK_REVEALER_TRANSITION_TYPE_SLIDE_UP, diff --git a/tests/testrevealer.c b/tests/testrevealer.c index a71327de2c..3eab9cd0f3 100644 --- a/tests/testrevealer.c +++ b/tests/testrevealer.c @@ -41,7 +41,7 @@ main (gint argc, gtk_revealer_set_transition_duration (GTK_REVEALER (revealer), 2000); gtk_grid_attach (GTK_GRID (box), revealer, 1, 0, 1, 1); - widget = gtk_toggle_button_new_with_label ("None"); + widget = gtk_toggle_button_new_with_label ("Fade"); gtk_grid_attach (GTK_GRID (box), widget, 4, 4, 1, 1); revealer = gtk_revealer_new (); gtk_widget_set_halign (revealer, GTK_ALIGN_END); @@ -50,7 +50,7 @@ main (gint argc, gtk_entry_set_text (GTK_ENTRY (entry), "00000"); gtk_container_add (GTK_CONTAINER (revealer), entry); g_object_bind_property (widget, "active", revealer, "reveal-child", 0); - gtk_revealer_set_transition_type (GTK_REVEALER (revealer), GTK_REVEALER_TRANSITION_TYPE_NONE); + gtk_revealer_set_transition_type (GTK_REVEALER (revealer), GTK_REVEALER_TRANSITION_TYPE_CROSSFADE); gtk_revealer_set_transition_duration (GTK_REVEALER (revealer), 2000); gtk_grid_attach (GTK_GRID (box), revealer, 3, 4, 1, 1); |