From cd077979ebeb81a6e85a9ba7f9c463beda1606ba Mon Sep 17 00:00:00 2001 From: Jay Sorg Date: Thu, 30 Jul 2015 14:09:00 -0700 Subject: [PATCH] fix for clientClipType removed in newer xorg versions --- module/rdpDraw.c | 64 +++++++++++++++++++++++++++++++------------------------- 1 file changed, 35 insertions(+), 29 deletions(-) diff --git a/module/rdpDraw.c b/module/rdpDraw.c index 5772923..605c511 100644 --- a/xorgxrdp/module/rdpDraw.c +++ b/xorgxrdp/module/rdpDraw.c @@ -50,6 +50,21 @@ misc draw calls #define LLOGLN(_level, _args) \ do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0) +#if !defined(XORG_VERSION_CURRENT) +#warning XORG_VERSION_CURRENT not defined +#endif + +/******************************************************************************/ +static int +is_clientClip_region(GCPtr gc) +{ +#if XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(1, 16, 99, 901, 0) + return gc->clientClipType == CT_REGION; +#else + return gc->clientClip != NULL; +#endif +} + /******************************************************************************/ /* return 0, draw nothing */ /* return 1, draw with no clip */ @@ -66,19 +81,15 @@ rdpDrawGetClip(rdpPtr dev, RegionPtr pRegion, DrawablePtr pDrawable, GCPtr pGC) if (pDrawable->type == DRAWABLE_PIXMAP) { - switch (pGC->clientClipType) + if (is_clientClip_region(pGC)) { - case CT_NONE: - rv = 1; - break; - case CT_REGION: - rv = 2; - rdpRegionCopy(pRegion, pGC->clientClip); - break; - default: - LLOGLN(0, ("rdpDrawGetClip: unimp clip type %d", - pGC->clientClipType)); - break; + miComputeCompositeClip(pGC, pDrawable); + RegionCopy(pRegion, pGC->pCompositeClip); + rv = 2; + } + else + { + rv = 1; } if (rv == 2) /* check if the clip is the entire pixmap */ @@ -111,24 +122,19 @@ rdpDrawGetClip(rdpPtr dev, RegionPtr pRegion, DrawablePtr pDrawable, GCPtr pGC) if (rdpRegionNotEmpty(temp)) { - switch (pGC->clientClipType) + if (is_clientClip_region(pGC)) + { + rdpRegionCopy(pRegion, pGC->clientClip); + rdpRegionTranslate(pRegion, + pDrawable->x + pGC->clipOrg.x, + pDrawable->y + pGC->clipOrg.y); + rdpRegionIntersect(pRegion, pRegion, temp); + rv = 2; + } + else { - case CT_NONE: - rv = 2; - rdpRegionCopy(pRegion, temp); - break; - case CT_REGION: - rv = 2; - rdpRegionCopy(pRegion, pGC->clientClip); - rdpRegionTranslate(pRegion, - pDrawable->x + pGC->clipOrg.x, - pDrawable->y + pGC->clipOrg.y); - rdpRegionIntersect(pRegion, pRegion, temp); - break; - default: - LLOGLN(0, ("rdpDrawGetClip: unimp clip type %d", - pGC->clientClipType)); - break; + rdpRegionCopy(pRegion, temp); + rv = 2; } if (rv == 2) /* check if the clip is the entire screen */