fb: cleanup fbChangeWindowAttributes
This cleans up the duplication in fbChangeWindowAttributes, and fixes a bug if the fb24_32ReformatTile ever failed, since the old code would happily dereference it in the fbEvenTile call a few lines later. Signed-off-by: Dave Airlie <airlied@redhat.com> Reviewed-by: Mark Kettenis <kettenis@openbsd.org>
This commit is contained in:
parent
36c7158133
commit
f9834d312e
|
@ -146,51 +146,36 @@ fbCopyWindow(WindowPtr pWin,
|
||||||
fbValidateDrawable (&pWin->drawable);
|
fbValidateDrawable (&pWin->drawable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
fbFixupWindowPixmap(DrawablePtr pDrawable, PixmapPtr *ppPixmap)
|
||||||
|
{
|
||||||
|
PixmapPtr pPixmap = *ppPixmap;
|
||||||
|
|
||||||
|
if (pPixmap->drawable.bitsPerPixel != pDrawable->bitsPerPixel)
|
||||||
|
{
|
||||||
|
pPixmap = fb24_32ReformatTile (pPixmap, pDrawable->bitsPerPixel);
|
||||||
|
if (!pPixmap)
|
||||||
|
return;
|
||||||
|
(*pDrawable->pScreen->DestroyPixmap) (*ppPixmap);
|
||||||
|
*ppPixmap = pPixmap;
|
||||||
|
}
|
||||||
|
if (FbEvenTile (pPixmap->drawable.width *
|
||||||
|
pPixmap->drawable.bitsPerPixel))
|
||||||
|
fbPadPixmap (pPixmap);
|
||||||
|
}
|
||||||
|
|
||||||
Bool
|
Bool
|
||||||
fbChangeWindowAttributes(WindowPtr pWin, unsigned long mask)
|
fbChangeWindowAttributes(WindowPtr pWin, unsigned long mask)
|
||||||
{
|
{
|
||||||
PixmapPtr pPixmap;
|
|
||||||
|
|
||||||
if (mask & CWBackPixmap)
|
if (mask & CWBackPixmap)
|
||||||
{
|
{
|
||||||
if (pWin->backgroundState == BackgroundPixmap)
|
if (pWin->backgroundState == BackgroundPixmap)
|
||||||
{
|
fbFixupWindowPixmap(&pWin->drawable, &pWin->background.pixmap);
|
||||||
pPixmap = pWin->background.pixmap;
|
|
||||||
if (pPixmap->drawable.bitsPerPixel != pWin->drawable.bitsPerPixel)
|
|
||||||
{
|
|
||||||
pPixmap = fb24_32ReformatTile (pPixmap,
|
|
||||||
pWin->drawable.bitsPerPixel);
|
|
||||||
if (pPixmap)
|
|
||||||
{
|
|
||||||
(*pWin->drawable.pScreen->DestroyPixmap) (pWin->background.pixmap);
|
|
||||||
pWin->background.pixmap = pPixmap;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (FbEvenTile (pPixmap->drawable.width *
|
|
||||||
pPixmap->drawable.bitsPerPixel))
|
|
||||||
fbPadPixmap (pPixmap);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (mask & CWBorderPixmap)
|
if (mask & CWBorderPixmap)
|
||||||
{
|
{
|
||||||
if (pWin->borderIsPixel == FALSE)
|
if (pWin->borderIsPixel == FALSE)
|
||||||
{
|
fbFixupWindowPixmap(&pWin->drawable, &pWin->border.pixmap);
|
||||||
pPixmap = pWin->border.pixmap;
|
|
||||||
if (pPixmap->drawable.bitsPerPixel !=
|
|
||||||
pWin->drawable.bitsPerPixel)
|
|
||||||
{
|
|
||||||
pPixmap = fb24_32ReformatTile (pPixmap,
|
|
||||||
pWin->drawable.bitsPerPixel);
|
|
||||||
if (pPixmap)
|
|
||||||
{
|
|
||||||
(*pWin->drawable.pScreen->DestroyPixmap) (pWin->border.pixmap);
|
|
||||||
pWin->border.pixmap = pPixmap;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (FbEvenTile (pPixmap->drawable.width *
|
|
||||||
pPixmap->drawable.bitsPerPixel))
|
|
||||||
fbPadPixmap (pPixmap);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue