~ubuntu-branches/ubuntu/trusty/gtk+3.0/trusty

1.1.19 by Sebastien Bacher
Import upstream version 3.4.2
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