2 * Copyright © 2000 SuSE, Inc.
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.
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.
21 * Author: Keith Packard, SuSE, Inc.
24 #ifndef _PICTURESTR_H_
25 #define _PICTURESTR_H_
27 #include "scrnintstr.h"
32 typedef struct _DirectFormat
{
34 CARD16 green
, greenMask
;
35 CARD16 blue
, blueMask
;
36 CARD16 alpha
, alphaMask
;
39 typedef struct _IndexFormat
{
41 ColormapPtr pColormap
;
47 typedef struct _PictFormat
{
49 CARD32 format
; /* except bpp */
52 DirectFormatRec direct
;
56 typedef struct pixman_vector PictVector
, *PictVectorPtr
;
57 typedef struct pixman_transform PictTransform
, *PictTransformPtr
;
59 #define pict_f_vector pixman_f_vector
60 #define pict_f_transform pixman_f_transform
62 #define PICT_GRADIENT_STOPTABLE_SIZE 1024
63 #define SourcePictTypeSolidFill 0
64 #define SourcePictTypeLinear 1
65 #define SourcePictTypeRadial 2
66 #define SourcePictTypeConical 3
68 typedef struct _PictSolidFill
{
71 } PictSolidFill
, *PictSolidFillPtr
;
73 typedef struct _PictGradientStop
{
76 } PictGradientStop
, *PictGradientStopPtr
;
78 typedef struct _PictGradient
{
81 PictGradientStopPtr stops
;
82 } PictGradient
, *PictGradientPtr
;
84 typedef struct _PictLinearGradient
{
87 PictGradientStopPtr stops
;
90 } PictLinearGradient
, *PictLinearGradientPtr
;
92 typedef struct _PictCircle
{
96 } PictCircle
, *PictCirclePtr
;
98 typedef struct _PictRadialGradient
{
101 PictGradientStopPtr stops
;
104 } PictRadialGradient
, *PictRadialGradientPtr
;
106 typedef struct _PictConicalGradient
{
109 PictGradientStopPtr stops
;
112 } PictConicalGradient
, *PictConicalGradientPtr
;
114 typedef union _SourcePict
{
116 PictSolidFill solidFill
;
117 PictGradient gradient
;
118 PictLinearGradient linear
;
119 PictRadialGradient radial
;
120 PictConicalGradient conical
;
121 } SourcePict
, *SourcePictPtr
;
123 typedef struct _Picture
{
124 DrawablePtr pDrawable
;
125 PictFormatPtr pFormat
;
126 PictFormatShort format
; /* PICT_FORMAT */
129 unsigned int repeat
:1;
130 unsigned int graphicsExposures
:1;
131 unsigned int subWindowMode
:1;
132 unsigned int polyEdge
:1;
133 unsigned int polyMode
:1;
134 unsigned int freeCompClip
:1;
135 unsigned int clientClipType
:2;
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
;
142 PicturePtr pNext
; /* chain on same drawable */
145 DDXPointRec alphaOrigin
;
147 DDXPointRec clipOrigin
;
150 unsigned long serialNumber
;
152 RegionPtr pCompositeClip
;
154 PrivateRec
*devPrivates
;
156 PictTransform
*transform
;
158 SourcePictPtr pSourcePict
;
159 xFixed
*filter_params
;
163 typedef Bool (*PictFilterValidateParamsProcPtr
) (ScreenPtr pScreen
, int id
,
164 xFixed
* params
, int nparams
,
165 int *width
, int *height
);
169 PictFilterValidateParamsProcPtr ValidateParams
;
171 } PictFilterRec
, *PictFilterPtr
;
173 #define PictFilterNearest 0
174 #define PictFilterBilinear 1
176 #define PictFilterFast 2
177 #define PictFilterGood 3
178 #define PictFilterBest 4
180 #define PictFilterConvolution 5
181 /* if you add an 8th filter, expand the filter bitfield above */
187 } PictFilterAliasRec
, *PictFilterAliasPtr
;
189 typedef int (*CreatePictureProcPtr
) (PicturePtr pPicture
);
190 typedef void (*DestroyPictureProcPtr
) (PicturePtr pPicture
);
191 typedef int (*ChangePictureClipProcPtr
) (PicturePtr pPicture
,
192 int clipType
, pointer value
, int n
);
193 typedef void (*DestroyPictureClipProcPtr
) (PicturePtr pPicture
);
195 typedef int (*ChangePictureTransformProcPtr
) (PicturePtr pPicture
,
196 PictTransform
* transform
);
198 typedef int (*ChangePictureFilterProcPtr
) (PicturePtr pPicture
,
200 xFixed
* params
, int nparams
);
202 typedef void (*DestroyPictureFilterProcPtr
) (PicturePtr pPicture
);
204 typedef void (*ChangePictureProcPtr
) (PicturePtr pPicture
, Mask mask
);
205 typedef void (*ValidatePictureProcPtr
) (PicturePtr pPicture
, Mask mask
);
206 typedef void (*CompositeProcPtr
) (CARD8 op
,
215 INT16 yDst
, CARD16 width
, CARD16 height
);
217 typedef void (*GlyphsProcPtr
) (CARD8 op
,
220 PictFormatPtr maskFormat
,
224 GlyphListPtr lists
, GlyphPtr
* glyphs
);
226 typedef void (*CompositeRectsProcPtr
) (CARD8 op
,
228 xRenderColor
* color
,
229 int nRect
, xRectangle
*rects
);
231 typedef void (*RasterizeTrapezoidProcPtr
) (PicturePtr pMask
,
233 int x_off
, int y_off
);
235 typedef void (*TrapezoidsProcPtr
) (CARD8 op
,
238 PictFormatPtr maskFormat
,
240 INT16 ySrc
, int ntrap
, xTrapezoid
* traps
);
242 typedef void (*TrianglesProcPtr
) (CARD8 op
,
245 PictFormatPtr maskFormat
,
247 INT16 ySrc
, int ntri
, xTriangle
* tris
);
249 typedef void (*TriStripProcPtr
) (CARD8 op
,
252 PictFormatPtr maskFormat
,
254 INT16 ySrc
, int npoint
, xPointFixed
* points
);
256 typedef void (*TriFanProcPtr
) (CARD8 op
,
259 PictFormatPtr maskFormat
,
261 INT16 ySrc
, int npoint
, xPointFixed
* points
);
263 typedef Bool (*InitIndexedProcPtr
) (ScreenPtr pScreen
, PictFormatPtr pFormat
);
265 typedef void (*CloseIndexedProcPtr
) (ScreenPtr pScreen
, PictFormatPtr pFormat
);
267 typedef void (*UpdateIndexedProcPtr
) (ScreenPtr pScreen
,
268 PictFormatPtr pFormat
,
269 int ndef
, xColorItem
* pdef
);
271 typedef void (*AddTrapsProcPtr
) (PicturePtr pPicture
,
273 INT16 yOff
, int ntrap
, xTrap
* traps
);
275 typedef void (*AddTrianglesProcPtr
) (PicturePtr pPicture
,
277 INT16 yOff
, int ntri
, xTriangle
* tris
);
279 typedef Bool (*RealizeGlyphProcPtr
) (ScreenPtr pScreen
, GlyphPtr glyph
);
281 typedef void (*UnrealizeGlyphProcPtr
) (ScreenPtr pScreen
, GlyphPtr glyph
);
283 typedef struct _PictureScreen
{
284 PictFormatPtr formats
;
285 PictFormatPtr fallback
;
288 CreatePictureProcPtr CreatePicture
;
289 DestroyPictureProcPtr DestroyPicture
;
290 ChangePictureClipProcPtr ChangePictureClip
;
291 DestroyPictureClipProcPtr DestroyPictureClip
;
293 ChangePictureProcPtr ChangePicture
;
294 ValidatePictureProcPtr ValidatePicture
;
296 CompositeProcPtr Composite
;
297 GlyphsProcPtr Glyphs
; /* unused */
298 CompositeRectsProcPtr CompositeRects
;
300 DestroyWindowProcPtr DestroyWindow
;
301 CloseScreenProcPtr CloseScreen
;
303 StoreColorsProcPtr StoreColors
;
305 InitIndexedProcPtr InitIndexed
;
306 CloseIndexedProcPtr CloseIndexed
;
307 UpdateIndexedProcPtr UpdateIndexed
;
311 PictFilterPtr filters
;
313 PictFilterAliasPtr filterAliases
;
317 * Called immediately after a picture's transform is changed through the
318 * SetPictureTransform request. Not called for source-only pictures.
320 ChangePictureTransformProcPtr ChangePictureTransform
;
323 * Called immediately after a picture's transform is changed through the
324 * SetPictureFilter request. Not called for source-only pictures.
326 ChangePictureFilterProcPtr ChangePictureFilter
;
328 DestroyPictureFilterProcPtr DestroyPictureFilter
;
330 TrapezoidsProcPtr Trapezoids
;
331 TrianglesProcPtr Triangles
;
333 RasterizeTrapezoidProcPtr RasterizeTrapezoid
;
335 AddTrianglesProcPtr AddTriangles
;
337 AddTrapsProcPtr AddTraps
;
339 RealizeGlyphProcPtr RealizeGlyph
;
340 UnrealizeGlyphProcPtr UnrealizeGlyph
;
342 #define PICTURE_SCREEN_VERSION 2
343 TriStripProcPtr TriStrip
;
344 TriFanProcPtr TriFan
;
345 } PictureScreenRec
, *PictureScreenPtr
;
347 extern _X_EXPORT DevPrivateKeyRec PictureScreenPrivateKeyRec
;
349 #define PictureScreenPrivateKey (&PictureScreenPrivateKeyRec)
351 extern _X_EXPORT DevPrivateKeyRec PictureWindowPrivateKeyRec
;
353 #define PictureWindowPrivateKey (&PictureWindowPrivateKeyRec)
355 extern _X_EXPORT RESTYPE PictureType
;
356 extern _X_EXPORT RESTYPE PictFormatType
;
357 extern _X_EXPORT RESTYPE GlyphSetType
;
359 #define GetPictureScreen(s) ((PictureScreenPtr)dixLookupPrivate(&(s)->devPrivates, PictureScreenPrivateKey))
360 #define GetPictureScreenIfSet(s) (dixPrivateKeyRegistered(PictureScreenPrivateKey) ? GetPictureScreen(s) : NULL)
361 #define SetPictureScreen(s,p) dixSetPrivate(&(s)->devPrivates, PictureScreenPrivateKey, p)
362 #define GetPictureWindow(w) ((PicturePtr)dixLookupPrivate(&(w)->devPrivates, PictureWindowPrivateKey))
363 #define SetPictureWindow(w,p) dixSetPrivate(&(w)->devPrivates, PictureWindowPrivateKey, p)
365 #define VERIFY_PICTURE(pPicture, pid, client, mode) {\
366 int tmprc = dixLookupResourceByType((pointer)&(pPicture), pid,\
367 PictureType, client, mode);\
368 if (tmprc != Success)\
372 #define VERIFY_ALPHA(pPicture, pid, client, mode) {\
376 VERIFY_PICTURE(pPicture, pid, client, mode); \
380 extern _X_EXPORT PictFormatPtr
381 PictureWindowFormat(WindowPtr pWindow
);
383 extern _X_EXPORT Bool
384 PictureDestroyWindow(WindowPtr pWindow
);
386 extern _X_EXPORT Bool
387 PictureCloseScreen(ScreenPtr pScreen
);
389 extern _X_EXPORT
void
390 PictureStoreColors(ColormapPtr pColormap
, int ndef
, xColorItem
* pdef
);
392 extern _X_EXPORT Bool
393 PictureInitIndexedFormat(ScreenPtr pScreen
, PictFormatPtr format
);
395 extern _X_EXPORT Bool
396 PictureSetSubpixelOrder(ScreenPtr pScreen
, int subpixel
);
399 PictureGetSubpixelOrder(ScreenPtr pScreen
);
401 extern _X_EXPORT PictFormatPtr
402 PictureCreateDefaultFormats(ScreenPtr pScreen
, int *nformatp
);
404 extern _X_EXPORT PictFormatPtr
405 PictureMatchVisual(ScreenPtr pScreen
, int depth
, VisualPtr pVisual
);
407 extern _X_EXPORT PictFormatPtr
408 PictureMatchFormat(ScreenPtr pScreen
, int depth
, CARD32 format
);
410 extern _X_EXPORT Bool
411 PictureInit(ScreenPtr pScreen
, PictFormatPtr formats
, int nformats
);
414 PictureGetFilterId(const char *filter
, int len
, Bool makeit
);
416 extern _X_EXPORT
char *PictureGetFilterName(int id
);
420 PictureAddFilter(ScreenPtr pScreen
,
422 PictFilterValidateParamsProcPtr ValidateParams
,
423 int width
, int height
);
425 extern _X_EXPORT Bool
427 PictureSetFilterAlias(ScreenPtr pScreen
, const char *filter
, const char *alias
);
429 extern _X_EXPORT Bool
430 PictureSetDefaultFilters(ScreenPtr pScreen
);
432 extern _X_EXPORT
void
433 PictureResetFilters(ScreenPtr pScreen
);
435 extern _X_EXPORT PictFilterPtr
436 PictureFindFilter(ScreenPtr pScreen
, char *name
, int len
);
440 SetPicturePictFilter(PicturePtr pPicture
, PictFilterPtr pFilter
,
441 xFixed
* params
, int nparams
);
445 SetPictureFilter(PicturePtr pPicture
, char *name
, int len
,
446 xFixed
* params
, int nparams
);
448 extern _X_EXPORT Bool
449 PictureFinishInit(void);
451 extern _X_EXPORT
void
452 SetPictureToDefaults(PicturePtr pPicture
);
454 extern _X_EXPORT PicturePtr
455 CreatePicture(Picture pid
,
456 DrawablePtr pDrawable
,
457 PictFormatPtr pFormat
,
458 Mask mask
, XID
*list
, ClientPtr client
, int *error
);
462 ChangePicture(PicturePtr pPicture
,
463 Mask vmask
, XID
*vlist
, DevUnion
*ulist
, ClientPtr client
);
467 SetPictureClipRects(PicturePtr pPicture
,
468 int xOrigin
, int yOrigin
, int nRect
, xRectangle
*rects
);
472 SetPictureClipRegion(PicturePtr pPicture
,
473 int xOrigin
, int yOrigin
, RegionPtr pRegion
);
476 SetPictureTransform(PicturePtr pPicture
, PictTransform
* transform
);
478 extern _X_EXPORT
void
479 CopyPicture(PicturePtr pSrc
, Mask mask
, PicturePtr pDst
);
481 extern _X_EXPORT
void
482 ValidatePicture(PicturePtr pPicture
);
485 FreePicture(pointer pPicture
, XID pid
);
488 FreePictFormat(pointer pPictFormat
, XID pid
);
490 extern _X_EXPORT
void
492 CompositePicture(CARD8 op
,
500 INT16 xDst
, INT16 yDst
, CARD16 width
, CARD16 height
);
502 extern _X_EXPORT
void
504 CompositeGlyphs(CARD8 op
,
507 PictFormatPtr maskFormat
,
509 INT16 ySrc
, int nlist
, GlyphListPtr lists
, GlyphPtr
* glyphs
);
511 extern _X_EXPORT
void
513 CompositeRects(CARD8 op
,
515 xRenderColor
* color
, int nRect
, xRectangle
*rects
);
517 extern _X_EXPORT
void
519 CompositeTrapezoids(CARD8 op
,
522 PictFormatPtr maskFormat
,
523 INT16 xSrc
, INT16 ySrc
, int ntrap
, xTrapezoid
* traps
);
525 extern _X_EXPORT
void
527 CompositeTriangles(CARD8 op
,
530 PictFormatPtr maskFormat
,
532 INT16 ySrc
, int ntriangles
, xTriangle
* triangles
);
534 extern _X_EXPORT
void
536 CompositeTriStrip(CARD8 op
,
539 PictFormatPtr maskFormat
,
540 INT16 xSrc
, INT16 ySrc
, int npoints
, xPointFixed
* points
);
542 extern _X_EXPORT
void
544 CompositeTriFan(CARD8 op
,
547 PictFormatPtr maskFormat
,
548 INT16 xSrc
, INT16 ySrc
, int npoints
, xPointFixed
* points
);
551 AnimCurInit(ScreenPtr pScreen
);
555 AnimCursorCreate(CursorPtr
*cursors
, CARD32
*deltas
, int ncursor
,
556 CursorPtr
*ppCursor
, ClientPtr client
, XID cid
);
558 extern _X_EXPORT
void
560 AddTraps(PicturePtr pPicture
,
561 INT16 xOff
, INT16 yOff
, int ntraps
, xTrap
* traps
);
563 extern _X_EXPORT PicturePtr
564 CreateSolidPicture(Picture pid
, xRenderColor
* color
, int *error
);
566 extern _X_EXPORT PicturePtr
567 CreateLinearGradientPicture(Picture pid
,
571 xFixed
* stops
, xRenderColor
* colors
, int *error
);
573 extern _X_EXPORT PicturePtr
574 CreateRadialGradientPicture(Picture pid
,
580 xFixed
* stops
, xRenderColor
* colors
, int *error
);
582 extern _X_EXPORT PicturePtr
583 CreateConicalGradientPicture(Picture pid
,
584 xPointFixed
* center
,
587 xFixed
* stops
, xRenderColor
* colors
, int *error
);
590 extern _X_EXPORT
void PanoramiXRenderInit(void);
591 extern _X_EXPORT
void PanoramiXRenderReset(void);
598 extern _X_EXPORT
void
600 PictTransform_from_xRenderTransform(PictTransformPtr pict
,
601 xRenderTransform
* render
);
603 extern _X_EXPORT
void
605 xRenderTransform_from_PictTransform(xRenderTransform
* render
,
606 PictTransformPtr pict
);
608 extern _X_EXPORT Bool
609 PictureTransformPoint(PictTransformPtr transform
, PictVectorPtr vector
);
611 extern _X_EXPORT Bool
612 PictureTransformPoint3d(PictTransformPtr transform
, PictVectorPtr vector
);
614 #endif /* _PICTURESTR_H_ */