2012-01-29 15:43:42 +00:00
|
|
|
#include <gtk/gtk.h>
|
|
|
|
|
|
|
|
static void
|
|
|
|
color_changed (GObject *o, GParamSpec *pspect, gpointer data)
|
|
|
|
{
|
|
|
|
GdkRGBA color;
|
|
|
|
|
2012-02-03 23:34:33 +00:00
|
|
|
gtk_color_chooser_get_rgba (GTK_COLOR_CHOOSER (o), &color);
|
2012-01-29 15:43:42 +00:00
|
|
|
g_print ("color changed: %g %g %g %g\n",
|
|
|
|
color.red, color.green, color.blue, color.alpha);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
dialog_response (GtkDialog *dialog, gint response)
|
|
|
|
{
|
|
|
|
GdkRGBA color;
|
|
|
|
|
|
|
|
switch (response)
|
|
|
|
{
|
|
|
|
case GTK_RESPONSE_OK:
|
2012-02-03 23:34:33 +00:00
|
|
|
gtk_color_chooser_get_rgba (GTK_COLOR_CHOOSER (dialog), &color);
|
2012-01-29 15:43:42 +00:00
|
|
|
g_print ("color accepted: %g %g %g %g\n",
|
|
|
|
color.red, color.green, color.blue, color.alpha);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
g_print ("canceled\n");
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
gtk_main_quit ();
|
|
|
|
}
|
|
|
|
|
|
|
|
int
|
|
|
|
main (int argc, char *argv[])
|
|
|
|
{
|
|
|
|
GtkWidget *dialog;
|
2012-02-04 04:45:24 +00:00
|
|
|
gint i;
|
2012-01-29 15:43:42 +00:00
|
|
|
|
|
|
|
gtk_init (NULL, NULL);
|
|
|
|
|
|
|
|
dialog = gtk_color_chooser_dialog_new ("Select a color", NULL);
|
2012-02-04 04:45:24 +00:00
|
|
|
|
|
|
|
for (i = 1; i < argc; i++)
|
2012-01-31 07:05:37 +00:00
|
|
|
{
|
2012-02-04 04:45:24 +00:00
|
|
|
if (g_strcmp0 (argv[i], "--no-alpha") == 0)
|
|
|
|
{
|
|
|
|
g_print ("turning alpha off\n");
|
|
|
|
gtk_color_chooser_set_use_alpha (GTK_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);
|
|
|
|
}
|
2012-02-04 06:45:55 +00:00
|
|
|
else if (g_strcmp0 (argv[i], "--palette") == 0)
|
|
|
|
{
|
2012-02-09 03:04:49 +00:00
|
|
|
const gchar *c[9] = { "red", "maroon", "yellow", "green", "blue", "magenta", "DarkOliveGreen4", "khaki2", "thistle1" };
|
2012-02-04 06:45:55 +00:00
|
|
|
GdkRGBA color;
|
2012-02-09 03:04:49 +00:00
|
|
|
GdkRGBA colors[9*9];
|
2012-02-04 06:45:55 +00:00
|
|
|
gint i,j;
|
|
|
|
gdouble f[5] = { 0.2, 0.35, 0.5, 0.65, 0.8 };
|
|
|
|
|
|
|
|
g_print ("setting custom palette\n");
|
2012-02-09 03:04:49 +00:00
|
|
|
for (i = 0; i < 9; i++)
|
2012-02-04 06:45:55 +00:00
|
|
|
{
|
|
|
|
gdk_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;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
gtk_color_chooser_add_palette (GTK_COLOR_CHOOSER (dialog),
|
|
|
|
FALSE,
|
2012-02-09 03:04:49 +00:00
|
|
|
9, 9*9,
|
2012-02-04 06:45:55 +00:00
|
|
|
colors);
|
|
|
|
}
|
2012-01-31 07:05:37 +00:00
|
|
|
}
|
2012-02-04 04:45:24 +00:00
|
|
|
|
2012-01-29 15:43:42 +00:00
|
|
|
g_signal_connect (dialog, "notify::color", G_CALLBACK (color_changed), NULL);
|
|
|
|
g_signal_connect (dialog, "response", G_CALLBACK (dialog_response), NULL);
|
|
|
|
|
|
|
|
gtk_widget_show_all (dialog);
|
|
|
|
|
|
|
|
gtk_main ();
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|