|
|
08c2af4 |
diff -pruN -x '.moz*' -x .libs -x .deps -x dist -x 'config*' -x 'firefox*' -x '*a' -x '*so' -x '*o' -x build -x '*html' mozilla.orig/gfx/src/gtk/nsFontMetricsXft.cpp mozilla/gfx/src/gtk/nsFontMetricsXft.cpp
|
|
|
08c2af4 |
--- mozilla.orig/gfx/src/gtk/nsFontMetricsXft.cpp 2006-04-25 08:58:36.000000000 +0900
|
|
|
08c2af4 |
+++ mozilla/gfx/src/gtk/nsFontMetricsXft.cpp 2007-02-08 01:50:05.000000000 +0900
|
|
|
08c2af4 |
@@ -227,10 +227,14 @@ static nsresult EnumFontsXft (nsIAto
|
|
|
08c2af4 |
|
|
|
08c2af4 |
static void ConvertCharToUCS4 (const char *aString,
|
|
|
08c2af4 |
PRUint32 aLength,
|
|
|
08c2af4 |
+ PRUint32 aStart,
|
|
|
08c2af4 |
+ PRUint32 aEnd,
|
|
|
08c2af4 |
nsAutoFcChar32Buffer &aOutBuffer,
|
|
|
08c2af4 |
PRUint32 *aOutLen);
|
|
|
08c2af4 |
static void ConvertUnicharToUCS4 (const PRUnichar *aString,
|
|
|
08c2af4 |
PRUint32 aLength,
|
|
|
08c2af4 |
+ PRUint32 aStart,
|
|
|
08c2af4 |
+ PRUint32 aEnd,
|
|
|
08c2af4 |
nsAutoFcChar32Buffer &aOutBuffer,
|
|
|
08c2af4 |
PRUint32 *aOutLen);
|
|
|
08c2af4 |
static nsresult ConvertUCS4ToCustom (FcChar32 *aSrc, PRUint32 aSrcLen,
|
|
|
08c2af4 |
@@ -507,7 +511,7 @@ nsFontMetricsXft::GetWidth(const PRUnich
|
|
|
08c2af4 |
return NS_OK;
|
|
|
08c2af4 |
}
|
|
|
08c2af4 |
|
|
|
08c2af4 |
- gint rawWidth = RawGetWidth(aString, aLength);
|
|
|
08c2af4 |
+ gint rawWidth = RawGetWidth(aString, aLength, 0, aLength);
|
|
|
08c2af4 |
|
|
|
08c2af4 |
float f;
|
|
|
08c2af4 |
f = mDeviceContext->DevUnitsToAppUnits();
|
|
|
08c2af4 |
@@ -533,7 +537,7 @@ nsFontMetricsXft::GetTextDimensions(cons
|
|
|
08c2af4 |
return NS_OK;
|
|
|
08c2af4 |
|
|
|
08c2af4 |
nsresult rv;
|
|
|
08c2af4 |
- rv = EnumerateGlyphs(aString, aLength,
|
|
|
08c2af4 |
+ rv = EnumerateGlyphs(aString, aLength, 0, aLength,
|
|
|
08c2af4 |
&nsFontMetricsXft::TextDimensionsCallback,
|
|
|
08c2af4 |
&aDimensions);
|
|
|
08c2af4 |
|
|
|
08c2af4 |
@@ -608,7 +612,7 @@ nsFontMetricsXft::DrawString(const char
|
|
|
08c2af4 |
nsAutoDrawSpecBuffer drawBuffer(data.draw, &data.color);
|
|
|
08c2af4 |
data.drawBuffer = &drawBuffer;
|
|
|
08c2af4 |
|
|
|
08c2af4 |
- return EnumerateGlyphs(aString, aLength,
|
|
|
08c2af4 |
+ return EnumerateGlyphs(aString, aLength, 0, aLength,
|
|
|
08c2af4 |
&nsFontMetricsXft::DrawStringCallback, &data);
|
|
|
08c2af4 |
}
|
|
|
08c2af4 |
|
|
|
08c2af4 |
@@ -638,7 +642,7 @@ nsFontMetricsXft::DrawString(const PRUni
|
|
|
08c2af4 |
nsAutoDrawSpecBuffer drawBuffer(data.draw, &data.color);
|
|
|
08c2af4 |
data.drawBuffer = &drawBuffer;
|
|
|
08c2af4 |
|
|
|
08c2af4 |
- return EnumerateGlyphs(aString, aLength,
|
|
|
08c2af4 |
+ return EnumerateGlyphs(aString, aLength, 0, aLength,
|
|
|
08c2af4 |
&nsFontMetricsXft::DrawStringCallback, &data);
|
|
|
08c2af4 |
}
|
|
|
08c2af4 |
|
|
|
08c2af4 |
@@ -662,7 +666,7 @@ nsFontMetricsXft::GetBoundingMetrics(con
|
|
|
08c2af4 |
data.firstTime = PR_TRUE;
|
|
|
08c2af4 |
|
|
|
08c2af4 |
nsresult rv;
|
|
|
08c2af4 |
- rv = EnumerateGlyphs(aString, aLength,
|
|
|
08c2af4 |
+ rv = EnumerateGlyphs(aString, aLength, 0, aLength,
|
|
|
08c2af4 |
&nsFontMetricsXft::BoundingMetricsCallback, &data);
|
|
|
08c2af4 |
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
08c2af4 |
|
|
|
08c2af4 |
@@ -700,7 +704,7 @@ nsFontMetricsXft::GetBoundingMetrics(con
|
|
|
08c2af4 |
data.firstTime = PR_TRUE;
|
|
|
08c2af4 |
|
|
|
08c2af4 |
nsresult rv;
|
|
|
08c2af4 |
- rv = EnumerateGlyphs(aString, aLength,
|
|
|
08c2af4 |
+ rv = EnumerateGlyphs(aString, aLength, 0, aLength,
|
|
|
08c2af4 |
&nsFontMetricsXft::BoundingMetricsCallback, &data);
|
|
|
08c2af4 |
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
08c2af4 |
|
|
|
08c2af4 |
@@ -758,7 +762,17 @@ nsFontMetricsXft::GetRangeWidth(const PR
|
|
|
08c2af4 |
PRUint32 aEnd,
|
|
|
08c2af4 |
PRUint32 &aWidth)
|
|
|
08c2af4 |
{
|
|
|
08c2af4 |
- return NS_ERROR_NOT_IMPLEMENTED;
|
|
|
08c2af4 |
+ if (!aLength) {
|
|
|
08c2af4 |
+ aWidth = 0;
|
|
|
08c2af4 |
+ return NS_OK;
|
|
|
08c2af4 |
+ }
|
|
|
08c2af4 |
+
|
|
|
08c2af4 |
+ gint rawWidth = RawGetWidth(aText, aLength, aStart, aEnd);
|
|
|
08c2af4 |
+ float f = mDeviceContext->DevUnitsToAppUnits();
|
|
|
08c2af4 |
+
|
|
|
08c2af4 |
+ aWidth = NSToCoordRound(rawWidth * f);
|
|
|
08c2af4 |
+
|
|
|
08c2af4 |
+ return NS_OK;
|
|
|
08c2af4 |
}
|
|
|
08c2af4 |
|
|
|
08c2af4 |
nsresult
|
|
|
08c2af4 |
@@ -768,7 +782,17 @@ nsFontMetricsXft::GetRangeWidth(const ch
|
|
|
08c2af4 |
PRUint32 aEnd,
|
|
|
08c2af4 |
PRUint32 &aWidth)
|
|
|
08c2af4 |
{
|
|
|
08c2af4 |
- return NS_ERROR_NOT_IMPLEMENTED;
|
|
|
08c2af4 |
+ if (!aLength) {
|
|
|
08c2af4 |
+ aWidth = 0;
|
|
|
08c2af4 |
+ return NS_OK;
|
|
|
08c2af4 |
+ }
|
|
|
08c2af4 |
+
|
|
|
08c2af4 |
+ gint rawWidth = RawGetWidth(aText, aLength, aStart, aEnd);
|
|
|
08c2af4 |
+ float f = mDeviceContext->DevUnitsToAppUnits();
|
|
|
08c2af4 |
+
|
|
|
08c2af4 |
+ aWidth = NSToCoordRound(rawWidth * f);
|
|
|
08c2af4 |
+
|
|
|
08c2af4 |
+ return NS_OK;
|
|
|
08c2af4 |
}
|
|
|
08c2af4 |
|
|
|
08c2af4 |
PRUint32
|
|
|
08c2af4 |
@@ -850,12 +874,12 @@ nsFontMetricsXft::CacheFontMetrics(void)
|
|
|
08c2af4 |
// mSpaceWidth (width of a space)
|
|
|
08c2af4 |
gint rawWidth;
|
|
|
08c2af4 |
PRUnichar unispace(' ');
|
|
|
08c2af4 |
- rawWidth = RawGetWidth(&unispace, 1);
|
|
|
08c2af4 |
+ rawWidth = RawGetWidth(&unispace, 1, 0, 1);
|
|
|
08c2af4 |
mSpaceWidth = NSToCoordRound(rawWidth * f);
|
|
|
08c2af4 |
|
|
|
08c2af4 |
// mAveCharWidth (width of an 'average' char)
|
|
|
08c2af4 |
PRUnichar xUnichar('x');
|
|
|
08c2af4 |
- rawWidth = RawGetWidth(&xUnichar, 1);
|
|
|
08c2af4 |
+ rawWidth = RawGetWidth(&xUnichar, 1, 0, 1);
|
|
|
08c2af4 |
mAveCharWidth = NSToCoordRound(rawWidth * f);
|
|
|
08c2af4 |
|
|
|
08c2af4 |
// mXHeight (height of an 'x' character)
|
|
|
08c2af4 |
@@ -1226,12 +1250,27 @@ nsFontMetricsXft::DoMatch(PRBool aMatchA
|
|
|
08c2af4 |
}
|
|
|
08c2af4 |
|
|
|
08c2af4 |
gint
|
|
|
08c2af4 |
-nsFontMetricsXft::RawGetWidth(const PRUnichar* aString, PRUint32 aLength)
|
|
|
08c2af4 |
+nsFontMetricsXft::RawGetWidth(const PRUnichar* aString, PRUint32 aLength, PRUint32 aStart, PRUint32 aEnd)
|
|
|
08c2af4 |
+{
|
|
|
08c2af4 |
+ nscoord width = 0;
|
|
|
08c2af4 |
+ nsresult rv;
|
|
|
08c2af4 |
+
|
|
|
08c2af4 |
+ rv = EnumerateGlyphs(aString, aLength, aStart, aEnd,
|
|
|
08c2af4 |
+ &nsFontMetricsXft::GetWidthCallback, &width);
|
|
|
08c2af4 |
+
|
|
|
08c2af4 |
+ if (NS_FAILED(rv))
|
|
|
08c2af4 |
+ width = 0;
|
|
|
08c2af4 |
+
|
|
|
08c2af4 |
+ return width;
|
|
|
08c2af4 |
+}
|
|
|
08c2af4 |
+
|
|
|
08c2af4 |
+gint
|
|
|
08c2af4 |
+nsFontMetricsXft::RawGetWidth(const char* aString, PRUint32 aLength, PRUint32 aStart, PRUint32 aEnd)
|
|
|
08c2af4 |
{
|
|
|
08c2af4 |
nscoord width = 0;
|
|
|
08c2af4 |
nsresult rv;
|
|
|
08c2af4 |
|
|
|
08c2af4 |
- rv = EnumerateGlyphs(aString, aLength,
|
|
|
08c2af4 |
+ rv = EnumerateGlyphs(aString, aLength, aStart, aEnd,
|
|
|
08c2af4 |
&nsFontMetricsXft::GetWidthCallback, &width);
|
|
|
08c2af4 |
|
|
|
08c2af4 |
if (NS_FAILED(rv))
|
|
|
08c2af4 |
@@ -1457,6 +1496,8 @@ nsFontMetricsXft::EnumerateXftGlyphs(con
|
|
|
08c2af4 |
nsresult
|
|
|
08c2af4 |
nsFontMetricsXft::EnumerateGlyphs(const PRUnichar *aString,
|
|
|
08c2af4 |
PRUint32 aLen,
|
|
|
08c2af4 |
+ PRUint32 aStart,
|
|
|
08c2af4 |
+ PRUint32 aEnd,
|
|
|
08c2af4 |
GlyphEnumeratorCallback aCallback,
|
|
|
08c2af4 |
void *aCallbackData)
|
|
|
08c2af4 |
{
|
|
|
08c2af4 |
@@ -1465,7 +1506,7 @@ nsFontMetricsXft::EnumerateGlyphs(const
|
|
|
08c2af4 |
|
|
|
08c2af4 |
NS_ENSURE_TRUE(aLen, NS_OK);
|
|
|
08c2af4 |
|
|
|
08c2af4 |
- ConvertUnicharToUCS4(aString, aLen, charBuffer, &len;;
|
|
|
08c2af4 |
+ ConvertUnicharToUCS4(aString, aLen, aStart, aEnd, charBuffer, &len;;
|
|
|
08c2af4 |
if (!len)
|
|
|
08c2af4 |
return NS_ERROR_OUT_OF_MEMORY;
|
|
|
08c2af4 |
|
|
|
08c2af4 |
@@ -1475,6 +1516,8 @@ nsFontMetricsXft::EnumerateGlyphs(const
|
|
|
08c2af4 |
nsresult
|
|
|
08c2af4 |
nsFontMetricsXft::EnumerateGlyphs(const char *aString,
|
|
|
08c2af4 |
PRUint32 aLen,
|
|
|
08c2af4 |
+ PRUint32 aStart,
|
|
|
08c2af4 |
+ PRUint32 aEnd,
|
|
|
08c2af4 |
GlyphEnumeratorCallback aCallback,
|
|
|
08c2af4 |
void *aCallbackData)
|
|
|
08c2af4 |
{
|
|
|
08c2af4 |
@@ -1484,7 +1527,7 @@ nsFontMetricsXft::EnumerateGlyphs(const
|
|
|
08c2af4 |
NS_ENSURE_TRUE(aLen, NS_OK);
|
|
|
08c2af4 |
|
|
|
08c2af4 |
// Convert the incoming string into an array of UCS4 chars
|
|
|
08c2af4 |
- ConvertCharToUCS4(aString, aLen, charBuffer, &len;;
|
|
|
08c2af4 |
+ ConvertCharToUCS4(aString, aLen, aStart, aEnd, charBuffer, &len;;
|
|
|
08c2af4 |
if (!len)
|
|
|
08c2af4 |
return NS_ERROR_OUT_OF_MEMORY;
|
|
|
08c2af4 |
|
|
|
08c2af4 |
@@ -2343,7 +2386,7 @@ EnumFontsXft(nsIAtom* aLangGroup, const
|
|
|
08c2af4 |
|
|
|
08c2af4 |
/* static */
|
|
|
08c2af4 |
void
|
|
|
08c2af4 |
-ConvertCharToUCS4(const char *aString, PRUint32 aLength,
|
|
|
08c2af4 |
+ConvertCharToUCS4(const char *aString, PRUint32 aLength, PRUint32 aStart, PRUint32 aEnd,
|
|
|
08c2af4 |
nsAutoFcChar32Buffer &aOutBuffer, PRUint32 *aOutLen)
|
|
|
08c2af4 |
{
|
|
|
08c2af4 |
*aOutLen = 0;
|
|
|
08c2af4 |
@@ -2352,19 +2395,21 @@ ConvertCharToUCS4(const char *aString, P
|
|
|
08c2af4 |
if (!aOutBuffer.EnsureElemCapacity(aLength))
|
|
|
08c2af4 |
return;
|
|
|
08c2af4 |
outBuffer = aOutBuffer.get();
|
|
|
08c2af4 |
+ if (aEnd > aLength)
|
|
|
08c2af4 |
+ aEnd = aLength;
|
|
|
08c2af4 |
|
|
|
08c2af4 |
- for (PRUint32 i = 0; i < aLength; ++i) {
|
|
|
08c2af4 |
- outBuffer[i] = PRUint8(aString[i]); // to convert char >= 0x80 correctly
|
|
|
08c2af4 |
+ for (PRUint32 i = aStart; i < aLength && i < aEnd; ++i) {
|
|
|
08c2af4 |
+ outBuffer[i - aStart] = PRUint8(aString[i]); // to convert char >= 0x80 correctly
|
|
|
08c2af4 |
}
|
|
|
08c2af4 |
|
|
|
08c2af4 |
- *aOutLen = aLength;
|
|
|
08c2af4 |
+ *aOutLen = aEnd - aStart;
|
|
|
08c2af4 |
}
|
|
|
08c2af4 |
|
|
|
08c2af4 |
// Convert the incoming string into an array of UCS4 chars
|
|
|
08c2af4 |
|
|
|
08c2af4 |
/* static */
|
|
|
08c2af4 |
void
|
|
|
08c2af4 |
-ConvertUnicharToUCS4(const PRUnichar *aString, PRUint32 aLength,
|
|
|
08c2af4 |
+ConvertUnicharToUCS4(const PRUnichar *aString, PRUint32 aLength, PRUint32 aStart, PRUint32 aEnd,
|
|
|
08c2af4 |
nsAutoFcChar32Buffer &aOutBuffer, PRUint32 *aOutLen)
|
|
|
08c2af4 |
{
|
|
|
08c2af4 |
*aOutLen = 0;
|
|
|
08c2af4 |
@@ -2378,7 +2423,7 @@ ConvertUnicharToUCS4(const PRUnichar *aS
|
|
|
08c2af4 |
|
|
|
08c2af4 |
// Walk the passed in string looking for surrogates to convert to
|
|
|
08c2af4 |
// their full ucs4 representation.
|
|
|
08c2af4 |
- for (PRUint32 i = 0; i < aLength; ++i) {
|
|
|
08c2af4 |
+ for (PRUint32 i = aStart; i < aLength && i < aEnd; ++i) {
|
|
|
08c2af4 |
PRUnichar c = aString[i];
|
|
|
08c2af4 |
|
|
|
08c2af4 |
// Optimized for the non-surrogate case
|
|
|
08c2af4 |
@@ -2693,12 +2738,12 @@ ConvertUCS4ToCustom(FcChar32 *aSrc, PRU
|
|
|
08c2af4 |
#endif
|
|
|
08c2af4 |
// Convert 16bit custom font codes to UCS4
|
|
|
08c2af4 |
ConvertUnicharToUCS4(NS_REINTERPRET_CAST(PRUnichar *, med),
|
|
|
08c2af4 |
- medLen >> 1, aResult, &aDestLen);
|
|
|
08c2af4 |
+ medLen >> 1, 0, medLen >> 1, aResult, &aDestLen);
|
|
|
08c2af4 |
rv = aDestLen ? rv : NS_ERROR_OUT_OF_MEMORY;
|
|
|
08c2af4 |
}
|
|
|
08c2af4 |
else {
|
|
|
08c2af4 |
// Convert 8bit custom font codes to UCS4
|
|
|
08c2af4 |
- ConvertCharToUCS4(med, medLen, aResult, &aDestLen);
|
|
|
08c2af4 |
+ ConvertCharToUCS4(med, medLen, 0, medLen, aResult, &aDestLen);
|
|
|
08c2af4 |
rv = aDestLen ? rv : NS_ERROR_OUT_OF_MEMORY;
|
|
|
08c2af4 |
}
|
|
|
08c2af4 |
|
|
|
08c2af4 |
diff -pruN -x '.moz*' -x .libs -x .deps -x dist -x 'config*' -x 'firefox*' -x '*a' -x '*so' -x '*o' -x build -x '*html' mozilla.orig/gfx/src/gtk/nsFontMetricsXft.h mozilla/gfx/src/gtk/nsFontMetricsXft.h
|
|
|
08c2af4 |
--- mozilla.orig/gfx/src/gtk/nsFontMetricsXft.h 2005-05-03 05:48:30.000000000 +0900
|
|
|
08c2af4 |
+++ mozilla/gfx/src/gtk/nsFontMetricsXft.h 2007-02-08 01:38:27.000000000 +0900
|
|
|
08c2af4 |
@@ -259,7 +259,13 @@ private:
|
|
|
08c2af4 |
void DoMatch (PRBool aMatchAll);
|
|
|
08c2af4 |
|
|
|
08c2af4 |
gint RawGetWidth (const PRUnichar* aString,
|
|
|
08c2af4 |
- PRUint32 aLength);
|
|
|
08c2af4 |
+ PRUint32 aLength,
|
|
|
08c2af4 |
+ PRUint32 aStart,
|
|
|
08c2af4 |
+ PRUint32 aEnd);
|
|
|
08c2af4 |
+ gint RawGetWidth (const char* aString,
|
|
|
08c2af4 |
+ PRUint32 aLength,
|
|
|
08c2af4 |
+ PRUint32 aStart,
|
|
|
08c2af4 |
+ PRUint32 aEnd);
|
|
|
08c2af4 |
nsresult SetupMiniFont (void);
|
|
|
08c2af4 |
nsresult DrawUnknownGlyph (FcChar32 aChar,
|
|
|
08c2af4 |
nscoord aX,
|
|
|
08c2af4 |
@@ -272,10 +278,14 @@ private:
|
|
|
08c2af4 |
void *aCallbackData);
|
|
|
08c2af4 |
nsresult EnumerateGlyphs (const char *aString,
|
|
|
08c2af4 |
PRUint32 aLen,
|
|
|
08c2af4 |
+ PRUint32 aStart,
|
|
|
08c2af4 |
+ PRUint32 aEnd,
|
|
|
08c2af4 |
GlyphEnumeratorCallback aCallback,
|
|
|
08c2af4 |
void *aCallbackData);
|
|
|
08c2af4 |
nsresult EnumerateGlyphs (const PRUnichar *aString,
|
|
|
08c2af4 |
PRUint32 aLen,
|
|
|
08c2af4 |
+ PRUint32 aStart,
|
|
|
08c2af4 |
+ PRUint32 aEnd,
|
|
|
08c2af4 |
GlyphEnumeratorCallback aCallback,
|
|
|
08c2af4 |
void *aCallbackData);
|
|
|
08c2af4 |
void PrepareToDraw (nsRenderingContextGTK *aContext,
|