diff --git a/xorg/X11R7.6/rdp/gcops.h b/xorg/X11R7.6/rdp/gcops.h index 24aa8740..8d7b5d48 100644 --- a/xorg/X11R7.6/rdp/gcops.h +++ b/xorg/X11R7.6/rdp/gcops.h @@ -33,6 +33,3 @@ static void rdpDestroyClip(GCPtr pGC); static void rdpCopyClip(GCPtr dst, GCPtr src); -static void -rdpPushPixels(GCPtr pGC, PixmapPtr pBitMap, DrawablePtr pDst, - int w, int h, int x, int y); diff --git a/xorg/X11R7.6/rdp/rdpdraw.c b/xorg/X11R7.6/rdp/rdpdraw.c index 6f7e4962..e393e88c 100644 --- a/xorg/X11R7.6/rdp/rdpdraw.c +++ b/xorg/X11R7.6/rdp/rdpdraw.c @@ -54,12 +54,19 @@ Xserver drawing ops and funcs #define DEBUG_OUT_OPS(arg) ErrorF arg #endif +#define LOG_LEVEL 1 +#define LLOG(_level, _args) \ + do { if (_level < LOG_LEVEL) { ErrorF _args ; } } while (0) +#define LLOGLN(_level, _args) \ + do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0) + extern rdpScreenInfoRec g_rdpScreen; /* from rdpmain.c */ extern DevPrivateKeyRec g_rdpGCIndex; /* from rdpmain.c */ extern DevPrivateKeyRec g_rdpWindowIndex; /* from rdpmain.c */ extern DevPrivateKeyRec g_rdpPixmapIndex; /* from rdpmain.c */ extern int g_Bpp; /* from rdpmain.c */ extern ScreenPtr g_pScreen; /* from rdpmain.c */ +extern Bool g_wrapPixmap; /* from rdpmain.c */ ColormapPtr g_rdpInstalledColormap; @@ -91,7 +98,34 @@ rdp_get_clip(RegionPtr pRegion, DrawablePtr pDrawable, GCPtr pGC) int rv; rv = 0; - if (pDrawable->type == DRAWABLE_WINDOW) + if (pDrawable->type == DRAWABLE_PIXMAP) + { + switch (pGC->clientClipType) + { + case CT_NONE: + rv = 1; + break; + case CT_REGION: + rv = 2; + RegionCopy(pRegion, pGC->clientClip); + break; + default: + rdpLog("unimp clip type %d\n", pGC->clientClipType); + break; + } + if (rv == 2) /* check if the clip is the entire pixmap */ + { + box.x1 = 0; + box.y1 = 0; + box.x2 = pDrawable->width; + box.y2 = pDrawable->height; + if (RegionContainsRect(pRegion, &box) == rgnIN) + { + rv = 1; + } + } + } + else if (pDrawable->type == DRAWABLE_WINDOW) { pWindow = (WindowPtr)pDrawable; if (pWindow->viewable) @@ -213,27 +247,34 @@ static void rdpValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr d) { rdpGCRec* priv; - int viewable; + int wrap; RegionPtr pRegion; - DEBUG_OUT_FUNCS(("in rdpValidateGC\n")); + LLOGLN(10, ("rdpValidateGC:")); GC_FUNC_PROLOGUE(pGC); pGC->funcs->ValidateGC(pGC, changes, d); - viewable = d->type == DRAWABLE_WINDOW && ((WindowPtr)d)->viewable; - if (viewable) + if (g_wrapPixmap) { - if (pGC->subWindowMode == IncludeInferiors) - { - pRegion = &(((WindowPtr)d)->borderClip); - } - else + wrap = 1; + } + else + { + wrap = (d->type == DRAWABLE_WINDOW) && ((WindowPtr)d)->viewable; + if (wrap) { - pRegion = &(((WindowPtr)d)->clipList); + if (pGC->subWindowMode == IncludeInferiors) + { + pRegion = &(((WindowPtr)d)->borderClip); + } + else + { + pRegion = &(((WindowPtr)d)->clipList); + } + wrap = RegionNotEmpty(pRegion); } - viewable = RegionNotEmpty(pRegion); } priv->ops = 0; - if (viewable) + if (wrap) { priv->ops = pGC->ops; } @@ -351,15 +392,17 @@ rdpCreatePixmap(ScreenPtr pScreen, int width, int height, int depth, { PixmapPtr rv; rdpPixmapRec* priv; + int org_width; - //ErrorF("rdpCreatePixmap:\n"); - //ErrorF(" in width %d height %d depth %d\n", width, height, depth); + org_width = width; + width = (width + 3) & ~3; + LLOGLN(10, ("rdpCreatePixmap: width %d org_width %d", width, org_width)); pScreen->CreatePixmap = g_rdpScreen.CreatePixmap; rv = pScreen->CreatePixmap(pScreen, width, height, depth, usage_hint); priv = GETPIXPRIV(rv); + priv->status = 1; pScreen->CreatePixmap = rdpCreatePixmap; - //ErrorF(" out width %d height %d depth %d\n", rv->drawable.width, - // rv->drawable.height, rv->drawable.depth); + pScreen->ModifyPixmapHeader(rv, org_width, 0, 0, 0, 0, 0); return rv; } diff --git a/xorg/X11R7.6/rdp/rdpmain.c b/xorg/X11R7.6/rdp/rdpmain.c index 8e9117fb..f95a718a 100644 --- a/xorg/X11R7.6/rdp/rdpmain.c +++ b/xorg/X11R7.6/rdp/rdpmain.c @@ -43,7 +43,7 @@ DeviceIntPtr g_pointer = 0; DeviceIntPtr g_keyboard = 0; Bool g_wrapWindow = 0; -Bool g_wrapPixmap = 0; +Bool g_wrapPixmap = 1; /* if true, use a unix domain socket instead of a tcp socket */ int g_use_uds = 0;