summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2019-10-22 21:20:36 -0400
committerMatthias Clasen <mclasen@redhat.com>2019-10-22 21:20:36 -0400
commit1f0310ddff4ca54dd428d2c1249bf9b5b6b8020c (patch)
tree7b991f1b0214dee8e7509bddf9806a92f4ca3568
parent0284d40e24586278d3997ab2ace145ba16cbd9cc (diff)
downloadgtk+-1f0310ddff4ca54dd428d2c1249bf9b5b6b8020c.tar.gz
gtk-demo: Add a scrolling image demo
This tests big textures.
-rw-r--r--demos/gtk-demo/iconscroll.c67
-rw-r--r--demos/gtk-demo/iconscroll.ui3
2 files changed, 60 insertions, 10 deletions
diff --git a/demos/gtk-demo/iconscroll.c b/demos/gtk-demo/iconscroll.c
index 6aa649db4b..63a68bc62d 100644
--- a/demos/gtk-demo/iconscroll.c
+++ b/demos/gtk-demo/iconscroll.c
@@ -6,15 +6,17 @@
#include <gtk/gtk.h>
static guint tick_cb;
-static GtkAdjustment *adjustment;
+static GtkAdjustment *hadjustment;
+static GtkAdjustment *vadjustment;
static GtkWidget *window = NULL;
static GtkWidget *scrolledwindow;
static int selected;
-#define N_WIDGET_TYPES 3
+#define N_WIDGET_TYPES 4
-int increment = 5;
+static int hincrement = 5;
+static int vincrement = 5;
static gboolean
scroll_cb (GtkWidget *widget,
@@ -23,12 +25,19 @@ scroll_cb (GtkWidget *widget,
{
double value;
- value = gtk_adjustment_get_value (adjustment);
- if (value + increment <= gtk_adjustment_get_lower (adjustment) ||
- (value + increment >= gtk_adjustment_get_upper (adjustment) - gtk_adjustment_get_page_size (adjustment)))
- increment = - increment;
+ value = gtk_adjustment_get_value (vadjustment);
+ if (value + vincrement <= gtk_adjustment_get_lower (vadjustment) ||
+ (value + vincrement >= gtk_adjustment_get_upper (vadjustment) - gtk_adjustment_get_page_size (vadjustment)))
+ vincrement = - vincrement;
- gtk_adjustment_set_value (adjustment, value + increment);
+ gtk_adjustment_set_value (vadjustment, value + vincrement);
+
+ value = gtk_adjustment_get_value (hadjustment);
+ if (value + hincrement <= gtk_adjustment_get_lower (hadjustment) ||
+ (value + hincrement >= gtk_adjustment_get_upper (hadjustment) - gtk_adjustment_get_page_size (hadjustment)))
+ hincrement = - hincrement;
+
+ gtk_adjustment_set_value (hadjustment, value + hincrement);
return G_SOURCE_CONTINUE;
}
@@ -51,6 +60,11 @@ populate_icons (void)
for (left = 0; left < 15; left++)
gtk_grid_attach (GTK_GRID (grid), create_icon (), left, top, 1, 1);
+ hincrement = 0;
+
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow),
+ GTK_POLICY_NEVER,
+ GTK_POLICY_AUTOMATIC);
gtk_container_add (GTK_CONTAINER (scrolledwindow), grid);
}
@@ -82,10 +96,39 @@ populate_text (gboolean hilight)
textview = gtk_text_view_new ();
gtk_text_view_set_buffer (GTK_TEXT_VIEW (textview), buffer);
+ hincrement = 0;
+
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow),
+ GTK_POLICY_NEVER,
+ GTK_POLICY_AUTOMATIC);
gtk_container_add (GTK_CONTAINER (scrolledwindow), textview);
}
static void
+populate_image (void)
+{
+ GtkWidget *image;
+
+ if (!content)
+ {
+ GBytes *bytes;
+
+ bytes = g_resources_lookup_data ("/sources/font_features.c", 0, NULL);
+ content = g_bytes_unref_to_data (bytes, &content_len);
+ }
+
+ image = gtk_picture_new_for_resource ("/sliding_puzzle/portland-rose.jpg");
+ gtk_picture_set_can_shrink (GTK_PICTURE (image), FALSE);
+
+ hincrement = 5;
+
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+ gtk_container_add (GTK_CONTAINER (scrolledwindow), image);
+}
+
+static void
set_widget_type (int type)
{
if (tick_cb)
@@ -114,6 +157,11 @@ set_widget_type (int type)
populate_text (TRUE);
break;
+ case 3:
+ gtk_window_set_title (GTK_WINDOW (window), "Scrolling a big image");
+ populate_image ();
+ break;
+
default:
g_assert_not_reached ();
}
@@ -172,7 +220,8 @@ do_iconscroll (GtkWidget *do_widget)
G_CALLBACK (gtk_widget_destroyed), &window);
scrolledwindow = GTK_WIDGET (gtk_builder_get_object (builder, "scrolledwindow"));
gtk_widget_realize (window);
- adjustment = GTK_ADJUSTMENT (gtk_builder_get_object (builder, "adjustment"));
+ hadjustment = GTK_ADJUSTMENT (gtk_builder_get_object (builder, "hadjustment"));
+ vadjustment = GTK_ADJUSTMENT (gtk_builder_get_object (builder, "vadjustment"));
set_widget_type (0);
}
diff --git a/demos/gtk-demo/iconscroll.ui b/demos/gtk-demo/iconscroll.ui
index 3b62b75541..e1ead1adc8 100644
--- a/demos/gtk-demo/iconscroll.ui
+++ b/demos/gtk-demo/iconscroll.ui
@@ -32,7 +32,8 @@
<object class="GtkScrolledWindow" id="scrolledwindow">
<property name="hscrollbar-policy">never</property>
<property name="vscrollbar-policy">automatic</property>
- <property name="vadjustment"><object class="GtkAdjustment" id="adjustment"/></property>
+ <property name="hadjustment"><object class="GtkAdjustment" id="hadjustment"/></property>
+ <property name="vadjustment"><object class="GtkAdjustment" id="vadjustment"/></property>
</object>
</child>
</object>