From c02090b1f668c9fb93a58ad7754e7bfc53c64907 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timm=20B=C3=A4der?= Date: Tue, 27 Feb 2018 12:51:07 +0100 Subject: [PATCH] tests: Add testblur --- tests/meson.build | 1 + tests/testblur.c | 118 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 tests/testblur.c diff --git a/tests/meson.build b/tests/meson.build index 75e2d30b1c..3bdf1f6e62 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -127,6 +127,7 @@ gtk_tests = [ ['showrendernode'], ['testborderdrawing'], ['testoutsetshadowdrawing'], + ['testblur'] ] if os_linux diff --git a/tests/testblur.c b/tests/testblur.c new file mode 100644 index 0000000000..5540d6d760 --- /dev/null +++ b/tests/testblur.c @@ -0,0 +1,118 @@ + +#include + + + +struct _GtkBlurBox +{ + GtkBox parent_instance; + + double radius; +}; +typedef struct _GtkBlurBox GtkBlurBox; + +struct _GtkBlurBoxClass +{ + GtkBoxClass parent_class; +}; +typedef struct _GtkBlurBoxClass GtkBlurBoxClass; + + +G_DEFINE_TYPE (GtkBlurBox, gtk_blur_box, GTK_TYPE_BOX) + + +static void +snapshot_blur (GtkWidget *widget, + GtkSnapshot *snapshot) +{ + GtkBlurBox *box = (GtkBlurBox *) widget; + + gtk_snapshot_push_blur (snapshot, box->radius, "blur"); + + GTK_WIDGET_CLASS (gtk_blur_box_parent_class)->snapshot (widget, snapshot); + + gtk_snapshot_pop (snapshot); +} + + +static void +gtk_blur_box_init (GtkBlurBox *box) {} + +static void +gtk_blur_box_class_init (GtkBlurBoxClass *klass) +{ + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); + + widget_class->snapshot = snapshot_blur; +} + +static void +value_changed_cb (GtkRange *range, + gpointer user_data) +{ + GtkBlurBox *box = user_data; + double value = gtk_range_get_value (range); + + box->radius = value; + gtk_widget_queue_draw (GTK_WIDGET (box)); +} + +static void +value_changed_cb2 (GtkRange *range, + gpointer user_data) +{ + GtkLabel *label = user_data; + double value = gtk_range_get_value (range); + char *text; + + text = g_strdup_printf ("%.2f", value); + gtk_label_set_label (label, text); + g_free (text); +} + +int +main (int argc, char **argv) +{ + GtkWidget *window; + GtkWidget *blur_box; + GtkWidget *scale; + GtkWidget *value_label; + + gtk_init (); + + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + blur_box = g_object_new (gtk_blur_box_get_type (), + "orientation", GTK_ORIENTATION_VERTICAL, + "spacing", 32, + NULL); + + value_label = gtk_label_new ("FF"); + gtk_widget_set_margin_top (value_label, 32); + { + PangoAttrList *attrs; + + attrs = pango_attr_list_new (); + pango_attr_list_insert (attrs, pango_attr_scale_new (6.0)); + gtk_label_set_attributes (GTK_LABEL (value_label), attrs); + pango_attr_list_unref (attrs); + } + gtk_container_add (GTK_CONTAINER (blur_box), value_label); + + + scale = gtk_scale_new_with_range (GTK_ORIENTATION_HORIZONTAL, 0, 10, 0.5); + gtk_widget_set_size_request (scale, 200, -1); + gtk_widget_set_halign (scale, GTK_ALIGN_CENTER); + gtk_widget_set_valign (scale, GTK_ALIGN_CENTER); + gtk_widget_set_hexpand (scale, TRUE); + g_signal_connect (scale, "value-changed", G_CALLBACK (value_changed_cb), blur_box); + g_signal_connect (scale, "value-changed", G_CALLBACK (value_changed_cb2), value_label); + + + gtk_container_add (GTK_CONTAINER (blur_box), scale); + gtk_container_add (GTK_CONTAINER (window), blur_box); + + gtk_widget_show (window); + gtk_main (); + + return 0; +}