mark drawable as dirty on copying/painting windows

This commit is contained in:
Zack Rusin 2005-07-08 17:07:52 +00:00
parent 4ab73a73f4
commit e84648df7d
6 changed files with 210 additions and 264 deletions

View File

@ -1008,6 +1008,7 @@ exaCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
if (!pScrn->vtSema) { if (!pScrn->vtSema) {
ExaScreenPriv(pWin->drawable.pScreen); ExaScreenPriv(pWin->drawable.pScreen);
pExaScr->SavedCopyWindow (pWin, ptOldOrg, prgnSrc); pExaScr->SavedCopyWindow (pWin, ptOldOrg, prgnSrc);
exaDrawableDirty (&pWin->drawable);
return; return;
} }
@ -1071,59 +1072,49 @@ static void
exaPaintWindow(WindowPtr pWin, RegionPtr pRegion, int what) exaPaintWindow(WindowPtr pWin, RegionPtr pRegion, int what)
{ {
ScrnInfoPtr pScrn = XF86SCRNINFO(pWin->drawable.pScreen); ScrnInfoPtr pScrn = XF86SCRNINFO(pWin->drawable.pScreen);
ExaScreenPriv(pWin->drawable.pScreen);
if (!pScrn->vtSema) {
switch (what) {
case PW_BACKGROUND:
pExaScr->SavedPaintWindowBackground(pWin, pRegion, what);
break;
case PW_BORDER:
pExaScr->SavedPaintWindowBorder(pWin, pRegion, what);
break;
}
return;
}
STRACE; STRACE;
if (!REGION_NUM_RECTS(pRegion)) if (!REGION_NUM_RECTS(pRegion))
return; return;
switch (what) { if (pScrn->vtSema) {
case PW_BACKGROUND: switch (what) {
switch (pWin->backgroundState) { case PW_BACKGROUND:
case None: switch (pWin->backgroundState) {
return; case None:
case ParentRelative: return;
do { case ParentRelative:
pWin = pWin->parent; do {
} while (pWin->backgroundState == ParentRelative); pWin = pWin->parent;
(*pWin->drawable.pScreen->PaintWindowBackground)(pWin, pRegion, } while (pWin->backgroundState == ParentRelative);
what); (*pWin->drawable.pScreen->PaintWindowBackground)(pWin, pRegion,
return; what);
case BackgroundPixel: return;
exaFillRegionSolid((DrawablePtr)pWin, pRegion, pWin->background.pixel); case BackgroundPixel:
return; exaFillRegionSolid((DrawablePtr)pWin, pRegion, pWin->background.pixel);
return;
#if 0 #if 0
case BackgroundPixmap: case BackgroundPixmap:
exaFillRegionTiled((DrawablePtr)pWin, pRegion, pWin->background.pixmap); exaFillRegionTiled((DrawablePtr)pWin, pRegion, pWin->background.pixmap);
return; return;
#endif #endif
} }
break; break;
case PW_BORDER: case PW_BORDER:
if (pWin->borderIsPixel) if (pWin->borderIsPixel)
{ {
exaFillRegionSolid((DrawablePtr)pWin, pRegion, pWin->border.pixel); exaFillRegionSolid((DrawablePtr)pWin, pRegion, pWin->border.pixel);
return; return;
} }
#if 0 #if 0
else else
{ {
exaFillRegionTiled((DrawablePtr)pWin, pRegion, pWin->border.pixmap); exaFillRegionTiled((DrawablePtr)pWin, pRegion, pWin->border.pixmap);
return; return;
} }
#endif #endif
break; break;
}
} }
ExaCheckPaintWindow (pWin, pRegion, what); ExaCheckPaintWindow (pWin, pRegion, what);
} }

View File

@ -1008,6 +1008,7 @@ exaCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
if (!pScrn->vtSema) { if (!pScrn->vtSema) {
ExaScreenPriv(pWin->drawable.pScreen); ExaScreenPriv(pWin->drawable.pScreen);
pExaScr->SavedCopyWindow (pWin, ptOldOrg, prgnSrc); pExaScr->SavedCopyWindow (pWin, ptOldOrg, prgnSrc);
exaDrawableDirty (&pWin->drawable);
return; return;
} }
@ -1071,59 +1072,49 @@ static void
exaPaintWindow(WindowPtr pWin, RegionPtr pRegion, int what) exaPaintWindow(WindowPtr pWin, RegionPtr pRegion, int what)
{ {
ScrnInfoPtr pScrn = XF86SCRNINFO(pWin->drawable.pScreen); ScrnInfoPtr pScrn = XF86SCRNINFO(pWin->drawable.pScreen);
ExaScreenPriv(pWin->drawable.pScreen);
if (!pScrn->vtSema) {
switch (what) {
case PW_BACKGROUND:
pExaScr->SavedPaintWindowBackground(pWin, pRegion, what);
break;
case PW_BORDER:
pExaScr->SavedPaintWindowBorder(pWin, pRegion, what);
break;
}
return;
}
STRACE; STRACE;
if (!REGION_NUM_RECTS(pRegion)) if (!REGION_NUM_RECTS(pRegion))
return; return;
switch (what) { if (pScrn->vtSema) {
case PW_BACKGROUND: switch (what) {
switch (pWin->backgroundState) { case PW_BACKGROUND:
case None: switch (pWin->backgroundState) {
return; case None:
case ParentRelative: return;
do { case ParentRelative:
pWin = pWin->parent; do {
} while (pWin->backgroundState == ParentRelative); pWin = pWin->parent;
(*pWin->drawable.pScreen->PaintWindowBackground)(pWin, pRegion, } while (pWin->backgroundState == ParentRelative);
what); (*pWin->drawable.pScreen->PaintWindowBackground)(pWin, pRegion,
return; what);
case BackgroundPixel: return;
exaFillRegionSolid((DrawablePtr)pWin, pRegion, pWin->background.pixel); case BackgroundPixel:
return; exaFillRegionSolid((DrawablePtr)pWin, pRegion, pWin->background.pixel);
return;
#if 0 #if 0
case BackgroundPixmap: case BackgroundPixmap:
exaFillRegionTiled((DrawablePtr)pWin, pRegion, pWin->background.pixmap); exaFillRegionTiled((DrawablePtr)pWin, pRegion, pWin->background.pixmap);
return; return;
#endif #endif
} }
break; break;
case PW_BORDER: case PW_BORDER:
if (pWin->borderIsPixel) if (pWin->borderIsPixel)
{ {
exaFillRegionSolid((DrawablePtr)pWin, pRegion, pWin->border.pixel); exaFillRegionSolid((DrawablePtr)pWin, pRegion, pWin->border.pixel);
return; return;
} }
#if 0 #if 0
else else
{ {
exaFillRegionTiled((DrawablePtr)pWin, pRegion, pWin->border.pixmap); exaFillRegionTiled((DrawablePtr)pWin, pRegion, pWin->border.pixmap);
return; return;
} }
#endif #endif
break; break;
}
} }
ExaCheckPaintWindow (pWin, pRegion, what); ExaCheckPaintWindow (pWin, pRegion, what);
} }

View File

@ -1008,6 +1008,7 @@ exaCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
if (!pScrn->vtSema) { if (!pScrn->vtSema) {
ExaScreenPriv(pWin->drawable.pScreen); ExaScreenPriv(pWin->drawable.pScreen);
pExaScr->SavedCopyWindow (pWin, ptOldOrg, prgnSrc); pExaScr->SavedCopyWindow (pWin, ptOldOrg, prgnSrc);
exaDrawableDirty (&pWin->drawable);
return; return;
} }
@ -1071,59 +1072,49 @@ static void
exaPaintWindow(WindowPtr pWin, RegionPtr pRegion, int what) exaPaintWindow(WindowPtr pWin, RegionPtr pRegion, int what)
{ {
ScrnInfoPtr pScrn = XF86SCRNINFO(pWin->drawable.pScreen); ScrnInfoPtr pScrn = XF86SCRNINFO(pWin->drawable.pScreen);
ExaScreenPriv(pWin->drawable.pScreen);
if (!pScrn->vtSema) {
switch (what) {
case PW_BACKGROUND:
pExaScr->SavedPaintWindowBackground(pWin, pRegion, what);
break;
case PW_BORDER:
pExaScr->SavedPaintWindowBorder(pWin, pRegion, what);
break;
}
return;
}
STRACE; STRACE;
if (!REGION_NUM_RECTS(pRegion)) if (!REGION_NUM_RECTS(pRegion))
return; return;
switch (what) { if (pScrn->vtSema) {
case PW_BACKGROUND: switch (what) {
switch (pWin->backgroundState) { case PW_BACKGROUND:
case None: switch (pWin->backgroundState) {
return; case None:
case ParentRelative: return;
do { case ParentRelative:
pWin = pWin->parent; do {
} while (pWin->backgroundState == ParentRelative); pWin = pWin->parent;
(*pWin->drawable.pScreen->PaintWindowBackground)(pWin, pRegion, } while (pWin->backgroundState == ParentRelative);
what); (*pWin->drawable.pScreen->PaintWindowBackground)(pWin, pRegion,
return; what);
case BackgroundPixel: return;
exaFillRegionSolid((DrawablePtr)pWin, pRegion, pWin->background.pixel); case BackgroundPixel:
return; exaFillRegionSolid((DrawablePtr)pWin, pRegion, pWin->background.pixel);
return;
#if 0 #if 0
case BackgroundPixmap: case BackgroundPixmap:
exaFillRegionTiled((DrawablePtr)pWin, pRegion, pWin->background.pixmap); exaFillRegionTiled((DrawablePtr)pWin, pRegion, pWin->background.pixmap);
return; return;
#endif #endif
} }
break; break;
case PW_BORDER: case PW_BORDER:
if (pWin->borderIsPixel) if (pWin->borderIsPixel)
{ {
exaFillRegionSolid((DrawablePtr)pWin, pRegion, pWin->border.pixel); exaFillRegionSolid((DrawablePtr)pWin, pRegion, pWin->border.pixel);
return; return;
} }
#if 0 #if 0
else else
{ {
exaFillRegionTiled((DrawablePtr)pWin, pRegion, pWin->border.pixmap); exaFillRegionTiled((DrawablePtr)pWin, pRegion, pWin->border.pixmap);
return; return;
} }
#endif #endif
break; break;
}
} }
ExaCheckPaintWindow (pWin, pRegion, what); ExaCheckPaintWindow (pWin, pRegion, what);
} }

View File

@ -1008,6 +1008,7 @@ exaCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
if (!pScrn->vtSema) { if (!pScrn->vtSema) {
ExaScreenPriv(pWin->drawable.pScreen); ExaScreenPriv(pWin->drawable.pScreen);
pExaScr->SavedCopyWindow (pWin, ptOldOrg, prgnSrc); pExaScr->SavedCopyWindow (pWin, ptOldOrg, prgnSrc);
exaDrawableDirty (&pWin->drawable);
return; return;
} }
@ -1071,59 +1072,49 @@ static void
exaPaintWindow(WindowPtr pWin, RegionPtr pRegion, int what) exaPaintWindow(WindowPtr pWin, RegionPtr pRegion, int what)
{ {
ScrnInfoPtr pScrn = XF86SCRNINFO(pWin->drawable.pScreen); ScrnInfoPtr pScrn = XF86SCRNINFO(pWin->drawable.pScreen);
ExaScreenPriv(pWin->drawable.pScreen);
if (!pScrn->vtSema) {
switch (what) {
case PW_BACKGROUND:
pExaScr->SavedPaintWindowBackground(pWin, pRegion, what);
break;
case PW_BORDER:
pExaScr->SavedPaintWindowBorder(pWin, pRegion, what);
break;
}
return;
}
STRACE; STRACE;
if (!REGION_NUM_RECTS(pRegion)) if (!REGION_NUM_RECTS(pRegion))
return; return;
switch (what) { if (pScrn->vtSema) {
case PW_BACKGROUND: switch (what) {
switch (pWin->backgroundState) { case PW_BACKGROUND:
case None: switch (pWin->backgroundState) {
return; case None:
case ParentRelative: return;
do { case ParentRelative:
pWin = pWin->parent; do {
} while (pWin->backgroundState == ParentRelative); pWin = pWin->parent;
(*pWin->drawable.pScreen->PaintWindowBackground)(pWin, pRegion, } while (pWin->backgroundState == ParentRelative);
what); (*pWin->drawable.pScreen->PaintWindowBackground)(pWin, pRegion,
return; what);
case BackgroundPixel: return;
exaFillRegionSolid((DrawablePtr)pWin, pRegion, pWin->background.pixel); case BackgroundPixel:
return; exaFillRegionSolid((DrawablePtr)pWin, pRegion, pWin->background.pixel);
return;
#if 0 #if 0
case BackgroundPixmap: case BackgroundPixmap:
exaFillRegionTiled((DrawablePtr)pWin, pRegion, pWin->background.pixmap); exaFillRegionTiled((DrawablePtr)pWin, pRegion, pWin->background.pixmap);
return; return;
#endif #endif
} }
break; break;
case PW_BORDER: case PW_BORDER:
if (pWin->borderIsPixel) if (pWin->borderIsPixel)
{ {
exaFillRegionSolid((DrawablePtr)pWin, pRegion, pWin->border.pixel); exaFillRegionSolid((DrawablePtr)pWin, pRegion, pWin->border.pixel);
return; return;
} }
#if 0 #if 0
else else
{ {
exaFillRegionTiled((DrawablePtr)pWin, pRegion, pWin->border.pixmap); exaFillRegionTiled((DrawablePtr)pWin, pRegion, pWin->border.pixmap);
return; return;
} }
#endif #endif
break; break;
}
} }
ExaCheckPaintWindow (pWin, pRegion, what); ExaCheckPaintWindow (pWin, pRegion, what);
} }

View File

@ -1008,6 +1008,7 @@ exaCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
if (!pScrn->vtSema) { if (!pScrn->vtSema) {
ExaScreenPriv(pWin->drawable.pScreen); ExaScreenPriv(pWin->drawable.pScreen);
pExaScr->SavedCopyWindow (pWin, ptOldOrg, prgnSrc); pExaScr->SavedCopyWindow (pWin, ptOldOrg, prgnSrc);
exaDrawableDirty (&pWin->drawable);
return; return;
} }
@ -1071,59 +1072,49 @@ static void
exaPaintWindow(WindowPtr pWin, RegionPtr pRegion, int what) exaPaintWindow(WindowPtr pWin, RegionPtr pRegion, int what)
{ {
ScrnInfoPtr pScrn = XF86SCRNINFO(pWin->drawable.pScreen); ScrnInfoPtr pScrn = XF86SCRNINFO(pWin->drawable.pScreen);
ExaScreenPriv(pWin->drawable.pScreen);
if (!pScrn->vtSema) {
switch (what) {
case PW_BACKGROUND:
pExaScr->SavedPaintWindowBackground(pWin, pRegion, what);
break;
case PW_BORDER:
pExaScr->SavedPaintWindowBorder(pWin, pRegion, what);
break;
}
return;
}
STRACE; STRACE;
if (!REGION_NUM_RECTS(pRegion)) if (!REGION_NUM_RECTS(pRegion))
return; return;
switch (what) { if (pScrn->vtSema) {
case PW_BACKGROUND: switch (what) {
switch (pWin->backgroundState) { case PW_BACKGROUND:
case None: switch (pWin->backgroundState) {
return; case None:
case ParentRelative: return;
do { case ParentRelative:
pWin = pWin->parent; do {
} while (pWin->backgroundState == ParentRelative); pWin = pWin->parent;
(*pWin->drawable.pScreen->PaintWindowBackground)(pWin, pRegion, } while (pWin->backgroundState == ParentRelative);
what); (*pWin->drawable.pScreen->PaintWindowBackground)(pWin, pRegion,
return; what);
case BackgroundPixel: return;
exaFillRegionSolid((DrawablePtr)pWin, pRegion, pWin->background.pixel); case BackgroundPixel:
return; exaFillRegionSolid((DrawablePtr)pWin, pRegion, pWin->background.pixel);
return;
#if 0 #if 0
case BackgroundPixmap: case BackgroundPixmap:
exaFillRegionTiled((DrawablePtr)pWin, pRegion, pWin->background.pixmap); exaFillRegionTiled((DrawablePtr)pWin, pRegion, pWin->background.pixmap);
return; return;
#endif #endif
} }
break; break;
case PW_BORDER: case PW_BORDER:
if (pWin->borderIsPixel) if (pWin->borderIsPixel)
{ {
exaFillRegionSolid((DrawablePtr)pWin, pRegion, pWin->border.pixel); exaFillRegionSolid((DrawablePtr)pWin, pRegion, pWin->border.pixel);
return; return;
} }
#if 0 #if 0
else else
{ {
exaFillRegionTiled((DrawablePtr)pWin, pRegion, pWin->border.pixmap); exaFillRegionTiled((DrawablePtr)pWin, pRegion, pWin->border.pixmap);
return; return;
} }
#endif #endif
break; break;
}
} }
ExaCheckPaintWindow (pWin, pRegion, what); ExaCheckPaintWindow (pWin, pRegion, what);
} }

View File

@ -1008,6 +1008,7 @@ exaCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
if (!pScrn->vtSema) { if (!pScrn->vtSema) {
ExaScreenPriv(pWin->drawable.pScreen); ExaScreenPriv(pWin->drawable.pScreen);
pExaScr->SavedCopyWindow (pWin, ptOldOrg, prgnSrc); pExaScr->SavedCopyWindow (pWin, ptOldOrg, prgnSrc);
exaDrawableDirty (&pWin->drawable);
return; return;
} }
@ -1071,59 +1072,49 @@ static void
exaPaintWindow(WindowPtr pWin, RegionPtr pRegion, int what) exaPaintWindow(WindowPtr pWin, RegionPtr pRegion, int what)
{ {
ScrnInfoPtr pScrn = XF86SCRNINFO(pWin->drawable.pScreen); ScrnInfoPtr pScrn = XF86SCRNINFO(pWin->drawable.pScreen);
ExaScreenPriv(pWin->drawable.pScreen);
if (!pScrn->vtSema) {
switch (what) {
case PW_BACKGROUND:
pExaScr->SavedPaintWindowBackground(pWin, pRegion, what);
break;
case PW_BORDER:
pExaScr->SavedPaintWindowBorder(pWin, pRegion, what);
break;
}
return;
}
STRACE; STRACE;
if (!REGION_NUM_RECTS(pRegion)) if (!REGION_NUM_RECTS(pRegion))
return; return;
switch (what) { if (pScrn->vtSema) {
case PW_BACKGROUND: switch (what) {
switch (pWin->backgroundState) { case PW_BACKGROUND:
case None: switch (pWin->backgroundState) {
return; case None:
case ParentRelative: return;
do { case ParentRelative:
pWin = pWin->parent; do {
} while (pWin->backgroundState == ParentRelative); pWin = pWin->parent;
(*pWin->drawable.pScreen->PaintWindowBackground)(pWin, pRegion, } while (pWin->backgroundState == ParentRelative);
what); (*pWin->drawable.pScreen->PaintWindowBackground)(pWin, pRegion,
return; what);
case BackgroundPixel: return;
exaFillRegionSolid((DrawablePtr)pWin, pRegion, pWin->background.pixel); case BackgroundPixel:
return; exaFillRegionSolid((DrawablePtr)pWin, pRegion, pWin->background.pixel);
return;
#if 0 #if 0
case BackgroundPixmap: case BackgroundPixmap:
exaFillRegionTiled((DrawablePtr)pWin, pRegion, pWin->background.pixmap); exaFillRegionTiled((DrawablePtr)pWin, pRegion, pWin->background.pixmap);
return; return;
#endif #endif
} }
break; break;
case PW_BORDER: case PW_BORDER:
if (pWin->borderIsPixel) if (pWin->borderIsPixel)
{ {
exaFillRegionSolid((DrawablePtr)pWin, pRegion, pWin->border.pixel); exaFillRegionSolid((DrawablePtr)pWin, pRegion, pWin->border.pixel);
return; return;
} }
#if 0 #if 0
else else
{ {
exaFillRegionTiled((DrawablePtr)pWin, pRegion, pWin->border.pixmap); exaFillRegionTiled((DrawablePtr)pWin, pRegion, pWin->border.pixmap);
return; return;
} }
#endif #endif
break; break;
}
} }
ExaCheckPaintWindow (pWin, pRegion, what); ExaCheckPaintWindow (pWin, pRegion, what);
} }