older and wiser, making previous attempt to return correct clientrect actually work. r:saari@netscape.com

This commit is contained in:
danm%netscape.com 1999-11-19 07:56:12 +00:00
parent 849a797fa5
commit 0c12e35c43
2 changed files with 12 additions and 8 deletions

View File

@ -42,6 +42,7 @@ nsDeviceContextWin :: nsDeviceContextWin()
mHeightFloat = 0.0f;
mWidth = -1;
mHeight = -1;
mClientRectConverted = PR_FALSE;
mSpec = nsnull;
}
@ -113,10 +114,6 @@ void nsDeviceContextWin :: CommonInit(HDC aDC)
mPaletteInfo.sizePalette = (PRUint8)::GetDeviceCaps(aDC, SIZEPALETTE);
mPaletteInfo.numReserved = (PRUint8)::GetDeviceCaps(aDC, NUMRESERVED);
// Weird little dance ensues. width is stored in pixels, converted to twips
// (and stored) on the occasion of the first call of the accessor method.
// Not feeling much like that's a useful optimization and wanting to store
// two versions of clientrect as well, clientrect is just stored in twips.
mClientRect.width = ::GetDeviceCaps(aDC, HORZRES);
mClientRect.height = ::GetDeviceCaps(aDC, VERTRES);
mWidthFloat = (float)mClientRect.width;
@ -125,13 +122,11 @@ void nsDeviceContextWin :: CommonInit(HDC aDC)
{
RECT workArea;
::SystemParametersInfo(SPI_GETWORKAREA, 0, &workArea, 0);
mClientRect.x = NSToIntRound(workArea.left * mDevUnitsToAppUnits);
mClientRect.y = NSToIntRound(workArea.top * mDevUnitsToAppUnits);
mClientRect.x = workArea.left;
mClientRect.y = workArea.top;
mClientRect.width = workArea.right - workArea.left;
mClientRect.height = workArea.bottom - workArea.top;
}
mClientRect.width = NSToIntRound(mClientRect.width * mDevUnitsToAppUnits);
mClientRect.height = NSToIntRound(mClientRect.height * mDevUnitsToAppUnits);
DeviceContextImpl::CommonInit();
}
@ -559,6 +554,14 @@ NS_IMETHODIMP nsDeviceContextWin :: GetDeviceSurfaceDimensions(PRInt32 &aWidth,
NS_IMETHODIMP nsDeviceContextWin :: GetClientRect(nsRect &aRect)
{
if (!mClientRectConverted) {
mClientRect.x = NSToIntRound(mClientRect.x * mDevUnitsToAppUnits);
mClientRect.y = NSToIntRound(mClientRect.y * mDevUnitsToAppUnits);
mClientRect.width = NSToIntRound(mClientRect.width * mDevUnitsToAppUnits);
mClientRect.height = NSToIntRound(mClientRect.height * mDevUnitsToAppUnits);
mClientRectConverted = PR_TRUE;
}
aRect = mClientRect;
return NS_OK;
}

View File

@ -85,6 +85,7 @@ protected:
PRInt32 mWidth;
PRInt32 mHeight;
nsRect mClientRect;
PRBool mClientRectConverted;
nsIDeviceContextSpec *mSpec;
public: