Subversion Repositories Kolibri OS

Rev

Rev 4315 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
4315 Serge 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 
31
 
32
typedef unsigned long   Picture;
33
typedef unsigned long   PictFormat;
34
 
35
typedef struct _Pixmap  *PixmapPtr;
36
typedef struct _Picture *PicturePtr;
37
typedef struct _Drawable *DrawablePtr;
38
typedef struct _PictFormat *PictFormatPtr;
39
typedef struct pixman_transform PictTransform, *PictTransformPtr;
40
typedef struct _Private PrivateRec, *PrivatePtr;
41
/*
42
 * While the protocol is generous in format support, the
43
 * sample implementation allows only packed RGB and GBR
44
 * representations for data to simplify software rendering,
45
 */
46
#define PICT_FORMAT(bpp,type,a,r,g,b)	PIXMAN_FORMAT(bpp, type, a, r, g, b)
47
 
48
/*
49
 * gray/color formats use a visual index instead of argb
50
 */
51
#define PICT_VISFORMAT(bpp,type,vi)	(((bpp) << 24) |  \
52
					 ((type) << 16) | \
53
					 ((vi)))
54
 
55
#define PICT_FORMAT_BPP(f)	PIXMAN_FORMAT_BPP(f)
56
#define PICT_FORMAT_TYPE(f)	PIXMAN_FORMAT_TYPE(f)
57
#define PICT_FORMAT_A(f)	PIXMAN_FORMAT_A(f)
58
#define PICT_FORMAT_R(f)	PIXMAN_FORMAT_R(f)
59
#define PICT_FORMAT_G(f)	PIXMAN_FORMAT_G(f)
60
#define PICT_FORMAT_B(f)	PIXMAN_FORMAT_B(f)
61
#define PICT_FORMAT_RGB(f)	PIXMAN_FORMAT_RGB(f)
62
#define PICT_FORMAT_VIS(f)	PIXMAN_FORMAT_VIS(f)
63
 
64
#define PICT_TYPE_OTHER		PIXMAN_TYPE_OTHER
65
#define PICT_TYPE_A		PIXMAN_TYPE_A
66
#define PICT_TYPE_ARGB		PIXMAN_TYPE_ARGB
67
#define PICT_TYPE_ABGR		PIXMAN_TYPE_ABGR
68
#define PICT_TYPE_COLOR		PIXMAN_TYPE_COLOR
69
#define PICT_TYPE_GRAY		PIXMAN_TYPE_GRAY
70
#define PICT_TYPE_BGRA		PIXMAN_TYPE_BGRA
71
 
72
#define PICT_FORMAT_COLOR(f)	PIXMAN_FORMAT_COLOR(f)
73
 
74
/* 32bpp formats */
75
typedef enum _PictFormatShort {
76
    PICT_a2r10g10b10 = PIXMAN_a2r10g10b10,
77
    PICT_x2r10g10b10 = PIXMAN_x2r10g10b10,
78
    PICT_a2b10g10r10 = PIXMAN_a2b10g10r10,
79
    PICT_x2b10g10r10 = PIXMAN_x2b10g10r10,
80
 
81
    PICT_a8r8g8b8 = PIXMAN_a8r8g8b8,
82
    PICT_x8r8g8b8 = PIXMAN_x8r8g8b8,
83
    PICT_a8b8g8r8 = PIXMAN_a8b8g8r8,
84
    PICT_x8b8g8r8 = PIXMAN_x8b8g8r8,
85
    PICT_b8g8r8a8 = PIXMAN_b8g8r8a8,
86
    PICT_b8g8r8x8 = PIXMAN_b8g8r8x8,
87
 
88
/* 24bpp formats */
89
    PICT_r8g8b8 = PIXMAN_r8g8b8,
90
    PICT_b8g8r8 = PIXMAN_b8g8r8,
91
 
92
/* 16bpp formats */
93
    PICT_r5g6b5 = PIXMAN_r5g6b5,
94
    PICT_b5g6r5 = PIXMAN_b5g6r5,
95
 
96
    PICT_a1r5g5b5 = PIXMAN_a1r5g5b5,
97
    PICT_x1r5g5b5 = PIXMAN_x1r5g5b5,
98
    PICT_a1b5g5r5 = PIXMAN_a1b5g5r5,
99
    PICT_x1b5g5r5 = PIXMAN_x1b5g5r5,
100
    PICT_a4r4g4b4 = PIXMAN_a4r4g4b4,
101
    PICT_x4r4g4b4 = PIXMAN_x4r4g4b4,
102
    PICT_a4b4g4r4 = PIXMAN_a4b4g4r4,
103
    PICT_x4b4g4r4 = PIXMAN_x4b4g4r4,
104
 
105
/* 8bpp formats */
106
    PICT_a8 = PIXMAN_a8,
107
    PICT_r3g3b2 = PIXMAN_r3g3b2,
108
    PICT_b2g3r3 = PIXMAN_b2g3r3,
109
    PICT_a2r2g2b2 = PIXMAN_a2r2g2b2,
110
    PICT_a2b2g2r2 = PIXMAN_a2b2g2r2,
111
 
112
    PICT_c8 = PIXMAN_c8,
113
    PICT_g8 = PIXMAN_g8,
114
 
115
    PICT_x4a4 = PIXMAN_x4a4,
116
 
117
    PICT_x4c4 = PIXMAN_x4c4,
118
    PICT_x4g4 = PIXMAN_x4g4,
119
 
120
/* 4bpp formats */
121
    PICT_a4 = PIXMAN_a4,
122
    PICT_r1g2b1 = PIXMAN_r1g2b1,
123
    PICT_b1g2r1 = PIXMAN_b1g2r1,
124
    PICT_a1r1g1b1 = PIXMAN_a1r1g1b1,
125
    PICT_a1b1g1r1 = PIXMAN_a1b1g1r1,
126
 
127
    PICT_c4 = PIXMAN_c4,
128
    PICT_g4 = PIXMAN_g4,
129
 
130
/* 1bpp formats */
131
    PICT_a1 = PIXMAN_a1,
132
 
133
    PICT_g1 = PIXMAN_g1
134
} PictFormatShort;
135
 
136
/*
137
 * For dynamic indexed visuals (GrayScale and PseudoColor), these control the
138
 * selection of colors allocated for drawing to Pictures.  The default
139
 * policy depends on the size of the colormap:
140
 *
141
 * Size		Default Policy
142
 * ----------------------------
143
 *  < 64	PolicyMono
144
 *  < 256	PolicyGray
145
 *  256		PolicyColor (only on PseudoColor)
146
 *
147
 * The actual allocation code lives in miindex.c, and so is
148
 * austensibly server dependent, but that code does:
149
 *
150
 * PolicyMono	    Allocate no additional colors, use black and white
151
 * PolicyGray	    Allocate 13 gray levels (11 cells used)
152
 * PolicyColor	    Allocate a 4x4x4 cube and 13 gray levels (71 cells used)
153
 * PolicyAll	    Allocate as big a cube as possible, fill with gray (all)
154
 *
155
 * Here's a picture to help understand how many colors are
156
 * actually allocated (this is just the gray ramp):
157
 *
158
 *                 gray level
159
 * all   0000 1555 2aaa 4000 5555 6aaa 8000 9555 aaaa bfff d555 eaaa ffff
160
 * b/w   0000                                                        ffff
161
 * 4x4x4                     5555                aaaa
162
 * extra      1555 2aaa 4000      6aaa 8000 9555      bfff d555 eaaa
163
 *
164
 * The default colormap supplies two gray levels (black/white), the
165
 * 4x4x4 cube allocates another two and nine more are allocated to fill
166
 * in the 13 levels.  When the 4x4x4 cube is not allocated, a total of
167
 * 11 cells are allocated.
168
 */
169
 
170
#define PictureCmapPolicyInvalid    -1
171
#define PictureCmapPolicyDefault    0
172
#define PictureCmapPolicyMono	    1
173
#define PictureCmapPolicyGray	    2
174
#define PictureCmapPolicyColor	    3
175
#define PictureCmapPolicyAll	    4
176
 
177
//extern _X_EXPORT int PictureCmapPolicy;
178
 
179
//extern _X_EXPORT int PictureParseCmapPolicy(const char *name);
180
 
181
//extern _X_EXPORT int RenderErrBase;
182
 
183
/* Fixed point updates from Carl Worth, USC, Information Sciences Institute */
184
 
185
typedef pixman_fixed_32_32_t xFixed_32_32;
186
 
187
typedef pixman_fixed_48_16_t xFixed_48_16;
188
 
189
#define MAX_FIXED_48_16		pixman_max_fixed_48_16
190
#define MIN_FIXED_48_16		pixman_min_fixed_48_16
191
 
192
typedef pixman_fixed_1_31_t xFixed_1_31;
193
typedef pixman_fixed_1_16_t xFixed_1_16;
194
typedef pixman_fixed_16_16_t xFixed_16_16;
195
 
196
/*
197
 * An unadorned "xFixed" is the same as xFixed_16_16,
198
 * (since it's quite common in the code)
199
 */
200
typedef pixman_fixed_t xFixed;
201
 
202
#define XFIXED_BITS	16
203
 
204
#define xFixedToInt(f)      pixman_fixed_to_int(f)
205
#define IntToxFixed(i)      pixman_int_to_fixed(i)
206
#define xFixedE             pixman_fixed_e
207
#define xFixed1             pixman_fixed_1
208
#define xFixed1MinusE       pixman_fixed_1_minus_e
209
#define xFixedFrac(f)       pixman_fixed_frac(f)
210
#define xFixedFloor(f)      pixman_fixed_floor(f)
211
#define xFixedCeil(f)       pixman_fixed_ceil(f)
212
 
213
#define xFixedFraction(f)	pixman_fixed_fraction(f)
214
#define xFixedMod2(f)		pixman_fixed_mod2(f)
215
 
216
/* whether 't' is a well defined not obviously empty trapezoid */
217
#define xTrapezoidValid(t)  ((t)->left.p1.y != (t)->left.p2.y && \
218
			     (t)->right.p1.y != (t)->right.p2.y && \
219
			     (int) ((t)->bottom - (t)->top) > 0)
220
 
221
/*
222
 * Standard NTSC luminance conversions:
223
 *
224
 *  y = r * 0.299 + g * 0.587 + b * 0.114
225
 *
226
 * Approximate this for a bit more speed:
227
 *
228
 *  y = (r * 153 + g * 301 + b * 58) / 512
229
 *
230
 * This gives 17 bits of luminance; to get 15 bits, lop the low two
231
 */
232
 
233
#define CvtR8G8B8toY15(s)	(((((s) >> 16) & 0xff) * 153 + \
234
				  (((s) >>  8) & 0xff) * 301 + \
235
				  (((s)      ) & 0xff) * 58) >> 2)
236
 
237
typedef struct _Drawable {
238
    unsigned char type;         /* DRAWABLE_ */
239
    unsigned char class;        /* specific to type */
240
    unsigned char depth;
241
    unsigned char bitsPerPixel;
242
    unsigned int   id;           /* resource id */
243
    short x;                    /* window: screen absolute, pixmap: 0 */
244
    short y;                    /* window: screen absolute, pixmap: 0 */
245
    unsigned short width;
246
    unsigned short height;
247
} DrawableRec;
248
 
249
 
250
typedef struct _Pixmap {
251
    DrawableRec drawable;
252
    PrivateRec *devPrivates;
253
    int refcnt;
254
    int devKind;                /* This is the pitch of the pixmap, typically width*bpp/8. */
255
//    DevUnion devPrivate;        /* When !NULL, devPrivate.ptr points to the raw pixel data. */
256
#ifdef COMPOSITE
257
    short screen_x;
258
    short screen_y;
259
#endif
260
    struct intel_pixmap *private;
261
 
262
    unsigned usage_hint;        /* see CREATE_PIXMAP_USAGE_* */
263
 
264
    PixmapPtr master_pixmap;    /* pointer to master copy of pixmap for pixmap sharing */
265
} PixmapRec;
266
 
267
 
268
typedef struct _PictFormat {
269
    uint32_t id;
270
    uint32_t format;              /* except bpp */
271
    unsigned char type;
272
    unsigned char depth;
273
//    DirectFormatRec direct;
274
//   IndexFormatRec index;
275
} PictFormatRec;
276
 
277
typedef struct _Picture {
278
    DrawablePtr pDrawable;
279
    PictFormatPtr pFormat;
280
    PictFormatShort format;     /* PICT_FORMAT */
281
    int refcnt;
282
    uint32_t id;
283
    unsigned int repeat:1;
284
    unsigned int graphicsExposures:1;
285
    unsigned int subWindowMode:1;
286
    unsigned int polyEdge:1;
287
    unsigned int polyMode:1;
288
    unsigned int freeCompClip:1;
289
    unsigned int clientClipType:2;
290
    unsigned int componentAlpha:1;
291
    unsigned int repeatType:2;
292
    unsigned int filter:3;
293
//    unsigned int stateChanges:CPLastBit;
294
//    unsigned int unused:18 - CPLastBit;
295
 
296
//    PicturePtr alphaMap;
297
 
298
    PictTransform *transform;
299
 
300
//    SourcePictPtr pSourcePict;
301
//    xFixed *filter_params;
302
//    int filter_nparams;
303
} PictureRec;
304
 
305
#define RepeatNone              0
306
#define RepeatNormal            1
307
#define RepeatPad               2
308
#define RepeatReflect           3
309
 
310
#define PictFilterNearest	    0
311
#define PictFilterBilinear	    1
312
 
313
#define PictFilterFast		    2
314
#define PictFilterGood		    3
315
#define PictFilterBest		    4
316
 
317
#define PictFilterConvolution	5
318
 
319
 
320
#endif                          /* _PICTURE_H_ */