Login
[x]
Log in using an account from:
Fedora Account System
Red Hat Associate
Red Hat Customer
Or login using a Red Hat Bugzilla account
Forgot Password
Login:
Hide Forgot
Create an Account
Red Hat Bugzilla – Attachment 147619 Details for
Bug 227406
garbage characters on some websites (pango disabled)
[?]
New
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
|
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh83 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
This site requires JavaScript to be enabled to function correctly, please enable it.
[patch]
proposed patch
firefox-1.5-xft-rangewidth.patch (text/plain), 11.08 KB, created by
Akira TAGOH
on 2007-02-08 00:19:43 UTC
(
hide
)
Description:
proposed patch
Filename:
MIME Type:
Creator:
Akira TAGOH
Created:
2007-02-08 00:19:43 UTC
Size:
11.08 KB
patch
obsolete
>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 >--- mozilla.orig/gfx/src/gtk/nsFontMetricsXft.cpp 2006-04-25 08:58:36.000000000 +0900 >+++ mozilla/gfx/src/gtk/nsFontMetricsXft.cpp 2007-02-08 01:50:05.000000000 +0900 >@@ -227,10 +227,14 @@ static nsresult EnumFontsXft (nsIAto > > static void ConvertCharToUCS4 (const char *aString, > PRUint32 aLength, >+ PRUint32 aStart, >+ PRUint32 aEnd, > nsAutoFcChar32Buffer &aOutBuffer, > PRUint32 *aOutLen); > static void ConvertUnicharToUCS4 (const PRUnichar *aString, > PRUint32 aLength, >+ PRUint32 aStart, >+ PRUint32 aEnd, > nsAutoFcChar32Buffer &aOutBuffer, > PRUint32 *aOutLen); > static nsresult ConvertUCS4ToCustom (FcChar32 *aSrc, PRUint32 aSrcLen, >@@ -507,7 +511,7 @@ nsFontMetricsXft::GetWidth(const PRUnich > return NS_OK; > } > >- gint rawWidth = RawGetWidth(aString, aLength); >+ gint rawWidth = RawGetWidth(aString, aLength, 0, aLength); > > float f; > f = mDeviceContext->DevUnitsToAppUnits(); >@@ -533,7 +537,7 @@ nsFontMetricsXft::GetTextDimensions(cons > return NS_OK; > > nsresult rv; >- rv = EnumerateGlyphs(aString, aLength, >+ rv = EnumerateGlyphs(aString, aLength, 0, aLength, > &nsFontMetricsXft::TextDimensionsCallback, > &aDimensions); > >@@ -608,7 +612,7 @@ nsFontMetricsXft::DrawString(const char > nsAutoDrawSpecBuffer drawBuffer(data.draw, &data.color); > data.drawBuffer = &drawBuffer; > >- return EnumerateGlyphs(aString, aLength, >+ return EnumerateGlyphs(aString, aLength, 0, aLength, > &nsFontMetricsXft::DrawStringCallback, &data); > } > >@@ -638,7 +642,7 @@ nsFontMetricsXft::DrawString(const PRUni > nsAutoDrawSpecBuffer drawBuffer(data.draw, &data.color); > data.drawBuffer = &drawBuffer; > >- return EnumerateGlyphs(aString, aLength, >+ return EnumerateGlyphs(aString, aLength, 0, aLength, > &nsFontMetricsXft::DrawStringCallback, &data); > } > >@@ -662,7 +666,7 @@ nsFontMetricsXft::GetBoundingMetrics(con > data.firstTime = PR_TRUE; > > nsresult rv; >- rv = EnumerateGlyphs(aString, aLength, >+ rv = EnumerateGlyphs(aString, aLength, 0, aLength, > &nsFontMetricsXft::BoundingMetricsCallback, &data); > NS_ENSURE_SUCCESS(rv, rv); > >@@ -700,7 +704,7 @@ nsFontMetricsXft::GetBoundingMetrics(con > data.firstTime = PR_TRUE; > > nsresult rv; >- rv = EnumerateGlyphs(aString, aLength, >+ rv = EnumerateGlyphs(aString, aLength, 0, aLength, > &nsFontMetricsXft::BoundingMetricsCallback, &data); > NS_ENSURE_SUCCESS(rv, rv); > >@@ -758,7 +762,17 @@ nsFontMetricsXft::GetRangeWidth(const PR > PRUint32 aEnd, > PRUint32 &aWidth) > { >- return NS_ERROR_NOT_IMPLEMENTED; >+ if (!aLength) { >+ aWidth = 0; >+ return NS_OK; >+ } >+ >+ gint rawWidth = RawGetWidth(aText, aLength, aStart, aEnd); >+ float f = mDeviceContext->DevUnitsToAppUnits(); >+ >+ aWidth = NSToCoordRound(rawWidth * f); >+ >+ return NS_OK; > } > > nsresult >@@ -768,7 +782,17 @@ nsFontMetricsXft::GetRangeWidth(const ch > PRUint32 aEnd, > PRUint32 &aWidth) > { >- return NS_ERROR_NOT_IMPLEMENTED; >+ if (!aLength) { >+ aWidth = 0; >+ return NS_OK; >+ } >+ >+ gint rawWidth = RawGetWidth(aText, aLength, aStart, aEnd); >+ float f = mDeviceContext->DevUnitsToAppUnits(); >+ >+ aWidth = NSToCoordRound(rawWidth * f); >+ >+ return NS_OK; > } > > PRUint32 >@@ -850,12 +874,12 @@ nsFontMetricsXft::CacheFontMetrics(void) > // mSpaceWidth (width of a space) > gint rawWidth; > PRUnichar unispace(' '); >- rawWidth = RawGetWidth(&unispace, 1); >+ rawWidth = RawGetWidth(&unispace, 1, 0, 1); > mSpaceWidth = NSToCoordRound(rawWidth * f); > > // mAveCharWidth (width of an 'average' char) > PRUnichar xUnichar('x'); >- rawWidth = RawGetWidth(&xUnichar, 1); >+ rawWidth = RawGetWidth(&xUnichar, 1, 0, 1); > mAveCharWidth = NSToCoordRound(rawWidth * f); > > // mXHeight (height of an 'x' character) >@@ -1226,12 +1250,27 @@ nsFontMetricsXft::DoMatch(PRBool aMatchA > } > > gint >-nsFontMetricsXft::RawGetWidth(const PRUnichar* aString, PRUint32 aLength) >+nsFontMetricsXft::RawGetWidth(const PRUnichar* aString, PRUint32 aLength, PRUint32 aStart, PRUint32 aEnd) >+{ >+ nscoord width = 0; >+ nsresult rv; >+ >+ rv = EnumerateGlyphs(aString, aLength, aStart, aEnd, >+ &nsFontMetricsXft::GetWidthCallback, &width); >+ >+ if (NS_FAILED(rv)) >+ width = 0; >+ >+ return width; >+} >+ >+gint >+nsFontMetricsXft::RawGetWidth(const char* aString, PRUint32 aLength, PRUint32 aStart, PRUint32 aEnd) > { > nscoord width = 0; > nsresult rv; > >- rv = EnumerateGlyphs(aString, aLength, >+ rv = EnumerateGlyphs(aString, aLength, aStart, aEnd, > &nsFontMetricsXft::GetWidthCallback, &width); > > if (NS_FAILED(rv)) >@@ -1457,6 +1496,8 @@ nsFontMetricsXft::EnumerateXftGlyphs(con > nsresult > nsFontMetricsXft::EnumerateGlyphs(const PRUnichar *aString, > PRUint32 aLen, >+ PRUint32 aStart, >+ PRUint32 aEnd, > GlyphEnumeratorCallback aCallback, > void *aCallbackData) > { >@@ -1465,7 +1506,7 @@ nsFontMetricsXft::EnumerateGlyphs(const > > NS_ENSURE_TRUE(aLen, NS_OK); > >- ConvertUnicharToUCS4(aString, aLen, charBuffer, &len); >+ ConvertUnicharToUCS4(aString, aLen, aStart, aEnd, charBuffer, &len); > if (!len) > return NS_ERROR_OUT_OF_MEMORY; > >@@ -1475,6 +1516,8 @@ nsFontMetricsXft::EnumerateGlyphs(const > nsresult > nsFontMetricsXft::EnumerateGlyphs(const char *aString, > PRUint32 aLen, >+ PRUint32 aStart, >+ PRUint32 aEnd, > GlyphEnumeratorCallback aCallback, > void *aCallbackData) > { >@@ -1484,7 +1527,7 @@ nsFontMetricsXft::EnumerateGlyphs(const > NS_ENSURE_TRUE(aLen, NS_OK); > > // Convert the incoming string into an array of UCS4 chars >- ConvertCharToUCS4(aString, aLen, charBuffer, &len); >+ ConvertCharToUCS4(aString, aLen, aStart, aEnd, charBuffer, &len); > if (!len) > return NS_ERROR_OUT_OF_MEMORY; > >@@ -2343,7 +2386,7 @@ EnumFontsXft(nsIAtom* aLangGroup, const > > /* static */ > void >-ConvertCharToUCS4(const char *aString, PRUint32 aLength, >+ConvertCharToUCS4(const char *aString, PRUint32 aLength, PRUint32 aStart, PRUint32 aEnd, > nsAutoFcChar32Buffer &aOutBuffer, PRUint32 *aOutLen) > { > *aOutLen = 0; >@@ -2352,19 +2395,21 @@ ConvertCharToUCS4(const char *aString, P > if (!aOutBuffer.EnsureElemCapacity(aLength)) > return; > outBuffer = aOutBuffer.get(); >+ if (aEnd > aLength) >+ aEnd = aLength; > >- for (PRUint32 i = 0; i < aLength; ++i) { >- outBuffer[i] = PRUint8(aString[i]); // to convert char >= 0x80 correctly >+ for (PRUint32 i = aStart; i < aLength && i < aEnd; ++i) { >+ outBuffer[i - aStart] = PRUint8(aString[i]); // to convert char >= 0x80 correctly > } > >- *aOutLen = aLength; >+ *aOutLen = aEnd - aStart; > } > > // Convert the incoming string into an array of UCS4 chars > > /* static */ > void >-ConvertUnicharToUCS4(const PRUnichar *aString, PRUint32 aLength, >+ConvertUnicharToUCS4(const PRUnichar *aString, PRUint32 aLength, PRUint32 aStart, PRUint32 aEnd, > nsAutoFcChar32Buffer &aOutBuffer, PRUint32 *aOutLen) > { > *aOutLen = 0; >@@ -2378,7 +2423,7 @@ ConvertUnicharToUCS4(const PRUnichar *aS > > // Walk the passed in string looking for surrogates to convert to > // their full ucs4 representation. >- for (PRUint32 i = 0; i < aLength; ++i) { >+ for (PRUint32 i = aStart; i < aLength && i < aEnd; ++i) { > PRUnichar c = aString[i]; > > // Optimized for the non-surrogate case >@@ -2693,12 +2738,12 @@ ConvertUCS4ToCustom(FcChar32 *aSrc, PRU > #endif > // Convert 16bit custom font codes to UCS4 > ConvertUnicharToUCS4(NS_REINTERPRET_CAST(PRUnichar *, med), >- medLen >> 1, aResult, &aDestLen); >+ medLen >> 1, 0, medLen >> 1, aResult, &aDestLen); > rv = aDestLen ? rv : NS_ERROR_OUT_OF_MEMORY; > } > else { > // Convert 8bit custom font codes to UCS4 >- ConvertCharToUCS4(med, medLen, aResult, &aDestLen); >+ ConvertCharToUCS4(med, medLen, 0, medLen, aResult, &aDestLen); > rv = aDestLen ? rv : NS_ERROR_OUT_OF_MEMORY; > } > >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 >--- mozilla.orig/gfx/src/gtk/nsFontMetricsXft.h 2005-05-03 05:48:30.000000000 +0900 >+++ mozilla/gfx/src/gtk/nsFontMetricsXft.h 2007-02-08 01:38:27.000000000 +0900 >@@ -259,7 +259,13 @@ private: > void DoMatch (PRBool aMatchAll); > > gint RawGetWidth (const PRUnichar* aString, >- PRUint32 aLength); >+ PRUint32 aLength, >+ PRUint32 aStart, >+ PRUint32 aEnd); >+ gint RawGetWidth (const char* aString, >+ PRUint32 aLength, >+ PRUint32 aStart, >+ PRUint32 aEnd); > nsresult SetupMiniFont (void); > nsresult DrawUnknownGlyph (FcChar32 aChar, > nscoord aX, >@@ -272,10 +278,14 @@ private: > void *aCallbackData); > nsresult EnumerateGlyphs (const char *aString, > PRUint32 aLen, >+ PRUint32 aStart, >+ PRUint32 aEnd, > GlyphEnumeratorCallback aCallback, > void *aCallbackData); > nsresult EnumerateGlyphs (const PRUnichar *aString, > PRUint32 aLen, >+ PRUint32 aStart, >+ PRUint32 aEnd, > GlyphEnumeratorCallback aCallback, > void *aCallbackData); > void PrepareToDraw (nsRenderingContextGTK *aContext,
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 227406
:
147398
| 147619