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;
22
sp_color_gtkselector_get_type (void)
24
static GType type = 0;
26
static const GTypeInfo info = {
27
sizeof (SPColorGtkselectorClass),
29
NULL, /* base_finalize */
30
(GClassInitFunc) sp_color_gtkselector_class_init,
31
NULL, /* class_finalize */
32
NULL, /* class_data */
33
sizeof (SPColorGtkselector),
35
(GInstanceInitFunc) sp_color_gtkselector_init,
39
type = g_type_register_static (SP_TYPE_COLOR_SELECTOR,
42
static_cast< GTypeFlags > (0) );
48
sp_color_gtkselector_class_init (SPColorGtkselectorClass *klass)
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;
70
void sp_color_gtkselector_init (SPColorGtkselector *csel)
72
SP_COLOR_SELECTOR(csel)->base = new ColorGtkselector( SP_COLOR_SELECTOR(csel) );
74
if ( SP_COLOR_SELECTOR(csel)->base )
76
SP_COLOR_SELECTOR(csel)->base->init();
80
void ColorGtkselector::init()
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);
93
sp_color_gtkselector_destroy (GtkObject *object)
95
if (((GtkObjectClass *) (parent_class))->destroy)
96
(* ((GtkObjectClass *) (parent_class))->destroy) (object);
100
sp_color_gtkselector_show_all (GtkWidget *widget)
102
gtk_widget_show (widget);
106
sp_color_gtkselector_hide_all (GtkWidget *widget)
108
gtk_widget_hide (widget);
112
sp_color_gtkselector_new (GType, SPColorSpaceType colorspace)
114
SPColorGtkselector *csel;
116
csel = (SPColorGtkselector*)gtk_type_new (SP_TYPE_COLOR_GTKSELECTOR);
118
return GTK_WIDGET (csel);
121
ColorGtkselector::ColorGtkselector( SPColorSelector* csel )
122
: ColorSelector( csel ),
127
ColorGtkselector::~ColorGtkselector()
131
void ColorGtkselector::_colorChanged( const SPColor& color, gfloat alpha )
135
g_return_if_fail (_csel != NULL);
136
g_return_if_fail (SP_IS_COLOR_GTKSELECTOR (_csel));
137
g_return_if_fail( ( 0.0 <= alpha ) && ( alpha <= 1.0 ) );
139
sp_color_copy (&_color, &color);
142
sp_color_get_rgb_floatv( &color, rgb );
144
gcolor.red = static_cast< guint16 > (rgb[0] * 65535);
145
gcolor.green = static_cast< guint16 > (rgb[1] * 65535);
146
gcolor.blue = static_cast< guint16 > (rgb[2] * 65535);
148
// g_message( "***** _colorChanged %04x %04x %04x", gcolor.red, gcolor.green, gcolor.blue );
149
g_signal_handler_block( _gtkThing, _sigId );
150
gtk_color_selection_set_current_alpha (_gtkThing, (guint16)(65535 * alpha));
151
gtk_color_selection_set_current_color (_gtkThing, &gcolor);
152
g_signal_handler_unblock(_gtkThing, _sigId );
155
void ColorGtkselector::_gtkChanged( GtkColorSelection *colorselection, SPColorGtkselector *gtksel )
157
ColorGtkselector* gtkInst = (ColorGtkselector*)(SP_COLOR_SELECTOR(gtksel)->base);
162
gtk_color_selection_get_current_color (colorselection, &color);
163
alpha = gtk_color_selection_get_current_alpha (colorselection);
165
sp_color_set_rgb_float (&ourColor, (color.red / 65535.0), (color.green / 65535.0), (color.blue / 65535.0));
167
// g_message( "***** _gtkChanged %04x %04x %04x", color.red, color.green, color.blue );
169
gtkInst->_updateInternals( ourColor, static_cast< gfloat > (alpha) / 65535.0, gtk_color_selection_is_adjusting(colorselection) );