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