ardour
prolooks_helpers.c
Go to the documentation of this file.
1 /* Helpers.c generated by valac, the Vala compiler
2  * generated from Helpers.vala, do not modify */
3 
4 /*
5  Copyright 2009 by Hans Baier
6  License: LGPLv2+
7 */
8 
9 #ifdef COMPILER_MSVC
10 #include <algorithm>
11 using std::min; using std::max;
12 #endif
13 
15 
16 static gpointer cairo_color_parent_class = NULL;
17 static gpointer prolooks_hsl_parent_class = NULL;
18 static gpointer prolooks_hsv_parent_class = NULL;
19 
20 CairoColor* cairo_color_construct (GType object_type, double red, double green, double blue, double alpha) {
21  CairoColor* self;
22  self = (CairoColor*) g_type_create_instance (object_type);
23  cairo_color_set_red (self, red);
24  cairo_color_set_green (self, green);
25  cairo_color_set_blue (self, blue);
26  cairo_color_set_alpha (self, alpha);
27  return self;
28 }
29 
30 
31 CairoColor* cairo_color_new (double red, double green, double blue, double alpha) {
32  return cairo_color_construct (CAIRO_TYPE_COLOR, red, green, blue, alpha);
33 }
34 
35 
37  CairoColor* result = NULL;
38  g_return_val_if_fail (self != NULL, NULL);
39  result = cairo_color_new (self->priv->_red, self->priv->_green, self->priv->_blue, self->priv->_alpha);
40  return result;
41 }
42 
43 
44 CairoColor* cairo_color_construct_from_string (GType object_type, const char* webcolor) {
45  CairoColor* self;
46  g_return_val_if_fail (webcolor != NULL, NULL);
47  self = (CairoColor*) g_type_create_instance (object_type);
48  cairo_color_set_from_string (self, webcolor);
49  return self;
50 }
51 
52 
53 CairoColor* cairo_color_new_from_string (const char* webcolor) {
55 }
56 
57 
58 CairoColor* cairo_color_shade (CairoColor* self, double shade_factor) {
59  CairoColor* result = NULL;
60  ProlooksHSL* hsl;
61  g_return_val_if_fail (self != NULL, NULL);
62  hsl = prolooks_hsl_new ();
64  prolooks_hsl_set_lightness (hsl, fmin (prolooks_hsl_get_lightness (hsl) * shade_factor, 1.0));
66  prolooks_hsl_set_saturation (hsl, fmin (prolooks_hsl_get_saturation (hsl) * shade_factor, 1.0));
68  result = prolooks_hsl_to_cairo_color (hsl);
70  return result;
71 }
72 
73 
74 void cairo_color_set_to (CairoColor* self, CairoColor* a_color) {
75  g_return_if_fail (self != NULL);
76  g_return_if_fail (a_color != NULL);
77  cairo_color_set_red (self, a_color->priv->_red);
78  cairo_color_set_green (self, a_color->priv->_green);
79  cairo_color_set_blue (self, a_color->priv->_blue);
80  cairo_color_set_alpha (self, a_color->priv->_alpha);
81 }
82 
83 
84 void cairo_color_set_as_source_in (CairoColor* self, cairo_t* cr) {
85  g_return_if_fail (self != NULL);
86  g_return_if_fail (cr != NULL);
87  cairo_set_source_rgba (cr, self->priv->_red, self->priv->_green, self->priv->_blue, self->priv->_alpha);
88 }
89 
90 
91 void cairo_color_add_color_stop_to (CairoColor* self, cairo_pattern_t* p, double offset) {
92  g_return_if_fail (self != NULL);
93  g_return_if_fail (p != NULL);
94  cairo_pattern_add_color_stop_rgba (p, offset, self->priv->_red, self->priv->_green, self->priv->_blue, self->priv->_alpha);
95 }
96 
97 
98 void cairo_color_set_from_string (CairoColor* self, const char* webcolor) {
99  CairoColor* _tmp2_;
100  GdkColor _tmp1_;
101  GdkColor _tmp0_ = {0,0,0,0};
102  g_return_if_fail (self != NULL);
103  g_return_if_fail (webcolor != NULL);
104  cairo_color_set_to (self, _tmp2_ = prolooks_gdk_color_to_cairo ((_tmp1_ = (prolooks_color_from_string (webcolor, &_tmp0_), _tmp0_), &_tmp1_)));
105  _cairo_color_unref0 (_tmp2_);
106 }
107 
108 
110  double result;
111  g_return_val_if_fail (self != NULL, 0.0);
112  result = self->priv->_red;
113  return result;
114 }
115 
116 
117 void cairo_color_set_red (CairoColor* self, double value) {
118  g_return_if_fail (self != NULL);
119  self->priv->_red = value;
120 }
121 
122 
124  double result;
125  g_return_val_if_fail (self != NULL, 0.0);
126  result = self->priv->_green;
127  return result;
128 }
129 
130 
131 void cairo_color_set_green (CairoColor* self, double value) {
132  g_return_if_fail (self != NULL);
133  self->priv->_green = value;
134 }
135 
136 
138  double result;
139  g_return_val_if_fail (self != NULL, 0.0);
140  result = self->priv->_blue;
141  return result;
142 }
143 
144 
145 void cairo_color_set_blue (CairoColor* self, double value) {
146  g_return_if_fail (self != NULL);
147  self->priv->_blue = value;
148 }
149 
150 
152  double result;
153  g_return_val_if_fail (self != NULL, 0.0);
154  result = self->priv->_alpha;
155  return result;
156 }
157 
158 
159 void cairo_color_set_alpha (CairoColor* self, double value) {
160  g_return_if_fail (self != NULL);
161  self->priv->_alpha = value;
162 }
163 
164 
165 static void cairo_value_color_init (GValue* value) {
166  value->data[0].v_pointer = NULL;
167 }
168 
169 
170 static void cairo_value_color_free_value (GValue* value) {
171  if (value->data[0].v_pointer) {
172  cairo_color_unref (value->data[0].v_pointer);
173  }
174 }
175 
176 
177 static void cairo_value_color_copy_value (const GValue* src_value, GValue* dest_value) {
178  if (src_value->data[0].v_pointer) {
179  dest_value->data[0].v_pointer = cairo_color_ref (src_value->data[0].v_pointer);
180  } else {
181  dest_value->data[0].v_pointer = NULL;
182  }
183 }
184 
185 
186 static gpointer cairo_value_color_peek_pointer (const GValue* value) {
187  return value->data[0].v_pointer;
188 }
189 
190 
191 static gchar* cairo_value_color_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
192  (void) n_collect_values;
193  (void) collect_flags;
194  if (collect_values[0].v_pointer) {
195  CairoColor* object;
196  object = (CairoColor*)collect_values[0].v_pointer;
197  if (object->parent_instance.g_class == NULL) {
198  return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
199  } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
200  return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
201  }
202  value->data[0].v_pointer = cairo_color_ref (object);
203  } else {
204  value->data[0].v_pointer = NULL;
205  }
206  return NULL;
207 }
208 
209 
210 static gchar* cairo_value_color_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
211  CairoColor** object_p;
212  (void) n_collect_values;
213  object_p = (CairoColor**)collect_values[0].v_pointer;
214  if (!object_p) {
215  return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME ((GValue*)value));
216  }
217  if (!value->data[0].v_pointer) {
218  *object_p = NULL;
219  } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
220  *object_p = (CairoColor*)value->data[0].v_pointer;
221  } else {
222  *object_p = (CairoColor*)cairo_color_ref (value->data[0].v_pointer);
223  }
224  return NULL;
225 }
226 
227 
228 GParamSpec* cairo_param_spec_color (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
229  CairoParamSpecColor* spec;
230  g_return_val_if_fail (g_type_is_a (object_type, CAIRO_TYPE_COLOR), NULL);
231  spec = (CairoParamSpecColor*)g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
232  G_PARAM_SPEC (spec)->value_type = object_type;
233  return G_PARAM_SPEC (spec);
234 }
235 
236 
237 gpointer cairo_value_get_color (const GValue* value) {
238  g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE ((GValue*)value, CAIRO_TYPE_COLOR), NULL);
239  return value->data[0].v_pointer;
240 }
241 
242 
243 void cairo_value_set_color (GValue* value, gpointer v_object) {
244  CairoColor* old;
245  g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, CAIRO_TYPE_COLOR));
246  old = (CairoColor*)value->data[0].v_pointer;
247  if (v_object) {
248  g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, CAIRO_TYPE_COLOR));
249  g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
250  value->data[0].v_pointer = v_object;
251  cairo_color_ref (value->data[0].v_pointer);
252  } else {
253  value->data[0].v_pointer = NULL;
254  }
255  if (old) {
256  cairo_color_unref (old);
257  }
258 }
259 
260 
261 void cairo_value_take_color (GValue* value, gpointer v_object) {
262  CairoColor* old;
263  g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, CAIRO_TYPE_COLOR));
264  old = (CairoColor*)value->data[0].v_pointer;
265  if (v_object) {
266  g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, CAIRO_TYPE_COLOR));
267  g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
268  value->data[0].v_pointer = v_object;
269  } else {
270  value->data[0].v_pointer = NULL;
271  }
272  if (old) {
273  cairo_color_unref (old);
274  }
275 }
276 
277 static void cairo_color_finalize (CairoColor* obj) {
278  CairoColor * self;
279  self = CAIRO_COLOR (obj);
280 }
281 
283  cairo_color_parent_class = g_type_class_peek_parent (klass);
284  CAIRO_COLOR_CLASS (klass)->finalize = cairo_color_finalize;
285  g_type_class_add_private (klass, sizeof (CairoColorPrivate));
286 }
287 
288 
289 static void cairo_color_instance_init (CairoColor * self) {
290  self->priv = CAIRO_COLOR_GET_PRIVATE (self);
291  self->ref_count = 1;
292 }
293 
294 
295 
296 GType cairo_color_get_type (void) {
297  static volatile gsize cairo_color_type_id__volatile = 0;
298  if (g_once_init_enter (&cairo_color_type_id__volatile)) {
300  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 };
301  static const GTypeFundamentalInfo g_define_type_fundamental_info = { (GTypeFundamentalFlags)(G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
302  GType cairo_color_type_id;
303  cairo_color_type_id = g_type_register_fundamental (g_type_fundamental_next (), "CairoColor", &g_define_type_info, &g_define_type_fundamental_info, (GTypeFlags)0);
304  g_once_init_leave (&cairo_color_type_id__volatile, cairo_color_type_id);
305  }
306  return cairo_color_type_id__volatile;
307 }
308 
309 
310 gpointer cairo_color_ref (gpointer instance) {
311  CairoColor* self;
312  self = (CairoColor*)instance;
313  g_atomic_int_inc (&self->ref_count);
314  return instance;
315 }
316 
317 
318 void cairo_color_unref (gpointer instance) {
319  CairoColor* self;
320  self = (CairoColor*)instance;
321  if (g_atomic_int_dec_and_test (&self->ref_count)) {
322  CAIRO_COLOR_GET_CLASS (self)->finalize (self);
323  g_type_free_instance ((GTypeInstance *) self);
324  }
325 }
326 
327 
329  static volatile gsize prolooks_button_state_type_id__volatile = 0;
330  if (g_once_init_enter (&prolooks_button_state_type_id__volatile)) {
331  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}};
332  GType prolooks_button_state_type_id;
333  prolooks_button_state_type_id = g_enum_register_static ("ProlooksButtonState", values);
334  g_once_init_leave (&prolooks_button_state_type_id__volatile, prolooks_button_state_type_id);
335  }
336  return prolooks_button_state_type_id__volatile;
337 }
338 
339 
341  static volatile gsize prolooks_button_type_type_id__volatile = 0;
342  if (g_once_init_enter (&prolooks_button_type_type_id__volatile)) {
343  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}};
344  GType prolooks_button_type_type_id;
345  prolooks_button_type_type_id = g_enum_register_static ("ProlooksButtonType", values);
346  g_once_init_leave (&prolooks_button_type_type_id__volatile, prolooks_button_type_type_id);
347  }
348  return prolooks_button_type_type_id__volatile;
349 }
350 
351 
353  double ux;
354  double uy;
355  g_return_if_fail (cr != NULL);
356  ux = (double) 1;
357  uy = (double) 1;
358  cairo_device_to_user (cr, &ux, &uy);
359  if (ux < uy) {
360  ux = uy;
361  }
362  cairo_set_line_width (cr, ux);
363 }
364 
365 
366 void prolooks_color_from_string (const char* webcolor, GdkColor* result) {
367  GdkColor color = {0,0,0,0};
368  g_return_if_fail (webcolor != NULL);
369  gdk_color_parse (webcolor, &color);
370  *result = color;
371  return;
372 }
373 
374 
375 char* prolooks_color_to_string (const GdkColor* color) {
376  char* result = NULL;
377  guint16 scale;
378  scale = G_MAXUINT16 / G_MAXUINT8;
379  result = g_strdup_printf ("#%02x%02x%02x", (guint) ((*color).red / scale), (guint) ((*color).green / scale), (guint) ((*color).blue / scale));
380  return result;
381 }
382 
383 
385  CairoColor* result = NULL;
386  GdkColor _tmp1_;
387  GdkColor _tmp0_ = {0,0,0,0};
388  g_return_val_if_fail (webcolor != NULL, NULL);
389  result = prolooks_gdk_color_to_cairo ((_tmp1_ = (prolooks_color_from_string (webcolor, &_tmp0_), _tmp0_), &_tmp1_));
390  return result;
391 }
392 
393 
394 void prolooks_set_source_color (cairo_t* cr, const GdkColor* color, double alpha) {
395  g_return_if_fail (cr != NULL);
396  cairo_set_source_rgba (cr, ((double) (*color).red) / ((double) G_MAXUINT16), ((double) (*color).green) / ((double) G_MAXUINT16), ((double) (*color).blue) / ((double) G_MAXUINT16), alpha);
397 }
398 
399 
400 void prolooks_gdk_color_to_cairo_color (const GdkColor* color, double* red, double* green, double* blue) {
401  *red = ((double) (*color).red) / ((double) G_MAXUINT16);
402  *green = ((double) (*color).green) / ((double) G_MAXUINT16);
403  *blue = ((double) (*color).blue) / ((double) G_MAXUINT16);
404 }
405 
406 
408  CairoColor* result = NULL;
409  double r;
410  double g;
411  double b;
412  r = (double) 0;
413  g = (double) 0;
414  b = (double) 0;
415  prolooks_gdk_color_to_cairo_color (color, &r, &g, &b);
416  result = cairo_color_new (r, g, b, 1.0);
417  return result;
418 }
419 
420 
421 void prolooks_cairo_color_to_gdk (CairoColor* cairo_color, GdkColor* result) {
422  GdkColor color = {0,0,0,0};
423  g_return_if_fail (cairo_color != NULL);
424  memset (&color, 0, sizeof (GdkColor));
425  color.red = (guint16) (cairo_color_get_red (cairo_color) * ((double) G_MAXUINT16));
426  color.green = (guint16) (cairo_color_get_green (cairo_color) * ((double) G_MAXUINT16));
427  color.blue = (guint16) (cairo_color_get_blue (cairo_color) * ((double) G_MAXUINT16));
428  *result = color;
429  return;
430 }
431 
432 
433 void prolooks_set_source_color_string (cairo_t* cr, const char* color, double alpha) {
434  GdkColor _tmp1_;
435  GdkColor _tmp0_ = {0,0,0,0};
436  g_return_if_fail (cr != NULL);
437  g_return_if_fail (color != NULL);
438  prolooks_set_source_color (cr, (_tmp1_ = (prolooks_color_from_string (color, &_tmp0_), _tmp0_), &_tmp1_), alpha);
439 }
440 
441 
442 void prolooks_add_color_stop (cairo_pattern_t* p, double offset, const GdkColor* color, double alpha) {
443  g_return_if_fail (p != NULL);
444  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);
445 }
446 
447 
448 void prolooks_add_color_stop_str (cairo_pattern_t* p, double offset, const char* color, double alpha) {
449  GdkColor _tmp1_;
450  GdkColor _tmp0_ = {0,0,0,0};
451  g_return_if_fail (p != NULL);
452  g_return_if_fail (color != NULL);
453  prolooks_add_color_stop (p, offset, (_tmp1_ = (prolooks_color_from_string (color, &_tmp0_), _tmp0_), &_tmp1_), alpha);
454 }
455 
456 
457 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) {
458  cairo_pattern_t* result = NULL;
459  cairo_pattern_t* gradient;
460  gradient = cairo_pattern_create_linear (x1, y1, x2, y2);
461  prolooks_add_color_stop (gradient, (double) 0, start, alpha_start);
462  prolooks_add_color_stop (gradient, (double) 1, stop, alpha_stop);
463  result = gradient;
464  return result;
465 }
466 
467 
468 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) {
469  cairo_pattern_t* result = NULL;
470  GdkColor _tmp3_;
471  GdkColor _tmp2_;
472  GdkColor _tmp1_ = {0,0,0,0};
473  GdkColor _tmp0_ = {0,0,0,0};
474  g_return_val_if_fail (start != NULL, NULL);
475  g_return_val_if_fail (stop != NULL, NULL);
476  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);
477  return result;
478 }
479 
480 
481 void prolooks_rounded_rect (cairo_t* cr, double x, double y, double w, double h, double radius_x, double radius_y) {
482  double ARC_TO_BEZIER;
483  double c1;
484  double c2;
485  g_return_if_fail (cr != NULL);
486  ARC_TO_BEZIER = 0.55228475;
487  if (radius_x > (w - radius_x)) {
488  radius_x = w / 2;
489  }
490  if (radius_y > (h - radius_y)) {
491  radius_y = h / 2;
492  }
493  c1 = ARC_TO_BEZIER * radius_x;
494  c2 = ARC_TO_BEZIER * radius_y;
495  cairo_new_path (cr);
496  cairo_move_to (cr, x + radius_x, y);
497  cairo_rel_line_to (cr, w - (2 * radius_x), 0.0);
498  cairo_rel_curve_to (cr, c1, 0.0, radius_x, c2, radius_x, radius_y);
499  cairo_rel_line_to (cr, (double) 0, h - (2 * radius_y));
500  cairo_rel_curve_to (cr, 0.0, c2, c1 - radius_x, radius_y, -radius_x, radius_y);
501  cairo_rel_line_to (cr, (-w) + (2 * radius_x), (double) 0);
502  cairo_rel_curve_to (cr, -c1, (double) 0, -radius_x, -c2, -radius_x, -radius_y);
503  cairo_rel_line_to (cr, (double) 0, (-h) + (2 * radius_y));
504  cairo_rel_curve_to (cr, 0.0, -c2, radius_x - c1, -radius_y, radius_x, -radius_y);
505  cairo_close_path (cr);
506 }
507 
508 
509 void prolooks_background_gradient (cairo_t* cr, double w, double h) {
510  GdkColor background_gradient_start = {0,0,0,0};
511  GdkColor background_gradient_stop = {0,0,0,0};
512  cairo_pattern_t* background_gradient;
513  g_return_if_fail (cr != NULL);
514  gdk_color_parse ("#bebdc2", &background_gradient_start);
515  gdk_color_parse ("#b1b4b9", &background_gradient_stop);
516  cairo_rectangle (cr, (double) 0, (double) 0, w, h);
517  background_gradient = cairo_pattern_create_linear ((double) 0, (double) 0, (double) 0, h);
518  prolooks_add_color_stop (background_gradient, (double) 0, &background_gradient_start, 1.0);
519  prolooks_add_color_stop (background_gradient, (double) 1, &background_gradient_stop, 1.0);
520  cairo_set_source (cr, background_gradient);
521  cairo_fill (cr);
522  _cairo_pattern_destroy0 (background_gradient);
523 }
524 
525 
526 double prolooks_modula (double number, double divisor) {
527  double result = 0.0;
528  result = (((gint) number) % ((gint) divisor)) + (number - ((gint) number));
529  return result;
530 }
531 
532 
534  char* result = NULL;
535  g_return_val_if_fail (self != NULL, NULL);
536  result = g_strdup_printf ("HSL (%f, %f, %f)", self->priv->_hue, self->priv->_saturation, self->priv->_lightness);
537  return result;
538 }
539 
540 
542  CairoColor* result = NULL;
543  gint i = 0;
544  double* _tmp0_;
545  double* hue_shift;
546  double* _tmp1_;
547  double* color_shift;
548  double m1 = 0.0;
549  double m2 = 0.0;
550  double m3 = 0.0;
551  gint _tmp2_ = 0;
552  CairoColor* color;
553  g_return_val_if_fail (self != NULL, NULL);
554  hue_shift = (_tmp0_ = g_new0 (double, 3), _tmp0_);
555  color_shift = (_tmp1_ = g_new0 (double, 3), _tmp1_);
556  if (self->priv->_lightness <= 0.5) {
557  m2 = self->priv->_lightness * (1 + self->priv->_saturation);
558  } else {
559  m2 = (self->priv->_lightness + self->priv->_saturation) - (self->priv->_lightness * self->priv->_saturation);
560  }
561  m1 = (2 * self->priv->_lightness) - m2;
562  hue_shift[0] = self->priv->_hue + 120;
563  hue_shift[1] = self->priv->_hue;
564  hue_shift[2] = self->priv->_hue - 120;
565  color_shift[0] = color_shift[1] = color_shift[2] = self->priv->_lightness;
566  if (self->priv->_saturation == 0) {
567  _tmp2_ = 3;
568  } else {
569  _tmp2_ = 0;
570  }
571  i = _tmp2_;
572  {
573  gboolean _tmp3_;
574  _tmp3_ = TRUE;
575  while (TRUE) {
576  if (!_tmp3_) {
577  i++;
578  }
579  _tmp3_ = FALSE;
580  if (!(i < 3)) {
581  break;
582  }
583  m3 = hue_shift[i];
584  if (m3 > 360) {
585  m3 = prolooks_modula (m3, (double) 360);
586  } else {
587  if (m3 < 0) {
588  m3 = 360 - prolooks_modula (fabs (m3), (double) 360);
589  }
590  }
591  if (m3 < 60) {
592  color_shift[i] = m1 + (((m2 - m1) * m3) / 60.0);
593  } else {
594  if (m3 < 180) {
595  color_shift[i] = m2;
596  } else {
597  if (m3 < 240) {
598  color_shift[i] = m1 + (((m2 - m1) * (240 - m3)) / 60.0);
599  } else {
600  color_shift[i] = m1;
601  }
602  }
603  }
604  }
605  }
606  color = cairo_color_new (color_shift[0], color_shift[1], color_shift[2], 1.0);
607  result = color;
608  hue_shift = (g_free (hue_shift), NULL);
609  color_shift = (g_free (color_shift), NULL);
610  return result;
611 }
612 
613 
614 void prolooks_hsl_to_gdk_color (ProlooksHSL* self, GdkColor* result) {
615  GdkColor _tmp1_ = {0,0,0,0};
616  CairoColor* _tmp0_;
617  GdkColor _tmp2_;
618  g_return_if_fail (self != NULL);
619  *result = (_tmp2_ = (prolooks_cairo_color_to_gdk (_tmp0_ = prolooks_hsl_to_cairo_color (self), &_tmp1_), _tmp1_), _cairo_color_unref0 (_tmp0_), _tmp2_);
620  return;
621 }
622 
623 
624 void prolooks_hsl_from_gdk_color (ProlooksHSL* self, const GdkColor* color) {
625  CairoColor* _tmp0_;
626  g_return_if_fail (self != NULL);
628  _cairo_color_unref0 (_tmp0_);
629 }
630 
631 
633  double min = 0.0;
634  double max = 0.0;
635  double delta = 0.0;
636  double red;
637  double green;
638  double blue;
639  g_return_if_fail (self != NULL);
640  g_return_if_fail (color != NULL);
641  red = cairo_color_get_red (color);
642  green = cairo_color_get_green (color);
643  blue = cairo_color_get_blue (color);
644  if (red > green) {
645  if (red > blue) {
646  max = red;
647  } else {
648  max = blue;
649  }
650  if (green < blue) {
651  min = green;
652  } else {
653  min = blue;
654  }
655  } else {
656  if (green > blue) {
657  max = green;
658  } else {
659  max = blue;
660  }
661  if (red < blue) {
662  min = red;
663  } else {
664  min = blue;
665  }
666  }
667  prolooks_hsl_set_lightness (self, (max + min) / 2.0);
668  if (fabs (max - min) < 0.0001) {
669  prolooks_hsl_set_hue (self, 0.0);
670  prolooks_hsl_set_saturation (self, 0.0);
671  } else {
672  if (self->priv->_lightness <= 0.5) {
673  prolooks_hsl_set_saturation (self, (max - min) / (max + min));
674  } else {
675  prolooks_hsl_set_saturation (self, (max - min) / ((2.0 - max) - min));
676  }
677  delta = max - min;
678  if (red == max) {
679  prolooks_hsl_set_hue (self, (green - blue) / delta);
680  } else {
681  if (green == max) {
682  prolooks_hsl_set_hue (self, 2.0 + ((blue - red) / delta));
683  } else {
684  if (blue == max) {
685  prolooks_hsl_set_hue (self, 4.0 + ((red - green) / delta));
686  }
687  }
688  }
689  prolooks_hsl_set_hue (self, self->priv->_hue * 60.0);
690  if (self->priv->_hue < 0.0) {
691  prolooks_hsl_set_hue (self, self->priv->_hue + 360.0);
692  }
693  }
694 }
695 
696 
697 ProlooksHSL* prolooks_hsl_construct (GType object_type) {
698  ProlooksHSL* self;
699  self = (ProlooksHSL*) g_type_create_instance (object_type);
700  return self;
701 }
702 
703 
706 }
707 
708 
710  double result;
711  g_return_val_if_fail (self != NULL, 0.0);
712  result = self->priv->_hue;
713  return result;
714 }
715 
716 
717 void prolooks_hsl_set_hue (ProlooksHSL* self, double value) {
718  g_return_if_fail (self != NULL);
719  self->priv->_hue = value;
720 }
721 
722 
724  double result;
725  g_return_val_if_fail (self != NULL, 0.0);
726  result = self->priv->_saturation;
727  return result;
728 }
729 
730 
731 void prolooks_hsl_set_saturation (ProlooksHSL* self, double value) {
732  g_return_if_fail (self != NULL);
733  self->priv->_saturation = value;
734 }
735 
736 
738  double result;
739  g_return_val_if_fail (self != NULL, 0.0);
740  result = self->priv->_lightness;
741  return result;
742 }
743 
744 
745 void prolooks_hsl_set_lightness (ProlooksHSL* self, double value) {
746  g_return_if_fail (self != NULL);
747  self->priv->_lightness = value;
748 }
749 
750 
751 static void prolooks_value_hsl_init (GValue* value) {
752  value->data[0].v_pointer = NULL;
753 }
754 
755 
756 static void prolooks_value_hsl_free_value (GValue* value) {
757  if (value->data[0].v_pointer) {
758  prolooks_hsl_unref (value->data[0].v_pointer);
759  }
760 }
761 
762 
763 static void prolooks_value_hsl_copy_value (const GValue* src_value, GValue* dest_value) {
764  if (src_value->data[0].v_pointer) {
765  dest_value->data[0].v_pointer = prolooks_hsl_ref (src_value->data[0].v_pointer);
766  } else {
767  dest_value->data[0].v_pointer = NULL;
768  }
769 }
770 
771 
772 static gpointer prolooks_value_hsl_peek_pointer (const GValue* value) {
773  return value->data[0].v_pointer;
774 }
775 
776 
777 static gchar* prolooks_value_hsl_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
778  (void) n_collect_values;
779  (void) collect_flags;
780  if (collect_values[0].v_pointer) {
781  ProlooksHSL* object;
782  object = (ProlooksHSL*)collect_values[0].v_pointer;
783  if (object->parent_instance.g_class == NULL) {
784  return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
785  } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
786  return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
787  }
788  value->data[0].v_pointer = prolooks_hsl_ref (object);
789  } else {
790  value->data[0].v_pointer = NULL;
791  }
792  return NULL;
793 }
794 
795 
796 static gchar* prolooks_value_hsl_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
797  ProlooksHSL** object_p;
798  (void) n_collect_values;
799  object_p = (ProlooksHSL**)collect_values[0].v_pointer;
800  if (!object_p) {
801  return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME ((GValue*)value));
802  }
803  if (!value->data[0].v_pointer) {
804  *object_p = NULL;
805  } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
806  *object_p = (ProlooksHSL*)value->data[0].v_pointer;
807  } else {
808  *object_p = (ProlooksHSL*)prolooks_hsl_ref (value->data[0].v_pointer);
809  }
810  return NULL;
811 }
812 
813 
814 GParamSpec* prolooks_param_spec_hsl (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
815  ProlooksParamSpecHSL* spec;
816  g_return_val_if_fail (g_type_is_a (object_type, PROLOOKS_TYPE_HSL), NULL);
817  spec = (ProlooksParamSpecHSL*)g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
818  G_PARAM_SPEC (spec)->value_type = object_type;
819  return G_PARAM_SPEC (spec);
820 }
821 
822 
823 gpointer prolooks_value_get_hsl (const GValue* value) {
824  g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE ((GValue*)value, PROLOOKS_TYPE_HSL), NULL);
825  return value->data[0].v_pointer;
826 }
827 
828 
829 void prolooks_value_set_hsl (GValue* value, gpointer v_object) {
830  ProlooksHSL* old;
831  g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, PROLOOKS_TYPE_HSL));
832  old = (ProlooksHSL*)value->data[0].v_pointer;
833  if (v_object) {
834  g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, PROLOOKS_TYPE_HSL));
835  g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
836  value->data[0].v_pointer = v_object;
837  prolooks_hsl_ref (value->data[0].v_pointer);
838  } else {
839  value->data[0].v_pointer = NULL;
840  }
841  if (old) {
842  prolooks_hsl_unref (old);
843  }
844 }
845 
846 
847 void prolooks_value_take_hsl (GValue* value, gpointer v_object) {
848  ProlooksHSL* old;
849  g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, PROLOOKS_TYPE_HSL));
850  old = (ProlooksHSL*)value->data[0].v_pointer;
851  if (v_object) {
852  g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, PROLOOKS_TYPE_HSL));
853  g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
854  value->data[0].v_pointer = v_object;
855  } else {
856  value->data[0].v_pointer = NULL;
857  }
858  if (old) {
859  prolooks_hsl_unref (old);
860  }
861 }
862 
863 static void prolooks_hsl_finalize (ProlooksHSL* obj) {
864  ProlooksHSL * self;
865  self = PROLOOKS_HSL (obj);
866 }
867 
869  prolooks_hsl_parent_class = g_type_class_peek_parent (klass);
870  PROLOOKS_HSL_CLASS (klass)->finalize = prolooks_hsl_finalize;
871  g_type_class_add_private (klass, sizeof (ProlooksHSLPrivate));
872 }
873 
874 
876  self->priv = PROLOOKS_HSL_GET_PRIVATE (self);
877  self->ref_count = 1;
878 }
879 
880 
881 
882 GType prolooks_hsl_get_type (void) {
883  static volatile gsize prolooks_hsl_type_id__volatile = 0;
884  if (g_once_init_enter (&prolooks_hsl_type_id__volatile)) {
886  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 };
887  static const GTypeFundamentalInfo g_define_type_fundamental_info = { (GTypeFundamentalFlags)(G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
888  GType prolooks_hsl_type_id;
889  prolooks_hsl_type_id = g_type_register_fundamental (g_type_fundamental_next (), "ProlooksHSL", &g_define_type_info, &g_define_type_fundamental_info, (GTypeFlags)0);
890  g_once_init_leave (&prolooks_hsl_type_id__volatile, prolooks_hsl_type_id);
891  }
892  return prolooks_hsl_type_id__volatile;
893 }
894 
895 
896 gpointer prolooks_hsl_ref (gpointer instance) {
897  ProlooksHSL* self;
898  self = (ProlooksHSL*)instance;
899  g_atomic_int_inc (&self->ref_count);
900  return instance;
901 }
902 
903 
904 void prolooks_hsl_unref (gpointer instance) {
905  ProlooksHSL* self;
906  self = (ProlooksHSL*)instance;
907  if (g_atomic_int_dec_and_test (&self->ref_count)) {
908  PROLOOKS_HSL_GET_CLASS (self)->finalize (self);
909  g_type_free_instance ((GTypeInstance *) self);
910  }
911 }
912 
913 
915  char* result = NULL;
916  g_return_val_if_fail (self != NULL, NULL);
917  result = g_strdup_printf ("HSV (%f, %f, %f)", self->priv->_hue, self->priv->_saturation, self->priv->_value);
918  return result;
919 }
920 
921 
922 ProlooksHSV* prolooks_hsv_construct_for_gdk_color (GType object_type, const GdkColor* color) {
923  ProlooksHSV* self;
924  self = (ProlooksHSV*) g_type_create_instance (object_type);
925  prolooks_hsv_from_gdk_color (self, color);
926  return self;
927 }
928 
929 
932 }
933 
934 
936  ProlooksHSV* self;
937  g_return_val_if_fail (color != NULL, NULL);
938  self = (ProlooksHSV*) g_type_create_instance (object_type);
939  prolooks_hsv_from_cairo_color (self, color);
940  return self;
941 }
942 
943 
946 }
947 
948 
950  CairoColor* result = NULL;
951  double r;
952  double g;
953  double b;
954  gint hi = 0;
955  double f = 0.0;
956  double p = 0.0;
957  double q = 0.0;
958  double t = 0.0;
959  CairoColor* color;
960  g_return_val_if_fail (self != NULL, NULL);
961  r = 0.0;
962  g = 0.0;
963  b = 0.0;
964  hi = (gint) prolooks_modula (floor (self->priv->_hue / 60.0), (double) 6);
965  f = (self->priv->_hue / 60.0) - floor (self->priv->_hue / 60.0);
966  p = self->priv->_value * (1.0 - self->priv->_saturation);
967  q = self->priv->_value * (1.0 - (f * self->priv->_saturation));
968  t = self->priv->_value * (1.0 - ((1.0 - f) * self->priv->_saturation));
969  switch (hi) {
970  case 0:
971  {
972  r = self->priv->_value;
973  g = t;
974  b = p;
975  break;
976  }
977  case 1:
978  {
979  r = q;
980  g = self->priv->_value;
981  b = p;
982  break;
983  }
984  case 2:
985  {
986  r = p;
987  g = self->priv->_value;
988  b = t;
989  break;
990  }
991  case 3:
992  {
993  r = p;
994  g = q;
995  b = self->priv->_value;
996  break;
997  }
998  case 4:
999  {
1000  r = t;
1001  g = p;
1002  b = self->priv->_value;
1003  break;
1004  }
1005  case 5:
1006  {
1007  r = self->priv->_value;
1008  g = p;
1009  b = q;
1010  break;
1011  }
1012  default:
1013  {
1014  break;
1015  }
1016  }
1017  color = cairo_color_new (r, g, b, 1.0);
1018  result = color;
1019  return result;
1020 }
1021 
1022 
1023 void prolooks_hsv_to_gdk_color (ProlooksHSV* self, GdkColor* result) {
1024  GdkColor _tmp1_ = {0,0,0,0};
1025  CairoColor* _tmp0_;
1026  GdkColor _tmp2_;
1027  g_return_if_fail (self != NULL);
1028  *result = (_tmp2_ = (prolooks_cairo_color_to_gdk (_tmp0_ = prolooks_hsv_to_cairo_color (self), &_tmp1_), _tmp1_), _cairo_color_unref0 (_tmp0_), _tmp2_);
1029  return;
1030 }
1031 
1032 
1033 void prolooks_hsv_from_gdk_color (ProlooksHSV* self, const GdkColor* color) {
1034  CairoColor* _tmp0_;
1035  g_return_if_fail (self != NULL);
1037  _cairo_color_unref0 (_tmp0_);
1038 }
1039 
1040 
1042  double min = 0.0;
1043  double max = 0.0;
1044  double delta = 0.0;
1045  double red;
1046  double green;
1047  double blue;
1048  g_return_if_fail (self != NULL);
1049  g_return_if_fail (color != NULL);
1050  red = cairo_color_get_red (color);
1051  green = cairo_color_get_green (color);
1052  blue = cairo_color_get_blue (color);
1053  if (red > green) {
1054  if (red > blue) {
1055  max = red;
1056  } else {
1057  max = blue;
1058  }
1059  if (green < blue) {
1060  min = green;
1061  } else {
1062  min = blue;
1063  }
1064  } else {
1065  if (green > blue) {
1066  max = green;
1067  } else {
1068  max = blue;
1069  }
1070  if (red < blue) {
1071  min = red;
1072  } else {
1073  min = blue;
1074  }
1075  }
1076  prolooks_hsv_set_value (self, max);
1077  if (fabs (max - min) < 0.0001) {
1078  prolooks_hsv_set_hue (self, 0.0);
1079  prolooks_hsv_set_saturation (self, 0.0);
1080  } else {
1081  if (max < 0.0001) {
1082  prolooks_hsv_set_saturation (self, (double) 0);
1083  } else {
1084  prolooks_hsv_set_saturation (self, (max - min) / max);
1085  }
1086  delta = max - min;
1087  if (red == max) {
1088  prolooks_hsv_set_hue (self, (green - blue) / delta);
1089  } else {
1090  if (green == max) {
1091  prolooks_hsv_set_hue (self, 2.0 + ((blue - red) / delta));
1092  } else {
1093  if (blue == max) {
1094  prolooks_hsv_set_hue (self, 4.0 + ((red - green) / delta));
1095  }
1096  }
1097  }
1098  prolooks_hsv_set_hue (self, self->priv->_hue * 60.0);
1099  if (self->priv->_hue < 0.0) {
1100  prolooks_hsv_set_hue (self, self->priv->_hue + 360.0);
1101  }
1102  }
1103 }
1104 
1105 
1106 ProlooksHSV* prolooks_hsv_construct (GType object_type) {
1107  ProlooksHSV* self;
1108  self = (ProlooksHSV*) g_type_create_instance (object_type);
1109  return self;
1110 }
1111 
1112 
1115 }
1116 
1117 
1119  double result;
1120  g_return_val_if_fail (self != NULL, 0.0);
1121  result = self->priv->_hue;
1122  return result;
1123 }
1124 
1125 
1126 void prolooks_hsv_set_hue (ProlooksHSV* self, double value) {
1127  g_return_if_fail (self != NULL);
1128  self->priv->_hue = value;
1129 }
1130 
1131 
1133  double result;
1134  g_return_val_if_fail (self != NULL, 0.0);
1135  result = self->priv->_saturation;
1136  return result;
1137 }
1138 
1139 
1140 void prolooks_hsv_set_saturation (ProlooksHSV* self, double value) {
1141  g_return_if_fail (self != NULL);
1142  self->priv->_saturation = value;
1143 }
1144 
1145 
1147  double result;
1148  g_return_val_if_fail (self != NULL, 0.0);
1149  result = self->priv->_value;
1150  return result;
1151 }
1152 
1153 
1154 void prolooks_hsv_set_value (ProlooksHSV* self, double value) {
1155  g_return_if_fail (self != NULL);
1156  self->priv->_value = value;
1157 }
1158 
1159 
1160 static void prolooks_value_hsv_init (GValue* value) {
1161  value->data[0].v_pointer = NULL;
1162 }
1163 
1164 
1165 static void prolooks_value_hsv_free_value (GValue* value) {
1166  if (value->data[0].v_pointer) {
1167  prolooks_hsv_unref (value->data[0].v_pointer);
1168  }
1169 }
1170 
1171 
1172 static void prolooks_value_hsv_copy_value (const GValue* src_value, GValue* dest_value) {
1173  if (src_value->data[0].v_pointer) {
1174  dest_value->data[0].v_pointer = prolooks_hsv_ref (src_value->data[0].v_pointer);
1175  } else {
1176  dest_value->data[0].v_pointer = NULL;
1177  }
1178 }
1179 
1180 
1181 static gpointer prolooks_value_hsv_peek_pointer (const GValue* value) {
1182  return value->data[0].v_pointer;
1183 }
1184 
1185 
1186 static gchar* prolooks_value_hsv_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
1187  (void) collect_flags;
1188  (void) n_collect_values;
1189  if (collect_values[0].v_pointer) {
1190  ProlooksHSV* object;
1191  object = (ProlooksHSV*)collect_values[0].v_pointer;
1192  if (object->parent_instance.g_class == NULL) {
1193  return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
1194  } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
1195  return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
1196  }
1197  value->data[0].v_pointer = prolooks_hsv_ref (object);
1198  } else {
1199  value->data[0].v_pointer = NULL;
1200  }
1201  return NULL;
1202 }
1203 
1204 
1205 static gchar* prolooks_value_hsv_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
1206  ProlooksHSV** object_p;
1207  (void) n_collect_values;
1208  object_p = (ProlooksHSV**)collect_values[0].v_pointer;
1209  if (!object_p) {
1210  return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME ((GValue*)value));
1211  }
1212  if (!value->data[0].v_pointer) {
1213  *object_p = NULL;
1214  } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
1215  *object_p = (ProlooksHSV*)value->data[0].v_pointer;
1216  } else {
1217  *object_p = (ProlooksHSV*)prolooks_hsv_ref (value->data[0].v_pointer);
1218  }
1219  return NULL;
1220 }
1221 
1222 
1223 GParamSpec* prolooks_param_spec_hsv (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
1224  ProlooksParamSpecHSV* spec;
1225  g_return_val_if_fail (g_type_is_a (object_type, PROLOOKS_TYPE_HSV), NULL);
1226  spec = (ProlooksParamSpecHSV*)g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
1227  G_PARAM_SPEC (spec)->value_type = object_type;
1228  return G_PARAM_SPEC (spec);
1229 }
1230 
1231 
1232 gpointer prolooks_value_get_hsv (const GValue* value) {
1233  g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE ((GValue*) value, PROLOOKS_TYPE_HSV), NULL);
1234  return value->data[0].v_pointer;
1235 }
1236 
1237 
1238 void prolooks_value_set_hsv (GValue* value, gpointer v_object) {
1239  ProlooksHSV* old;
1240  g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, PROLOOKS_TYPE_HSV));
1241  old = (ProlooksHSV*)value->data[0].v_pointer;
1242  if (v_object) {
1243  g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, PROLOOKS_TYPE_HSV));
1244  g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
1245  value->data[0].v_pointer = v_object;
1246  prolooks_hsv_ref (value->data[0].v_pointer);
1247  } else {
1248  value->data[0].v_pointer = NULL;
1249  }
1250  if (old) {
1251  prolooks_hsv_unref (old);
1252  }
1253 }
1254 
1255 
1256 void prolooks_value_take_hsv (GValue* value, gpointer v_object) {
1257  ProlooksHSV* old;
1258  g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, PROLOOKS_TYPE_HSV));
1259  old = (ProlooksHSV*)value->data[0].v_pointer;
1260  if (v_object) {
1261  g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, PROLOOKS_TYPE_HSV));
1262  g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
1263  value->data[0].v_pointer = v_object;
1264  } else {
1265  value->data[0].v_pointer = NULL;
1266  }
1267  if (old) {
1268  prolooks_hsv_unref (old);
1269  }
1270 }
1271 
1273  ProlooksHSV * self;
1274  self = PROLOOKS_HSV (obj);
1275 }
1276 
1278  prolooks_hsv_parent_class = g_type_class_peek_parent (klass);
1279  PROLOOKS_HSV_CLASS (klass)->finalize = prolooks_hsv_finalize;
1280  g_type_class_add_private (klass, sizeof (ProlooksHSVPrivate));
1281 }
1282 
1283 
1285  self->priv = PROLOOKS_HSV_GET_PRIVATE (self);
1286  self->ref_count = 1;
1287 }
1288 
1290  static volatile gsize prolooks_hsv_type_id__volatile = 0;
1291  if (g_once_init_enter (&prolooks_hsv_type_id__volatile)) {
1293  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 };
1294  static const GTypeFundamentalInfo g_define_type_fundamental_info = { (GTypeFundamentalFlags)(G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
1295  GType prolooks_hsv_type_id;
1296  prolooks_hsv_type_id = g_type_register_fundamental (g_type_fundamental_next (), "ProlooksHSV", &g_define_type_info, &g_define_type_fundamental_info, (GTypeFlags)0);
1297  g_once_init_leave (&prolooks_hsv_type_id__volatile, prolooks_hsv_type_id);
1298  }
1299  return prolooks_hsv_type_id__volatile;
1300 }
1301 
1302 
1303 gpointer prolooks_hsv_ref (gpointer instance) {
1304  ProlooksHSV* self;
1305  self = (ProlooksHSV*)instance;
1306  g_atomic_int_inc (&self->ref_count);
1307  return instance;
1308 }
1309 
1310 
1311 void prolooks_hsv_unref (gpointer instance) {
1312  ProlooksHSV* self;
1313  self = (ProlooksHSV*)instance;
1314  if (g_atomic_int_dec_and_test (&self->ref_count)) {
1315  PROLOOKS_HSV_GET_CLASS (self)->finalize (self);
1316  g_type_free_instance ((GTypeInstance *) self);
1317  }
1318 }
1319 
1320 
1321 void prolooks_shade_color (const GdkColor* orig, double shade_ratio, GdkColor* result) {
1322  ProlooksHSL* HSL;
1323  GdkColor _tmp0_ = {0,0,0,0};
1324  GdkColor _result_;
1325  HSL = prolooks_hsl_new ();
1326  prolooks_hsl_from_gdk_color (HSL, orig);
1327  prolooks_hsl_set_lightness (HSL, fmin (prolooks_hsl_get_lightness (HSL) * shade_ratio, 1.0));
1328  prolooks_hsl_set_lightness (HSL, fmax (prolooks_hsl_get_lightness (HSL), 0.0));
1329  prolooks_hsl_set_saturation (HSL, fmin (prolooks_hsl_get_saturation (HSL) * shade_ratio, 1.0));
1331  _result_ = (prolooks_hsl_to_gdk_color (HSL, &_tmp0_), _tmp0_);
1332  *result = _result_;
1333  _prolooks_hsl_unref0 (HSL);
1334  return;
1335 }
1336 
1337 
1338 GdkPixbuf* prolooks_cairo_image_surface_to_pixbuf (cairo_surface_t* surface) {
1339  GdkPixbuf* result = NULL;
1340  guchar* _tmp0_;
1341  guchar* knob_data;
1342  g_return_val_if_fail (surface != NULL, NULL);
1343  if (cairo_image_surface_get_format (surface) != CAIRO_FORMAT_ARGB32) {
1344  result = NULL;
1345  return result;
1346  }
1347  knob_data = (_tmp0_ = cairo_image_surface_get_data (surface), _tmp0_);
1348  {
1349  gint i;
1350  i = 0;
1351  {
1352  gboolean _tmp1_;
1353  _tmp1_ = TRUE;
1354  while (TRUE) {
1355  guchar r;
1356  guchar g;
1357  guchar b;
1358  guchar a;
1359  if (!_tmp1_) {
1360  i = i + 4;
1361  }
1362  _tmp1_ = FALSE;
1363  if (!(i < (cairo_image_surface_get_height (surface) * cairo_image_surface_get_stride (surface)))) {
1364  break;
1365  }
1366  r = knob_data[i + 0];
1367  g = knob_data[i + 1];
1368  b = knob_data[i + 2];
1369  a = knob_data[i + 3];
1370  knob_data[i + 0] = b;
1371  knob_data[i + 1] = g;
1372  knob_data[i + 2] = r;
1373  knob_data[i + 3] = a;
1374  }
1375  }
1376  }
1377  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);
1378  return result;
1379 }
1380 
1381 
1382 
1383 
#define _cairo_color_unref0(var)
GType cairo_color_get_type(void)
double prolooks_hsv_get_value(ProlooksHSV *self)
#define _cairo_pattern_destroy0(var)
char * prolooks_hsl_to_string(ProlooksHSL *self)
static gpointer prolooks_value_hsv_peek_pointer(const GValue *value)
CairoColor * cairo_color_new_from_string(const char *webcolor)
CairoColorPrivate * priv
void prolooks_hsl_set_hue(ProlooksHSL *self, double value)
char * prolooks_hsv_to_string(ProlooksHSV *self)
double prolooks_hsv_get_hue(ProlooksHSV *self)
void prolooks_hsl_from_cairo_color(ProlooksHSL *self, CairoColor *color)
void prolooks_rounded_rect(cairo_t *cr, double x, double y, double w, double h, double radius_x, double radius_y)
GType prolooks_hsv_get_type(void)
double prolooks_hsv_get_saturation(ProlooksHSV *self)
static void cairo_value_color_copy_value(const GValue *src_value, GValue *dest_value)
void prolooks_value_take_hsv(GValue *value, gpointer v_object)
CairoColor * cairo_color_construct(GType object_type, double red, double green, double blue, double alpha)
static gchar * cairo_value_color_lcopy_value(const GValue *value, guint n_collect_values, GTypeCValue *collect_values, guint collect_flags)
void prolooks_hsl_set_lightness(ProlooksHSL *self, double value)
void cairo_color_set_to(CairoColor *self, CairoColor *a_color)
void prolooks_hsv_from_gdk_color(ProlooksHSV *self, const GdkColor *color)
static void prolooks_value_hsv_copy_value(const GValue *src_value, GValue *dest_value)
GTypeInstance parent_instance
static void cairo_color_instance_init(CairoColor *self)
void prolooks_hsv_from_cairo_color(ProlooksHSV *self, CairoColor *color)
static void prolooks_hsv_instance_init(ProlooksHSV *self)
void prolooks_set_source_color_string(cairo_t *cr, const char *color, double alpha)
static void prolooks_hsl_instance_init(ProlooksHSL *self)
ProlooksHSL * prolooks_hsl_new(void)
tuple f
Definition: signals.py:35
void prolooks_hsv_set_hue(ProlooksHSV *self, double value)
ProlooksHSV * prolooks_hsv_new_for_gdk_color(const GdkColor *color)
#define PROLOOKS_HSL(obj)
CairoColor * cairo_color_copy(CairoColor *self)
GType prolooks_button_state_get_type(void)
static gpointer cairo_color_parent_class
struct _ProlooksHSLClass ProlooksHSLClass
#define PROLOOKS_HSV_GET_PRIVATE(o)
static void cairo_value_color_free_value(GValue *value)
LIBARDOUR_API PBD::PropertyDescriptor< framepos_t > start
Definition: region.cc:63
double prolooks_modula(double number, double divisor)
#define CAIRO_COLOR_GET_CLASS(obj)
#define CAIRO_COLOR_CLASS(klass)
void prolooks_shade_color(const GdkColor *orig, double shade_ratio, GdkColor *result)
gpointer prolooks_hsl_ref(gpointer instance)
void cairo_color_set_alpha(CairoColor *self, double value)
void prolooks_add_color_stop(cairo_pattern_t *p, double offset, const GdkColor *color, double alpha)
gpointer prolooks_value_get_hsv(const GValue *value)
GType prolooks_hsl_get_type(void)
double cairo_color_get_green(CairoColor *self)
#define PROLOOKS_TYPE_HSL
void prolooks_add_color_stop_str(cairo_pattern_t *p, double offset, const char *color, double alpha)
void prolooks_hsl_to_gdk_color(ProlooksHSL *self, GdkColor *result)
CairoColor * prolooks_gdk_color_to_cairo(const GdkColor *color)
void prolooks_hsl_from_gdk_color(ProlooksHSL *self, const GdkColor *color)
CairoColor * prolooks_hsl_to_cairo_color(ProlooksHSL *self)
#define PROLOOKS_HSL_GET_PRIVATE(o)
double cairo_color_get_alpha(CairoColor *self)
void prolooks_value_take_hsl(GValue *value, gpointer v_object)
void prolooks_color_from_string(const char *webcolor, GdkColor *result)
gpointer prolooks_hsv_ref(gpointer instance)
void prolooks_hsv_set_value(ProlooksHSV *self, double value)
static void prolooks_value_hsl_init(GValue *value)
GTypeInstance parent_instance
CairoColor * prolooks_hsv_to_cairo_color(ProlooksHSV *self)
struct _ProlooksHSVClass ProlooksHSVClass
static void cairo_color_class_init(CairoColorClass *klass)
void cairo_color_set_blue(CairoColor *self, double value)
void cairo_color_add_color_stop_to(CairoColor *self, cairo_pattern_t *p, double offset)
double cairo_color_get_blue(CairoColor *self)
struct _CairoColorClass CairoColorClass
GdkPixbuf * prolooks_cairo_image_surface_to_pixbuf(cairo_surface_t *surface)
#define PROLOOKS_HSL_CLASS(klass)
static gchar * cairo_value_color_collect_value(GValue *value, guint n_collect_values, GTypeCValue *collect_values, guint collect_flags)
void prolooks_set_source_color(cairo_t *cr, const GdkColor *color, double alpha)
static void cairo_value_color_init(GValue *value)
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)
double prolooks_hsl_get_hue(ProlooksHSL *self)
void cairo_color_set_as_source_in(CairoColor *self, cairo_t *cr)
double prolooks_hsl_get_lightness(ProlooksHSL *self)
gpointer cairo_value_get_color(const GValue *value)
ProlooksHSL * prolooks_hsl_construct(GType object_type)
ProlooksHSV * prolooks_hsv_construct_for_gdk_color(GType object_type, const GdkColor *color)
double prolooks_hsl_get_saturation(ProlooksHSL *self)
static gchar * prolooks_value_hsl_lcopy_value(const GValue *value, guint n_collect_values, GTypeCValue *collect_values, guint collect_flags)
static gpointer cairo_value_color_peek_pointer(const GValue *value)
static gpointer prolooks_value_hsl_peek_pointer(const GValue *value)
ProlooksHSV * prolooks_hsv_new(void)
ProlooksHSV * prolooks_hsv_new_for_cairo_color(CairoColor *color)
double cairo_color_get_red(CairoColor *self)
void prolooks_set_line_width_from_device(cairo_t *cr)
GTypeInstance parent_instance
void cairo_value_take_color(GValue *value, gpointer v_object)
#define PROLOOKS_HSV_CLASS(klass)
static gchar * prolooks_value_hsl_collect_value(GValue *value, guint n_collect_values, GTypeCValue *collect_values, guint collect_flags)
#define CAIRO_TYPE_COLOR
void prolooks_gdk_color_to_cairo_color(const GdkColor *color, double *red, double *green, double *blue)
static void prolooks_hsv_class_init(ProlooksHSVClass *klass)
static gpointer prolooks_hsl_parent_class
void prolooks_hsv_to_gdk_color(ProlooksHSV *self, GdkColor *result)
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)
gpointer cairo_color_ref(gpointer instance)
static void prolooks_hsl_class_init(ProlooksHSLClass *klass)
static gchar * prolooks_value_hsv_collect_value(GValue *value, guint n_collect_values, GTypeCValue *collect_values, guint collect_flags)
void cairo_value_set_color(GValue *value, gpointer v_object)
ProlooksHSV * prolooks_hsv_construct_for_cairo_color(GType object_type, CairoColor *color)
GParamSpec * prolooks_param_spec_hsv(const gchar *name, const gchar *nick, const gchar *blurb, GType object_type, GParamFlags flags)
const char * name
static void prolooks_value_hsv_init(GValue *value)
static gpointer prolooks_hsv_parent_class
CairoColor * cairo_color_construct_from_string(GType object_type, const char *webcolor)
#define PROLOOKS_HSV_GET_CLASS(obj)
void prolooks_background_gradient(cairo_t *cr, double w, double h)
#define PROLOOKS_TYPE_HSV
static void prolooks_hsl_finalize(ProlooksHSL *obj)
static gchar * prolooks_value_hsv_lcopy_value(const GValue *value, guint n_collect_values, GTypeCValue *collect_values, guint collect_flags)
void prolooks_hsl_unref(gpointer instance)
#define _prolooks_hsl_unref0(var)
void prolooks_hsv_set_saturation(ProlooksHSV *self, double value)
void prolooks_cairo_color_to_gdk(CairoColor *cairo_color, GdkColor *result)
#define PROLOOKS_HSL_GET_CLASS(obj)
CairoColor * prolooks_cairo_color_from_string(const char *webcolor)
#define PROLOOKS_HSV(obj)
CairoColor * cairo_color_shade(CairoColor *self, double shade_factor)
static void cairo_color_finalize(CairoColor *obj)
static void prolooks_value_hsl_free_value(GValue *value)
static void prolooks_value_hsv_free_value(GValue *value)
void cairo_color_set_green(CairoColor *self, double value)
GParamSpec * cairo_param_spec_color(const gchar *name, const gchar *nick, const gchar *blurb, GType object_type, GParamFlags flags)
void prolooks_value_set_hsl(GValue *value, gpointer v_object)
static void prolooks_value_hsl_copy_value(const GValue *src_value, GValue *dest_value)
ProlooksHSV * prolooks_hsv_construct(GType object_type)
void cairo_color_set_from_string(CairoColor *self, const char *webcolor)
GParamSpec * prolooks_param_spec_hsl(const gchar *name, const gchar *nick, const gchar *blurb, GType object_type, GParamFlags flags)
GType prolooks_button_type_get_type(void)
gpointer prolooks_value_get_hsl(const GValue *value)
static void prolooks_hsv_finalize(ProlooksHSV *obj)
CairoColor * cairo_color_new(double red, double green, double blue, double alpha)
#define CAIRO_COLOR(obj)
char * prolooks_color_to_string(const GdkColor *color)
void cairo_color_unref(gpointer instance)
void prolooks_hsv_unref(gpointer instance)
#define CAIRO_COLOR_GET_PRIVATE(o)
void prolooks_hsl_set_saturation(ProlooksHSL *self, double value)
void cairo_color_set_red(CairoColor *self, double value)
LIBARDOUR_API PBD::PropertyDescriptor< bool > color
Definition: route_group.cc:50
void prolooks_value_set_hsv(GValue *value, gpointer v_object)