diff --git a/xorg/server/module/Makefile b/xorg/server/module/Makefile index 93363e46..9003de4d 100644 --- a/xorg/server/module/Makefile +++ b/xorg/server/module/Makefile @@ -5,7 +5,8 @@ rdpPolyRectangle.o rdpPolyArc.o rdpFillPolygon.o rdpPolyFillRect.o \ rdpPolyFillArc.o rdpPolyText8.o rdpPolyText16.o rdpImageText8.o \ rdpImageText16.o rdpImageGlyphBlt.o rdpPolyGlyphBlt.o rdpPushPixels.o \ rdpCursor.o rdpMain.o rdpRandR.o rdpMisc.o rdpReg.o \ -rdpComposite.o rdpGlyphs.o rdpPixmap.o rdpInput.o rdpClientCon.o rdpCapture.o +rdpComposite.o rdpGlyphs.o rdpPixmap.o rdpInput.o rdpClientCon.o rdpCapture.o \ +rdpTrapezoids.o CFLAGS = -g -O2 -Wall -fPIC -I/usr/include/xorg -I/usr/include/pixman-1 \ -I../../../common diff --git a/xorg/server/module/rdpComposite.c b/xorg/server/module/rdpComposite.c index af922598..7ac6a084 100644 --- a/xorg/server/module/rdpComposite.c +++ b/xorg/server/module/rdpComposite.c @@ -32,6 +32,7 @@ composite(alpha blending) calls #include #include +#include "mipict.h" #include #include "rdp.h" @@ -105,7 +106,7 @@ rdpComposite(CARD8 op, PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst, PictureScreenPtr ps; BoxRec box; - LLOGLN(0, ("rdpComposite:")); + LLOGLN(10, ("rdpComposite:")); pScreen = pDst->pDrawable->pScreen; dev = rdpGetDevFromScreen(pScreen); dev->counts.rdpCompositeCallCount++; @@ -134,96 +135,3 @@ rdpComposite(CARD8 op, PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst, clientCon = clientCon->next; } } - -/******************************************************************************/ -static void -rdpTrapezoidsPre(rdpPtr dev, rdpClientCon *clientCon, PictureScreenPtr ps, - CARD8 op, PicturePtr pSrc, PicturePtr pDst, - PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, - int ntrap, xTrapezoid *traps, BoxPtr box) -{ -} - -/******************************************************************************/ -static void -rdpTrapezoidsOrg(PictureScreenPtr ps, rdpPtr dev, - CARD8 op, PicturePtr pSrc, PicturePtr pDst, - PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, - int ntrap, xTrapezoid *traps) -{ - ps->Trapezoids = dev->Trapezoids; - ps->Trapezoids(op, pSrc, pDst, maskFormat, xSrc, ySrc, ntrap, traps); - ps->Trapezoids = rdpTrapezoids; -} - -/******************************************************************************/ -static void -rdpTrapezoidsPost(rdpPtr dev, rdpClientCon *clientCon, PictureScreenPtr ps, - CARD8 op, PicturePtr pSrc, PicturePtr pDst, - PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, - int ntrap, xTrapezoid *traps, BoxPtr box) -{ - RegionRec reg; - - if (!XRDP_DRAWABLE_IS_VISIBLE(dev, pDst->pDrawable)) - { - return; - } - rdpRegionInit(®, box, 0); - if (pDst->pCompositeClip != 0) - { - rdpRegionIntersect(®, pDst->pCompositeClip, ®); - } - rdpClientConAddDirtyScreenReg(dev, clientCon, ®); - rdpRegionUninit(®); -} - -/******************************************************************************/ -void -rdpTrapezoids(CARD8 op, PicturePtr pSrc, PicturePtr pDst, - PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, - int ntrap, xTrapezoid *traps) -{ - ScreenPtr pScreen; - rdpPtr dev; - rdpClientCon *clientCon; - PictureScreenPtr ps; - BoxRec box; - RegionRec reg; - int index; - - LLOGLN(0, ("rdpTrapezoids:")); - pScreen = pDst->pDrawable->pScreen; - dev = rdpGetDevFromScreen(pScreen); - dev->counts.rdpTrapezoidsCallCount++; - - rdpRegionInit(®, NullBox, 0); - for (index = 0; index < ntrap; index++) - { - LLOGLN(0, (" top %d bottom %d left p1 %d %d", - traps[index].top, traps[index].bottom, - traps[index].left.p1.x, traps[index].left.p1.y)); - //box.x1 = traps[index].left + pDst->pDrawable->x; - //box.y1 = traps[index].top + pDst->pDrawable->y; - //box.x2 = traps[index].right + pDst->pDrawable->x; - //box.y2 = traps[index].bottom + pDst->pDrawable->y; - } - ps = GetPictureScreen(pScreen); - clientCon = dev->clientConHead; - while (clientCon != NULL) - { - //rdpTrapezoidsPre(dev, clientCon, ps, op, pSrc, pDst, - // maskFormat, xSrc, ySrc, ntrap, traps, &box); - clientCon = clientCon->next; - } - /* do original call */ - rdpTrapezoidsOrg(ps, dev, op, pSrc, pDst, maskFormat, xSrc, ySrc, - ntrap, traps); - clientCon = dev->clientConHead; - while (clientCon != NULL) - { - //rdpTrapezoidsPost(dev, clientCon, ps, op, pSrc, pDst, - // maskFormat, xSrc, ySrc, ntrap, traps, &box); - clientCon = clientCon->next; - } -} diff --git a/xorg/server/module/rdpComposite.h b/xorg/server/module/rdpComposite.h index 9b922e9d..017cb41d 100644 --- a/xorg/server/module/rdpComposite.h +++ b/xorg/server/module/rdpComposite.h @@ -28,9 +28,5 @@ void rdpComposite(CARD8 op, PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst, INT16 xSrc, INT16 ySrc, INT16 xMask, INT16 yMask, INT16 xDst, INT16 yDst, CARD16 width, CARD16 height); -void -rdpTrapezoids(CARD8 op, PicturePtr pSrc, PicturePtr pDst, - PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, - int ntrap, xTrapezoid *traps); #endif diff --git a/xorg/server/module/rdpPolyFillArc.c b/xorg/server/module/rdpPolyFillArc.c index 438ed7b7..4bb12746 100644 --- a/xorg/server/module/rdpPolyFillArc.c +++ b/xorg/server/module/rdpPolyFillArc.c @@ -95,7 +95,7 @@ rdpPolyFillArc(DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc *parcs) RegionRec clip_reg; RegionRec reg; - LLOGLN(0, ("rdpPolyFillArc:")); + LLOGLN(10, ("rdpPolyFillArc:")); dev = rdpGetDevFromScreen(pGC->pScreen); dev->counts.rdpPolyFillArcCallCount++; rdpRegionInit(®, NullBox, 0); diff --git a/xorg/server/module/rdpTrapezoids.c b/xorg/server/module/rdpTrapezoids.c new file mode 100644 index 00000000..491f9030 --- /dev/null +++ b/xorg/server/module/rdpTrapezoids.c @@ -0,0 +1,135 @@ +/* +Copyright 2014 Jay Sorg + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + +#include +#include +#include + +/* this should be before all X11 .h files */ +#include + +/* all driver need this */ +#include +#include + +#include "mipict.h" +#include + +#include "rdp.h" +#include "rdpDraw.h" +#include "rdpClientCon.h" +#include "rdpReg.h" +#include "rdpTrapezoids.h" + +/******************************************************************************/ +#define LOG_LEVEL 1 +#define LLOGLN(_level, _args) \ + do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0) + +/******************************************************************************/ +static void +rdpTrapezoidsPre(rdpPtr dev, rdpClientCon *clientCon, PictureScreenPtr ps, + CARD8 op, PicturePtr pSrc, PicturePtr pDst, + PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, + int ntrap, xTrapezoid *traps, BoxPtr box) +{ +} + +/******************************************************************************/ +static void +rdpTrapezoidsOrg(PictureScreenPtr ps, rdpPtr dev, + CARD8 op, PicturePtr pSrc, PicturePtr pDst, + PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, + int ntrap, xTrapezoid *traps) +{ + ps->Trapezoids = dev->Trapezoids; + ps->Trapezoids(op, pSrc, pDst, maskFormat, xSrc, ySrc, ntrap, traps); + ps->Trapezoids = rdpTrapezoids; +} + +/******************************************************************************/ +static void +rdpTrapezoidsPost(rdpPtr dev, rdpClientCon *clientCon, PictureScreenPtr ps, + CARD8 op, PicturePtr pSrc, PicturePtr pDst, + PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, + int ntrap, xTrapezoid *traps, BoxPtr box) +{ + RegionRec reg; + + if (!XRDP_DRAWABLE_IS_VISIBLE(dev, pDst->pDrawable)) + { + return; + } + rdpRegionInit(®, box, 0); + if (pDst->pCompositeClip != 0) + { + rdpRegionIntersect(®, pDst->pCompositeClip, ®); + } + rdpClientConAddDirtyScreenReg(dev, clientCon, ®); + rdpRegionUninit(®); +} + +/******************************************************************************/ +void +rdpTrapezoids(CARD8 op, PicturePtr pSrc, PicturePtr pDst, + PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, + int ntrap, xTrapezoid *traps) +{ + ScreenPtr pScreen; + rdpPtr dev; + rdpClientCon *clientCon; + PictureScreenPtr ps; + BoxRec box; + int dstx; + int dsty; + + LLOGLN(10, ("rdpTrapezoids:")); + pScreen = pDst->pDrawable->pScreen; + dev = rdpGetDevFromScreen(pScreen); + dev->counts.rdpTrapezoidsCallCount++; + dstx = traps[0].left.p1.x >> 16; + dsty = traps[0].left.p1.y >> 16; + miTrapezoidBounds(ntrap, traps, &box); + box.x1 += pDst->pDrawable->x; + box.y1 += pDst->pDrawable->y; + box.x2 += pDst->pDrawable->x; + box.y2 += pDst->pDrawable->y; + LLOGLN(10, ("%d %d %d %d %d %d", dstx, dsty, box.x1, box.y1, + box.x2, box.y2)); + ps = GetPictureScreen(pScreen); + clientCon = dev->clientConHead; + while (clientCon != NULL) + { + rdpTrapezoidsPre(dev, clientCon, ps, op, pSrc, pDst, + maskFormat, xSrc, ySrc, ntrap, traps, &box); + clientCon = clientCon->next; + } + /* do original call */ + rdpTrapezoidsOrg(ps, dev, op, pSrc, pDst, maskFormat, xSrc, ySrc, + ntrap, traps); + clientCon = dev->clientConHead; + while (clientCon != NULL) + { + rdpTrapezoidsPost(dev, clientCon, ps, op, pSrc, pDst, + maskFormat, xSrc, ySrc, ntrap, traps, &box); + clientCon = clientCon->next; + } +} diff --git a/xorg/server/module/rdpTrapezoids.h b/xorg/server/module/rdpTrapezoids.h new file mode 100644 index 00000000..77738dc4 --- /dev/null +++ b/xorg/server/module/rdpTrapezoids.h @@ -0,0 +1,30 @@ +/* +Copyright 2014 Jay Sorg + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + +#ifndef _RDPTRAPEZOIDS_H +#define _RDPTRAPEZOIDS_H + +void +rdpTrapezoids(CARD8 op, PicturePtr pSrc, PicturePtr pDst, + PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, + int ntrap, xTrapezoid *traps); + +#endif diff --git a/xorg/server/xrdpdev/xrdpdev.c b/xorg/server/xrdpdev/xrdpdev.c index 1afcdb0f..c6aa1559 100644 --- a/xorg/server/xrdpdev/xrdpdev.c +++ b/xorg/server/xrdpdev/xrdpdev.c @@ -47,6 +47,7 @@ This is the main driver file #include "rdpRandR.h" #include "rdpMisc.h" #include "rdpComposite.h" +#include "rdpTrapezoids.h" #include "rdpGlyphs.h" #include "rdpPixmap.h" #include "rdpClientCon.h"