diff options
Diffstat (limited to 'xorg-server/miext/rootless/rootlessGC.c')
-rw-r--r-- | xorg-server/miext/rootless/rootlessGC.c | 79 |
1 files changed, 55 insertions, 24 deletions
diff --git a/xorg-server/miext/rootless/rootlessGC.c b/xorg-server/miext/rootless/rootlessGC.c index c80b11f1d..d60cd270c 100644 --- a/xorg-server/miext/rootless/rootlessGC.c +++ b/xorg-server/miext/rootless/rootlessGC.c @@ -61,6 +61,8 @@ static void RootlessChangeClip(GCPtr pGC, int type, pointer pvalue, static void RootlessDestroyClip(GCPtr pGC); static void RootlessCopyClip(GCPtr pgcDst, GCPtr pgcSrc); +Bool RootlessCreateGC(GCPtr pGC); + GCFuncs rootlessGCFuncs = { RootlessValidateGC, RootlessChangeGC, @@ -72,26 +74,55 @@ GCFuncs rootlessGCFuncs = { }; // GC operations -static void RootlessFillSpans(); -static void RootlessSetSpans(); -static void RootlessPutImage(); -static RegionPtr RootlessCopyArea(); -static RegionPtr RootlessCopyPlane(); -static void RootlessPolyPoint(); -static void RootlessPolylines(); -static void RootlessPolySegment(); -static void RootlessPolyRectangle(); -static void RootlessPolyArc(); -static void RootlessFillPolygon(); -static void RootlessPolyFillRect(); -static void RootlessPolyFillArc(); -static int RootlessPolyText8(); -static int RootlessPolyText16(); -static void RootlessImageText8(); -static void RootlessImageText16(); -static void RootlessImageGlyphBlt(); -static void RootlessPolyGlyphBlt(); -static void RootlessPushPixels(); +static void RootlessFillSpans(DrawablePtr dst, GCPtr pGC, int nInit, + DDXPointPtr pptInit, int *pwidthInit, + int sorted); +static void RootlessSetSpans(DrawablePtr dst, GCPtr pGC, char *pSrc, + DDXPointPtr pptInit, int *pwidthInit, + int nspans, int sorted); +static void RootlessPutImage(DrawablePtr dst, GCPtr pGC, + int depth, int x, int y, int w, int h, + int leftPad, int format, char *pBits); +static RegionPtr RootlessCopyArea(DrawablePtr pSrc, DrawablePtr dst, GCPtr pGC, + int srcx, int srcy, int w, int h, + int dstx, int dsty); +static RegionPtr RootlessCopyPlane(DrawablePtr pSrc, DrawablePtr dst, + GCPtr pGC, int srcx, int srcy, + int w, int h, int dstx, int dsty, + unsigned long plane); +static void RootlessPolyPoint(DrawablePtr dst, GCPtr pGC, + int mode, int npt, DDXPointPtr pptInit); +static void RootlessPolylines(DrawablePtr dst, GCPtr pGC, + int mode, int npt, DDXPointPtr pptInit); +static void RootlessPolySegment(DrawablePtr dst, GCPtr pGC, + int nseg, xSegment *pSeg); +static void RootlessPolyRectangle(DrawablePtr dst, GCPtr pGC, + int nRects, xRectangle *pRects); +static void RootlessPolyArc(DrawablePtr dst, GCPtr pGC, int narcs, xArc *parcs); +static void RootlessFillPolygon(DrawablePtr dst, GCPtr pGC, + int shape, int mode, int count, + DDXPointPtr pptInit); +static void RootlessPolyFillRect(DrawablePtr dst, GCPtr pGC, + int nRectsInit, xRectangle *pRectsInit); +static void RootlessPolyFillArc(DrawablePtr dst, GCPtr pGC, + int narcsInit, xArc *parcsInit); +static int RootlessPolyText8(DrawablePtr dst, GCPtr pGC, + int x, int y, int count, char *chars); +static int RootlessPolyText16(DrawablePtr dst, GCPtr pGC, + int x, int y, int count, unsigned short *chars); +static void RootlessImageText8(DrawablePtr dst, GCPtr pGC, + int x, int y, int count, char *chars); +static void RootlessImageText16(DrawablePtr dst, GCPtr pGC, + int x, int y, int count, unsigned short *chars); +static void RootlessImageGlyphBlt(DrawablePtr dst, GCPtr pGC, + int x, int y, unsigned int nglyphInit, + CharInfoPtr *ppciInit, pointer unused); +static void RootlessPolyGlyphBlt(DrawablePtr dst, GCPtr pGC, + int x, int y, unsigned int nglyph, + CharInfoPtr *ppci, pointer pglyphBase); +static void RootlessPushPixels(GCPtr pGC, PixmapPtr pBitMap, DrawablePtr dst, + int dx, int dy, int xOrg, int yOrg); + static GCOps rootlessGCOps = { RootlessFillSpans, @@ -118,7 +149,7 @@ static GCOps rootlessGCOps = { /* There are two issues we must contend with when drawing. These are - controlled with ROOTLESS_PROTECT_ALPHA and ROOTLESS_ACCEL. + controlled with ROOTLESS_PROTECT_ALPHA and RootlessAccelInit(). If ROOTLESS_PROTECT_ALPHA is set, we have to make sure that the alpha channel of the on screen windows is always opaque. fb makes this harder @@ -141,9 +172,9 @@ static GCOps rootlessGCOps = { from another window since its alpha channel must also be opaque. The other issue to consider is that the rootless implementation may - provide accelerated drawing functions if ROOTLESS_ACCEL is set. For some - drawing primitives we swap in rootless acceleration functions, which use - the accelerated drawing functions where possible. + provide accelerated drawing functions if RootlessAccelInit() is called.For + some drawing primitives we swap in rootless acceleration functions, which + use the accelerated drawing functions where possible. Where both alpha protection and acceleration is used, it is even a bigger win to relax the planemask to all ones because most accelerated drawing |