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