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