Bool fakeScreenInitialize(KdScreenInfo * screen, FakeScrPriv * scrpriv) { if (!screen->width || !screen->height) { screen->width = 1024; screen->height = 768; screen->rate = 72; } if (screen->width <= 0) screen->width = 1; if (screen->height <= 0) screen->height = 1; if (!screen->fb.depth) screen->fb.depth = 16; if (screen->fb.depth <= 8) { screen->fb.visuals = ((1 << StaticGray) | (1 << GrayScale) | (1 << StaticColor) | (1 << PseudoColor) | (1 << TrueColor) | (1 << DirectColor)); } else { screen->fb.visuals = (1 << TrueColor); #define Mask(o,l) (((1 << l) - 1) << o) if (screen->fb.depth <= 15) { screen->fb.depth = 15; screen->fb.bitsPerPixel = 16; screen->fb.redMask = Mask (10, 5); screen->fb.greenMask = Mask (5, 5); screen->fb.blueMask = Mask (0, 5); } else if (screen->fb.depth <= 16) { screen->fb.depth = 16; screen->fb.bitsPerPixel = 16; screen->fb.redMask = Mask (11, 5); screen->fb.greenMask = Mask (5, 6); screen->fb.blueMask = Mask (0, 5); } else { screen->fb.depth = 24; screen->fb.bitsPerPixel = 32; screen->fb.redMask = Mask (16, 8); screen->fb.greenMask = Mask (8, 8); screen->fb.blueMask = Mask (0, 8); } } scrpriv->randr = screen->randr; return fakeMapFramebuffer(screen); }
Bool fakeRandRSetConfig (ScreenPtr pScreen, Rotation randr, int rate, RRScreenSizePtr pSize) { KdScreenPriv(pScreen); KdScreenInfo *screen = pScreenPriv->screen; FakeScrPriv *scrpriv = screen->driver; Bool wasEnabled = pScreenPriv->enabled; FakeScrPriv oldscr; int oldwidth; int oldheight; int oldmmwidth; int oldmmheight; int newwidth, newheight; if (screen->randr & (RR_Rotate_0|RR_Rotate_180)) { newwidth = pSize->width; newheight = pSize->height; } else { newwidth = pSize->height; newheight = pSize->width; } if (wasEnabled) KdDisableScreen (pScreen); oldscr = *scrpriv; oldwidth = screen->width; oldheight = screen->height; oldmmwidth = pScreen->mmWidth; oldmmheight = pScreen->mmHeight; /* * Set new configuration */ scrpriv->randr = KdAddRotation (screen->randr, randr); fakeUnmapFramebuffer (screen); if (!fakeMapFramebuffer (screen)) goto bail4; KdShadowUnset (screen->pScreen); if (!fakeSetShadow (screen->pScreen)) goto bail4; fakeSetScreenSizes (screen->pScreen); /* * Set frame buffer mapping */ (*pScreen->ModifyPixmapHeader) (fbGetScreenPixmap (pScreen), pScreen->width, pScreen->height, screen->fb.depth, screen->fb.bitsPerPixel, screen->fb.byteStride, screen->fb.frameBuffer); /* set the subpixel order */ KdSetSubpixelOrder (pScreen, scrpriv->randr); if (wasEnabled) KdEnableScreen (pScreen); return TRUE; bail4: fakeUnmapFramebuffer (screen); *scrpriv = oldscr; (void) fakeMapFramebuffer (screen); pScreen->width = oldwidth; pScreen->height = oldheight; pScreen->mmWidth = oldmmwidth; pScreen->mmHeight = oldmmheight; if (wasEnabled) KdEnableScreen (pScreen); return FALSE; }