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()
132 {
133 GdkColor gcolor;
135 gcolor.pixel = 0;
136 gcolor.red = static_cast< guint16 >(_color.v.c[0] * 65535);
137 gcolor.green = static_cast< guint16 >(_color.v.c[1] * 65535);
138 gcolor.blue = static_cast< guint16 >(_color.v.c[2] * 65535);
140 // g_message( "***** _colorChanged %04x %04x %04x", gcolor.red, gcolor.green, gcolor.blue );
141 g_signal_handler_block( _gtkThing, _sigId );
142 gtk_color_selection_set_current_alpha( _gtkThing, static_cast<guint16>(65535 * _alpha) );
143 gtk_color_selection_set_current_color( _gtkThing, &gcolor );
144 g_signal_handler_unblock(_gtkThing, _sigId );
145 }
147 void ColorGtkselector::_gtkChanged( GtkColorSelection *colorselection, SPColorGtkselector *gtksel )
148 {
149 GdkColor color;
150 gtk_color_selection_get_current_color (colorselection, &color);
152 guint16 alpha = gtk_color_selection_get_current_alpha (colorselection);
154 SPColor ourColor( (color.red / 65535.0), (color.green / 65535.0), (color.blue / 65535.0) );
156 // g_message( "***** _gtkChanged %04x %04x %04x", color.red, color.green, color.blue );
158 ColorGtkselector* gtkInst = (ColorGtkselector*)(SP_COLOR_SELECTOR(gtksel)->base);
159 gtkInst->_updateInternals( ourColor, static_cast< gfloat > (alpha) / 65535.0, gtk_color_selection_is_adjusting(colorselection) );
160 }