- s = min (1.0, max (0.0, s));
- v = min (1.0, max (0.0, v));
-
- if (s == 0) {
- // achromatic (grey)
- return rgba_to_color (v, v, v, a);
- }
-
- h = min (360.0, max (0.0, h));
-
- double c = v * s;
- double x = c * (1.0 - fabs(fmod(h / 60.0, 2) - 1.0));
- double m = v - c;
-
- if (h >= 0.0 && h < 60.0) {
- return rgba_to_color (c + m, x + m, m, a);
- } else if (h >= 60.0 && h < 120.0) {
- return rgba_to_color (x + m, c + m, m, a);
- } else if (h >= 120.0 && h < 180.0) {
- return rgba_to_color (m, c + m, x + m, a);
- } else if (h >= 180.0 && h < 240.0) {
- return rgba_to_color (m, x + m, c + m, a);
- } else if (h >= 240.0 && h < 300.0) {
- return rgba_to_color (x + m, m, c + m, a);
- } else if (h >= 300.0 && h < 360.0) {
- return rgba_to_color (c + m, m, x + m, a);
- }
- return rgba_to_color (m, m, m, a);
+ context->set_source_rgba (
+ ((color >> 24) & 0xff) / 255.0,
+ ((color >> 16) & 0xff) / 255.0,
+ ((color >> 8) & 0xff) / 255.0,
+ ((color >> 0) & 0xff) / 255.0
+ );