picturestr.h revision 6747b715
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 68#define SourcePictClassUnknown 0 69#define SourcePictClassHorizontal 1 70#define SourcePictClassVertical 2 71 72typedef struct _PictSolidFill { 73 unsigned int type; 74 unsigned int class; 75 CARD32 color; 76} PictSolidFill, *PictSolidFillPtr; 77 78typedef struct _PictGradientStop { 79 xFixed x; 80 xRenderColor color; 81} PictGradientStop, *PictGradientStopPtr; 82 83typedef struct _PictGradient { 84 unsigned int type; 85 unsigned int class; 86 int nstops; 87 PictGradientStopPtr stops; 88 int stopRange; 89 CARD32 *colorTable; 90 int colorTableSize; 91} PictGradient, *PictGradientPtr; 92 93typedef struct _PictLinearGradient { 94 unsigned int type; 95 unsigned int class; 96 int nstops; 97 PictGradientStopPtr stops; 98 int stopRange; 99 CARD32 *colorTable; 100 int colorTableSize; 101 xPointFixed p1; 102 xPointFixed p2; 103} PictLinearGradient, *PictLinearGradientPtr; 104 105typedef struct _PictCircle { 106 xFixed x; 107 xFixed y; 108 xFixed radius; 109} PictCircle, *PictCirclePtr; 110 111typedef struct _PictRadialGradient { 112 unsigned int type; 113 unsigned int class; 114 int nstops; 115 PictGradientStopPtr stops; 116 int stopRange; 117 CARD32 *colorTable; 118 int colorTableSize; 119 PictCircle c1; 120 PictCircle c2; 121 double cdx; 122 double cdy; 123 double dr; 124 double A; 125} PictRadialGradient, *PictRadialGradientPtr; 126 127typedef struct _PictConicalGradient { 128 unsigned int type; 129 unsigned int class; 130 int nstops; 131 PictGradientStopPtr stops; 132 int stopRange; 133 CARD32 *colorTable; 134 int colorTableSize; 135 xPointFixed center; 136 xFixed angle; 137} PictConicalGradient, *PictConicalGradientPtr; 138 139typedef union _SourcePict { 140 unsigned int type; 141 PictSolidFill solidFill; 142 PictGradient gradient; 143 PictLinearGradient linear; 144 PictRadialGradient radial; 145 PictConicalGradient conical; 146} SourcePict, *SourcePictPtr; 147 148typedef struct _Picture { 149 DrawablePtr pDrawable; 150 PictFormatPtr pFormat; 151 PictFormatShort format; /* PICT_FORMAT */ 152 int refcnt; 153 CARD32 id; 154 PicturePtr pNext; /* chain on same drawable */ 155 156 unsigned int repeat : 1; 157 unsigned int graphicsExposures : 1; 158 unsigned int subWindowMode : 1; 159 unsigned int polyEdge : 1; 160 unsigned int polyMode : 1; 161 unsigned int freeCompClip : 1; 162 unsigned int clientClipType : 2; 163 unsigned int componentAlpha : 1; 164 unsigned int repeatType : 2; 165 unsigned int unused : 21; 166 167 PicturePtr alphaMap; 168 DDXPointRec alphaOrigin; 169 170 DDXPointRec clipOrigin; 171 pointer clientClip; 172 173 Atom dither; 174 175 unsigned long stateChanges; 176 unsigned long serialNumber; 177 178 RegionPtr pCompositeClip; 179 180 PrivateRec *devPrivates; 181 182 PictTransform *transform; 183 184 int filter; 185 xFixed *filter_params; 186 int filter_nparams; 187 SourcePictPtr pSourcePict; 188} PictureRec; 189 190typedef Bool (*PictFilterValidateParamsProcPtr) (ScreenPtr pScreen, int id, 191 xFixed *params, int nparams, 192 int *width, int *height); 193typedef struct { 194 char *name; 195 int id; 196 PictFilterValidateParamsProcPtr ValidateParams; 197 int width, height; 198} PictFilterRec, *PictFilterPtr; 199 200#define PictFilterNearest 0 201#define PictFilterBilinear 1 202 203#define PictFilterFast 2 204#define PictFilterGood 3 205#define PictFilterBest 4 206 207#define PictFilterConvolution 5 208 209typedef struct { 210 char *alias; 211 int alias_id; 212 int filter_id; 213} PictFilterAliasRec, *PictFilterAliasPtr; 214 215typedef int (*CreatePictureProcPtr) (PicturePtr pPicture); 216typedef void (*DestroyPictureProcPtr) (PicturePtr pPicture); 217typedef int (*ChangePictureClipProcPtr) (PicturePtr pPicture, 218 int clipType, 219 pointer value, 220 int n); 221typedef void (*DestroyPictureClipProcPtr)(PicturePtr pPicture); 222 223typedef int (*ChangePictureTransformProcPtr) (PicturePtr pPicture, 224 PictTransform *transform); 225 226typedef int (*ChangePictureFilterProcPtr) (PicturePtr pPicture, 227 int filter, 228 xFixed *params, 229 int nparams); 230 231typedef void (*DestroyPictureFilterProcPtr) (PicturePtr pPicture); 232 233typedef void (*ChangePictureProcPtr) (PicturePtr pPicture, 234 Mask mask); 235typedef void (*ValidatePictureProcPtr) (PicturePtr pPicture, 236 Mask mask); 237typedef void (*CompositeProcPtr) (CARD8 op, 238 PicturePtr pSrc, 239 PicturePtr pMask, 240 PicturePtr pDst, 241 INT16 xSrc, 242 INT16 ySrc, 243 INT16 xMask, 244 INT16 yMask, 245 INT16 xDst, 246 INT16 yDst, 247 CARD16 width, 248 CARD16 height); 249 250typedef void (*GlyphsProcPtr) (CARD8 op, 251 PicturePtr pSrc, 252 PicturePtr pDst, 253 PictFormatPtr maskFormat, 254 INT16 xSrc, 255 INT16 ySrc, 256 int nlists, 257 GlyphListPtr lists, 258 GlyphPtr *glyphs); 259 260typedef void (*CompositeRectsProcPtr) (CARD8 op, 261 PicturePtr pDst, 262 xRenderColor *color, 263 int nRect, 264 xRectangle *rects); 265 266typedef void (*RasterizeTrapezoidProcPtr)(PicturePtr pMask, 267 xTrapezoid *trap, 268 int x_off, 269 int y_off); 270 271typedef void (*TrapezoidsProcPtr) (CARD8 op, 272 PicturePtr pSrc, 273 PicturePtr pDst, 274 PictFormatPtr maskFormat, 275 INT16 xSrc, 276 INT16 ySrc, 277 int ntrap, 278 xTrapezoid *traps); 279 280typedef void (*TrianglesProcPtr) (CARD8 op, 281 PicturePtr pSrc, 282 PicturePtr pDst, 283 PictFormatPtr maskFormat, 284 INT16 xSrc, 285 INT16 ySrc, 286 int ntri, 287 xTriangle *tris); 288 289typedef void (*TriStripProcPtr) (CARD8 op, 290 PicturePtr pSrc, 291 PicturePtr pDst, 292 PictFormatPtr maskFormat, 293 INT16 xSrc, 294 INT16 ySrc, 295 int npoint, 296 xPointFixed *points); 297 298typedef void (*TriFanProcPtr) (CARD8 op, 299 PicturePtr pSrc, 300 PicturePtr pDst, 301 PictFormatPtr maskFormat, 302 INT16 xSrc, 303 INT16 ySrc, 304 int npoint, 305 xPointFixed *points); 306 307typedef Bool (*InitIndexedProcPtr) (ScreenPtr pScreen, 308 PictFormatPtr pFormat); 309 310typedef void (*CloseIndexedProcPtr) (ScreenPtr pScreen, 311 PictFormatPtr pFormat); 312 313typedef void (*UpdateIndexedProcPtr) (ScreenPtr pScreen, 314 PictFormatPtr pFormat, 315 int ndef, 316 xColorItem *pdef); 317 318typedef void (*AddTrapsProcPtr) (PicturePtr pPicture, 319 INT16 xOff, 320 INT16 yOff, 321 int ntrap, 322 xTrap *traps); 323 324typedef void (*AddTrianglesProcPtr) (PicturePtr pPicture, 325 INT16 xOff, 326 INT16 yOff, 327 int ntri, 328 xTriangle *tris); 329 330typedef Bool (*RealizeGlyphProcPtr) (ScreenPtr pScreen, 331 GlyphPtr glyph); 332 333typedef void (*UnrealizeGlyphProcPtr) (ScreenPtr pScreen, 334 GlyphPtr glyph); 335 336typedef struct _PictureScreen { 337 PictFormatPtr formats; 338 PictFormatPtr fallback; 339 int nformats; 340 341 CreatePictureProcPtr CreatePicture; 342 DestroyPictureProcPtr DestroyPicture; 343 ChangePictureClipProcPtr ChangePictureClip; 344 DestroyPictureClipProcPtr DestroyPictureClip; 345 346 ChangePictureProcPtr ChangePicture; 347 ValidatePictureProcPtr ValidatePicture; 348 349 CompositeProcPtr Composite; 350 GlyphsProcPtr Glyphs; /* unused */ 351 CompositeRectsProcPtr CompositeRects; 352 353 DestroyWindowProcPtr DestroyWindow; 354 CloseScreenProcPtr CloseScreen; 355 356 StoreColorsProcPtr StoreColors; 357 358 InitIndexedProcPtr InitIndexed; 359 CloseIndexedProcPtr CloseIndexed; 360 UpdateIndexedProcPtr UpdateIndexed; 361 362 int subpixel; 363 364 PictFilterPtr filters; 365 int nfilters; 366 PictFilterAliasPtr filterAliases; 367 int nfilterAliases; 368 369 /** 370 * Called immediately after a picture's transform is changed through the 371 * SetPictureTransform request. Not called for source-only pictures. 372 */ 373 ChangePictureTransformProcPtr ChangePictureTransform; 374 375 /** 376 * Called immediately after a picture's transform is changed through the 377 * SetPictureFilter request. Not called for source-only pictures. 378 */ 379 ChangePictureFilterProcPtr ChangePictureFilter; 380 381 DestroyPictureFilterProcPtr DestroyPictureFilter; 382 383 TrapezoidsProcPtr Trapezoids; 384 TrianglesProcPtr Triangles; 385 TriStripProcPtr TriStrip; 386 TriFanProcPtr TriFan; 387 388 RasterizeTrapezoidProcPtr RasterizeTrapezoid; 389 390 AddTrianglesProcPtr AddTriangles; 391 392 AddTrapsProcPtr AddTraps; 393 394 RealizeGlyphProcPtr RealizeGlyph; 395 UnrealizeGlyphProcPtr UnrealizeGlyph; 396 397} PictureScreenRec, *PictureScreenPtr; 398 399extern _X_EXPORT DevPrivateKeyRec PictureScreenPrivateKeyRec; 400#define PictureScreenPrivateKey (&PictureScreenPrivateKeyRec) 401 402extern _X_EXPORT DevPrivateKeyRec PictureWindowPrivateKeyRec; 403#define PictureWindowPrivateKey (&PictureWindowPrivateKeyRec) 404 405extern _X_EXPORT RESTYPE PictureType; 406extern _X_EXPORT RESTYPE PictFormatType; 407extern _X_EXPORT RESTYPE GlyphSetType; 408 409#define GetPictureScreen(s) ((PictureScreenPtr)dixLookupPrivate(&(s)->devPrivates, PictureScreenPrivateKey)) 410#define GetPictureScreenIfSet(s) (dixPrivateKeyRegistered(PictureScreenPrivateKey) ? GetPictureScreen(s) : NULL) 411#define SetPictureScreen(s,p) dixSetPrivate(&(s)->devPrivates, PictureScreenPrivateKey, p) 412#define GetPictureWindow(w) ((PicturePtr)dixLookupPrivate(&(w)->devPrivates, PictureWindowPrivateKey)) 413#define SetPictureWindow(w,p) dixSetPrivate(&(w)->devPrivates, PictureWindowPrivateKey, p) 414 415#define VERIFY_PICTURE(pPicture, pid, client, mode) {\ 416 int rc = dixLookupResourceByType((pointer)&(pPicture), pid,\ 417 PictureType, client, mode);\ 418 if (rc != Success)\ 419 return rc;\ 420} 421 422#define VERIFY_ALPHA(pPicture, pid, client, mode) {\ 423 if (pid == None) \ 424 pPicture = 0; \ 425 else { \ 426 VERIFY_PICTURE(pPicture, pid, client, mode); \ 427 } \ 428} \ 429 430extern _X_EXPORT Bool 431PictureDestroyWindow (WindowPtr pWindow); 432 433extern _X_EXPORT Bool 434PictureCloseScreen (int Index, ScreenPtr pScreen); 435 436extern _X_EXPORT void 437PictureStoreColors (ColormapPtr pColormap, int ndef, xColorItem *pdef); 438 439extern _X_EXPORT Bool 440PictureInitIndexedFormat (ScreenPtr pScreen, PictFormatPtr format); 441 442extern _X_EXPORT Bool 443PictureSetSubpixelOrder (ScreenPtr pScreen, int subpixel); 444 445extern _X_EXPORT int 446PictureGetSubpixelOrder (ScreenPtr pScreen); 447 448extern _X_EXPORT PictFormatPtr 449PictureCreateDefaultFormats (ScreenPtr pScreen, int *nformatp); 450 451extern _X_EXPORT PictFormatPtr 452PictureMatchVisual (ScreenPtr pScreen, int depth, VisualPtr pVisual); 453 454extern _X_EXPORT PictFormatPtr 455PictureMatchFormat (ScreenPtr pScreen, int depth, CARD32 format); 456 457extern _X_EXPORT Bool 458PictureInit (ScreenPtr pScreen, PictFormatPtr formats, int nformats); 459 460extern _X_EXPORT int 461PictureGetFilterId (char *filter, int len, Bool makeit); 462 463extern _X_EXPORT char * 464PictureGetFilterName (int id); 465 466extern _X_EXPORT int 467PictureAddFilter (ScreenPtr pScreen, 468 char *filter, 469 PictFilterValidateParamsProcPtr ValidateParams, 470 int width, 471 int height); 472 473extern _X_EXPORT Bool 474PictureSetFilterAlias (ScreenPtr pScreen, char *filter, char *alias); 475 476extern _X_EXPORT Bool 477PictureSetDefaultFilters (ScreenPtr pScreen); 478 479extern _X_EXPORT void 480PictureResetFilters (ScreenPtr pScreen); 481 482extern _X_EXPORT PictFilterPtr 483PictureFindFilter (ScreenPtr pScreen, char *name, int len); 484 485extern _X_EXPORT int 486SetPicturePictFilter (PicturePtr pPicture, PictFilterPtr pFilter, 487 xFixed *params, int nparams); 488 489extern _X_EXPORT int 490SetPictureFilter (PicturePtr pPicture, char *name, int len, 491 xFixed *params, int nparams); 492 493extern _X_EXPORT Bool 494PictureFinishInit (void); 495 496extern _X_EXPORT void 497SetPictureToDefaults (PicturePtr pPicture); 498 499extern _X_EXPORT PicturePtr 500CreatePicture (Picture pid, 501 DrawablePtr pDrawable, 502 PictFormatPtr pFormat, 503 Mask mask, 504 XID *list, 505 ClientPtr client, 506 int *error); 507 508extern _X_EXPORT int 509ChangePicture (PicturePtr pPicture, 510 Mask vmask, 511 XID *vlist, 512 DevUnion *ulist, 513 ClientPtr client); 514 515extern _X_EXPORT int 516SetPictureClipRects (PicturePtr pPicture, 517 int xOrigin, 518 int yOrigin, 519 int nRect, 520 xRectangle *rects); 521 522extern _X_EXPORT int 523SetPictureClipRegion (PicturePtr pPicture, 524 int xOrigin, 525 int yOrigin, 526 RegionPtr pRegion); 527 528extern _X_EXPORT int 529SetPictureTransform (PicturePtr pPicture, 530 PictTransform *transform); 531 532extern _X_EXPORT void 533CopyPicture (PicturePtr pSrc, 534 Mask mask, 535 PicturePtr pDst); 536 537extern _X_EXPORT void 538ValidatePicture(PicturePtr pPicture); 539 540extern _X_EXPORT int 541FreePicture (pointer pPicture, 542 XID pid); 543 544extern _X_EXPORT int 545FreePictFormat (pointer pPictFormat, 546 XID pid); 547 548extern _X_EXPORT void 549CompositePicture (CARD8 op, 550 PicturePtr pSrc, 551 PicturePtr pMask, 552 PicturePtr pDst, 553 INT16 xSrc, 554 INT16 ySrc, 555 INT16 xMask, 556 INT16 yMask, 557 INT16 xDst, 558 INT16 yDst, 559 CARD16 width, 560 CARD16 height); 561 562extern _X_EXPORT void 563CompositeGlyphs (CARD8 op, 564 PicturePtr pSrc, 565 PicturePtr pDst, 566 PictFormatPtr maskFormat, 567 INT16 xSrc, 568 INT16 ySrc, 569 int nlist, 570 GlyphListPtr lists, 571 GlyphPtr *glyphs); 572 573extern _X_EXPORT void 574CompositeRects (CARD8 op, 575 PicturePtr pDst, 576 xRenderColor *color, 577 int nRect, 578 xRectangle *rects); 579 580extern _X_EXPORT void 581CompositeTrapezoids (CARD8 op, 582 PicturePtr pSrc, 583 PicturePtr pDst, 584 PictFormatPtr maskFormat, 585 INT16 xSrc, 586 INT16 ySrc, 587 int ntrap, 588 xTrapezoid *traps); 589 590extern _X_EXPORT void 591CompositeTriangles (CARD8 op, 592 PicturePtr pSrc, 593 PicturePtr pDst, 594 PictFormatPtr maskFormat, 595 INT16 xSrc, 596 INT16 ySrc, 597 int ntriangles, 598 xTriangle *triangles); 599 600extern _X_EXPORT void 601CompositeTriStrip (CARD8 op, 602 PicturePtr pSrc, 603 PicturePtr pDst, 604 PictFormatPtr maskFormat, 605 INT16 xSrc, 606 INT16 ySrc, 607 int npoints, 608 xPointFixed *points); 609 610extern _X_EXPORT void 611CompositeTriFan (CARD8 op, 612 PicturePtr pSrc, 613 PicturePtr pDst, 614 PictFormatPtr maskFormat, 615 INT16 xSrc, 616 INT16 ySrc, 617 int npoints, 618 xPointFixed *points); 619 620extern _X_EXPORT CARD32 621PictureGradientColor (PictGradientStopPtr stop1, 622 PictGradientStopPtr stop2, 623 CARD32 x); 624 625extern _X_EXPORT void RenderExtensionInit (void); 626 627Bool 628AnimCurInit (ScreenPtr pScreen); 629 630int 631AnimCursorCreate (CursorPtr *cursors, CARD32 *deltas, int ncursor, CursorPtr *ppCursor, ClientPtr client, XID cid); 632 633extern _X_EXPORT void 634AddTraps (PicturePtr pPicture, 635 INT16 xOff, 636 INT16 yOff, 637 int ntraps, 638 xTrap *traps); 639 640extern _X_EXPORT PicturePtr 641CreateSolidPicture (Picture pid, 642 xRenderColor *color, 643 int *error); 644 645extern _X_EXPORT PicturePtr 646CreateLinearGradientPicture (Picture pid, 647 xPointFixed *p1, 648 xPointFixed *p2, 649 int nStops, 650 xFixed *stops, 651 xRenderColor *colors, 652 int *error); 653 654extern _X_EXPORT PicturePtr 655CreateRadialGradientPicture (Picture pid, 656 xPointFixed *inner, 657 xPointFixed *outer, 658 xFixed innerRadius, 659 xFixed outerRadius, 660 int nStops, 661 xFixed *stops, 662 xRenderColor *colors, 663 int *error); 664 665extern _X_EXPORT PicturePtr 666CreateConicalGradientPicture (Picture pid, 667 xPointFixed *center, 668 xFixed angle, 669 int nStops, 670 xFixed *stops, 671 xRenderColor *colors, 672 int *error); 673 674#ifdef PANORAMIX 675extern _X_EXPORT void PanoramiXRenderInit (void); 676extern _X_EXPORT void PanoramiXRenderReset (void); 677#endif 678 679/* 680 * matrix.c 681 */ 682 683extern _X_EXPORT void 684PictTransform_from_xRenderTransform (PictTransformPtr pict, 685 xRenderTransform *render); 686 687extern _X_EXPORT void 688xRenderTransform_from_PictTransform (xRenderTransform *render, 689 PictTransformPtr pict); 690 691extern _X_EXPORT Bool 692PictureTransformPoint (PictTransformPtr transform, 693 PictVectorPtr vector); 694 695extern _X_EXPORT Bool 696PictureTransformPoint3d (PictTransformPtr transform, 697 PictVectorPtr vector); 698 699#endif /* _PICTURESTR_H_ */ 700