From a8e4c3ea580379013fb8f4b961a0ec83916e4a8f Mon Sep 17 00:00:00 2001 From: "ramiro%netscape.com" Date: Wed, 7 Jul 1999 00:05:19 +0000 Subject: [PATCH] Exorcism of global shift, mask and count flags. --- gfx/src/xlib/nsDeviceContextXlib.cpp | 66 +-------------------- gfx/src/xlib/nsDrawingSurfaceXlib.cpp | 84 ++++++++++++++++++--------- gfx/src/xlib/nsDrawingSurfaceXlib.h | 6 ++ gfx/src/xlib/nsGfxFactoryXlib.cpp | 18 ------ 4 files changed, 62 insertions(+), 112 deletions(-) diff --git a/gfx/src/xlib/nsDeviceContextXlib.cpp b/gfx/src/xlib/nsDeviceContextXlib.cpp index 5efd1228a348..35e3b71d0846 100644 --- a/gfx/src/xlib/nsDeviceContextXlib.cpp +++ b/gfx/src/xlib/nsDeviceContextXlib.cpp @@ -34,8 +34,6 @@ static NS_DEFINE_IID(kDeviceContextIID, NS_IDEVICE_CONTEXT_IID); static PRLogModuleInfo *DeviceContextXlibLM = PR_NewLogModule("DeviceContextXlib"); -static PRUint8 _ConvertMaskToCount(unsigned long val); -static PRUint8 _GetShiftForMask(unsigned long val); static void _EvilInitilizeGlobals(); nsDeviceContextXlib::nsDeviceContextXlib() @@ -71,24 +69,6 @@ extern Visual * gVisual; extern int gDepth; extern XVisualInfo *gVisualInfo; -extern PRUint32 gRedZeroMask; //red color mask in zero position -extern PRUint32 gGreenZeroMask; //green color mask in zero position -extern PRUint32 gBlueZeroMask; //blue color mask in zero position -extern PRUint32 gAlphaZeroMask; //alpha data mask in zero position -extern PRUint32 gRedMask; //red color mask -extern PRUint32 gGreenMask; //green color mask -extern PRUint32 gBlueMask; //blue color mask -extern PRUint32 gAlphaMask; //alpha data mask -extern PRUint8 gRedCount; //number of red color bits -extern PRUint8 gGreenCount; //number of green color bits -extern PRUint8 gBlueCount; //number of blue color bits -extern PRUint8 gAlphaCount; //number of alpha data bits -extern PRUint8 gRedShift; //number to shift value into red position -extern PRUint8 gGreenShift; //number to shift value into green position -extern PRUint8 gBlueShift; //number to shift value into blue position -extern PRUint8 gAlphaShift; //number to shift value into alpha position - - NS_IMETHODIMP nsDeviceContextXlib::Init(nsNativeWidget aNativeWidget) { PR_LOG(DeviceContextXlibLM, PR_LOG_DEBUG, ("nsDeviceContextXlib::Init()\n")); @@ -433,49 +413,5 @@ NS_IMETHODIMP nsDeviceContextXlib::EndPage(void) static void _EvilInitilizeGlobals() { - // set up the color info for this display - // set up the masks - gRedMask = gVisualInfo->red_mask; - gGreenMask = gVisualInfo->green_mask; - gBlueMask = gVisualInfo->blue_mask; - gAlphaMask = 0; - // set up the number of bits in each - gRedCount = _ConvertMaskToCount(gVisualInfo->red_mask); - gGreenCount = _ConvertMaskToCount(gVisualInfo->green_mask); - gBlueCount = _ConvertMaskToCount(gVisualInfo->blue_mask); - gAlphaCount = 0; - // set up the number of bits that you need to shift to get to - // a specific mask - gRedShift = _GetShiftForMask(gVisualInfo->red_mask); - gGreenShift = _GetShiftForMask(gVisualInfo->green_mask); - gBlueShift = _GetShiftForMask(gVisualInfo->blue_mask); - gAlphaShift = 0; -} - -static PRUint8 _ConvertMaskToCount(unsigned long val) -{ - PRUint8 retval = 0; - PRUint8 cur_bit = 0; - // walk through the number, incrementing the value if - // the bit in question is set. - while (cur_bit < (sizeof(unsigned long) * 8)) { - if ((val >> cur_bit) & 0x1) { - retval++; - } - cur_bit++; - } - return retval; -} - -static PRUint8 _GetShiftForMask(unsigned long val) -{ - PRUint8 cur_bit = 0; - // walk through the number, looking for the first 1 - while (cur_bit < (sizeof(unsigned long) * 8)) { - if ((val >> cur_bit) & 0x1) { - return cur_bit; - } - cur_bit++; - } - return cur_bit; + // foo } diff --git a/gfx/src/xlib/nsDrawingSurfaceXlib.cpp b/gfx/src/xlib/nsDrawingSurfaceXlib.cpp index 1d3337ede70c..d3cc1eef7883 100644 --- a/gfx/src/xlib/nsDrawingSurfaceXlib.cpp +++ b/gfx/src/xlib/nsDrawingSurfaceXlib.cpp @@ -19,27 +19,13 @@ #include "nsDrawingSurfaceXlib.h" #include "prlog.h" +#include "xlibrgb.h" // for xlib_rgb_get_visual_info +#include // for XVisualInfo. + static NS_DEFINE_IID(kIDrawingSurfaceIID, NS_IDRAWING_SURFACE_IID); static PRLogModuleInfo *DrawingSurfaceXlibLM = PR_NewLogModule("DrawingSurfaceXlib"); -extern PRUint32 gRedZeroMask; //red color mask in zero position -extern PRUint32 gGreenZeroMask; //green color mask in zero position -extern PRUint32 gBlueZeroMask; //blue color mask in zero position -extern PRUint32 gAlphaZeroMask; //alpha data mask in zero position -extern PRUint32 gRedMask; //red color mask -extern PRUint32 gGreenMask; //green color mask -extern PRUint32 gBlueMask; //blue color mask -extern PRUint32 gAlphaMask; //alpha data mask -extern PRUint8 gRedCount; //number of red color bits -extern PRUint8 gGreenCount; //number of green color bits -extern PRUint8 gBlueCount; //number of blue color bits -extern PRUint8 gAlphaCount; //number of alpha data bits -extern PRUint8 gRedShift; //number to shift value into red position -extern PRUint8 gGreenShift; //number to shift value into green position -extern PRUint8 gBlueShift; //number to shift value into blue position -extern PRUint8 gAlphaShift; //number to shift value into alpha position - nsDrawingSurfaceXlib::nsDrawingSurfaceXlib() { NS_INIT_REFCNT(); @@ -63,19 +49,29 @@ nsDrawingSurfaceXlib::nsDrawingSurfaceXlib() mWidth = 0; mHeight = 0; mIsOffscreen = PR_FALSE; + // set up the masks for the pix formats - mPixFormat.mRedMask = gRedMask; - mPixFormat.mGreenMask = gGreenMask; - mPixFormat.mBlueMask = gBlueMask; - mPixFormat.mAlphaMask = gAlphaMask; - mPixFormat.mRedCount = gRedCount; - mPixFormat.mGreenCount = gGreenCount; - mPixFormat.mBlueCount = gBlueCount; - mPixFormat.mAlphaCount = gAlphaCount; - mPixFormat.mRedShift = gRedShift; - mPixFormat.mGreenShift = gGreenShift; - mPixFormat.mBlueShift = gBlueShift; - mPixFormat.mAlphaShift = gAlphaShift; + XVisualInfo * x_visual_info = xlib_rgb_get_visual_info(); + + NS_ASSERTION(nsnull != x_visual_info,"Visual info from xlibrgb is null."); + + if (nsnull != x_visual_info) + { + mPixFormat.mRedMask = x_visual_info->red_mask; + mPixFormat.mGreenMask = x_visual_info->green_mask;; + mPixFormat.mBlueMask = x_visual_info->blue_mask;; + mPixFormat.mAlphaMask = 0; + + mPixFormat.mRedCount = ConvertMaskToCount(x_visual_info->red_mask); + mPixFormat.mGreenCount = ConvertMaskToCount(x_visual_info->green_mask); + mPixFormat.mBlueCount = ConvertMaskToCount(x_visual_info->blue_mask);; + mPixFormat.mAlphaCount = 0; + + mPixFormat.mRedShift = GetShiftForMask(x_visual_info->red_mask); + mPixFormat.mGreenShift = GetShiftForMask(x_visual_info->green_mask); + mPixFormat.mBlueShift = GetShiftForMask(x_visual_info->blue_mask); + mPixFormat.mAlphaShift = 0; + } } nsDrawingSurfaceXlib::~nsDrawingSurfaceXlib() @@ -228,3 +224,33 @@ nsDrawingSurfaceXlib::GetPixelFormat(nsPixelFormat *aFormat) *aFormat = mPixFormat; return NS_OK; } + +PRUint8 +nsDrawingSurfaceXlib::ConvertMaskToCount(unsigned long val) +{ + PRUint8 retval = 0; + PRUint8 cur_bit = 0; + // walk through the number, incrementing the value if + // the bit in question is set. + while (cur_bit < (sizeof(unsigned long) * 8)) { + if ((val >> cur_bit) & 0x1) { + retval++; + } + cur_bit++; + } + return retval; +} + +PRUint8 +nsDrawingSurfaceXlib::GetShiftForMask(unsigned long val) +{ + PRUint8 cur_bit = 0; + // walk through the number, looking for the first 1 + while (cur_bit < (sizeof(unsigned long) * 8)) { + if ((val >> cur_bit) & 0x1) { + return cur_bit; + } + cur_bit++; + } + return cur_bit; +} diff --git a/gfx/src/xlib/nsDrawingSurfaceXlib.h b/gfx/src/xlib/nsDrawingSurfaceXlib.h index 27847c7c46a7..b4b8fbfe2c59 100644 --- a/gfx/src/xlib/nsDrawingSurfaceXlib.h +++ b/gfx/src/xlib/nsDrawingSurfaceXlib.h @@ -90,6 +90,12 @@ private: // are we offscreen PRBool mIsOffscreen; PRBool mDestroyDrawable; + + +private: + + static PRUint8 ConvertMaskToCount(unsigned long val); + static PRUint8 GetShiftForMask(unsigned long val); }; #endif diff --git a/gfx/src/xlib/nsGfxFactoryXlib.cpp b/gfx/src/xlib/nsGfxFactoryXlib.cpp index c8dd9f53b974..e0c439846ecf 100644 --- a/gfx/src/xlib/nsGfxFactoryXlib.cpp +++ b/gfx/src/xlib/nsGfxFactoryXlib.cpp @@ -50,24 +50,6 @@ int gDepth; Visual *gVisual; XVisualInfo *gVisualInfo; -PRUint32 gRedZeroMask; //red color mask in zero position -PRUint32 gGreenZeroMask; //green color mask in zero position -PRUint32 gBlueZeroMask; //blue color mask in zero position -PRUint32 gAlphaZeroMask; //alpha data mask in zero position -PRUint32 gRedMask; //red color mask -PRUint32 gGreenMask; //green color mask -PRUint32 gBlueMask; //blue color mask -PRUint32 gAlphaMask; //alpha data mask -PRUint8 gRedCount; //number of red color bits -PRUint8 gGreenCount; //number of green color bits -PRUint8 gBlueCount; //number of blue color bits -PRUint8 gAlphaCount; //number of alpha data bits -PRUint8 gRedShift; //number to shift value into red position -PRUint8 gGreenShift; //number to shift value into green position -PRUint8 gBlueShift; //number to shift value into blue position -PRUint8 gAlphaShift; //number to shift value into alpha position - - class nsGfxFactoryXlib : public nsIFactory { public: