Commit | Line | Data |
---|---|---|
a09e091a JB |
1 | /* |
2 | * | |
3 | * Copyright © 2000 SuSE, Inc. | |
4 | * | |
5 | * Permission to use, copy, modify, distribute, and sell this software and its | |
6 | * documentation for any purpose is hereby granted without fee, provided that | |
7 | * the above copyright notice appear in all copies and that both that | |
8 | * copyright notice and this permission notice appear in supporting | |
9 | * documentation, and that the name of SuSE not be used in advertising or | |
10 | * publicity pertaining to distribution of the software without specific, | |
11 | * written prior permission. SuSE makes no representations about the | |
12 | * suitability of this software for any purpose. It is provided "as is" | |
13 | * without express or implied warranty. | |
14 | * | |
15 | * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL | |
16 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE | |
17 | * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
18 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION | |
19 | * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | |
20 | * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
21 | * | |
22 | * Author: Keith Packard, SuSE, Inc. | |
23 | */ | |
24 | ||
25 | #ifndef _PICTURE_H_ | |
26 | #define _PICTURE_H_ | |
27 | ||
28 | #include "privates.h" | |
29 | ||
30 | #include <pixman.h> | |
31 | ||
32 | typedef struct _DirectFormat *DirectFormatPtr; | |
33 | typedef struct _PictFormat *PictFormatPtr; | |
34 | typedef struct _Picture *PicturePtr; | |
35 | ||
36 | /* | |
37 | * While the protocol is generous in format support, the | |
38 | * sample implementation allows only packed RGB and GBR | |
39 | * representations for data to simplify software rendering, | |
40 | */ | |
41 | #define PICT_FORMAT(bpp,type,a,r,g,b) PIXMAN_FORMAT(bpp, type, a, r, g, b) | |
42 | ||
43 | /* | |
44 | * gray/color formats use a visual index instead of argb | |
45 | */ | |
46 | #define PICT_VISFORMAT(bpp,type,vi) (((bpp) << 24) | \ | |
47 | ((type) << 16) | \ | |
48 | ((vi))) | |
49 | ||
50 | #define PICT_FORMAT_BPP(f) PIXMAN_FORMAT_BPP(f) | |
51 | #define PICT_FORMAT_TYPE(f) PIXMAN_FORMAT_TYPE(f) | |
52 | #define PICT_FORMAT_A(f) PIXMAN_FORMAT_A(f) | |
53 | #define PICT_FORMAT_R(f) PIXMAN_FORMAT_R(f) | |
54 | #define PICT_FORMAT_G(f) PIXMAN_FORMAT_G(f) | |
55 | #define PICT_FORMAT_B(f) PIXMAN_FORMAT_B(f) | |
56 | #define PICT_FORMAT_RGB(f) PIXMAN_FORMAT_RGB(f) | |
57 | #define PICT_FORMAT_VIS(f) PIXMAN_FORMAT_VIS(f) | |
58 | ||
59 | #define PICT_TYPE_OTHER PIXMAN_TYPE_OTHER | |
60 | #define PICT_TYPE_A PIXMAN_TYPE_A | |
61 | #define PICT_TYPE_ARGB PIXMAN_TYPE_ARGB | |
62 | #define PICT_TYPE_ABGR PIXMAN_TYPE_ABGR | |
63 | #define PICT_TYPE_COLOR PIXMAN_TYPE_COLOR | |
64 | #define PICT_TYPE_GRAY PIXMAN_TYPE_GRAY | |
65 | #define PICT_TYPE_BGRA PIXMAN_TYPE_BGRA | |
66 | ||
67 | #define PICT_FORMAT_COLOR(f) PIXMAN_FORMAT_COLOR(f) | |
68 | ||
69 | /* 32bpp formats */ | |
70 | typedef enum _PictFormatShort { | |
71 | PICT_a2r10g10b10 = PIXMAN_a2r10g10b10, | |
72 | PICT_x2r10g10b10 = PIXMAN_x2r10g10b10, | |
73 | PICT_a2b10g10r10 = PIXMAN_a2b10g10r10, | |
74 | PICT_x2b10g10r10 = PIXMAN_x2b10g10r10, | |
75 | ||
76 | PICT_a8r8g8b8 = PIXMAN_a8r8g8b8, | |
77 | PICT_x8r8g8b8 = PIXMAN_x8r8g8b8, | |
78 | PICT_a8b8g8r8 = PIXMAN_a8b8g8r8, | |
79 | PICT_x8b8g8r8 = PIXMAN_x8b8g8r8, | |
80 | PICT_b8g8r8a8 = PIXMAN_b8g8r8a8, | |
81 | PICT_b8g8r8x8 = PIXMAN_b8g8r8x8, | |
82 | ||
83 | /* 24bpp formats */ | |
84 | PICT_r8g8b8 = PIXMAN_r8g8b8, | |
85 | PICT_b8g8r8 = PIXMAN_b8g8r8, | |
86 | ||
87 | /* 16bpp formats */ | |
88 | PICT_r5g6b5 = PIXMAN_r5g6b5, | |
89 | PICT_b5g6r5 = PIXMAN_b5g6r5, | |
90 | ||
91 | PICT_a1r5g5b5 = PIXMAN_a1r5g5b5, | |
92 | PICT_x1r5g5b5 = PIXMAN_x1r5g5b5, | |
93 | PICT_a1b5g5r5 = PIXMAN_a1b5g5r5, | |
94 | PICT_x1b5g5r5 = PIXMAN_x1b5g5r5, | |
95 | PICT_a4r4g4b4 = PIXMAN_a4r4g4b4, | |
96 | PICT_x4r4g4b4 = PIXMAN_x4r4g4b4, | |
97 | PICT_a4b4g4r4 = PIXMAN_a4b4g4r4, | |
98 | PICT_x4b4g4r4 = PIXMAN_x4b4g4r4, | |
99 | ||
100 | /* 8bpp formats */ | |
101 | PICT_a8 = PIXMAN_a8, | |
102 | PICT_r3g3b2 = PIXMAN_r3g3b2, | |
103 | PICT_b2g3r3 = PIXMAN_b2g3r3, | |
104 | PICT_a2r2g2b2 = PIXMAN_a2r2g2b2, | |
105 | PICT_a2b2g2r2 = PIXMAN_a2b2g2r2, | |
106 | ||
107 | PICT_c8 = PIXMAN_c8, | |
108 | PICT_g8 = PIXMAN_g8, | |
109 | ||
110 | PICT_x4a4 = PIXMAN_x4a4, | |
111 | ||
112 | PICT_x4c4 = PIXMAN_x4c4, | |
113 | PICT_x4g4 = PIXMAN_x4g4, | |
114 | ||
115 | /* 4bpp formats */ | |
116 | PICT_a4 = PIXMAN_a4, | |
117 | PICT_r1g2b1 = PIXMAN_r1g2b1, | |
118 | PICT_b1g2r1 = PIXMAN_b1g2r1, | |
119 | PICT_a1r1g1b1 = PIXMAN_a1r1g1b1, | |
120 | PICT_a1b1g1r1 = PIXMAN_a1b1g1r1, | |
121 | ||
122 | PICT_c4 = PIXMAN_c4, | |
123 | PICT_g4 = PIXMAN_g4, | |
124 | ||
125 | /* 1bpp formats */ | |
126 | PICT_a1 = PIXMAN_a1, | |
127 | ||
128 | PICT_g1 = PIXMAN_g1 | |
129 | } PictFormatShort; | |
130 | ||
131 | /* | |
132 | * For dynamic indexed visuals (GrayScale and PseudoColor), these control the | |
133 | * selection of colors allocated for drawing to Pictures. The default | |
134 | * policy depends on the size of the colormap: | |
135 | * | |
136 | * Size Default Policy | |
137 | * ---------------------------- | |
138 | * < 64 PolicyMono | |
139 | * < 256 PolicyGray | |
140 | * 256 PolicyColor (only on PseudoColor) | |
141 | * | |
142 | * The actual allocation code lives in miindex.c, and so is | |
143 | * austensibly server dependent, but that code does: | |
144 | * | |
145 | * PolicyMono Allocate no additional colors, use black and white | |
146 | * PolicyGray Allocate 13 gray levels (11 cells used) | |
147 | * PolicyColor Allocate a 4x4x4 cube and 13 gray levels (71 cells used) | |
148 | * PolicyAll Allocate as big a cube as possible, fill with gray (all) | |
149 | * | |
150 | * Here's a picture to help understand how many colors are | |
151 | * actually allocated (this is just the gray ramp): | |
152 | * | |
153 | * gray level | |
154 | * all 0000 1555 2aaa 4000 5555 6aaa 8000 9555 aaaa bfff d555 eaaa ffff | |
155 | * b/w 0000 ffff | |
156 | * 4x4x4 5555 aaaa | |
157 | * extra 1555 2aaa 4000 6aaa 8000 9555 bfff d555 eaaa | |
158 | * | |
159 | * The default colormap supplies two gray levels (black/white), the | |
160 | * 4x4x4 cube allocates another two and nine more are allocated to fill | |
161 | * in the 13 levels. When the 4x4x4 cube is not allocated, a total of | |
162 | * 11 cells are allocated. | |
163 | */ | |
164 | ||
165 | #define PictureCmapPolicyInvalid -1 | |
166 | #define PictureCmapPolicyDefault 0 | |
167 | #define PictureCmapPolicyMono 1 | |
168 | #define PictureCmapPolicyGray 2 | |
169 | #define PictureCmapPolicyColor 3 | |
170 | #define PictureCmapPolicyAll 4 | |
171 | ||
172 | extern _X_EXPORT int PictureCmapPolicy; | |
173 | ||
174 | extern _X_EXPORT int PictureParseCmapPolicy(const char *name); | |
175 | ||
176 | extern _X_EXPORT int RenderErrBase; | |
177 | ||
178 | /* Fixed point updates from Carl Worth, USC, Information Sciences Institute */ | |
179 | ||
180 | typedef pixman_fixed_32_32_t xFixed_32_32; | |
181 | ||
182 | typedef pixman_fixed_48_16_t xFixed_48_16; | |
183 | ||
184 | #define MAX_FIXED_48_16 pixman_max_fixed_48_16 | |
185 | #define MIN_FIXED_48_16 pixman_min_fixed_48_16 | |
186 | ||
187 | typedef pixman_fixed_1_31_t xFixed_1_31; | |
188 | typedef pixman_fixed_1_16_t xFixed_1_16; | |
189 | typedef pixman_fixed_16_16_t xFixed_16_16; | |
190 | ||
191 | /* | |
192 | * An unadorned "xFixed" is the same as xFixed_16_16, | |
193 | * (since it's quite common in the code) | |
194 | */ | |
195 | typedef pixman_fixed_t xFixed; | |
196 | ||
197 | #define XFIXED_BITS 16 | |
198 | ||
199 | #define xFixedToInt(f) pixman_fixed_to_int(f) | |
200 | #define IntToxFixed(i) pixman_int_to_fixed(i) | |
201 | #define xFixedE pixman_fixed_e | |
202 | #define xFixed1 pixman_fixed_1 | |
203 | #define xFixed1MinusE pixman_fixed_1_minus_e | |
204 | #define xFixedFrac(f) pixman_fixed_frac(f) | |
205 | #define xFixedFloor(f) pixman_fixed_floor(f) | |
206 | #define xFixedCeil(f) pixman_fixed_ceil(f) | |
207 | ||
208 | #define xFixedFraction(f) pixman_fixed_fraction(f) | |
209 | #define xFixedMod2(f) pixman_fixed_mod2(f) | |
210 | ||
211 | /* whether 't' is a well defined not obviously empty trapezoid */ | |
212 | #define xTrapezoidValid(t) ((t)->left.p1.y != (t)->left.p2.y && \ | |
213 | (t)->right.p1.y != (t)->right.p2.y && \ | |
214 | (int) ((t)->bottom - (t)->top) > 0) | |
215 | ||
216 | /* | |
217 | * Standard NTSC luminance conversions: | |
218 | * | |
219 | * y = r * 0.299 + g * 0.587 + b * 0.114 | |
220 | * | |
221 | * Approximate this for a bit more speed: | |
222 | * | |
223 | * y = (r * 153 + g * 301 + b * 58) / 512 | |
224 | * | |
225 | * This gives 17 bits of luminance; to get 15 bits, lop the low two | |
226 | */ | |
227 | ||
228 | #define CvtR8G8B8toY15(s) (((((s) >> 16) & 0xff) * 153 + \ | |
229 | (((s) >> 8) & 0xff) * 301 + \ | |
230 | (((s) ) & 0xff) * 58) >> 2) | |
231 | ||
232 | #endif /* _PICTURE_H_ */ |