Mercurial > projects > dynamin
diff dynamin/painting/color.d @ 0:aa4efef0f0b1
Initial commit of code.
author | Jordan Miner <jminer7@gmail.com> |
---|---|
date | Mon, 15 Jun 2009 22:10:48 -0500 |
parents | |
children | 73060bc3f004 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dynamin/painting/color.d Mon Jun 15 22:10:48 2009 -0500 @@ -0,0 +1,832 @@ +// Written in the D programming language +// www.digitalmars.com/d/ + +/* + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is the Dynamin library. + * + * The Initial Developer of the Original Code is Jordan Miner. + * Portions created by the Initial Developer are Copyright (C) 2006-2009 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Jordan Miner <jminer7@gmail.com> + * + */ + +module dynamin.painting.color; + +import dynamin.core.string; + +/** + * If a color has an alpha of 255, it is fully opaque. + * + * The pre-defined colors are those recognized by the SVG standard + * found at $(LINK http://www.w3.org/TR/SVG/types.html#ColorKeywords). + */ +align(1) +struct Color { // TODO: make a class and make a Pixel32 struct + // TODO: actually...color should stay a struct, but use 32-bit floats + // TODO: should use 32-bit floats +version(BigEndian) { + ubyte A; + ubyte R; + ubyte G; + ubyte B; +} else { + ubyte B; + ubyte G; + ubyte R; + ubyte A; +} + /+ + this(ubyte r, ubyte g, ubyte b, ubyte a = 255) { + this.r = r/255.0; + this.g = g/255.0; + this.b = b/255.0; + this.a = a/255.0; + } + this(real r, real g, real b, real a = 1.0) { + this.r = r; + this.g = g; + this.b = b; + this.a = a; + } + private real getMin() { + } + private real getMax() { + real max = r; + if(g > max) + max = g; + if(b > max) + max = b; + return max; + } + /** + * From 0 to 360 degrees. + */ + real gethue() { + real min = min(); + real max = max(); + real delta = max - min; + if(max == 0) // r = g = b = 0 = black + return 0; + + real hue; + if(r == max) + hue = (g - b) / delta; // between yellow and magenta + else if(g == max) + hue = 2 + (b - r) / delta; // between cyan and yellow + else + hue = 4 + (r - g) / delta; // between magenta and cyan + + hue *= 60; + if(hue < 0) + hue += 360; + + } + real getSaturation() { + } + real getValue() { + return getMax(); + } + +/ + /** + * Changes this color to its inverse. + * The inverse of black is white. The inverse of blue is yellow. + */ + void invert() { + R = 255 - R; + G = 255 - G; + B = 255 - B; + } + string toUtf8() { + return format("Color [R={,3}, G={,3}, B={,3}]", R, G, B); + } +static: + Color opCall(ubyte a, ubyte r, ubyte g, ubyte b) { + Color c; + c.A = a; + c.R = r; + c.G = g; + c.B = b; + return c; + } + Color opCall(ubyte r, ubyte g, ubyte b) { + return Color(255, r, g, b); + } + Color opCall(uint argb) { + return Color(argb >> 24, argb & 0xFFFFFF >> 16, argb & 0xFFFF >> 8, argb & 0xFF); + } + + /** + * <code style="background-color: rgb(240, 248, 255);"> + * </code> + */ + Color AliceBlue() { return Color(240, 248, 255); } + /** + * <code style="background-color: rgb(250, 235, 215);"> + * </code> + */ + Color AntiqueWhite() { return Color(250, 235, 215); } + /** + * <code style="background-color: rgb( 0, 255, 255);"> + * </code> + */ + Color Aqua() { return Color( 0, 255, 255); } + /** + * <code style="background-color: rgb(127, 255, 212);"> + * </code> + */ + Color Aquamarine() { return Color(127, 255, 212); } + /** + * <code style="background-color: rgb(240, 255, 255);"> + * </code> + */ + Color Azure() { return Color(240, 255, 255); } + /** + * <code style="background-color: rgb(245, 245, 220);"> + * </code> + */ + Color Beige() { return Color(245, 245, 220); } + /** + * <code style="background-color: rgb(255, 228, 196);"> + * </code> + */ + Color Bisque() { return Color(255, 228, 196); } + /** + * <code style="background-color: rgb( 0, 0, 0);"> + * </code> + */ + Color Black() { return Color( 0, 0, 0); } + /** + * <code style="background-color: rgb(255, 235, 205);"> + * </code> + */ + Color BlanchedAlmond() { return Color(255, 235, 205); } + /** + * <code style="background-color: rgb( 0, 0, 255);"> + * </code> + */ + Color Blue() { return Color( 0, 0, 255); } + /** + * <code style="background-color: rgb(138, 43, 226);"> + * </code> + */ + Color BlueViolet() { return Color(138, 43, 226); } + /** + * <code style="background-color: rgb(165, 42, 42);"> + * </code> + */ + Color Brown() { return Color(165, 42, 42); } + /** + * <code style="background-color: rgb(222, 184, 135);"> + * </code> + */ + Color BurlyWood() { return Color(222, 184, 135); } + /** + * <code style="background-color: rgb( 95, 158, 160);"> + * </code> + */ + Color CadetBlue() { return Color( 95, 158, 160); } + /** + * <code style="background-color: rgb(127, 255, 0);"> + * </code> + */ + Color Chartreuse() { return Color(127, 255, 0); } + /** + * <code style="background-color: rgb(210, 105, 30);"> + * </code> + */ + Color Chocolate() { return Color(210, 105, 30); } + /** + * <code style="background-color: rgb(255, 127, 80);"> + * </code> + */ + Color Coral() { return Color(255, 127, 80); } + /** + * <code style="background-color: rgb(100, 149, 237);"> + * </code> + */ + Color CornflowerBlue() { return Color(100, 149, 237); } + /** + * <code style="background-color: rgb(255, 248, 220);"> + * </code> + */ + Color Cornsilk() { return Color(255, 248, 220); } + /** + * <code style="background-color: rgb(220, 20, 60);"> + * </code> + */ + Color Crimson() { return Color(220, 20, 60); } + /** + * <code style="background-color: rgb( 0, 255, 255);"> + * </code> + */ + Color Cyan() { return Color( 0, 255, 255); } + /** + * <code style="background-color: rgb( 0, 0, 139);"> + * </code> + */ + Color DarkBlue() { return Color( 0, 0, 139); } + /** + * <code style="background-color: rgb( 0, 139, 139);"> + * </code> + */ + Color DarkCyan() { return Color( 0, 139, 139); } + /** + * <code style="background-color: rgb(184, 134, 11);"> + * </code> + */ + Color DarkGoldenrod() { return Color(184, 134, 11); } + /** + * <code style="background-color: rgb(169, 169, 169);"> + * </code> + */ + Color DarkGray() { return Color(169, 169, 169); } + /** + * <code style="background-color: rgb( 0, 100, 0);"> + * </code> + */ + Color DarkGreen() { return Color( 0, 100, 0); } + /** + * <code style="background-color: rgb(189, 183, 107);"> + * </code> + */ + Color DarkKhaki() { return Color(189, 183, 107); } + /** + * <code style="background-color: rgb(139, 0, 139);"> + * </code> + */ + Color DarkMagenta() { return Color(139, 0, 139); } + /** + * <code style="background-color: rgb( 85, 107, 47);"> + * </code> + */ + Color DarkOliveGreen() { return Color( 85, 107, 47); } + /** + * <code style="background-color: rgb(255, 140, 0);"> + * </code> + */ + Color DarkOrange() { return Color(255, 140, 0); } + /** + * <code style="background-color: rgb(153, 50, 204);"> + * </code> + */ + Color DarkOrchid() { return Color(153, 50, 204); } + /** + * <code style="background-color: rgb(139, 0, 0);"> + * </code> + */ + Color DarkRed() { return Color(139, 0, 0); } + /** + * <code style="background-color: rgb(233, 150, 122);"> + * </code> + */ + Color DarkSalmon() { return Color(233, 150, 122); } + /** + * <code style="background-color: rgb(143, 188, 143);"> + * </code> + */ + Color DarkSeaGreen() { return Color(143, 188, 143); } + /** + * <code style="background-color: rgb( 72, 61, 139);"> + * </code> + */ + Color DarkSlateBlue() { return Color( 72, 61, 139); } + /** + * <code style="background-color: rgb( 47, 79, 79);"> + * </code> + */ + Color DarkSlateGray() { return Color( 47, 79, 79); } + /** + * <code style="background-color: rgb( 0, 206, 209);"> + * </code> + */ + Color DarkTurquoise() { return Color( 0, 206, 209); } + /** + * <code style="background-color: rgb(148, 0, 211);"> + * </code> + */ + Color DarkViolet() { return Color(148, 0, 211); } + /** + * <code style="background-color: rgb(255, 20, 147);"> + * </code> + */ + Color DeepPink() { return Color(255, 20, 147); } + /** + * <code style="background-color: rgb( 0, 191, 255);"> + * </code> + */ + Color DeepSkyBlue() { return Color( 0, 191, 255); } + /** + * <code style="background-color: rgb(105, 105, 105);"> + * </code> + */ + Color DimGray() { return Color(105, 105, 105); } + /** + * <code style="background-color: rgb( 30, 144, 255);"> + * </code> + */ + Color DodgerBlue() { return Color( 30, 144, 255); } + /** + * <code style="background-color: rgb(178, 34, 34);"> + * </code> + */ + Color Firebrick() { return Color(178, 34, 34); } + /** + * <code style="background-color: rgb(255, 250, 240);"> + * </code> + */ + Color FloralWhite() { return Color(255, 250, 240); } + /** + * <code style="background-color: rgb( 34, 139, 34);"> + * </code> + */ + Color ForestGreen() { return Color( 34, 139, 34); } + /** + * <code style="background-color: rgb(255, 0, 255);"> + * </code> + */ + Color Fuchsia() { return Color(255, 0, 255); } + /** + * <code style="background-color: rgb(220, 220, 220);"> + * </code> + */ + Color Gainsboro() { return Color(220, 220, 220); } + /** + * <code style="background-color: rgb(248, 248, 255);"> + * </code> + */ + Color GhostWhite() { return Color(248, 248, 255); } + /** + * <code style="background-color: rgb(255, 215, 0);"> + * </code> + */ + Color Gold() { return Color(255, 215, 0); } + /** + * <code style="background-color: rgb(218, 165, 32);"> + * </code> + */ + Color Goldenrod() { return Color(218, 165, 32); } + /** + * <code style="background-color: rgb(128, 128, 128);"> + * </code> + */ + Color Gray() { return Color(128, 128, 128); } + /** + * <code style="background-color: rgb( 0, 128, 0);"> + * </code> + */ + Color Green() { return Color( 0, 128, 0); } + /** + * <code style="background-color: rgb(173, 255, 47);"> + * </code> + */ + Color GreenYellow() { return Color(173, 255, 47); } + /** + * <code style="background-color: rgb(240, 255, 240);"> + * </code> + */ + Color Honeydew() { return Color(240, 255, 240); } + /** + * <code style="background-color: rgb(255, 105, 180);"> + * </code> + */ + Color HotPink() { return Color(255, 105, 180); } + /** + * <code style="background-color: rgb(205, 92, 92);"> + * </code> + */ + Color IndianRed() { return Color(205, 92, 92); } + /** + * <code style="background-color: rgb( 75, 0, 130);"> + * </code> + */ + Color Indigo() { return Color( 75, 0, 130); } + /** + * <code style="background-color: rgb(255, 255, 240);"> + * </code> + */ + Color Ivory() { return Color(255, 255, 240); } + /** + * <code style="background-color: rgb(240, 230, 140);"> + * </code> + */ + Color Khaki() { return Color(240, 230, 140); } + /** + * <code style="background-color: rgb(230, 230, 250);"> + * </code> + */ + Color Lavender() { return Color(230, 230, 250); } + /** + * <code style="background-color: rgb(255, 240, 245);"> + * </code> + */ + Color LavenderBlush() { return Color(255, 240, 245); } + /** + * <code style="background-color: rgb(124, 252, 0);"> + * </code> + */ + Color LawnGreen() { return Color(124, 252, 0); } + /** + * <code style="background-color: rgb(255, 250, 205);"> + * </code> + */ + Color LemonChiffon() { return Color(255, 250, 205); } + /** + * <code style="background-color: rgb(173, 216, 230);"> + * </code> + */ + Color LightBlue() { return Color(173, 216, 230); } + /** + * <code style="background-color: rgb(240, 128, 128);"> + * </code> + */ + Color LightCoral() { return Color(240, 128, 128); } + /** + * <code style="background-color: rgb(224, 255, 255);"> + * </code> + */ + Color LightCyan() { return Color(224, 255, 255); } + /** + * <code style="background-color: rgb(250, 250, 210);"> + * </code> + */ + Color LightGoldenrodYellow() { return Color(250, 250, 210); } + /** + * <code style="background-color: rgb(211, 211, 211);"> + * </code> + */ + Color LightGray() { return Color(211, 211, 211); } + /** + * <code style="background-color: rgb(144, 238, 144);"> + * </code> + */ + Color LightGreen() { return Color(144, 238, 144); } + /** + * <code style="background-color: rgb(255, 182, 193);"> + * </code> + */ + Color LightPink() { return Color(255, 182, 193); } + /** + * <code style="background-color: rgb(255, 160, 122);"> + * </code> + */ + Color LightSalmon() { return Color(255, 160, 122); } + /** + * <code style="background-color: rgb( 32, 178, 170);"> + * </code> + */ + Color LightSeaGreen() { return Color( 32, 178, 170); } + /** + * <code style="background-color: rgb(135, 206, 250);"> + * </code> + */ + Color LightSkyBlue() { return Color(135, 206, 250); } + /** + * <code style="background-color: rgb(119, 136, 153);"> + * </code> + */ + Color LightSlateGray() { return Color(119, 136, 153); } + /** + * <code style="background-color: rgb(176, 196, 222);"> + * </code> + */ + Color LightSteelBlue() { return Color(176, 196, 222); } + /** + * <code style="background-color: rgb(255, 255, 224);"> + * </code> + */ + Color LightYellow() { return Color(255, 255, 224); } + /** + * <code style="background-color: rgb( 0, 255, 0);"> + * </code> + */ + Color Lime() { return Color( 0, 255, 0); } + /** + * <code style="background-color: rgb( 50, 205, 50);"> + * </code> + */ + Color LimeGreen() { return Color( 50, 205, 50); } + /** + * <code style="background-color: rgb(250, 240, 230);"> + * </code> + */ + Color Linen() { return Color(250, 240, 230); } + /** + * <code style="background-color: rgb(255, 0, 255);"> + * </code> + */ + Color Magenta() { return Color(255, 0, 255); } + /** + * <code style="background-color: rgb(128, 0, 0);"> + * </code> + */ + Color Maroon() { return Color(128, 0, 0); } + /** + * <code style="background-color: rgb(102, 205, 170);"> + * </code> + */ + Color MediumAquamarine() { return Color(102, 205, 170); } + /** + * <code style="background-color: rgb( 0, 0, 205);"> + * </code> + */ + Color MediumBlue() { return Color( 0, 0, 205); } + /** + * <code style="background-color: rgb(186, 85, 211);"> + * </code> + */ + Color MediumOrchid() { return Color(186, 85, 211); } + /** + * <code style="background-color: rgb(147, 112, 219);"> + * </code> + */ + Color MediumPurple() { return Color(147, 112, 219); } + /** + * <code style="background-color: rgb( 60, 179, 113);"> + * </code> + */ + Color MediumSeaGreen() { return Color( 60, 179, 113); } + /** + * <code style="background-color: rgb(123, 104, 238);"> + * </code> + */ + Color MediumSlateBlue() { return Color(123, 104, 238); } + /** + * <code style="background-color: rgb( 0, 250, 154);"> + * </code> + */ + Color MediumSpringGreen() { return Color( 0, 250, 154); } + /** + * <code style="background-color: rgb( 72, 209, 204);"> + * </code> + */ + Color MediumTurquoise() { return Color( 72, 209, 204); } + /** + * <code style="background-color: rgb(199, 21, 133);"> + * </code> + */ + Color MediumVioletRed() { return Color(199, 21, 133); } + /** + * <code style="background-color: rgb( 25, 25, 112);"> + * </code> + */ + Color MidnightBlue() { return Color( 25, 25, 112); } + /** + * <code style="background-color: rgb(245, 255, 250);"> + * </code> + */ + Color MintCream() { return Color(245, 255, 250); } + /** + * <code style="background-color: rgb(255, 228, 225);"> + * </code> + */ + Color MistyRose() { return Color(255, 228, 225); } + /** + * <code style="background-color: rgb(255, 228, 181);"> + * </code> + */ + Color Moccasin() { return Color(255, 228, 181); } + /** + * <code style="background-color: rgb(255, 222, 173);"> + * </code> + */ + Color NavajoWhite() { return Color(255, 222, 173); } + /** + * <code style="background-color: rgb( 0, 0, 128);"> + * </code> + */ + Color Navy() { return Color( 0, 0, 128); } + /** + * <code style="background-color: rgb(253, 245, 230);"> + * </code> + */ + Color OldLace() { return Color(253, 245, 230); } + /** + * <code style="background-color: rgb(128, 128, 0);"> + * </code> + */ + Color Olive() { return Color(128, 128, 0); } + /** + * <code style="background-color: rgb(107, 142, 35);"> + * </code> + */ + Color OliveDrab() { return Color(107, 142, 35); } + /** + * <code style="background-color: rgb(255, 165, 0);"> + * </code> + */ + Color Orange() { return Color(255, 165, 0); } + /** + * <code style="background-color: rgb(255, 69, 0);"> + * </code> + */ + Color OrangeRed() { return Color(255, 69, 0); } + /** + * <code style="background-color: rgb(218, 112, 214);"> + * </code> + */ + Color Orchid() { return Color(218, 112, 214); } + /** + * <code style="background-color: rgb(238, 232, 170);"> + * </code> + */ + Color PaleGoldenrod() { return Color(238, 232, 170); } + /** + * <code style="background-color: rgb(152, 251, 152);"> + * </code> + */ + Color PaleGreen() { return Color(152, 251, 152); } + /** + * <code style="background-color: rgb(175, 238, 238);"> + * </code> + */ + Color PaleTurquoise() { return Color(175, 238, 238); } + /** + * <code style="background-color: rgb(219, 112, 147);"> + * </code> + */ + Color PaleVioletRed() { return Color(219, 112, 147); } + /** + * <code style="background-color: rgb(255, 239, 213);"> + * </code> + */ + Color PapayaWhip() { return Color(255, 239, 213); } + /** + * <code style="background-color: rgb(255, 218, 185);"> + * </code> + */ + Color PeachPuff() { return Color(255, 218, 185); } + /** + * <code style="background-color: rgb(205, 133, 63);"> + * </code> + */ + Color Peru() { return Color(205, 133, 63); } + /** + * <code style="background-color: rgb(255, 192, 203);"> + * </code> + */ + Color Pink() { return Color(255, 192, 203); } + /** + * <code style="background-color: rgb(221, 160, 221);"> + * </code> + */ + Color Plum() { return Color(221, 160, 221); } + /** + * <code style="background-color: rgb(176, 224, 230);"> + * </code> + */ + Color PowderBlue() { return Color(176, 224, 230); } + /** + * <code style="background-color: rgb(128, 0, 128);"> + * </code> + */ + Color Purple() { return Color(128, 0, 128); } + /** + * <code style="background-color: rgb(255, 0, 0);"> + * </code> + */ + Color Red() { return Color(255, 0, 0); } + /** + * <code style="background-color: rgb(188, 143, 143);"> + * </code> + */ + Color RosyBrown() { return Color(188, 143, 143); } + /** + * <code style="background-color: rgb( 65, 105, 225);"> + * </code> + */ + Color RoyalBlue() { return Color( 65, 105, 225); } + /** + * <code style="background-color: rgb(139, 69, 19);"> + * </code> + */ + Color SaddleBrown() { return Color(139, 69, 19); } + /** + * <code style="background-color: rgb(250, 128, 114);"> + * </code> + */ + Color Salmon() { return Color(250, 128, 114); } + /** + * <code style="background-color: rgb(244, 164, 96);"> + * </code> + */ + Color SandyBrown() { return Color(244, 164, 96); } + /** + * <code style="background-color: rgb( 46, 139, 87);"> + * </code> + */ + Color SeaGreen() { return Color( 46, 139, 87); } + /** + * <code style="background-color: rgb(255, 245, 238);"> + * </code> + */ + Color Seashell() { return Color(255, 245, 238); } + /** + * <code style="background-color: rgb(160, 82, 45);"> + * </code> + */ + Color Sienna() { return Color(160, 82, 45); } + /** + * <code style="background-color: rgb(192, 192, 192);"> + * </code> + */ + Color Silver() { return Color(192, 192, 192); } + /** + * <code style="background-color: rgb(135, 206, 235);"> + * </code> + */ + Color SkyBlue() { return Color(135, 206, 235); } + /** + * <code style="background-color: rgb(106, 90, 205);"> + * </code> + */ + Color SlateBlue() { return Color(106, 90, 205); } + /** + * <code style="background-color: rgb(112, 128, 144);"> + * </code> + */ + Color SlateGray() { return Color(112, 128, 144); } + /** + * <code style="background-color: rgb(255, 250, 250);"> + * </code> + */ + Color Snow() { return Color(255, 250, 250); } + /** + * <code style="background-color: rgb( 0, 255, 127);"> + * </code> + */ + Color SpringGreen() { return Color( 0, 255, 127); } + /** + * <code style="background-color: rgb( 70, 130, 180);"> + * </code> + */ + Color SteelBlue() { return Color( 70, 130, 180); } + /** + * <code style="background-color: rgb(210, 180, 140);"> + * </code> + */ + Color Tan() { return Color(210, 180, 140); } + /** + * <code style="background-color: rgb( 0, 128, 128);"> + * </code> + */ + Color Teal() { return Color( 0, 128, 128); } + /** + * <code style="background-color: rgb(216, 191, 216);"> + * </code> + */ + Color Thistle() { return Color(216, 191, 216); } + /** + * <code style="background-color: rgb(255, 99, 71);"> + * </code> + */ + Color Tomato() { return Color(255, 99, 71); } + /** + * <code style="background-color: rgb( 64, 224, 208);"> + * </code> + */ + Color Turquoise() { return Color( 64, 224, 208); } + /** + * <code style="background-color: rgb(238, 130, 238);"> + * </code> + */ + Color Violet() { return Color(238, 130, 238); } + /** + * <code style="background-color: rgb(245, 222, 179);"> + * </code> + */ + Color Wheat() { return Color(245, 222, 179); } + /** + * <code style="background-color: rgb(255, 255, 255);"> + * </code> + */ + Color White() { return Color(255, 255, 255); } + /** + * <code style="background-color: rgb(245, 245, 245);"> + * </code> + */ + Color WhiteSmoke() { return Color(245, 245, 245); } + /** + * <code style="background-color: rgb(255, 255, 0);"> + * </code> + */ + Color Yellow() { return Color(255, 255, 0); } + /** + * <code style="background-color: rgb(154, 205, 50);"> + * </code> + */ + Color YellowGreen() { return Color(154, 205, 50); } +} +