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
#include <ctk/ctk.h>

static void
color_changed (GObject *o, GParamSpec *pspect, gpointer data)
{
  CdkRGBA color;

  ctk_color_chooser_get_rgba (CTK_COLOR_CHOOSER (o), &color);
  g_print ("color changed: %g %g %g %g\n",
           color.red, color.green, color.blue, color.alpha);
}

static void
dialog_response (CtkDialog *dialog, gint response)
{
  CdkRGBA color;

  switch (response)
    {
    case CTK_RESPONSE_OK:
      ctk_color_chooser_get_rgba (CTK_COLOR_CHOOSER (dialog), &color);
      g_print ("color accepted: %g %g %g %g\n",
           color.red, color.green, color.blue, color.alpha);
      break;
    default:
      g_print ("canceled\n");
      break;
    }

  ctk_main_quit ();
}

int
main (int argc, char *argv[])
{
  CtkWidget *dialog;
  gint i;<--- Shadowed declaration

  ctk_init (NULL, NULL);

  dialog = ctk_color_chooser_dialog_new ("Select a color", NULL);

  for (i = 1; i < argc; i++)
    {
      if (g_strcmp0 (argv[i], "--no-alpha") == 0)
        {
          g_print ("turning alpha off\n");
          ctk_color_chooser_set_use_alpha (CTK_COLOR_CHOOSER (dialog), FALSE);
        }
      else if (g_strcmp0 (argv[i], "--edit") == 0)
        {
          g_print ("starting in edit mode\n");
          g_object_set (dialog, "show-editor", TRUE, NULL);
        }
      else if (g_strcmp0 (argv[i], "--palette") == 0)
        {
          const gchar *c[9] = { "red", "maroon", "yellow", "green", "blue", "magenta", "DarkOliveGreen4", "khaki2", "thistle1" };
          CdkRGBA color;
          CdkRGBA colors[9*9];
          gint i,j;<--- Shadow variable
          gdouble f[5] = { 0.2, 0.35, 0.5, 0.65, 0.8 };<--- Variable 'f' can be declared as const array

          g_print ("setting custom palette\n");
          for (i = 0; i < 9; i++)
            {
              cdk_rgba_parse (&color, c[i]);
              for (j = 0; j < 5; j++)
                {
                  colors[i*9 + j].red   = f[j]*color.red;
                  colors[i*9 + j].green = f[j]*color.green;
                  colors[i*9 + j].blue  = f[j]*color.blue;
                  colors[i*9 + j].alpha = 1;
                }
              for (j = 5; j < 9; j++)
                {
                  colors[i*9 + j].red   = f[9-j]*color.red + (1-f[9-j]);
                  colors[i*9 + j].green = f[9-j]*color.green + (1-f[9-j]);
                  colors[i*9 + j].blue  = f[9-j]*color.blue + (1-f[9-j]);
                  colors[i*9 + j].alpha = 1;
                }
            }
          ctk_color_chooser_add_palette (CTK_COLOR_CHOOSER (dialog),
                                         CTK_ORIENTATION_VERTICAL,
                                         9, 9*9,
                                         colors);
        }
      else if (g_strcmp0 (argv[i], "--no-palette") == 0)
        {
          ctk_color_chooser_add_palette (CTK_COLOR_CHOOSER (dialog), 
                                         CTK_ORIENTATION_VERTICAL, 0, 0, NULL);
        }
    }

  g_signal_connect (dialog, "notify::color", G_CALLBACK (color_changed), NULL);
  g_signal_connect (dialog, "response", G_CALLBACK (dialog_response), NULL);

  ctk_widget_show_all (dialog);

  ctk_main ();

  return 0;
}