The locking and unlocking controls some optimization of the image.. like the DIB. r=kmmclusk sr=buster

This commit is contained in:
dcone%netscape.com 2001-01-13 22:26:18 +00:00
Родитель 4a2c951744
Коммит df16aebcb0
2 изменённых файлов: 38 добавлений и 21 удалений

Просмотреть файл

@ -62,6 +62,8 @@ nsImageWin :: nsImageWin()
mNaturalWidth = 0; mNaturalWidth = 0;
mNaturalHeight = 0; mNaturalHeight = 0;
mIsLocked = PR_FALSE;
mDIBTemp = PR_FALSE;
//CleanUp(PR_TRUE); //CleanUp(PR_TRUE);
CleanUpDDB(); CleanUpDDB();
@ -1078,7 +1080,7 @@ UINT palType;
if (mImageBits != nsnull) { if (mImageBits != nsnull) {
delete [] mImageBits; delete [] mImageBits;
mImageBits = nsnull; mImageBits = nsnull;
} }
} }
} }
@ -1194,30 +1196,40 @@ PRInt16 numPaletteColors;
NS_IMETHODIMP NS_IMETHODIMP
nsImageWin::LockImagePixels(PRBool aMaskPixels) nsImageWin::LockImagePixels(PRBool aMaskPixels)
{ {
/* /* if (!mHBitmap) return NS_ERROR_NOT_INITIALIZED;
if (!mHBitmap) ... and do Windows locking of image pixels here, if necessary */
return NS_ERROR_NOT_INITIALIZED;
mIsLocked = PR_TRUE;
... and do Windows locking of image pixels here, if necessary
*/
return NS_OK; return NS_OK;
} }
/** --------------------------------------------------- /** ---------------------------------------------------
* Unlock the pixels * Unlock the pixels, optimize this nsImageWin
*/ */
NS_IMETHODIMP NS_IMETHODIMP
nsImageWin::UnlockImagePixels(PRBool aMaskPixels) nsImageWin::UnlockImagePixels(PRBool aMaskPixels)
{ {
/* mIsLocked = PR_FALSE;
if (!mHBitmap) // if memory was allocated temporarily by GetBits, it can now be deleted safely
if (mDIBTemp == PR_TRUE) {
// get rid of this memory
if (mImageBits != nsnull) {
delete [] mImageBits;
mImageBits = nsnull;
}
mDIBTemp = PR_FALSE;
}
/* if (!mHBitmap)
return NS_ERROR_NOT_INITIALIZED; return NS_ERROR_NOT_INITIALIZED;
if (aMaskPixels && !mAlphamHBitmap) if (aMaskPixels && !mAlphamHBitmap)
return NS_ERROR_NOT_INITIALIZED; return NS_ERROR_NOT_INITIALIZED;
... and do Windows unlocking of image pixels here, if necessary ... and do Windows unlocking of image pixels here, if necessary */
*/
return NS_OK; return NS_OK;
} }
/** --------------------------------------------------- /** ---------------------------------------------------
@ -1268,7 +1280,8 @@ nsRect destRect;
/** /**
* Get a pointer to the bits for the pixelmap. Will convert to DIB if * Get a pointer to the bits for the pixelmap. Will convert to DIB if
* only stored in optimized HBITMAP form. * only stored in optimized HBITMAP form. Using this routine will
* set the mDIBTemp flag to true so the next unlock will destroy this memory
* *
* @return address of the DIB pixel array * @return address of the DIB pixel array
*/ */
@ -1276,8 +1289,11 @@ nsRect destRect;
PRUint8* PRUint8*
nsImageWin::GetBits() nsImageWin::GetBits()
{ {
if ( !mImageBits ) // if mImageBits did not exist.. then
if ( !mImageBits ) {
ConvertDDBtoDIB(GetWidth(), GetHeight()); ConvertDDBtoDIB(GetWidth(), GetHeight());
mDIBTemp = PR_TRUE; // only set to true if the DIB is being created here as temporary
}
return mImageBits; return mImageBits;

Просмотреть файл

@ -246,13 +246,15 @@ private:
PRBool mIsOptimized; // Did we convert our DIB to a HBITMAP PRBool mIsOptimized; // Did we convert our DIB to a HBITMAP
nsColorMap* mColorMap; // Redundant with mColorTable, but necessary nsColorMap* mColorMap; // Redundant with mColorTable, but necessary
PRInt32 mDecodedX1; //Keeps track of what part of image PRInt32 mDecodedX1; //Keeps track of what part of image
PRInt32 mDecodedY1; // has been decoded. PRInt32 mDecodedY1; // has been decoded.
PRInt32 mDecodedX2; PRInt32 mDecodedX2;
PRInt32 mDecodedY2; PRInt32 mDecodedY2;
PRBool mIsLocked; // variable to keep track of the locking
PRBool mDIBTemp; // boolean to let us know if DIB was created as temp
PRInt32 mNaturalWidth; PRInt32 mNaturalWidth;
PRInt32 mNaturalHeight; PRInt32 mNaturalHeight;
// alpha layer members // alpha layer members
PRUint8 *mAlphaBits; // alpha layer if we made one PRUint8 *mAlphaBits; // alpha layer if we made one
@ -260,13 +262,12 @@ private:
PRInt16 mARowBytes; // number of bytes per row in the image for tha alpha PRInt16 mARowBytes; // number of bytes per row in the image for tha alpha
PRInt16 mAlphaWidth; // alpha layer width PRInt16 mAlphaWidth; // alpha layer width
PRInt16 mAlphaHeight; // alpha layer height PRInt16 mAlphaHeight; // alpha layer height
//nsPoint mLocation; // alpha mask location
PRInt8 mImageCache; // place to save off the old image for fast animation PRInt8 mImageCache; // place to save off the old image for fast animation
PRInt16 mAlphaLevel; // an alpha level every pixel uses PRInt16 mAlphaLevel; // an alpha level every pixel uses
HBITMAP mHBitmap; // the GDI bitmaps HBITMAP mHBitmap; // the GDI bitmaps
LPBITMAPINFOHEADER mBHead; // BITMAPINFOHEADER LPBITMAPINFOHEADER mBHead; // BITMAPINFOHEADER
static ALPHABLENDPROC gAlphaBlend; // AlphaBlend function pointer static ALPHABLENDPROC gAlphaBlend; // AlphaBlend function pointer
}; };