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