summaryrefslogtreecommitdiff
path: root/gtk/gtkrevealer.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2013-04-22 09:42:48 -0400
committerMatthias Clasen <mclasen@redhat.com>2013-04-22 12:42:38 -0400
commitd7f43c30a36a366bb47a4bc7dab831d3d218dd11 (patch)
tree14002f8ce47fa393c427bd46d1e602a29b7e099d /gtk/gtkrevealer.c
parent0bd173e3d8d400f05529bef4956896d306b11696 (diff)
downloadgtk+-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.
Diffstat (limited to 'gtk/gtkrevealer.c')
-rw-r--r--gtk/gtkrevealer.c13
1 files changed, 9 insertions, 4 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);