Clear shadow pixmaps before using them.
This eliminates some ugly flashing, as well as clearing the borders when the shadow will not be completely painted.
This commit is contained in:
parent
97ab0c6eff
commit
e86c34663e
|
@ -153,6 +153,35 @@ xf86CrtcDamageShadow (xf86CrtcPtr crtc)
|
||||||
REGION_UNINIT (pScreen, &damage_region);
|
REGION_UNINIT (pScreen, &damage_region);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
xf86CrtcShadowClear (xf86CrtcPtr crtc)
|
||||||
|
{
|
||||||
|
PixmapPtr dst_pixmap = crtc->rotatedPixmap;
|
||||||
|
ScrnInfoPtr scrn = crtc->scrn;
|
||||||
|
ScreenPtr screen = scrn->pScreen;
|
||||||
|
PicturePtr dst;
|
||||||
|
PictFormatPtr format = compWindowFormat (WindowTable[screen->myNum]);
|
||||||
|
static xRenderColor black = { 0, 0, 0, 0 };
|
||||||
|
xRectangle rect;
|
||||||
|
int error;
|
||||||
|
|
||||||
|
dst = CreatePicture (None,
|
||||||
|
&dst_pixmap->drawable,
|
||||||
|
format,
|
||||||
|
0L,
|
||||||
|
NULL,
|
||||||
|
serverClient,
|
||||||
|
&error);
|
||||||
|
if (!dst)
|
||||||
|
return;
|
||||||
|
rect.x = 0;
|
||||||
|
rect.y = 0;
|
||||||
|
rect.width = dst_pixmap->drawable.width;
|
||||||
|
rect.height = dst_pixmap->drawable.height;
|
||||||
|
CompositeRects (PictOpSrc, dst, &black, 1, &rect);
|
||||||
|
FreePicture (dst, None);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
xf86RotatePrepare (ScreenPtr pScreen)
|
xf86RotatePrepare (ScreenPtr pScreen)
|
||||||
{
|
{
|
||||||
|
@ -170,6 +199,7 @@ xf86RotatePrepare (ScreenPtr pScreen)
|
||||||
crtc->rotatedData,
|
crtc->rotatedData,
|
||||||
crtc->mode.HDisplay,
|
crtc->mode.HDisplay,
|
||||||
crtc->mode.VDisplay);
|
crtc->mode.VDisplay);
|
||||||
|
xf86CrtcShadowClear (crtc);
|
||||||
if (!xf86_config->rotation_damage_registered)
|
if (!xf86_config->rotation_damage_registered)
|
||||||
{
|
{
|
||||||
/* Hook damage to screen pixmap */
|
/* Hook damage to screen pixmap */
|
||||||
|
|
Loading…
Reference in New Issue