summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam Jon McCann <jmccann@redhat.com>2009-09-23 20:38:41 -0400
committerWilliam Jon McCann <jmccann@redhat.com>2009-09-23 20:38:41 -0400
commitdab9a44d63a517f084b46607649ebd7684ed4fc1 (patch)
tree7ba8bd3ad8554370e06ab63455507861afe34959
parent6f966dd90a57946b90a08f1cbd62f616e7733123 (diff)
Use public hsv functions
-rw-r--r--src/theme.c169
1 files changed, 10 insertions, 159 deletions
diff --git a/src/theme.c b/src/theme.c
index 49d6734..46aa93e 100644
--- a/src/theme.c
+++ b/src/theme.c
@@ -285,158 +285,6 @@ on_configure_event (GtkWidget *nw,
return FALSE;
}
-/* copied from gtkstyle.c */
-static void
-rgb_to_hls (gdouble *r,
- gdouble *g,
- gdouble *b)
-{
- gdouble min;
- gdouble max;
- gdouble red;
- gdouble green;
- gdouble blue;
- gdouble h, l, s;
- gdouble delta;
-
- red = *r;
- green = *g;
- blue = *b;
-
- if (red > green)
- {
- if (red > blue)
- max = red;
- else
- max = blue;
-
- if (green < blue)
- min = green;
- else
- min = blue;
- }
- else
- {
- if (green > blue)
- max = green;
- else
- max = blue;
-
- if (red < blue)
- min = red;
- else
- min = blue;
- }
-
- l = (max + min) / 2;
- s = 0;
- h = 0;
-
- if (max != min)
- {
- if (l <= 0.5)
- s = (max - min) / (max + min);
- else
- s = (max - min) / (2 - max - min);
-
- delta = max -min;
- if (red == max)
- h = (green - blue) / delta;
- else if (green == max)
- h = 2 + (blue - red) / delta;
- else if (blue == max)
- h = 4 + (red - green) / delta;
-
- h *= 60;
- if (h < 0.0)
- h += 360;
- }
-
- *r = h;
- *g = l;
- *b = s;
-}
-
-/* copied from gtkstyle.c */
-static void
-hls_to_rgb (gdouble *h,
- gdouble *l,
- gdouble *s)
-{
- gdouble hue;
- gdouble lightness;
- gdouble saturation;
- gdouble m1, m2;
- gdouble r, g, b;
-
- lightness = *l;
- saturation = *s;
-
- if (lightness <= 0.5)
- m2 = lightness * (1 + saturation);
- else
- m2 = lightness + saturation - lightness * saturation;
- m1 = 2 * lightness - m2;
-
- if (saturation == 0)
- {
- *h = lightness;
- *l = lightness;
- *s = lightness;
- }
- else
- {
- hue = *h + 120;
- while (hue > 360)
- hue -= 360;
- while (hue < 0)
- hue += 360;
-
- if (hue < 60)
- r = m1 + (m2 - m1) * hue / 60;
- else if (hue < 180)
- r = m2;
- else if (hue < 240)
- r = m1 + (m2 - m1) * (240 - hue) / 60;
- else
- r = m1;
-
- hue = *h;
- while (hue > 360)
- hue -= 360;
- while (hue < 0)
- hue += 360;
-
- if (hue < 60)
- g = m1 + (m2 - m1) * hue / 60;
- else if (hue < 180)
- g = m2;
- else if (hue < 240)
- g = m1 + (m2 - m1) * (240 - hue) / 60;
- else
- g = m1;
-
- hue = *h - 120;
- while (hue > 360)
- hue -= 360;
- while (hue < 0)
- hue += 360;
-
- if (hue < 60)
- b = m1 + (m2 - m1) * hue / 60;
- else if (hue < 180)
- b = m2;
- else if (hue < 240)
- b = m1 + (m2 - m1) * (240 - hue) / 60;
- else
- b = m1;
-
- *h = r;
- *l = g;
- *s = b;
- }
-}
-
static void
color_reverse (const GdkColor *a,
GdkColor *b)
@@ -444,20 +292,23 @@ color_reverse (const GdkColor *a,
gdouble red;
gdouble green;
gdouble blue;
+ gdouble h;
+ gdouble s;
+ gdouble v;
red = (gdouble) a->red / 65535.0;
green = (gdouble) a->green / 65535.0;
blue = (gdouble) a->blue / 65535.0;
- rgb_to_hls (&red, &green, &blue);
+ gtk_rgb_to_hsv (red, green, blue, &h, &s, &v);
- green = 0.5 + (0.5 - green);
- if (green > 1.0)
- green = 1.0;
- else if (green < 0.0)
- green = 0.0;
+ v = 0.5 + (0.5 - v);
+ if (v > 1.0)
+ v = 1.0;
+ else if (v < 0.0)
+ v = 0.0;
- hls_to_rgb (&red, &green, &blue);
+ gtk_hsv_to_rgb (h, s, v, &red, &green, &blue);
b->red = red * 65535.0;
b->green = green * 65535.0;