Merge tag 'upstream/1.1.5'
[psensor-pkg-ubuntu.git] / src / ui_color.c
1 /*
2  * Copyright (C) 2010-2014 jeanfi@gmail.com
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License as
6  * published by the Free Software Foundation; either version 2 of the
7  * License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful, but
10  * WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
17  * 02110-1301 USA
18  */
19 #include <gtk/gtk.h>
20
21 #include "ui_color.h"
22
23 int ui_change_color(const char *title, struct color *col, GtkWindow *win)
24 {
25         GdkRGBA color;
26         int res;
27         GtkColorChooserDialog *colordlg;
28         double r, g, b;
29
30         color.red = col->red;
31         color.green = col->green;
32         color.blue = col->blue;
33         color.alpha = 1;
34
35         colordlg = GTK_COLOR_CHOOSER_DIALOG
36                 (gtk_color_chooser_dialog_new(title, win));
37
38         gtk_color_chooser_set_use_alpha(GTK_COLOR_CHOOSER(colordlg), 0);
39
40         gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(colordlg), &color);
41
42         res = gtk_dialog_run(GTK_DIALOG(colordlg));
43
44         if (res == GTK_RESPONSE_OK) {
45                 gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(colordlg), &color);
46
47                 /* GdkRGBA defines rgb as double 0..1 but chooser returns
48                  * values > 1 when selecting a custom undefined color.
49                  * Not sure whether that's a gtk/gdk bug. */
50
51                 if (color.red > 1)
52                         r = 1;
53                 else
54                         r = color.red;
55
56                 if (color.green > 1)
57                         g = 1;
58                 else
59                         g = color.green;
60
61                 if (color.blue > 1)
62                         b = 1;
63                 else
64                         b = color.blue;
65
66                 color_set(col, r, g, b);
67         }
68
69         gtk_widget_destroy(GTK_WIDGET(colordlg));
70
71         return res == GTK_RESPONSE_OK;
72 }