1706f2543Smrg/* 2706f2543Smrg * Copyright © 2004 Eric Anholt 3706f2543Smrg * 4706f2543Smrg * Permission to use, copy, modify, distribute, and sell this software and its 5706f2543Smrg * documentation for any purpose is hereby granted without fee, provided that 6706f2543Smrg * the above copyright notice appear in all copies and that both that 7706f2543Smrg * copyright notice and this permission notice appear in supporting 8706f2543Smrg * documentation, and that the name of Eric Anholt not be used in 9706f2543Smrg * advertising or publicity pertaining to distribution of the software without 10706f2543Smrg * specific, written prior permission. Eric Anholt makes no 11706f2543Smrg * representations about the suitability of this software for any purpose. It 12706f2543Smrg * is provided "as is" without express or implied warranty. 13706f2543Smrg * 14706f2543Smrg * ERIC ANHOLT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 15706f2543Smrg * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO 16706f2543Smrg * EVENT SHALL ERIC ANHOLT BE LIABLE FOR ANY SPECIAL, INDIRECT OR 17706f2543Smrg * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 18706f2543Smrg * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 19706f2543Smrg * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 20706f2543Smrg * PERFORMANCE OF THIS SOFTWARE. 21706f2543Smrg */ 22706f2543Smrg 23706f2543Smrg#ifdef HAVE_DIX_CONFIG_H 24706f2543Smrg#include <dix-config.h> 25706f2543Smrg#endif 26706f2543Smrg 27706f2543Smrg#include <stdlib.h> 28706f2543Smrg 29706f2543Smrg#include "gcstruct.h" 30706f2543Smrg#include "pixmapstr.h" 31706f2543Smrg#include "cw.h" 32706f2543Smrg#include "mi.h" 33706f2543Smrg 34706f2543Smrg#define SETUP_BACKING_DST(_pDst, _pGC) \ 35706f2543Smrg cwGCPtr pGCPrivate = getCwGC (_pGC); \ 36706f2543Smrg int dst_off_x, dst_off_y; \ 37706f2543Smrg DrawablePtr pBackingDst = cwGetBackingDrawable(pDst, &dst_off_x, \ 38706f2543Smrg &dst_off_y); \ 39706f2543Smrg GCPtr pBackingGC = pGCPrivate->pBackingGC ? pGCPrivate->pBackingGC : _pGC 40706f2543Smrg 41706f2543Smrg#define SETUP_BACKING_SRC(pSrc, pGC) \ 42706f2543Smrg int src_off_x, src_off_y; \ 43706f2543Smrg DrawablePtr pBackingSrc = cwGetBackingDrawable(pSrc, &src_off_x, \ 44706f2543Smrg &src_off_y) 45706f2543Smrg 46706f2543Smrg#define PROLOGUE(pGC) do { \ 47706f2543Smrg if (pBackingGC->serialNumber != pBackingDst->serialNumber) { \ 48706f2543Smrg ValidateGC(pBackingDst, pBackingGC); \ 49706f2543Smrg } \ 50706f2543Smrg pGC->funcs = pGCPrivate->wrapFuncs;\ 51706f2543Smrg pGC->ops = pGCPrivate->wrapOps;\ 52706f2543Smrg} while (0) 53706f2543Smrg 54706f2543Smrg#define EPILOGUE(pGC) do { \ 55706f2543Smrg pGCPrivate->wrapFuncs = (pGC)->funcs; \ 56706f2543Smrg pGCPrivate->wrapOps = (pGC)->ops; \ 57706f2543Smrg (pGC)->funcs = &cwGCFuncs; \ 58706f2543Smrg (pGC)->ops = &cwGCOps; \ 59706f2543Smrg} while (0) 60706f2543Smrg 61706f2543Smrgextern GCFuncs cwGCFuncs; 62706f2543Smrg 63706f2543Smrg/* 64706f2543Smrg * GC ops -- wrap each GC operation with our own function 65706f2543Smrg */ 66706f2543Smrg 67706f2543Smrgstatic void cwFillSpans(DrawablePtr pDst, GCPtr pGC, int nInit, 68706f2543Smrg DDXPointPtr pptInit, int *pwidthInit, int fSorted); 69706f2543Smrgstatic void cwSetSpans(DrawablePtr pDst, GCPtr pGC, char *psrc, 70706f2543Smrg DDXPointPtr ppt, int *pwidth, int nspans, int fSorted); 71706f2543Smrgstatic void cwPutImage(DrawablePtr pDst, GCPtr pGC, int depth, 72706f2543Smrg int x, int y, int w, int h, int leftPad, int format, 73706f2543Smrg char *pBits); 74706f2543Smrgstatic RegionPtr cwCopyArea(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, 75706f2543Smrg int srcx, int srcy, int w, int h, 76706f2543Smrg int dstx, int dsty); 77706f2543Smrgstatic RegionPtr cwCopyPlane(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, 78706f2543Smrg int srcx, int srcy, int w, int h, 79706f2543Smrg int dstx, int dsty, unsigned long plane); 80706f2543Smrgstatic void cwPolyPoint(DrawablePtr pDst, GCPtr pGC, int mode, int npt, 81706f2543Smrg xPoint *pptInit); 82706f2543Smrgstatic void cwPolylines(DrawablePtr pDst, GCPtr pGC, int mode, int npt, 83706f2543Smrg DDXPointPtr pptInit); 84706f2543Smrgstatic void cwPolySegment(DrawablePtr pDst, GCPtr pGC, int nseg, 85706f2543Smrg xSegment *pSegs); 86706f2543Smrgstatic void cwPolyRectangle(DrawablePtr pDst, GCPtr pGC, 87706f2543Smrg int nrects, xRectangle *pRects); 88706f2543Smrgstatic void cwPolyArc(DrawablePtr pDst, GCPtr pGC, int narcs, xArc *parcs); 89706f2543Smrgstatic void cwFillPolygon(DrawablePtr pDst, GCPtr pGC, int shape, int mode, 90706f2543Smrg int count, DDXPointPtr pPts); 91706f2543Smrgstatic void cwPolyFillRect(DrawablePtr pDst, GCPtr pGC, 92706f2543Smrg int nrectFill, xRectangle *prectInit); 93706f2543Smrgstatic void cwPolyFillArc(DrawablePtr pDst, GCPtr pGC, 94706f2543Smrg int narcs, xArc *parcs); 95706f2543Smrgstatic int cwPolyText8(DrawablePtr pDrawable, GCPtr pGC, int x, int y, 96706f2543Smrg int count, char *chars); 97706f2543Smrgstatic int cwPolyText16(DrawablePtr pDst, GCPtr pGC, int x, int y, 98706f2543Smrg int count, unsigned short *chars); 99706f2543Smrgstatic void cwImageText8(DrawablePtr pDst, GCPtr pGC, int x, int y, 100706f2543Smrg int count, char *chars); 101706f2543Smrgstatic void cwImageText16(DrawablePtr pDst, GCPtr pGC, int x, int y, 102706f2543Smrg int count, unsigned short *chars); 103706f2543Smrgstatic void cwImageGlyphBlt(DrawablePtr pDst, GCPtr pGC, int x, int y, 104706f2543Smrg unsigned int nglyph, CharInfoPtr *ppci, 105706f2543Smrg pointer pglyphBase); 106706f2543Smrgstatic void cwPolyGlyphBlt(DrawablePtr pDst, GCPtr pGC, int x, int y, 107706f2543Smrg unsigned int nglyph, CharInfoPtr *ppci, 108706f2543Smrg pointer pglyphBase); 109706f2543Smrgstatic void cwPushPixels(GCPtr pGC, PixmapPtr pBitMap, DrawablePtr pDst, 110706f2543Smrg int w, int h, int x, int y); 111706f2543Smrg 112706f2543SmrgGCOps cwGCOps = { 113706f2543Smrg cwFillSpans, 114706f2543Smrg cwSetSpans, 115706f2543Smrg cwPutImage, 116706f2543Smrg cwCopyArea, 117706f2543Smrg cwCopyPlane, 118706f2543Smrg cwPolyPoint, 119706f2543Smrg cwPolylines, 120706f2543Smrg cwPolySegment, 121706f2543Smrg cwPolyRectangle, 122706f2543Smrg cwPolyArc, 123706f2543Smrg cwFillPolygon, 124706f2543Smrg cwPolyFillRect, 125706f2543Smrg cwPolyFillArc, 126706f2543Smrg cwPolyText8, 127706f2543Smrg cwPolyText16, 128706f2543Smrg cwImageText8, 129706f2543Smrg cwImageText16, 130706f2543Smrg cwImageGlyphBlt, 131706f2543Smrg cwPolyGlyphBlt, 132706f2543Smrg cwPushPixels 133706f2543Smrg}; 134706f2543Smrg 135706f2543Smrgstatic void 136706f2543SmrgcwFillSpans(DrawablePtr pDst, GCPtr pGC, int nspans, DDXPointPtr ppt, 137706f2543Smrg int *pwidth, int fSorted) 138706f2543Smrg{ 139706f2543Smrg SETUP_BACKING_DST(pDst, pGC); 140706f2543Smrg 141706f2543Smrg PROLOGUE(pGC); 142706f2543Smrg 143706f2543Smrg CW_OFFSET_XYPOINTS(ppt, nspans); 144706f2543Smrg 145706f2543Smrg (*pBackingGC->ops->FillSpans)(pBackingDst, pBackingGC, nspans, ppt, 146706f2543Smrg pwidth, fSorted); 147706f2543Smrg 148706f2543Smrg EPILOGUE(pGC); 149706f2543Smrg} 150706f2543Smrg 151706f2543Smrgstatic void 152706f2543SmrgcwSetSpans(DrawablePtr pDst, GCPtr pGC, char *psrc, DDXPointPtr ppt, 153706f2543Smrg int *pwidth, int nspans, int fSorted) 154706f2543Smrg{ 155706f2543Smrg SETUP_BACKING_DST(pDst, pGC); 156706f2543Smrg 157706f2543Smrg PROLOGUE(pGC); 158706f2543Smrg 159706f2543Smrg CW_OFFSET_XYPOINTS(ppt, nspans); 160706f2543Smrg 161706f2543Smrg (*pBackingGC->ops->SetSpans)(pBackingDst, pBackingGC, psrc, ppt, pwidth, 162706f2543Smrg nspans, fSorted); 163706f2543Smrg 164706f2543Smrg EPILOGUE(pGC); 165706f2543Smrg} 166706f2543Smrg 167706f2543Smrgstatic void 168706f2543SmrgcwPutImage(DrawablePtr pDst, GCPtr pGC, int depth, int x, int y, int w, int h, 169706f2543Smrg int leftPad, int format, char *pBits) 170706f2543Smrg{ 171706f2543Smrg SETUP_BACKING_DST(pDst, pGC); 172706f2543Smrg 173706f2543Smrg PROLOGUE(pGC); 174706f2543Smrg 175706f2543Smrg CW_OFFSET_XY_DST(x, y); 176706f2543Smrg 177706f2543Smrg (*pBackingGC->ops->PutImage)(pBackingDst, pBackingGC, depth, x, y, w, h, 178706f2543Smrg leftPad, format, pBits); 179706f2543Smrg 180706f2543Smrg EPILOGUE(pGC); 181706f2543Smrg} 182706f2543Smrg 183706f2543Smrgstatic RegionPtr 184706f2543SmrgcwCopyArea(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, int srcx, int srcy, 185706f2543Smrg int w, int h, int dstx, int dsty) 186706f2543Smrg{ 187706f2543Smrg int odstx, odsty; 188706f2543Smrg int osrcx, osrcy; 189706f2543Smrg SETUP_BACKING_DST(pDst, pGC); 190706f2543Smrg SETUP_BACKING_SRC(pSrc, pGC); 191706f2543Smrg 192706f2543Smrg PROLOGUE(pGC); 193706f2543Smrg 194706f2543Smrg odstx = dstx; 195706f2543Smrg odsty = dsty; 196706f2543Smrg osrcx = srcx; 197706f2543Smrg osrcy = srcy; 198706f2543Smrg CW_OFFSET_XY_DST(dstx, dsty); 199706f2543Smrg CW_OFFSET_XY_SRC(srcx, srcy); 200706f2543Smrg 201706f2543Smrg (*pBackingGC->ops->CopyArea)(pBackingSrc, pBackingDst, 202706f2543Smrg pBackingGC, srcx, srcy, w, h, 203706f2543Smrg dstx, dsty); 204706f2543Smrg 205706f2543Smrg EPILOGUE(pGC); 206706f2543Smrg 207706f2543Smrg return miHandleExposures(pSrc, pDst, pGC, 208706f2543Smrg osrcx, osrcy, w, h, 209706f2543Smrg odstx, odsty, 0); 210706f2543Smrg} 211706f2543Smrg 212706f2543Smrgstatic RegionPtr 213706f2543SmrgcwCopyPlane(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, int srcx, int srcy, 214706f2543Smrg int w, int h, int dstx, int dsty, unsigned long plane) 215706f2543Smrg{ 216706f2543Smrg int odstx, odsty; 217706f2543Smrg int osrcx, osrcy; 218706f2543Smrg SETUP_BACKING_DST(pDst, pGC); 219706f2543Smrg SETUP_BACKING_SRC(pSrc, pGC); 220706f2543Smrg 221706f2543Smrg PROLOGUE(pGC); 222706f2543Smrg 223706f2543Smrg odstx = dstx; 224706f2543Smrg odsty = dsty; 225706f2543Smrg osrcx = srcx; 226706f2543Smrg osrcy = srcy; 227706f2543Smrg CW_OFFSET_XY_DST(dstx, dsty); 228706f2543Smrg CW_OFFSET_XY_SRC(srcx, srcy); 229706f2543Smrg 230706f2543Smrg (*pBackingGC->ops->CopyPlane)(pBackingSrc, pBackingDst, 231706f2543Smrg pBackingGC, srcx, srcy, w, h, 232706f2543Smrg dstx, dsty, plane); 233706f2543Smrg 234706f2543Smrg EPILOGUE(pGC); 235706f2543Smrg 236706f2543Smrg return miHandleExposures(pSrc, pDst, pGC, 237706f2543Smrg osrcx, osrcy, w, h, 238706f2543Smrg odstx, odsty, plane); 239706f2543Smrg} 240706f2543Smrg 241706f2543Smrgstatic void 242706f2543SmrgcwPolyPoint(DrawablePtr pDst, GCPtr pGC, int mode, int npt, xPoint *ppt) 243706f2543Smrg{ 244706f2543Smrg SETUP_BACKING_DST(pDst, pGC); 245706f2543Smrg 246706f2543Smrg PROLOGUE(pGC); 247706f2543Smrg 248706f2543Smrg if (mode == CoordModeOrigin) 249706f2543Smrg CW_OFFSET_XYPOINTS(ppt, npt); 250706f2543Smrg else 251706f2543Smrg CW_OFFSET_XYPOINTS(ppt, 1); 252706f2543Smrg 253706f2543Smrg (*pBackingGC->ops->PolyPoint)(pBackingDst, pBackingGC, mode, npt, ppt); 254706f2543Smrg 255706f2543Smrg EPILOGUE(pGC); 256706f2543Smrg} 257706f2543Smrg 258706f2543Smrgstatic void 259706f2543SmrgcwPolylines(DrawablePtr pDst, GCPtr pGC, int mode, int npt, DDXPointPtr ppt) 260706f2543Smrg{ 261706f2543Smrg SETUP_BACKING_DST(pDst, pGC); 262706f2543Smrg 263706f2543Smrg PROLOGUE(pGC); 264706f2543Smrg 265706f2543Smrg if (mode == CoordModeOrigin) 266706f2543Smrg CW_OFFSET_XYPOINTS(ppt, npt); 267706f2543Smrg else 268706f2543Smrg CW_OFFSET_XYPOINTS(ppt, 1); 269706f2543Smrg 270706f2543Smrg (*pBackingGC->ops->Polylines)(pBackingDst, pBackingGC, mode, npt, ppt); 271706f2543Smrg 272706f2543Smrg EPILOGUE(pGC); 273706f2543Smrg} 274706f2543Smrg 275706f2543Smrgstatic void 276706f2543SmrgcwPolySegment(DrawablePtr pDst, GCPtr pGC, int nseg, xSegment *pSegs) 277706f2543Smrg{ 278706f2543Smrg SETUP_BACKING_DST(pDst, pGC); 279706f2543Smrg 280706f2543Smrg PROLOGUE(pGC); 281706f2543Smrg 282706f2543Smrg CW_OFFSET_XYPOINTS(pSegs, nseg * 2); 283706f2543Smrg 284706f2543Smrg (*pBackingGC->ops->PolySegment)(pBackingDst, pBackingGC, nseg, pSegs); 285706f2543Smrg 286706f2543Smrg EPILOGUE(pGC); 287706f2543Smrg} 288706f2543Smrg 289706f2543Smrgstatic void 290706f2543SmrgcwPolyRectangle(DrawablePtr pDst, GCPtr pGC, int nrects, xRectangle *pRects) 291706f2543Smrg{ 292706f2543Smrg SETUP_BACKING_DST(pDst, pGC); 293706f2543Smrg 294706f2543Smrg PROLOGUE(pGC); 295706f2543Smrg 296706f2543Smrg CW_OFFSET_RECTS(pRects, nrects); 297706f2543Smrg 298706f2543Smrg (*pBackingGC->ops->PolyRectangle)(pBackingDst, pBackingGC, nrects, pRects); 299706f2543Smrg 300706f2543Smrg EPILOGUE(pGC); 301706f2543Smrg} 302706f2543Smrg 303706f2543Smrgstatic void 304706f2543SmrgcwPolyArc(DrawablePtr pDst, GCPtr pGC, int narcs, xArc *pArcs) 305706f2543Smrg{ 306706f2543Smrg SETUP_BACKING_DST(pDst, pGC); 307706f2543Smrg 308706f2543Smrg PROLOGUE(pGC); 309706f2543Smrg 310706f2543Smrg CW_OFFSET_RECTS(pArcs, narcs); 311706f2543Smrg 312706f2543Smrg (*pBackingGC->ops->PolyArc)(pBackingDst, pBackingGC, narcs, pArcs); 313706f2543Smrg 314706f2543Smrg EPILOGUE(pGC); 315706f2543Smrg} 316706f2543Smrg 317706f2543Smrgstatic void 318706f2543SmrgcwFillPolygon(DrawablePtr pDst, GCPtr pGC, int shape, int mode, int npt, 319706f2543Smrg DDXPointPtr ppt) 320706f2543Smrg{ 321706f2543Smrg SETUP_BACKING_DST(pDst, pGC); 322706f2543Smrg 323706f2543Smrg PROLOGUE(pGC); 324706f2543Smrg 325706f2543Smrg if (mode == CoordModeOrigin) 326706f2543Smrg CW_OFFSET_XYPOINTS(ppt, npt); 327706f2543Smrg else 328706f2543Smrg CW_OFFSET_XYPOINTS(ppt, 1); 329706f2543Smrg 330706f2543Smrg (*pBackingGC->ops->FillPolygon)(pBackingDst, pBackingGC, shape, mode, npt, 331706f2543Smrg ppt); 332706f2543Smrg 333706f2543Smrg EPILOGUE(pGC); 334706f2543Smrg} 335706f2543Smrg 336706f2543Smrgstatic void 337706f2543SmrgcwPolyFillRect(DrawablePtr pDst, GCPtr pGC, int nrects, xRectangle *pRects) 338706f2543Smrg{ 339706f2543Smrg SETUP_BACKING_DST(pDst, pGC); 340706f2543Smrg 341706f2543Smrg PROLOGUE(pGC); 342706f2543Smrg 343706f2543Smrg CW_OFFSET_RECTS(pRects, nrects); 344706f2543Smrg 345706f2543Smrg (*pBackingGC->ops->PolyFillRect)(pBackingDst, pBackingGC, nrects, pRects); 346706f2543Smrg 347706f2543Smrg EPILOGUE(pGC); 348706f2543Smrg} 349706f2543Smrg 350706f2543Smrgstatic void 351706f2543SmrgcwPolyFillArc(DrawablePtr pDst, GCPtr pGC, int narcs, xArc *parcs) 352706f2543Smrg{ 353706f2543Smrg SETUP_BACKING_DST(pDst, pGC); 354706f2543Smrg 355706f2543Smrg PROLOGUE(pGC); 356706f2543Smrg 357706f2543Smrg CW_OFFSET_RECTS(parcs, narcs); 358706f2543Smrg 359706f2543Smrg (*pBackingGC->ops->PolyFillArc)(pBackingDst, pBackingGC, narcs, parcs); 360706f2543Smrg 361706f2543Smrg EPILOGUE(pGC); 362706f2543Smrg} 363706f2543Smrg 364706f2543Smrgstatic int 365706f2543SmrgcwPolyText8(DrawablePtr pDst, GCPtr pGC, int x, int y, int count, char *chars) 366706f2543Smrg{ 367706f2543Smrg int result; 368706f2543Smrg SETUP_BACKING_DST(pDst, pGC); 369706f2543Smrg 370706f2543Smrg PROLOGUE(pGC); 371706f2543Smrg 372706f2543Smrg CW_OFFSET_XY_DST(x, y); 373706f2543Smrg 374706f2543Smrg result = (*pBackingGC->ops->PolyText8)(pBackingDst, pBackingGC, x, y, 375706f2543Smrg count, chars); 376706f2543Smrg 377706f2543Smrg EPILOGUE(pGC); 378706f2543Smrg 379706f2543Smrg return result; 380706f2543Smrg} 381706f2543Smrg 382706f2543Smrgstatic int 383706f2543SmrgcwPolyText16(DrawablePtr pDst, GCPtr pGC, int x, int y, int count, 384706f2543Smrg unsigned short *chars) 385706f2543Smrg{ 386706f2543Smrg int result; 387706f2543Smrg SETUP_BACKING_DST(pDst, pGC); 388706f2543Smrg 389706f2543Smrg PROLOGUE(pGC); 390706f2543Smrg 391706f2543Smrg CW_OFFSET_XY_DST(x, y); 392706f2543Smrg 393706f2543Smrg result = (*pBackingGC->ops->PolyText16)(pBackingDst, pBackingGC, x, y, 394706f2543Smrg count, chars); 395706f2543Smrg 396706f2543Smrg EPILOGUE(pGC); 397706f2543Smrg return result; 398706f2543Smrg} 399706f2543Smrg 400706f2543Smrgstatic void 401706f2543SmrgcwImageText8(DrawablePtr pDst, GCPtr pGC, int x, int y, int count, char *chars) 402706f2543Smrg{ 403706f2543Smrg SETUP_BACKING_DST(pDst, pGC); 404706f2543Smrg 405706f2543Smrg PROLOGUE(pGC); 406706f2543Smrg 407706f2543Smrg CW_OFFSET_XY_DST(x, y); 408706f2543Smrg 409706f2543Smrg (*pBackingGC->ops->ImageText8)(pBackingDst, pBackingGC, x, y, count, 410706f2543Smrg chars); 411706f2543Smrg 412706f2543Smrg EPILOGUE(pGC); 413706f2543Smrg} 414706f2543Smrg 415706f2543Smrgstatic void 416706f2543SmrgcwImageText16(DrawablePtr pDst, GCPtr pGC, int x, int y, int count, 417706f2543Smrg unsigned short *chars) 418706f2543Smrg{ 419706f2543Smrg SETUP_BACKING_DST(pDst, pGC); 420706f2543Smrg 421706f2543Smrg PROLOGUE(pGC); 422706f2543Smrg 423706f2543Smrg CW_OFFSET_XY_DST(x, y); 424706f2543Smrg 425706f2543Smrg (*pBackingGC->ops->ImageText16)(pBackingDst, pBackingGC, x, y, count, 426706f2543Smrg chars); 427706f2543Smrg 428706f2543Smrg EPILOGUE(pGC); 429706f2543Smrg} 430706f2543Smrg 431706f2543Smrgstatic void 432706f2543SmrgcwImageGlyphBlt(DrawablePtr pDst, GCPtr pGC, int x, int y, unsigned int nglyph, 433706f2543Smrg CharInfoPtr *ppci, pointer pglyphBase) 434706f2543Smrg{ 435706f2543Smrg SETUP_BACKING_DST(pDst, pGC); 436706f2543Smrg 437706f2543Smrg PROLOGUE(pGC); 438706f2543Smrg 439706f2543Smrg CW_OFFSET_XY_DST(x, y); 440706f2543Smrg 441706f2543Smrg (*pBackingGC->ops->ImageGlyphBlt)(pBackingDst, pBackingGC, x, y, nglyph, 442706f2543Smrg ppci, pglyphBase); 443706f2543Smrg 444706f2543Smrg EPILOGUE(pGC); 445706f2543Smrg} 446706f2543Smrg 447706f2543Smrgstatic void 448706f2543SmrgcwPolyGlyphBlt(DrawablePtr pDst, GCPtr pGC, int x, int y, unsigned int nglyph, 449706f2543Smrg CharInfoPtr *ppci, pointer pglyphBase) 450706f2543Smrg{ 451706f2543Smrg SETUP_BACKING_DST(pDst, pGC); 452706f2543Smrg 453706f2543Smrg PROLOGUE(pGC); 454706f2543Smrg 455706f2543Smrg CW_OFFSET_XY_DST(x, y); 456706f2543Smrg 457706f2543Smrg (*pBackingGC->ops->PolyGlyphBlt)(pBackingDst, pBackingGC, x, y, nglyph, 458706f2543Smrg ppci, pglyphBase); 459706f2543Smrg 460706f2543Smrg EPILOGUE(pGC); 461706f2543Smrg} 462706f2543Smrg 463706f2543Smrgstatic void 464706f2543SmrgcwPushPixels(GCPtr pGC, PixmapPtr pBitMap, DrawablePtr pDst, int w, int h, 465706f2543Smrg int x, int y) 466706f2543Smrg{ 467706f2543Smrg SETUP_BACKING_DST(pDst, pGC); 468706f2543Smrg 469706f2543Smrg PROLOGUE(pGC); 470706f2543Smrg 471706f2543Smrg CW_OFFSET_XY_DST(x, y); 472706f2543Smrg 473706f2543Smrg (*pBackingGC->ops->PushPixels)(pBackingGC, pBitMap, pBackingDst, w, h, 474706f2543Smrg x, y); 475706f2543Smrg 476706f2543Smrg EPILOGUE(pGC); 477706f2543Smrg} 478706f2543Smrg 479