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 32 typedef struct _DirectFormat { 33 CARD16 red, redMask; 34 CARD16 green, greenMask; 35 CARD16 blue, blueMask; 36 CARD16 alpha, alphaMask; 37 } DirectFormatRec; 38 39 typedef struct _IndexFormat { 40 VisualID vid; 41 ColormapPtr pColormap; 42 int nvalues; 43 xIndexValue *pValues; 44 void *devPrivate; 45 } IndexFormatRec; 46 47 typedef 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 56 typedef struct pixman_vector PictVector, *PictVectorPtr; 57 typedef 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 68 typedef struct _PictSolidFill { 69 unsigned int type; 70 CARD32 color; 71 xRenderColor fullcolor; 72 } PictSolidFill, *PictSolidFillPtr; 73 74 typedef struct _PictGradientStop { 75 xFixed x; 76 xRenderColor color; 77 } PictGradientStop, *PictGradientStopPtr; 78 79 typedef struct _PictGradient { 80 unsigned int type; 81 int nstops; 82 PictGradientStopPtr stops; 83 } PictGradient, *PictGradientPtr; 84 85 typedef struct _PictLinearGradient { 86 unsigned int type; 87 int nstops; 88 PictGradientStopPtr stops; 89 xPointFixed p1; 90 xPointFixed p2; 91 } PictLinearGradient, *PictLinearGradientPtr; 92 93 typedef struct _PictCircle { 94 xFixed x; 95 xFixed y; 96 xFixed radius; 97 } PictCircle, *PictCirclePtr; 98 99 typedef struct _PictRadialGradient { 100 unsigned int type; 101 int nstops; 102 PictGradientStopPtr stops; 103 PictCircle c1; 104 PictCircle c2; 105 } PictRadialGradient, *PictRadialGradientPtr; 106 107 typedef struct _PictConicalGradient { 108 unsigned int type; 109 int nstops; 110 PictGradientStopPtr stops; 111 xPointFixed center; 112 xFixed angle; 113 } PictConicalGradient, *PictConicalGradientPtr; 114 115 typedef 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 124 typedef 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 163 typedef Bool (*PictFilterValidateParamsProcPtr) (ScreenPtr pScreen, int id, 164 xFixed * params, int nparams, 165 int *width, int *height); 166 typedef 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 183 typedef struct { 184 char *alias; 185 int alias_id; 186 int filter_id; 187 } PictFilterAliasRec, *PictFilterAliasPtr; 188 189 typedef int (*CreatePictureProcPtr) (PicturePtr pPicture); 190 typedef void (*DestroyPictureProcPtr) (PicturePtr pPicture); 191 typedef int (*ChangePictureClipProcPtr) (PicturePtr pPicture, 192 int clipType, void *value, int n); 193 typedef void (*DestroyPictureClipProcPtr) (PicturePtr pPicture); 194 195 typedef int (*ChangePictureTransformProcPtr) (PicturePtr pPicture, 196 PictTransform * transform); 197 198 typedef int (*ChangePictureFilterProcPtr) (PicturePtr pPicture, 199 int filter, 200 xFixed * params, int nparams); 201 202 typedef void (*DestroyPictureFilterProcPtr) (PicturePtr pPicture); 203 204 typedef void (*ChangePictureProcPtr) (PicturePtr pPicture, Mask mask); 205 typedef void (*ValidatePictureProcPtr) (PicturePtr pPicture, Mask mask); 206 typedef 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 217 typedef 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 226 typedef void (*CompositeRectsProcPtr) (CARD8 op, 227 PicturePtr pDst, 228 xRenderColor * color, 229 int nRect, xRectangle *rects); 230 231 typedef void (*RasterizeTrapezoidProcPtr) (PicturePtr pMask, 232 xTrapezoid * trap, 233 int x_off, int y_off); 234 235 typedef void (*TrapezoidsProcPtr) (CARD8 op, 236 PicturePtr pSrc, 237 PicturePtr pDst, 238 PictFormatPtr maskFormat, 239 INT16 xSrc, 240 INT16 ySrc, int ntrap, xTrapezoid * traps); 241 242 typedef void (*TrianglesProcPtr) (CARD8 op, 243 PicturePtr pSrc, 244 PicturePtr pDst, 245 PictFormatPtr maskFormat, 246 INT16 xSrc, 247 INT16 ySrc, int ntri, xTriangle * tris); 248 249 typedef void (*TriStripProcPtr) (CARD8 op, 250 PicturePtr pSrc, 251 PicturePtr pDst, 252 PictFormatPtr maskFormat, 253 INT16 xSrc, 254 INT16 ySrc, int npoint, xPointFixed * points); 255 256 typedef void (*TriFanProcPtr) (CARD8 op, 257 PicturePtr pSrc, 258 PicturePtr pDst, 259 PictFormatPtr maskFormat, 260 INT16 xSrc, 261 INT16 ySrc, int npoint, xPointFixed * points); 262 263 typedef Bool (*InitIndexedProcPtr) (ScreenPtr pScreen, PictFormatPtr pFormat); 264 265 typedef void (*CloseIndexedProcPtr) (ScreenPtr pScreen, PictFormatPtr pFormat); 266 267 typedef void (*UpdateIndexedProcPtr) (ScreenPtr pScreen, 268 PictFormatPtr pFormat, 269 int ndef, xColorItem * pdef); 270 271 typedef void (*AddTrapsProcPtr) (PicturePtr pPicture, 272 INT16 xOff, 273 INT16 yOff, int ntrap, xTrap * traps); 274 275 typedef void (*AddTrianglesProcPtr) (PicturePtr pPicture, 276 INT16 xOff, 277 INT16 yOff, int ntri, xTriangle * tris); 278 279 typedef Bool (*RealizeGlyphProcPtr) (ScreenPtr pScreen, GlyphPtr glyph); 280 281 typedef void (*UnrealizeGlyphProcPtr) (ScreenPtr pScreen, GlyphPtr glyph); 282 283 typedef 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 347 extern _X_EXPORT DevPrivateKeyRec PictureScreenPrivateKeyRec; 348 #define PictureScreenPrivateKey (&PictureScreenPrivateKeyRec) 349 350 extern _X_EXPORT DevPrivateKeyRec PictureWindowPrivateKeyRec; 351 #define PictureWindowPrivateKey (&PictureWindowPrivateKeyRec) 352 353 extern RESTYPE PictureType; 354 extern RESTYPE PictFormatType; 355 extern 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 378 extern _X_EXPORT PictFormatPtr 379 PictureWindowFormat(WindowPtr pWindow); 380 381 extern _X_EXPORT Bool 382 PictureSetSubpixelOrder(ScreenPtr pScreen, int subpixel); 383 384 extern _X_EXPORT int 385 PictureGetSubpixelOrder(ScreenPtr pScreen); 386 387 extern _X_EXPORT PictFormatPtr 388 PictureMatchVisual(ScreenPtr pScreen, int depth, VisualPtr pVisual); 389 390 extern _X_EXPORT PictFormatPtr 391 PictureMatchFormat(ScreenPtr pScreen, int depth, CARD32 format); 392 393 extern _X_EXPORT Bool 394 PictureInit(ScreenPtr pScreen, PictFormatPtr formats, int nformats); 395 396 extern _X_EXPORT int 397 PictureGetFilterId(const char *filter, int len, Bool makeit); 398 399 extern _X_EXPORT char *PictureGetFilterName(int id); 400 401 extern _X_EXPORT int 402 PictureAddFilter(ScreenPtr pScreen, 403 const char *filter, 404 PictFilterValidateParamsProcPtr ValidateParams, 405 int width, int height); 406 407 extern _X_EXPORT Bool 408 PictureSetFilterAlias(ScreenPtr pScreen, const char *filter, const char *alias); 409 410 extern _X_EXPORT Bool 411 PictureSetDefaultFilters(ScreenPtr pScreen); 412 413 extern _X_EXPORT void 414 PictureResetFilters(ScreenPtr pScreen); 415 416 extern _X_EXPORT PictFilterPtr 417 PictureFindFilter(ScreenPtr pScreen, char *name, int len); 418 419 extern _X_EXPORT int 420 SetPicturePictFilter(PicturePtr pPicture, PictFilterPtr pFilter, 421 xFixed * params, int nparams); 422 423 extern _X_EXPORT int 424 SetPictureFilter(PicturePtr pPicture, char *name, int len, 425 xFixed * params, int nparams); 426 427 extern _X_EXPORT Bool 428 PictureFinishInit(void); 429 430 extern _X_EXPORT PicturePtr 431 CreatePicture(Picture pid, 432 DrawablePtr pDrawable, 433 PictFormatPtr pFormat, 434 Mask mask, XID *list, ClientPtr client, int *error); 435 436 extern _X_EXPORT int 437 ChangePicture(PicturePtr pPicture, 438 Mask vmask, XID *vlist, DevUnion *ulist, ClientPtr client); 439 440 extern _X_EXPORT int 441 442 SetPictureClipRects(PicturePtr pPicture, 443 int xOrigin, int yOrigin, int nRect, xRectangle *rects); 444 445 extern _X_EXPORT int 446 SetPictureClipRegion(PicturePtr pPicture, 447 int xOrigin, int yOrigin, RegionPtr pRegion); 448 449 extern _X_EXPORT int 450 SetPictureTransform(PicturePtr pPicture, PictTransform * transform); 451 452 extern _X_EXPORT void 453 ValidatePicture(PicturePtr pPicture); 454 455 extern _X_EXPORT int 456 FreePicture(void *pPicture, XID pid); 457 458 extern _X_EXPORT void 459 CompositePicture(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 469 extern _X_EXPORT void 470 CompositeGlyphs(CARD8 op, 471 PicturePtr pSrc, 472 PicturePtr pDst, 473 PictFormatPtr maskFormat, 474 INT16 xSrc, 475 INT16 ySrc, int nlist, GlyphListPtr lists, GlyphPtr * glyphs); 476 477 extern _X_EXPORT void 478 CompositeRects(CARD8 op, 479 PicturePtr pDst, 480 xRenderColor * color, int nRect, xRectangle *rects); 481 482 extern _X_EXPORT void 483 CompositeTrapezoids(CARD8 op, 484 PicturePtr pSrc, 485 PicturePtr pDst, 486 PictFormatPtr maskFormat, 487 INT16 xSrc, INT16 ySrc, int ntrap, xTrapezoid * traps); 488 489 extern _X_EXPORT void 490 CompositeTriangles(CARD8 op, 491 PicturePtr pSrc, 492 PicturePtr pDst, 493 PictFormatPtr maskFormat, 494 INT16 xSrc, 495 INT16 ySrc, int ntriangles, xTriangle * triangles); 496 497 extern _X_EXPORT void 498 CompositeTriStrip(CARD8 op, 499 PicturePtr pSrc, 500 PicturePtr pDst, 501 PictFormatPtr maskFormat, 502 INT16 xSrc, INT16 ySrc, int npoints, xPointFixed * points); 503 504 extern _X_EXPORT void 505 CompositeTriFan(CARD8 op, 506 PicturePtr pSrc, 507 PicturePtr pDst, 508 PictFormatPtr maskFormat, 509 INT16 xSrc, INT16 ySrc, int npoints, xPointFixed * points); 510 511 Bool 512 AnimCurInit(ScreenPtr pScreen); 513 514 int 515 AnimCursorCreate(CursorPtr *cursors, CARD32 *deltas, int ncursor, 516 CursorPtr *ppCursor, ClientPtr client, XID cid); 517 518 extern _X_EXPORT void 519 AddTraps(PicturePtr pPicture, 520 INT16 xOff, INT16 yOff, int ntraps, xTrap * traps); 521 522 extern _X_EXPORT PicturePtr 523 CreateSolidPicture(Picture pid, xRenderColor * color, int *error); 524 525 extern _X_EXPORT PicturePtr 526 CreateLinearGradientPicture(Picture pid, 527 xPointFixed * p1, 528 xPointFixed * p2, 529 int nStops, 530 xFixed * stops, xRenderColor * colors, int *error); 531 532 extern _X_EXPORT PicturePtr 533 CreateRadialGradientPicture(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 541 extern _X_EXPORT PicturePtr 542 CreateConicalGradientPicture(Picture pid, 543 xPointFixed * center, 544 xFixed angle, 545 int nStops, 546 xFixed * stops, xRenderColor * colors, int *error); 547 548 #ifdef PANORAMIX 549 extern void PanoramiXRenderInit(void); 550 extern void PanoramiXRenderReset(void); 551 #endif 552 553 /* 554 * matrix.c 555 */ 556 557 extern _X_EXPORT void 558 PictTransform_from_xRenderTransform(PictTransformPtr pict, 559 xRenderTransform * render); 560 561 extern _X_EXPORT void 562 xRenderTransform_from_PictTransform(xRenderTransform * render, 563 PictTransformPtr pict); 564 565 extern _X_EXPORT Bool 566 PictureTransformPoint(PictTransformPtr transform, PictVectorPtr vector); 567 568 extern _X_EXPORT Bool 569 PictureTransformPoint3d(PictTransformPtr transform, PictVectorPtr vector); 570 571 #endif /* _PICTURESTR_H_ */ 572