patches to add Actualized flag, from daniels

This commit is contained in:
Ben Byer 2008-04-18 17:30:28 -07:00
parent 1b4c37d8f9
commit 4db1e4a218
14 changed files with 111 additions and 2 deletions

View file

@ -44,6 +44,9 @@ fbPolyArc (DrawablePtr pDrawable,
xArc *parcs)
{
FbArc arc;
if (pDrawable->type == DRAWABLE_WINDOW && !wActualised((WindowPtr)pDrawable))
return;
if (pGC->lineWidth == 0)
{

View file

@ -51,7 +51,11 @@ fbCopyNtoN (DrawablePtr pSrcDrawable,
FbStride dstStride;
int dstBpp;
int dstXoff, dstYoff;
if ((pSrcDrawable->type == DRAWABLE_WINDOW && wActualised((WindowPtr)pSrcDrawable)) ||
(pDstDrawable->type == DRAWABLE_WINDOW && wActualised((WindowPtr)pDstDrawable)))
return;
fbGetDrawable (pSrcDrawable, src, srcStride, srcBpp, srcXoff, srcYoff);
fbGetDrawable (pDstDrawable, dst, dstStride, dstBpp, dstXoff, dstYoff);
@ -123,6 +127,10 @@ fbCopy1toN (DrawablePtr pSrcDrawable,
int dstBpp;
int dstXoff, dstYoff;
if ((pSrcDrawable->type == DRAWABLE_WINDOW && wActualised((WindowPtr)pSrcDrawable)) ||
(pDstDrawable->type == DRAWABLE_WINDOW && wActualised((WindowPtr)pDstDrawable)))
return;
fbGetDrawable (pSrcDrawable, src, srcStride, srcBpp, srcXoff, srcYoff);
fbGetDrawable (pDstDrawable, dst, dstStride, dstBpp, dstXoff, dstYoff);
@ -188,6 +196,10 @@ fbCopyNto1 (DrawablePtr pSrcDrawable,
{
FbGCPrivPtr pPriv = fbGetGCPrivate (pGC);
if ((pSrcDrawable->type == DRAWABLE_WINDOW && wActualised((WindowPtr)pSrcDrawable)) ||
(pDstDrawable->type == DRAWABLE_WINDOW && wActualised((WindowPtr)pDstDrawable)))
return;
while (nbox--)
{
if (pDstDrawable->bitsPerPixel == 1)
@ -307,6 +319,10 @@ fbCopyRegion (DrawablePtr pSrcDrawable,
int nbox;
BoxPtr pboxNew1, pboxNew2, pboxBase, pboxNext, pboxTmp;
if ((pSrcDrawable->type == DRAWABLE_WINDOW && wActualised((WindowPtr)pSrcDrawable)) ||
(pDstDrawable->type == DRAWABLE_WINDOW && wActualised((WindowPtr)pDstDrawable)))
return;
pbox = REGION_RECTS(pDstRegion);
nbox = REGION_NUM_RECTS(pDstRegion);
@ -436,6 +452,10 @@ fbDoCopy (DrawablePtr pSrcDrawable,
Bool fastDst = FALSE; /* for fast clipping with one rect dest */
Bool fastExpose = FALSE; /* for fast exposures with pixmap source */
if ((pSrcDrawable->type == DRAWABLE_WINDOW && wActualised((WindowPtr)pSrcDrawable)) ||
(pDstDrawable->type == DRAWABLE_WINDOW && wActualised((WindowPtr)pDstDrawable)))
return;
/* Short cut for unmapped windows */
if (pDstDrawable->type == DRAWABLE_WINDOW &&

View file

@ -39,7 +39,10 @@ fbFill (DrawablePtr pDrawable,
int dstBpp;
int dstXoff, dstYoff;
FbGCPrivPtr pPriv = fbGetGCPrivate(pGC);
if (pDrawable->type == DRAWABLE_WINDOW && !wActualised((WindowPtr)pDrawable))
return;
fbGetDrawable (pDrawable, dst, dstStride, dstBpp, dstXoff, dstYoff);
switch (pGC->fillStyle) {

View file

@ -41,6 +41,9 @@ fbPolyFillRect(DrawablePtr pDrawable,
int xorg, yorg;
int n;
if (pDrawable->type == DRAWABLE_WINDOW && !wActualised((WindowPtr)pDrawable))
return;
xorg = pDrawable->x;
yorg = pDrawable->y;

View file

@ -41,6 +41,9 @@ fbFillSpans (DrawablePtr pDrawable,
int fullX1, fullX2, fullY1;
int partX1, partX2;
if (pDrawable->type == DRAWABLE_WINDOW && !wActualised((WindowPtr)pDrawable))
return;
pextent = REGION_EXTENTS(pGC->pScreen, pClip);
extentX1 = pextent->x1;
extentY1 = pextent->y1;

View file

@ -281,6 +281,9 @@ fbPolyGlyphBlt (DrawablePtr pDrawable,
int dstBpp = 0;
int dstXoff = 0, dstYoff = 0;
if (pDrawable->type == DRAWABLE_WINDOW && !wActualised((WindowPtr)pDrawable))
return;
glyph = 0;
if (pGC->fillStyle == FillSolid && pPriv->and == 0)
{
@ -374,6 +377,9 @@ fbImageGlyphBlt (DrawablePtr pDrawable,
int dstBpp = 0;
int dstXoff = 0, dstYoff = 0;
if (pDrawable->type == DRAWABLE_WINDOW && !wActualised((WindowPtr)pDrawable))
return;
glyph = 0;
if (pPriv->and == 0)
{

View file

@ -45,6 +45,9 @@ fbPutImage (DrawablePtr pDrawable,
FbStride srcStride;
FbStip *src = (FbStip *) pImage;
if (pDrawable->type == DRAWABLE_WINDOW && !wActualised((WindowPtr)pDrawable))
return;
x += pDrawable->x;
y += pDrawable->y;

View file

@ -37,6 +37,9 @@ fbZeroLine (DrawablePtr pDrawable,
int x, y;
int dashOffset;
if (pDrawable->type == DRAWABLE_WINDOW && !wActualised((WindowPtr)pDrawable))
return;
x = pDrawable->x;
y = pDrawable->y;
x1 = ppt->x;
@ -71,6 +74,9 @@ fbZeroSegment (DrawablePtr pDrawable,
int x, y;
Bool drawLast = pGC->capStyle != CapNotLast;
if (pDrawable->type == DRAWABLE_WINDOW && !wActualised((WindowPtr)pDrawable))
return;
x = pDrawable->x;
y = pDrawable->y;
while (nseg--)
@ -111,6 +117,9 @@ fbPolyLine (DrawablePtr pDrawable,
{
void (*line) (DrawablePtr, GCPtr, int mode, int npt, DDXPointPtr ppt);
if (pDrawable->type == DRAWABLE_WINDOW && !wActualised((WindowPtr)pDrawable))
return;
if (pGC->lineWidth == 0)
{
line = fbZeroLine;
@ -148,6 +157,9 @@ fbPolySegment (DrawablePtr pDrawable,
{
void (*seg) (DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment *pseg);
if (pDrawable->type == DRAWABLE_WINDOW && !wActualised((WindowPtr)pDrawable))
return;
if (pGC->lineWidth == 0)
{
seg = fbZeroSegment;

View file

@ -127,6 +127,9 @@ fbPolyPoint (DrawablePtr pDrawable,
BoxPtr pBox;
int nBox;
if (pDrawable->type == DRAWABLE_WINDOW && !wActualised((WindowPtr)pDrawable))
return;
/* make pointlist origin relative */
ppt = pptInit;
npt = nptInit;

View file

@ -45,6 +45,9 @@ fbPushPattern (DrawablePtr pDrawable,
int w;
int lenspan;
if (pDrawable->type == DRAWABLE_WINDOW && !wActualised((WindowPtr)pDrawable))
return;
src += srcX >> FB_STIP_SHIFT;
srcX &= FB_STIP_MASK;
@ -115,6 +118,9 @@ fbPushFill (DrawablePtr pDrawable,
{
FbGCPrivPtr pPriv = fbGetGCPrivate(pGC);
if (pDrawable->type == DRAWABLE_WINDOW && !wActualised((WindowPtr)pDrawable))
return;
if (pGC->fillStyle == FillSolid)
{
FbBits *dst;
@ -190,6 +196,9 @@ fbPushImage (DrawablePtr pDrawable,
BoxPtr pbox;
int x1, y1, x2, y2;
if (pDrawable->type == DRAWABLE_WINDOW && !wActualised((WindowPtr)pDrawable))
return;
for (nbox = REGION_NUM_RECTS (pClip),
pbox = REGION_RECTS(pClip);
nbox--;
@ -237,6 +246,9 @@ fbPushPixels (GCPtr pGC,
int stipBpp;
int stipXoff, stipYoff; /* Assumed to be zero */
if (pDrawable->type == DRAWABLE_WINDOW && !wActualised((WindowPtr)pDrawable))
return;
fbGetStipDrawable (&pBitmap->drawable, stip, stipStride, stipBpp, stipXoff, stipYoff);
fbPushImage (pDrawable, pGC,

View file

@ -57,6 +57,9 @@ fbBresSolid (DrawablePtr pDrawable,
FbStip mask, mask0;
FbStip bits;
if (pDrawable->type == DRAWABLE_WINDOW && !wActualised((WindowPtr)pDrawable))
return;
fbGetStipDrawable (pDrawable, dst, dstStride, dstBpp, dstXoff, dstYoff);
dst += ((y1 + dstYoff) * dstStride);
x1 = (x1 + dstXoff) * dstBpp;
@ -146,6 +149,9 @@ fbBresDash (DrawablePtr pDrawable,
Bool even;
Bool doOdd;
if (pDrawable->type == DRAWABLE_WINDOW && !wActualised((WindowPtr)pDrawable))
return;
fbGetStipDrawable (pDrawable, dst, dstStride, dstBpp, dstXoff, dstYoff);
doOdd = pGC->lineStyle == LineDoubleDash;
@ -217,6 +223,9 @@ fbBresFill (DrawablePtr pDrawable,
int e3,
int len)
{
if (pDrawable->type == DRAWABLE_WINDOW && !wActualised((WindowPtr)pDrawable))
return;
while (len--)
{
fbFill (pDrawable, pGC, x1, y1, 1, 1);
@ -248,6 +257,9 @@ fbSetFg (DrawablePtr pDrawable,
GCPtr pGC,
Pixel fg)
{
if (pDrawable->type == DRAWABLE_WINDOW && !wActualised((WindowPtr)pDrawable))
return;
if (fg != pGC->fgPixel)
{
DoChangeGC (pGC, GCForeground, (XID *) &fg, FALSE);
@ -277,6 +289,9 @@ fbBresFillDash (DrawablePtr pDrawable,
Bool doBg;
Pixel fg, bg;
if (pDrawable->type == DRAWABLE_WINDOW && !wActualised((WindowPtr)pDrawable))
return;
fg = pGC->fgPixel;
bg = pGC->bgPixel;
@ -357,6 +372,9 @@ fbBresSolid24RRop (DrawablePtr pDrawable,
int rot;
FbStip andT, xorT;
if (pDrawable->type == DRAWABLE_WINDOW && !wActualised((WindowPtr)pDrawable))
return;
fbGetStipDrawable (pDrawable, dst, dstStride, dstBpp, dstXoff, dstYoff);
dst += ((y1 + dstYoff) * dstStride);
x1 = (x1 + dstXoff) * 24;
@ -439,6 +457,9 @@ fbBresDash24RRop (DrawablePtr pDrawable,
Bool even;
Bool doOdd;
if (pDrawable->type == DRAWABLE_WINDOW && !wActualised((WindowPtr)pDrawable))
return;
fbGetStipDrawable (pDrawable, dst, dstStride, dstBpp, dstXoff, dstYoff);
doOdd = pGC->lineStyle == LineDoubleDash;
@ -521,6 +542,9 @@ fbSelectBres (DrawablePtr pDrawable,
int dstBpp = pDrawable->bitsPerPixel;
FbBres * bres;
if (pDrawable->type == DRAWABLE_WINDOW && !wActualised((WindowPtr)pDrawable))
return;
if (pGC->lineStyle == LineSolid)
{
bres = fbBresFill;
@ -589,6 +613,9 @@ fbBres (DrawablePtr pDrawable,
int e3,
int len)
{
if (pDrawable->type == DRAWABLE_WINDOW && !wActualised((WindowPtr)pDrawable))
return;
(*fbSelectBres (pDrawable, pGC)) (pDrawable, pGC, dashOffset,
signdx, signdy, axis, x1, y1,
e, e1, e3, len);
@ -622,6 +649,9 @@ fbSegment (DrawablePtr pDrawable,
unsigned int oc1; /* outcode of point 1 */
unsigned int oc2; /* outcode of point 2 */
if (pDrawable->type == DRAWABLE_WINDOW && !wActualised((WindowPtr)pDrawable))
return;
nBox = REGION_NUM_RECTS (pClip);
pBox = REGION_RECTS (pClip);

View file

@ -46,6 +46,9 @@ fbSetSpans (DrawablePtr pDrawable,
int xoff;
int x1, x2;
if (pDrawable->type == DRAWABLE_WINDOW && !wActualised((WindowPtr)pDrawable))
return;
#ifdef FB_24_32BIT
if (pDrawable->bitsPerPixel != BitsPerPixel(pDrawable->depth))
{

View file

@ -31,6 +31,7 @@
Bool
fbCreateWindow(WindowPtr pWin)
{
pWin->optional->actualised = 1;
#ifndef FB_NO_WINDOW_PIXMAPS
pWin->devPrivates[fbWinPrivateIndex].ptr =
(pointer) fbGetScreenPixmap(pWin->drawable.pScreen);
@ -88,6 +89,10 @@ fbCopyWindowProc (DrawablePtr pSrcDrawable,
int dstBpp;
int dstXoff, dstYoff;
if ((pSrcDrawable->type == DRAWABLE_WINDOW && !wActualised((WindowPtr)pSrcDrawable)) ||
(pDstDrawable->type == DRAWABLE_WINDOW && !wActualised((WindowPtr)pDstDrawable)))
return;
fbGetDrawable (pSrcDrawable, src, srcStride, srcBpp, srcXoff, srcYoff);
fbGetDrawable (pDstDrawable, dst, dstStride, dstBpp, dstXoff, dstYoff);
@ -286,6 +291,7 @@ fbFillRegionTiled (DrawablePtr pDrawable,
}
}
#endif
fbGetDrawable (pDrawable, dst, dstStride, dstBpp, dstXoff, dstYoff);
fbGetDrawable (&pTile->drawable, tile, tileStride, tileBpp, tileXoff, tileYoff);
tileWidth = pTile->drawable.width;

View file

@ -79,6 +79,7 @@ typedef struct _WindowOpt {
struct _OtherClients *otherClients; /* default: NULL */
struct _GrabRec *passiveGrabs; /* default: NULL */
PropertyPtr userProps; /* default: NULL */
unsigned int actualised; /* default: 0 */
unsigned long backingBitPlanes; /* default: ~0L */
unsigned long backingPixel; /* default: 0 */
#ifdef SHAPE
@ -201,6 +202,7 @@ extern Mask DontPropagateMasks[];
#endif
#define wClient(w) (clients[CLIENT_ID((w)->drawable.id)])
#define wBorderWidth(w) ((int) (w)->borderWidth)
#define wActualised(w) wUseDefault(w, actualised, 0)
/* true when w needs a border drawn. */