From 51faaf23bd97a91e11735a9062eaba7bf4bc0768 Mon Sep 17 00:00:00 2001 From: "danm%netscape.com" Date: Fri, 19 Nov 1999 07:56:12 +0000 Subject: [PATCH] older and wiser, making previous attempt to return correct clientrect actually work. r:saari@netscape.com git-svn-id: svn://10.0.0.236/trunk@53983 18797224-902f-48f8-a5cc-f745e15eee43 --- .../gfx/src/windows/nsDeviceContextWin.cpp | 19 +++++++++++-------- mozilla/gfx/src/windows/nsDeviceContextWin.h | 1 + 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/mozilla/gfx/src/windows/nsDeviceContextWin.cpp b/mozilla/gfx/src/windows/nsDeviceContextWin.cpp index 4b010e69882..1405678a38e 100644 --- a/mozilla/gfx/src/windows/nsDeviceContextWin.cpp +++ b/mozilla/gfx/src/windows/nsDeviceContextWin.cpp @@ -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; } diff --git a/mozilla/gfx/src/windows/nsDeviceContextWin.h b/mozilla/gfx/src/windows/nsDeviceContextWin.h index d87f2c18fa3..cb8a4b76974 100644 --- a/mozilla/gfx/src/windows/nsDeviceContextWin.h +++ b/mozilla/gfx/src/windows/nsDeviceContextWin.h @@ -85,6 +85,7 @@ protected: PRInt32 mWidth; PRInt32 mHeight; nsRect mClientRect; + PRBool mClientRectConverted; nsIDeviceContextSpec *mSpec; public: