fb: Fix 1bpp Xservers on "whitePixel=0, blackPixel=1" VRAMs
Closes: #1057
This commit is contained in:
parent
15624bb5bc
commit
f2b019d2b3
3
fb/fb.h
3
fb/fb.h
|
@ -734,6 +734,9 @@ fbResolveColor(unsigned short *pred,
|
||||||
extern _X_EXPORT Bool
|
extern _X_EXPORT Bool
|
||||||
fbInitializeColormap(ColormapPtr pmap);
|
fbInitializeColormap(ColormapPtr pmap);
|
||||||
|
|
||||||
|
extern _X_EXPORT Bool
|
||||||
|
mfbCreateColormap(ColormapPtr pmap);
|
||||||
|
|
||||||
extern _X_EXPORT int
|
extern _X_EXPORT int
|
||||||
|
|
||||||
fbExpandDirectColors(ColormapPtr pmap,
|
fbExpandDirectColors(ColormapPtr pmap,
|
||||||
|
|
|
@ -66,6 +66,41 @@ fbInitializeColormap(ColormapPtr pmap)
|
||||||
return miInitializeColormap(pmap);
|
return miInitializeColormap(pmap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Bool
|
||||||
|
mfbCreateColormap(ColormapPtr pmap)
|
||||||
|
{
|
||||||
|
ScreenPtr pScreen;
|
||||||
|
unsigned short red0, green0, blue0;
|
||||||
|
unsigned short red1, green1, blue1;
|
||||||
|
Pixel pix;
|
||||||
|
|
||||||
|
pScreen = pmap->pScreen;
|
||||||
|
if (pScreen->whitePixel == 0)
|
||||||
|
{
|
||||||
|
red0 = green0 = blue0 = ~0;
|
||||||
|
red1 = green1 = blue1 = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
red0 = green0 = blue0 = 0;
|
||||||
|
red1 = green1 = blue1 = ~0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* this is a monochrome colormap, it only has two entries, just fill
|
||||||
|
* them in by hand. If it were a more complex static map, it would be
|
||||||
|
* worth writing a for loop or three to initialize it */
|
||||||
|
|
||||||
|
/* this will be pixel 0 */
|
||||||
|
pix = 0;
|
||||||
|
if (AllocColor(pmap, &red0, &green0, &blue0, &pix, 0) != Success)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
/* this will be pixel 1 */
|
||||||
|
if (AllocColor(pmap, &red1, &green1, &blue1, &pix, 0) != Success)
|
||||||
|
return FALSE;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
fbExpandDirectColors(ColormapPtr pmap,
|
fbExpandDirectColors(ColormapPtr pmap,
|
||||||
int ndef, xColorItem * indefs, xColorItem * outdefs)
|
int ndef, xColorItem * indefs, xColorItem * outdefs)
|
||||||
|
|
|
@ -100,8 +100,10 @@ fbSetupScreen(ScreenPtr pScreen, void *pbits, /* pointer to screen bitmap */
|
||||||
if (!fbAllocatePrivates(pScreen))
|
if (!fbAllocatePrivates(pScreen))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
pScreen->defColormap = FakeClientID(0);
|
pScreen->defColormap = FakeClientID(0);
|
||||||
|
if (bpp > 1) {
|
||||||
/* let CreateDefColormap do whatever it wants for pixels */
|
/* let CreateDefColormap do whatever it wants for pixels */
|
||||||
pScreen->blackPixel = pScreen->whitePixel = (Pixel) 0;
|
pScreen->blackPixel = pScreen->whitePixel = (Pixel) 0;
|
||||||
|
}
|
||||||
pScreen->QueryBestSize = fbQueryBestSize;
|
pScreen->QueryBestSize = fbQueryBestSize;
|
||||||
/* SaveScreen */
|
/* SaveScreen */
|
||||||
pScreen->GetImage = fbGetImage;
|
pScreen->GetImage = fbGetImage;
|
||||||
|
@ -118,7 +120,11 @@ fbSetupScreen(ScreenPtr pScreen, void *pbits, /* pointer to screen bitmap */
|
||||||
pScreen->RealizeFont = fbRealizeFont;
|
pScreen->RealizeFont = fbRealizeFont;
|
||||||
pScreen->UnrealizeFont = fbUnrealizeFont;
|
pScreen->UnrealizeFont = fbUnrealizeFont;
|
||||||
pScreen->CreateGC = fbCreateGC;
|
pScreen->CreateGC = fbCreateGC;
|
||||||
|
if (bpp == 1) {
|
||||||
|
pScreen->CreateColormap = mfbCreateColormap;
|
||||||
|
} else {
|
||||||
pScreen->CreateColormap = fbInitializeColormap;
|
pScreen->CreateColormap = fbInitializeColormap;
|
||||||
|
}
|
||||||
pScreen->DestroyColormap = (void (*)(ColormapPtr)) NoopDDA;
|
pScreen->DestroyColormap = (void (*)(ColormapPtr)) NoopDDA;
|
||||||
pScreen->InstallColormap = fbInstallColormap;
|
pScreen->InstallColormap = fbInstallColormap;
|
||||||
pScreen->UninstallColormap = fbUninstallColormap;
|
pScreen->UninstallColormap = fbUninstallColormap;
|
||||||
|
|
Loading…
Reference in New Issue