1 /************************************************************************/
2 /*									*/
3 /*  Color allocation, mainly for raster images.				*/
4 /*									*/
5 /************************************************************************/
6 
7 #   ifndef	UTIL_COLOR_H
8 #   define	UTIL_COLOR_H
9 
10 /************************************************************************/
11 /*									*/
12 /*  An RGB8 Color.							*/
13 /*  The most usual way to display images on a computer screen.		*/
14 /*									*/
15 /*  An RGB16 Color.							*/
16 /*  Used to match X11's way of handling colors.				*/
17 /*									*/
18 /*  NOTE that the structs use native types so the 8/16 indication is	*/
19 /*	more a suggestion than an implementation reality.		*/
20 /*									*/
21 /************************************************************************/
22 
23 # define RGB8DEB(rgb8) appDebug("%s(%3d) %s= RGBA:%d:%d:%d:%d\n", \
24 				__FILE__, __LINE__, #rgb8, \
25 				(rgb8)->rgb8Red, (rgb8)->rgb8Green, \
26 				(rgb8)->rgb8Blue, (rgb8)->rgb8Alpha )
27 
28 # define LRGB8DEB(l,rgb8) appDebug("%s(%3d) %s=%ld %s= RGBA:%d:%d:%d:%d\n", \
29 				__FILE__, __LINE__, \
30 				#l, ((long)l), #rgb8, \
31 				(rgb8)->rgb8Red, (rgb8)->rgb8Green, \
32 				(rgb8)->rgb8Blue, (rgb8)->rgb8Alpha )
33 
34 typedef struct	RGB8Color
35     {
36     unsigned char	rgb8Red;
37     unsigned char	rgb8Green;
38     unsigned char	rgb8Blue;
39     unsigned char	rgb8Alpha;
40     } RGB8Color;
41 
42 typedef struct	RGB16Color
43     {
44     unsigned short	rgb16Red;
45     unsigned short	rgb16Green;
46     unsigned short	rgb16Blue;
47     unsigned char	rgb16Alpha;
48     } RGB16Color;
49 
50 typedef enum RGBAColorComponent
51     {
52     RGBAcompRED= 0,
53     RGBAcompGREEN,
54     RGBAcompBLUE,
55     RGBAcompALPHA,
56 
57     RGBAcomp_COUNT
58     } RGBAColorComponent;
59 
60 /************************************************************************/
61 /*									*/
62 /*  Compare RGB8Colors.							*/
63 /*									*/
64 /************************************************************************/
65 
66 # define bmRGB8ColorsDiffer( a, b ) ( \
67 			    (a)->rgb8Red != (b)->rgb8Red	|| \
68 			    (a)->rgb8Green != (b)->rgb8Green	|| \
69 			    (a)->rgb8Blue != (b)->rgb8Blue	|| \
70 			    (a)->rgb8Alpha != (b)->rgb8Alpha	)
71 
72 # define utilRGB8SolidWhite( a ) { \
73 			    (a)->rgb8Red= (a)->rgb8Green= (a)->rgb8Blue= 255; \
74 			    (a)->rgb8Alpha= 255;	}
75 
76 # define utilRGB8SolidBlack( a ) { \
77 			    (a)->rgb8Red= (a)->rgb8Green= (a)->rgb8Blue= 0; \
78 			    (a)->rgb8Alpha= 255;	}
79 
80 /************************************************************************/
81 /*									*/
82 /*  Routine declarations:						*/
83 /*									*/
84 /************************************************************************/
85 
86 extern void utilInitRGB8Color(		RGB8Color *		rgb8 );
87 
88 extern int utilRGB8LumaChromaHue( int *			pLuma,
89 				int *			pChroma,
90 				int *			pHue,
91 				const RGB8Color *	rgb8 );
92 
93 extern int utilRGB8FromLumaChromaHue(	RGB8Color *	rgb8,
94 					int		luma,
95 					int		chroma,
96 					int		hue );
97 
98 extern int utilRGB8GetComponent(	const RGB8Color *	rgb8,
99 					int			prop );
100 
101 extern void utilGetTopShadowColor(	RGB8Color *		top,
102 					const RGB8Color *	back );
103 
104 extern void utilGetBottomShadowColor(	RGB8Color *		top,
105 					const RGB8Color *	back );
106 
107 extern void utilGetForegroundColor(	RGB8Color *		bottom,
108 					const RGB8Color *	back );
109 
110 #   endif	/*  UTIL_COLOR_H  */
111