9a16ab05962cf4e01d8b518267bee0a6d3f6b934
1 #ifdef HAVE_CONFIG_H
2 # include "config.h"
3 #endif
4 #include <glibmm/i18n.h>
5 #include "sp-color-gtkselector.h"
8 static void sp_color_gtkselector_class_init (SPColorGtkselectorClass *klass);
9 static void sp_color_gtkselector_init (SPColorGtkselector *csel);
10 static void sp_color_gtkselector_destroy (GtkObject *object);
12 static void sp_color_gtkselector_show_all (GtkWidget *widget);
13 static void sp_color_gtkselector_hide_all (GtkWidget *widget);
16 static SPColorSelectorClass *parent_class;
18 #define XPAD 4
19 #define YPAD 1
21 GType
22 sp_color_gtkselector_get_type (void)
23 {
24 static GType type = 0;
25 if (!type) {
26 static const GTypeInfo info = {
27 sizeof (SPColorGtkselectorClass),
28 NULL, /* base_init */
29 NULL, /* base_finalize */
30 (GClassInitFunc) sp_color_gtkselector_class_init,
31 NULL, /* class_finalize */
32 NULL, /* class_data */
33 sizeof (SPColorGtkselector),
34 0, /* n_preallocs */
35 (GInstanceInitFunc) sp_color_gtkselector_init,
36 NULL,
37 };
39 type = g_type_register_static (SP_TYPE_COLOR_SELECTOR,
40 "SPColorGtkselector",
41 &info,
42 static_cast< GTypeFlags > (0) );
43 }
44 return type;
45 }
47 static void
48 sp_color_gtkselector_class_init (SPColorGtkselectorClass *klass)
49 {
50 static const gchar* nameset[] = {N_("System"), 0};
51 GtkObjectClass *object_class;
52 GtkWidgetClass *widget_class;
53 SPColorSelectorClass *selector_class;
55 object_class = (GtkObjectClass *) klass;
56 widget_class = (GtkWidgetClass *) klass;
57 selector_class = SP_COLOR_SELECTOR_CLASS (klass);
59 parent_class = SP_COLOR_SELECTOR_CLASS (g_type_class_peek_parent (klass));
61 selector_class->name = nameset;
62 selector_class->submode_count = 1;
64 object_class->destroy = sp_color_gtkselector_destroy;
66 widget_class->show_all = sp_color_gtkselector_show_all;
67 widget_class->hide_all = sp_color_gtkselector_hide_all;
68 }
70 void sp_color_gtkselector_init (SPColorGtkselector *csel)
71 {
72 SP_COLOR_SELECTOR(csel)->base = new ColorGtkselector( SP_COLOR_SELECTOR(csel) );
74 if ( SP_COLOR_SELECTOR(csel)->base )
75 {
76 SP_COLOR_SELECTOR(csel)->base->init();
77 }
78 }
80 void ColorGtkselector::init()
81 {
82 GtkWidget *gtksel;
84 gtksel = gtk_color_selection_new();
85 gtk_widget_show (gtksel);
86 _gtkThing = GTK_COLOR_SELECTION (gtksel);
87 gtk_box_pack_start (GTK_BOX (_csel), gtksel, TRUE, TRUE, 0);
89 _sigId = g_signal_connect( GTK_OBJECT(gtksel), "color-changed", GTK_SIGNAL_FUNC( _gtkChanged ), _csel);
90 }
92 static void
93 sp_color_gtkselector_destroy (GtkObject *object)
94 {
95 if (((GtkObjectClass *) (parent_class))->destroy)
96 (* ((GtkObjectClass *) (parent_class))->destroy) (object);
97 }
99 static void
100 sp_color_gtkselector_show_all (GtkWidget *widget)
101 {
102 gtk_widget_show (widget);
103 }
105 static void
106 sp_color_gtkselector_hide_all (GtkWidget *widget)
107 {
108 gtk_widget_hide (widget);
109 }
111 GtkWidget *
112 sp_color_gtkselector_new( GType )
113 {
114 SPColorGtkselector *csel;
116 csel = (SPColorGtkselector*)gtk_type_new (SP_TYPE_COLOR_GTKSELECTOR);
118 return GTK_WIDGET (csel);
119 }
121 ColorGtkselector::ColorGtkselector( SPColorSelector* csel )
122 : ColorSelector( csel ),
123 _gtkThing(0)
124 {
125 }
127 ColorGtkselector::~ColorGtkselector()
128 {
129 }
131 void ColorGtkselector::_colorChanged( const SPColor& color, gfloat alpha )
132 {
133 GdkColor gcolor;
134 g_return_if_fail (_csel != NULL);
135 g_return_if_fail (SP_IS_COLOR_GTKSELECTOR (_csel));
136 g_return_if_fail( ( 0.0 <= alpha ) && ( alpha <= 1.0 ) );
138 _color = color;
139 _alpha = alpha;
141 gcolor.pixel = 0;
142 gcolor.red = static_cast< guint16 > (color.v.c[0] * 65535);
143 gcolor.green = static_cast< guint16 > (color.v.c[1] * 65535);
144 gcolor.blue = static_cast< guint16 > (color.v.c[2] * 65535);
146 // g_message( "***** _colorChanged %04x %04x %04x", gcolor.red, gcolor.green, gcolor.blue );
147 g_signal_handler_block( _gtkThing, _sigId );
148 gtk_color_selection_set_current_alpha (_gtkThing, (guint16)(65535 * alpha));
149 gtk_color_selection_set_current_color (_gtkThing, &gcolor);
150 g_signal_handler_unblock(_gtkThing, _sigId );
151 }
153 void ColorGtkselector::_gtkChanged( GtkColorSelection *colorselection, SPColorGtkselector *gtksel )
154 {
155 GdkColor color;
156 gtk_color_selection_get_current_color (colorselection, &color);
158 guint16 alpha = gtk_color_selection_get_current_alpha (colorselection);
160 SPColor ourColor( (color.red / 65535.0), (color.green / 65535.0), (color.blue / 65535.0) );
162 // g_message( "***** _gtkChanged %04x %04x %04x", color.red, color.green, color.blue );
164 ColorGtkselector* gtkInst = (ColorGtkselector*)(SP_COLOR_SELECTOR(gtksel)->base);
165 gtkInst->_updateInternals( ourColor, static_cast< gfloat > (alpha) / 65535.0, gtk_color_selection_is_adjusting(colorselection) );
166 }