[gtk+/overlay] overlay: add an example of jumping overlays
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/overlay] overlay: add an example of jumping overlays
- Date: Sat, 11 Jun 2011 21:31:42 +0000 (UTC)
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]