2
* bulia byak <buliabyak@users.sf.net>
10
#include <glibmm/i18n.h>
11
#include "../dialogs/dialog-events.h"
12
#include "sp-color-scales.h"
14
#define CSC_CHANNEL_R (1 << 0)
15
#define CSC_CHANNEL_G (1 << 1)
16
#define CSC_CHANNEL_B (1 << 2)
17
#define CSC_CHANNEL_A (1 << 3)
18
#define CSC_CHANNEL_H (1 << 0)
19
#define CSC_CHANNEL_S (1 << 1)
20
#define CSC_CHANNEL_V (1 << 2)
21
#define CSC_CHANNEL_C (1 << 0)
22
#define CSC_CHANNEL_M (1 << 1)
23
#define CSC_CHANNEL_Y (1 << 2)
24
#define CSC_CHANNEL_K (1 << 3)
25
#define CSC_CHANNEL_CMYKA (1 << 4)
27
#define CSC_CHANNELS_ALL 0
32
static void sp_color_scales_class_init (SPColorScalesClass *klass);
33
static void sp_color_scales_init (SPColorScales *cs);
34
static void sp_color_scales_destroy (GtkObject *object);
36
static void sp_color_scales_show_all (GtkWidget *widget);
37
static void sp_color_scales_hide_all (GtkWidget *widget);
39
static const gchar *sp_color_scales_hue_map (void);
43
static SPColorSelectorClass *parent_class;
48
#define noDUMP_CHANGE_INFO 1
51
sp_color_scales_get_type (void)
53
static GType type = 0;
55
static const GTypeInfo info = {
56
sizeof (SPColorScalesClass),
58
NULL, /* base_finalize */
59
(GClassInitFunc) sp_color_scales_class_init,
60
NULL, /* class_finalize */
61
NULL, /* class_data */
62
sizeof (SPColorScales),
64
(GInstanceInitFunc) sp_color_scales_init,
68
type = g_type_register_static (SP_TYPE_COLOR_SELECTOR,
71
static_cast< GTypeFlags > (0) );
77
sp_color_scales_class_init (SPColorScalesClass *klass)
79
static const gchar* nameset[] = {N_("RGB"), N_("HSL"), N_("CMYK"), 0};
80
GtkObjectClass *object_class;
81
GtkWidgetClass *widget_class;
82
SPColorSelectorClass *selector_class;
84
object_class = (GtkObjectClass *) klass;
85
widget_class = (GtkWidgetClass *) klass;
86
selector_class = SP_COLOR_SELECTOR_CLASS (klass);
88
parent_class = SP_COLOR_SELECTOR_CLASS (g_type_class_peek_parent (klass));
90
selector_class->name = nameset;
91
selector_class->submode_count = 3;
93
object_class->destroy = sp_color_scales_destroy;
95
widget_class->show_all = sp_color_scales_show_all;
96
widget_class->hide_all = sp_color_scales_hide_all;
99
ColorScales::ColorScales( SPColorSelector* csel )
100
: ColorSelector( csel ),
101
_mode( SP_COLOR_SCALES_MODE_NONE ),
102
_rangeLimit( 255.0 ),
106
for (gint i = 0; i < 5; i++) {
114
ColorScales::~ColorScales()
116
for (gint i = 0; i < 5; i++) {
124
void sp_color_scales_init (SPColorScales *cs)
126
SP_COLOR_SELECTOR(cs)->base = new ColorScales( SP_COLOR_SELECTOR(cs) );
128
if ( SP_COLOR_SELECTOR(cs)->base )
130
SP_COLOR_SELECTOR(cs)->base->init();
134
void ColorScales::init()
142
_tt = gtk_tooltips_new();
144
t = gtk_table_new (5, 3, FALSE);
146
gtk_box_pack_start (GTK_BOX (_csel), t, TRUE, TRUE, 0);
148
/* Create components */
149
for (i = 0; i < static_cast< gint > (G_N_ELEMENTS(_a)) ; i++) {
151
_l[i] = gtk_label_new("");
152
gtk_misc_set_alignment (GTK_MISC (_l[i]), 1.0, 0.5);
153
gtk_widget_show (_l[i]);
154
gtk_table_attach (GTK_TABLE (t), _l[i], 0, 1, i, i + 1, GTK_FILL, GTK_FILL, XPAD, YPAD);
156
_a[i] = (GtkAdjustment *) gtk_adjustment_new (0.0, 0.0, _rangeLimit, 1.0, 10.0, 10.0);
158
_s[i] = sp_color_slider_new (_a[i]);
159
gtk_widget_show (_s[i]);
160
gtk_table_attach (GTK_TABLE (t), _s[i], 1, 2, i, i + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)GTK_FILL, XPAD, YPAD);
163
_b[i] = gtk_spin_button_new (GTK_ADJUSTMENT (_a[i]), 1.0, 0);
164
sp_dialog_defocus_on_enter (_b[i]);
165
gtk_label_set_mnemonic_widget (GTK_LABEL(_l[i]), _b[i]);
166
gtk_widget_show (_b[i]);
167
gtk_table_attach (GTK_TABLE (t), _b[i], 2, 3, i, i + 1, (GtkAttachOptions)0, (GtkAttachOptions)0, XPAD, YPAD);
169
/* Attach channel value to adjustment */
170
gtk_object_set_data (GTK_OBJECT (_a[i]), "channel", GINT_TO_POINTER (i));
172
gtk_signal_connect (GTK_OBJECT (_a[i]), "value_changed",
173
GTK_SIGNAL_FUNC (_adjustmentAnyChanged), _csel);
174
gtk_signal_connect (GTK_OBJECT (_s[i]), "grabbed",
175
GTK_SIGNAL_FUNC (_sliderAnyGrabbed), _csel);
176
gtk_signal_connect (GTK_OBJECT (_s[i]), "released",
177
GTK_SIGNAL_FUNC (_sliderAnyReleased), _csel);
178
gtk_signal_connect (GTK_OBJECT (_s[i]), "changed",
179
GTK_SIGNAL_FUNC (_sliderAnyChanged), _csel);
182
/* Initial mode is none, so it works */
183
setMode(SP_COLOR_SCALES_MODE_RGB);
187
sp_color_scales_destroy (GtkObject *object)
189
if (((GtkObjectClass *) (parent_class))->destroy)
190
(* ((GtkObjectClass *) (parent_class))->destroy) (object);
194
sp_color_scales_show_all (GtkWidget *widget)
196
gtk_widget_show (widget);
200
sp_color_scales_hide_all (GtkWidget *widget)
202
gtk_widget_hide (widget);
206
sp_color_scales_new (void)
210
csel = (SPColorScales*)gtk_type_new (SP_TYPE_COLOR_SCALES);
212
return GTK_WIDGET (csel);
215
void ColorScales::_recalcColor( gboolean changing )
224
case SP_COLOR_SCALES_MODE_RGB:
225
case SP_COLOR_SCALES_MODE_HSV:
227
color.set( c[0], c[1], c[2] );
230
case SP_COLOR_SCALES_MODE_CMYK:
232
_getCmykaFloatv( c );
235
sp_color_cmyk_to_rgb_floatv( rgb, c[0], c[1], c[2], c[3] );
236
color.set( rgb[0], rgb[1], rgb[2] );
241
g_warning ("file %s: line %d: Illegal color selector mode %d", __FILE__, __LINE__, _mode);
244
_updateInternals( color, alpha, _dragging );
248
_updateInternals( _color, _alpha, _dragging );
252
/* Helpers for setting color value */
253
gfloat ColorScales::getScaled( const GtkAdjustment *a )
255
gfloat val = a->value / a->upper;
259
void ColorScales::setScaled( GtkAdjustment *a, gfloat v )
261
gfloat val = v * a->upper;
262
gtk_adjustment_set_value( a, val );
265
void ColorScales::_setRangeLimit( gdouble upper )
268
for ( gint i = 0; i < static_cast<gint>(G_N_ELEMENTS(_a)); i++ ) {
269
_a[i]->upper = upper;
270
gtk_adjustment_changed( _a[i] );
274
void ColorScales::_colorChanged()
276
#ifdef DUMP_CHANGE_INFO
277
g_message("ColorScales::_colorChanged( this=%p, %f, %f, %f, %f)", this, _color.v.c[0], _color.v.c[1], _color.v.c[2], _alpha );
280
gfloat c[5] = {0.0, 0.0, 0.0, 0.0};
283
case SP_COLOR_SCALES_MODE_RGB:
284
sp_color_get_rgb_floatv( &_color, c );
288
case SP_COLOR_SCALES_MODE_HSV:
289
sp_color_get_rgb_floatv( &_color, tmp );
290
sp_color_rgb_to_hsl_floatv (c, tmp[0], tmp[1], tmp[2]);
294
case SP_COLOR_SCALES_MODE_CMYK:
295
sp_color_get_cmyk_floatv( &_color, c );
299
g_warning ("file %s: line %d: Illegal color selector mode %d", __FILE__, __LINE__, _mode);
304
setScaled( _a[0], c[0] );
305
setScaled( _a[1], c[1] );
306
setScaled( _a[2], c[2] );
307
setScaled( _a[3], c[3] );
308
setScaled( _a[4], c[4] );
309
_updateSliders( CSC_CHANNELS_ALL );
313
void ColorScales::_getRgbaFloatv( gfloat *rgba )
315
g_return_if_fail (rgba != NULL);
318
case SP_COLOR_SCALES_MODE_RGB:
319
rgba[0] = getScaled(_a[0]);
320
rgba[1] = getScaled(_a[1]);
321
rgba[2] = getScaled(_a[2]);
322
rgba[3] = getScaled(_a[3]);
324
case SP_COLOR_SCALES_MODE_HSV:
325
sp_color_hsl_to_rgb_floatv (rgba, getScaled(_a[0]), getScaled(_a[1]), getScaled(_a[2]));
326
rgba[3] = getScaled(_a[3]);
328
case SP_COLOR_SCALES_MODE_CMYK:
329
sp_color_cmyk_to_rgb_floatv (rgba, getScaled(_a[0]), getScaled(_a[1]), getScaled(_a[2]), getScaled(_a[3]));
330
rgba[3] = getScaled(_a[4]);
333
g_warning ("file %s: line %d: Illegal color selector mode", __FILE__, __LINE__);
338
void ColorScales::_getCmykaFloatv( gfloat *cmyka )
342
g_return_if_fail (cmyka != NULL);
345
case SP_COLOR_SCALES_MODE_RGB:
346
sp_color_rgb_to_cmyk_floatv (cmyka, getScaled(_a[0]), getScaled(_a[1]), getScaled(_a[2]));
347
cmyka[4] = getScaled(_a[3]);
349
case SP_COLOR_SCALES_MODE_HSV:
350
sp_color_hsl_to_rgb_floatv (rgb, getScaled(_a[0]), getScaled(_a[1]), getScaled(_a[2]));
351
sp_color_rgb_to_cmyk_floatv (cmyka, rgb[0], rgb[1], rgb[2]);
352
cmyka[4] = getScaled(_a[3]);
354
case SP_COLOR_SCALES_MODE_CMYK:
355
cmyka[0] = getScaled(_a[0]);
356
cmyka[1] = getScaled(_a[1]);
357
cmyka[2] = getScaled(_a[2]);
358
cmyka[3] = getScaled(_a[3]);
359
cmyka[4] = getScaled(_a[4]);
362
g_warning ("file %s: line %d: Illegal color selector mode", __FILE__, __LINE__);
367
guint32 ColorScales::_getRgba32()
374
rgba = SP_RGBA32_F_COMPOSE (c[0], c[1], c[2], c[3]);
379
void ColorScales::setMode(SPColorScalesMode mode)
384
if (_mode == mode) return;
386
if ((_mode == SP_COLOR_SCALES_MODE_RGB) ||
387
(_mode == SP_COLOR_SCALES_MODE_HSV) ||
388
(_mode == SP_COLOR_SCALES_MODE_CMYK)) {
389
_getRgbaFloatv(rgba);
391
rgba[0] = rgba[1] = rgba[2] = rgba[3] = 1.0;
397
case SP_COLOR_SCALES_MODE_RGB:
398
_setRangeLimit(255.0);
399
gtk_label_set_markup_with_mnemonic (GTK_LABEL (_l[0]), _("_R"));
400
gtk_tooltips_set_tip (_tt, _s[0], _("Red"), NULL);
401
gtk_tooltips_set_tip (_tt, _b[0], _("Red"), NULL);
402
gtk_label_set_markup_with_mnemonic (GTK_LABEL (_l[1]), _("_G"));
403
gtk_tooltips_set_tip (_tt, _s[1], _("Green"), NULL);
404
gtk_tooltips_set_tip (_tt, _b[1], _("Green"), NULL);
405
gtk_label_set_markup_with_mnemonic (GTK_LABEL (_l[2]), _("_B"));
406
gtk_tooltips_set_tip (_tt, _s[2], _("Blue"), NULL);
407
gtk_tooltips_set_tip (_tt, _b[2], _("Blue"), NULL);
408
gtk_label_set_markup_with_mnemonic (GTK_LABEL (_l[3]), _("_A"));
409
gtk_tooltips_set_tip (_tt, _s[3], _("Alpha (opacity)"), NULL);
410
gtk_tooltips_set_tip (_tt, _b[3], _("Alpha (opacity)"), NULL);
411
sp_color_slider_set_map (SP_COLOR_SLIDER (_s[0]), NULL);
412
gtk_widget_hide (_l[4]);
413
gtk_widget_hide (_s[4]);
414
gtk_widget_hide (_b[4]);
416
setScaled( _a[0], rgba[0] );
417
setScaled( _a[1], rgba[1] );
418
setScaled( _a[2], rgba[2] );
419
setScaled( _a[3], rgba[3] );
421
_updateSliders( CSC_CHANNELS_ALL );
423
case SP_COLOR_SCALES_MODE_HSV:
424
_setRangeLimit(255.0);
425
gtk_label_set_markup_with_mnemonic (GTK_LABEL (_l[0]), _("_H"));
426
gtk_tooltips_set_tip (_tt, _s[0], _("Hue"), NULL);
427
gtk_tooltips_set_tip (_tt, _b[0], _("Hue"), NULL);
428
gtk_label_set_markup_with_mnemonic (GTK_LABEL (_l[1]), _("_S"));
429
gtk_tooltips_set_tip (_tt, _s[1], _("Saturation"), NULL);
430
gtk_tooltips_set_tip (_tt, _b[1], _("Saturation"), NULL);
431
gtk_label_set_markup_with_mnemonic (GTK_LABEL (_l[2]), _("_L"));
432
gtk_tooltips_set_tip (_tt, _s[2], _("Lightness"), NULL);
433
gtk_tooltips_set_tip (_tt, _b[2], _("Lightness"), NULL);
434
gtk_label_set_markup_with_mnemonic (GTK_LABEL (_l[3]), _("_A"));
435
gtk_tooltips_set_tip (_tt, _s[3], _("Alpha (opacity)"), NULL);
436
gtk_tooltips_set_tip (_tt, _b[3], _("Alpha (opacity)"), NULL);
437
sp_color_slider_set_map (SP_COLOR_SLIDER (_s[0]), (guchar*)sp_color_scales_hue_map ());
438
gtk_widget_hide (_l[4]);
439
gtk_widget_hide (_s[4]);
440
gtk_widget_hide (_b[4]);
443
sp_color_rgb_to_hsl_floatv (c, rgba[0], rgba[1], rgba[2]);
444
setScaled( _a[0], c[0] );
445
setScaled( _a[1], c[1] );
446
setScaled( _a[2], c[2] );
447
setScaled( _a[3], rgba[3] );
449
_updateSliders( CSC_CHANNELS_ALL );
451
case SP_COLOR_SCALES_MODE_CMYK:
452
_setRangeLimit(100.0);
453
gtk_label_set_markup_with_mnemonic (GTK_LABEL (_l[0]), _("_C"));
454
gtk_tooltips_set_tip (_tt, _s[0], _("Cyan"), NULL);
455
gtk_tooltips_set_tip (_tt, _b[0], _("Cyan"), NULL);
456
gtk_label_set_markup_with_mnemonic (GTK_LABEL (_l[1]), _("_M"));
457
gtk_tooltips_set_tip (_tt, _s[1], _("Magenta"), NULL);
458
gtk_tooltips_set_tip (_tt, _b[1], _("Magenta"), NULL);
459
gtk_label_set_markup_with_mnemonic (GTK_LABEL (_l[2]), _("_Y"));
460
gtk_tooltips_set_tip (_tt, _s[2], _("Yellow"), NULL);
461
gtk_tooltips_set_tip (_tt, _b[2], _("Yellow"), NULL);
462
gtk_label_set_markup_with_mnemonic (GTK_LABEL (_l[3]), _("_K"));
463
gtk_tooltips_set_tip (_tt, _s[3], _("Black"), NULL);
464
gtk_tooltips_set_tip (_tt, _b[3], _("Black"), NULL);
465
gtk_label_set_markup_with_mnemonic (GTK_LABEL (_l[4]), _("_A"));
466
gtk_tooltips_set_tip (_tt, _s[4], _("Alpha (opacity)"), NULL);
467
gtk_tooltips_set_tip (_tt, _b[4], _("Alpha (opacity)"), NULL);
468
sp_color_slider_set_map (SP_COLOR_SLIDER (_s[0]), NULL);
469
gtk_widget_show (_l[4]);
470
gtk_widget_show (_s[4]);
471
gtk_widget_show (_b[4]);
473
sp_color_rgb_to_cmyk_floatv (c, rgba[0], rgba[1], rgba[2]);
474
setScaled( _a[0], c[0] );
475
setScaled( _a[1], c[1] );
476
setScaled( _a[2], c[2] );
477
setScaled( _a[3], c[3] );
478
setScaled( _a[4], rgba[3] );
480
_updateSliders( CSC_CHANNELS_ALL );
483
g_warning ("file %s: line %d: Illegal color selector mode", __FILE__, __LINE__);
488
SPColorScalesMode ColorScales::getMode() const
493
void ColorScales::setSubmode( guint submode )
495
g_return_if_fail (_csel != NULL);
496
g_return_if_fail (SP_IS_COLOR_SCALES (_csel));
497
g_return_if_fail (submode < 3);
503
setMode(SP_COLOR_SCALES_MODE_RGB);
506
setMode(SP_COLOR_SCALES_MODE_HSV);
509
setMode(SP_COLOR_SCALES_MODE_CMYK);
514
guint ColorScales::getSubmode() const
520
case SP_COLOR_SCALES_MODE_HSV:
523
case SP_COLOR_SCALES_MODE_CMYK:
526
case SP_COLOR_SCALES_MODE_RGB:
534
void ColorScales::_adjustmentAnyChanged( GtkAdjustment *adjustment, SPColorScales *cs )
536
gint channel = GPOINTER_TO_INT (gtk_object_get_data (GTK_OBJECT (adjustment), "channel"));
538
_adjustmentChanged(cs, channel);
541
void ColorScales::_sliderAnyGrabbed( SPColorSlider *slider, SPColorScales *cs )
544
ColorScales* scales = (ColorScales*)(SP_COLOR_SELECTOR(cs)->base);
545
if (!scales->_dragging) {
546
scales->_dragging = TRUE;
548
scales->_recalcColor( FALSE );
552
void ColorScales::_sliderAnyReleased( SPColorSlider *slider, SPColorScales *cs )
555
ColorScales* scales = (ColorScales*)(SP_COLOR_SELECTOR(cs)->base);
556
if (scales->_dragging) {
557
scales->_dragging = FALSE;
559
scales->_recalcColor( FALSE );
563
void ColorScales::_sliderAnyChanged( SPColorSlider *slider, SPColorScales *cs )
566
ColorScales* scales = (ColorScales*)(SP_COLOR_SELECTOR(cs)->base);
568
scales->_recalcColor( TRUE );
571
void ColorScales::_adjustmentChanged( SPColorScales *cs, guint channel )
573
ColorScales* scales = (ColorScales*)(SP_COLOR_SELECTOR(cs)->base);
574
if (scales->_updating) return;
576
scales->_updating = TRUE;
578
scales->_updateSliders( (1 << channel) );
580
scales->_recalcColor (TRUE);
582
scales->_updating = FALSE;
585
void ColorScales::_updateSliders( guint channels )
587
gfloat rgb0[3], rgbm[3], rgb1[3];
592
case SP_COLOR_SCALES_MODE_RGB:
593
if ((channels != CSC_CHANNEL_R) && (channels != CSC_CHANNEL_A)) {
595
sp_color_slider_set_colors (SP_COLOR_SLIDER (_s[0]),
596
SP_RGBA32_F_COMPOSE (0.0, getScaled(_a[1]), getScaled(_a[2]), 1.0),
597
SP_RGBA32_F_COMPOSE (0.5, getScaled(_a[1]), getScaled(_a[2]), 1.0),
598
SP_RGBA32_F_COMPOSE (1.0, getScaled(_a[1]), getScaled(_a[2]), 1.0));
600
if ((channels != CSC_CHANNEL_G) && (channels != CSC_CHANNEL_A)) {
602
sp_color_slider_set_colors (SP_COLOR_SLIDER (_s[1]),
603
SP_RGBA32_F_COMPOSE (getScaled(_a[0]), 0.0, getScaled(_a[2]), 1.0),
604
SP_RGBA32_F_COMPOSE (getScaled(_a[0]), 0.5, getScaled(_a[2]), 1.0),
605
SP_RGBA32_F_COMPOSE (getScaled(_a[0]), 1.0, getScaled(_a[2]), 1.0));
607
if ((channels != CSC_CHANNEL_B) && (channels != CSC_CHANNEL_A)) {
609
sp_color_slider_set_colors (SP_COLOR_SLIDER (_s[2]),
610
SP_RGBA32_F_COMPOSE (getScaled(_a[0]), getScaled(_a[1]), 0.0, 1.0),
611
SP_RGBA32_F_COMPOSE (getScaled(_a[0]), getScaled(_a[1]), 0.5, 1.0),
612
SP_RGBA32_F_COMPOSE (getScaled(_a[0]), getScaled(_a[1]), 1.0, 1.0));
614
if (channels != CSC_CHANNEL_A) {
616
sp_color_slider_set_colors (SP_COLOR_SLIDER (_s[3]),
617
SP_RGBA32_F_COMPOSE (getScaled(_a[0]), getScaled(_a[1]), getScaled(_a[2]), 0.0),
618
SP_RGBA32_F_COMPOSE (getScaled(_a[0]), getScaled(_a[1]), getScaled(_a[2]), 0.5),
619
SP_RGBA32_F_COMPOSE (getScaled(_a[0]), getScaled(_a[1]), getScaled(_a[2]), 1.0));
622
case SP_COLOR_SCALES_MODE_HSV:
623
/* Hue is never updated */
624
if ((channels != CSC_CHANNEL_S) && (channels != CSC_CHANNEL_A)) {
625
/* Update saturation */
626
sp_color_hsl_to_rgb_floatv (rgb0, getScaled(_a[0]), 0.0, getScaled(_a[2]));
627
sp_color_hsl_to_rgb_floatv (rgbm, getScaled(_a[0]), 0.5, getScaled(_a[2]));
628
sp_color_hsl_to_rgb_floatv (rgb1, getScaled(_a[0]), 1.0, getScaled(_a[2]));
629
sp_color_slider_set_colors (SP_COLOR_SLIDER (_s[1]),
630
SP_RGBA32_F_COMPOSE (rgb0[0], rgb0[1], rgb0[2], 1.0),
631
SP_RGBA32_F_COMPOSE (rgbm[0], rgbm[1], rgbm[2], 1.0),
632
SP_RGBA32_F_COMPOSE (rgb1[0], rgb1[1], rgb1[2], 1.0));
634
if ((channels != CSC_CHANNEL_V) && (channels != CSC_CHANNEL_A)) {
636
sp_color_hsl_to_rgb_floatv (rgb0, getScaled(_a[0]), getScaled(_a[1]), 0.0);
637
sp_color_hsl_to_rgb_floatv (rgbm, getScaled(_a[0]), getScaled(_a[1]), 0.5);
638
sp_color_hsl_to_rgb_floatv (rgb1, getScaled(_a[0]), getScaled(_a[1]), 1.0);
639
sp_color_slider_set_colors (SP_COLOR_SLIDER (_s[2]),
640
SP_RGBA32_F_COMPOSE (rgb0[0], rgb0[1], rgb0[2], 1.0),
641
SP_RGBA32_F_COMPOSE (rgbm[0], rgbm[1], rgbm[2], 1.0),
642
SP_RGBA32_F_COMPOSE (rgb1[0], rgb1[1], rgb1[2], 1.0));
644
if (channels != CSC_CHANNEL_A) {
646
sp_color_hsl_to_rgb_floatv (rgb0, getScaled(_a[0]), getScaled(_a[1]), getScaled(_a[2]));
647
sp_color_slider_set_colors (SP_COLOR_SLIDER (_s[3]),
648
SP_RGBA32_F_COMPOSE (rgb0[0], rgb0[1], rgb0[2], 0.0),
649
SP_RGBA32_F_COMPOSE (rgb0[0], rgb0[1], rgb0[2], 0.5),
650
SP_RGBA32_F_COMPOSE (rgb0[0], rgb0[1], rgb0[2], 1.0));
653
case SP_COLOR_SCALES_MODE_CMYK:
654
if ((channels != CSC_CHANNEL_C) && (channels != CSC_CHANNEL_CMYKA)) {
656
sp_color_cmyk_to_rgb_floatv (rgb0, 0.0, getScaled(_a[1]), getScaled(_a[2]), getScaled(_a[3]));
657
sp_color_cmyk_to_rgb_floatv (rgbm, 0.5, getScaled(_a[1]), getScaled(_a[2]), getScaled(_a[3]));
658
sp_color_cmyk_to_rgb_floatv (rgb1, 1.0, getScaled(_a[1]), getScaled(_a[2]), getScaled(_a[3]));
659
sp_color_slider_set_colors (SP_COLOR_SLIDER (_s[0]),
660
SP_RGBA32_F_COMPOSE (rgb0[0], rgb0[1], rgb0[2], 1.0),
661
SP_RGBA32_F_COMPOSE (rgbm[0], rgbm[1], rgbm[2], 1.0),
662
SP_RGBA32_F_COMPOSE (rgb1[0], rgb1[1], rgb1[2], 1.0));
664
if ((channels != CSC_CHANNEL_M) && (channels != CSC_CHANNEL_CMYKA)) {
666
sp_color_cmyk_to_rgb_floatv (rgb0, getScaled(_a[0]), 0.0, getScaled(_a[2]), getScaled(_a[3]));
667
sp_color_cmyk_to_rgb_floatv (rgbm, getScaled(_a[0]), 0.5, getScaled(_a[2]), getScaled(_a[3]));
668
sp_color_cmyk_to_rgb_floatv (rgb1, getScaled(_a[0]), 1.0, getScaled(_a[2]), getScaled(_a[3]));
669
sp_color_slider_set_colors (SP_COLOR_SLIDER (_s[1]),
670
SP_RGBA32_F_COMPOSE (rgb0[0], rgb0[1], rgb0[2], 1.0),
671
SP_RGBA32_F_COMPOSE (rgbm[0], rgbm[1], rgbm[2], 1.0),
672
SP_RGBA32_F_COMPOSE (rgb1[0], rgb1[1], rgb1[2], 1.0));
674
if ((channels != CSC_CHANNEL_Y) && (channels != CSC_CHANNEL_CMYKA)) {
676
sp_color_cmyk_to_rgb_floatv (rgb0, getScaled(_a[0]), getScaled(_a[1]), 0.0, getScaled(_a[3]));
677
sp_color_cmyk_to_rgb_floatv (rgbm, getScaled(_a[0]), getScaled(_a[1]), 0.5, getScaled(_a[3]));
678
sp_color_cmyk_to_rgb_floatv (rgb1, getScaled(_a[0]), getScaled(_a[1]), 1.0, getScaled(_a[3]));
679
sp_color_slider_set_colors (SP_COLOR_SLIDER (_s[2]),
680
SP_RGBA32_F_COMPOSE (rgb0[0], rgb0[1], rgb0[2], 1.0),
681
SP_RGBA32_F_COMPOSE (rgbm[0], rgbm[1], rgbm[2], 1.0),
682
SP_RGBA32_F_COMPOSE (rgb1[0], rgb1[1], rgb1[2], 1.0));
684
if ((channels != CSC_CHANNEL_K) && (channels != CSC_CHANNEL_CMYKA)) {
686
sp_color_cmyk_to_rgb_floatv (rgb0, getScaled(_a[0]), getScaled(_a[1]), getScaled(_a[2]), 0.0);
687
sp_color_cmyk_to_rgb_floatv (rgbm, getScaled(_a[0]), getScaled(_a[1]), getScaled(_a[2]), 0.5);
688
sp_color_cmyk_to_rgb_floatv (rgb1, getScaled(_a[0]), getScaled(_a[1]), getScaled(_a[2]), 1.0);
689
sp_color_slider_set_colors (SP_COLOR_SLIDER (_s[3]),
690
SP_RGBA32_F_COMPOSE (rgb0[0], rgb0[1], rgb0[2], 1.0),
691
SP_RGBA32_F_COMPOSE (rgbm[0], rgbm[1], rgbm[2], 1.0),
692
SP_RGBA32_F_COMPOSE (rgb1[0], rgb1[1], rgb1[2], 1.0));
694
if (channels != CSC_CHANNEL_CMYKA) {
696
sp_color_cmyk_to_rgb_floatv (rgb0, getScaled(_a[0]), getScaled(_a[1]), getScaled(_a[2]), getScaled(_a[3]));
697
sp_color_slider_set_colors (SP_COLOR_SLIDER (_s[4]),
698
SP_RGBA32_F_COMPOSE (rgb0[0], rgb0[1], rgb0[2], 0.0),
699
SP_RGBA32_F_COMPOSE (rgb0[0], rgb0[1], rgb0[2], 0.5),
700
SP_RGBA32_F_COMPOSE (rgb0[0], rgb0[1], rgb0[2], 1.0));
704
g_warning ("file %s: line %d: Illegal color selector mode", __FILE__, __LINE__);
708
// Force the internal color to be updated
711
_recalcColor( TRUE );
715
rgba = sp_color_scales_get_rgba32 (cs);
716
sp_color_preview_set_rgba32 (SP_COLOR_PREVIEW (_p), rgba);
721
sp_color_scales_hue_map (void)
723
static gchar *map = NULL;
728
map = g_new (gchar, 4 * 1024);
730
for (h = 0; h < 1024; h++) {
732
sp_color_hsl_to_rgb_floatv (rgb, h / 1024.0, 1.0, 0.5);
733
*p++ = SP_COLOR_F_TO_U (rgb[0]);
734
*p++ = SP_COLOR_F_TO_U (rgb[1]);
735
*p++ = SP_COLOR_F_TO_U (rgb[2]);