зеркало из https://github.com/mozilla/gecko-dev.git
Added a new GetWidth that take a nsIDeviceContext
This commit is contained in:
Родитель
6320072fb6
Коммит
3d520943e0
|
@ -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();
|
||||
|
|
Загрузка…
Ссылка в новой задаче