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