xorg: work on delayed/dirty updates
This commit is contained in:
parent
ea98b503ca
commit
68ef2fadde
@ -311,6 +311,8 @@ int
|
|||||||
g_chmod_hex(const char* filename, int flags);
|
g_chmod_hex(const char* filename, int flags);
|
||||||
void
|
void
|
||||||
hexdump(unsigned char *p, unsigned int len);
|
hexdump(unsigned char *p, unsigned int len);
|
||||||
|
void
|
||||||
|
RegionAroundSegs(RegionPtr reg, xSegment* segs, int nseg);
|
||||||
|
|
||||||
/* rdpdraw.c */
|
/* rdpdraw.c */
|
||||||
Bool
|
Bool
|
||||||
|
@ -346,6 +346,25 @@ rdpCopyArea(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
|
|||||||
|
|
||||||
LLOGLN(10, ("rdpCopyArea:"));
|
LLOGLN(10, ("rdpCopyArea:"));
|
||||||
|
|
||||||
|
if (pSrc->type == DRAWABLE_PIXMAP)
|
||||||
|
{
|
||||||
|
pSrcPixmap = (PixmapPtr)pSrc;
|
||||||
|
pSrcPriv = GETPIXPRIV(pSrcPixmap);
|
||||||
|
if (XRDP_IS_OS(pSrcPriv))
|
||||||
|
{
|
||||||
|
rdpup_check_dirty(pSrcPixmap, pSrcPriv);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (pDst->type == DRAWABLE_PIXMAP)
|
||||||
|
{
|
||||||
|
pDstPixmap = (PixmapPtr)pDst;
|
||||||
|
pDstPriv = GETPIXPRIV(pDstPixmap);
|
||||||
|
if (XRDP_IS_OS(pDstPriv))
|
||||||
|
{
|
||||||
|
rdpup_check_dirty(pDstPixmap, pDstPriv);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (pSrc->type == DRAWABLE_WINDOW)
|
if (pSrc->type == DRAWABLE_WINDOW)
|
||||||
{
|
{
|
||||||
pSrcWnd = (WindowPtr)pSrc;
|
pSrcWnd = (WindowPtr)pSrc;
|
||||||
@ -373,7 +392,6 @@ rdpCopyArea(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
|
|||||||
can_do_screen_blt = pGC->alu == GXcopy;
|
can_do_screen_blt = pGC->alu == GXcopy;
|
||||||
if (can_do_screen_blt)
|
if (can_do_screen_blt)
|
||||||
{
|
{
|
||||||
rdpup_check_dirty(pDstPixmap, pDstPriv);
|
|
||||||
return rdpCopyAreaWndToPixmap(pSrcWnd, pDstPixmap, pDstPriv, pGC,
|
return rdpCopyAreaWndToPixmap(pSrcWnd, pDstPixmap, pDstPriv, pGC,
|
||||||
srcx, srcy, w, h, dstx, dsty);
|
srcx, srcy, w, h, dstx, dsty);
|
||||||
}
|
}
|
||||||
@ -387,7 +405,6 @@ rdpCopyArea(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
|
|||||||
pSrcPriv = GETPIXPRIV(pSrcPixmap);
|
pSrcPriv = GETPIXPRIV(pSrcPixmap);
|
||||||
if (XRDP_IS_OS(pSrcPriv))
|
if (XRDP_IS_OS(pSrcPriv))
|
||||||
{
|
{
|
||||||
rdpup_check_dirty(pSrcPixmap, pSrcPriv);
|
|
||||||
if (pDst->type == DRAWABLE_WINDOW)
|
if (pDst->type == DRAWABLE_WINDOW)
|
||||||
{
|
{
|
||||||
pDstWnd = (WindowPtr)pDst;
|
pDstWnd = (WindowPtr)pDst;
|
||||||
@ -403,7 +420,6 @@ rdpCopyArea(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
|
|||||||
pDstPriv = GETPIXPRIV(pDstPixmap);
|
pDstPriv = GETPIXPRIV(pDstPixmap);
|
||||||
if (XRDP_IS_OS(pDstPriv))
|
if (XRDP_IS_OS(pDstPriv))
|
||||||
{
|
{
|
||||||
rdpup_check_dirty(pDstPixmap, pDstPriv);
|
|
||||||
return rdpCopyAreaPixmapToPixmap(pSrcPixmap, pSrcPriv,
|
return rdpCopyAreaPixmapToPixmap(pSrcPixmap, pSrcPriv,
|
||||||
pDstPixmap, pDstPriv,
|
pDstPixmap, pDstPriv,
|
||||||
pGC, srcx, srcy, w, h,
|
pGC, srcx, srcy, w, h,
|
||||||
|
@ -86,11 +86,34 @@ rdpCopyPlane(DrawablePtr pSrc, DrawablePtr pDst,
|
|||||||
rdpPixmapRec* pDstPriv;
|
rdpPixmapRec* pDstPriv;
|
||||||
rdpPixmapRec* pDirtyPriv;
|
rdpPixmapRec* pDirtyPriv;
|
||||||
|
|
||||||
|
PixmapPtr pSrcPixmap;
|
||||||
|
rdpPixmapRec* pSrcPriv;
|
||||||
|
|
||||||
LLOGLN(10, ("rdpCopyPlane:"));
|
LLOGLN(10, ("rdpCopyPlane:"));
|
||||||
|
|
||||||
|
if (pSrc->type == DRAWABLE_PIXMAP)
|
||||||
|
{
|
||||||
|
pSrcPixmap = (PixmapPtr)pSrc;
|
||||||
|
pSrcPriv = GETPIXPRIV(pSrcPixmap);
|
||||||
|
if (XRDP_IS_OS(pSrcPriv))
|
||||||
|
{
|
||||||
|
rdpup_check_dirty(pSrcPixmap, pSrcPriv);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (pDst->type == DRAWABLE_PIXMAP)
|
||||||
|
{
|
||||||
|
pDstPixmap = (PixmapPtr)pDst;
|
||||||
|
pDstPriv = GETPIXPRIV(pDstPixmap);
|
||||||
|
if (XRDP_IS_OS(pDstPriv))
|
||||||
|
{
|
||||||
|
rdpup_check_dirty(pDstPixmap, pDstPriv);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* do original call */
|
/* do original call */
|
||||||
rv = rdpCopyPlaneOrg(pSrc, pDst, pGC, srcx, srcy, w, h,
|
rv = rdpCopyPlaneOrg(pSrc, pDst, pGC, srcx, srcy, w, h,
|
||||||
dstx, dsty, bitPlane);
|
dstx, dsty, bitPlane);
|
||||||
|
|
||||||
dirty_type = 0;
|
dirty_type = 0;
|
||||||
pDirtyPriv = 0;
|
pDirtyPriv = 0;
|
||||||
post_process = 0;
|
post_process = 0;
|
||||||
@ -108,7 +131,7 @@ rdpCopyPlane(DrawablePtr pSrc, DrawablePtr pDst,
|
|||||||
LLOGLN(10, ("rdpCopyPlane: gettig dirty"));
|
LLOGLN(10, ("rdpCopyPlane: gettig dirty"));
|
||||||
pDstPriv->is_dirty = 1;
|
pDstPriv->is_dirty = 1;
|
||||||
pDirtyPriv = pDstPriv;
|
pDirtyPriv = pDstPriv;
|
||||||
dirty_type = RDI_IMGLY;
|
dirty_type = RDI_IMGLL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -87,6 +87,41 @@ rdpFillPolygon(DrawablePtr pDrawable, GCPtr pGC,
|
|||||||
|
|
||||||
LLOGLN(10, ("rdpFillPolygon:"));
|
LLOGLN(10, ("rdpFillPolygon:"));
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
/* do original call */
|
/* do original call */
|
||||||
rdpFillPolygonOrg(pDrawable, pGC, shape, mode, count, pPts);
|
rdpFillPolygonOrg(pDrawable, pGC, shape, mode, count, pPts);
|
||||||
|
|
||||||
@ -107,7 +142,7 @@ rdpFillPolygon(DrawablePtr pDrawable, GCPtr pGC,
|
|||||||
LLOGLN(10, ("rdpFillPolygon: gettig dirty"));
|
LLOGLN(10, ("rdpFillPolygon: gettig dirty"));
|
||||||
pDstPriv->is_dirty = 1;
|
pDstPriv->is_dirty = 1;
|
||||||
pDirtyPriv = pDstPriv;
|
pDirtyPriv = pDstPriv;
|
||||||
dirty_type = RDI_IMGLY;
|
dirty_type = RDI_IMGLL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -138,43 +173,6 @@ rdpFillPolygon(DrawablePtr pDrawable, GCPtr pGC,
|
|||||||
|
|
||||||
RegionInit(&clip_reg, NullBox, 0);
|
RegionInit(&clip_reg, NullBox, 0);
|
||||||
cd = rdp_get_clip(&clip_reg, pDrawable, pGC);
|
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)
|
if (cd == 1)
|
||||||
{
|
{
|
||||||
if (dirty_type != 0)
|
if (dirty_type != 0)
|
||||||
|
@ -68,7 +68,7 @@ rdpFillSpans(DrawablePtr pDrawable, GCPtr pGC, int nInit,
|
|||||||
PixmapPtr pDstPixmap;
|
PixmapPtr pDstPixmap;
|
||||||
rdpPixmapRec* pDstPriv;
|
rdpPixmapRec* pDstPriv;
|
||||||
|
|
||||||
LLOGLN(0, ("rdpFillSpans: todo"));
|
LLOGLN(10, ("rdpFillSpans: todo"));
|
||||||
|
|
||||||
/* do original call */
|
/* do original call */
|
||||||
rdpFillSpansOrg(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted);
|
rdpFillSpansOrg(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted);
|
||||||
|
@ -62,6 +62,8 @@ rdpPolyPoint(DrawablePtr pDrawable, GCPtr pGC, int mode,
|
|||||||
int npt, DDXPointPtr in_pts)
|
int npt, DDXPointPtr in_pts)
|
||||||
{
|
{
|
||||||
RegionRec clip_reg;
|
RegionRec clip_reg;
|
||||||
|
RegionRec reg1;
|
||||||
|
RegionRec reg2;
|
||||||
int num_clips;
|
int num_clips;
|
||||||
int cd;
|
int cd;
|
||||||
int x;
|
int x;
|
||||||
@ -83,6 +85,7 @@ rdpPolyPoint(DrawablePtr pDrawable, GCPtr pGC, int mode,
|
|||||||
rdpPixmapRec* pDirtyPriv;
|
rdpPixmapRec* pDirtyPriv;
|
||||||
|
|
||||||
LLOGLN(10, ("rdpPolyPoint:"));
|
LLOGLN(10, ("rdpPolyPoint:"));
|
||||||
|
LLOGLN(10, ("rdpPolyPoint: npt %d", npt));
|
||||||
|
|
||||||
if (npt > 32)
|
if (npt > 32)
|
||||||
{
|
{
|
||||||
@ -145,7 +148,7 @@ rdpPolyPoint(DrawablePtr pDrawable, GCPtr pGC, int mode,
|
|||||||
LLOGLN(10, ("rdpPolyPoint: gettig dirty"));
|
LLOGLN(10, ("rdpPolyPoint: gettig dirty"));
|
||||||
pDstPriv->is_dirty = 1;
|
pDstPriv->is_dirty = 1;
|
||||||
pDirtyPriv = pDstPriv;
|
pDirtyPriv = pDstPriv;
|
||||||
dirty_type = RDI_IMGLY;
|
dirty_type = RDI_IMGLL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -182,7 +185,20 @@ rdpPolyPoint(DrawablePtr pDrawable, GCPtr pGC, int mode,
|
|||||||
{
|
{
|
||||||
if (dirty_type != 0)
|
if (dirty_type != 0)
|
||||||
{
|
{
|
||||||
/* TODO */
|
RegionInit(®1, NullBox, 0);
|
||||||
|
for (i = 0; i < npt; i++)
|
||||||
|
{
|
||||||
|
box.x1 = pts[i].x;
|
||||||
|
box.y1 = pts[i].y;
|
||||||
|
box.x2 = box.x1 + 1;
|
||||||
|
box.y2 = box.y1 + 1;
|
||||||
|
RegionInit(®2, &box, 0);
|
||||||
|
RegionUnion(®1, ®1, ®2);
|
||||||
|
RegionUninit(®2);
|
||||||
|
}
|
||||||
|
draw_item_add_fill_region(pDirtyPriv, ®1, pGC->fgPixel,
|
||||||
|
pGC->alu);
|
||||||
|
RegionUninit(®1);
|
||||||
}
|
}
|
||||||
else if (got_id)
|
else if (got_id)
|
||||||
{
|
{
|
||||||
@ -205,7 +221,21 @@ rdpPolyPoint(DrawablePtr pDrawable, GCPtr pGC, int mode,
|
|||||||
{
|
{
|
||||||
if (dirty_type != 0)
|
if (dirty_type != 0)
|
||||||
{
|
{
|
||||||
/* TODO */
|
RegionInit(®1, NullBox, 0);
|
||||||
|
for (i = 0; i < npt; i++)
|
||||||
|
{
|
||||||
|
box.x1 = pts[i].x;
|
||||||
|
box.y1 = pts[i].y;
|
||||||
|
box.x2 = box.x1 + 1;
|
||||||
|
box.y2 = box.y1 + 1;
|
||||||
|
RegionInit(®2, &box, 0);
|
||||||
|
RegionUnion(®1, ®1, ®2);
|
||||||
|
RegionUninit(®2);
|
||||||
|
}
|
||||||
|
RegionIntersect(®1, ®1, &clip_reg);
|
||||||
|
draw_item_add_fill_region(pDirtyPriv, ®1, pGC->fgPixel,
|
||||||
|
pGC->alu);
|
||||||
|
RegionUninit(®1);
|
||||||
}
|
}
|
||||||
else if (got_id)
|
else if (got_id)
|
||||||
{
|
{
|
||||||
|
@ -55,10 +55,6 @@ rdpPolySegmentOrg(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment* pSegs)
|
|||||||
GC_OP_EPILOGUE(pGC);
|
GC_OP_EPILOGUE(pGC);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* in rdpPolylines.c */
|
|
||||||
void
|
|
||||||
RegionAroundSegs(RegionPtr reg, xSegment* segs, int nsegs);
|
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
void
|
void
|
||||||
rdpPolySegment(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment* pSegs)
|
rdpPolySegment(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment* pSegs)
|
||||||
@ -79,7 +75,8 @@ rdpPolySegment(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment* pSegs)
|
|||||||
rdpPixmapRec* pDstPriv;
|
rdpPixmapRec* pDstPriv;
|
||||||
rdpPixmapRec* pDirtyPriv;
|
rdpPixmapRec* pDirtyPriv;
|
||||||
|
|
||||||
LLOGLN(10, ("rdpPolySegment: %d", nseg));
|
LLOGLN(10, ("rdpPolySegment:"));
|
||||||
|
LLOGLN(10, (" nseg %d", nseg));
|
||||||
|
|
||||||
segs = 0;
|
segs = 0;
|
||||||
if (nseg) /* get the rects */
|
if (nseg) /* get the rects */
|
||||||
@ -114,7 +111,7 @@ rdpPolySegment(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment* pSegs)
|
|||||||
LLOGLN(10, ("rdpPolySegment: gettig dirty"));
|
LLOGLN(10, ("rdpPolySegment: gettig dirty"));
|
||||||
pDstPriv->is_dirty = 1;
|
pDstPriv->is_dirty = 1;
|
||||||
pDirtyPriv = pDstPriv;
|
pDirtyPriv = pDstPriv;
|
||||||
dirty_type = RDI_IMGLY;
|
dirty_type = RDI_IMGLL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -56,46 +56,6 @@ rdpPolylinesOrg(DrawablePtr pDrawable, GCPtr pGC, int mode,
|
|||||||
GC_OP_EPILOGUE(pGC);
|
GC_OP_EPILOGUE(pGC);
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************/
|
|
||||||
void
|
|
||||||
RegionAroundSegs(RegionPtr reg, xSegment* segs, int nseg)
|
|
||||||
{
|
|
||||||
int index;
|
|
||||||
BoxRec box;
|
|
||||||
RegionRec treg;
|
|
||||||
|
|
||||||
index = 0;
|
|
||||||
while (index < nseg)
|
|
||||||
{
|
|
||||||
if (segs[index].x1 < segs[index].x2)
|
|
||||||
{
|
|
||||||
box.x1 = segs[index].x1;
|
|
||||||
box.x2 = segs[index].x2;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
box.x1 = segs[index].x2;
|
|
||||||
box.x2 = segs[index].x1;
|
|
||||||
}
|
|
||||||
box.x2++;
|
|
||||||
if (segs[index].y1 < segs[index].y2)
|
|
||||||
{
|
|
||||||
box.y1 = segs[index].y1;
|
|
||||||
box.y2 = segs[index].y2;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
box.y1 = segs[index].y2;
|
|
||||||
box.y2 = segs[index].y1;
|
|
||||||
}
|
|
||||||
box.y2++;
|
|
||||||
RegionInit(&treg, &box, 0);
|
|
||||||
RegionUnion(reg, reg, &treg);
|
|
||||||
RegionUninit(&treg);
|
|
||||||
index++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
void
|
void
|
||||||
rdpPolylines(DrawablePtr pDrawable, GCPtr pGC, int mode,
|
rdpPolylines(DrawablePtr pDrawable, GCPtr pGC, int mode,
|
||||||
@ -119,46 +79,61 @@ rdpPolylines(DrawablePtr pDrawable, GCPtr pGC, int mode,
|
|||||||
rdpPixmapRec* pDstPriv;
|
rdpPixmapRec* pDstPriv;
|
||||||
rdpPixmapRec* pDirtyPriv;
|
rdpPixmapRec* pDirtyPriv;
|
||||||
|
|
||||||
LLOGLN(0, ("rdpPolylines:"));
|
LLOGLN(10, ("rdpPolylines:"));
|
||||||
|
LLOGLN(10, (" npt %d mode %d x %d y %d", npt, mode,
|
||||||
|
pDrawable->x, pDrawable->y));
|
||||||
|
#if 0
|
||||||
|
LLOGLN(0, (" points"));
|
||||||
|
for (i = 0; i < npt; i++)
|
||||||
|
{
|
||||||
|
LLOGLN(0, (" %d %d", pptInit[i].x, pptInit[i].y));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
/* convert lines to line segments */
|
/* convert lines to line segments */
|
||||||
nseg = npt - 1;
|
nseg = npt - 1;
|
||||||
segs = 0;
|
segs = 0;
|
||||||
if (npt > 1)
|
if (npt > 1)
|
||||||
{
|
{
|
||||||
segs = (xSegment*)g_malloc(sizeof(xSegment) * npt - 1, 0);
|
segs = (xSegment*)g_malloc(sizeof(xSegment) * nseg, 0);
|
||||||
segs[0].x1 = pptInit[0].x + pDrawable->x;
|
segs[0].x1 = pptInit[0].x + pDrawable->x;
|
||||||
segs[0].y1 = pptInit[0].y + pDrawable->y;
|
segs[0].y1 = pptInit[0].y + pDrawable->y;
|
||||||
if (mode == CoordModeOrigin)
|
if (mode == CoordModeOrigin)
|
||||||
{
|
{
|
||||||
segs[0].x2 = pptInit[1].x + pDrawable->x;
|
segs[0].x2 = pptInit[1].x + pDrawable->x;
|
||||||
segs[0].y2 = pptInit[1].y + pDrawable->y;
|
segs[0].y2 = pptInit[1].y + pDrawable->y;
|
||||||
|
for (i = 2; i < npt; i++)
|
||||||
|
{
|
||||||
|
segs[i - 1].x1 = segs[i - 2].x2;
|
||||||
|
segs[i - 1].y1 = segs[i - 2].y2;
|
||||||
|
segs[i - 1].x2 = pptInit[i].x + pDrawable->x;
|
||||||
|
segs[i - 1].y2 = pptInit[i].y + pDrawable->y;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
segs[0].x2 = segs[0].x1 + pptInit[1].x;
|
segs[0].x2 = segs[0].x1 + pptInit[1].x;
|
||||||
segs[0].y2 = segs[0].y1 + pptInit[1].y;
|
segs[0].y2 = segs[0].y1 + pptInit[1].y;
|
||||||
}
|
|
||||||
for (i = 2; i < npt; i++)
|
for (i = 2; i < npt; i++)
|
||||||
{
|
{
|
||||||
segs[i - 1].x1 = segs[i - 2].x2;
|
segs[i - 1].x1 = segs[i - 2].x2;
|
||||||
segs[i - 1].y1 = segs[i - 2].y2;
|
segs[i - 1].y1 = segs[i - 2].y2;
|
||||||
if (mode == CoordModeOrigin)
|
segs[i - 1].x2 = segs[i - 1].x1 + pptInit[i].x;
|
||||||
{
|
segs[i - 1].y2 = segs[i - 1].y1 + pptInit[i].y;
|
||||||
segs[i - 1].x2 = pptInit[i].x + pDrawable->x;
|
|
||||||
segs[i - 1].y2 = pptInit[i].x + pDrawable->x;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
segs[i - 1].x2 = segs[i - 2].x2 + pptInit[i].x;
|
|
||||||
segs[i - 1].y2 = segs[i - 2].y2 + pptInit[i].y;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LLOGLN(10, ("rdpPolylines: weird npt [%d]", npt));
|
LLOGLN(0, ("rdpPolylines: weird npt [%d]", npt));
|
||||||
}
|
}
|
||||||
|
#if 0
|
||||||
|
LLOGLN(0, (" segments"));
|
||||||
|
for (i = 0; i < nseg; i++)
|
||||||
|
{
|
||||||
|
LLOGLN(0, (" %d %d %d %d", segs[i].x1, segs[i].y1,
|
||||||
|
segs[i].x2, segs[i].y2));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* do original call */
|
/* do original call */
|
||||||
rdpPolylinesOrg(pDrawable, pGC, mode, npt, pptInit);
|
rdpPolylinesOrg(pDrawable, pGC, mode, npt, pptInit);
|
||||||
@ -180,7 +155,7 @@ rdpPolylines(DrawablePtr pDrawable, GCPtr pGC, int mode,
|
|||||||
LLOGLN(10, ("rdpPolylines: gettig dirty"));
|
LLOGLN(10, ("rdpPolylines: gettig dirty"));
|
||||||
pDstPriv->is_dirty = 1;
|
pDstPriv->is_dirty = 1;
|
||||||
pDirtyPriv = pDstPriv;
|
pDirtyPriv = pDstPriv;
|
||||||
dirty_type = RDI_LINE;
|
dirty_type = RDI_IMGLL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -78,13 +78,11 @@ rdpPushPixels(GCPtr pGC, PixmapPtr pBitMap, DrawablePtr pDst,
|
|||||||
rdpPixmapRec* pDstPriv;
|
rdpPixmapRec* pDstPriv;
|
||||||
rdpPixmapRec* pDirtyPriv;
|
rdpPixmapRec* pDirtyPriv;
|
||||||
|
|
||||||
LLOGLN(0, ("rdpPushPixels:"));
|
LLOGLN(10, ("rdpPushPixels:"));
|
||||||
|
|
||||||
/* do original call */
|
/* do original call */
|
||||||
rdpPushPixelsOrg(pGC, pBitMap, pDst, w, h, x, y);
|
rdpPushPixelsOrg(pGC, pBitMap, pDst, w, h, x, y);
|
||||||
|
|
||||||
//return;
|
|
||||||
|
|
||||||
dirty_type = 0;
|
dirty_type = 0;
|
||||||
pDirtyPriv = 0;
|
pDirtyPriv = 0;
|
||||||
post_process = 0;
|
post_process = 0;
|
||||||
|
@ -73,7 +73,7 @@ rdpSetSpans(DrawablePtr pDrawable, GCPtr pGC, char* psrc,
|
|||||||
rdpPixmapRec* pDstPriv;
|
rdpPixmapRec* pDstPriv;
|
||||||
rdpPixmapRec* pDirtyPriv;
|
rdpPixmapRec* pDirtyPriv;
|
||||||
|
|
||||||
LLOGLN(0, ("rdpSetSpans: todo"));
|
LLOGLN(10, ("rdpSetSpans: todo"));
|
||||||
|
|
||||||
/* do original call */
|
/* do original call */
|
||||||
rdpSetSpansOrg(pDrawable, pGC, psrc, ppt, pwidth, nspans, fSorted);
|
rdpSetSpansOrg(pDrawable, pGC, psrc, ppt, pwidth, nspans, fSorted);
|
||||||
|
@ -424,7 +424,7 @@ draw_item_remove(rdpPixmapRec* priv, struct rdp_draw_item* di)
|
|||||||
{
|
{
|
||||||
if (di->u.line.segs != 0)
|
if (di->u.line.segs != 0)
|
||||||
{
|
{
|
||||||
free(di->u.line.segs);
|
g_free(di->u.line.segs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
RegionDestroy(di->reg);
|
RegionDestroy(di->reg);
|
||||||
@ -736,7 +736,7 @@ rdpRealizeWindow(WindowPtr pWindow)
|
|||||||
rdpWindowRec* priv;
|
rdpWindowRec* priv;
|
||||||
Bool rv;
|
Bool rv;
|
||||||
|
|
||||||
LLOGLN(0, ("rdpRealizeWindow:"));
|
LLOGLN(10, ("rdpRealizeWindow:"));
|
||||||
priv = GETWINPRIV(pWindow);
|
priv = GETWINPRIV(pWindow);
|
||||||
pScreen = pWindow->drawable.pScreen;
|
pScreen = pWindow->drawable.pScreen;
|
||||||
pScreen->RealizeWindow = g_rdpScreen.RealizeWindow;
|
pScreen->RealizeWindow = g_rdpScreen.RealizeWindow;
|
||||||
@ -771,7 +771,7 @@ rdpUnrealizeWindow(WindowPtr pWindow)
|
|||||||
rdpWindowRec* priv;
|
rdpWindowRec* priv;
|
||||||
Bool rv;
|
Bool rv;
|
||||||
|
|
||||||
LLOGLN(0, ("rdpUnrealizeWindow:"));
|
LLOGLN(10, ("rdpUnrealizeWindow:"));
|
||||||
priv = GETWINPRIV(pWindow);
|
priv = GETWINPRIV(pWindow);
|
||||||
pScreen = pWindow->drawable.pScreen;
|
pScreen = pWindow->drawable.pScreen;
|
||||||
pScreen->UnrealizeWindow = g_rdpScreen.UnrealizeWindow;
|
pScreen->UnrealizeWindow = g_rdpScreen.UnrealizeWindow;
|
||||||
|
@ -530,3 +530,43 @@ void
|
|||||||
FontCacheExtensionInit(INITARGS)
|
FontCacheExtensionInit(INITARGS)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
void
|
||||||
|
RegionAroundSegs(RegionPtr reg, xSegment* segs, int nseg)
|
||||||
|
{
|
||||||
|
int index;
|
||||||
|
BoxRec box;
|
||||||
|
RegionRec treg;
|
||||||
|
|
||||||
|
index = 0;
|
||||||
|
while (index < nseg)
|
||||||
|
{
|
||||||
|
if (segs[index].x1 < segs[index].x2)
|
||||||
|
{
|
||||||
|
box.x1 = segs[index].x1;
|
||||||
|
box.x2 = segs[index].x2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
box.x1 = segs[index].x2;
|
||||||
|
box.x2 = segs[index].x1;
|
||||||
|
}
|
||||||
|
box.x2++;
|
||||||
|
if (segs[index].y1 < segs[index].y2)
|
||||||
|
{
|
||||||
|
box.y1 = segs[index].y1;
|
||||||
|
box.y2 = segs[index].y2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
box.y1 = segs[index].y2;
|
||||||
|
box.y2 = segs[index].y1;
|
||||||
|
}
|
||||||
|
box.y2++;
|
||||||
|
RegionInit(&treg, &box, 0);
|
||||||
|
RegionUnion(reg, reg, &treg);
|
||||||
|
RegionUninit(&treg);
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user