1
/* Helpers.c generated by valac, the Vala compiler
2
* generated from Helpers.vala, do not modify */
5
Copyright 2009 by Hans Baier
9
#include "gtkmm2ext/prolooks-helpers.h"
11
static gpointer cairo_color_parent_class = NULL;
12
static gpointer prolooks_hsl_parent_class = NULL;
13
static gpointer prolooks_hsv_parent_class = NULL;
15
CairoColor* cairo_color_construct (GType object_type, double red, double green, double blue, double alpha) {
17
self = (CairoColor*) g_type_create_instance (object_type);
18
cairo_color_set_red (self, red);
19
cairo_color_set_green (self, green);
20
cairo_color_set_blue (self, blue);
21
cairo_color_set_alpha (self, alpha);
26
CairoColor* cairo_color_new (double red, double green, double blue, double alpha) {
27
return cairo_color_construct (CAIRO_TYPE_COLOR, red, green, blue, alpha);
31
CairoColor* cairo_color_copy (CairoColor* self) {
32
CairoColor* result = NULL;
33
g_return_val_if_fail (self != NULL, NULL);
34
result = cairo_color_new (self->priv->_red, self->priv->_green, self->priv->_blue, self->priv->_alpha);
39
CairoColor* cairo_color_construct_from_string (GType object_type, const char* webcolor) {
41
g_return_val_if_fail (webcolor != NULL, NULL);
42
self = (CairoColor*) g_type_create_instance (object_type);
43
cairo_color_set_from_string (self, webcolor);
48
CairoColor* cairo_color_new_from_string (const char* webcolor) {
49
return cairo_color_construct_from_string (CAIRO_TYPE_COLOR, webcolor);
53
CairoColor* cairo_color_shade (CairoColor* self, double shade_factor) {
54
CairoColor* result = NULL;
56
g_return_val_if_fail (self != NULL, NULL);
57
hsl = prolooks_hsl_new ();
58
prolooks_hsl_from_cairo_color (hsl, self);
59
prolooks_hsl_set_lightness (hsl, fmin (prolooks_hsl_get_lightness (hsl) * shade_factor, 1.0));
60
prolooks_hsl_set_lightness (hsl, fmax (prolooks_hsl_get_lightness (hsl), 0.0));
61
prolooks_hsl_set_saturation (hsl, fmin (prolooks_hsl_get_saturation (hsl) * shade_factor, 1.0));
62
prolooks_hsl_set_saturation (hsl, fmax (prolooks_hsl_get_saturation (hsl), 0.0));
63
result = prolooks_hsl_to_cairo_color (hsl);
64
_prolooks_hsl_unref0 (hsl);
69
void cairo_color_set_to (CairoColor* self, CairoColor* a_color) {
70
g_return_if_fail (self != NULL);
71
g_return_if_fail (a_color != NULL);
72
cairo_color_set_red (self, a_color->priv->_red);
73
cairo_color_set_green (self, a_color->priv->_green);
74
cairo_color_set_blue (self, a_color->priv->_blue);
75
cairo_color_set_alpha (self, a_color->priv->_alpha);
79
void cairo_color_set_as_source_in (CairoColor* self, cairo_t* cr) {
80
g_return_if_fail (self != NULL);
81
g_return_if_fail (cr != NULL);
82
cairo_set_source_rgba (cr, self->priv->_red, self->priv->_green, self->priv->_blue, self->priv->_alpha);
86
void cairo_color_add_color_stop_to (CairoColor* self, cairo_pattern_t* p, double offset) {
87
g_return_if_fail (self != NULL);
88
g_return_if_fail (p != NULL);
89
cairo_pattern_add_color_stop_rgba (p, offset, self->priv->_red, self->priv->_green, self->priv->_blue, self->priv->_alpha);
93
void cairo_color_set_from_string (CairoColor* self, const char* webcolor) {
96
GdkColor _tmp0_ = {0,0,0,0};
97
g_return_if_fail (self != NULL);
98
g_return_if_fail (webcolor != NULL);
99
cairo_color_set_to (self, _tmp2_ = prolooks_gdk_color_to_cairo ((_tmp1_ = (prolooks_color_from_string (webcolor, &_tmp0_), _tmp0_), &_tmp1_)));
100
_cairo_color_unref0 (_tmp2_);
104
double cairo_color_get_red (CairoColor* self) {
106
g_return_val_if_fail (self != NULL, 0.0);
107
result = self->priv->_red;
112
void cairo_color_set_red (CairoColor* self, double value) {
113
g_return_if_fail (self != NULL);
114
self->priv->_red = value;
118
double cairo_color_get_green (CairoColor* self) {
120
g_return_val_if_fail (self != NULL, 0.0);
121
result = self->priv->_green;
126
void cairo_color_set_green (CairoColor* self, double value) {
127
g_return_if_fail (self != NULL);
128
self->priv->_green = value;
132
double cairo_color_get_blue (CairoColor* self) {
134
g_return_val_if_fail (self != NULL, 0.0);
135
result = self->priv->_blue;
140
void cairo_color_set_blue (CairoColor* self, double value) {
141
g_return_if_fail (self != NULL);
142
self->priv->_blue = value;
146
double cairo_color_get_alpha (CairoColor* self) {
148
g_return_val_if_fail (self != NULL, 0.0);
149
result = self->priv->_alpha;
154
void cairo_color_set_alpha (CairoColor* self, double value) {
155
g_return_if_fail (self != NULL);
156
self->priv->_alpha = value;
160
static void cairo_value_color_init (GValue* value) {
161
value->data[0].v_pointer = NULL;
165
static void cairo_value_color_free_value (GValue* value) {
166
if (value->data[0].v_pointer) {
167
cairo_color_unref (value->data[0].v_pointer);
172
static void cairo_value_color_copy_value (const GValue* src_value, GValue* dest_value) {
173
if (src_value->data[0].v_pointer) {
174
dest_value->data[0].v_pointer = cairo_color_ref (src_value->data[0].v_pointer);
176
dest_value->data[0].v_pointer = NULL;
181
static gpointer cairo_value_color_peek_pointer (const GValue* value) {
182
return value->data[0].v_pointer;
186
static gchar* cairo_value_color_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
187
(void) n_collect_values;
188
(void) collect_flags;
189
if (collect_values[0].v_pointer) {
191
object = collect_values[0].v_pointer;
192
if (object->parent_instance.g_class == NULL) {
193
return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
194
} else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
195
return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
197
value->data[0].v_pointer = cairo_color_ref (object);
199
value->data[0].v_pointer = NULL;
205
static gchar* cairo_value_color_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
206
CairoColor** object_p;
207
(void) n_collect_values;
208
object_p = collect_values[0].v_pointer;
210
return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME ((GValue*)value));
212
if (!value->data[0].v_pointer) {
214
} else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
215
*object_p = value->data[0].v_pointer;
217
*object_p = cairo_color_ref (value->data[0].v_pointer);
223
GParamSpec* cairo_param_spec_color (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
224
CairoParamSpecColor* spec;
225
g_return_val_if_fail (g_type_is_a (object_type, CAIRO_TYPE_COLOR), NULL);
226
spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
227
G_PARAM_SPEC (spec)->value_type = object_type;
228
return G_PARAM_SPEC (spec);
232
gpointer cairo_value_get_color (const GValue* value) {
233
g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE ((GValue*)value, CAIRO_TYPE_COLOR), NULL);
234
return value->data[0].v_pointer;
238
void cairo_value_set_color (GValue* value, gpointer v_object) {
240
g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, CAIRO_TYPE_COLOR));
241
old = value->data[0].v_pointer;
243
g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, CAIRO_TYPE_COLOR));
244
g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
245
value->data[0].v_pointer = v_object;
246
cairo_color_ref (value->data[0].v_pointer);
248
value->data[0].v_pointer = NULL;
251
cairo_color_unref (old);
256
void cairo_value_take_color (GValue* value, gpointer v_object) {
258
g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, CAIRO_TYPE_COLOR));
259
old = value->data[0].v_pointer;
261
g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, CAIRO_TYPE_COLOR));
262
g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
263
value->data[0].v_pointer = v_object;
265
value->data[0].v_pointer = NULL;
268
cairo_color_unref (old);
272
static void cairo_color_finalize (CairoColor* obj) {
274
self = CAIRO_COLOR (obj);
277
static void cairo_color_class_init (CairoColorClass * klass) {
278
cairo_color_parent_class = g_type_class_peek_parent (klass);
279
CAIRO_COLOR_CLASS (klass)->finalize = cairo_color_finalize;
280
g_type_class_add_private (klass, sizeof (CairoColorPrivate));
284
static void cairo_color_instance_init (CairoColor * self) {
285
self->priv = CAIRO_COLOR_GET_PRIVATE (self);
291
GType cairo_color_get_type (void) {
292
static volatile gsize cairo_color_type_id__volatile = 0;
293
if (g_once_init_enter (&cairo_color_type_id__volatile)) {
294
static const GTypeValueTable g_define_type_value_table = { cairo_value_color_init, cairo_value_color_free_value, cairo_value_color_copy_value, cairo_value_color_peek_pointer, "p", cairo_value_color_collect_value, "p", cairo_value_color_lcopy_value };
295
static const GTypeInfo g_define_type_info = { sizeof (CairoColorClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) cairo_color_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (CairoColor), 0, (GInstanceInitFunc) cairo_color_instance_init, &g_define_type_value_table };
296
static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
297
GType cairo_color_type_id;
298
cairo_color_type_id = g_type_register_fundamental (g_type_fundamental_next (), "CairoColor", &g_define_type_info, &g_define_type_fundamental_info, 0);
299
g_once_init_leave (&cairo_color_type_id__volatile, cairo_color_type_id);
301
return cairo_color_type_id__volatile;
305
gpointer cairo_color_ref (gpointer instance) {
308
g_atomic_int_inc (&self->ref_count);
313
void cairo_color_unref (gpointer instance) {
316
if (g_atomic_int_dec_and_test (&self->ref_count)) {
317
CAIRO_COLOR_GET_CLASS (self)->finalize (self);
318
g_type_free_instance ((GTypeInstance *) self);
323
GType prolooks_button_state_get_type (void) {
324
static volatile gsize prolooks_button_state_type_id__volatile = 0;
325
if (g_once_init_enter (&prolooks_button_state_type_id__volatile)) {
326
static const GEnumValue values[] = {{PROLOOKS_BUTTON_STATE_NORMAL, "PROLOOKS_BUTTON_STATE_NORMAL", "normal"}, {PROLOOKS_BUTTON_STATE_PRESSED, "PROLOOKS_BUTTON_STATE_PRESSED", "pressed"}, {0, NULL, NULL}};
327
GType prolooks_button_state_type_id;
328
prolooks_button_state_type_id = g_enum_register_static ("ProlooksButtonState", values);
329
g_once_init_leave (&prolooks_button_state_type_id__volatile, prolooks_button_state_type_id);
331
return prolooks_button_state_type_id__volatile;
335
GType prolooks_button_type_get_type (void) {
336
static volatile gsize prolooks_button_type_type_id__volatile = 0;
337
if (g_once_init_enter (&prolooks_button_type_type_id__volatile)) {
338
static const GEnumValue values[] = {{PROLOOKS_BUTTON_TYPE_PRESS_BUTTON, "PROLOOKS_BUTTON_TYPE_PRESS_BUTTON", "press-button"}, {PROLOOKS_BUTTON_TYPE_TOGGLE_BUTTON, "PROLOOKS_BUTTON_TYPE_TOGGLE_BUTTON", "toggle-button"}, {0, NULL, NULL}};
339
GType prolooks_button_type_type_id;
340
prolooks_button_type_type_id = g_enum_register_static ("ProlooksButtonType", values);
341
g_once_init_leave (&prolooks_button_type_type_id__volatile, prolooks_button_type_type_id);
343
return prolooks_button_type_type_id__volatile;
347
void prolooks_set_line_width_from_device (cairo_t* cr) {
350
g_return_if_fail (cr != NULL);
353
cairo_device_to_user (cr, &ux, &uy);
357
cairo_set_line_width (cr, ux);
361
void prolooks_color_from_string (const char* webcolor, GdkColor* result) {
362
GdkColor color = {0,0,0,0};
363
g_return_if_fail (webcolor != NULL);
364
gdk_color_parse (webcolor, &color);
370
char* prolooks_color_to_string (const GdkColor* color) {
373
scale = G_MAXUINT16 / G_MAXUINT8;
374
result = g_strdup_printf ("#%02x%02x%02x", (guint) ((*color).red / scale), (guint) ((*color).green / scale), (guint) ((*color).blue / scale));
379
CairoColor* prolooks_cairo_color_from_string (const char* webcolor) {
380
CairoColor* result = NULL;
382
GdkColor _tmp0_ = {0,0,0,0};
383
g_return_val_if_fail (webcolor != NULL, NULL);
384
result = prolooks_gdk_color_to_cairo ((_tmp1_ = (prolooks_color_from_string (webcolor, &_tmp0_), _tmp0_), &_tmp1_));
389
void prolooks_set_source_color (cairo_t* cr, const GdkColor* color, double alpha) {
390
g_return_if_fail (cr != NULL);
391
cairo_set_source_rgba (cr, ((double) (*color).red) / ((double) G_MAXUINT16), ((double) (*color).green) / ((double) G_MAXUINT16), ((double) (*color).blue) / ((double) G_MAXUINT16), alpha);
395
void prolooks_gdk_color_to_cairo_color (const GdkColor* color, double* red, double* green, double* blue) {
396
*red = ((double) (*color).red) / ((double) G_MAXUINT16);
397
*green = ((double) (*color).green) / ((double) G_MAXUINT16);
398
*blue = ((double) (*color).blue) / ((double) G_MAXUINT16);
402
CairoColor* prolooks_gdk_color_to_cairo (const GdkColor* color) {
403
CairoColor* result = NULL;
410
prolooks_gdk_color_to_cairo_color (color, &r, &g, &b);
411
result = cairo_color_new (r, g, b, 1.0);
416
void prolooks_cairo_color_to_gdk (CairoColor* cairo_color, GdkColor* result) {
417
GdkColor color = {0,0,0,0};
418
g_return_if_fail (cairo_color != NULL);
419
memset (&color, 0, sizeof (GdkColor));
420
color.red = (guint16) (cairo_color_get_red (cairo_color) * ((double) G_MAXUINT16));
421
color.green = (guint16) (cairo_color_get_green (cairo_color) * ((double) G_MAXUINT16));
422
color.blue = (guint16) (cairo_color_get_blue (cairo_color) * ((double) G_MAXUINT16));
428
void prolooks_set_source_color_string (cairo_t* cr, const char* color, double alpha) {
430
GdkColor _tmp0_ = {0,0,0,0};
431
g_return_if_fail (cr != NULL);
432
g_return_if_fail (color != NULL);
433
prolooks_set_source_color (cr, (_tmp1_ = (prolooks_color_from_string (color, &_tmp0_), _tmp0_), &_tmp1_), alpha);
437
void prolooks_add_color_stop (cairo_pattern_t* p, double offset, const GdkColor* color, double alpha) {
438
g_return_if_fail (p != NULL);
439
cairo_pattern_add_color_stop_rgba (p, offset, ((double) (*color).red) / ((double) G_MAXUINT16), ((double) (*color).green) / ((double) G_MAXUINT16), ((double) (*color).blue) / ((double) G_MAXUINT16), alpha);
443
void prolooks_add_color_stop_str (cairo_pattern_t* p, double offset, const char* color, double alpha) {
445
GdkColor _tmp0_ = {0,0,0,0};
446
g_return_if_fail (p != NULL);
447
g_return_if_fail (color != NULL);
448
prolooks_add_color_stop (p, offset, (_tmp1_ = (prolooks_color_from_string (color, &_tmp0_), _tmp0_), &_tmp1_), alpha);
452
cairo_pattern_t* prolooks_create_gradient (double x1, double y1, double x2, double y2, const GdkColor* start, const GdkColor* stop, double alpha_start, double alpha_stop) {
453
cairo_pattern_t* result = NULL;
454
cairo_pattern_t* gradient;
455
gradient = cairo_pattern_create_linear (x1, y1, x2, y2);
456
prolooks_add_color_stop (gradient, (double) 0, start, alpha_start);
457
prolooks_add_color_stop (gradient, (double) 1, stop, alpha_stop);
463
cairo_pattern_t* prolooks_create_gradient_str (double x1, double y1, double x2, double y2, const char* start, const char* stop, double alpha_start, double alpha_stop) {
464
cairo_pattern_t* result = NULL;
467
GdkColor _tmp1_ = {0,0,0,0};
468
GdkColor _tmp0_ = {0,0,0,0};
469
g_return_val_if_fail (start != NULL, NULL);
470
g_return_val_if_fail (stop != NULL, NULL);
471
result = prolooks_create_gradient (x1, y1, x2, y2, (_tmp2_ = (prolooks_color_from_string (start, &_tmp0_), _tmp0_), &_tmp2_), (_tmp3_ = (prolooks_color_from_string (stop, &_tmp1_), _tmp1_), &_tmp3_), alpha_start, alpha_stop);
476
void prolooks_rounded_rect (cairo_t* cr, double x, double y, double w, double h, double radius_x, double radius_y) {
477
double ARC_TO_BEZIER;
480
g_return_if_fail (cr != NULL);
481
ARC_TO_BEZIER = 0.55228475;
482
if (radius_x > (w - radius_x)) {
485
if (radius_y > (h - radius_y)) {
488
c1 = ARC_TO_BEZIER * radius_x;
489
c2 = ARC_TO_BEZIER * radius_y;
491
cairo_move_to (cr, x + radius_x, y);
492
cairo_rel_line_to (cr, w - (2 * radius_x), 0.0);
493
cairo_rel_curve_to (cr, c1, 0.0, radius_x, c2, radius_x, radius_y);
494
cairo_rel_line_to (cr, (double) 0, h - (2 * radius_y));
495
cairo_rel_curve_to (cr, 0.0, c2, c1 - radius_x, radius_y, -radius_x, radius_y);
496
cairo_rel_line_to (cr, (-w) + (2 * radius_x), (double) 0);
497
cairo_rel_curve_to (cr, -c1, (double) 0, -radius_x, -c2, -radius_x, -radius_y);
498
cairo_rel_line_to (cr, (double) 0, (-h) + (2 * radius_y));
499
cairo_rel_curve_to (cr, 0.0, -c2, radius_x - c1, -radius_y, radius_x, -radius_y);
500
cairo_close_path (cr);
504
void prolooks_background_gradient (cairo_t* cr, double w, double h) {
505
GdkColor background_gradient_start = {0,0,0,0};
506
GdkColor background_gradient_stop = {0,0,0,0};
507
cairo_pattern_t* background_gradient;
508
g_return_if_fail (cr != NULL);
509
gdk_color_parse ("#bebdc2", &background_gradient_start);
510
gdk_color_parse ("#b1b4b9", &background_gradient_stop);
511
cairo_rectangle (cr, (double) 0, (double) 0, w, h);
512
background_gradient = cairo_pattern_create_linear ((double) 0, (double) 0, (double) 0, h);
513
prolooks_add_color_stop (background_gradient, (double) 0, &background_gradient_start, 1.0);
514
prolooks_add_color_stop (background_gradient, (double) 1, &background_gradient_stop, 1.0);
515
cairo_set_source (cr, background_gradient);
517
_cairo_pattern_destroy0 (background_gradient);
521
double prolooks_modula (double number, double divisor) {
523
result = (((gint) number) % ((gint) divisor)) + (number - ((gint) number));
528
char* prolooks_hsl_to_string (ProlooksHSL* self) {
530
g_return_val_if_fail (self != NULL, NULL);
531
result = g_strdup_printf ("HSL (%f, %f, %f)", self->priv->_hue, self->priv->_saturation, self->priv->_lightness);
536
CairoColor* prolooks_hsl_to_cairo_color (ProlooksHSL* self) {
537
CairoColor* result = NULL;
548
g_return_val_if_fail (self != NULL, NULL);
549
hue_shift = (_tmp0_ = g_new0 (double, 3), _tmp0_);
550
color_shift = (_tmp1_ = g_new0 (double, 3), _tmp1_);
551
if (self->priv->_lightness <= 0.5) {
552
m2 = self->priv->_lightness * (1 + self->priv->_saturation);
554
m2 = (self->priv->_lightness + self->priv->_saturation) - (self->priv->_lightness * self->priv->_saturation);
556
m1 = (2 * self->priv->_lightness) - m2;
557
hue_shift[0] = self->priv->_hue + 120;
558
hue_shift[1] = self->priv->_hue;
559
hue_shift[2] = self->priv->_hue - 120;
560
color_shift[0] = color_shift[1] = color_shift[2] = self->priv->_lightness;
561
if (self->priv->_saturation == 0) {
580
m3 = prolooks_modula (m3, (double) 360);
583
m3 = 360 - prolooks_modula (fabs (m3), (double) 360);
587
color_shift[i] = m1 + (((m2 - m1) * m3) / 60.0);
593
color_shift[i] = m1 + (((m2 - m1) * (240 - m3)) / 60.0);
601
color = cairo_color_new (color_shift[0], color_shift[1], color_shift[2], 1.0);
603
hue_shift = (g_free (hue_shift), NULL);
604
color_shift = (g_free (color_shift), NULL);
609
void prolooks_hsl_to_gdk_color (ProlooksHSL* self, GdkColor* result) {
610
GdkColor _tmp1_ = {0,0,0,0};
613
g_return_if_fail (self != NULL);
614
*result = (_tmp2_ = (prolooks_cairo_color_to_gdk (_tmp0_ = prolooks_hsl_to_cairo_color (self), &_tmp1_), _tmp1_), _cairo_color_unref0 (_tmp0_), _tmp2_);
619
void prolooks_hsl_from_gdk_color (ProlooksHSL* self, const GdkColor* color) {
621
g_return_if_fail (self != NULL);
622
prolooks_hsl_from_cairo_color (self, _tmp0_ = prolooks_gdk_color_to_cairo (color));
623
_cairo_color_unref0 (_tmp0_);
627
void prolooks_hsl_from_cairo_color (ProlooksHSL* self, CairoColor* color) {
634
g_return_if_fail (self != NULL);
635
g_return_if_fail (color != NULL);
636
red = cairo_color_get_red (color);
637
green = cairo_color_get_green (color);
638
blue = cairo_color_get_blue (color);
662
prolooks_hsl_set_lightness (self, (max + min) / 2.0);
663
if (fabs (max - min) < 0.0001) {
664
prolooks_hsl_set_hue (self, 0.0);
665
prolooks_hsl_set_saturation (self, 0.0);
667
if (self->priv->_lightness <= 0.5) {
668
prolooks_hsl_set_saturation (self, (max - min) / (max + min));
670
prolooks_hsl_set_saturation (self, (max - min) / ((2.0 - max) - min));
674
prolooks_hsl_set_hue (self, (green - blue) / delta);
677
prolooks_hsl_set_hue (self, 2.0 + ((blue - red) / delta));
680
prolooks_hsl_set_hue (self, 4.0 + ((red - green) / delta));
684
prolooks_hsl_set_hue (self, self->priv->_hue * 60.0);
685
if (self->priv->_hue < 0.0) {
686
prolooks_hsl_set_hue (self, self->priv->_hue + 360.0);
692
ProlooksHSL* prolooks_hsl_construct (GType object_type) {
694
self = (ProlooksHSL*) g_type_create_instance (object_type);
699
ProlooksHSL* prolooks_hsl_new (void) {
700
return prolooks_hsl_construct (PROLOOKS_TYPE_HSL);
704
double prolooks_hsl_get_hue (ProlooksHSL* self) {
706
g_return_val_if_fail (self != NULL, 0.0);
707
result = self->priv->_hue;
712
void prolooks_hsl_set_hue (ProlooksHSL* self, double value) {
713
g_return_if_fail (self != NULL);
714
self->priv->_hue = value;
718
double prolooks_hsl_get_saturation (ProlooksHSL* self) {
720
g_return_val_if_fail (self != NULL, 0.0);
721
result = self->priv->_saturation;
726
void prolooks_hsl_set_saturation (ProlooksHSL* self, double value) {
727
g_return_if_fail (self != NULL);
728
self->priv->_saturation = value;
732
double prolooks_hsl_get_lightness (ProlooksHSL* self) {
734
g_return_val_if_fail (self != NULL, 0.0);
735
result = self->priv->_lightness;
740
void prolooks_hsl_set_lightness (ProlooksHSL* self, double value) {
741
g_return_if_fail (self != NULL);
742
self->priv->_lightness = value;
746
static void prolooks_value_hsl_init (GValue* value) {
747
value->data[0].v_pointer = NULL;
751
static void prolooks_value_hsl_free_value (GValue* value) {
752
if (value->data[0].v_pointer) {
753
prolooks_hsl_unref (value->data[0].v_pointer);
758
static void prolooks_value_hsl_copy_value (const GValue* src_value, GValue* dest_value) {
759
if (src_value->data[0].v_pointer) {
760
dest_value->data[0].v_pointer = prolooks_hsl_ref (src_value->data[0].v_pointer);
762
dest_value->data[0].v_pointer = NULL;
767
static gpointer prolooks_value_hsl_peek_pointer (const GValue* value) {
768
return value->data[0].v_pointer;
772
static gchar* prolooks_value_hsl_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
773
(void) n_collect_values;
774
(void) collect_flags;
775
if (collect_values[0].v_pointer) {
777
object = collect_values[0].v_pointer;
778
if (object->parent_instance.g_class == NULL) {
779
return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
780
} else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
781
return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
783
value->data[0].v_pointer = prolooks_hsl_ref (object);
785
value->data[0].v_pointer = NULL;
791
static gchar* prolooks_value_hsl_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
792
ProlooksHSL** object_p;
793
(void) n_collect_values;
794
object_p = collect_values[0].v_pointer;
796
return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME ((GValue*)value));
798
if (!value->data[0].v_pointer) {
800
} else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
801
*object_p = value->data[0].v_pointer;
803
*object_p = prolooks_hsl_ref (value->data[0].v_pointer);
809
GParamSpec* prolooks_param_spec_hsl (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
810
ProlooksParamSpecHSL* spec;
811
g_return_val_if_fail (g_type_is_a (object_type, PROLOOKS_TYPE_HSL), NULL);
812
spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
813
G_PARAM_SPEC (spec)->value_type = object_type;
814
return G_PARAM_SPEC (spec);
818
gpointer prolooks_value_get_hsl (const GValue* value) {
819
g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE ((GValue*)value, PROLOOKS_TYPE_HSL), NULL);
820
return value->data[0].v_pointer;
824
void prolooks_value_set_hsl (GValue* value, gpointer v_object) {
826
g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, PROLOOKS_TYPE_HSL));
827
old = value->data[0].v_pointer;
829
g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, PROLOOKS_TYPE_HSL));
830
g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
831
value->data[0].v_pointer = v_object;
832
prolooks_hsl_ref (value->data[0].v_pointer);
834
value->data[0].v_pointer = NULL;
837
prolooks_hsl_unref (old);
842
void prolooks_value_take_hsl (GValue* value, gpointer v_object) {
844
g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, PROLOOKS_TYPE_HSL));
845
old = value->data[0].v_pointer;
847
g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, PROLOOKS_TYPE_HSL));
848
g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
849
value->data[0].v_pointer = v_object;
851
value->data[0].v_pointer = NULL;
854
prolooks_hsl_unref (old);
858
static void prolooks_hsl_finalize (ProlooksHSL* obj) {
860
self = PROLOOKS_HSL (obj);
863
static void prolooks_hsl_class_init (ProlooksHSLClass * klass) {
864
prolooks_hsl_parent_class = g_type_class_peek_parent (klass);
865
PROLOOKS_HSL_CLASS (klass)->finalize = prolooks_hsl_finalize;
866
g_type_class_add_private (klass, sizeof (ProlooksHSLPrivate));
870
static void prolooks_hsl_instance_init (ProlooksHSL * self) {
871
self->priv = PROLOOKS_HSL_GET_PRIVATE (self);
877
GType prolooks_hsl_get_type (void) {
878
static volatile gsize prolooks_hsl_type_id__volatile = 0;
879
if (g_once_init_enter (&prolooks_hsl_type_id__volatile)) {
880
static const GTypeValueTable g_define_type_value_table = { prolooks_value_hsl_init, prolooks_value_hsl_free_value, prolooks_value_hsl_copy_value, prolooks_value_hsl_peek_pointer, "p", prolooks_value_hsl_collect_value, "p", prolooks_value_hsl_lcopy_value };
881
static const GTypeInfo g_define_type_info = { sizeof (ProlooksHSLClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) prolooks_hsl_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ProlooksHSL), 0, (GInstanceInitFunc) prolooks_hsl_instance_init, &g_define_type_value_table };
882
static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
883
GType prolooks_hsl_type_id;
884
prolooks_hsl_type_id = g_type_register_fundamental (g_type_fundamental_next (), "ProlooksHSL", &g_define_type_info, &g_define_type_fundamental_info, 0);
885
g_once_init_leave (&prolooks_hsl_type_id__volatile, prolooks_hsl_type_id);
887
return prolooks_hsl_type_id__volatile;
891
gpointer prolooks_hsl_ref (gpointer instance) {
894
g_atomic_int_inc (&self->ref_count);
899
void prolooks_hsl_unref (gpointer instance) {
902
if (g_atomic_int_dec_and_test (&self->ref_count)) {
903
PROLOOKS_HSL_GET_CLASS (self)->finalize (self);
904
g_type_free_instance ((GTypeInstance *) self);
909
char* prolooks_hsv_to_string (ProlooksHSV* self) {
911
g_return_val_if_fail (self != NULL, NULL);
912
result = g_strdup_printf ("HSV (%f, %f, %f)", self->priv->_hue, self->priv->_saturation, self->priv->_value);
917
ProlooksHSV* prolooks_hsv_construct_for_gdk_color (GType object_type, const GdkColor* color) {
919
self = (ProlooksHSV*) g_type_create_instance (object_type);
920
prolooks_hsv_from_gdk_color (self, color);
925
ProlooksHSV* prolooks_hsv_new_for_gdk_color (const GdkColor* color) {
926
return prolooks_hsv_construct_for_gdk_color (PROLOOKS_TYPE_HSV, color);
930
ProlooksHSV* prolooks_hsv_construct_for_cairo_color (GType object_type, CairoColor* color) {
932
g_return_val_if_fail (color != NULL, NULL);
933
self = (ProlooksHSV*) g_type_create_instance (object_type);
934
prolooks_hsv_from_cairo_color (self, color);
939
ProlooksHSV* prolooks_hsv_new_for_cairo_color (CairoColor* color) {
940
return prolooks_hsv_construct_for_cairo_color (PROLOOKS_TYPE_HSV, color);
944
CairoColor* prolooks_hsv_to_cairo_color (ProlooksHSV* self) {
945
CairoColor* result = NULL;
955
g_return_val_if_fail (self != NULL, NULL);
959
hi = (gint) prolooks_modula (floor (self->priv->_hue / 60.0), (double) 6);
960
f = (self->priv->_hue / 60.0) - floor (self->priv->_hue / 60.0);
961
p = self->priv->_value * (1.0 - self->priv->_saturation);
962
q = self->priv->_value * (1.0 - (f * self->priv->_saturation));
963
t = self->priv->_value * (1.0 - ((1.0 - f) * self->priv->_saturation));
967
r = self->priv->_value;
975
g = self->priv->_value;
982
g = self->priv->_value;
990
b = self->priv->_value;
997
b = self->priv->_value;
1002
r = self->priv->_value;
1012
color = cairo_color_new (r, g, b, 1.0);
1018
void prolooks_hsv_to_gdk_color (ProlooksHSV* self, GdkColor* result) {
1019
GdkColor _tmp1_ = {0,0,0,0};
1022
g_return_if_fail (self != NULL);
1023
*result = (_tmp2_ = (prolooks_cairo_color_to_gdk (_tmp0_ = prolooks_hsv_to_cairo_color (self), &_tmp1_), _tmp1_), _cairo_color_unref0 (_tmp0_), _tmp2_);
1028
void prolooks_hsv_from_gdk_color (ProlooksHSV* self, const GdkColor* color) {
1030
g_return_if_fail (self != NULL);
1031
prolooks_hsv_from_cairo_color (self, _tmp0_ = prolooks_gdk_color_to_cairo (color));
1032
_cairo_color_unref0 (_tmp0_);
1036
void prolooks_hsv_from_cairo_color (ProlooksHSV* self, CairoColor* color) {
1043
g_return_if_fail (self != NULL);
1044
g_return_if_fail (color != NULL);
1045
red = cairo_color_get_red (color);
1046
green = cairo_color_get_green (color);
1047
blue = cairo_color_get_blue (color);
1071
prolooks_hsv_set_value (self, max);
1072
if (fabs (max - min) < 0.0001) {
1073
prolooks_hsv_set_hue (self, 0.0);
1074
prolooks_hsv_set_saturation (self, 0.0);
1077
prolooks_hsv_set_saturation (self, (double) 0);
1079
prolooks_hsv_set_saturation (self, (max - min) / max);
1083
prolooks_hsv_set_hue (self, (green - blue) / delta);
1086
prolooks_hsv_set_hue (self, 2.0 + ((blue - red) / delta));
1089
prolooks_hsv_set_hue (self, 4.0 + ((red - green) / delta));
1093
prolooks_hsv_set_hue (self, self->priv->_hue * 60.0);
1094
if (self->priv->_hue < 0.0) {
1095
prolooks_hsv_set_hue (self, self->priv->_hue + 360.0);
1101
ProlooksHSV* prolooks_hsv_construct (GType object_type) {
1103
self = (ProlooksHSV*) g_type_create_instance (object_type);
1108
ProlooksHSV* prolooks_hsv_new (void) {
1109
return prolooks_hsv_construct (PROLOOKS_TYPE_HSV);
1113
double prolooks_hsv_get_hue (ProlooksHSV* self) {
1115
g_return_val_if_fail (self != NULL, 0.0);
1116
result = self->priv->_hue;
1121
void prolooks_hsv_set_hue (ProlooksHSV* self, double value) {
1122
g_return_if_fail (self != NULL);
1123
self->priv->_hue = value;
1127
double prolooks_hsv_get_saturation (ProlooksHSV* self) {
1129
g_return_val_if_fail (self != NULL, 0.0);
1130
result = self->priv->_saturation;
1135
void prolooks_hsv_set_saturation (ProlooksHSV* self, double value) {
1136
g_return_if_fail (self != NULL);
1137
self->priv->_saturation = value;
1141
double prolooks_hsv_get_value (ProlooksHSV* self) {
1143
g_return_val_if_fail (self != NULL, 0.0);
1144
result = self->priv->_value;
1149
void prolooks_hsv_set_value (ProlooksHSV* self, double value) {
1150
g_return_if_fail (self != NULL);
1151
self->priv->_value = value;
1155
static void prolooks_value_hsv_init (GValue* value) {
1156
value->data[0].v_pointer = NULL;
1160
static void prolooks_value_hsv_free_value (GValue* value) {
1161
if (value->data[0].v_pointer) {
1162
prolooks_hsv_unref (value->data[0].v_pointer);
1167
static void prolooks_value_hsv_copy_value (const GValue* src_value, GValue* dest_value) {
1168
if (src_value->data[0].v_pointer) {
1169
dest_value->data[0].v_pointer = prolooks_hsv_ref (src_value->data[0].v_pointer);
1171
dest_value->data[0].v_pointer = NULL;
1176
static gpointer prolooks_value_hsv_peek_pointer (const GValue* value) {
1177
return value->data[0].v_pointer;
1181
static gchar* prolooks_value_hsv_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
1182
(void) collect_flags;
1183
(void) n_collect_values;
1184
if (collect_values[0].v_pointer) {
1185
ProlooksHSV* object;
1186
object = collect_values[0].v_pointer;
1187
if (object->parent_instance.g_class == NULL) {
1188
return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
1189
} else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
1190
return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
1192
value->data[0].v_pointer = prolooks_hsv_ref (object);
1194
value->data[0].v_pointer = NULL;
1200
static gchar* prolooks_value_hsv_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
1201
ProlooksHSV** object_p;
1202
(void) n_collect_values;
1203
object_p = collect_values[0].v_pointer;
1205
return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME ((GValue*)value));
1207
if (!value->data[0].v_pointer) {
1209
} else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
1210
*object_p = value->data[0].v_pointer;
1212
*object_p = prolooks_hsv_ref (value->data[0].v_pointer);
1218
GParamSpec* prolooks_param_spec_hsv (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
1219
ProlooksParamSpecHSV* spec;
1220
g_return_val_if_fail (g_type_is_a (object_type, PROLOOKS_TYPE_HSV), NULL);
1221
spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
1222
G_PARAM_SPEC (spec)->value_type = object_type;
1223
return G_PARAM_SPEC (spec);
1227
gpointer prolooks_value_get_hsv (const GValue* value) {
1228
g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE ((GValue*) value, PROLOOKS_TYPE_HSV), NULL);
1229
return value->data[0].v_pointer;
1233
void prolooks_value_set_hsv (GValue* value, gpointer v_object) {
1235
g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, PROLOOKS_TYPE_HSV));
1236
old = value->data[0].v_pointer;
1238
g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, PROLOOKS_TYPE_HSV));
1239
g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
1240
value->data[0].v_pointer = v_object;
1241
prolooks_hsv_ref (value->data[0].v_pointer);
1243
value->data[0].v_pointer = NULL;
1246
prolooks_hsv_unref (old);
1251
void prolooks_value_take_hsv (GValue* value, gpointer v_object) {
1253
g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, PROLOOKS_TYPE_HSV));
1254
old = value->data[0].v_pointer;
1256
g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, PROLOOKS_TYPE_HSV));
1257
g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
1258
value->data[0].v_pointer = v_object;
1260
value->data[0].v_pointer = NULL;
1263
prolooks_hsv_unref (old);
1267
static void prolooks_hsv_finalize (ProlooksHSV* obj) {
1269
self = PROLOOKS_HSV (obj);
1272
static void prolooks_hsv_class_init (ProlooksHSVClass * klass) {
1273
prolooks_hsv_parent_class = g_type_class_peek_parent (klass);
1274
PROLOOKS_HSV_CLASS (klass)->finalize = prolooks_hsv_finalize;
1275
g_type_class_add_private (klass, sizeof (ProlooksHSVPrivate));
1279
static void prolooks_hsv_instance_init (ProlooksHSV * self) {
1280
self->priv = PROLOOKS_HSV_GET_PRIVATE (self);
1281
self->ref_count = 1;
1284
GType prolooks_hsv_get_type (void) {
1285
static volatile gsize prolooks_hsv_type_id__volatile = 0;
1286
if (g_once_init_enter (&prolooks_hsv_type_id__volatile)) {
1287
static const GTypeValueTable g_define_type_value_table = { prolooks_value_hsv_init, prolooks_value_hsv_free_value, prolooks_value_hsv_copy_value, prolooks_value_hsv_peek_pointer, "p", prolooks_value_hsv_collect_value, "p", prolooks_value_hsv_lcopy_value };
1288
static const GTypeInfo g_define_type_info = { sizeof (ProlooksHSVClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) prolooks_hsv_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ProlooksHSV), 0, (GInstanceInitFunc) prolooks_hsv_instance_init, &g_define_type_value_table };
1289
static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
1290
GType prolooks_hsv_type_id;
1291
prolooks_hsv_type_id = g_type_register_fundamental (g_type_fundamental_next (), "ProlooksHSV", &g_define_type_info, &g_define_type_fundamental_info, 0);
1292
g_once_init_leave (&prolooks_hsv_type_id__volatile, prolooks_hsv_type_id);
1294
return prolooks_hsv_type_id__volatile;
1298
gpointer prolooks_hsv_ref (gpointer instance) {
1301
g_atomic_int_inc (&self->ref_count);
1306
void prolooks_hsv_unref (gpointer instance) {
1309
if (g_atomic_int_dec_and_test (&self->ref_count)) {
1310
PROLOOKS_HSV_GET_CLASS (self)->finalize (self);
1311
g_type_free_instance ((GTypeInstance *) self);
1316
void prolooks_shade_color (const GdkColor* orig, double shade_ratio, GdkColor* result) {
1318
GdkColor _tmp0_ = {0,0,0,0};
1320
HSL = prolooks_hsl_new ();
1321
prolooks_hsl_from_gdk_color (HSL, orig);
1322
prolooks_hsl_set_lightness (HSL, fmin (prolooks_hsl_get_lightness (HSL) * shade_ratio, 1.0));
1323
prolooks_hsl_set_lightness (HSL, fmax (prolooks_hsl_get_lightness (HSL), 0.0));
1324
prolooks_hsl_set_saturation (HSL, fmin (prolooks_hsl_get_saturation (HSL) * shade_ratio, 1.0));
1325
prolooks_hsl_set_saturation (HSL, fmax (prolooks_hsl_get_saturation (HSL), 0.0));
1326
_result_ = (prolooks_hsl_to_gdk_color (HSL, &_tmp0_), _tmp0_);
1328
_prolooks_hsl_unref0 (HSL);
1333
GdkPixbuf* prolooks_cairo_image_surface_to_pixbuf (cairo_surface_t* surface) {
1334
GdkPixbuf* result = NULL;
1337
g_return_val_if_fail (surface != NULL, NULL);
1338
if (cairo_image_surface_get_format (surface) != CAIRO_FORMAT_ARGB32) {
1342
knob_data = (_tmp0_ = cairo_image_surface_get_data (surface), _tmp0_);
1358
if (!(i < (cairo_image_surface_get_height (surface) * cairo_image_surface_get_stride (surface)))) {
1361
r = knob_data[i + 0];
1362
g = knob_data[i + 1];
1363
b = knob_data[i + 2];
1364
a = knob_data[i + 3];
1365
knob_data[i + 0] = b;
1366
knob_data[i + 1] = g;
1367
knob_data[i + 2] = r;
1368
knob_data[i + 3] = a;
1372
result = gdk_pixbuf_new_from_data (knob_data, GDK_COLORSPACE_RGB, TRUE, 8, cairo_image_surface_get_width (surface), cairo_image_surface_get_height (surface), cairo_image_surface_get_stride (surface), NULL, NULL);