summaryrefslogtreecommitdiff
path: root/lib/mcolor.cc
diff options
context:
space:
mode:
Diffstat (limited to 'lib/mcolor.cc')
-rw-r--r--lib/mcolor.cc23
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);