xorg: work on offscreen bitmaps
This commit is contained in:
parent
bdc2c51fee
commit
26b42fa843
@ -9,7 +9,10 @@ XSRCBASE = ../build_dir/xorg-server-1.9.3
|
|||||||
OBJS = rdpmain.o rdpdraw.o rdpinput.o rdpmisc.o rdpup.o rdprandr.o \
|
OBJS = rdpmain.o rdpdraw.o rdpinput.o rdpmisc.o rdpup.o rdprandr.o \
|
||||||
rdpCopyArea.o rdpPolyFillRect.o rdpPutImage.o rdpPolyRectangle.o \
|
rdpCopyArea.o rdpPolyFillRect.o rdpPutImage.o rdpPolyRectangle.o \
|
||||||
rdpPolylines.o rdpPolySegment.o rdpFillSpans.o rdpSetSpans.o \
|
rdpPolylines.o rdpPolySegment.o rdpFillSpans.o rdpSetSpans.o \
|
||||||
rdpCopyPlane.o \
|
rdpCopyPlane.o rdpPolyPoint.o rdpPolyArc.o rdpFillPolygon.o \
|
||||||
|
rdpPolyFillArc.o rdpPolyText8.o rdpPolyText16.o \
|
||||||
|
rdpImageText8.o rdpImageText16.o rdpImageGlyphBlt.o rdpPolyGlyphBlt.o \
|
||||||
|
rdpPushPixels.o \
|
||||||
miinitext.o \
|
miinitext.o \
|
||||||
fbcmap_mi.o
|
fbcmap_mi.o
|
||||||
|
|
||||||
|
@ -33,43 +33,6 @@ static void
|
|||||||
rdpDestroyClip(GCPtr pGC);
|
rdpDestroyClip(GCPtr pGC);
|
||||||
static void
|
static void
|
||||||
rdpCopyClip(GCPtr dst, GCPtr src);
|
rdpCopyClip(GCPtr dst, GCPtr src);
|
||||||
static RegionPtr
|
|
||||||
rdpCopyPlane(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable,
|
|
||||||
GCPtr pGC, int srcx, int srcy, int width, int height,
|
|
||||||
int dstx, int dsty, unsigned long bitPlane);
|
|
||||||
static void
|
|
||||||
rdpPolyPoint(DrawablePtr pDrawable, GCPtr pGC, int mode,
|
|
||||||
int npt, DDXPointPtr pptInit);
|
|
||||||
static void
|
|
||||||
rdpPolyArc(DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc * parcs);
|
|
||||||
static void
|
|
||||||
rdpFillPolygon(DrawablePtr pDrawable, GCPtr pGC,
|
|
||||||
int shape, int mode, int count,
|
|
||||||
DDXPointPtr pPts);
|
|
||||||
static void
|
|
||||||
rdpPolyFillArc(DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc * parcs);
|
|
||||||
static int
|
|
||||||
rdpPolyText8(DrawablePtr pDrawable, GCPtr pGC,
|
|
||||||
int x, int y, int count, char * chars);
|
|
||||||
static int
|
|
||||||
rdpPolyText16(DrawablePtr pDrawable, GCPtr pGC,
|
|
||||||
int x, int y, int count, unsigned short * chars);
|
|
||||||
static void
|
|
||||||
rdpImageText8(DrawablePtr pDrawable, GCPtr pGC,
|
|
||||||
int x, int y, int count, char * chars);
|
|
||||||
static void
|
|
||||||
rdpImageText16(DrawablePtr pDrawable, GCPtr pGC,
|
|
||||||
int x, int y, int count,
|
|
||||||
unsigned short * chars);
|
|
||||||
static void
|
|
||||||
rdpImageGlyphBlt(DrawablePtr pDrawable, GCPtr pGC,
|
|
||||||
int x, int y, unsigned int nglyph,
|
|
||||||
CharInfoPtr * ppci, pointer pglyphBase);
|
|
||||||
static void
|
|
||||||
rdpPolyGlyphBlt(DrawablePtr pDrawable, GCPtr pGC,
|
|
||||||
int x, int y, unsigned int nglyph,
|
|
||||||
CharInfoPtr * ppci,
|
|
||||||
pointer pglyphBase);
|
|
||||||
static void
|
static void
|
||||||
rdpPushPixels(GCPtr pGC, PixmapPtr pBitMap, DrawablePtr pDst,
|
rdpPushPixels(GCPtr pGC, PixmapPtr pBitMap, DrawablePtr pDst,
|
||||||
int w, int h, int x, int y);
|
int w, int h, int x, int y);
|
||||||
|
180
xorg/X11R7.6/rdp/rdpFillPolygon.c
Normal file
180
xorg/X11R7.6/rdp/rdpFillPolygon.c
Normal file
@ -0,0 +1,180 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2005-2012 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 "rdp.h"
|
||||||
|
#include "rdpdraw.h"
|
||||||
|
|
||||||
|
#define LDEBUG 0
|
||||||
|
|
||||||
|
#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 */
|
||||||
|
|
||||||
|
extern GCOps g_rdpGCOps; /* from rdpdraw.c */
|
||||||
|
|
||||||
|
extern int g_con_number; /* in rdpup.c */
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
void
|
||||||
|
rdpFillPolygonOrg(DrawablePtr pDrawable, GCPtr pGC,
|
||||||
|
int shape, int mode, int count,
|
||||||
|
DDXPointPtr pPts)
|
||||||
|
{
|
||||||
|
rdpGCPtr priv;
|
||||||
|
GCFuncs* oldFuncs;
|
||||||
|
|
||||||
|
GC_OP_PROLOGUE(pGC);
|
||||||
|
pGC->ops->FillPolygon(pDrawable, pGC, shape, mode, count, pPts);
|
||||||
|
GC_OP_EPILOGUE(pGC);
|
||||||
|
}
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
void
|
||||||
|
rdpFillPolygon(DrawablePtr pDrawable, GCPtr pGC,
|
||||||
|
int shape, int mode, int count,
|
||||||
|
DDXPointPtr pPts)
|
||||||
|
{
|
||||||
|
RegionRec clip_reg;
|
||||||
|
RegionRec box_reg;
|
||||||
|
int num_clips;
|
||||||
|
int cd;
|
||||||
|
int maxx;
|
||||||
|
int maxy;
|
||||||
|
int minx;
|
||||||
|
int miny;
|
||||||
|
int i;
|
||||||
|
int j;
|
||||||
|
int got_id;
|
||||||
|
BoxRec box;
|
||||||
|
struct image_data id;
|
||||||
|
WindowPtr pDstWnd;
|
||||||
|
PixmapPtr pDstPixmap;
|
||||||
|
rdpPixmapRec* pDstPriv;
|
||||||
|
|
||||||
|
LLOGLN(10, ("rdpFillPolygon:"));
|
||||||
|
|
||||||
|
/* do original call */
|
||||||
|
rdpFillPolygonOrg(pDrawable, pGC, shape, mode, count, pPts);
|
||||||
|
|
||||||
|
got_id = 0;
|
||||||
|
if (pDrawable->type == DRAWABLE_PIXMAP)
|
||||||
|
{
|
||||||
|
pDstPixmap = (PixmapPtr)pDrawable;
|
||||||
|
pDstPriv = GETPIXPRIV(pDstPixmap);
|
||||||
|
if (XRDP_IS_OS(pDstPriv))
|
||||||
|
{
|
||||||
|
rdpup_switch_os_surface(pDstPriv->rdpid);
|
||||||
|
rdpup_get_pixmap_image_rect(pDstPixmap, &id);
|
||||||
|
got_id = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (pDrawable->type == DRAWABLE_WINDOW)
|
||||||
|
{
|
||||||
|
pDstWnd = (WindowPtr)pDrawable;
|
||||||
|
if (pDstWnd->viewable)
|
||||||
|
{
|
||||||
|
rdpup_get_screen_image_rect(&id);
|
||||||
|
got_id = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!got_id)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
RegionInit(&clip_reg, NullBox, 0);
|
||||||
|
cd = rdp_get_clip(&clip_reg, pDrawable, pGC);
|
||||||
|
if (cd != 0)
|
||||||
|
{
|
||||||
|
box.x1 = 0;
|
||||||
|
box.y1 = 0;
|
||||||
|
box.x2 = 0;
|
||||||
|
box.y2 = 0;
|
||||||
|
if (count > 0)
|
||||||
|
{
|
||||||
|
maxx = pPts[0].x;
|
||||||
|
maxy = pPts[0].y;
|
||||||
|
minx = maxx;
|
||||||
|
miny = maxy;
|
||||||
|
for (i = 1; i < count; i++)
|
||||||
|
{
|
||||||
|
if (pPts[i].x > maxx)
|
||||||
|
{
|
||||||
|
maxx = pPts[i].x;
|
||||||
|
}
|
||||||
|
if (pPts[i].x < minx)
|
||||||
|
{
|
||||||
|
minx = pPts[i].x;
|
||||||
|
}
|
||||||
|
if (pPts[i].y > maxy)
|
||||||
|
{
|
||||||
|
maxy = pPts[i].y;
|
||||||
|
}
|
||||||
|
if (pPts[i].y < miny)
|
||||||
|
{
|
||||||
|
miny = pPts[i].y;
|
||||||
|
}
|
||||||
|
box.x1 = pDrawable->x + minx;
|
||||||
|
box.y1 = pDrawable->y + miny;
|
||||||
|
box.x2 = pDrawable->x + maxx + 1;
|
||||||
|
box.y2 = pDrawable->y + maxy + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (cd == 1)
|
||||||
|
{
|
||||||
|
rdpup_begin_update();
|
||||||
|
rdpup_send_area(&id, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
||||||
|
rdpup_end_update();
|
||||||
|
}
|
||||||
|
else if (cd == 2)
|
||||||
|
{
|
||||||
|
RegionInit(&box_reg, &box, 0);
|
||||||
|
RegionIntersect(&clip_reg, &clip_reg, &box_reg);
|
||||||
|
num_clips = REGION_NUM_RECTS(&clip_reg);
|
||||||
|
if (num_clips > 0)
|
||||||
|
{
|
||||||
|
rdpup_begin_update();
|
||||||
|
for (j = num_clips - 1; j >= 0; j--)
|
||||||
|
{
|
||||||
|
box = REGION_RECTS(&clip_reg)[j];
|
||||||
|
rdpup_send_area(&id, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
||||||
|
}
|
||||||
|
rdpup_end_update();
|
||||||
|
}
|
||||||
|
RegionUninit(&box_reg);
|
||||||
|
}
|
||||||
|
RegionUninit(&clip_reg);
|
||||||
|
rdpup_switch_os_surface(-1);
|
||||||
|
}
|
30
xorg/X11R7.6/rdp/rdpFillPolygon.h
Normal file
30
xorg/X11R7.6/rdp/rdpFillPolygon.h
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2005-2012 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 __RDPFILLPOLYGON_H
|
||||||
|
#define __RDPFILLPOLYGON_H
|
||||||
|
|
||||||
|
void
|
||||||
|
rdpFillPolygon(DrawablePtr pDrawable, GCPtr pGC,
|
||||||
|
int shape, int mode, int count,
|
||||||
|
DDXPointPtr pPts);
|
||||||
|
|
||||||
|
#endif
|
@ -62,9 +62,7 @@ rdpFillSpans(DrawablePtr pDrawable, GCPtr pGC, int nInit,
|
|||||||
{
|
{
|
||||||
RegionRec clip_reg;
|
RegionRec clip_reg;
|
||||||
int cd;
|
int cd;
|
||||||
int j;
|
|
||||||
int got_id;
|
int got_id;
|
||||||
BoxRec box;
|
|
||||||
struct image_data id;
|
struct image_data id;
|
||||||
WindowPtr pDstWnd;
|
WindowPtr pDstWnd;
|
||||||
PixmapPtr pDstPixmap;
|
PixmapPtr pDstPixmap;
|
||||||
|
151
xorg/X11R7.6/rdp/rdpImageGlyphBlt.c
Normal file
151
xorg/X11R7.6/rdp/rdpImageGlyphBlt.c
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2005-2012 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 "rdp.h"
|
||||||
|
#include "rdpdraw.h"
|
||||||
|
|
||||||
|
#define LDEBUG 0
|
||||||
|
|
||||||
|
#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 */
|
||||||
|
|
||||||
|
extern GCOps g_rdpGCOps; /* from rdpdraw.c */
|
||||||
|
|
||||||
|
extern int g_con_number; /* in rdpup.c */
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
void
|
||||||
|
rdpImageGlyphBltOrg(DrawablePtr pDrawable, GCPtr pGC,
|
||||||
|
int x, int y, unsigned int nglyph,
|
||||||
|
CharInfoPtr* ppci, pointer pglyphBase)
|
||||||
|
{
|
||||||
|
rdpGCPtr priv;
|
||||||
|
GCFuncs* oldFuncs;
|
||||||
|
|
||||||
|
GC_OP_PROLOGUE(pGC);
|
||||||
|
pGC->ops->ImageGlyphBlt(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase);
|
||||||
|
GC_OP_EPILOGUE(pGC);
|
||||||
|
}
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
void
|
||||||
|
rdpImageGlyphBlt(DrawablePtr pDrawable, GCPtr pGC,
|
||||||
|
int x, int y, unsigned int nglyph,
|
||||||
|
CharInfoPtr* ppci, pointer pglyphBase)
|
||||||
|
{
|
||||||
|
RegionRec reg;
|
||||||
|
RegionRec reg1;
|
||||||
|
int num_clips;
|
||||||
|
int cd;
|
||||||
|
int j;
|
||||||
|
int got_id;
|
||||||
|
BoxRec box;
|
||||||
|
struct image_data id;
|
||||||
|
WindowPtr pDstWnd;
|
||||||
|
PixmapPtr pDstPixmap;
|
||||||
|
rdpPixmapRec* pDstPriv;
|
||||||
|
|
||||||
|
LLOGLN(10, ("rdpImageGlyphBlt:"));
|
||||||
|
|
||||||
|
if (nglyph != 0)
|
||||||
|
{
|
||||||
|
GetTextBoundingBox(pDrawable, pGC->font, x, y, nglyph, &box);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* do original call */
|
||||||
|
rdpImageGlyphBltOrg(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase);
|
||||||
|
|
||||||
|
got_id = 0;
|
||||||
|
if (pDrawable->type == DRAWABLE_PIXMAP)
|
||||||
|
{
|
||||||
|
pDstPixmap = (PixmapPtr)pDrawable;
|
||||||
|
pDstPriv = GETPIXPRIV(pDstPixmap);
|
||||||
|
if (XRDP_IS_OS(pDstPriv))
|
||||||
|
{
|
||||||
|
rdpup_switch_os_surface(pDstPriv->rdpid);
|
||||||
|
rdpup_get_pixmap_image_rect(pDstPixmap, &id);
|
||||||
|
got_id = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (pDrawable->type == DRAWABLE_WINDOW)
|
||||||
|
{
|
||||||
|
pDstWnd = (WindowPtr)pDrawable;
|
||||||
|
if (pDstWnd->viewable)
|
||||||
|
{
|
||||||
|
rdpup_get_screen_image_rect(&id);
|
||||||
|
got_id = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!got_id)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
RegionInit(®, NullBox, 0);
|
||||||
|
if (nglyph == 0)
|
||||||
|
{
|
||||||
|
cd = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cd = rdp_get_clip(®, pDrawable, pGC);
|
||||||
|
}
|
||||||
|
if (cd == 1)
|
||||||
|
{
|
||||||
|
rdpup_begin_update();
|
||||||
|
rdpup_send_area(&id, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
||||||
|
rdpup_end_update();
|
||||||
|
}
|
||||||
|
else if (cd == 2)
|
||||||
|
{
|
||||||
|
RegionInit(®1, &box, 0);
|
||||||
|
RegionIntersect(®, ®, ®1);
|
||||||
|
num_clips = REGION_NUM_RECTS(®);
|
||||||
|
if (num_clips > 0)
|
||||||
|
{
|
||||||
|
rdpup_begin_update();
|
||||||
|
for (j = num_clips - 1; j >= 0; j--)
|
||||||
|
{
|
||||||
|
box = REGION_RECTS(®)[j];
|
||||||
|
rdpup_send_area(&id, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
||||||
|
}
|
||||||
|
rdpup_end_update();
|
||||||
|
}
|
||||||
|
RegionUninit(®1);
|
||||||
|
}
|
||||||
|
RegionUninit(®);
|
||||||
|
rdpup_switch_os_surface(-1);
|
||||||
|
return;
|
||||||
|
}
|
30
xorg/X11R7.6/rdp/rdpImageGlyphBlt.h
Normal file
30
xorg/X11R7.6/rdp/rdpImageGlyphBlt.h
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2005-2012 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 __RDPIMAGEGLYPHBLT_H
|
||||||
|
#define __RDPIMAGEGLYPHBLT_H
|
||||||
|
|
||||||
|
void
|
||||||
|
rdpImageGlyphBlt(DrawablePtr pDrawable, GCPtr pGC,
|
||||||
|
int x, int y, unsigned int nglyph,
|
||||||
|
CharInfoPtr* ppci, pointer pglyphBase);
|
||||||
|
|
||||||
|
#endif
|
149
xorg/X11R7.6/rdp/rdpImageText16.c
Normal file
149
xorg/X11R7.6/rdp/rdpImageText16.c
Normal file
@ -0,0 +1,149 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2005-2012 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 "rdp.h"
|
||||||
|
#include "rdpdraw.h"
|
||||||
|
|
||||||
|
#define LDEBUG 0
|
||||||
|
|
||||||
|
#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 */
|
||||||
|
|
||||||
|
extern GCOps g_rdpGCOps; /* from rdpdraw.c */
|
||||||
|
|
||||||
|
extern int g_con_number; /* in rdpup.c */
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
void
|
||||||
|
rdpImageText16Org(DrawablePtr pDrawable, GCPtr pGC,
|
||||||
|
int x, int y, int count, unsigned short* chars)
|
||||||
|
{
|
||||||
|
rdpGCPtr priv;
|
||||||
|
GCFuncs* oldFuncs;
|
||||||
|
|
||||||
|
GC_OP_PROLOGUE(pGC);
|
||||||
|
pGC->ops->ImageText16(pDrawable, pGC, x, y, count, chars);
|
||||||
|
GC_OP_EPILOGUE(pGC);
|
||||||
|
}
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
void
|
||||||
|
rdpImageText16(DrawablePtr pDrawable, GCPtr pGC,
|
||||||
|
int x, int y, int count, unsigned short* chars)
|
||||||
|
{
|
||||||
|
RegionRec reg;
|
||||||
|
RegionRec reg1;
|
||||||
|
int num_clips;
|
||||||
|
int cd;
|
||||||
|
int j;
|
||||||
|
int got_id;
|
||||||
|
BoxRec box;
|
||||||
|
struct image_data id;
|
||||||
|
WindowPtr pDstWnd;
|
||||||
|
PixmapPtr pDstPixmap;
|
||||||
|
rdpPixmapRec* pDstPriv;
|
||||||
|
|
||||||
|
LLOGLN(10, ("rdpImageText16:"));
|
||||||
|
|
||||||
|
if (count != 0)
|
||||||
|
{
|
||||||
|
GetTextBoundingBox(pDrawable, pGC->font, x, y, count, &box);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* do original call */
|
||||||
|
rdpImageText16Org(pDrawable, pGC, x, y, count, chars);
|
||||||
|
|
||||||
|
got_id = 0;
|
||||||
|
if (pDrawable->type == DRAWABLE_PIXMAP)
|
||||||
|
{
|
||||||
|
pDstPixmap = (PixmapPtr)pDrawable;
|
||||||
|
pDstPriv = GETPIXPRIV(pDstPixmap);
|
||||||
|
if (XRDP_IS_OS(pDstPriv))
|
||||||
|
{
|
||||||
|
rdpup_switch_os_surface(pDstPriv->rdpid);
|
||||||
|
rdpup_get_pixmap_image_rect(pDstPixmap, &id);
|
||||||
|
got_id = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (pDrawable->type == DRAWABLE_WINDOW)
|
||||||
|
{
|
||||||
|
pDstWnd = (WindowPtr)pDrawable;
|
||||||
|
if (pDstWnd->viewable)
|
||||||
|
{
|
||||||
|
rdpup_get_screen_image_rect(&id);
|
||||||
|
got_id = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!got_id)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
RegionInit(®, NullBox, 0);
|
||||||
|
if (count == 0)
|
||||||
|
{
|
||||||
|
cd = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cd = rdp_get_clip(®, pDrawable, pGC);
|
||||||
|
}
|
||||||
|
if (cd == 1)
|
||||||
|
{
|
||||||
|
rdpup_begin_update();
|
||||||
|
rdpup_send_area(&id, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
||||||
|
rdpup_end_update();
|
||||||
|
}
|
||||||
|
else if (cd == 2)
|
||||||
|
{
|
||||||
|
RegionInit(®1, &box, 0);
|
||||||
|
RegionIntersect(®, ®, ®1);
|
||||||
|
num_clips = REGION_NUM_RECTS(®);
|
||||||
|
if (num_clips > 0)
|
||||||
|
{
|
||||||
|
rdpup_begin_update();
|
||||||
|
for (j = num_clips - 1; j >= 0; j--)
|
||||||
|
{
|
||||||
|
box = REGION_RECTS(®)[j];
|
||||||
|
rdpup_send_area(&id, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
||||||
|
}
|
||||||
|
rdpup_end_update();
|
||||||
|
}
|
||||||
|
RegionUninit(®1);
|
||||||
|
}
|
||||||
|
RegionUninit(®);
|
||||||
|
rdpup_switch_os_surface(-1);
|
||||||
|
return;
|
||||||
|
}
|
29
xorg/X11R7.6/rdp/rdpImageText16.h
Normal file
29
xorg/X11R7.6/rdp/rdpImageText16.h
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2005-2012 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 __RDPIMAGETEXT16_H
|
||||||
|
#define __RDPIMAGETEXT16_H
|
||||||
|
|
||||||
|
void
|
||||||
|
rdpImageText16(DrawablePtr pDrawable, GCPtr pGC,
|
||||||
|
int x, int y, int count, unsigned short* chars);
|
||||||
|
|
||||||
|
#endif
|
149
xorg/X11R7.6/rdp/rdpImageText8.c
Normal file
149
xorg/X11R7.6/rdp/rdpImageText8.c
Normal file
@ -0,0 +1,149 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2005-2012 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 "rdp.h"
|
||||||
|
#include "rdpdraw.h"
|
||||||
|
|
||||||
|
#define LDEBUG 0
|
||||||
|
|
||||||
|
#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 */
|
||||||
|
|
||||||
|
extern GCOps g_rdpGCOps; /* from rdpdraw.c */
|
||||||
|
|
||||||
|
extern int g_con_number; /* in rdpup.c */
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
void
|
||||||
|
rdpImageText8Org(DrawablePtr pDrawable, GCPtr pGC,
|
||||||
|
int x, int y, int count, char* chars)
|
||||||
|
{
|
||||||
|
rdpGCPtr priv;
|
||||||
|
GCFuncs* oldFuncs;
|
||||||
|
|
||||||
|
GC_OP_PROLOGUE(pGC);
|
||||||
|
pGC->ops->ImageText8(pDrawable, pGC, x, y, count, chars);
|
||||||
|
GC_OP_EPILOGUE(pGC);
|
||||||
|
}
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
void
|
||||||
|
rdpImageText8(DrawablePtr pDrawable, GCPtr pGC,
|
||||||
|
int x, int y, int count, char* chars)
|
||||||
|
{
|
||||||
|
RegionRec reg;
|
||||||
|
RegionRec reg1;
|
||||||
|
int num_clips;
|
||||||
|
int cd;
|
||||||
|
int j;
|
||||||
|
int got_id;
|
||||||
|
BoxRec box;
|
||||||
|
struct image_data id;
|
||||||
|
WindowPtr pDstWnd;
|
||||||
|
PixmapPtr pDstPixmap;
|
||||||
|
rdpPixmapRec* pDstPriv;
|
||||||
|
|
||||||
|
LLOGLN(10, ("rdpImageText8:"));
|
||||||
|
|
||||||
|
if (count != 0)
|
||||||
|
{
|
||||||
|
GetTextBoundingBox(pDrawable, pGC->font, x, y, count, &box);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* do original call */
|
||||||
|
rdpImageText8Org(pDrawable, pGC, x, y, count, chars);
|
||||||
|
|
||||||
|
got_id = 0;
|
||||||
|
if (pDrawable->type == DRAWABLE_PIXMAP)
|
||||||
|
{
|
||||||
|
pDstPixmap = (PixmapPtr)pDrawable;
|
||||||
|
pDstPriv = GETPIXPRIV(pDstPixmap);
|
||||||
|
if (XRDP_IS_OS(pDstPriv))
|
||||||
|
{
|
||||||
|
rdpup_switch_os_surface(pDstPriv->rdpid);
|
||||||
|
rdpup_get_pixmap_image_rect(pDstPixmap, &id);
|
||||||
|
got_id = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (pDrawable->type == DRAWABLE_WINDOW)
|
||||||
|
{
|
||||||
|
pDstWnd = (WindowPtr)pDrawable;
|
||||||
|
if (pDstWnd->viewable)
|
||||||
|
{
|
||||||
|
rdpup_get_screen_image_rect(&id);
|
||||||
|
got_id = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!got_id)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
RegionInit(®, NullBox, 0);
|
||||||
|
if (count == 0)
|
||||||
|
{
|
||||||
|
cd = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cd = rdp_get_clip(®, pDrawable, pGC);
|
||||||
|
}
|
||||||
|
if (cd == 1)
|
||||||
|
{
|
||||||
|
rdpup_begin_update();
|
||||||
|
rdpup_send_area(&id, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
||||||
|
rdpup_end_update();
|
||||||
|
}
|
||||||
|
else if (cd == 2)
|
||||||
|
{
|
||||||
|
RegionInit(®1, &box, 0);
|
||||||
|
RegionIntersect(®, ®, ®1);
|
||||||
|
num_clips = REGION_NUM_RECTS(®);
|
||||||
|
if (num_clips > 0)
|
||||||
|
{
|
||||||
|
rdpup_begin_update();
|
||||||
|
for (j = num_clips - 1; j >= 0; j--)
|
||||||
|
{
|
||||||
|
box = REGION_RECTS(®)[j];
|
||||||
|
rdpup_send_area(&id, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
||||||
|
}
|
||||||
|
rdpup_end_update();
|
||||||
|
}
|
||||||
|
RegionUninit(®1);
|
||||||
|
}
|
||||||
|
RegionUninit(®);
|
||||||
|
rdpup_switch_os_surface(-1);
|
||||||
|
return;
|
||||||
|
}
|
29
xorg/X11R7.6/rdp/rdpImageText8.h
Normal file
29
xorg/X11R7.6/rdp/rdpImageText8.h
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2005-2012 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 __RDPIMAGETEXT8_H
|
||||||
|
#define __RDPIMAGETEXT8_H
|
||||||
|
|
||||||
|
void
|
||||||
|
rdpImageText8(DrawablePtr pDrawable, GCPtr pGC,
|
||||||
|
int x, int y, int count, char* chars);
|
||||||
|
|
||||||
|
#endif
|
174
xorg/X11R7.6/rdp/rdpPolyArc.c
Normal file
174
xorg/X11R7.6/rdp/rdpPolyArc.c
Normal file
@ -0,0 +1,174 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2005-2012 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 "rdp.h"
|
||||||
|
#include "rdpdraw.h"
|
||||||
|
|
||||||
|
#define LDEBUG 0
|
||||||
|
|
||||||
|
#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 */
|
||||||
|
|
||||||
|
extern GCOps g_rdpGCOps; /* from rdpdraw.c */
|
||||||
|
|
||||||
|
extern int g_con_number; /* in rdpup.c */
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
void
|
||||||
|
rdpPolyArcOrg(DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc* parcs)
|
||||||
|
{
|
||||||
|
rdpGCPtr priv;
|
||||||
|
GCFuncs* oldFuncs;
|
||||||
|
|
||||||
|
GC_OP_PROLOGUE(pGC);
|
||||||
|
pGC->ops->PolyArc(pDrawable, pGC, narcs, parcs);
|
||||||
|
GC_OP_EPILOGUE(pGC);
|
||||||
|
}
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
void
|
||||||
|
rdpPolyArc(DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc* parcs)
|
||||||
|
{
|
||||||
|
RegionRec clip_reg;
|
||||||
|
RegionPtr tmpRegion;
|
||||||
|
int cd;
|
||||||
|
int lw;
|
||||||
|
int extra;
|
||||||
|
int i;
|
||||||
|
int num_clips;
|
||||||
|
int got_id;
|
||||||
|
xRectangle* rects;
|
||||||
|
BoxRec box;
|
||||||
|
struct image_data id;
|
||||||
|
WindowPtr pDstWnd;
|
||||||
|
PixmapPtr pDstPixmap;
|
||||||
|
rdpPixmapRec* pDstPriv;
|
||||||
|
|
||||||
|
LLOGLN(10, ("rdpPolyArc:"));
|
||||||
|
|
||||||
|
rects = 0;
|
||||||
|
if (narcs > 0)
|
||||||
|
{
|
||||||
|
rects = (xRectangle*)g_malloc(narcs * sizeof(xRectangle), 0);
|
||||||
|
lw = pGC->lineWidth;
|
||||||
|
if (lw == 0)
|
||||||
|
{
|
||||||
|
lw = 1;
|
||||||
|
}
|
||||||
|
extra = lw / 2;
|
||||||
|
for (i = 0; i < narcs; i++)
|
||||||
|
{
|
||||||
|
rects[i].x = (parcs[i].x - extra) + pDrawable->x;
|
||||||
|
rects[i].y = (parcs[i].y - extra) + pDrawable->y;
|
||||||
|
rects[i].width = parcs[i].width + lw;
|
||||||
|
rects[i].height = parcs[i].height + lw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* do original call */
|
||||||
|
rdpPolyArcOrg(pDrawable, pGC, narcs, parcs);
|
||||||
|
|
||||||
|
got_id = 0;
|
||||||
|
if (pDrawable->type == DRAWABLE_PIXMAP)
|
||||||
|
{
|
||||||
|
pDstPixmap = (PixmapPtr)pDrawable;
|
||||||
|
pDstPriv = GETPIXPRIV(pDstPixmap);
|
||||||
|
if (XRDP_IS_OS(pDstPriv))
|
||||||
|
{
|
||||||
|
rdpup_switch_os_surface(pDstPriv->rdpid);
|
||||||
|
rdpup_get_pixmap_image_rect(pDstPixmap, &id);
|
||||||
|
got_id = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (pDrawable->type == DRAWABLE_WINDOW)
|
||||||
|
{
|
||||||
|
pDstWnd = (WindowPtr)pDrawable;
|
||||||
|
if (pDstWnd->viewable)
|
||||||
|
{
|
||||||
|
rdpup_get_screen_image_rect(&id);
|
||||||
|
got_id = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!got_id)
|
||||||
|
{
|
||||||
|
g_free(rects);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
RegionInit(&clip_reg, NullBox, 0);
|
||||||
|
cd = rdp_get_clip(&clip_reg, pDrawable, pGC);
|
||||||
|
if (cd == 1)
|
||||||
|
{
|
||||||
|
if (rects != 0)
|
||||||
|
{
|
||||||
|
tmpRegion = RegionFromRects(narcs, rects, CT_NONE);
|
||||||
|
num_clips = REGION_NUM_RECTS(tmpRegion);
|
||||||
|
if (num_clips > 0)
|
||||||
|
{
|
||||||
|
rdpup_begin_update();
|
||||||
|
for (i = num_clips - 1; i >= 0; i--)
|
||||||
|
{
|
||||||
|
box = REGION_RECTS(tmpRegion)[i];
|
||||||
|
rdpup_send_area(&id, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
||||||
|
}
|
||||||
|
rdpup_end_update();
|
||||||
|
}
|
||||||
|
RegionDestroy(tmpRegion);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (cd == 2)
|
||||||
|
{
|
||||||
|
if (rects != 0)
|
||||||
|
{
|
||||||
|
tmpRegion = RegionFromRects(narcs, rects, CT_NONE);
|
||||||
|
RegionIntersect(tmpRegion, tmpRegion, &clip_reg);
|
||||||
|
num_clips = REGION_NUM_RECTS(tmpRegion);
|
||||||
|
if (num_clips > 0)
|
||||||
|
{
|
||||||
|
rdpup_begin_update();
|
||||||
|
for (i = num_clips - 1; i >= 0; i--)
|
||||||
|
{
|
||||||
|
box = REGION_RECTS(tmpRegion)[i];
|
||||||
|
rdpup_send_area(&id, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
||||||
|
}
|
||||||
|
rdpup_end_update();
|
||||||
|
}
|
||||||
|
RegionDestroy(tmpRegion);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
RegionUninit(&clip_reg);
|
||||||
|
g_free(rects);
|
||||||
|
rdpup_switch_os_surface(-1);
|
||||||
|
}
|
28
xorg/X11R7.6/rdp/rdpPolyArc.h
Normal file
28
xorg/X11R7.6/rdp/rdpPolyArc.h
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2005-2012 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 __RDPPOLYARC_H
|
||||||
|
#define __RDPPOLYARC_H
|
||||||
|
|
||||||
|
void
|
||||||
|
rdpPolyArc(DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc* parcs);
|
||||||
|
|
||||||
|
#endif
|
174
xorg/X11R7.6/rdp/rdpPolyFillArc.c
Normal file
174
xorg/X11R7.6/rdp/rdpPolyFillArc.c
Normal file
@ -0,0 +1,174 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2005-2012 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 "rdp.h"
|
||||||
|
#include "rdpdraw.h"
|
||||||
|
|
||||||
|
#define LDEBUG 0
|
||||||
|
|
||||||
|
#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 */
|
||||||
|
|
||||||
|
extern GCOps g_rdpGCOps; /* from rdpdraw.c */
|
||||||
|
|
||||||
|
extern int g_con_number; /* in rdpup.c */
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
void
|
||||||
|
rdpPolyFillArcOrg(DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc* parcs)
|
||||||
|
{
|
||||||
|
rdpGCPtr priv;
|
||||||
|
GCFuncs* oldFuncs;
|
||||||
|
|
||||||
|
GC_OP_PROLOGUE(pGC);
|
||||||
|
pGC->ops->PolyFillArc(pDrawable, pGC, narcs, parcs);
|
||||||
|
GC_OP_EPILOGUE(pGC);
|
||||||
|
}
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
void
|
||||||
|
rdpPolyFillArc(DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc* parcs)
|
||||||
|
{
|
||||||
|
RegionRec clip_reg;
|
||||||
|
RegionPtr tmpRegion;
|
||||||
|
int cd;
|
||||||
|
int lw;
|
||||||
|
int extra;
|
||||||
|
int i;
|
||||||
|
int num_clips;
|
||||||
|
int got_id;
|
||||||
|
xRectangle* rects;
|
||||||
|
BoxRec box;
|
||||||
|
struct image_data id;
|
||||||
|
WindowPtr pDstWnd;
|
||||||
|
PixmapPtr pDstPixmap;
|
||||||
|
rdpPixmapRec* pDstPriv;
|
||||||
|
|
||||||
|
LLOGLN(10, ("rdpPolyFillArc:"));
|
||||||
|
|
||||||
|
rects = 0;
|
||||||
|
if (narcs > 0)
|
||||||
|
{
|
||||||
|
rects = (xRectangle*)g_malloc(narcs * sizeof(xRectangle), 0);
|
||||||
|
lw = pGC->lineWidth;
|
||||||
|
if (lw == 0)
|
||||||
|
{
|
||||||
|
lw = 1;
|
||||||
|
}
|
||||||
|
extra = lw / 2;
|
||||||
|
for (i = 0; i < narcs; i++)
|
||||||
|
{
|
||||||
|
rects[i].x = (parcs[i].x - extra) + pDrawable->x;
|
||||||
|
rects[i].y = (parcs[i].y - extra) + pDrawable->y;
|
||||||
|
rects[i].width = parcs[i].width + lw;
|
||||||
|
rects[i].height = parcs[i].height + lw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* do original call */
|
||||||
|
rdpPolyFillArcOrg(pDrawable, pGC, narcs, parcs);
|
||||||
|
|
||||||
|
got_id = 0;
|
||||||
|
if (pDrawable->type == DRAWABLE_PIXMAP)
|
||||||
|
{
|
||||||
|
pDstPixmap = (PixmapPtr)pDrawable;
|
||||||
|
pDstPriv = GETPIXPRIV(pDstPixmap);
|
||||||
|
if (XRDP_IS_OS(pDstPriv))
|
||||||
|
{
|
||||||
|
rdpup_switch_os_surface(pDstPriv->rdpid);
|
||||||
|
rdpup_get_pixmap_image_rect(pDstPixmap, &id);
|
||||||
|
got_id = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (pDrawable->type == DRAWABLE_WINDOW)
|
||||||
|
{
|
||||||
|
pDstWnd = (WindowPtr)pDrawable;
|
||||||
|
if (pDstWnd->viewable)
|
||||||
|
{
|
||||||
|
rdpup_get_screen_image_rect(&id);
|
||||||
|
got_id = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!got_id)
|
||||||
|
{
|
||||||
|
g_free(rects);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
RegionInit(&clip_reg, NullBox, 0);
|
||||||
|
cd = rdp_get_clip(&clip_reg, pDrawable, pGC);
|
||||||
|
if (cd == 1)
|
||||||
|
{
|
||||||
|
if (rects != 0)
|
||||||
|
{
|
||||||
|
tmpRegion = RegionFromRects(narcs, rects, CT_NONE);
|
||||||
|
num_clips = REGION_NUM_RECTS(tmpRegion);
|
||||||
|
if (num_clips > 0)
|
||||||
|
{
|
||||||
|
rdpup_begin_update();
|
||||||
|
for (i = num_clips - 1; i >= 0; i--)
|
||||||
|
{
|
||||||
|
box = REGION_RECTS(tmpRegion)[i];
|
||||||
|
rdpup_send_area(&id, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
||||||
|
}
|
||||||
|
rdpup_end_update();
|
||||||
|
}
|
||||||
|
RegionDestroy(tmpRegion);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (cd == 2)
|
||||||
|
{
|
||||||
|
if (rects != 0)
|
||||||
|
{
|
||||||
|
tmpRegion = RegionFromRects(narcs, rects, CT_NONE);
|
||||||
|
RegionIntersect(tmpRegion, tmpRegion, &clip_reg);
|
||||||
|
num_clips = REGION_NUM_RECTS(tmpRegion);
|
||||||
|
if (num_clips > 0)
|
||||||
|
{
|
||||||
|
rdpup_begin_update();
|
||||||
|
for (i = num_clips - 1; i >= 0; i--)
|
||||||
|
{
|
||||||
|
box = REGION_RECTS(tmpRegion)[i];
|
||||||
|
rdpup_send_area(&id, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
||||||
|
}
|
||||||
|
rdpup_end_update();
|
||||||
|
}
|
||||||
|
RegionDestroy(tmpRegion);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
RegionUninit(&clip_reg);
|
||||||
|
g_free(rects);
|
||||||
|
rdpup_switch_os_surface(-1);
|
||||||
|
}
|
28
xorg/X11R7.6/rdp/rdpPolyFillArc.h
Normal file
28
xorg/X11R7.6/rdp/rdpPolyFillArc.h
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2005-2012 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 __RDPPOLYFILLARC_H
|
||||||
|
#define __RDPPOLYFILLARC_H
|
||||||
|
|
||||||
|
void
|
||||||
|
rdpPolyFillArc(DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc* parcs);
|
||||||
|
|
||||||
|
#endif
|
151
xorg/X11R7.6/rdp/rdpPolyGlyphBlt.c
Normal file
151
xorg/X11R7.6/rdp/rdpPolyGlyphBlt.c
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2005-2012 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 "rdp.h"
|
||||||
|
#include "rdpdraw.h"
|
||||||
|
|
||||||
|
#define LDEBUG 0
|
||||||
|
|
||||||
|
#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 */
|
||||||
|
|
||||||
|
extern GCOps g_rdpGCOps; /* from rdpdraw.c */
|
||||||
|
|
||||||
|
extern int g_con_number; /* in rdpup.c */
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
void
|
||||||
|
rdpPolyGlyphBltOrg(DrawablePtr pDrawable, GCPtr pGC,
|
||||||
|
int x, int y, unsigned int nglyph,
|
||||||
|
CharInfoPtr* ppci, pointer pglyphBase)
|
||||||
|
{
|
||||||
|
rdpGCPtr priv;
|
||||||
|
GCFuncs* oldFuncs;
|
||||||
|
|
||||||
|
GC_OP_PROLOGUE(pGC);
|
||||||
|
pGC->ops->PolyGlyphBlt(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase);
|
||||||
|
GC_OP_EPILOGUE(pGC);
|
||||||
|
}
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
void
|
||||||
|
rdpPolyGlyphBlt(DrawablePtr pDrawable, GCPtr pGC,
|
||||||
|
int x, int y, unsigned int nglyph,
|
||||||
|
CharInfoPtr* ppci, pointer pglyphBase)
|
||||||
|
{
|
||||||
|
RegionRec reg;
|
||||||
|
RegionRec reg1;
|
||||||
|
int num_clips;
|
||||||
|
int cd;
|
||||||
|
int j;
|
||||||
|
int got_id;
|
||||||
|
BoxRec box;
|
||||||
|
struct image_data id;
|
||||||
|
WindowPtr pDstWnd;
|
||||||
|
PixmapPtr pDstPixmap;
|
||||||
|
rdpPixmapRec* pDstPriv;
|
||||||
|
|
||||||
|
LLOGLN(10, ("rdpPolyGlyphBlt:"));
|
||||||
|
|
||||||
|
if (nglyph != 0)
|
||||||
|
{
|
||||||
|
GetTextBoundingBox(pDrawable, pGC->font, x, y, nglyph, &box);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* do original call */
|
||||||
|
rdpPolyGlyphBltOrg(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase);
|
||||||
|
|
||||||
|
got_id = 0;
|
||||||
|
if (pDrawable->type == DRAWABLE_PIXMAP)
|
||||||
|
{
|
||||||
|
pDstPixmap = (PixmapPtr)pDrawable;
|
||||||
|
pDstPriv = GETPIXPRIV(pDstPixmap);
|
||||||
|
if (XRDP_IS_OS(pDstPriv))
|
||||||
|
{
|
||||||
|
rdpup_switch_os_surface(pDstPriv->rdpid);
|
||||||
|
rdpup_get_pixmap_image_rect(pDstPixmap, &id);
|
||||||
|
got_id = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (pDrawable->type == DRAWABLE_WINDOW)
|
||||||
|
{
|
||||||
|
pDstWnd = (WindowPtr)pDrawable;
|
||||||
|
if (pDstWnd->viewable)
|
||||||
|
{
|
||||||
|
rdpup_get_screen_image_rect(&id);
|
||||||
|
got_id = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!got_id)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
RegionInit(®, NullBox, 0);
|
||||||
|
if (nglyph == 0)
|
||||||
|
{
|
||||||
|
cd = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cd = rdp_get_clip(®, pDrawable, pGC);
|
||||||
|
}
|
||||||
|
if (cd == 1)
|
||||||
|
{
|
||||||
|
rdpup_begin_update();
|
||||||
|
rdpup_send_area(&id, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
||||||
|
rdpup_end_update();
|
||||||
|
}
|
||||||
|
else if (cd == 2)
|
||||||
|
{
|
||||||
|
RegionInit(®1, &box, 0);
|
||||||
|
RegionIntersect(®, ®, ®1);
|
||||||
|
num_clips = REGION_NUM_RECTS(®);
|
||||||
|
if (num_clips > 0)
|
||||||
|
{
|
||||||
|
rdpup_begin_update();
|
||||||
|
for (j = num_clips - 1; j >= 0; j--)
|
||||||
|
{
|
||||||
|
box = REGION_RECTS(®)[j];
|
||||||
|
rdpup_send_area(&id, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
||||||
|
}
|
||||||
|
rdpup_end_update();
|
||||||
|
}
|
||||||
|
RegionUninit(®1);
|
||||||
|
}
|
||||||
|
RegionUninit(®);
|
||||||
|
rdpup_switch_os_surface(-1);
|
||||||
|
return;
|
||||||
|
}
|
30
xorg/X11R7.6/rdp/rdpPolyGlyphBlt.h
Normal file
30
xorg/X11R7.6/rdp/rdpPolyGlyphBlt.h
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2005-2012 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 __RDPPOLYGLYPHBLT_H
|
||||||
|
#define __RDPPOLYGLYPHBLT_H
|
||||||
|
|
||||||
|
void
|
||||||
|
rdpPolyGlyphBlt(DrawablePtr pDrawable, GCPtr pGC,
|
||||||
|
int x, int y, unsigned int nglyph,
|
||||||
|
CharInfoPtr* ppci, pointer pglyphBase);
|
||||||
|
|
||||||
|
#endif
|
200
xorg/X11R7.6/rdp/rdpPolyPoint.c
Normal file
200
xorg/X11R7.6/rdp/rdpPolyPoint.c
Normal file
@ -0,0 +1,200 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2005-2012 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 "rdp.h"
|
||||||
|
#include "rdpdraw.h"
|
||||||
|
|
||||||
|
#define LDEBUG 0
|
||||||
|
|
||||||
|
#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 */
|
||||||
|
|
||||||
|
extern GCOps g_rdpGCOps; /* from rdpdraw.c */
|
||||||
|
|
||||||
|
extern int g_con_number; /* in rdpup.c */
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
void
|
||||||
|
rdpPolyPointOrg(DrawablePtr pDrawable, GCPtr pGC, int mode,
|
||||||
|
int npt, DDXPointPtr in_pts)
|
||||||
|
{
|
||||||
|
rdpGCPtr priv;
|
||||||
|
GCFuncs* oldFuncs;
|
||||||
|
|
||||||
|
GC_OP_PROLOGUE(pGC);
|
||||||
|
pGC->ops->PolyPoint(pDrawable, pGC, mode, npt, in_pts);
|
||||||
|
GC_OP_EPILOGUE(pGC);
|
||||||
|
}
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
void
|
||||||
|
rdpPolyPoint(DrawablePtr pDrawable, GCPtr pGC, int mode,
|
||||||
|
int npt, DDXPointPtr in_pts)
|
||||||
|
{
|
||||||
|
RegionRec clip_reg;
|
||||||
|
int num_clips;
|
||||||
|
int cd;
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
int i;
|
||||||
|
int j;
|
||||||
|
int got_id;
|
||||||
|
BoxRec box;
|
||||||
|
BoxRec total_box;
|
||||||
|
DDXPointPtr pts;
|
||||||
|
DDXPointRec stack_pts[32];
|
||||||
|
struct image_data id;
|
||||||
|
WindowPtr pDstWnd;
|
||||||
|
PixmapPtr pDstPixmap;
|
||||||
|
rdpPixmapRec* pDstPriv;
|
||||||
|
|
||||||
|
LLOGLN(10, ("rdpPolyPoint:"));
|
||||||
|
|
||||||
|
if (npt > 32)
|
||||||
|
{
|
||||||
|
pts = (DDXPointPtr)g_malloc(sizeof(DDXPointRec) * npt, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pts = stack_pts;
|
||||||
|
}
|
||||||
|
for (i = 0; i < npt; i++)
|
||||||
|
{
|
||||||
|
pts[i].x = pDrawable->x + in_pts[i].x;
|
||||||
|
pts[i].y = pDrawable->y + in_pts[i].y;
|
||||||
|
if (i == 0)
|
||||||
|
{
|
||||||
|
total_box.x1 = pts[0].x;
|
||||||
|
total_box.y1 = pts[0].y;
|
||||||
|
total_box.x2 = pts[0].x;
|
||||||
|
total_box.y2 = pts[0].y;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (pts[i].x < total_box.x1)
|
||||||
|
{
|
||||||
|
total_box.x1 = pts[i].x;
|
||||||
|
}
|
||||||
|
if (pts[i].y < total_box.y1)
|
||||||
|
{
|
||||||
|
total_box.y1 = pts[i].y;
|
||||||
|
}
|
||||||
|
if (pts[i].x > total_box.x2)
|
||||||
|
{
|
||||||
|
total_box.x2 = pts[i].x;
|
||||||
|
}
|
||||||
|
if (pts[i].y > total_box.y2)
|
||||||
|
{
|
||||||
|
total_box.y2 = pts[i].y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* todo, use this total_box */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* do original call */
|
||||||
|
rdpPolyPointOrg(pDrawable, pGC, mode, npt, in_pts);
|
||||||
|
|
||||||
|
got_id = 0;
|
||||||
|
if (pDrawable->type == DRAWABLE_PIXMAP)
|
||||||
|
{
|
||||||
|
pDstPixmap = (PixmapPtr)pDrawable;
|
||||||
|
pDstPriv = GETPIXPRIV(pDstPixmap);
|
||||||
|
if (XRDP_IS_OS(pDstPriv))
|
||||||
|
{
|
||||||
|
rdpup_switch_os_surface(pDstPriv->rdpid);
|
||||||
|
rdpup_get_pixmap_image_rect(pDstPixmap, &id);
|
||||||
|
got_id = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (pDrawable->type == DRAWABLE_WINDOW)
|
||||||
|
{
|
||||||
|
pDstWnd = (WindowPtr)pDrawable;
|
||||||
|
if (pDstWnd->viewable)
|
||||||
|
{
|
||||||
|
rdpup_get_screen_image_rect(&id);
|
||||||
|
got_id = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!got_id)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
RegionInit(&clip_reg, NullBox, 0);
|
||||||
|
cd = rdp_get_clip(&clip_reg, pDrawable, pGC);
|
||||||
|
if (cd == 1)
|
||||||
|
{
|
||||||
|
if (npt > 0)
|
||||||
|
{
|
||||||
|
rdpup_begin_update();
|
||||||
|
rdpup_set_fgcolor(pGC->fgPixel);
|
||||||
|
for (i = 0; i < npt; i++)
|
||||||
|
{
|
||||||
|
x = pts[i].x;
|
||||||
|
y = pts[i].y;
|
||||||
|
rdpup_fill_rect(x, y, 1, 1);
|
||||||
|
}
|
||||||
|
rdpup_end_update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (cd == 2)
|
||||||
|
{
|
||||||
|
num_clips = REGION_NUM_RECTS(&clip_reg);
|
||||||
|
if (npt > 0 && num_clips > 0)
|
||||||
|
{
|
||||||
|
rdpup_begin_update();
|
||||||
|
rdpup_set_fgcolor(pGC->fgPixel);
|
||||||
|
for (j = num_clips - 1; j >= 0; j--)
|
||||||
|
{
|
||||||
|
box = REGION_RECTS(&clip_reg)[j];
|
||||||
|
rdpup_set_clip(box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
||||||
|
for (i = 0; i < npt; i++)
|
||||||
|
{
|
||||||
|
x = pts[i].x;
|
||||||
|
y = pts[i].y;
|
||||||
|
rdpup_fill_rect(x, y, 1, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rdpup_reset_clip();
|
||||||
|
rdpup_end_update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
RegionUninit(&clip_reg);
|
||||||
|
if (pts != stack_pts)
|
||||||
|
{
|
||||||
|
g_free(pts);
|
||||||
|
}
|
||||||
|
rdpup_switch_os_surface(-1);
|
||||||
|
}
|
29
xorg/X11R7.6/rdp/rdpPolyPoint.h
Normal file
29
xorg/X11R7.6/rdp/rdpPolyPoint.h
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2005-2012 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 __RDPPOLYPOINT_H
|
||||||
|
#define __RDPPOLYPOINT_H
|
||||||
|
|
||||||
|
void
|
||||||
|
rdpPolyPoint(DrawablePtr pDrawable, GCPtr pGC, int mode,
|
||||||
|
int npt, DDXPointPtr in_pts);
|
||||||
|
|
||||||
|
#endif
|
152
xorg/X11R7.6/rdp/rdpPolyText16.c
Normal file
152
xorg/X11R7.6/rdp/rdpPolyText16.c
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2005-2012 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 "rdp.h"
|
||||||
|
#include "rdpdraw.h"
|
||||||
|
|
||||||
|
#define LDEBUG 0
|
||||||
|
|
||||||
|
#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 */
|
||||||
|
|
||||||
|
extern GCOps g_rdpGCOps; /* from rdpdraw.c */
|
||||||
|
|
||||||
|
extern int g_con_number; /* in rdpup.c */
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
int
|
||||||
|
rdpPolyText16Org(DrawablePtr pDrawable, GCPtr pGC,
|
||||||
|
int x, int y, int count, unsigned short* chars)
|
||||||
|
{
|
||||||
|
int rv;
|
||||||
|
rdpGCPtr priv;
|
||||||
|
GCFuncs* oldFuncs;
|
||||||
|
|
||||||
|
GC_OP_PROLOGUE(pGC);
|
||||||
|
rv = pGC->ops->PolyText16(pDrawable, pGC, x, y, count, chars);
|
||||||
|
GC_OP_EPILOGUE(pGC);
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
int
|
||||||
|
rdpPolyText16(DrawablePtr pDrawable, GCPtr pGC,
|
||||||
|
int x, int y, int count, unsigned short* chars)
|
||||||
|
{
|
||||||
|
RegionRec reg;
|
||||||
|
RegionRec reg1;
|
||||||
|
int num_clips;
|
||||||
|
int cd;
|
||||||
|
int j;
|
||||||
|
int rv;
|
||||||
|
int got_id;
|
||||||
|
BoxRec box;
|
||||||
|
struct image_data id;
|
||||||
|
WindowPtr pDstWnd;
|
||||||
|
PixmapPtr pDstPixmap;
|
||||||
|
rdpPixmapRec* pDstPriv;
|
||||||
|
|
||||||
|
LLOGLN(10, ("rdpPolyText16:"));
|
||||||
|
|
||||||
|
if (count != 0)
|
||||||
|
{
|
||||||
|
GetTextBoundingBox(pDrawable, pGC->font, x, y, count, &box);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* do original call */
|
||||||
|
rv = rdpPolyText16Org(pDrawable, pGC, x, y, count, chars);
|
||||||
|
|
||||||
|
got_id = 0;
|
||||||
|
if (pDrawable->type == DRAWABLE_PIXMAP)
|
||||||
|
{
|
||||||
|
pDstPixmap = (PixmapPtr)pDrawable;
|
||||||
|
pDstPriv = GETPIXPRIV(pDstPixmap);
|
||||||
|
if (XRDP_IS_OS(pDstPriv))
|
||||||
|
{
|
||||||
|
rdpup_switch_os_surface(pDstPriv->rdpid);
|
||||||
|
rdpup_get_pixmap_image_rect(pDstPixmap, &id);
|
||||||
|
got_id = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (pDrawable->type == DRAWABLE_WINDOW)
|
||||||
|
{
|
||||||
|
pDstWnd = (WindowPtr)pDrawable;
|
||||||
|
if (pDstWnd->viewable)
|
||||||
|
{
|
||||||
|
rdpup_get_screen_image_rect(&id);
|
||||||
|
got_id = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!got_id)
|
||||||
|
{
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
RegionInit(®, NullBox, 0);
|
||||||
|
if (count == 0)
|
||||||
|
{
|
||||||
|
cd = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cd = rdp_get_clip(®, pDrawable, pGC);
|
||||||
|
}
|
||||||
|
if (cd == 1)
|
||||||
|
{
|
||||||
|
rdpup_begin_update();
|
||||||
|
rdpup_send_area(&id, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
||||||
|
rdpup_end_update();
|
||||||
|
}
|
||||||
|
else if (cd == 2)
|
||||||
|
{
|
||||||
|
RegionInit(®1, &box, 0);
|
||||||
|
RegionIntersect(®, ®, ®1);
|
||||||
|
num_clips = REGION_NUM_RECTS(®);
|
||||||
|
if (num_clips > 0)
|
||||||
|
{
|
||||||
|
rdpup_begin_update();
|
||||||
|
for (j = num_clips - 1; j >= 0; j--)
|
||||||
|
{
|
||||||
|
box = REGION_RECTS(®)[j];
|
||||||
|
rdpup_send_area(&id, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
||||||
|
}
|
||||||
|
rdpup_end_update();
|
||||||
|
}
|
||||||
|
RegionUninit(®1);
|
||||||
|
}
|
||||||
|
RegionUninit(®);
|
||||||
|
rdpup_switch_os_surface(-1);
|
||||||
|
return rv;
|
||||||
|
}
|
29
xorg/X11R7.6/rdp/rdpPolyText16.h
Normal file
29
xorg/X11R7.6/rdp/rdpPolyText16.h
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2005-2012 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 __RDPPOLYTEXT16_H
|
||||||
|
#define __RDPPOLYTEXT16_H
|
||||||
|
|
||||||
|
int
|
||||||
|
rdpPolyText16(DrawablePtr pDrawable, GCPtr pGC,
|
||||||
|
int x, int y, int count, unsigned short* chars);
|
||||||
|
|
||||||
|
#endif
|
152
xorg/X11R7.6/rdp/rdpPolyText8.c
Normal file
152
xorg/X11R7.6/rdp/rdpPolyText8.c
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2005-2012 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 "rdp.h"
|
||||||
|
#include "rdpdraw.h"
|
||||||
|
|
||||||
|
#define LDEBUG 0
|
||||||
|
|
||||||
|
#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 */
|
||||||
|
|
||||||
|
extern GCOps g_rdpGCOps; /* from rdpdraw.c */
|
||||||
|
|
||||||
|
extern int g_con_number; /* in rdpup.c */
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
int
|
||||||
|
rdpPolyText8Org(DrawablePtr pDrawable, GCPtr pGC,
|
||||||
|
int x, int y, int count, char* chars)
|
||||||
|
{
|
||||||
|
int rv;
|
||||||
|
rdpGCPtr priv;
|
||||||
|
GCFuncs* oldFuncs;
|
||||||
|
|
||||||
|
GC_OP_PROLOGUE(pGC);
|
||||||
|
rv = pGC->ops->PolyText8(pDrawable, pGC, x, y, count, chars);
|
||||||
|
GC_OP_EPILOGUE(pGC);
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
int
|
||||||
|
rdpPolyText8(DrawablePtr pDrawable, GCPtr pGC,
|
||||||
|
int x, int y, int count, char* chars)
|
||||||
|
{
|
||||||
|
RegionRec reg;
|
||||||
|
RegionRec reg1;
|
||||||
|
int num_clips;
|
||||||
|
int cd;
|
||||||
|
int j;
|
||||||
|
int rv;
|
||||||
|
int got_id;
|
||||||
|
BoxRec box;
|
||||||
|
struct image_data id;
|
||||||
|
WindowPtr pDstWnd;
|
||||||
|
PixmapPtr pDstPixmap;
|
||||||
|
rdpPixmapRec* pDstPriv;
|
||||||
|
|
||||||
|
LLOGLN(10, ("rdpPolyText8:"));
|
||||||
|
|
||||||
|
if (count != 0)
|
||||||
|
{
|
||||||
|
GetTextBoundingBox(pDrawable, pGC->font, x, y, count, &box);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* do original call */
|
||||||
|
rv = rdpPolyText8Org(pDrawable, pGC, x, y, count, chars);
|
||||||
|
|
||||||
|
got_id = 0;
|
||||||
|
if (pDrawable->type == DRAWABLE_PIXMAP)
|
||||||
|
{
|
||||||
|
pDstPixmap = (PixmapPtr)pDrawable;
|
||||||
|
pDstPriv = GETPIXPRIV(pDstPixmap);
|
||||||
|
if (XRDP_IS_OS(pDstPriv))
|
||||||
|
{
|
||||||
|
rdpup_switch_os_surface(pDstPriv->rdpid);
|
||||||
|
rdpup_get_pixmap_image_rect(pDstPixmap, &id);
|
||||||
|
got_id = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (pDrawable->type == DRAWABLE_WINDOW)
|
||||||
|
{
|
||||||
|
pDstWnd = (WindowPtr)pDrawable;
|
||||||
|
if (pDstWnd->viewable)
|
||||||
|
{
|
||||||
|
rdpup_get_screen_image_rect(&id);
|
||||||
|
got_id = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!got_id)
|
||||||
|
{
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
RegionInit(®, NullBox, 0);
|
||||||
|
if (count == 0)
|
||||||
|
{
|
||||||
|
cd = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cd = rdp_get_clip(®, pDrawable, pGC);
|
||||||
|
}
|
||||||
|
if (cd == 1)
|
||||||
|
{
|
||||||
|
rdpup_begin_update();
|
||||||
|
rdpup_send_area(&id, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
||||||
|
rdpup_end_update();
|
||||||
|
}
|
||||||
|
else if (cd == 2)
|
||||||
|
{
|
||||||
|
RegionInit(®1, &box, 0);
|
||||||
|
RegionIntersect(®, ®, ®1);
|
||||||
|
num_clips = REGION_NUM_RECTS(®);
|
||||||
|
if (num_clips > 0)
|
||||||
|
{
|
||||||
|
rdpup_begin_update();
|
||||||
|
for (j = num_clips - 1; j >= 0; j--)
|
||||||
|
{
|
||||||
|
box = REGION_RECTS(®)[j];
|
||||||
|
rdpup_send_area(&id, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
||||||
|
}
|
||||||
|
rdpup_end_update();
|
||||||
|
}
|
||||||
|
RegionUninit(®1);
|
||||||
|
}
|
||||||
|
RegionUninit(®);
|
||||||
|
rdpup_switch_os_surface(-1);
|
||||||
|
return rv;
|
||||||
|
}
|
29
xorg/X11R7.6/rdp/rdpPolyText8.h
Normal file
29
xorg/X11R7.6/rdp/rdpPolyText8.h
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2005-2012 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 __RDPPOLYTEXT8_H
|
||||||
|
#define __RDPPOLYTEXT8_H
|
||||||
|
|
||||||
|
int
|
||||||
|
rdpPolyText8(DrawablePtr pDrawable, GCPtr pGC,
|
||||||
|
int x, int y, int count, char* chars);
|
||||||
|
|
||||||
|
#endif
|
137
xorg/X11R7.6/rdp/rdpPushPixels.c
Normal file
137
xorg/X11R7.6/rdp/rdpPushPixels.c
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2005-2012 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 "rdp.h"
|
||||||
|
#include "rdpdraw.h"
|
||||||
|
|
||||||
|
#define LDEBUG 0
|
||||||
|
|
||||||
|
#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 */
|
||||||
|
|
||||||
|
extern GCOps g_rdpGCOps; /* from rdpdraw.c */
|
||||||
|
|
||||||
|
extern int g_con_number; /* in rdpup.c */
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
void
|
||||||
|
rdpPushPixelsOrg(GCPtr pGC, PixmapPtr pBitMap, DrawablePtr pDst,
|
||||||
|
int w, int h, int x, int y)
|
||||||
|
{
|
||||||
|
rdpGCPtr priv;
|
||||||
|
GCFuncs* oldFuncs;
|
||||||
|
|
||||||
|
GC_OP_PROLOGUE(pGC);
|
||||||
|
pGC->ops->PushPixels(pGC, pBitMap, pDst, w, h, x, y);
|
||||||
|
GC_OP_EPILOGUE(pGC);
|
||||||
|
}
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
void
|
||||||
|
rdpPushPixels(GCPtr pGC, PixmapPtr pBitMap, DrawablePtr pDst,
|
||||||
|
int w, int h, int x, int y)
|
||||||
|
{
|
||||||
|
RegionRec clip_reg;
|
||||||
|
RegionRec box_reg;
|
||||||
|
int num_clips;
|
||||||
|
int cd;
|
||||||
|
int j;
|
||||||
|
int got_id;
|
||||||
|
BoxRec box;
|
||||||
|
struct image_data id;
|
||||||
|
WindowPtr pDstWnd;
|
||||||
|
PixmapPtr pDstPixmap;
|
||||||
|
rdpPixmapRec* pDstPriv;
|
||||||
|
|
||||||
|
LLOGLN(10, ("rdpPushPixels:"));
|
||||||
|
|
||||||
|
/* do original call */
|
||||||
|
rdpPushPixelsOrg(pGC, pBitMap, pDst, w, h, x, y);
|
||||||
|
|
||||||
|
got_id = 0;
|
||||||
|
if (pDst->type == DRAWABLE_PIXMAP)
|
||||||
|
{
|
||||||
|
pDstPixmap = (PixmapPtr)pDst;
|
||||||
|
pDstPriv = GETPIXPRIV(pDstPixmap);
|
||||||
|
if (XRDP_IS_OS(pDstPriv))
|
||||||
|
{
|
||||||
|
rdpup_switch_os_surface(pDstPriv->rdpid);
|
||||||
|
rdpup_get_pixmap_image_rect(pDstPixmap, &id);
|
||||||
|
got_id = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (pDst->type == DRAWABLE_WINDOW)
|
||||||
|
{
|
||||||
|
pDstWnd = (WindowPtr)pDst;
|
||||||
|
if (pDstWnd->viewable)
|
||||||
|
{
|
||||||
|
rdpup_get_screen_image_rect(&id);
|
||||||
|
got_id = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!got_id)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
memset(&box, 0, sizeof(box));
|
||||||
|
RegionInit(&clip_reg, NullBox, 0);
|
||||||
|
cd = rdp_get_clip(&clip_reg, pDst, pGC);
|
||||||
|
if (cd == 1)
|
||||||
|
{
|
||||||
|
rdpup_begin_update();
|
||||||
|
rdpup_send_area(0, x, y, w, h);
|
||||||
|
rdpup_end_update();
|
||||||
|
}
|
||||||
|
else if (cd == 2)
|
||||||
|
{
|
||||||
|
RegionInit(&box_reg, &box, 0);
|
||||||
|
RegionIntersect(&clip_reg, &clip_reg, &box_reg);
|
||||||
|
num_clips = REGION_NUM_RECTS(&clip_reg);
|
||||||
|
if (num_clips > 0)
|
||||||
|
{
|
||||||
|
rdpup_begin_update();
|
||||||
|
for (j = num_clips - 1; j >= 0; j--)
|
||||||
|
{
|
||||||
|
box = REGION_RECTS(&clip_reg)[j];
|
||||||
|
rdpup_send_area(0, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
||||||
|
}
|
||||||
|
rdpup_end_update();
|
||||||
|
}
|
||||||
|
RegionUninit(&box_reg);
|
||||||
|
}
|
||||||
|
RegionUninit(&clip_reg);
|
||||||
|
rdpup_switch_os_surface(-1);
|
||||||
|
}
|
29
xorg/X11R7.6/rdp/rdpPushPixels.h
Normal file
29
xorg/X11R7.6/rdp/rdpPushPixels.h
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2005-2012 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 __RDPPUSHPIXELS_H
|
||||||
|
#define __RDPPUSHPIXELS_H
|
||||||
|
|
||||||
|
void
|
||||||
|
rdpPushPixels(GCPtr pGC, PixmapPtr pBitMap, DrawablePtr pDst,
|
||||||
|
int w, int h, int x, int y);
|
||||||
|
|
||||||
|
#endif
|
@ -34,6 +34,17 @@ Xserver drawing ops and funcs
|
|||||||
#include "rdpFillSpans.h"
|
#include "rdpFillSpans.h"
|
||||||
#include "rdpSetSpans.h"
|
#include "rdpSetSpans.h"
|
||||||
#include "rdpCopyPlane.h"
|
#include "rdpCopyPlane.h"
|
||||||
|
#include "rdpPolyPoint.h"
|
||||||
|
#include "rdpPolyArc.h"
|
||||||
|
#include "rdpFillPolygon.h"
|
||||||
|
#include "rdpPolyFillArc.h"
|
||||||
|
#include "rdpPolyText8.h"
|
||||||
|
#include "rdpPolyText16.h"
|
||||||
|
#include "rdpImageText8.h"
|
||||||
|
#include "rdpImageText16.h"
|
||||||
|
#include "rdpImageGlyphBlt.h"
|
||||||
|
#include "rdpPolyGlyphBlt.h"
|
||||||
|
#include "rdpPushPixels.h"
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
#define DEBUG_OUT_FUNCS(arg)
|
#define DEBUG_OUT_FUNCS(arg)
|
||||||
@ -131,7 +142,7 @@ rdp_get_clip(RegionPtr pRegion, DrawablePtr pDrawable, GCPtr pGC)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
static void
|
void
|
||||||
GetTextBoundingBox(DrawablePtr pDrawable, FontPtr font, int x, int y,
|
GetTextBoundingBox(DrawablePtr pDrawable, FontPtr font, int x, int y,
|
||||||
int n, BoxPtr pbox)
|
int n, BoxPtr pbox)
|
||||||
{
|
{
|
||||||
@ -318,768 +329,6 @@ rdpCopyClip(GCPtr dst, GCPtr src)
|
|||||||
(_pGC)->ops = &g_rdpGCOps; \
|
(_pGC)->ops = &g_rdpGCOps; \
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************/
|
|
||||||
static void
|
|
||||||
rdpPolyPoint(DrawablePtr pDrawable, GCPtr pGC, int mode,
|
|
||||||
int npt, DDXPointPtr in_pts)
|
|
||||||
{
|
|
||||||
rdpGCPtr priv;
|
|
||||||
RegionRec clip_reg;
|
|
||||||
int num_clips;
|
|
||||||
int cd;
|
|
||||||
int x;
|
|
||||||
int y;
|
|
||||||
int i;
|
|
||||||
int j;
|
|
||||||
GCFuncs* oldFuncs;
|
|
||||||
BoxRec box;
|
|
||||||
BoxRec total_box;
|
|
||||||
DDXPointPtr pts;
|
|
||||||
DDXPointRec stack_pts[32];
|
|
||||||
|
|
||||||
DEBUG_OUT_OPS(("in rdpPolyPoint\n"));
|
|
||||||
GC_OP_PROLOGUE(pGC);
|
|
||||||
if (npt > 32)
|
|
||||||
{
|
|
||||||
pts = (DDXPointPtr)g_malloc(sizeof(DDXPointRec) * npt, 0);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
pts = stack_pts;
|
|
||||||
}
|
|
||||||
for (i = 0; i < npt; i++)
|
|
||||||
{
|
|
||||||
pts[i].x = pDrawable->x + in_pts[i].x;
|
|
||||||
pts[i].y = pDrawable->y + in_pts[i].y;
|
|
||||||
if (i == 0)
|
|
||||||
{
|
|
||||||
total_box.x1 = pts[0].x;
|
|
||||||
total_box.y1 = pts[0].y;
|
|
||||||
total_box.x2 = pts[0].x;
|
|
||||||
total_box.y2 = pts[0].y;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (pts[i].x < total_box.x1)
|
|
||||||
{
|
|
||||||
total_box.x1 = pts[i].x;
|
|
||||||
}
|
|
||||||
if (pts[i].y < total_box.y1)
|
|
||||||
{
|
|
||||||
total_box.y1 = pts[i].y;
|
|
||||||
}
|
|
||||||
if (pts[i].x > total_box.x2)
|
|
||||||
{
|
|
||||||
total_box.x2 = pts[i].x;
|
|
||||||
}
|
|
||||||
if (pts[i].y > total_box.y2)
|
|
||||||
{
|
|
||||||
total_box.y2 = pts[i].y;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* todo, use this total_box */
|
|
||||||
}
|
|
||||||
pGC->ops->PolyPoint(pDrawable, pGC, mode, npt, in_pts);
|
|
||||||
RegionInit(&clip_reg, NullBox, 0);
|
|
||||||
cd = rdp_get_clip(&clip_reg, pDrawable, pGC);
|
|
||||||
if (cd == 1)
|
|
||||||
{
|
|
||||||
if (npt > 0)
|
|
||||||
{
|
|
||||||
rdpup_begin_update();
|
|
||||||
rdpup_set_fgcolor(pGC->fgPixel);
|
|
||||||
for (i = 0; i < npt; i++)
|
|
||||||
{
|
|
||||||
x = pts[i].x;
|
|
||||||
y = pts[i].y;
|
|
||||||
rdpup_fill_rect(x, y, 1, 1);
|
|
||||||
}
|
|
||||||
rdpup_end_update();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (cd == 2)
|
|
||||||
{
|
|
||||||
num_clips = REGION_NUM_RECTS(&clip_reg);
|
|
||||||
if (npt > 0 && num_clips > 0)
|
|
||||||
{
|
|
||||||
rdpup_begin_update();
|
|
||||||
rdpup_set_fgcolor(pGC->fgPixel);
|
|
||||||
for (j = num_clips - 1; j >= 0; j--)
|
|
||||||
{
|
|
||||||
box = REGION_RECTS(&clip_reg)[j];
|
|
||||||
rdpup_set_clip(box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
|
||||||
for (i = 0; i < npt; i++)
|
|
||||||
{
|
|
||||||
x = pts[i].x;
|
|
||||||
y = pts[i].y;
|
|
||||||
rdpup_fill_rect(x, y, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
rdpup_reset_clip();
|
|
||||||
rdpup_end_update();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
RegionUninit(&clip_reg);
|
|
||||||
if (pts != stack_pts)
|
|
||||||
{
|
|
||||||
g_free(pts);
|
|
||||||
}
|
|
||||||
GC_OP_EPILOGUE(pGC);
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************************/
|
|
||||||
static void
|
|
||||||
rdpPolyArc(DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc* parcs)
|
|
||||||
{
|
|
||||||
rdpGCPtr priv;
|
|
||||||
RegionRec clip_reg;
|
|
||||||
RegionPtr tmpRegion;
|
|
||||||
int cd;
|
|
||||||
int lw;
|
|
||||||
int extra;
|
|
||||||
int i;
|
|
||||||
int num_clips;
|
|
||||||
GCFuncs* oldFuncs;
|
|
||||||
xRectangle* rects;
|
|
||||||
BoxRec box;
|
|
||||||
|
|
||||||
DEBUG_OUT_OPS(("in rdpPolyArc\n"));
|
|
||||||
GC_OP_PROLOGUE(pGC);
|
|
||||||
rects = 0;
|
|
||||||
if (narcs > 0)
|
|
||||||
{
|
|
||||||
rects = (xRectangle*)g_malloc(narcs * sizeof(xRectangle), 0);
|
|
||||||
lw = pGC->lineWidth;
|
|
||||||
if (lw == 0)
|
|
||||||
{
|
|
||||||
lw = 1;
|
|
||||||
}
|
|
||||||
extra = lw / 2;
|
|
||||||
for (i = 0; i < narcs; i++)
|
|
||||||
{
|
|
||||||
rects[i].x = (parcs[i].x - extra) + pDrawable->x;
|
|
||||||
rects[i].y = (parcs[i].y - extra) + pDrawable->y;
|
|
||||||
rects[i].width = parcs[i].width + lw;
|
|
||||||
rects[i].height = parcs[i].height + lw;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
pGC->ops->PolyArc(pDrawable, pGC, narcs, parcs);
|
|
||||||
RegionInit(&clip_reg, NullBox, 0);
|
|
||||||
cd = rdp_get_clip(&clip_reg, pDrawable, pGC);
|
|
||||||
if (cd == 1)
|
|
||||||
{
|
|
||||||
if (rects != 0)
|
|
||||||
{
|
|
||||||
tmpRegion = RegionFromRects(narcs, rects, CT_NONE);
|
|
||||||
num_clips = REGION_NUM_RECTS(tmpRegion);
|
|
||||||
if (num_clips > 0)
|
|
||||||
{
|
|
||||||
rdpup_begin_update();
|
|
||||||
for (i = num_clips - 1; i >= 0; i--)
|
|
||||||
{
|
|
||||||
box = REGION_RECTS(tmpRegion)[i];
|
|
||||||
rdpup_send_area(0, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
|
||||||
}
|
|
||||||
rdpup_end_update();
|
|
||||||
}
|
|
||||||
RegionDestroy(tmpRegion);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (cd == 2)
|
|
||||||
{
|
|
||||||
if (rects != 0)
|
|
||||||
{
|
|
||||||
tmpRegion = RegionFromRects(narcs, rects, CT_NONE);
|
|
||||||
RegionIntersect(tmpRegion, tmpRegion, &clip_reg);
|
|
||||||
num_clips = REGION_NUM_RECTS(tmpRegion);
|
|
||||||
if (num_clips > 0)
|
|
||||||
{
|
|
||||||
rdpup_begin_update();
|
|
||||||
for (i = num_clips - 1; i >= 0; i--)
|
|
||||||
{
|
|
||||||
box = REGION_RECTS(tmpRegion)[i];
|
|
||||||
rdpup_send_area(0, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
|
||||||
}
|
|
||||||
rdpup_end_update();
|
|
||||||
}
|
|
||||||
RegionDestroy(tmpRegion);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
RegionUninit(&clip_reg);
|
|
||||||
g_free(rects);
|
|
||||||
GC_OP_EPILOGUE(pGC);
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************************/
|
|
||||||
static void
|
|
||||||
rdpFillPolygon(DrawablePtr pDrawable, GCPtr pGC,
|
|
||||||
int shape, int mode, int count,
|
|
||||||
DDXPointPtr pPts)
|
|
||||||
{
|
|
||||||
rdpGCPtr priv;
|
|
||||||
RegionRec clip_reg;
|
|
||||||
RegionRec box_reg;
|
|
||||||
int num_clips;
|
|
||||||
int cd;
|
|
||||||
int maxx;
|
|
||||||
int maxy;
|
|
||||||
int minx;
|
|
||||||
int miny;
|
|
||||||
int i;
|
|
||||||
int j;
|
|
||||||
GCFuncs* oldFuncs;
|
|
||||||
BoxRec box;
|
|
||||||
|
|
||||||
DEBUG_OUT_OPS(("in rdpFillPolygon\n"));
|
|
||||||
GC_OP_PROLOGUE(pGC);
|
|
||||||
pGC->ops->FillPolygon(pDrawable, pGC, shape, mode, count, pPts);
|
|
||||||
RegionInit(&clip_reg, NullBox, 0);
|
|
||||||
cd = rdp_get_clip(&clip_reg, pDrawable, pGC);
|
|
||||||
if (cd != 0)
|
|
||||||
{
|
|
||||||
box.x1 = 0;
|
|
||||||
box.y1 = 0;
|
|
||||||
box.x2 = 0;
|
|
||||||
box.y2 = 0;
|
|
||||||
if (count > 0)
|
|
||||||
{
|
|
||||||
maxx = pPts[0].x;
|
|
||||||
maxy = pPts[0].y;
|
|
||||||
minx = maxx;
|
|
||||||
miny = maxy;
|
|
||||||
for (i = 1; i < count; i++)
|
|
||||||
{
|
|
||||||
if (pPts[i].x > maxx)
|
|
||||||
{
|
|
||||||
maxx = pPts[i].x;
|
|
||||||
}
|
|
||||||
if (pPts[i].x < minx)
|
|
||||||
{
|
|
||||||
minx = pPts[i].x;
|
|
||||||
}
|
|
||||||
if (pPts[i].y > maxy)
|
|
||||||
{
|
|
||||||
maxy = pPts[i].y;
|
|
||||||
}
|
|
||||||
if (pPts[i].y < miny)
|
|
||||||
{
|
|
||||||
miny = pPts[i].y;
|
|
||||||
}
|
|
||||||
box.x1 = pDrawable->x + minx;
|
|
||||||
box.y1 = pDrawable->y + miny;
|
|
||||||
box.x2 = pDrawable->x + maxx + 1;
|
|
||||||
box.y2 = pDrawable->y + maxy + 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (cd == 1)
|
|
||||||
{
|
|
||||||
rdpup_begin_update();
|
|
||||||
rdpup_send_area(0, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
|
||||||
rdpup_end_update();
|
|
||||||
}
|
|
||||||
else if (cd == 2)
|
|
||||||
{
|
|
||||||
RegionInit(&box_reg, &box, 0);
|
|
||||||
RegionIntersect(&clip_reg, &clip_reg, &box_reg);
|
|
||||||
num_clips = REGION_NUM_RECTS(&clip_reg);
|
|
||||||
if (num_clips > 0)
|
|
||||||
{
|
|
||||||
rdpup_begin_update();
|
|
||||||
for (j = num_clips - 1; j >= 0; j--)
|
|
||||||
{
|
|
||||||
box = REGION_RECTS(&clip_reg)[j];
|
|
||||||
rdpup_send_area(0, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
|
||||||
}
|
|
||||||
rdpup_end_update();
|
|
||||||
}
|
|
||||||
RegionUninit(&box_reg);
|
|
||||||
}
|
|
||||||
RegionUninit(&clip_reg);
|
|
||||||
GC_OP_EPILOGUE(pGC);
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************************/
|
|
||||||
static void
|
|
||||||
rdpPolyFillArc(DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc* parcs)
|
|
||||||
{
|
|
||||||
rdpGCPtr priv;
|
|
||||||
RegionRec clip_reg;
|
|
||||||
RegionPtr tmpRegion;
|
|
||||||
int cd;
|
|
||||||
int lw;
|
|
||||||
int extra;
|
|
||||||
int i;
|
|
||||||
int num_clips;
|
|
||||||
GCFuncs* oldFuncs;
|
|
||||||
xRectangle* rects;
|
|
||||||
BoxRec box;
|
|
||||||
|
|
||||||
DEBUG_OUT_OPS(("in rdpPolyFillArc\n"));
|
|
||||||
GC_OP_PROLOGUE(pGC);
|
|
||||||
rects = 0;
|
|
||||||
if (narcs > 0)
|
|
||||||
{
|
|
||||||
rects = (xRectangle*)g_malloc(narcs * sizeof(xRectangle), 0);
|
|
||||||
lw = pGC->lineWidth;
|
|
||||||
if (lw == 0)
|
|
||||||
{
|
|
||||||
lw = 1;
|
|
||||||
}
|
|
||||||
extra = lw / 2;
|
|
||||||
for (i = 0; i < narcs; i++)
|
|
||||||
{
|
|
||||||
rects[i].x = (parcs[i].x - extra) + pDrawable->x;
|
|
||||||
rects[i].y = (parcs[i].y - extra) + pDrawable->y;
|
|
||||||
rects[i].width = parcs[i].width + lw;
|
|
||||||
rects[i].height = parcs[i].height + lw;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
pGC->ops->PolyFillArc(pDrawable, pGC, narcs, parcs);
|
|
||||||
RegionInit(&clip_reg, NullBox, 0);
|
|
||||||
cd = rdp_get_clip(&clip_reg, pDrawable, pGC);
|
|
||||||
if (cd == 1)
|
|
||||||
{
|
|
||||||
if (rects != 0)
|
|
||||||
{
|
|
||||||
tmpRegion = RegionFromRects(narcs, rects, CT_NONE);
|
|
||||||
num_clips = REGION_NUM_RECTS(tmpRegion);
|
|
||||||
if (num_clips > 0)
|
|
||||||
{
|
|
||||||
rdpup_begin_update();
|
|
||||||
for (i = num_clips - 1; i >= 0; i--)
|
|
||||||
{
|
|
||||||
box = REGION_RECTS(tmpRegion)[i];
|
|
||||||
rdpup_send_area(0, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
|
||||||
}
|
|
||||||
rdpup_end_update();
|
|
||||||
}
|
|
||||||
RegionDestroy(tmpRegion);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (cd == 2)
|
|
||||||
{
|
|
||||||
if (rects != 0)
|
|
||||||
{
|
|
||||||
tmpRegion = RegionFromRects(narcs, rects, CT_NONE);
|
|
||||||
RegionIntersect(tmpRegion, tmpRegion, &clip_reg);
|
|
||||||
num_clips = REGION_NUM_RECTS(tmpRegion);
|
|
||||||
if (num_clips > 0)
|
|
||||||
{
|
|
||||||
rdpup_begin_update();
|
|
||||||
for (i = num_clips - 1; i >= 0; i--)
|
|
||||||
{
|
|
||||||
box = REGION_RECTS(tmpRegion)[i];
|
|
||||||
rdpup_send_area(0, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
|
||||||
}
|
|
||||||
rdpup_end_update();
|
|
||||||
}
|
|
||||||
RegionDestroy(tmpRegion);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
RegionUninit(&clip_reg);
|
|
||||||
g_free(rects);
|
|
||||||
GC_OP_EPILOGUE(pGC);
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************************/
|
|
||||||
static int
|
|
||||||
rdpPolyText8(DrawablePtr pDrawable, GCPtr pGC,
|
|
||||||
int x, int y, int count, char* chars)
|
|
||||||
{
|
|
||||||
rdpGCPtr priv;
|
|
||||||
RegionRec reg;
|
|
||||||
RegionRec reg1;
|
|
||||||
int num_clips;
|
|
||||||
int cd;
|
|
||||||
int j;
|
|
||||||
int rv;
|
|
||||||
GCFuncs* oldFuncs;
|
|
||||||
BoxRec box;
|
|
||||||
|
|
||||||
DEBUG_OUT_OPS(("in rdpPolyText8\n"));
|
|
||||||
GC_OP_PROLOGUE(pGC);
|
|
||||||
if (count != 0)
|
|
||||||
{
|
|
||||||
GetTextBoundingBox(pDrawable, pGC->font, x, y, count, &box);
|
|
||||||
}
|
|
||||||
rv = pGC->ops->PolyText8(pDrawable, pGC, x, y, count, chars);
|
|
||||||
RegionInit(®, NullBox, 0);
|
|
||||||
if (count == 0)
|
|
||||||
{
|
|
||||||
cd = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
cd = rdp_get_clip(®, pDrawable, pGC);
|
|
||||||
}
|
|
||||||
if (cd == 1)
|
|
||||||
{
|
|
||||||
rdpup_begin_update();
|
|
||||||
rdpup_send_area(0, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
|
||||||
rdpup_end_update();
|
|
||||||
}
|
|
||||||
else if (cd == 2)
|
|
||||||
{
|
|
||||||
RegionInit(®1, &box, 0);
|
|
||||||
RegionIntersect(®, ®, ®1);
|
|
||||||
num_clips = REGION_NUM_RECTS(®);
|
|
||||||
if (num_clips > 0)
|
|
||||||
{
|
|
||||||
rdpup_begin_update();
|
|
||||||
for (j = num_clips - 1; j >= 0; j--)
|
|
||||||
{
|
|
||||||
box = REGION_RECTS(®)[j];
|
|
||||||
rdpup_send_area(0, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
|
||||||
}
|
|
||||||
rdpup_end_update();
|
|
||||||
}
|
|
||||||
RegionUninit(®1);
|
|
||||||
}
|
|
||||||
RegionUninit(®);
|
|
||||||
GC_OP_EPILOGUE(pGC);
|
|
||||||
return rv;
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************************/
|
|
||||||
static int
|
|
||||||
rdpPolyText16(DrawablePtr pDrawable, GCPtr pGC,
|
|
||||||
int x, int y, int count, unsigned short* chars)
|
|
||||||
{
|
|
||||||
rdpGCPtr priv;
|
|
||||||
RegionRec reg;
|
|
||||||
RegionRec reg1;
|
|
||||||
int num_clips;
|
|
||||||
int cd;
|
|
||||||
int j;
|
|
||||||
int rv;
|
|
||||||
GCFuncs* oldFuncs;
|
|
||||||
BoxRec box;
|
|
||||||
|
|
||||||
DEBUG_OUT_OPS(("in rdpPolyText16\n"));
|
|
||||||
GC_OP_PROLOGUE(pGC);
|
|
||||||
if (count != 0)
|
|
||||||
{
|
|
||||||
GetTextBoundingBox(pDrawable, pGC->font, x, y, count, &box);
|
|
||||||
}
|
|
||||||
rv = pGC->ops->PolyText16(pDrawable, pGC, x, y, count, chars);
|
|
||||||
RegionInit(®, NullBox, 0);
|
|
||||||
if (count == 0)
|
|
||||||
{
|
|
||||||
cd = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
cd = rdp_get_clip(®, pDrawable, pGC);
|
|
||||||
}
|
|
||||||
if (cd == 1)
|
|
||||||
{
|
|
||||||
rdpup_begin_update();
|
|
||||||
rdpup_send_area(0, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
|
||||||
rdpup_end_update();
|
|
||||||
}
|
|
||||||
else if (cd == 2)
|
|
||||||
{
|
|
||||||
RegionInit(®1, &box, 0);
|
|
||||||
RegionIntersect(®, ®, ®1);
|
|
||||||
num_clips = REGION_NUM_RECTS(®);
|
|
||||||
if (num_clips > 0)
|
|
||||||
{
|
|
||||||
rdpup_begin_update();
|
|
||||||
for (j = num_clips - 1; j >= 0; j--)
|
|
||||||
{
|
|
||||||
box = REGION_RECTS(®)[j];
|
|
||||||
rdpup_send_area(0, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
|
||||||
}
|
|
||||||
rdpup_end_update();
|
|
||||||
}
|
|
||||||
RegionUninit(®1);
|
|
||||||
}
|
|
||||||
RegionUninit(®);
|
|
||||||
GC_OP_EPILOGUE(pGC);
|
|
||||||
return rv;
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************************/
|
|
||||||
static void
|
|
||||||
rdpImageText8(DrawablePtr pDrawable, GCPtr pGC,
|
|
||||||
int x, int y, int count, char* chars)
|
|
||||||
{
|
|
||||||
rdpGCPtr priv;
|
|
||||||
RegionRec clip_reg;
|
|
||||||
RegionRec box_reg;
|
|
||||||
int num_clips;
|
|
||||||
int cd;
|
|
||||||
int j;
|
|
||||||
GCFuncs* oldFuncs;
|
|
||||||
BoxRec box;
|
|
||||||
|
|
||||||
DEBUG_OUT_OPS(("in rdpImageText8\n"));
|
|
||||||
GC_OP_PROLOGUE(pGC);
|
|
||||||
if (count != 0)
|
|
||||||
{
|
|
||||||
GetTextBoundingBox(pDrawable, pGC->font, x, y, count, &box);
|
|
||||||
}
|
|
||||||
pGC->ops->ImageText8(pDrawable, pGC, x, y, count, chars);
|
|
||||||
RegionInit(&clip_reg, NullBox, 0);
|
|
||||||
if (count == 0)
|
|
||||||
{
|
|
||||||
cd = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
cd = rdp_get_clip(&clip_reg, pDrawable, pGC);
|
|
||||||
}
|
|
||||||
if (cd == 1)
|
|
||||||
{
|
|
||||||
rdpup_begin_update();
|
|
||||||
rdpup_send_area(0, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
|
||||||
rdpup_end_update();
|
|
||||||
}
|
|
||||||
else if (cd == 2)
|
|
||||||
{
|
|
||||||
RegionInit(&box_reg, &box, 0);
|
|
||||||
RegionIntersect(&clip_reg, &clip_reg, &box_reg);
|
|
||||||
num_clips = REGION_NUM_RECTS(&clip_reg);
|
|
||||||
if (num_clips > 0)
|
|
||||||
{
|
|
||||||
rdpup_begin_update();
|
|
||||||
for (j = num_clips - 1; j >= 0; j--)
|
|
||||||
{
|
|
||||||
box = REGION_RECTS(&clip_reg)[j];
|
|
||||||
rdpup_send_area(0, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
|
||||||
}
|
|
||||||
rdpup_end_update();
|
|
||||||
}
|
|
||||||
RegionUninit(&box_reg);
|
|
||||||
}
|
|
||||||
RegionUninit(&clip_reg);
|
|
||||||
GC_OP_EPILOGUE(pGC);
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************************/
|
|
||||||
static void
|
|
||||||
rdpImageText16(DrawablePtr pDrawable, GCPtr pGC,
|
|
||||||
int x, int y, int count,
|
|
||||||
unsigned short* chars)
|
|
||||||
{
|
|
||||||
rdpGCPtr priv;
|
|
||||||
RegionRec clip_reg;
|
|
||||||
RegionRec box_reg;
|
|
||||||
int num_clips;
|
|
||||||
int cd;
|
|
||||||
int j;
|
|
||||||
GCFuncs* oldFuncs;
|
|
||||||
BoxRec box;
|
|
||||||
|
|
||||||
DEBUG_OUT_OPS(("in rdpImageText16\n"));
|
|
||||||
GC_OP_PROLOGUE(pGC);
|
|
||||||
if (count != 0)
|
|
||||||
{
|
|
||||||
GetTextBoundingBox(pDrawable, pGC->font, x, y, count, &box);
|
|
||||||
}
|
|
||||||
pGC->ops->ImageText16(pDrawable, pGC, x, y, count, chars);
|
|
||||||
RegionInit(&clip_reg, NullBox, 0);
|
|
||||||
if (count == 0)
|
|
||||||
{
|
|
||||||
cd = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
cd = rdp_get_clip(&clip_reg, pDrawable, pGC);
|
|
||||||
}
|
|
||||||
if (cd == 1)
|
|
||||||
{
|
|
||||||
rdpup_begin_update();
|
|
||||||
rdpup_send_area(0, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
|
||||||
rdpup_end_update();
|
|
||||||
}
|
|
||||||
else if (cd == 2)
|
|
||||||
{
|
|
||||||
RegionInit(&box_reg, &box, 0);
|
|
||||||
RegionIntersect(&clip_reg, &clip_reg, &box_reg);
|
|
||||||
num_clips = REGION_NUM_RECTS(&clip_reg);
|
|
||||||
if (num_clips > 0)
|
|
||||||
{
|
|
||||||
rdpup_begin_update();
|
|
||||||
for (j = num_clips - 1; j >= 0; j--)
|
|
||||||
{
|
|
||||||
box = REGION_RECTS(&clip_reg)[j];
|
|
||||||
rdpup_send_area(0, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
|
||||||
}
|
|
||||||
rdpup_end_update();
|
|
||||||
}
|
|
||||||
RegionUninit(&box_reg);
|
|
||||||
}
|
|
||||||
RegionUninit(&clip_reg);
|
|
||||||
GC_OP_EPILOGUE(pGC);
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************************/
|
|
||||||
static void
|
|
||||||
rdpImageGlyphBlt(DrawablePtr pDrawable, GCPtr pGC,
|
|
||||||
int x, int y, unsigned int nglyph,
|
|
||||||
CharInfoPtr* ppci, pointer pglyphBase)
|
|
||||||
{
|
|
||||||
rdpGCPtr priv;
|
|
||||||
RegionRec reg;
|
|
||||||
RegionRec box_reg;
|
|
||||||
int num_clips;
|
|
||||||
int cd;
|
|
||||||
int j;
|
|
||||||
GCFuncs* oldFuncs;
|
|
||||||
BoxRec box;
|
|
||||||
|
|
||||||
DEBUG_OUT_OPS(("in rdpImageGlyphBlt\n"));
|
|
||||||
GC_OP_PROLOGUE(pGC);
|
|
||||||
if (nglyph != 0)
|
|
||||||
{
|
|
||||||
GetTextBoundingBox(pDrawable, pGC->font, x, y, nglyph, &box);
|
|
||||||
}
|
|
||||||
pGC->ops->ImageGlyphBlt(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase);
|
|
||||||
RegionInit(®, NullBox, 0);
|
|
||||||
if (nglyph == 0)
|
|
||||||
{
|
|
||||||
cd = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
cd = rdp_get_clip(®, pDrawable, pGC);
|
|
||||||
}
|
|
||||||
if (cd == 1)
|
|
||||||
{
|
|
||||||
rdpup_begin_update();
|
|
||||||
rdpup_send_area(0, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
|
||||||
rdpup_end_update();
|
|
||||||
}
|
|
||||||
else if (cd == 2)
|
|
||||||
{
|
|
||||||
RegionInit(&box_reg, &box, 0);
|
|
||||||
RegionIntersect(®, ®, &box_reg);
|
|
||||||
num_clips = REGION_NUM_RECTS(®);
|
|
||||||
if (num_clips > 0)
|
|
||||||
{
|
|
||||||
rdpup_begin_update();
|
|
||||||
for (j = num_clips - 1; j >= 0; j--)
|
|
||||||
{
|
|
||||||
box = REGION_RECTS(®)[j];
|
|
||||||
rdpup_send_area(0, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
|
||||||
}
|
|
||||||
rdpup_end_update();
|
|
||||||
}
|
|
||||||
RegionUninit(&box_reg);
|
|
||||||
}
|
|
||||||
RegionUninit(®);
|
|
||||||
GC_OP_EPILOGUE(pGC);
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************************/
|
|
||||||
static void
|
|
||||||
rdpPolyGlyphBlt(DrawablePtr pDrawable, GCPtr pGC,
|
|
||||||
int x, int y, unsigned int nglyph,
|
|
||||||
CharInfoPtr* ppci,
|
|
||||||
pointer pglyphBase)
|
|
||||||
{
|
|
||||||
rdpGCPtr priv;
|
|
||||||
RegionRec reg;
|
|
||||||
RegionRec box_reg;
|
|
||||||
int num_clips;
|
|
||||||
int cd;
|
|
||||||
int j;
|
|
||||||
GCFuncs* oldFuncs;
|
|
||||||
BoxRec box;
|
|
||||||
|
|
||||||
DEBUG_OUT_OPS(("in rdpPolyGlyphBlt\n"));
|
|
||||||
GC_OP_PROLOGUE(pGC);
|
|
||||||
memset(&box, 0, sizeof(box));
|
|
||||||
if (nglyph != 0)
|
|
||||||
{
|
|
||||||
GetTextBoundingBox(pDrawable, pGC->font, x, y, nglyph, &box);
|
|
||||||
}
|
|
||||||
pGC->ops->PolyGlyphBlt(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase);
|
|
||||||
RegionInit(®, NullBox, 0);
|
|
||||||
if (nglyph == 0)
|
|
||||||
{
|
|
||||||
cd = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
cd = rdp_get_clip(®, pDrawable, pGC);
|
|
||||||
}
|
|
||||||
if (cd == 1)
|
|
||||||
{
|
|
||||||
rdpup_begin_update();
|
|
||||||
rdpup_send_area(0, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
|
||||||
rdpup_end_update();
|
|
||||||
}
|
|
||||||
else if (cd == 2)
|
|
||||||
{
|
|
||||||
RegionInit(&box_reg, &box, 0);
|
|
||||||
RegionIntersect(®, ®, &box_reg);
|
|
||||||
num_clips = REGION_NUM_RECTS(®);
|
|
||||||
if (num_clips > 0)
|
|
||||||
{
|
|
||||||
rdpup_begin_update();
|
|
||||||
for (j = num_clips - 1; j >= 0; j--)
|
|
||||||
{
|
|
||||||
box = REGION_RECTS(®)[j];
|
|
||||||
rdpup_send_area(0, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
|
||||||
}
|
|
||||||
rdpup_end_update();
|
|
||||||
}
|
|
||||||
RegionUninit(&box_reg);
|
|
||||||
}
|
|
||||||
RegionUninit(®);
|
|
||||||
GC_OP_EPILOGUE(pGC);
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************************/
|
|
||||||
static void
|
|
||||||
rdpPushPixels(GCPtr pGC, PixmapPtr pBitMap, DrawablePtr pDst,
|
|
||||||
int w, int h, int x, int y)
|
|
||||||
{
|
|
||||||
rdpGCPtr priv;
|
|
||||||
RegionRec clip_reg;
|
|
||||||
RegionRec box_reg;
|
|
||||||
int num_clips;
|
|
||||||
int cd;
|
|
||||||
int j;
|
|
||||||
GCFuncs* oldFuncs;
|
|
||||||
BoxRec box;
|
|
||||||
|
|
||||||
DEBUG_OUT_OPS(("in rdpPushPixels\n"));
|
|
||||||
GC_OP_PROLOGUE(pGC);
|
|
||||||
memset(&box, 0, sizeof(box));
|
|
||||||
pGC->ops->PushPixels(pGC, pBitMap, pDst, w, h, x, y);
|
|
||||||
RegionInit(&clip_reg, NullBox, 0);
|
|
||||||
cd = rdp_get_clip(&clip_reg, pDst, pGC);
|
|
||||||
if (cd == 1)
|
|
||||||
{
|
|
||||||
rdpup_begin_update();
|
|
||||||
rdpup_send_area(0, x, y, w, h);
|
|
||||||
rdpup_end_update();
|
|
||||||
}
|
|
||||||
else if (cd == 2)
|
|
||||||
{
|
|
||||||
RegionInit(&box_reg, &box, 0);
|
|
||||||
RegionIntersect(&clip_reg, &clip_reg, &box_reg);
|
|
||||||
num_clips = REGION_NUM_RECTS(&clip_reg);
|
|
||||||
if (num_clips > 0)
|
|
||||||
{
|
|
||||||
rdpup_begin_update();
|
|
||||||
for (j = num_clips - 1; j >= 0; j--)
|
|
||||||
{
|
|
||||||
box = REGION_RECTS(&clip_reg)[j];
|
|
||||||
rdpup_send_area(0, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
|
||||||
}
|
|
||||||
rdpup_end_update();
|
|
||||||
}
|
|
||||||
RegionUninit(&box_reg);
|
|
||||||
}
|
|
||||||
RegionUninit(&clip_reg);
|
|
||||||
GC_OP_EPILOGUE(pGC);
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
Bool
|
Bool
|
||||||
rdpCloseScreen(int i, ScreenPtr pScreen)
|
rdpCloseScreen(int i, ScreenPtr pScreen)
|
||||||
|
@ -41,5 +41,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||||||
|
|
||||||
int
|
int
|
||||||
rdp_get_clip(RegionPtr pRegion, DrawablePtr pDrawable, GCPtr pGC);
|
rdp_get_clip(RegionPtr pRegion, DrawablePtr pDrawable, GCPtr pGC);
|
||||||
|
void
|
||||||
|
GetTextBoundingBox(DrawablePtr pDrawable, FontPtr font, int x, int y,
|
||||||
|
int n, BoxPtr pbox);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user