Added a new GetWidth that take a nsIDeviceContext

This commit is contained in:
rods%netscape.com 1998-08-05 22:21:21 +00:00
Родитель 6320072fb6
Коммит 3d520943e0
7 изменённых файлов: 48 добавлений и 0 удалений

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

@ -297,6 +297,12 @@ nscoord nsFontMetricsMac :: GetWidth(const PRUnichar *aString, PRUint32 aLength)
return width;
}
// XXX this needs to be implemented correctly
nscoord nsFontMetricsWin :: GetWidth(nsIDeviceContext *aContext, const nsString& aString)
{
return GetWidth(aString.GetUnicode(), aString.Length());
}
nscoord nsFontMetricsMac :: GetHeight()
{
//return mHeight;

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

@ -46,6 +46,7 @@ public:
virtual nscoord GetWidth(const nsString& aString);
virtual nscoord GetWidth(const char *aString);
virtual nscoord GetWidth(const PRUnichar *aString, PRUint32 aLength);
virtual nscoord GetWidth(nsIDeviceContext *aContext, const nsString& aString);
virtual nscoord GetHeight();
virtual nscoord GetLeading();
virtual nscoord GetMaxAscent();

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

@ -308,6 +308,12 @@ nscoord nsFontMetricsUnix :: GetWidth(const PRUnichar *aString, PRUint32 aLength
return (nscoord(width * mContext->GetDevUnitsToAppUnits()));
}
// XXX this needs to be implemented
nscoord nsFontMetricsWin :: GetWidth(nsIDeviceContext *aContext, const nsString& aString)
{
return GetWidth(aString.GetUnicode(), aString.Length());
}
nscoord nsFontMetricsUnix :: GetHeight()
{
return mHeight;

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

@ -48,6 +48,7 @@ public:
virtual nscoord GetWidth(const nsString& aString);
virtual nscoord GetWidth(const char *aString);
virtual nscoord GetWidth(const PRUnichar *aString, PRUint32 aLength);
virtual nscoord GetWidth(nsIDeviceContext *aContext, const nsString& aString);
virtual nscoord GetHeight();
virtual nscoord GetLeading();
virtual nscoord GetMaxAscent();

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

@ -60,6 +60,8 @@ public:
//get the width of a Unicode character string
virtual nscoord GetWidth(const PRUnichar *aString, PRUint32 aLength) = 0;
virtual nscoord GetWidth(nsIDeviceContext *aContext, const nsString& aString) = 0;
//get the height as this font
virtual nscoord GetHeight() = 0;

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

@ -234,11 +234,41 @@ nscoord nsFontMetricsWin :: GetWidth(const char *aString)
while ((ch = PRUint8(*aString++)) != 0) {
sum += mCharWidths[ch];
}
return sum;
}
nscoord nsFontMetricsWin :: GetWidth(nsIDeviceContext *aContext, const nsString& aString)
{
char * str = aString.ToNewCString();
//if (str) {
// nscoord width = GetWidth(str);
// delete[] str;
// return width;
//}
// Find font metrics and character widths
HWND win = (HWND)aContext->GetNativeWidget();
HDC hdc = ::GetDC(win);
HFONT oldfont = ::SelectObject(hdc, (HGDIOBJ) mFontHandle);
SIZE size;
BOOL status = GetTextExtentPoint32(hdc, str, strlen(str), &size);
::ReleaseDC(win, hdc);
float app2dev = aContext->GetAppUnitsToDevUnits();
float app2twip = app2dev * aContext->GetDevUnitsToTwips();
printf("[%s] %d %d = %d\n", str, size.cx, nscoord(((float)size.cx)*aContext->GetDevUnitsToTwips()), GetWidth(str));
delete[] str;
return nscoord(((float)size.cx)*aContext->GetDevUnitsToTwips());
}
nscoord nsFontMetricsWin :: GetWidth(const PRUnichar *aString, PRUint32 aLength)
{
// XXX use native text measurement routine
nscoord sum = 0;
while (aLength != 0) {

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

@ -48,6 +48,8 @@ public:
virtual nscoord GetWidth(const nsString& aString);
virtual nscoord GetWidth(const char *aString);
virtual nscoord GetWidth(const PRUnichar *aString, PRUint32 aLength);
virtual nscoord GetWidth(nsIDeviceContext *aContext, const nsString& aString);
virtual nscoord GetHeight();
virtual nscoord GetLeading();
virtual nscoord GetMaxAscent();