[gedit] Add GeditAnimatedOverlay.



commit e5ca5e894ba3ea21a60d7b19ce33ed1a0ef246a5
Author: Ignacio Casal Quinteiro <icq gnome org>
Date:   Tue Feb 15 14:58:38 2011 +0100

    Add GeditAnimatedOverlay.
    
    This is a class that inherits from GeditOverlay and provide slide/in/out
    animation for the widget added on the container.

 gedit/Makefile.am                                 |    2 +
 gedit/gedit-animated-overlay.c                    |  214 +++++++++++++++++++++
 gedit/gedit-animated-overlay.h                    |   70 +++++++
 gedit/gedit-view-frame.c                          |   52 +++---
 gedit/theatrics/gedit-theatrics-animated-widget.c |   77 ++------
 gedit/theatrics/gedit-theatrics-animated-widget.h |    5 +-
 tests/test-overlay.c                              |   36 ++--
 7 files changed, 352 insertions(+), 104 deletions(-)
---
diff --git a/gedit/Makefile.am b/gedit/Makefile.am
index e189b19..7bc75c6 100644
--- a/gedit/Makefile.am
+++ b/gedit/Makefile.am
@@ -101,6 +101,7 @@ BUILT_SOURCES = 			\
 	gedit-marshal.h
 
 NOINST_H_FILES =			\
+	gedit-animated-overlay.h	\
 	gedit-close-button.h		\
 	gedit-command-line.h		\
 	gedit-dbus.h			\
@@ -168,6 +169,7 @@ libgedit_private_la_SOURCES =		\
 	gedit-window-activatable.c
 
 libgedit_c_files =			\
+	gedit-animated-overlay.c	\
 	gedit-app.c			\
 	gedit-close-button.c		\
 	gedit-command-line.c		\
diff --git a/gedit/gedit-animated-overlay.c b/gedit/gedit-animated-overlay.c
new file mode 100644
index 0000000..d88e73f
--- /dev/null
+++ b/gedit/gedit-animated-overlay.c
@@ -0,0 +1,214 @@
+/*
+ * gedit-animated-overlay.c
+ * This file is part of gedit
+ *
+ * Copyright (C) 2011 - Ignacio Casal Quinteiro
+ *
+ * Based on Mike Krüger <mkrueger novell com> work.
+ *
+ * gedit is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * gedit is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#include "gedit-animated-overlay.h"
+#include "theatrics/gedit-theatrics-stage.h"
+#include "theatrics/gedit-theatrics-animated-widget.h"
+
+struct _GeditAnimatedOverlayPrivate
+{
+	GeditTheatricsStage *stage;
+};
+
+G_DEFINE_TYPE (GeditAnimatedOverlay, gedit_animated_overlay, GEDIT_TYPE_OVERLAY)
+
+static void
+gedit_animated_overlay_dispose (GObject *object)
+{
+	GeditAnimatedOverlayPrivate *priv = GEDIT_ANIMATED_OVERLAY (object)->priv;
+
+	if (priv->stage != NULL)
+	{
+		g_object_unref (priv->stage);
+		priv->stage = NULL;
+	}
+
+	G_OBJECT_CLASS (gedit_animated_overlay_parent_class)->dispose (object);
+}
+
+static void
+gedit_animated_overlay_class_init (GeditAnimatedOverlayClass *klass)
+{
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
+	
+	object_class->dispose = gedit_animated_overlay_dispose;
+
+	g_type_class_add_private (object_class, sizeof (GeditAnimatedOverlayPrivate));
+}
+
+static void
+on_actor_step (GeditTheatricsStage  *stage,
+               GeditTheatricsActor  *actor,
+               GeditAnimatedOverlay *overlay)
+{
+	GeditTheatricsAnimationState animation_state;
+	GeditTheatricsAnimatedWidget *anim_widget;
+
+	anim_widget = GEDIT_THEATRICS_ANIMATED_WIDGET (gedit_theatrics_actor_get_target (actor));
+	animation_state = gedit_theatrics_animated_widget_get_animation_state (anim_widget);
+
+	switch (animation_state)
+	{
+		case GEDIT_THEATRICS_ANIMATION_STATE_COMING:
+			gtk_widget_queue_draw (GTK_WIDGET (anim_widget));
+			gedit_theatrics_animated_widget_set_percent (anim_widget,
+			                                             gedit_theatrics_actor_get_percent (actor));
+			if (gedit_theatrics_actor_get_expired (actor))
+			{
+				gedit_theatrics_animated_widget_set_animation_state (anim_widget,
+				                                                     GEDIT_THEATRICS_ANIMATION_STATE_IDLE);
+			}
+			break;
+		case GEDIT_THEATRICS_ANIMATION_STATE_INTENDING_TO_GO:
+			gedit_theatrics_animated_widget_set_animation_state (anim_widget,
+			                                                     GEDIT_THEATRICS_ANIMATION_STATE_GOING);
+			gedit_theatrics_animated_widget_set_bias (anim_widget,
+			                                          gedit_theatrics_actor_get_percent (actor));
+			gedit_theatrics_actor_reset (actor, gedit_theatrics_animated_widget_get_duration (anim_widget) *
+			                                    gedit_theatrics_actor_get_percent (actor));
+			break;
+		case GEDIT_THEATRICS_ANIMATION_STATE_GOING:
+			if (gedit_theatrics_actor_get_expired (actor))
+			{
+				gtk_widget_destroy (GTK_WIDGET (anim_widget));
+				return;
+			}
+			gtk_widget_queue_draw (GTK_WIDGET (anim_widget));
+			gedit_theatrics_animated_widget_set_percent (anim_widget, 1.0 - gedit_theatrics_actor_get_percent (actor));
+			break;
+		default:
+			break;
+	}
+}
+
+static void
+gedit_animated_overlay_init (GeditAnimatedOverlay *overlay)
+{
+	overlay->priv = G_TYPE_INSTANCE_GET_PRIVATE (overlay,
+	                                             GEDIT_TYPE_ANIMATED_OVERLAY,
+	                                             GeditAnimatedOverlayPrivate);
+
+	overlay->priv->stage = gedit_theatrics_stage_new ();
+
+	g_signal_connect (overlay->priv->stage,
+	                  "actor-step",
+	                  G_CALLBACK (on_actor_step),
+	                  overlay);
+}
+
+GtkWidget *
+gedit_animated_overlay_new (GtkWidget *main_widget)
+{
+	return g_object_new (GEDIT_TYPE_ANIMATED_OVERLAY,
+	                     "main-widget", main_widget,
+	                     NULL);
+}
+
+static GeditTheatricsAnimatedWidget *
+get_animated_widget (GeditAnimatedOverlay *overlay,
+                     GtkWidget            *widget)
+{
+	GeditTheatricsAnimatedWidget *anim_widget = NULL;
+	GtkWidget *main_widget;
+	GList *children, *l;
+
+	children = gtk_container_get_children (GTK_CONTAINER (overlay));
+	g_object_get (G_OBJECT (overlay), "main-widget", &main_widget, NULL);
+
+	for (l = children; l != NULL; l = g_list_next (l))
+	{
+		GtkWidget *child = GTK_WIDGET (l->data);
+
+		/* skip the main widget as it is not a OverlayChild */
+		if (child == main_widget)
+			continue;
+
+		if (child == widget)
+		{
+			anim_widget = GEDIT_THEATRICS_ANIMATED_WIDGET (child);
+			break;
+		}
+		else
+		{
+			GtkWidget *in_widget;
+
+			/* let's try also with the internal widget */
+			g_object_get (child, "widget", &in_widget, NULL);
+			g_assert (in_widget != NULL);
+
+			if (in_widget == widget)
+			{
+				anim_widget = GEDIT_THEATRICS_ANIMATED_WIDGET (child);
+				break;
+			}
+		}
+	}
+
+	g_list_free (children);
+
+	return anim_widget;
+}
+
+void
+gedit_animated_overlay_slide (GeditAnimatedOverlay               *overlay,
+                              GtkWidget                          *widget,
+                              GeditOverlayChildPosition           position,
+                              guint                               offset,
+                              guint                               duration,
+                              GeditTheatricsChoreographerEasing   easing,
+                              GeditTheatricsChoreographerBlocking blocking,
+                              GtkOrientation                      orientation,
+                              gboolean                            in)
+{
+	GeditTheatricsAnimatedWidget *anim_widget;
+
+	anim_widget = get_animated_widget (overlay, widget);
+
+	if (anim_widget == NULL)
+	{
+		anim_widget = gedit_theatrics_animated_widget_new (widget, duration,
+		                                                   easing,
+		                                                   blocking,
+		                                                   orientation);
+		gtk_widget_show (GTK_WIDGET (anim_widget));
+
+		gedit_overlay_add (GEDIT_OVERLAY (overlay),
+		                   GTK_WIDGET (anim_widget),
+		                   position, offset);
+	}
+	else
+	{
+		/* we are only interested in the easing and the blocking */
+		gedit_theatrics_animated_widget_set_easing (anim_widget, easing);
+		gedit_theatrics_animated_widget_set_blocking (anim_widget, blocking);
+	}
+
+	if (!in)
+	{
+		gedit_theatrics_animated_widget_set_animation_state (anim_widget, GEDIT_THEATRICS_ANIMATION_STATE_GOING);
+	}
+
+	gedit_theatrics_stage_add_with_duration (overlay->priv->stage,
+	                                         G_OBJECT (anim_widget),
+	                                         duration);
+}
diff --git a/gedit/gedit-animated-overlay.h b/gedit/gedit-animated-overlay.h
new file mode 100644
index 0000000..f1d8700
--- /dev/null
+++ b/gedit/gedit-animated-overlay.h
@@ -0,0 +1,70 @@
+/*
+ * gedit-animated-overlay.h
+ * This file is part of gedit
+ *
+ * Copyright (C) 2011 - Ignacio Casal Quinteiro
+ *
+ * gedit is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * gedit is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#ifndef __GEDIT_ANIMATED_OVERLAY_H__
+#define __GEDIT_ANIMATED_OVERLAY_H__
+
+#include "gedit-overlay.h"
+#include "theatrics/gedit-theatrics-choreographer.h"
+
+G_BEGIN_DECLS
+
+#define GEDIT_TYPE_ANIMATED_OVERLAY		(gedit_animated_overlay_get_type ())
+#define GEDIT_ANIMATED_OVERLAY(obj)		(G_TYPE_CHECK_INSTANCE_CAST ((obj), GEDIT_TYPE_ANIMATED_OVERLAY, GeditAnimatedOverlay))
+#define GEDIT_ANIMATED_OVERLAY_CONST(obj)	(G_TYPE_CHECK_INSTANCE_CAST ((obj), GEDIT_TYPE_ANIMATED_OVERLAY, GeditAnimatedOverlay const))
+#define GEDIT_ANIMATED_OVERLAY_CLASS(klass)	(G_TYPE_CHECK_CLASS_CAST ((klass), GEDIT_TYPE_ANIMATED_OVERLAY, GeditAnimatedOverlayClass))
+#define GEDIT_IS_ANIMATED_OVERLAY(obj)		(G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEDIT_TYPE_ANIMATED_OVERLAY))
+#define GEDIT_IS_ANIMATED_OVERLAY_CLASS(klass)	(G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_ANIMATED_OVERLAY))
+#define GEDIT_ANIMATED_OVERLAY_GET_CLASS(obj)	(G_TYPE_INSTANCE_GET_CLASS ((obj), GEDIT_TYPE_ANIMATED_OVERLAY, GeditAnimatedOverlayClass))
+
+typedef struct _GeditAnimatedOverlay		GeditAnimatedOverlay;
+typedef struct _GeditAnimatedOverlayClass	GeditAnimatedOverlayClass;
+typedef struct _GeditAnimatedOverlayPrivate	GeditAnimatedOverlayPrivate;
+
+struct _GeditAnimatedOverlay
+{
+	GeditOverlay parent;
+	
+	GeditAnimatedOverlayPrivate *priv;
+};
+
+struct _GeditAnimatedOverlayClass
+{
+	GeditOverlayClass parent_class;
+};
+
+GType gedit_animated_overlay_get_type (void) G_GNUC_CONST;
+
+GtkWidget *gedit_animated_overlay_new (GtkWidget *main_widget);
+
+void gedit_animated_overlay_slide (GeditAnimatedOverlay               *overlay,
+                                   GtkWidget                          *widget,
+                                   GeditOverlayChildPosition           position,
+                                   guint                               offset,
+                                   guint                               duration,
+                                   GeditTheatricsChoreographerEasing   easing,
+                                   GeditTheatricsChoreographerBlocking blocking,
+                                   GtkOrientation                      orientation,
+                                   gboolean                            in);
+
+G_END_DECLS
+
+#endif /* __GEDIT_ANIMATED_OVERLAY_H__ */
diff --git a/gedit/gedit-view-frame.c b/gedit/gedit-view-frame.c
index 39a209a..c3f4ea1 100644
--- a/gedit/gedit-view-frame.c
+++ b/gedit/gedit-view-frame.c
@@ -24,7 +24,7 @@
 #include "gedit-marshal.h"
 #include "gedit-debug.h"
 #include "gedit-utils.h"
-#include "gedit-overlay.h"
+#include "gedit-animated-overlay.h"
 #include "gedit-rounded-frame.h"
 
 #include <gdk/gdkkeysyms.h>
@@ -148,7 +148,7 @@ hide_search_widget (GeditViewFrame *frame,
                     gboolean        cancel)
 {
 	GtkTextBuffer *buffer;
-	GdkGravity gravity;
+	GeditOverlayChildPosition position;
 
 	if (frame->priv->disable_popdown)
 	{
@@ -177,22 +177,22 @@ hide_search_widget (GeditViewFrame *frame,
 
 	if (gtk_widget_get_direction (frame->priv->search_entry) == GTK_TEXT_DIR_RTL)
 	{
-		gravity = GDK_GRAVITY_NORTH_WEST;
+		position = GEDIT_OVERLAY_CHILD_POSITION_NORTH_WEST;
 	}
 	else
 	{
-		gravity = GDK_GRAVITY_NORTH_EAST;
+		position = GEDIT_OVERLAY_CHILD_POSITION_NORTH_EAST;
 	}
 
-	gedit_overlay_slide (GEDIT_OVERLAY (frame->priv->overlay),
-	                     frame->priv->search_widget,
-	                     300,
-	                     GEDIT_THEATRICS_CHOREOGRAPHER_EASING_EXPONENTIAL_IN_OUT,
-	                     GEDIT_THEATRICS_CHOREOGRAPHER_BLOCKING_UPSTAGE,
-	                     GTK_ORIENTATION_VERTICAL,
-	                     gravity,
-	                     SEARCH_POPUP_OFFSET,
-	                     FALSE);
+	gedit_animated_overlay_slide (GEDIT_ANIMATED_OVERLAY (frame->priv->overlay),
+	                              frame->priv->search_widget,
+	                              position,
+	                              SEARCH_POPUP_OFFSET,
+	                              300,
+	                              GEDIT_THEATRICS_CHOREOGRAPHER_EASING_EXPONENTIAL_IN_OUT,
+	                              GEDIT_THEATRICS_CHOREOGRAPHER_BLOCKING_UPSTAGE,
+	                              GTK_ORIENTATION_VERTICAL,
+	                              FALSE);
 	frame->priv->search_widget = NULL;
 
 	if (cancel)
@@ -1275,7 +1275,7 @@ start_interactive_search_real (GeditViewFrame *frame)
 	GtkTextBuffer *buffer;
 	GtkTextMark *mark;
 	GtkTextIter iter;
-	GdkGravity gravity;
+	GeditOverlayChildPosition position;
 
 	/* FIXME: it enters here twice, why? */
 
@@ -1313,22 +1313,22 @@ start_interactive_search_real (GeditViewFrame *frame)
 
 	if (gtk_widget_get_direction (frame->priv->search_entry) == GTK_TEXT_DIR_RTL)
 	{
-		gravity = GDK_GRAVITY_NORTH_WEST;
+		position = GEDIT_OVERLAY_CHILD_POSITION_NORTH_WEST;
 	}
 	else
 	{
-		gravity = GDK_GRAVITY_NORTH_EAST;
+		position = GEDIT_OVERLAY_CHILD_POSITION_NORTH_EAST;
 	}
 
-	gedit_overlay_slide (GEDIT_OVERLAY (frame->priv->overlay),
-	                     frame->priv->search_widget,
-	                     300,
-	                     GEDIT_THEATRICS_CHOREOGRAPHER_EASING_EXPONENTIAL_IN_OUT,
-	                     GEDIT_THEATRICS_CHOREOGRAPHER_BLOCKING_DOWNSTAGE,
-	                     GTK_ORIENTATION_VERTICAL,
-	                     gravity,
-	                     SEARCH_POPUP_OFFSET,
-	                     TRUE);
+	gedit_animated_overlay_slide (GEDIT_ANIMATED_OVERLAY (frame->priv->overlay),
+	                              frame->priv->search_widget,
+	                              position,
+	                              SEARCH_POPUP_OFFSET,
+	                              300,
+	                              GEDIT_THEATRICS_CHOREOGRAPHER_EASING_EXPONENTIAL_IN_OUT,
+	                              GEDIT_THEATRICS_CHOREOGRAPHER_BLOCKING_DOWNSTAGE,
+	                              GTK_ORIENTATION_VERTICAL,
+	                              TRUE);
 
 	init_search_entry (frame);
 
@@ -1433,7 +1433,7 @@ gedit_view_frame_init (GeditViewFrame *frame)
 	                  G_CALLBACK (on_start_interactive_goto_line),
 	                  frame);
 
-	frame->priv->overlay = gedit_overlay_new (frame->priv->view);
+	frame->priv->overlay = gedit_animated_overlay_new (frame->priv->view);
 	gtk_widget_show (frame->priv->overlay);
 
 	/* Create the scrolled window */
diff --git a/gedit/theatrics/gedit-theatrics-animated-widget.c b/gedit/theatrics/gedit-theatrics-animated-widget.c
index f4382b5..d4ea3ee 100644
--- a/gedit/theatrics/gedit-theatrics-animated-widget.c
+++ b/gedit/theatrics/gedit-theatrics-animated-widget.c
@@ -25,12 +25,10 @@
 #include "gedit-theatrics-animated-widget.h"
 #include "gedit-theatrics-enum-types.h"
 
-
 #define GEDIT_THEATRICS_ANIMATED_WIDGET_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE((object), GEDIT_TYPE_THEATRICS_ANIMATED_WIDGET, GeditTheatricsAnimatedWidgetPrivate))
 
 struct _GeditTheatricsAnimatedWidgetPrivate
 {
-	GtkWidget *widget;
 	GeditTheatricsChoreographerEasing easing;
 	GeditTheatricsChoreographerBlocking blocking;
 	GeditTheatricsAnimationState animation_state;
@@ -44,7 +42,6 @@ struct _GeditTheatricsAnimatedWidgetPrivate
 enum
 {
 	PROP_0,
-	PROP_WIDGET,
 	PROP_EASING,
 	PROP_BLOCKING,
 	PROP_ANIMATION_STATE,
@@ -55,7 +52,7 @@ enum
 
 G_DEFINE_TYPE_EXTENDED (GeditTheatricsAnimatedWidget,
 			gedit_theatrics_animated_widget,
-			GTK_TYPE_BIN,
+			GEDIT_TYPE_OVERLAY_CHILD,
 			0,
 			G_IMPLEMENT_INTERFACE (GTK_TYPE_ORIENTABLE,
 					       NULL))
@@ -76,9 +73,6 @@ gedit_theatrics_animated_widget_get_property (GObject    *object,
 
 	switch (prop_id)
 	{
-		case PROP_WIDGET:
-			g_value_set_object (value, aw->priv->widget);
-			break;
 		case PROP_EASING:
 			g_value_set_enum (value, aw->priv->easing);
 			break;
@@ -113,12 +107,6 @@ gedit_theatrics_animated_widget_set_property (GObject      *object,
 
 	switch (prop_id)
 	{
-		case PROP_WIDGET:
-		{
-			gtk_container_add (GTK_CONTAINER (aw),
-			                   g_value_get_object (value));
-			break;
-		}
 		case PROP_EASING:
 			gedit_theatrics_animated_widget_set_easing (aw,
 			                                            g_value_get_enum (value));
@@ -178,14 +166,16 @@ gedit_theatrics_animated_widget_get_preferred_width (GtkWidget *widget,
                                                      gint      *natural)
 {
 	GeditTheatricsAnimatedWidget *aw = GEDIT_THEATRICS_ANIMATED_WIDGET (widget);
+	GtkWidget *child;
 	gint width;
 
-	if (aw->priv->widget != NULL)
+	child = gtk_bin_get_child (GTK_BIN (widget));
+
+	if (child != NULL)
 	{
 		gint child_min, child_nat;
 
-		gtk_widget_get_preferred_width (aw->priv->widget,
-		                                &child_min, &child_nat);
+		gtk_widget_get_preferred_width (child, &child_min, &child_nat);
 		aw->priv->widget_alloc.width = child_min;
 	}
 
@@ -209,14 +199,16 @@ gedit_theatrics_animated_widget_get_preferred_height (GtkWidget *widget,
                                                       gint      *natural)
 {
 	GeditTheatricsAnimatedWidget *aw = GEDIT_THEATRICS_ANIMATED_WIDGET (widget);
+	GtkWidget *child;
 	gint height;
 
-	if (aw->priv->widget != NULL)
+	child = gtk_bin_get_child (GTK_BIN (widget));
+
+	if (child != NULL)
 	{
 		gint child_min, child_nat;
 
-		gtk_widget_get_preferred_height (aw->priv->widget,
-		                                 &child_min, &child_nat);
+		gtk_widget_get_preferred_height (child, &child_min, &child_nat);
 		aw->priv->widget_alloc.height = child_min;
 	}
 
@@ -239,10 +231,13 @@ gedit_theatrics_animated_widget_size_allocate (GtkWidget     *widget,
 					       GtkAllocation *allocation)
 {
 	GeditTheatricsAnimatedWidget *aw = GEDIT_THEATRICS_ANIMATED_WIDGET (widget);
+	GtkWidget *child;
 
-	GTK_WIDGET_CLASS (gedit_theatrics_animated_widget_parent_class)->size_allocate (widget, allocation);
+	//GTK_WIDGET_CLASS (gedit_theatrics_animated_widget_parent_class)->size_allocate (widget, allocation);
 
-	if (aw->priv->widget != NULL)
+	child = gtk_bin_get_child (GTK_BIN (widget));
+
+	if (child != NULL)
 	{
 		if (aw->priv->orientation == GTK_ORIENTATION_HORIZONTAL)
 		{
@@ -267,40 +262,16 @@ gedit_theatrics_animated_widget_size_allocate (GtkWidget     *widget,
 
 		if (aw->priv->widget_alloc.height > 0 && aw->priv->widget_alloc.width > 0)
 		{
-			gtk_widget_size_allocate (aw->priv->widget,
-						  &aw->priv->widget_alloc);
+			gtk_widget_size_allocate (child, &aw->priv->widget_alloc);
 		}
 	}
 }
 
 static void
-gedit_theatrics_animated_widget_add (GtkContainer *container,
-				     GtkWidget    *widget)
-{
-	GeditTheatricsAnimatedWidget *aw = GEDIT_THEATRICS_ANIMATED_WIDGET (container);
-
-	aw->priv->widget = widget;
-
-	GTK_CONTAINER_CLASS (gedit_theatrics_animated_widget_parent_class)->add (container, widget);
-}
-
-static void
-gedit_theatrics_animated_widget_remove (GtkContainer *container,
-					GtkWidget    *widget)
-{
-	GeditTheatricsAnimatedWidget *aw = GEDIT_THEATRICS_ANIMATED_WIDGET (container);
-
-	aw->priv->widget = NULL;
-
-	GTK_CONTAINER_CLASS (gedit_theatrics_animated_widget_parent_class)->remove (container, widget);
-}
-
-static void
 gedit_theatrics_animated_widget_class_init (GeditTheatricsAnimatedWidgetClass *klass)
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 	GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
-	GtkContainerClass *container_class = GTK_CONTAINER_CLASS (klass);
 	
 	object_class->finalize = gedit_theatrics_animated_widget_finalize;
 	object_class->get_property = gedit_theatrics_animated_widget_get_property;
@@ -311,18 +282,6 @@ gedit_theatrics_animated_widget_class_init (GeditTheatricsAnimatedWidgetClass *k
 	widget_class->get_preferred_height = gedit_theatrics_animated_widget_get_preferred_height;
 	widget_class->size_allocate = gedit_theatrics_animated_widget_size_allocate;
 
-	container_class->add = gedit_theatrics_animated_widget_add;
-	container_class->remove = gedit_theatrics_animated_widget_remove;
-
-	g_object_class_install_property (object_class, PROP_WIDGET,
-	                                 g_param_spec_object ("widget",
-	                                                      "Widget",
-	                                                      "The Widget",
-	                                                      GTK_TYPE_WIDGET,
-	                                                      G_PARAM_READWRITE |
-	                                                      G_PARAM_CONSTRUCT_ONLY |
-	                                                      G_PARAM_STATIC_STRINGS));
-
 	g_object_class_install_property (object_class, PROP_EASING,
 	                                 g_param_spec_enum ("easing",
 	                                                    "Easing",
@@ -387,8 +346,6 @@ gedit_theatrics_animated_widget_init (GeditTheatricsAnimatedWidget *aw)
 {
 	aw->priv = GEDIT_THEATRICS_ANIMATED_WIDGET_GET_PRIVATE (aw);
 
-	gtk_widget_set_has_window (GTK_WIDGET (aw), TRUE);
-
 	aw->priv->orientation = GTK_ORIENTATION_HORIZONTAL;
 	aw->priv->bias = 1.0;
 }
diff --git a/gedit/theatrics/gedit-theatrics-animated-widget.h b/gedit/theatrics/gedit-theatrics-animated-widget.h
index 2f5b00c..ec1043c 100644
--- a/gedit/theatrics/gedit-theatrics-animated-widget.h
+++ b/gedit/theatrics/gedit-theatrics-animated-widget.h
@@ -28,6 +28,7 @@
 #include <glib-object.h>
 #include <gtk/gtk.h>
 #include "gedit-theatrics-choreographer.h"
+#include "gedit-overlay-child.h"
 
 G_BEGIN_DECLS
 
@@ -45,14 +46,14 @@ typedef struct _GeditTheatricsAnimatedWidgetPrivate	GeditTheatricsAnimatedWidget
 
 struct _GeditTheatricsAnimatedWidget
 {
-	GtkBin parent;
+	GeditOverlayChild parent;
 	
 	GeditTheatricsAnimatedWidgetPrivate *priv;
 };
 
 struct _GeditTheatricsAnimatedWidgetClass
 {
-	GtkBinClass parent_class;
+	GeditOverlayChildClass parent_class;
 };
 
 GType				 gedit_theatrics_animated_widget_get_type	(void) G_GNUC_CONST;
diff --git a/tests/test-overlay.c b/tests/test-overlay.c
index 811d4b6..2d3c943 100644
--- a/tests/test-overlay.c
+++ b/tests/test-overlay.c
@@ -1,6 +1,6 @@
 #include <gtk/gtk.h>
 #include <glib.h>
-#include "gedit-overlay.h"
+#include "gedit-animated-overlay.h"
 #include "gedit-rounded-frame.h"
 
 static GtkWidget *overlay;
@@ -9,13 +9,15 @@ static void
 on_button_clicked (GtkWidget *button,
                    GtkWidget *frame)
 {
-	gedit_overlay_slide (GEDIT_OVERLAY (overlay),
-	                     frame,
-	                     1000,
-	                     GEDIT_THEATRICS_CHOREOGRAPHER_EASING_EXPONENTIAL_IN_OUT,
-	                     GEDIT_THEATRICS_CHOREOGRAPHER_BLOCKING_DOWNSTAGE,
-	                     GTK_ORIENTATION_VERTICAL,
-	                     GDK_GRAVITY_STATIC, 0, FALSE);
+	gedit_animated_overlay_slide (GEDIT_ANIMATED_OVERLAY (overlay),
+	                              frame,
+	                              GEDIT_OVERLAY_CHILD_POSITION_STATIC,
+	                              0,
+	                              1000,
+	                              GEDIT_THEATRICS_CHOREOGRAPHER_EASING_EXPONENTIAL_IN_OUT,
+	                              GEDIT_THEATRICS_CHOREOGRAPHER_BLOCKING_DOWNSTAGE,
+	                              GTK_ORIENTATION_VERTICAL,
+	                              FALSE);
 }
 
 gint
@@ -36,7 +38,7 @@ main ()
 	gtk_container_add (GTK_CONTAINER (window), vbox);
 
 	textview = gtk_text_view_new ();
-	overlay = gedit_overlay_new (textview);
+	overlay = gedit_animated_overlay_new (textview);
 
 	gtk_box_pack_start (GTK_BOX (vbox), overlay, TRUE, TRUE, 0);
 
@@ -47,13 +49,15 @@ main ()
 
 	gtk_container_add (GTK_CONTAINER (frame), entry);
 
-	gedit_overlay_slide (GEDIT_OVERLAY (overlay),
-	                     frame,
-	                     1000,
-	                     GEDIT_THEATRICS_CHOREOGRAPHER_EASING_EXPONENTIAL_IN_OUT,
-	                     GEDIT_THEATRICS_CHOREOGRAPHER_BLOCKING_DOWNSTAGE,
-	                     GTK_ORIENTATION_VERTICAL,
-	                     GDK_GRAVITY_STATIC, 0, TRUE);
+	gedit_animated_overlay_slide (GEDIT_ANIMATED_OVERLAY (overlay),
+	                              frame,
+	                              GEDIT_OVERLAY_CHILD_POSITION_STATIC,
+	                              0,
+	                              1000,
+	                              GEDIT_THEATRICS_CHOREOGRAPHER_EASING_EXPONENTIAL_IN_OUT,
+	                              GEDIT_THEATRICS_CHOREOGRAPHER_BLOCKING_DOWNSTAGE,
+	                              GTK_ORIENTATION_VERTICAL,
+	                              TRUE);
 
 	button = gtk_button_new_with_label ("Hide");
 	gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]