Fix bug 8871 - scrolling corruption with a compositing manager
Call miHandleExposures() in CopyArea/CopyPlane explicitly in cw to generate GraphicsExposes correctly.
This commit is contained in:
parent
0ff7c94fcf
commit
4fe918b385
|
@ -30,6 +30,7 @@
|
||||||
#include "gcstruct.h"
|
#include "gcstruct.h"
|
||||||
#include "pixmapstr.h"
|
#include "pixmapstr.h"
|
||||||
#include "cw.h"
|
#include "cw.h"
|
||||||
|
#include "mi.h"
|
||||||
|
|
||||||
#define SETUP_BACKING_DST(_pDst, _pGC) \
|
#define SETUP_BACKING_DST(_pDst, _pGC) \
|
||||||
cwGCPtr pGCPrivate = getCwGC (_pGC); \
|
cwGCPtr pGCPrivate = getCwGC (_pGC); \
|
||||||
|
@ -185,7 +186,7 @@ cwCopyArea(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, int srcx, int srcy,
|
||||||
int w, int h, int dstx, int dsty)
|
int w, int h, int dstx, int dsty)
|
||||||
{
|
{
|
||||||
int odstx, odsty;
|
int odstx, odsty;
|
||||||
RegionPtr exposed = NULL;
|
int osrcx, osrcy;
|
||||||
SETUP_BACKING_DST(pDst, pGC);
|
SETUP_BACKING_DST(pDst, pGC);
|
||||||
SETUP_BACKING_SRC(pSrc, pGC);
|
SETUP_BACKING_SRC(pSrc, pGC);
|
||||||
|
|
||||||
|
@ -193,19 +194,20 @@ cwCopyArea(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, int srcx, int srcy,
|
||||||
|
|
||||||
odstx = dstx;
|
odstx = dstx;
|
||||||
odsty = dsty;
|
odsty = dsty;
|
||||||
|
osrcx = srcx;
|
||||||
|
osrcy = srcy;
|
||||||
CW_OFFSET_XY_DST(dstx, dsty);
|
CW_OFFSET_XY_DST(dstx, dsty);
|
||||||
CW_OFFSET_XY_SRC(srcx, srcy);
|
CW_OFFSET_XY_SRC(srcx, srcy);
|
||||||
|
|
||||||
exposed = (*pBackingGC->ops->CopyArea)(pBackingSrc, pBackingDst,
|
(*pBackingGC->ops->CopyArea)(pBackingSrc, pBackingDst,
|
||||||
pBackingGC, srcx, srcy, w, h,
|
pBackingGC, srcx, srcy, w, h,
|
||||||
dstx, dsty);
|
dstx, dsty);
|
||||||
|
|
||||||
if (exposed != NULL)
|
|
||||||
REGION_TRANSLATE(pDst->pScreen, exposed, odstx - dstx, odsty - dsty);
|
|
||||||
|
|
||||||
EPILOGUE(pGC);
|
EPILOGUE(pGC);
|
||||||
|
|
||||||
return exposed;
|
return miHandleExposures(pSrc, pDst, pGC,
|
||||||
|
osrcx, osrcy, w, h,
|
||||||
|
odstx, odsty, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegionPtr
|
static RegionPtr
|
||||||
|
@ -213,7 +215,7 @@ cwCopyPlane(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, int srcx, int srcy,
|
||||||
int w, int h, int dstx, int dsty, unsigned long plane)
|
int w, int h, int dstx, int dsty, unsigned long plane)
|
||||||
{
|
{
|
||||||
int odstx, odsty;
|
int odstx, odsty;
|
||||||
RegionPtr exposed = NULL;
|
int osrcx, osrcy;
|
||||||
SETUP_BACKING_DST(pDst, pGC);
|
SETUP_BACKING_DST(pDst, pGC);
|
||||||
SETUP_BACKING_SRC(pSrc, pGC);
|
SETUP_BACKING_SRC(pSrc, pGC);
|
||||||
|
|
||||||
|
@ -221,19 +223,20 @@ cwCopyPlane(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, int srcx, int srcy,
|
||||||
|
|
||||||
odstx = dstx;
|
odstx = dstx;
|
||||||
odsty = dsty;
|
odsty = dsty;
|
||||||
|
osrcx = srcx;
|
||||||
|
osrcy = srcy;
|
||||||
CW_OFFSET_XY_DST(dstx, dsty);
|
CW_OFFSET_XY_DST(dstx, dsty);
|
||||||
CW_OFFSET_XY_SRC(srcx, srcy);
|
CW_OFFSET_XY_SRC(srcx, srcy);
|
||||||
|
|
||||||
exposed = (*pBackingGC->ops->CopyPlane)(pBackingSrc, pBackingDst,
|
(*pBackingGC->ops->CopyPlane)(pBackingSrc, pBackingDst,
|
||||||
pBackingGC, srcx, srcy, w, h,
|
pBackingGC, srcx, srcy, w, h,
|
||||||
dstx, dsty, plane);
|
dstx, dsty, plane);
|
||||||
|
|
||||||
if (exposed != NULL)
|
|
||||||
REGION_TRANSLATE(pDst->pScreen, exposed, odstx - dstx, odsty - dsty);
|
|
||||||
|
|
||||||
EPILOGUE(pGC);
|
EPILOGUE(pGC);
|
||||||
|
|
||||||
return exposed;
|
return miHandleExposures(pSrc, pDst, pGC,
|
||||||
|
osrcx, osrcy, w, h,
|
||||||
|
odstx, odsty, plane);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
Loading…
Reference in New Issue