diff options
author | pixel <pixel> | 2006-01-31 17:02:39 +0000 |
---|---|---|
committer | pixel <pixel> | 2006-01-31 17:02:39 +0000 |
commit | 97b4a5904a989e216b1fbb4d0a55b7340bd7f88a (patch) | |
tree | 2a40bfc8ae9f4fce9bf9a30bfc7fef7a6bb1f074 /lib/mcolor.cc | |
parent | edd5fe68be2a2a9e23a87f65f6a89807c34b7c3f (diff) |
Way too much changes - all over.
Diffstat (limited to 'lib/mcolor.cc')
-rw-r--r-- | lib/mcolor.cc | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/lib/mcolor.cc b/lib/mcolor.cc index e2a921d..618ae4f 100644 --- a/lib/mcolor.cc +++ b/lib/mcolor.cc @@ -17,7 +17,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -/* $Id: mcolor.cc,v 1.8 2004-11-27 21:48:03 pixel Exp $ */ +/* $Id: mcolor.cc,v 1.9 2006-01-31 17:02:39 pixel Exp $ */ #include <SDL.h> #include <SDL_opengl.h> @@ -50,6 +50,27 @@ void mogltk::ColorP::fromSDL(Uint32 p, SDL_PixelFormat * f) { SDL_GetRGBA(p, f, &c.R, &c.G, &c.B, &c.A); } +void mogltk::ColorP::fromHSV(double H, double S, double V) { + H = H / 60.0; + int Hi = ((int) H) % 6; + double f = H - Hi; + double p = V * (1 - S); + double q = V * (1 - f * S); + double t = V * (1 - (1 - f) * S); + double R, G, B; + + switch (Hi) { + case 0: R = V; G = t; B = p; break; + case 1: R = q; G = V; B = p; break; + case 2: R = p; G = V; B = t; break; + case 3: R = p; G = q; B = V; break; + case 4: R = t; G = p; B = V; break; + case 5: R = V; G = p; B = q; break; + } + + c.R = R * 255; c.G = G * 255; c.B = B * 255; +} + void mogltk::ColorP::Norm() { c.R = MIN(MAX(c.R, Min.R), Max.R); c.G = MIN(MAX(c.R, Min.G), Max.G); |