]> Pileus Git - ~andy/gtk/blob - tests/testcolorchooser.c
stylecontext: Do invalidation on first resize container
[~andy/gtk] / tests / testcolorchooser.c
1 #include <gtk/gtk.h>
2
3 static void
4 color_changed (GObject *o, GParamSpec *pspect, gpointer data)
5 {
6   GdkRGBA color;
7
8   gtk_color_chooser_get_rgba (GTK_COLOR_CHOOSER (o), &color);
9   g_print ("color changed: %g %g %g %g\n",
10            color.red, color.green, color.blue, color.alpha);
11 }
12
13 static void
14 dialog_response (GtkDialog *dialog, gint response)
15 {
16   GdkRGBA color;
17
18   switch (response)
19     {
20     case GTK_RESPONSE_OK:
21       gtk_color_chooser_get_rgba (GTK_COLOR_CHOOSER (dialog), &color);
22       g_print ("color accepted: %g %g %g %g\n",
23            color.red, color.green, color.blue, color.alpha);
24       break;
25     default:
26       g_print ("canceled\n");
27       break;
28     }
29
30   gtk_main_quit ();
31 }
32
33 int
34 main (int argc, char *argv[])
35 {
36   GtkWidget *dialog;
37   gint i;
38
39   gtk_init (NULL, NULL);
40
41   dialog = gtk_color_chooser_dialog_new ("Select a color", NULL);
42
43   for (i = 1; i < argc; i++)
44     {
45       if (g_strcmp0 (argv[i], "--no-alpha") == 0)
46         {
47           g_print ("turning alpha off\n");
48           gtk_color_chooser_set_use_alpha (GTK_COLOR_CHOOSER (dialog), FALSE);
49         }
50       else if (g_strcmp0 (argv[i], "--edit") == 0)
51         {
52           g_print ("starting in edit mode\n");
53           g_object_set (dialog, "show-editor", TRUE, NULL);
54         }
55       else if (g_strcmp0 (argv[i], "--palette") == 0)
56         {
57           const gchar *c[9] = { "red", "maroon", "yellow", "green", "blue", "magenta", "DarkOliveGreen4", "khaki2", "thistle1" };
58           GdkRGBA color;
59           GdkRGBA colors[9*9];
60           gint i,j;
61           gdouble f[5] = { 0.2, 0.35, 0.5, 0.65, 0.8 };
62
63           g_print ("setting custom palette\n");
64           for (i = 0; i < 9; i++)
65             {
66               gdk_rgba_parse (&color, c[i]);
67               for (j = 0; j < 5; j++)
68                 {
69                   colors[i*9 + j].red   = f[j]*color.red;
70                   colors[i*9 + j].green = f[j]*color.green;
71                   colors[i*9 + j].blue  = f[j]*color.blue;
72                   colors[i*9 + j].alpha = 1;
73                 }
74               for (j = 5; j < 9; j++)
75                 {
76                   colors[i*9 + j].red   = f[9-j]*color.red + (1-f[9-j]);
77                   colors[i*9 + j].green = f[9-j]*color.green + (1-f[9-j]);
78                   colors[i*9 + j].blue  = f[9-j]*color.blue + (1-f[9-j]);
79                   colors[i*9 + j].alpha = 1;
80                 }
81             }
82           gtk_color_chooser_add_palette (GTK_COLOR_CHOOSER (dialog),
83                                          GTK_ORIENTATION_VERTICAL,
84                                          9, 9*9,
85                                          colors);
86         }
87       else if (g_strcmp0 (argv[i], "--no-palette") == 0)
88         {
89           gtk_color_chooser_add_palette (GTK_COLOR_CHOOSER (dialog), 
90                                          GTK_ORIENTATION_VERTICAL, 0, 0, NULL);
91         }
92     }
93
94   g_signal_connect (dialog, "notify::color", G_CALLBACK (color_changed), NULL);
95   g_signal_connect (dialog, "response", G_CALLBACK (dialog_response), NULL);
96
97   gtk_widget_show_all (dialog);
98
99   gtk_main ();
100
101   return 0;
102 }
103