summaryrefslogtreecommitdiff
path: root/tests/testblur.c
blob: bbbf888da5c2154da95af901c5f43723d5ce82e7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118

#include <gtk/gtk.h>



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);

  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;
}