From 0fdc32cccf29bc650d48f00d4370dc34c4d4b650 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Fri, 21 Jan 2011 17:09:29 +0000 Subject: improve hsl hue angle representation svn path=/trunk/libcss/; revision=11430 --- src/parse/properties/utils.c | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/parse/properties/utils.c b/src/parse/properties/utils.c index fa79d04..aba3fc2 100644 --- a/src/parse/properties/utils.c +++ b/src/parse/properties/utils.c @@ -269,14 +269,17 @@ css__parse_border_side_cleanup: IF h*3<2: RETURN m1+(m2-m1)*(2/3-h)*6 RETURN m1 */ -static inline int hue_to_RGB(float m1, float m2, float h) +static inline int hue_to_RGB(float m1, float m2, int h) { - h = (h < 0) ? h + 1.0 : h; - h = (h > 1.0) ? h - 1.0 : h; - - if (h * 6.0 < 1.0) return (m1 + (m2 - m1) * h * 6.0) * 255.5; - if (h * 2.0 < 1.0) return (m2 * 255.5); - if (h * 3.0 < 2.0) return (m1 + (m2 - m1) * ((2.0/3.0) - h) * 6.0) * 255.5; + h = (h < 0) ? h + 360 : h; + h = (h > 360) ? h - 360 : h; + + if (h < 60) + return (m1 + (m2 - m1) * (h / 60.0)) * 255.5; + if (h < 180) + return (m2 * 255.5); + if (h < 240) + return (m1 + (m2 - m1) * ((240 - h) / 60.0)) * 255.5; return m1 * 255.5; } @@ -293,18 +296,17 @@ static inline int hue_to_RGB(float m1, float m2, float h) static void HSL_to_RGB(int32_t hue, int32_t sat, int32_t lit, uint8_t *r, uint8_t *g, uint8_t *b) { float m1, m2; - float h, s, l; + float s, l; - h = hue/360.0; s = sat/100.0; l = lit/100.0; m2 = (l <= 0.5) ? l * (s + 1) : l + s - l * s; m1 = l * 2 - m2; - *r = hue_to_RGB(m1, m2, h + (1.0/3.0)); - *g = hue_to_RGB(m1, m2, h ); - *b = hue_to_RGB(m1, m2, h - (1.0/3.0)); + *r = hue_to_RGB(m1, m2, hue + 120); + *g = hue_to_RGB(m1, m2, hue ); + *b = hue_to_RGB(m1, m2, hue - 120); } /** -- cgit v1.2.3