xorg: complete CopyPlane Xserver function

ulab-original
Jay Sorg 13 years ago
parent 60a0fda03e
commit 6588c52aab

@ -543,29 +543,65 @@ rdpCopyArea(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
/******************************************************************************/ /******************************************************************************/
static RegionPtr static RegionPtr
rdpCopyPlane(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, rdpCopyPlane(DrawablePtr pSrc, DrawablePtr pDst,
GCPtr pGC, int srcx, int srcy, int width, int height, GCPtr pGC, int srcx, int srcy, int w, int h,
int dstx, int dsty, unsigned long bitPlane) int dstx, int dsty, unsigned long bitPlane)
{ {
rdpGCPtr priv; rdpGCPtr priv;
RegionPtr rv; RegionPtr rv;
RegionRec reg; RegionRec clip_reg;
RegionRec box_reg;
int cd; int cd;
int num_clips;
int j;
GCFuncs* oldFuncs; GCFuncs* oldFuncs;
BoxRec box;
BoxPtr pbox;
DEBUG_OUT_OPS(("in rdpCopyPlane\n")); DEBUG_OUT_OPS(("in rdpCopyPlane\n"));
GC_OP_PROLOGUE(pGC); GC_OP_PROLOGUE(pGC);
rv = pGC->ops->CopyPlane(pSrcDrawable, pDstDrawable, pGC, srcx, srcy, rv = pGC->ops->CopyPlane(pSrc, pDst, pGC, srcx, srcy,
width, height, dstx, dsty, bitPlane); w, h, dstx, dsty, bitPlane);
RegionInit(&reg, NullBox, 0); RegionInit(&clip_reg, NullBox, 0);
cd = rdp_get_clip(&reg, pDstDrawable, pGC); cd = rdp_get_clip(&clip_reg, pDst, pGC);
if (cd == 1) if (cd == 1)
{ {
rdpup_begin_update();
rdpup_send_area(pDst->x + dstx, pDst->y + dsty, w, h);
rdpup_end_update();
} }
else if (cd == 2) else if (cd == 2)
{ {
num_clips = REGION_NUM_RECTS(&clip_reg);
if (num_clips > 0)
{
rdpup_begin_update();
box.x1 = pDst->x + dstx;
box.y1 = pDst->y + dsty;
box.x2 = box.x1 + w;
box.y2 = box.y1 + h;
RegionInit(&box_reg, &box, 0);
RegionIntersect(&clip_reg, &clip_reg, &box_reg);
num_clips = REGION_NUM_RECTS(&clip_reg);
if (num_clips < 10)
{
for (j = num_clips - 1; j >= 0; j--)
{
box = REGION_RECTS(&clip_reg)[j];
rdpup_send_area(box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
} }
RegionUninit(&reg); }
else
{
pbox = RegionExtents(&clip_reg);
rdpup_send_area(pbox->x1, pbox->y1, pbox->x2 - pbox->x1,
pbox->y2 - pbox->y1);
}
RegionUninit(&box_reg);
rdpup_end_update();
}
}
RegionUninit(&clip_reg);
GC_OP_EPILOGUE(pGC); GC_OP_EPILOGUE(pGC);
return rv; return rv;
} }

@ -679,6 +679,14 @@ rdpEnqueueMotion(int x, int y)
EventListPtr rdp_events; EventListPtr rdp_events;
xEvent* pev; xEvent* pev;
# if 0
if (x < 128)
{
rdpup_begin_update();
rdpup_send_area(0, 0, 1024, 768);
rdpup_end_update();
}
#endif
miPointerSetPosition(g_pointer, &x, &y); miPointerSetPosition(g_pointer, &x, &y);
valuators[0] = x; valuators[0] = x;
valuators[1] = y; valuators[1] = y;

Loading…
Cancel
Save