xref: /OK3568_Linux_fs/external/xserver/render/picturestr.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Copyright © 2000 SuSE, Inc.
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * Permission to use, copy, modify, distribute, and sell this software and its
5*4882a593Smuzhiyun  * documentation for any purpose is hereby granted without fee, provided that
6*4882a593Smuzhiyun  * the above copyright notice appear in all copies and that both that
7*4882a593Smuzhiyun  * copyright notice and this permission notice appear in supporting
8*4882a593Smuzhiyun  * documentation, and that the name of SuSE not be used in advertising or
9*4882a593Smuzhiyun  * publicity pertaining to distribution of the software without specific,
10*4882a593Smuzhiyun  * written prior permission.  SuSE makes no representations about the
11*4882a593Smuzhiyun  * suitability of this software for any purpose.  It is provided "as is"
12*4882a593Smuzhiyun  * without express or implied warranty.
13*4882a593Smuzhiyun  *
14*4882a593Smuzhiyun  * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
15*4882a593Smuzhiyun  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
16*4882a593Smuzhiyun  * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
17*4882a593Smuzhiyun  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
18*4882a593Smuzhiyun  * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
19*4882a593Smuzhiyun  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20*4882a593Smuzhiyun  *
21*4882a593Smuzhiyun  * Author:  Keith Packard, SuSE, Inc.
22*4882a593Smuzhiyun  */
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun #ifndef _PICTURESTR_H_
25*4882a593Smuzhiyun #define _PICTURESTR_H_
26*4882a593Smuzhiyun 
27*4882a593Smuzhiyun #include "scrnintstr.h"
28*4882a593Smuzhiyun #include "glyphstr.h"
29*4882a593Smuzhiyun #include "resource.h"
30*4882a593Smuzhiyun #include "privates.h"
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun typedef struct _DirectFormat {
33*4882a593Smuzhiyun     CARD16 red, redMask;
34*4882a593Smuzhiyun     CARD16 green, greenMask;
35*4882a593Smuzhiyun     CARD16 blue, blueMask;
36*4882a593Smuzhiyun     CARD16 alpha, alphaMask;
37*4882a593Smuzhiyun } DirectFormatRec;
38*4882a593Smuzhiyun 
39*4882a593Smuzhiyun typedef struct _IndexFormat {
40*4882a593Smuzhiyun     VisualID vid;
41*4882a593Smuzhiyun     ColormapPtr pColormap;
42*4882a593Smuzhiyun     int nvalues;
43*4882a593Smuzhiyun     xIndexValue *pValues;
44*4882a593Smuzhiyun     void *devPrivate;
45*4882a593Smuzhiyun } IndexFormatRec;
46*4882a593Smuzhiyun 
47*4882a593Smuzhiyun typedef struct _PictFormat {
48*4882a593Smuzhiyun     CARD32 id;
49*4882a593Smuzhiyun     CARD32 format;              /* except bpp */
50*4882a593Smuzhiyun     unsigned char type;
51*4882a593Smuzhiyun     unsigned char depth;
52*4882a593Smuzhiyun     DirectFormatRec direct;
53*4882a593Smuzhiyun     IndexFormatRec index;
54*4882a593Smuzhiyun } PictFormatRec;
55*4882a593Smuzhiyun 
56*4882a593Smuzhiyun typedef struct pixman_vector PictVector, *PictVectorPtr;
57*4882a593Smuzhiyun typedef struct pixman_transform PictTransform, *PictTransformPtr;
58*4882a593Smuzhiyun 
59*4882a593Smuzhiyun #define pict_f_vector pixman_f_vector
60*4882a593Smuzhiyun #define pict_f_transform pixman_f_transform
61*4882a593Smuzhiyun 
62*4882a593Smuzhiyun #define PICT_GRADIENT_STOPTABLE_SIZE 1024
63*4882a593Smuzhiyun #define SourcePictTypeSolidFill 0
64*4882a593Smuzhiyun #define SourcePictTypeLinear 1
65*4882a593Smuzhiyun #define SourcePictTypeRadial 2
66*4882a593Smuzhiyun #define SourcePictTypeConical 3
67*4882a593Smuzhiyun 
68*4882a593Smuzhiyun typedef struct _PictSolidFill {
69*4882a593Smuzhiyun     unsigned int type;
70*4882a593Smuzhiyun     CARD32 color;
71*4882a593Smuzhiyun     xRenderColor fullcolor;
72*4882a593Smuzhiyun } PictSolidFill, *PictSolidFillPtr;
73*4882a593Smuzhiyun 
74*4882a593Smuzhiyun typedef struct _PictGradientStop {
75*4882a593Smuzhiyun     xFixed x;
76*4882a593Smuzhiyun     xRenderColor color;
77*4882a593Smuzhiyun } PictGradientStop, *PictGradientStopPtr;
78*4882a593Smuzhiyun 
79*4882a593Smuzhiyun typedef struct _PictGradient {
80*4882a593Smuzhiyun     unsigned int type;
81*4882a593Smuzhiyun     int nstops;
82*4882a593Smuzhiyun     PictGradientStopPtr stops;
83*4882a593Smuzhiyun } PictGradient, *PictGradientPtr;
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun typedef struct _PictLinearGradient {
86*4882a593Smuzhiyun     unsigned int type;
87*4882a593Smuzhiyun     int nstops;
88*4882a593Smuzhiyun     PictGradientStopPtr stops;
89*4882a593Smuzhiyun     xPointFixed p1;
90*4882a593Smuzhiyun     xPointFixed p2;
91*4882a593Smuzhiyun } PictLinearGradient, *PictLinearGradientPtr;
92*4882a593Smuzhiyun 
93*4882a593Smuzhiyun typedef struct _PictCircle {
94*4882a593Smuzhiyun     xFixed x;
95*4882a593Smuzhiyun     xFixed y;
96*4882a593Smuzhiyun     xFixed radius;
97*4882a593Smuzhiyun } PictCircle, *PictCirclePtr;
98*4882a593Smuzhiyun 
99*4882a593Smuzhiyun typedef struct _PictRadialGradient {
100*4882a593Smuzhiyun     unsigned int type;
101*4882a593Smuzhiyun     int nstops;
102*4882a593Smuzhiyun     PictGradientStopPtr stops;
103*4882a593Smuzhiyun     PictCircle c1;
104*4882a593Smuzhiyun     PictCircle c2;
105*4882a593Smuzhiyun } PictRadialGradient, *PictRadialGradientPtr;
106*4882a593Smuzhiyun 
107*4882a593Smuzhiyun typedef struct _PictConicalGradient {
108*4882a593Smuzhiyun     unsigned int type;
109*4882a593Smuzhiyun     int nstops;
110*4882a593Smuzhiyun     PictGradientStopPtr stops;
111*4882a593Smuzhiyun     xPointFixed center;
112*4882a593Smuzhiyun     xFixed angle;
113*4882a593Smuzhiyun } PictConicalGradient, *PictConicalGradientPtr;
114*4882a593Smuzhiyun 
115*4882a593Smuzhiyun typedef union _SourcePict {
116*4882a593Smuzhiyun     unsigned int type;
117*4882a593Smuzhiyun     PictSolidFill solidFill;
118*4882a593Smuzhiyun     PictGradient gradient;
119*4882a593Smuzhiyun     PictLinearGradient linear;
120*4882a593Smuzhiyun     PictRadialGradient radial;
121*4882a593Smuzhiyun     PictConicalGradient conical;
122*4882a593Smuzhiyun } SourcePict, *SourcePictPtr;
123*4882a593Smuzhiyun 
124*4882a593Smuzhiyun typedef struct _Picture {
125*4882a593Smuzhiyun     DrawablePtr pDrawable;
126*4882a593Smuzhiyun     PictFormatPtr pFormat;
127*4882a593Smuzhiyun     PictFormatShort format;     /* PICT_FORMAT */
128*4882a593Smuzhiyun     int refcnt;
129*4882a593Smuzhiyun     CARD32 id;
130*4882a593Smuzhiyun     unsigned int repeat:1;
131*4882a593Smuzhiyun     unsigned int graphicsExposures:1;
132*4882a593Smuzhiyun     unsigned int subWindowMode:1;
133*4882a593Smuzhiyun     unsigned int polyEdge:1;
134*4882a593Smuzhiyun     unsigned int polyMode:1;
135*4882a593Smuzhiyun     unsigned int freeCompClip:1;
136*4882a593Smuzhiyun     unsigned int componentAlpha:1;
137*4882a593Smuzhiyun     unsigned int repeatType:2;
138*4882a593Smuzhiyun     unsigned int filter:3;
139*4882a593Smuzhiyun     unsigned int stateChanges:CPLastBit;
140*4882a593Smuzhiyun     unsigned int unused:18 - CPLastBit;
141*4882a593Smuzhiyun 
142*4882a593Smuzhiyun     PicturePtr pNext;           /* chain on same drawable */
143*4882a593Smuzhiyun 
144*4882a593Smuzhiyun     PicturePtr alphaMap;
145*4882a593Smuzhiyun     DDXPointRec alphaOrigin;
146*4882a593Smuzhiyun 
147*4882a593Smuzhiyun     DDXPointRec clipOrigin;
148*4882a593Smuzhiyun     RegionPtr clientClip;
149*4882a593Smuzhiyun 
150*4882a593Smuzhiyun     unsigned long serialNumber;
151*4882a593Smuzhiyun 
152*4882a593Smuzhiyun     RegionPtr pCompositeClip;
153*4882a593Smuzhiyun 
154*4882a593Smuzhiyun     PrivateRec *devPrivates;
155*4882a593Smuzhiyun 
156*4882a593Smuzhiyun     PictTransform *transform;
157*4882a593Smuzhiyun 
158*4882a593Smuzhiyun     SourcePictPtr pSourcePict;
159*4882a593Smuzhiyun     xFixed *filter_params;
160*4882a593Smuzhiyun     int filter_nparams;
161*4882a593Smuzhiyun } PictureRec;
162*4882a593Smuzhiyun 
163*4882a593Smuzhiyun typedef Bool (*PictFilterValidateParamsProcPtr) (ScreenPtr pScreen, int id,
164*4882a593Smuzhiyun                                                  xFixed * params, int nparams,
165*4882a593Smuzhiyun                                                  int *width, int *height);
166*4882a593Smuzhiyun typedef struct {
167*4882a593Smuzhiyun     char *name;
168*4882a593Smuzhiyun     int id;
169*4882a593Smuzhiyun     PictFilterValidateParamsProcPtr ValidateParams;
170*4882a593Smuzhiyun     int width, height;
171*4882a593Smuzhiyun } PictFilterRec, *PictFilterPtr;
172*4882a593Smuzhiyun 
173*4882a593Smuzhiyun #define PictFilterNearest	0
174*4882a593Smuzhiyun #define PictFilterBilinear	1
175*4882a593Smuzhiyun 
176*4882a593Smuzhiyun #define PictFilterFast		2
177*4882a593Smuzhiyun #define PictFilterGood		3
178*4882a593Smuzhiyun #define PictFilterBest		4
179*4882a593Smuzhiyun 
180*4882a593Smuzhiyun #define PictFilterConvolution	5
181*4882a593Smuzhiyun /* if you add an 8th filter, expand the filter bitfield above */
182*4882a593Smuzhiyun 
183*4882a593Smuzhiyun typedef struct {
184*4882a593Smuzhiyun     char *alias;
185*4882a593Smuzhiyun     int alias_id;
186*4882a593Smuzhiyun     int filter_id;
187*4882a593Smuzhiyun } PictFilterAliasRec, *PictFilterAliasPtr;
188*4882a593Smuzhiyun 
189*4882a593Smuzhiyun typedef int (*CreatePictureProcPtr) (PicturePtr pPicture);
190*4882a593Smuzhiyun typedef void (*DestroyPictureProcPtr) (PicturePtr pPicture);
191*4882a593Smuzhiyun typedef int (*ChangePictureClipProcPtr) (PicturePtr pPicture,
192*4882a593Smuzhiyun                                          int clipType, void *value, int n);
193*4882a593Smuzhiyun typedef void (*DestroyPictureClipProcPtr) (PicturePtr pPicture);
194*4882a593Smuzhiyun 
195*4882a593Smuzhiyun typedef int (*ChangePictureTransformProcPtr) (PicturePtr pPicture,
196*4882a593Smuzhiyun                                               PictTransform * transform);
197*4882a593Smuzhiyun 
198*4882a593Smuzhiyun typedef int (*ChangePictureFilterProcPtr) (PicturePtr pPicture,
199*4882a593Smuzhiyun                                            int filter,
200*4882a593Smuzhiyun                                            xFixed * params, int nparams);
201*4882a593Smuzhiyun 
202*4882a593Smuzhiyun typedef void (*DestroyPictureFilterProcPtr) (PicturePtr pPicture);
203*4882a593Smuzhiyun 
204*4882a593Smuzhiyun typedef void (*ChangePictureProcPtr) (PicturePtr pPicture, Mask mask);
205*4882a593Smuzhiyun typedef void (*ValidatePictureProcPtr) (PicturePtr pPicture, Mask mask);
206*4882a593Smuzhiyun typedef void (*CompositeProcPtr) (CARD8 op,
207*4882a593Smuzhiyun                                   PicturePtr pSrc,
208*4882a593Smuzhiyun                                   PicturePtr pMask,
209*4882a593Smuzhiyun                                   PicturePtr pDst,
210*4882a593Smuzhiyun                                   INT16 xSrc,
211*4882a593Smuzhiyun                                   INT16 ySrc,
212*4882a593Smuzhiyun                                   INT16 xMask,
213*4882a593Smuzhiyun                                   INT16 yMask,
214*4882a593Smuzhiyun                                   INT16 xDst,
215*4882a593Smuzhiyun                                   INT16 yDst, CARD16 width, CARD16 height);
216*4882a593Smuzhiyun 
217*4882a593Smuzhiyun typedef void (*GlyphsProcPtr) (CARD8 op,
218*4882a593Smuzhiyun                                PicturePtr pSrc,
219*4882a593Smuzhiyun                                PicturePtr pDst,
220*4882a593Smuzhiyun                                PictFormatPtr maskFormat,
221*4882a593Smuzhiyun                                INT16 xSrc,
222*4882a593Smuzhiyun                                INT16 ySrc,
223*4882a593Smuzhiyun                                int nlists,
224*4882a593Smuzhiyun                                GlyphListPtr lists, GlyphPtr * glyphs);
225*4882a593Smuzhiyun 
226*4882a593Smuzhiyun typedef void (*CompositeRectsProcPtr) (CARD8 op,
227*4882a593Smuzhiyun                                        PicturePtr pDst,
228*4882a593Smuzhiyun                                        xRenderColor * color,
229*4882a593Smuzhiyun                                        int nRect, xRectangle *rects);
230*4882a593Smuzhiyun 
231*4882a593Smuzhiyun typedef void (*RasterizeTrapezoidProcPtr) (PicturePtr pMask,
232*4882a593Smuzhiyun                                            xTrapezoid * trap,
233*4882a593Smuzhiyun                                            int x_off, int y_off);
234*4882a593Smuzhiyun 
235*4882a593Smuzhiyun typedef void (*TrapezoidsProcPtr) (CARD8 op,
236*4882a593Smuzhiyun                                    PicturePtr pSrc,
237*4882a593Smuzhiyun                                    PicturePtr pDst,
238*4882a593Smuzhiyun                                    PictFormatPtr maskFormat,
239*4882a593Smuzhiyun                                    INT16 xSrc,
240*4882a593Smuzhiyun                                    INT16 ySrc, int ntrap, xTrapezoid * traps);
241*4882a593Smuzhiyun 
242*4882a593Smuzhiyun typedef void (*TrianglesProcPtr) (CARD8 op,
243*4882a593Smuzhiyun                                   PicturePtr pSrc,
244*4882a593Smuzhiyun                                   PicturePtr pDst,
245*4882a593Smuzhiyun                                   PictFormatPtr maskFormat,
246*4882a593Smuzhiyun                                   INT16 xSrc,
247*4882a593Smuzhiyun                                   INT16 ySrc, int ntri, xTriangle * tris);
248*4882a593Smuzhiyun 
249*4882a593Smuzhiyun typedef void (*TriStripProcPtr) (CARD8 op,
250*4882a593Smuzhiyun                                  PicturePtr pSrc,
251*4882a593Smuzhiyun                                  PicturePtr pDst,
252*4882a593Smuzhiyun                                  PictFormatPtr maskFormat,
253*4882a593Smuzhiyun                                  INT16 xSrc,
254*4882a593Smuzhiyun                                  INT16 ySrc, int npoint, xPointFixed * points);
255*4882a593Smuzhiyun 
256*4882a593Smuzhiyun typedef void (*TriFanProcPtr) (CARD8 op,
257*4882a593Smuzhiyun                                PicturePtr pSrc,
258*4882a593Smuzhiyun                                PicturePtr pDst,
259*4882a593Smuzhiyun                                PictFormatPtr maskFormat,
260*4882a593Smuzhiyun                                INT16 xSrc,
261*4882a593Smuzhiyun                                INT16 ySrc, int npoint, xPointFixed * points);
262*4882a593Smuzhiyun 
263*4882a593Smuzhiyun typedef Bool (*InitIndexedProcPtr) (ScreenPtr pScreen, PictFormatPtr pFormat);
264*4882a593Smuzhiyun 
265*4882a593Smuzhiyun typedef void (*CloseIndexedProcPtr) (ScreenPtr pScreen, PictFormatPtr pFormat);
266*4882a593Smuzhiyun 
267*4882a593Smuzhiyun typedef void (*UpdateIndexedProcPtr) (ScreenPtr pScreen,
268*4882a593Smuzhiyun                                       PictFormatPtr pFormat,
269*4882a593Smuzhiyun                                       int ndef, xColorItem * pdef);
270*4882a593Smuzhiyun 
271*4882a593Smuzhiyun typedef void (*AddTrapsProcPtr) (PicturePtr pPicture,
272*4882a593Smuzhiyun                                  INT16 xOff,
273*4882a593Smuzhiyun                                  INT16 yOff, int ntrap, xTrap * traps);
274*4882a593Smuzhiyun 
275*4882a593Smuzhiyun typedef void (*AddTrianglesProcPtr) (PicturePtr pPicture,
276*4882a593Smuzhiyun                                      INT16 xOff,
277*4882a593Smuzhiyun                                      INT16 yOff, int ntri, xTriangle * tris);
278*4882a593Smuzhiyun 
279*4882a593Smuzhiyun typedef Bool (*RealizeGlyphProcPtr) (ScreenPtr pScreen, GlyphPtr glyph);
280*4882a593Smuzhiyun 
281*4882a593Smuzhiyun typedef void (*UnrealizeGlyphProcPtr) (ScreenPtr pScreen, GlyphPtr glyph);
282*4882a593Smuzhiyun 
283*4882a593Smuzhiyun typedef struct _PictureScreen {
284*4882a593Smuzhiyun     PictFormatPtr formats;
285*4882a593Smuzhiyun     PictFormatPtr fallback;
286*4882a593Smuzhiyun     int nformats;
287*4882a593Smuzhiyun 
288*4882a593Smuzhiyun     CreatePictureProcPtr CreatePicture;
289*4882a593Smuzhiyun     DestroyPictureProcPtr DestroyPicture;
290*4882a593Smuzhiyun     ChangePictureClipProcPtr ChangePictureClip;
291*4882a593Smuzhiyun     DestroyPictureClipProcPtr DestroyPictureClip;
292*4882a593Smuzhiyun 
293*4882a593Smuzhiyun     ChangePictureProcPtr ChangePicture;
294*4882a593Smuzhiyun     ValidatePictureProcPtr ValidatePicture;
295*4882a593Smuzhiyun 
296*4882a593Smuzhiyun     CompositeProcPtr Composite;
297*4882a593Smuzhiyun     GlyphsProcPtr Glyphs;       /* unused */
298*4882a593Smuzhiyun     CompositeRectsProcPtr CompositeRects;
299*4882a593Smuzhiyun 
300*4882a593Smuzhiyun     DestroyWindowProcPtr DestroyWindow;
301*4882a593Smuzhiyun     CloseScreenProcPtr CloseScreen;
302*4882a593Smuzhiyun 
303*4882a593Smuzhiyun     StoreColorsProcPtr StoreColors;
304*4882a593Smuzhiyun 
305*4882a593Smuzhiyun     InitIndexedProcPtr InitIndexed;
306*4882a593Smuzhiyun     CloseIndexedProcPtr CloseIndexed;
307*4882a593Smuzhiyun     UpdateIndexedProcPtr UpdateIndexed;
308*4882a593Smuzhiyun 
309*4882a593Smuzhiyun     int subpixel;
310*4882a593Smuzhiyun 
311*4882a593Smuzhiyun     PictFilterPtr filters;
312*4882a593Smuzhiyun     int nfilters;
313*4882a593Smuzhiyun     PictFilterAliasPtr filterAliases;
314*4882a593Smuzhiyun     int nfilterAliases;
315*4882a593Smuzhiyun 
316*4882a593Smuzhiyun     /**
317*4882a593Smuzhiyun      * Called immediately after a picture's transform is changed through the
318*4882a593Smuzhiyun      * SetPictureTransform request.  Not called for source-only pictures.
319*4882a593Smuzhiyun      */
320*4882a593Smuzhiyun     ChangePictureTransformProcPtr ChangePictureTransform;
321*4882a593Smuzhiyun 
322*4882a593Smuzhiyun     /**
323*4882a593Smuzhiyun      * Called immediately after a picture's transform is changed through the
324*4882a593Smuzhiyun      * SetPictureFilter request.  Not called for source-only pictures.
325*4882a593Smuzhiyun      */
326*4882a593Smuzhiyun     ChangePictureFilterProcPtr ChangePictureFilter;
327*4882a593Smuzhiyun 
328*4882a593Smuzhiyun     DestroyPictureFilterProcPtr DestroyPictureFilter;
329*4882a593Smuzhiyun 
330*4882a593Smuzhiyun     TrapezoidsProcPtr Trapezoids;
331*4882a593Smuzhiyun     TrianglesProcPtr Triangles;
332*4882a593Smuzhiyun 
333*4882a593Smuzhiyun     RasterizeTrapezoidProcPtr RasterizeTrapezoid;
334*4882a593Smuzhiyun 
335*4882a593Smuzhiyun     AddTrianglesProcPtr AddTriangles;
336*4882a593Smuzhiyun 
337*4882a593Smuzhiyun     AddTrapsProcPtr AddTraps;
338*4882a593Smuzhiyun 
339*4882a593Smuzhiyun     RealizeGlyphProcPtr RealizeGlyph;
340*4882a593Smuzhiyun     UnrealizeGlyphProcPtr UnrealizeGlyph;
341*4882a593Smuzhiyun 
342*4882a593Smuzhiyun #define PICTURE_SCREEN_VERSION 2
343*4882a593Smuzhiyun     TriStripProcPtr TriStrip;
344*4882a593Smuzhiyun     TriFanProcPtr TriFan;
345*4882a593Smuzhiyun } PictureScreenRec, *PictureScreenPtr;
346*4882a593Smuzhiyun 
347*4882a593Smuzhiyun extern _X_EXPORT DevPrivateKeyRec PictureScreenPrivateKeyRec;
348*4882a593Smuzhiyun #define PictureScreenPrivateKey (&PictureScreenPrivateKeyRec)
349*4882a593Smuzhiyun 
350*4882a593Smuzhiyun extern _X_EXPORT DevPrivateKeyRec PictureWindowPrivateKeyRec;
351*4882a593Smuzhiyun #define	PictureWindowPrivateKey (&PictureWindowPrivateKeyRec)
352*4882a593Smuzhiyun 
353*4882a593Smuzhiyun extern RESTYPE PictureType;
354*4882a593Smuzhiyun extern RESTYPE PictFormatType;
355*4882a593Smuzhiyun extern RESTYPE GlyphSetType;
356*4882a593Smuzhiyun 
357*4882a593Smuzhiyun #define GetPictureScreen(s) ((PictureScreenPtr)dixLookupPrivate(&(s)->devPrivates, PictureScreenPrivateKey))
358*4882a593Smuzhiyun #define GetPictureScreenIfSet(s) (dixPrivateKeyRegistered(PictureScreenPrivateKey) ? GetPictureScreen(s) : NULL)
359*4882a593Smuzhiyun #define SetPictureScreen(s,p) dixSetPrivate(&(s)->devPrivates, PictureScreenPrivateKey, p)
360*4882a593Smuzhiyun #define GetPictureWindow(w) ((PicturePtr)dixLookupPrivate(&(w)->devPrivates, PictureWindowPrivateKey))
361*4882a593Smuzhiyun #define SetPictureWindow(w,p) dixSetPrivate(&(w)->devPrivates, PictureWindowPrivateKey, p)
362*4882a593Smuzhiyun 
363*4882a593Smuzhiyun #define VERIFY_PICTURE(pPicture, pid, client, mode) {\
364*4882a593Smuzhiyun     int tmprc = dixLookupResourceByType((void *)&(pPicture), pid,\
365*4882a593Smuzhiyun 	                                PictureType, client, mode);\
366*4882a593Smuzhiyun     if (tmprc != Success)\
367*4882a593Smuzhiyun 	return tmprc;\
368*4882a593Smuzhiyun }
369*4882a593Smuzhiyun 
370*4882a593Smuzhiyun #define VERIFY_ALPHA(pPicture, pid, client, mode) {\
371*4882a593Smuzhiyun     if (pid == None) \
372*4882a593Smuzhiyun 	pPicture = 0; \
373*4882a593Smuzhiyun     else { \
374*4882a593Smuzhiyun 	VERIFY_PICTURE(pPicture, pid, client, mode); \
375*4882a593Smuzhiyun     } \
376*4882a593Smuzhiyun } \
377*4882a593Smuzhiyun 
378*4882a593Smuzhiyun extern _X_EXPORT PictFormatPtr
379*4882a593Smuzhiyun  PictureWindowFormat(WindowPtr pWindow);
380*4882a593Smuzhiyun 
381*4882a593Smuzhiyun extern _X_EXPORT Bool
382*4882a593Smuzhiyun  PictureSetSubpixelOrder(ScreenPtr pScreen, int subpixel);
383*4882a593Smuzhiyun 
384*4882a593Smuzhiyun extern _X_EXPORT int
385*4882a593Smuzhiyun  PictureGetSubpixelOrder(ScreenPtr pScreen);
386*4882a593Smuzhiyun 
387*4882a593Smuzhiyun extern _X_EXPORT PictFormatPtr
388*4882a593Smuzhiyun PictureMatchVisual(ScreenPtr pScreen, int depth, VisualPtr pVisual);
389*4882a593Smuzhiyun 
390*4882a593Smuzhiyun extern _X_EXPORT PictFormatPtr
391*4882a593Smuzhiyun PictureMatchFormat(ScreenPtr pScreen, int depth, CARD32 format);
392*4882a593Smuzhiyun 
393*4882a593Smuzhiyun extern _X_EXPORT Bool
394*4882a593Smuzhiyun  PictureInit(ScreenPtr pScreen, PictFormatPtr formats, int nformats);
395*4882a593Smuzhiyun 
396*4882a593Smuzhiyun extern _X_EXPORT int
397*4882a593Smuzhiyun  PictureGetFilterId(const char *filter, int len, Bool makeit);
398*4882a593Smuzhiyun 
399*4882a593Smuzhiyun extern _X_EXPORT char *PictureGetFilterName(int id);
400*4882a593Smuzhiyun 
401*4882a593Smuzhiyun extern _X_EXPORT int
402*4882a593Smuzhiyun PictureAddFilter(ScreenPtr pScreen,
403*4882a593Smuzhiyun                  const char *filter,
404*4882a593Smuzhiyun                  PictFilterValidateParamsProcPtr ValidateParams,
405*4882a593Smuzhiyun                  int width, int height);
406*4882a593Smuzhiyun 
407*4882a593Smuzhiyun extern _X_EXPORT Bool
408*4882a593Smuzhiyun PictureSetFilterAlias(ScreenPtr pScreen, const char *filter, const char *alias);
409*4882a593Smuzhiyun 
410*4882a593Smuzhiyun extern _X_EXPORT Bool
411*4882a593Smuzhiyun  PictureSetDefaultFilters(ScreenPtr pScreen);
412*4882a593Smuzhiyun 
413*4882a593Smuzhiyun extern _X_EXPORT void
414*4882a593Smuzhiyun  PictureResetFilters(ScreenPtr pScreen);
415*4882a593Smuzhiyun 
416*4882a593Smuzhiyun extern _X_EXPORT PictFilterPtr
417*4882a593Smuzhiyun PictureFindFilter(ScreenPtr pScreen, char *name, int len);
418*4882a593Smuzhiyun 
419*4882a593Smuzhiyun extern _X_EXPORT int
420*4882a593Smuzhiyun SetPicturePictFilter(PicturePtr pPicture, PictFilterPtr pFilter,
421*4882a593Smuzhiyun                      xFixed * params, int nparams);
422*4882a593Smuzhiyun 
423*4882a593Smuzhiyun extern _X_EXPORT int
424*4882a593Smuzhiyun SetPictureFilter(PicturePtr pPicture, char *name, int len,
425*4882a593Smuzhiyun                  xFixed * params, int nparams);
426*4882a593Smuzhiyun 
427*4882a593Smuzhiyun extern _X_EXPORT Bool
428*4882a593Smuzhiyun  PictureFinishInit(void);
429*4882a593Smuzhiyun 
430*4882a593Smuzhiyun extern _X_EXPORT PicturePtr
431*4882a593Smuzhiyun CreatePicture(Picture pid,
432*4882a593Smuzhiyun               DrawablePtr pDrawable,
433*4882a593Smuzhiyun               PictFormatPtr pFormat,
434*4882a593Smuzhiyun               Mask mask, XID *list, ClientPtr client, int *error);
435*4882a593Smuzhiyun 
436*4882a593Smuzhiyun extern _X_EXPORT int
437*4882a593Smuzhiyun ChangePicture(PicturePtr pPicture,
438*4882a593Smuzhiyun               Mask vmask, XID *vlist, DevUnion *ulist, ClientPtr client);
439*4882a593Smuzhiyun 
440*4882a593Smuzhiyun extern _X_EXPORT int
441*4882a593Smuzhiyun 
442*4882a593Smuzhiyun SetPictureClipRects(PicturePtr pPicture,
443*4882a593Smuzhiyun                     int xOrigin, int yOrigin, int nRect, xRectangle *rects);
444*4882a593Smuzhiyun 
445*4882a593Smuzhiyun extern _X_EXPORT int
446*4882a593Smuzhiyun SetPictureClipRegion(PicturePtr pPicture,
447*4882a593Smuzhiyun                      int xOrigin, int yOrigin, RegionPtr pRegion);
448*4882a593Smuzhiyun 
449*4882a593Smuzhiyun extern _X_EXPORT int
450*4882a593Smuzhiyun  SetPictureTransform(PicturePtr pPicture, PictTransform * transform);
451*4882a593Smuzhiyun 
452*4882a593Smuzhiyun extern _X_EXPORT void
453*4882a593Smuzhiyun  ValidatePicture(PicturePtr pPicture);
454*4882a593Smuzhiyun 
455*4882a593Smuzhiyun extern _X_EXPORT int
456*4882a593Smuzhiyun  FreePicture(void *pPicture, XID pid);
457*4882a593Smuzhiyun 
458*4882a593Smuzhiyun extern _X_EXPORT void
459*4882a593Smuzhiyun CompositePicture(CARD8 op,
460*4882a593Smuzhiyun                  PicturePtr pSrc,
461*4882a593Smuzhiyun                  PicturePtr pMask,
462*4882a593Smuzhiyun                  PicturePtr pDst,
463*4882a593Smuzhiyun                  INT16 xSrc,
464*4882a593Smuzhiyun                  INT16 ySrc,
465*4882a593Smuzhiyun                  INT16 xMask,
466*4882a593Smuzhiyun                  INT16 yMask,
467*4882a593Smuzhiyun                  INT16 xDst, INT16 yDst, CARD16 width, CARD16 height);
468*4882a593Smuzhiyun 
469*4882a593Smuzhiyun extern _X_EXPORT void
470*4882a593Smuzhiyun CompositeGlyphs(CARD8 op,
471*4882a593Smuzhiyun                 PicturePtr pSrc,
472*4882a593Smuzhiyun                 PicturePtr pDst,
473*4882a593Smuzhiyun                 PictFormatPtr maskFormat,
474*4882a593Smuzhiyun                 INT16 xSrc,
475*4882a593Smuzhiyun                 INT16 ySrc, int nlist, GlyphListPtr lists, GlyphPtr * glyphs);
476*4882a593Smuzhiyun 
477*4882a593Smuzhiyun extern _X_EXPORT void
478*4882a593Smuzhiyun CompositeRects(CARD8 op,
479*4882a593Smuzhiyun                PicturePtr pDst,
480*4882a593Smuzhiyun                xRenderColor * color, int nRect, xRectangle *rects);
481*4882a593Smuzhiyun 
482*4882a593Smuzhiyun extern _X_EXPORT void
483*4882a593Smuzhiyun CompositeTrapezoids(CARD8 op,
484*4882a593Smuzhiyun                     PicturePtr pSrc,
485*4882a593Smuzhiyun                     PicturePtr pDst,
486*4882a593Smuzhiyun                     PictFormatPtr maskFormat,
487*4882a593Smuzhiyun                     INT16 xSrc, INT16 ySrc, int ntrap, xTrapezoid * traps);
488*4882a593Smuzhiyun 
489*4882a593Smuzhiyun extern _X_EXPORT void
490*4882a593Smuzhiyun CompositeTriangles(CARD8 op,
491*4882a593Smuzhiyun                    PicturePtr pSrc,
492*4882a593Smuzhiyun                    PicturePtr pDst,
493*4882a593Smuzhiyun                    PictFormatPtr maskFormat,
494*4882a593Smuzhiyun                    INT16 xSrc,
495*4882a593Smuzhiyun                    INT16 ySrc, int ntriangles, xTriangle * triangles);
496*4882a593Smuzhiyun 
497*4882a593Smuzhiyun extern _X_EXPORT void
498*4882a593Smuzhiyun CompositeTriStrip(CARD8 op,
499*4882a593Smuzhiyun                   PicturePtr pSrc,
500*4882a593Smuzhiyun                   PicturePtr pDst,
501*4882a593Smuzhiyun                   PictFormatPtr maskFormat,
502*4882a593Smuzhiyun                   INT16 xSrc, INT16 ySrc, int npoints, xPointFixed * points);
503*4882a593Smuzhiyun 
504*4882a593Smuzhiyun extern _X_EXPORT void
505*4882a593Smuzhiyun CompositeTriFan(CARD8 op,
506*4882a593Smuzhiyun                 PicturePtr pSrc,
507*4882a593Smuzhiyun                 PicturePtr pDst,
508*4882a593Smuzhiyun                 PictFormatPtr maskFormat,
509*4882a593Smuzhiyun                 INT16 xSrc, INT16 ySrc, int npoints, xPointFixed * points);
510*4882a593Smuzhiyun 
511*4882a593Smuzhiyun Bool
512*4882a593Smuzhiyun  AnimCurInit(ScreenPtr pScreen);
513*4882a593Smuzhiyun 
514*4882a593Smuzhiyun int
515*4882a593Smuzhiyun AnimCursorCreate(CursorPtr *cursors, CARD32 *deltas, int ncursor,
516*4882a593Smuzhiyun                  CursorPtr *ppCursor, ClientPtr client, XID cid);
517*4882a593Smuzhiyun 
518*4882a593Smuzhiyun extern _X_EXPORT void
519*4882a593Smuzhiyun AddTraps(PicturePtr pPicture,
520*4882a593Smuzhiyun          INT16 xOff, INT16 yOff, int ntraps, xTrap * traps);
521*4882a593Smuzhiyun 
522*4882a593Smuzhiyun extern _X_EXPORT PicturePtr
523*4882a593Smuzhiyun CreateSolidPicture(Picture pid, xRenderColor * color, int *error);
524*4882a593Smuzhiyun 
525*4882a593Smuzhiyun extern _X_EXPORT PicturePtr
526*4882a593Smuzhiyun CreateLinearGradientPicture(Picture pid,
527*4882a593Smuzhiyun                             xPointFixed * p1,
528*4882a593Smuzhiyun                             xPointFixed * p2,
529*4882a593Smuzhiyun                             int nStops,
530*4882a593Smuzhiyun                             xFixed * stops, xRenderColor * colors, int *error);
531*4882a593Smuzhiyun 
532*4882a593Smuzhiyun extern _X_EXPORT PicturePtr
533*4882a593Smuzhiyun CreateRadialGradientPicture(Picture pid,
534*4882a593Smuzhiyun                             xPointFixed * inner,
535*4882a593Smuzhiyun                             xPointFixed * outer,
536*4882a593Smuzhiyun                             xFixed innerRadius,
537*4882a593Smuzhiyun                             xFixed outerRadius,
538*4882a593Smuzhiyun                             int nStops,
539*4882a593Smuzhiyun                             xFixed * stops, xRenderColor * colors, int *error);
540*4882a593Smuzhiyun 
541*4882a593Smuzhiyun extern _X_EXPORT PicturePtr
542*4882a593Smuzhiyun CreateConicalGradientPicture(Picture pid,
543*4882a593Smuzhiyun                              xPointFixed * center,
544*4882a593Smuzhiyun                              xFixed angle,
545*4882a593Smuzhiyun                              int nStops,
546*4882a593Smuzhiyun                              xFixed * stops, xRenderColor * colors, int *error);
547*4882a593Smuzhiyun 
548*4882a593Smuzhiyun #ifdef PANORAMIX
549*4882a593Smuzhiyun extern void PanoramiXRenderInit(void);
550*4882a593Smuzhiyun extern void PanoramiXRenderReset(void);
551*4882a593Smuzhiyun #endif
552*4882a593Smuzhiyun 
553*4882a593Smuzhiyun /*
554*4882a593Smuzhiyun  * matrix.c
555*4882a593Smuzhiyun  */
556*4882a593Smuzhiyun 
557*4882a593Smuzhiyun extern _X_EXPORT void
558*4882a593Smuzhiyun PictTransform_from_xRenderTransform(PictTransformPtr pict,
559*4882a593Smuzhiyun                                     xRenderTransform * render);
560*4882a593Smuzhiyun 
561*4882a593Smuzhiyun extern _X_EXPORT void
562*4882a593Smuzhiyun xRenderTransform_from_PictTransform(xRenderTransform * render,
563*4882a593Smuzhiyun                                     PictTransformPtr pict);
564*4882a593Smuzhiyun 
565*4882a593Smuzhiyun extern _X_EXPORT Bool
566*4882a593Smuzhiyun  PictureTransformPoint(PictTransformPtr transform, PictVectorPtr vector);
567*4882a593Smuzhiyun 
568*4882a593Smuzhiyun extern _X_EXPORT Bool
569*4882a593Smuzhiyun  PictureTransformPoint3d(PictTransformPtr transform, PictVectorPtr vector);
570*4882a593Smuzhiyun 
571*4882a593Smuzhiyun #endif                          /* _PICTURESTR_H_ */
572