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
29typedef enum ColorChannelFlags {
30	ColorChannelFlagsC = 0,
31	ColorChannelFlagsM = 1,
32	ColorChannelFlagsY = 2,
33	ColorChannelFlagsK = 3,
34	ColorChannelFlagsLast = 4
35} ColorChannelFlags;
36
37typedef 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 */
263