| 1 | /* |
| 2 | * gdipluscolor.h |
| 3 | * |
| 4 | * GDI+ color |
| 5 | * |
| 6 | * This file is part of the w32api package. |
| 7 | * |
| 8 | * Contributors: |
| 9 | * Created by Markus Koenig <markus@stber-koenig.de> |
| 10 | * |
| 11 | * THIS SOFTWARE IS NOT COPYRIGHTED |
| 12 | * |
| 13 | * This source code is offered for use in the public domain. You may |
| 14 | * use, modify or distribute it freely. |
| 15 | * |
| 16 | * This code is distributed in the hope that it will be useful but |
| 17 | * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY |
| 18 | * DISCLAIMED. This includes but is not limited to warranties of |
| 19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
| 20 | * |
| 21 | */ |
| 22 | |
| 23 | #ifndef __GDIPLUS_COLOR_H |
| 24 | #define __GDIPLUS_COLOR_H |
| 25 | #if __GNUC__ >=3 |
| 26 | #pragma GCC system_header |
| 27 | #endif |
| 28 | |
| 29 | typedef enum ColorChannelFlags { |
| 30 | 	ColorChannelFlagsC = 0, |
| 31 | 	ColorChannelFlagsM = 1, |
| 32 | 	ColorChannelFlagsY = 2, |
| 33 | 	ColorChannelFlagsK = 3, |
| 34 | 	ColorChannelFlagsLast = 4 |
| 35 | } ColorChannelFlags; |
| 36 | |
| 37 | typedef struct Color |
| 38 | { |
| 39 | 	#ifdef __cplusplus |
| 40 | 	private: |
| 41 | 	#endif |
| 42 | 	ARGB Value; |
| 43 | |
| 44 | 	#ifdef __cplusplus |
| 45 | 	public: |
| 46 | 	friend class Bitmap; |
| 47 | 	friend class Graphics; |
| 48 | 	friend class HatchBrush; |
| 49 | 	friend class PathGradientBrush; |
| 50 | 	friend class Pen; |
| 51 | 	friend class SolidBrush; |
| 52 | |
| 53 | 	static ARGB MakeARGB(BYTE a, BYTE r, BYTE g, BYTE b) |
| 54 | 	{ |
| 55 | 		return (ARGB) ((((DWORD) a) << 24) | (((DWORD) r) << 16) |
| 56 | 		 | (((DWORD) g) << 8) | ((DWORD) b)); |
| 57 | 	} |
| 58 | |
| 59 | 	static const ARGB AlphaMask = 0xFF000000; |
| 60 | |
| 61 | 	static const ARGB AliceBlue = 0xFFF0F8FF; |
| 62 | 	static const ARGB AntiqueWhite = 0xFFFAEBD7; |
| 63 | 	static const ARGB Aqua = 0xFF00FFFF; |
| 64 | 	static const ARGB Aquamarine = 0xFF7FFFD4; |
| 65 | 	static const ARGB Azure = 0xFFF0FFFF; |
| 66 | 	static const ARGB Beige = 0xFFF5F5DC; |
| 67 | 	static const ARGB Bisque = 0xFFFFE4C4; |
| 68 | 	static const ARGB Black = 0xFF000000; |
| 69 | 	static const ARGB BlanchedAlmond = 0xFFFFEBCD; |
| 70 | 	static const ARGB Blue = 0xFF0000FF; |
| 71 | 	static const ARGB BlueViolet = 0xFF8A2BE2; |
| 72 | 	static const ARGB Brown = 0xFFA52A2A; |
| 73 | 	static const ARGB BurlyWood = 0xFFDEB887; |
| 74 | 	static const ARGB CadetBlue = 0xFF5F9EA0; |
| 75 | 	static const ARGB Chartreuse = 0xFF7FFF00; |
| 76 | 	static const ARGB Chocolate = 0xFFD2691E; |
| 77 | 	static const ARGB Coral = 0xFFFF7F50; |
| 78 | 	static const ARGB CornflowerBlue = 0xFF6495ED; |
| 79 | 	static const ARGB Cornsilk = 0xFFFFF8DC; |
| 80 | 	static const ARGB Crimson = 0xFFDC143C; |
| 81 | 	static const ARGB Cyan = 0xFF00FFFF; |
| 82 | 	static const ARGB DarkBlue = 0xFF00008B; |
| 83 | 	static const ARGB DarkCyan = 0xFF008B8B; |
| 84 | 	static const ARGB DarkGoldenrod = 0xFFB8860B; |
| 85 | 	static const ARGB DarkGray = 0xFFA9A9A9; |
| 86 | 	static const ARGB DarkGreen = 0xFF006400; |
| 87 | 	static const ARGB DarkKhaki = 0xFFBDB76B; |
| 88 | 	static const ARGB DarkMagenta = 0xFF8B008B; |
| 89 | 	static const ARGB DarkOliveGreen = 0xFF556B2F; |
| 90 | 	static const ARGB DarkOrange = 0xFFFF8C00; |
| 91 | 	static const ARGB DarkOrchid = 0xFF9932CC; |
| 92 | 	static const ARGB DarkRed = 0xFF8B0000; |
| 93 | 	static const ARGB DarkSalmon = 0xFFE9967A; |
| 94 | 	static const ARGB DarkSeaGreen = 0xFF8FBC8F; |
| 95 | 	static const ARGB DarkSlateBlue = 0xFF483D8B; |
| 96 | 	static const ARGB DarkSlateGray = 0xFF2F4F4F; |
| 97 | 	static const ARGB DarkTurquoise = 0xFF00CED1; |
| 98 | 	static const ARGB DarkViolet = 0xFF9400D3; |
| 99 | 	static const ARGB DeepPink = 0xFFFF1493; |
| 100 | 	static const ARGB DeepSkyBlue = 0xFF00BFFF; |
| 101 | 	static const ARGB DimGray = 0xFF696969; |
| 102 | 	static const ARGB DodgerBlue = 0xFF1E90FF; |
| 103 | 	static const ARGB Firebrick = 0xFFB22222; |
| 104 | 	static const ARGB FloralWhite = 0xFFFFFAF0; |
| 105 | 	static const ARGB ForestGreen = 0xFF228B22; |
| 106 | 	static const ARGB Fuchsia = 0xFFFF00FF; |
| 107 | 	static const ARGB Gainsboro = 0xFFDCDCDC; |
| 108 | 	static const ARGB GhostWhite = 0xFFF8F8FF; |
| 109 | 	static const ARGB Gold = 0xFFFFD700; |
| 110 | 	static const ARGB Goldenrod = 0xFFDAA520; |
| 111 | 	static const ARGB Gray = 0xFF808080; |
| 112 | 	static const ARGB Green = 0xFF008000; |
| 113 | 	static const ARGB GreenYellow = 0xFFADFF2F; |
| 114 | 	static const ARGB Honeydew = 0xFFF0FFF0; |
| 115 | 	static const ARGB HotPink = 0xFFFF69B4; |
| 116 | 	static const ARGB IndianRed = 0xFFCD5C5C; |
| 117 | 	static const ARGB Indigo = 0xFF4B0082; |
| 118 | 	static const ARGB Ivory = 0xFFFFFFF0; |
| 119 | 	static const ARGB Khaki = 0xFFF0E68C; |
| 120 | 	static const ARGB Lavender = 0xFFE6E6FA; |
| 121 | 	static const ARGB LavenderBlush = 0xFFFFF0F5; |
| 122 | 	static const ARGB LawnGreen = 0xFF7CFC00; |
| 123 | 	static const ARGB LemonChiffon = 0xFFFFFACD; |
| 124 | 	static const ARGB LightBlue = 0xFFADD8E6; |
| 125 | 	static const ARGB LightCoral = 0xFFF08080; |
| 126 | 	static const ARGB LightCyan = 0xFFE0FFFF; |
| 127 | 	static const ARGB LightGoldenrodYellow = 0xFFFAFAD2; |
| 128 | 	static const ARGB LightGray = 0xFFD3D3D3; |
| 129 | 	static const ARGB LightGreen = 0xFF90EE90; |
| 130 | 	static const ARGB LightPink = 0xFFFFB6C1; |
| 131 | 	static const ARGB LightSalmon = 0xFFFFA07A; |
| 132 | 	static const ARGB LightSeaGreen = 0xFF20B2AA; |
| 133 | 	static const ARGB LightSkyBlue = 0xFF87CEFA; |
| 134 | 	static const ARGB LightSlateGray = 0xFF778899; |
| 135 | 	static const ARGB LightSteelBlue = 0xFFB0C4DE; |
| 136 | 	static const ARGB LightYellow = 0xFFFFFFE0; |
| 137 | 	static const ARGB Lime = 0xFF00FF00; |
| 138 | 	static const ARGB LimeGreen = 0xFF32CD32; |
| 139 | 	static const ARGB Linen = 0xFFFAF0E6; |
| 140 | 	static const ARGB Magenta = 0xFFFF00FF; |
| 141 | 	static const ARGB Maroon = 0xFF800000; |
| 142 | 	static const ARGB MediumAquamarine = 0xFF66CDAA; |
| 143 | 	static const ARGB MediumBlue = 0xFF0000CD; |
| 144 | 	static const ARGB MediumOrchid = 0xFFBA55D3; |
| 145 | 	static const ARGB MediumPurple = 0xFF9370DB; |
| 146 | 	static const ARGB MediumSeaGreen = 0xFF3CB371; |
| 147 | 	static const ARGB MediumSlateBlue = 0xFF7B68EE; |
| 148 | 	static const ARGB MediumSpringGreen = 0xFF00FA9A; |
| 149 | 	static const ARGB MediumTurquoise = 0xFF48D1CC; |
| 150 | 	static const ARGB MediumVioletRed = 0xFFC71585; |
| 151 | 	static const ARGB MidnightBlue = 0xFF191970; |
| 152 | 	static const ARGB MintCream = 0xFFF5FFFA; |
| 153 | 	static const ARGB MistyRose = 0xFFFFE4E1; |
| 154 | 	static const ARGB Moccasin = 0xFFFFE4B5; |
| 155 | 	static const ARGB NavajoWhite = 0xFFFFDEAD; |
| 156 | 	static const ARGB Navy = 0xFF000080; |
| 157 | 	static const ARGB OldLace = 0xFFFDF5E6; |
| 158 | 	static const ARGB Olive = 0xFF808000; |
| 159 | 	static const ARGB OliveDrab = 0xFF6B8E23; |
| 160 | 	static const ARGB Orange = 0xFFFFA500; |
| 161 | 	static const ARGB OrangeRed = 0xFFFF4500; |
| 162 | 	static const ARGB Orchid = 0xFFDA70D6; |
| 163 | 	static const ARGB PaleGoldenrod = 0xFFEEE8AA; |
| 164 | 	static const ARGB PaleGreen = 0xFF98FB98; |
| 165 | 	static const ARGB PaleTurquoise = 0xFFAFEEEE; |
| 166 | 	static const ARGB PaleVioletRed = 0xFFDB7093; |
| 167 | 	static const ARGB PapayaWhip = 0xFFFFEFD5; |
| 168 | 	static const ARGB PeachPuff = 0xFFFFDAB9; |
| 169 | 	static const ARGB Peru = 0xFFCD853F; |
| 170 | 	static const ARGB Pink = 0xFFFFC0CB; |
| 171 | 	static const ARGB Plum = 0xFFDDA0DD; |
| 172 | 	static const ARGB PowderBlue = 0xFFB0E0E6; |
| 173 | 	static const ARGB Purple = 0xFF800080; |
| 174 | 	static const ARGB Red = 0xFFFF0000; |
| 175 | 	static const ARGB RosyBrown = 0xFFBC8F8F; |
| 176 | 	static const ARGB RoyalBlue = 0xFF4169E1; |
| 177 | 	static const ARGB SaddleBrown = 0xFF8B4513; |
| 178 | 	static const ARGB Salmon = 0xFFFA8072; |
| 179 | 	static const ARGB SandyBrown = 0xFFF4A460; |
| 180 | 	static const ARGB SeaGreen = 0xFF2E8B57; |
| 181 | 	static const ARGB SeaShell = 0xFFFFF5EE; |
| 182 | 	static const ARGB Sienna = 0xFFA0522D; |
| 183 | 	static const ARGB Silver = 0xFFC0C0C0; |
| 184 | 	static const ARGB SkyBlue = 0xFF87CEEB; |
| 185 | 	static const ARGB SlateBlue = 0xFF6A5ACD; |
| 186 | 	static const ARGB SlateGray = 0xFF708090; |
| 187 | 	static const ARGB Snow = 0xFFFFFAFA; |
| 188 | 	static const ARGB SpringGreen = 0xFF00FF7F; |
| 189 | 	static const ARGB SteelBlue = 0xFF4682B4; |
| 190 | 	static const ARGB Tan = 0xFFD2B48C; |
| 191 | 	static const ARGB Teal = 0xFF008080; |
| 192 | 	static const ARGB Thistle = 0xFFD8BFD8; |
| 193 | 	static const ARGB Tomato = 0xFFFF6347; |
| 194 | 	static const ARGB Transparent = 0x00FFFFFF; |
| 195 | 	static const ARGB Turquoise = 0xFF40E0D0; |
| 196 | 	static const ARGB Violet = 0xFFEE82EE; |
| 197 | 	static const ARGB Wheat = 0xFFF5DEB3; |
| 198 | 	static const ARGB White = 0xFFFFFFFF; |
| 199 | 	static const ARGB WhiteSmoke = 0xFFF5F5F5; |
| 200 | 	static const ARGB Yellow = 0xFFFFFF00; |
| 201 | 	static const ARGB YellowGreen = 0xFF9ACD32; |
| 202 | |
| 203 | 	Color(): Value(0xFF000000) {} |
| 204 | 	Color(ARGB argb): Value(argb) {} |
| 205 | 	Color(BYTE r, BYTE g, BYTE b): Value(MakeARGB(0xFF, r, g, b)) {} |
| 206 | 	Color(BYTE a, BYTE r, BYTE g, BYTE b): Value(MakeARGB(a, r, g, b)) {} |
| 207 | |
| 208 | 	BYTE GetA() const |
| 209 | 	{ |
| 210 | 		return (BYTE) (Value >> 24); |
| 211 | 	} |
| 212 | 	BYTE GetAlpha() const |
| 213 | 	{ |
| 214 | 		return (BYTE) (Value >> 24); |
| 215 | 	} |
| 216 | 	BYTE GetB() const |
| 217 | 	{ |
| 218 | 		return (BYTE) Value; |
| 219 | 	} |
| 220 | 	BYTE GetBlue() const |
| 221 | 	{ |
| 222 | 		return (BYTE) Value; |
| 223 | 	} |
| 224 | 	BYTE GetG() const |
| 225 | 	{ |
| 226 | 		return (BYTE) (Value >> 8); |
| 227 | 	} |
| 228 | 	BYTE GetGreen() const |
| 229 | 	{ |
| 230 | 		return (BYTE) (Value >> 8); |
| 231 | 	} |
| 232 | 	BYTE GetR() const |
| 233 | 	{ |
| 234 | 		return (BYTE) (Value >> 16); |
| 235 | 	} |
| 236 | 	BYTE GetRed() const |
| 237 | 	{ |
| 238 | 		return (BYTE) (Value >> 16); |
| 239 | 	} |
| 240 | 	ARGB GetValue() const |
| 241 | 	{ |
| 242 | 		return Value; |
| 243 | 	} |
| 244 | 	VOID SetFromCOLORREF(COLORREF rgb) |
| 245 | 	{ |
| 246 | 		BYTE r = (BYTE) rgb; |
| 247 | 		BYTE g = (BYTE) (rgb >> 8); |
| 248 | 		BYTE b = (BYTE) (rgb >> 16); |
| 249 | 		Value = MakeARGB(0xFF, r, g, b); |
| 250 | 	} |
| 251 | 	VOID SetValue(ARGB argb) |
| 252 | 	{ |
| 253 | 		Value = argb; |
| 254 | 	} |
| 255 | 	COLORREF ToCOLORREF() const |
| 256 | 	{ |
| 257 | 		return RGB(GetRed(), GetGreen(), GetBlue()); |
| 258 | 	} |
| 259 | 	#endif /* __cplusplus */ |
| 260 | } Color; |
| 261 | |
| 262 | #endif /* __GDIPLUS_COLOR_H */ |