1
2#include<gtk/gtk.h>
3
4/*#define COLOR " #0f0;"*/
5#define COLOR " red;"
6
7static const char *css =
8" window { background-color: white; }\n"
9".one {"
10" all: unset;"
11" min-width: 100px;"
12" min-height:100px;"
13" box-shadow: -10px -20px 5px 40px" COLOR
14"}"
15".two {"
16" all: unset;"
17" min-width: 100px;"
18" min-height:100px;"
19" box-shadow: -10px -20px 0px 40px" COLOR
20"}"
21".three {"
22" all: unset;"
23" min-width: 100px;"
24" min-height:100px;"
25" border-radius: 0px;"
26" box-shadow: 0px 0px 10px 20px" COLOR
27"}"
28".four {"
29" all: unset;"
30" min-width: 100px;"
31" min-height: 100px;"
32" box-shadow: 10px 20px 5px 40px" COLOR
33" border-radius: 30px; "
34" margin-right: 50px;"
35"}"
36".five {"
37" all: unset;"
38" min-width: 100px;"
39" min-height:100px;"
40" border-radius: 30px; "
41" box-shadow: 10px 20px 0px 40px" COLOR
42"}"
43/* This is the default CSD drop shadow from (current) Adwaita */
44".b1 {"
45" all: unset;"
46" min-width: 100px;"
47" min-height: 100px;"
48" border-radius: 7px 7px 0px 0px;"
49" box-shadow: 0px 0px 9px 0px rgba(0, 0, 0, 0.5);"
50"}"
51#if 0
52".b2 {"
53" all: unset;"
54" min-width: 100px;"
55" min-height:100px;"
56" border-radius: 7px 7px 0 0;"
57" box-shadow: 0 0 0 30px green;"
58"}"
59".b3 {"
60" all: unset;"
61" min-width: 100px;"
62" min-height:100px;"
63" border-right: 30px solid blue;"
64" border-radius: 40px;"
65"}"
66".b4 {"
67" all: unset;"
68" min-width: 100px;"
69" min-height:100px;"
70" border-bottom: 30px solid blue;"
71" border-radius: 40px;"
72"}"
73#endif
74""
75;
76
77static void
78quit_cb (GtkWidget *widget,
79 gpointer data)
80{
81 gboolean *done = data;
82
83 *done = TRUE;
84
85 g_main_context_wakeup (NULL);
86}
87
88int
89main (int argc, char **argv)
90{
91 GtkWidget *window;
92 GtkWidget *box;
93 GtkWidget *top;
94 GtkWidget *bottom;
95 GtkWidget *w;
96 GtkCssProvider *provider;
97 gboolean done = FALSE;
98
99 gtk_init ();
100
101 provider = gtk_css_provider_new ();
102 gtk_css_provider_load_from_data (css_provider: provider, data: css, length: -1);
103 gtk_style_context_add_provider_for_display (display: gdk_display_get_default (),
104 GTK_STYLE_PROVIDER (provider),
105 GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
106
107 window = gtk_window_new ();
108 gtk_window_set_decorated (GTK_WINDOW (window), FALSE);
109 box = gtk_box_new (orientation: GTK_ORIENTATION_VERTICAL, spacing: 120);
110 top = gtk_box_new (orientation: GTK_ORIENTATION_HORIZONTAL, spacing: 120);
111 bottom = gtk_box_new (orientation: GTK_ORIENTATION_HORIZONTAL, spacing: 120);
112 gtk_widget_set_margin_start (widget: box, margin: 120);
113 gtk_widget_set_margin_end (widget: box, margin: 120);
114 gtk_widget_set_margin_top (widget: box, margin: 120);
115 gtk_widget_set_margin_bottom (widget: box, margin: 120);
116
117 w = gtk_button_new ();
118 gtk_widget_set_valign (widget: w, align: GTK_ALIGN_CENTER);
119 gtk_widget_add_css_class (widget: w, css_class: "one");
120 gtk_box_append (GTK_BOX (top), child: w);
121
122 w = gtk_button_new ();
123 gtk_widget_set_valign (widget: w, align: GTK_ALIGN_CENTER);
124 gtk_widget_add_css_class (widget: w, css_class: "two");
125 gtk_box_append (GTK_BOX (top), child: w);
126
127 w = gtk_button_new ();
128 gtk_widget_set_valign (widget: w, align: GTK_ALIGN_CENTER);
129 gtk_widget_add_css_class (widget: w, css_class: "three");
130 gtk_widget_set_opacity (widget: w, opacity: 0.7);
131 gtk_box_append (GTK_BOX (top), child: w);
132
133 w = gtk_button_new ();
134 gtk_widget_set_valign (widget: w, align: GTK_ALIGN_CENTER);
135 gtk_widget_add_css_class (widget: w, css_class: "four");
136 gtk_box_append (GTK_BOX (top), child: w);
137
138 w = gtk_button_new ();
139 gtk_widget_set_valign (widget: w, align: GTK_ALIGN_CENTER);
140 gtk_widget_add_css_class (widget: w, css_class: "five");
141 gtk_box_append (GTK_BOX (top), child: w);
142
143 /* Bottom */
144 w = gtk_button_new ();
145 gtk_widget_set_valign (widget: w, align: GTK_ALIGN_CENTER);
146 gtk_widget_add_css_class (widget: w, css_class: "b1");
147 gtk_box_append (GTK_BOX (bottom), child: w);
148
149 /*w = gtk_button_new ();*/
150 /*gtk_widget_set_valign (w, GTK_ALIGN_CENTER);*/
151 /*gtk_widget_add_css_class (w, "b2");*/
152 /*gtk_box_append (GTK_BOX (bottom), w);*/
153
154 /*w = gtk_button_new ();*/
155 /*gtk_widget_set_valign (w, GTK_ALIGN_CENTER);*/
156 /*gtk_widget_add_css_class (w, "b3");*/
157 /*gtk_box_append (GTK_BOX (bottom), w);*/
158
159 /*w = gtk_button_new ();*/
160 /*gtk_widget_set_valign (w, GTK_ALIGN_CENTER);*/
161 /*gtk_widget_add_css_class (w, "b4");*/
162 /*gtk_box_append (GTK_BOX (bottom), w);*/
163
164 gtk_box_append (GTK_BOX (box), child: top);
165 gtk_box_append (GTK_BOX (box), child: bottom);
166 gtk_window_set_child (GTK_WINDOW (window), child: box);
167 g_signal_connect (window, "destroy", G_CALLBACK (quit_cb), &done);
168 gtk_widget_show (widget: window);
169
170 while (!done)
171 g_main_context_iteration (NULL, TRUE);
172}
173

source code of gtk/tests/testoutsetshadowdrawing.c