diff --git a/hw/xfree86/common/xf86.h b/hw/xfree86/common/xf86.h index 927a7a7f1..8d0cb0532 100644 --- a/hw/xfree86/common/xf86.h +++ b/hw/xfree86/common/xf86.h @@ -79,6 +79,14 @@ extern _X_EXPORT Bool xf86DRI2Enabled(void); #define XF86SCRNINFO(p) xf86ScreenToScrn(p) +#define XF86FLIP_PIXELS() \ + do { \ + if (xf86GetFlipPixels()) { \ + pScreen->whitePixel = (pScreen->whitePixel) ? 0 : 1; \ + pScreen->blackPixel = (pScreen->blackPixel) ? 0 : 1; \ + } \ + while (0) + #define BOOLTOSTRING(b) ((b) ? "TRUE" : "FALSE") /* Compatibility functions for pre-input-thread drivers */ @@ -278,6 +286,8 @@ xf86GetWeight(void); extern _X_EXPORT Gamma xf86GetGamma(void); extern _X_EXPORT Bool +xf86GetFlipPixels(void); +extern _X_EXPORT Bool xf86ServerIsExiting(void); extern _X_EXPORT Bool xf86ServerIsResetting(void); diff --git a/hw/xfree86/common/xf86Globals.c b/hw/xfree86/common/xf86Globals.c index 65a3192df..b48b7aada 100644 --- a/hw/xfree86/common/xf86Globals.c +++ b/hw/xfree86/common/xf86Globals.c @@ -188,6 +188,7 @@ int xf86FbBpp = -1; int xf86Depth = -1; rgb xf86Weight = { 0, 0, 0 }; +Bool xf86FlipPixels = FALSE; Gamma xf86Gamma = { 0.0, 0.0, 0.0 }; Bool xf86AllowMouseOpenFail = FALSE; diff --git a/hw/xfree86/common/xf86Helper.c b/hw/xfree86/common/xf86Helper.c index 0389945a7..2786e6c6c 100644 --- a/hw/xfree86/common/xf86Helper.c +++ b/hw/xfree86/common/xf86Helper.c @@ -952,8 +952,14 @@ xf86SetDpi(ScrnInfoPtr pScrn, int x, int y) void xf86SetBlackWhitePixels(ScreenPtr pScreen) { - pScreen->whitePixel = 1; - pScreen->blackPixel = 0; + if (xf86FlipPixels) { + pScreen->whitePixel = 0; + pScreen->blackPixel = 1; + } + else { + pScreen->whitePixel = 1; + pScreen->blackPixel = 0; + } } /* @@ -1394,6 +1400,12 @@ xf86GetGamma(void) return xf86Gamma; } +Bool +xf86GetFlipPixels(void) +{ + return xf86FlipPixels; +} + Bool xf86ServerIsExiting(void) { diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c index 5695e71ac..07284f49e 100644 --- a/hw/xfree86/common/xf86Init.c +++ b/hw/xfree86/common/xf86Init.c @@ -954,6 +954,10 @@ ddxProcessArgument(int argc, char **argv, int i) xf86ConfigDir = argv[i + 1]; return 2; } + if (!strcmp(argv[i], "-flipPixels")) { + xf86FlipPixels = TRUE; + return 1; + } #ifdef XF86VIDMODE if (!strcmp(argv[i], "-disableVidMode")) { xf86VidModeDisabled = TRUE; @@ -1233,6 +1237,7 @@ ddxUseMsg(void) ErrorF ("-pointer name specify the core pointer InputDevice name\n"); ErrorF("-nosilk disable Silken Mouse\n"); + ErrorF("-flipPixels swap default black/white Pixel values\n"); #ifdef XF86VIDMODE ErrorF("-disableVidMode disable mode adjustments with xvidtune\n"); ErrorF diff --git a/hw/xfree86/common/xf86Priv.h b/hw/xfree86/common/xf86Priv.h index d5185d8df..662db054c 100644 --- a/hw/xfree86/common/xf86Priv.h +++ b/hw/xfree86/common/xf86Priv.h @@ -69,6 +69,7 @@ extern _X_EXPORT char *xf86KeyboardName; extern _X_EXPORT int xf86FbBpp; extern _X_EXPORT int xf86Depth; extern _X_EXPORT rgb xf86Weight; +extern _X_EXPORT Bool xf86FlipPixels; extern _X_EXPORT Gamma xf86Gamma; /* Other parameters */ diff --git a/hw/xfree86/doc/ddxDesign.xml b/hw/xfree86/doc/ddxDesign.xml index 1eed293fe..b7da50de3 100644 --- a/hw/xfree86/doc/ddxDesign.xml +++ b/hw/xfree86/doc/ddxDesign.xml @@ -1833,6 +1833,7 @@ Some of them are: xf86Depth -depth from the command line xf86Weight -weight from the command line xf86Gamma -{r,g,b,}gamma from the command line + xf86FlipPixels -flippixels from the command line xf86ProbeOnly -probeonly from the command line defaultColorVisualClass -cc from the command line @@ -1893,6 +1894,17 @@ functions: +
++ + Bool xf86GetFlipPixels(); + ++ ++ Returns TRUE if is + present on the command line, andFALSE otherwise. +
++ + void xf86SetBlackWhitePixels(ScrnInfoPtr pScrn); + ++ This functions sets the + +blackPixel and +whitePixel fields of theScrnInfoRec + according to whether or not the command + line options is present. +
const char *xf86GetVisualName(int visual); diff --git a/hw/xfree86/man/Xorg.man b/hw/xfree86/man/Xorg.man index 3ec6e2c25..2084653f8 100644 --- a/hw/xfree86/man/Xorg.man +++ b/hw/xfree86/man/Xorg.man @@ -171,6 +171,9 @@ bpp framebuffer rather than the (possibly default) 32 bpp framebuffer (or vice versa). Legal values are 1, 8, 16, 24, 32. Not all drivers support all values. .TP 8 +.B \-flipPixels +Swap the default values for the black and white pixels. +.TP 8 .BI \-gamma " value" Set the gamma correction. .I value diff --git a/hw/xfree86/vgahw/vgaHW.c b/hw/xfree86/vgahw/vgaHW.c index f6888009c..902b54070 100644 --- a/hw/xfree86/vgahw/vgaHW.c +++ b/hw/xfree86/vgahw/vgaHW.c @@ -1314,8 +1314,10 @@ vgaHWInit(ScrnInfoPtr scrninfp, DisplayModePtr mode) if (depth == 1) { /* Initialise the Mono map according to which bit-plane gets used */ + Bool flipPixels = xf86GetFlipPixels(); + for (i = 0; i < 16; i++) - if ((i & (1 << BIT_PLANE)) != 0) + if (((i & (1 << BIT_PLANE)) != 0) != flipPixels) regp->Attribute[i] = WHITE_VALUE; else regp->Attribute[i] = BLACK_VALUE;