19 #ifndef _GDISP_COLORS_H
20 #define _GDISP_COLORS_H
22 #include "../../gfx.h"
24 #if GFX_USE_GDISP || defined(__DOXYGEN__)
26 typedef gU16 gColorformat;
40 #define GDISP_COLORSYSTEM_MASK 0xF000
41 #define GDISP_COLORSYSTEM_RGB 0x2000
42 #define GDISP_COLORSYSTEM_BGR 0x3000
49 #define GDISP_COLORSYSTEM_TRUECOLOR 0x2000
50 #define GDISP_COLORSYSTEM_GRAYSCALE 0x4000
51 #define GDISP_COLORSYSTEM_PALETTE 0x6000
58 #define GDISP_PIXELFORMAT_MONO (GDISP_COLORSYSTEM_GRAYSCALE|0x0001)
59 #define GDISP_PIXELFORMAT_GRAY4 (GDISP_COLORSYSTEM_GRAYSCALE|0x0002)
60 #define GDISP_PIXELFORMAT_GRAY16 (GDISP_COLORSYSTEM_GRAYSCALE|0x0004)
61 #define GDISP_PIXELFORMAT_GRAY256 (GDISP_COLORSYSTEM_GRAYSCALE|0x0008)
62 #define GDISP_PIXELFORMAT_RGB565 (GDISP_COLORSYSTEM_RGB|0x0565)
63 #define GDISP_PIXELFORMAT_BGR565 (GDISP_COLORSYSTEM_BGR|0x0565)
64 #define GDISP_PIXELFORMAT_RGB555 (GDISP_COLORSYSTEM_RGB|0x0555)
65 #define GDISP_PIXELFORMAT_BGR555 (GDISP_COLORSYSTEM_BGR|0x0555)
66 #define GDISP_PIXELFORMAT_RGB888 (GDISP_COLORSYSTEM_RGB|0x0888)
67 #define GDISP_PIXELFORMAT_BGR888 (GDISP_COLORSYSTEM_BGR|0x0888)
68 #define GDISP_PIXELFORMAT_RGB444 (GDISP_COLORSYSTEM_RGB|0x0444)
69 #define GDISP_PIXELFORMAT_BGR444 (GDISP_COLORSYSTEM_BGR|0x0444)
70 #define GDISP_PIXELFORMAT_RGB332 (GDISP_COLORSYSTEM_RGB|0x0332)
71 #define GDISP_PIXELFORMAT_BGR332 (GDISP_COLORSYSTEM_BGR|0x0233)
72 #define GDISP_PIXELFORMAT_RGB233 (GDISP_COLORSYSTEM_RGB|0x0233)
73 #define GDISP_PIXELFORMAT_BGR233 (GDISP_COLORSYSTEM_BGR|0x0332)
74 #define GDISP_PIXELFORMAT_RGB666 (GDISP_COLORSYSTEM_RGB|0x0666)
75 #define GDISP_PIXELFORMAT_BGR666 (GDISP_COLORSYSTEM_BGR|0x0666)
76 #define GDISP_PIXELFORMAT_ERROR 0x0000
83 #define GFX_WHITE HTML2COLOR(0xFFFFFF)
84 #define GFX_BLACK HTML2COLOR(0x000000)
85 #define GFX_GRAY HTML2COLOR(0x808080)
86 #define GFX_GREY GFX_GRAY
87 #define GFX_BLUE HTML2COLOR(0x0000FF)
88 #define GFX_RED HTML2COLOR(0xFF0000)
89 #define GFX_FUCHSIA HTML2COLOR(0xFF00FF)
90 #define GFX_MAGENTA GFX_FUCHSIA
91 #define GFX_GREEN HTML2COLOR(0x008000)
92 #define GFX_YELLOW HTML2COLOR(0xFFFF00)
93 #define GFX_AQUA HTML2COLOR(0x00FFFF)
94 #define GFX_CYAN GFX_AQUA
95 #define GFX_LIME HTML2COLOR(0x00FF00)
96 #define GFX_MAROON HTML2COLOR(0x800000)
97 #define GFX_NAVY HTML2COLOR(0x000080)
98 #define GFX_OLIVE HTML2COLOR(0x808000)
99 #define GFX_PURPLE HTML2COLOR(0x800080)
100 #define GFX_SILVER HTML2COLOR(0xC0C0C0)
101 #define GFX_TEAL HTML2COLOR(0x008080)
102 #define GFX_ORANGE HTML2COLOR(0xFFA500)
103 #define GFX_PINK HTML2COLOR(0xFFC0CB)
104 #define GFX_SKYBLUE HTML2COLOR(0x87CEEB)
107 #if GFX_COMPAT_V2 && GFX_COMPAT_OLDCOLORS
108 #define White GFX_WHITE
109 #define Black GFX_BLACK
110 #define Gray GFX_GRAY
111 #define Grey GFX_GREY
112 #define Blue GFX_BLUE
114 #define Fuchsia GFX_FUCHSIA
115 #define Magenta GFX_MAGENTA
116 #define Green GFX_GREEN
117 #define Yellow GFX_YELLOW
118 #define Aqua GFX_AQUA
119 #define Cyan GFX_CYAN
120 #define Lime GFX_LIME
121 #define Maroon GFX_MAROON
122 #define Navy GFX_NAVY
123 #define Olive GFX_OLIVE
124 #define Purple GFX_PURPLE
125 #define Silver GFX_SILVER
126 #define Teal GFX_TEAL
127 #define Orange GFX_ORANGE
128 #define Pink GFX_PINK
129 #define SkyBlue GFX_SKYBLUE
132 #if defined(__DOXYGEN__)
136 #define COLOR_SYSTEM GDISP_COLORSYSTEM_TRUECOLOR
141 #define COLOR_BITS 16
148 #define COLOR_BITS_R 5
149 #define COLOR_BITS_G 6
150 #define COLOR_BITS_B 5
158 #define COLOR_SHIFT_R 11
159 #define COLOR_SHIFT_G 5
160 #define COLOR_SHIFT_B 0
166 #define COLOR_NEEDS_MASK GFXOFF
171 #define COLOR_MASK 0xFFFF
176 #define COLOR_TYPE gU16
181 #define COLOR_TYPE_BITS 16
191 #define LUMA2COLOR(l) ((gColor)((((l) & 0xF8)<<8) | (((l) & 0xFC)<<3) | (((l) & 0xF8)>>3)))
196 #define RGB2COLOR(r,g,b) ((gColor)((((r) & 0xF8)<<8) | (((g) & 0xFC)<<3) | (((b) & 0xF8)>>3)))
201 #define HTML2COLOR(h) ((gColor)((((h) & 0xF80000)>>8) | (((h) & 0x00FC00)>>5) | (((h) & 0x0000F8)>>3)))
217 #define LUMA_OF(c) ((RED_OF(c)+((gU16)GREEN_OF(c)<<1)+BLUE_OF(c))>>2)
218 #define RED_OF(c) (((c) & 0xF800)>>8)
219 #define GREEN_OF(c) (((c)&0x07E0)>>3)
220 #define BLUE_OF(c) (((c)&0x001F)<<3)
237 #define EXACT_LUMA_OF(c) ((EXACT_RED_OF(c)+((gU16)EXACT_GREEN_OF(c)<<1)+EXACT_BLUE_OF(c))>>2)
238 #define EXACT_RED_OF(c) (((((c)>>11)&0x1F)*255)/31)
239 #define EXACT_GREEN_OF(c) (((((c)>>5)&0x3F)*255)/63)
240 #define EXACT_BLUE_OF(c) (((((c)>>0)&0x1F)*255)/31)
253 #if GDISP_PIXELFORMAT & GDISP_COLORSYSTEM_TRUECOLOR
254 #define COLOR_SYSTEM GDISP_COLORSYSTEM_TRUECOLOR
257 #define COLOR_BITS_R ((GDISP_PIXELFORMAT>>8) & 0x0F)
258 #define COLOR_BITS_G ((GDISP_PIXELFORMAT>>4) & 0x0F)
259 #define COLOR_BITS_B ((GDISP_PIXELFORMAT>>0) & 0x0F)
260 #define COLOR_BITS (COLOR_BITS_R + COLOR_BITS_G + COLOR_BITS_B)
264 #define COLOR_TYPE gU8
265 #define COLOR_TYPE_BITS 8
266 #elif COLOR_BITS <= 16
267 #define COLOR_TYPE gU16
268 #define COLOR_TYPE_BITS 16
269 #elif COLOR_BITS <= 32
270 #define COLOR_TYPE gU32
271 #define COLOR_TYPE_BITS 32
273 #error "GDISP: Cannot define color types with more than 32 bits"
275 #if COLOR_TYPE_BITS == COLOR_BITS
276 #define COLOR_NEEDS_MASK GFXOFF
278 #define COLOR_NEEDS_MASK GFXON
280 #define COLOR_MASK() ((1 << COLOR_BITS)-1)
283 #if (GDISP_PIXELFORMAT & GDISP_COLORSYSTEM_MASK) == GDISP_COLORSYSTEM_RGB
284 #define COLOR_SHIFT_R (COLOR_BITS_B+COLOR_BITS_G)
285 #define COLOR_SHIFT_G COLOR_BITS_B
286 #define COLOR_SHIFT_B 0
288 #define COLOR_SHIFT_B (COLOR_BITS_R+COLOR_BITS_G)
289 #define COLOR_SHIFT_G COLOR_BITS_R
290 #define COLOR_SHIFT_R 0
294 #if COLOR_BITS_R + COLOR_SHIFT_R == 8
295 #define RED_OF(c) ((c) & (((1<<COLOR_BITS_R)-1) << COLOR_SHIFT_R))
296 #define RGB2COLOR_R(r) ((COLOR_TYPE)((r) & (0xFF & ~((1<<(8-COLOR_BITS_R))-1))))
297 #elif COLOR_BITS_R + COLOR_SHIFT_R > 8
298 #define RED_OF(c) (((c) & (((1<<COLOR_BITS_R)-1) << COLOR_SHIFT_R)) >> (COLOR_BITS_R+COLOR_SHIFT_R-8))
299 #define RGB2COLOR_R(r) (((COLOR_TYPE)((r) & (0xFF & ~((1<<(8-COLOR_BITS_R))-1)))) << (COLOR_BITS_R+COLOR_SHIFT_R-8))
301 #define RED_OF(c) (((c) & (((1<<COLOR_BITS_R)-1) << COLOR_SHIFT_R)) << (8-(COLOR_BITS_R+COLOR_SHIFT_R)))
302 #define RGB2COLOR_R(r) (((COLOR_TYPE)((r) & (0xFF & ~((1<<(8-COLOR_BITS_R))-1)))) >> (8-(COLOR_BITS_R+COLOR_SHIFT_R)))
304 #if COLOR_BITS_G + COLOR_SHIFT_G == 8
305 #define GREEN_OF(c) ((c) & (((1<<COLOR_BITS_G)-1) << COLOR_SHIFT_G))
306 #define RGB2COLOR_G(g) ((COLOR_TYPE)((g) & (0xFF & ~((1<<(8-COLOR_BITS_G))-1))))
307 #elif COLOR_BITS_G + COLOR_SHIFT_G > 8
308 #define GREEN_OF(c) (((c) & (((1<<COLOR_BITS_G)-1) << COLOR_SHIFT_G)) >> (COLOR_BITS_G+COLOR_SHIFT_G-8))
309 #define RGB2COLOR_G(g) (((COLOR_TYPE)((g) & (0xFF & ~((1<<(8-COLOR_BITS_G))-1)))) << (COLOR_BITS_G+COLOR_SHIFT_G-8))
311 #define GREEN_OF(c) (((c) & (((1<<COLOR_BITS_G)-1) << COLOR_SHIFT_G)) << (8-(COLOR_BITS_G+COLOR_SHIFT_G)))
312 #define RGB2COLOR_G(g) (((COLOR_TYPE)((g) & (0xFF & ~((1<<(8-COLOR_BITS_G))-1)))) >> (8-(COLOR_BITS_G+COLOR_SHIFT_G)))
314 #if COLOR_BITS_B + COLOR_SHIFT_B == 8
315 #define BLUE_OF(c) ((c) & (((1<<COLOR_BITS_B)-1) << COLOR_SHIFT_B))
316 #define RGB2COLOR_B(b) ((COLOR_TYPE)((b) & (0xFF & ~((1<<(8-COLOR_BITS_B))-1))))
317 #elif COLOR_BITS_B + COLOR_SHIFT_B > 8
318 #define BLUE_OF(c) (((c) & (((1<<COLOR_BITS_B)-1) << COLOR_SHIFT_B)) >> (COLOR_BITS_B+COLOR_SHIFT_B-8))
319 #define RGB2COLOR_B(b) (((COLOR_TYPE)((b) & (0xFF & ~((1<<(8-COLOR_BITS_B))-1)))) << (COLOR_BITS_B+COLOR_SHIFT_B-8))
321 #define BLUE_OF(c) (((c) & (((1<<COLOR_BITS_B)-1) << COLOR_SHIFT_B)) << (8-(COLOR_BITS_B+COLOR_SHIFT_B)))
322 #define RGB2COLOR_B(b) (((COLOR_TYPE)((b) & (0xFF & ~((1<<(8-COLOR_BITS_B))-1)))) >> (8-(COLOR_BITS_B+COLOR_SHIFT_B)))
324 #define LUMA_OF(c) ((RED_OF(c)+((gU16)GREEN_OF(c)<<1)+BLUE_OF(c))>>2)
325 #define EXACT_RED_OF(c) (((gU16)(((c)>>COLOR_SHIFT_R)&((1<<COLOR_BITS_R)-1))*255)/((1<<COLOR_BITS_R)-1))
326 #define EXACT_GREEN_OF(c) (((gU16)(((c)>>COLOR_SHIFT_G)&((1<<COLOR_BITS_G)-1))*255)/((1<<COLOR_BITS_G)-1))
327 #define EXACT_BLUE_OF(c) (((gU16)(((c)>>COLOR_SHIFT_B)&((1<<COLOR_BITS_B)-1))*255)/((1<<COLOR_BITS_B)-1))
328 #define EXACT_LUMA_OF(c) ((EXACT_RED_OF(c)+((gU16)EXACT_GREEN_OF(c)<<1)+EXACT_BLUE_OF(c))>>2)
329 #define LUMA2COLOR(l) (RGB2COLOR_R(l) | RGB2COLOR_G(l) | RGB2COLOR_B(l))
330 #define RGB2COLOR(r,g,b) (RGB2COLOR_R(r) | RGB2COLOR_G(g) | RGB2COLOR_B(b))
333 #if COLOR_BITS_R + COLOR_SHIFT_R == 24
334 #define HTML2COLOR_R(h) ((h) & ((0xFFL & ~((1<<(8-COLOR_BITS_R))-1))<<16))
335 #elif COLOR_BITS_R + COLOR_SHIFT_R > 24
336 #define HTML2COLOR_R(h) (((h) & ((0xFFL & ~((1<<(8-COLOR_BITS_R))-1))<<16)) << (COLOR_BITS_R+COLOR_SHIFT_R-24))
338 #define HTML2COLOR_R(h) (((h) & ((0xFFL & ~((1<<(8-COLOR_BITS_R))-1))<<16)) >> (24-(COLOR_BITS_R+COLOR_SHIFT_R)))
340 #if COLOR_BITS_G + COLOR_SHIFT_G == 16
341 #define HTML2COLOR_G(h) ((h) & ((0xFFL & ~((1<<(8-COLOR_BITS_G))-1))<<8))
342 #elif COLOR_BITS_G + COLOR_SHIFT_G > 16
343 #define HTML2COLOR_G(h) (((h) & ((0xFFL & ~((1<<(8-COLOR_BITS_G))-1))<<8)) << (COLOR_BITS_G+COLOR_SHIFT_G-16))
345 #define HTML2COLOR_G(h) (((h) & ((0xFFL & ~((1<<(8-COLOR_BITS_G))-1))<<8)) >> (16-(COLOR_BITS_G+COLOR_SHIFT_G)))
347 #if COLOR_BITS_B + COLOR_SHIFT_B == 8
348 #define HTML2COLOR_B(h) ((h) & (0xFFL & ~((1<<(8-COLOR_BITS_B))-1)))
349 #elif COLOR_BITS_B + COLOR_SHIFT_B > 8
350 #define HTML2COLOR_B(h) (((h) & (0xFFL & ~((1<<(8-COLOR_BITS_B))-1))) << (COLOR_BITS_B+COLOR_SHIFT_B-8))
352 #define HTML2COLOR_B(h) (((h) & (0xFFL & ~((1<<(8-COLOR_BITS_B))-1))) >> (8-(COLOR_BITS_B+COLOR_SHIFT_B)))
354 #define HTML2COLOR(h) ((COLOR_TYPE)(HTML2COLOR_R(h) | HTML2COLOR_G(h) | HTML2COLOR_B(h)))
357 #if GDISP_PIXELFORMAT == GDISP_PIXELFORMAT_RGB888
358 #define COLOR_BITS_A 8
359 #define COLOR_SHIFT_A 24
360 #define ALPHA_OF(c) (((c)>>24) ^ 0xFF)
361 #define EXACT_ALPHA_OF(c) ALPHA_OF((c))
362 #define AHTML2COLOR(h) ((h) ^ 0xFF000000)
363 #define RGB2COLOR_A(a) (((COLOR_TYPE)(((a) ^ 0xFF) & 0xFF)) << 24)
364 #define ARGB2COLOR(a,r,g,b) (RGB2COLOR_A(a) | RGB2COLOR_R(r) | RGB2COLOR_G(g) | RGB2COLOR_B(b))
365 #define GFXTRANSPARENT (0xFF000000)
371 #elif (GDISP_PIXELFORMAT & GDISP_COLORSYSTEM_MASK) == GDISP_COLORSYSTEM_GRAYSCALE
372 #define COLOR_SYSTEM GDISP_COLORSYSTEM_GRAYSCALE
375 #define COLOR_BITS (GDISP_PIXELFORMAT & 0xFF)
376 #define COLOR_BITS_R COLOR_BITS
377 #define COLOR_BITS_G COLOR_BITS
378 #define COLOR_BITS_B COLOR_BITS
379 #define COLOR_SHIFT_R 0
380 #define COLOR_SHIFT_G 0
381 #define COLOR_SHIFT_B 0
385 #define COLOR_TYPE gU8
386 #define COLOR_TYPE_BITS 8
388 #error "GDISP: Cannot define gray-scale color types with more than 8 bits"
390 #if COLOR_TYPE_BITS == COLOR_BITS
391 #define COLOR_NEEDS_MASK GFXOFF
393 #define COLOR_NEEDS_MASK GFXON
395 #define COLOR_MASK() ((1 << COLOR_BITS)-1)
398 #define RGB2COLOR(r,g,b) (((r)|(g)|(b)) ? 1 : 0)
399 #define LUMA2COLOR(l) ((l) ? 1 : 0)
400 #define HTML2COLOR(h) ((h) ? 1 : 0)
401 #define LUMA_OF(c) ((c) ? 255 : 0)
402 #define EXACT_LUMA_OF(c) LUMA_OF(c)
405 #define RGB2COLOR(r,g,b) ((COLOR_TYPE)(((gU16)(r)+(g)+(g)+(b)) >> (10-COLOR_BITS)))
406 #define LUMA2COLOR(l) ((COLOR_TYPE)((l)>>(8-COLOR_BITS)))
407 #define HTML2COLOR(h) ((COLOR_TYPE)(((((h)&0xFF0000)>>16)+(((h)&0x00FF00)>>7)+((h)&0x0000FF)) >> (10-COLOR_BITS)))
408 #define LUMA_OF(c) (((c) & ((1<<COLOR_BITS)-1)) << (8-COLOR_BITS))
409 #define EXACT_LUMA_OF(c) ((((gU16)(c) & ((1<<COLOR_BITS)-1))*255)/((1<<COLOR_BITS)-1))
412 #define RED_OF(c) LUMA_OF(c)
413 #define GREEN_OF(c) LUMA_OF(c)
414 #define BLUE_OF(c) LUMA_OF(c)
415 #define EXACT_RED_OF(c) EXACT_LUMA_OF(c)
416 #define EXACT_GREEN_OF(c) EXACT_LUMA_OF(c)
417 #define EXACT_BLUE_OF(c) EXACT_LUMA_OF(c)
422 #elif (GDISP_PIXELFORMAT & GDISP_COLORSYSTEM_MASK) == GDISP_COLORSYSTEM_PALETTE
423 #define COLOR_SYSTEM GDISP_COLORSYSTEM_PALETTE
425 #error "GDISP: A palette color system is not currently supported"
431 #error "GDISP: Unsupported color system"
COLOR_TYPE gColor
The color type definition.
#define COLOR_TYPE
The color type.