[gtk+/overlay] overlay: add an example of jumping overlays



commit 749b6cfa7a30e26e464a3b5ba3094c7e5406ce43
Author: Matthias Clasen <mclasen redhat com>
Date:   Sat Jun 11 17:31:05 2011 -0400

    overlay: add an example of jumping overlays

 tests/testoverlay.c |   75 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 75 insertions(+), 0 deletions(-)
---
diff --git a/tests/testoverlay.c b/tests/testoverlay.c
index 1ebb9c6..83acfe6 100644
--- a/tests/testoverlay.c
+++ b/tests/testoverlay.c
@@ -270,6 +270,77 @@ test_builder (void)
   return win;
 }
 
+static void
+on_enter (GtkWidget *overlay, GdkEventCrossing *event, GtkWidget *child)
+{
+  if (event->window != gtk_widget_get_window (child))
+    return;
+
+  if (gtk_widget_get_halign (child) == GTK_ALIGN_START)
+    {
+      gtk_overlay_set_offset (GTK_OVERLAY (overlay), child, -4, -4);
+      gtk_widget_set_halign (child, GTK_ALIGN_END);
+    }
+  else
+    {
+      gtk_overlay_set_offset (GTK_OVERLAY (overlay), child, 4, -4);
+      gtk_widget_set_halign (child, GTK_ALIGN_START);
+    }
+
+  gtk_widget_queue_resize (overlay);
+}
+
+static GtkWidget *
+test_chase (void)
+{
+  GtkWidget *win;
+  GtkWidget *overlay;
+  GtkWidget *sw;
+  GtkWidget *text;
+  GtkWidget *child;
+  GtkTextBuffer *buffer;
+  gchar *contents;
+  gsize len;
+
+  win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_title (GTK_WINDOW (win), "Chase");
+
+  overlay = gtk_overlay_new ();
+  gtk_widget_set_events (overlay, GDK_ENTER_NOTIFY_MASK|GDK_LEAVE_NOTIFY_MASK);
+  gtk_container_add (GTK_CONTAINER (win), overlay);
+
+  sw = gtk_scrolled_window_new (NULL, NULL);
+  gtk_scrolled_window_set_min_content_width (GTK_SCROLLED_WINDOW (sw), 200);
+  gtk_scrolled_window_set_min_content_height (GTK_SCROLLED_WINDOW (sw), 200);
+  gtk_container_add (GTK_CONTAINER (overlay), sw);
+
+  text = gtk_text_view_new ();
+  buffer = gtk_text_buffer_new (NULL);
+  if (!g_file_get_contents ("testoverlay.c", &contents, &len, NULL))
+    {
+      contents = g_strdup ("Text should go here...");
+      len = strlen (contents);
+    }
+  gtk_text_buffer_set_text (buffer, contents, len);
+  g_free (contents);
+  gtk_text_view_set_buffer (GTK_TEXT_VIEW (text), buffer);
+
+  gtk_widget_set_hexpand (text, TRUE);
+  gtk_widget_set_vexpand (text, TRUE);
+  gtk_container_add (GTK_CONTAINER (sw), text);
+  gtk_overlay_set_relative_widget (GTK_OVERLAY (overlay), text);
+
+  child = gtk_label_new ("Try to enter");
+  gtk_widget_set_halign (child, GTK_ALIGN_START);
+  gtk_widget_set_valign (child, GTK_ALIGN_END);
+  gtk_overlay_add (GTK_OVERLAY (overlay), child);
+  gtk_overlay_set_offset (GTK_OVERLAY (overlay), child, 4, -4);
+
+  g_signal_connect (overlay, "enter-notify-event",
+                    G_CALLBACK (on_enter), child);
+  return win;
+}
+
 int
 main (int argc, char *argv[])
 {
@@ -278,6 +349,7 @@ main (int argc, char *argv[])
   GtkWidget *win3;
   GtkWidget *win4;
   GtkWidget *win5;
+  GtkWidget *win6;
 
   gtk_init (&argc, &argv);
 
@@ -299,6 +371,9 @@ main (int argc, char *argv[])
   win5 = test_builder ();
   gtk_widget_show_all (win5);
 
+  win6 = test_chase ();
+  gtk_widget_show_all (win6);
+
   gtk_main ();
 
   return 0;



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