Magellan Linux

Contents of /trunk/mozilla-firefox/patches/mozilla-firefox-1.0.7-pango-space-width.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 153 - (show annotations) (download)
Tue May 8 20:52:56 2007 UTC (17 years ago) by niro
File size: 4603 byte(s)
-import

1 --- mozilla/gfx/src/gtk/nsFontMetricsPango.h.foo 2004-12-10 18:18:18.000000000 -0500
2 +++ mozilla/gfx/src/gtk/nsFontMetricsPango.h 2004-12-10 18:19:16.000000000 -0500
3 @@ -256,6 +256,7 @@
4 nscoord mMaxDescent;
5 nscoord mMaxAdvance;
6 nscoord mSpaceWidth;
7 + nscoord mPangoSpaceWidth;
8 nscoord mAveCharWidth;
9
10 // Private methods
11 @@ -282,6 +283,8 @@
12 PRInt32& aNumCharsFit,
13 nsTextDimensions& aLastWordDimensions,
14 nsRenderingContextGTK *aContext);
15 +
16 + void FixupSpaceWidths (PangoLayout *aLayout, const char *aString);
17 };
18
19 class nsFontEnumeratorPango : public nsIFontEnumerator
20 --- mozilla/gfx/src/gtk/nsFontMetricsPango.cpp.foo 2004-12-10 18:18:18.000000000 -0500
21 +++ mozilla/gfx/src/gtk/nsFontMetricsPango.cpp 2004-12-10 18:19:16.000000000 -0500
22 @@ -145,6 +145,7 @@
23 mRTLPangoContext = nsnull;
24 mPangoAttrList = nsnull;
25 mIsRTL = PR_FALSE;
26 + mPangoSpaceWidth = 0;
27
28 static PRBool initialized = PR_FALSE;
29 if (initialized)
30 @@ -345,6 +346,14 @@
31 // mMaxAdvance
32 mMaxAdvance = nscoord(xftFont->max_advance_width * f);
33
34 + // mPangoSpaceWidth
35 + PangoLayout *layout = pango_layout_new(mPangoContext);
36 + pango_layout_set_text(layout, " ", 1);
37 + int pswidth, psheight;
38 + pango_layout_get_size(layout, &pswidth, &psheight);
39 + mPangoSpaceWidth = pswidth;
40 + g_object_unref(layout);
41 +
42 // mSpaceWidth (width of a space)
43 nscoord tmpWidth;
44 GetWidth(" ", 1, tmpWidth, NULL);
45 @@ -485,6 +494,9 @@
46
47 pango_layout_set_text(layout, aString, aLength);
48
49 + if (mPangoSpaceWidth)
50 + FixupSpaceWidths(layout, aString);
51 +
52 int width, height;
53
54 pango_layout_get_size(layout, &width, &height);
55 @@ -526,6 +538,7 @@
56 gint width, height;
57
58 pango_layout_set_text(layout, text, strlen(text));
59 + FixupSpaceWidths(layout, text);
60 pango_layout_get_size(layout, &width, &height);
61
62 width /= PANGO_SCALE;
63 @@ -573,6 +586,7 @@
64
65
66 pango_layout_set_text(layout, text, strlen(text));
67 + FixupSpaceWidths(layout, text);
68
69 // Get the logical extents
70 PangoLayoutLine *line;
71 @@ -715,6 +729,7 @@
72 PangoLayout *layout = pango_layout_new(mPangoContext);
73
74 pango_layout_set_text(layout, aString, aLength);
75 + FixupSpaceWidths(layout, aString);
76
77 int x = aX;
78 int y = aY;
79 @@ -778,6 +793,7 @@
80 }
81
82 pango_layout_set_text(layout, text, strlen(text));
83 + FixupSpaceWidths(layout, text);
84
85 aContext->GetTranMatrix()->TransformCoord(&x, &y);
86
87 @@ -847,6 +863,7 @@
88 }
89
90 pango_layout_set_text(layout, text, strlen(text));
91 + FixupSpaceWidths(layout, text);
92
93 // Get the logical extents
94 PangoLayoutLine *line;
95 @@ -931,6 +948,7 @@
96
97 // Set up the pango layout
98 pango_layout_set_text(layout, text, strlen(text));
99 + FixupSpaceWidths(layout, text);
100
101 // Convert back to UTF-16 while filling in the cluster info
102 // structure.
103 @@ -986,6 +1004,7 @@
104
105 // Set up the pango layout
106 pango_layout_set_text(layout, text, strlen(text));
107 + FixupSpaceWidths(layout, text);
108
109 found = pango_layout_xy_to_index(layout, localCoord, 0,
110 &inx, &trailing);
111 @@ -1087,6 +1106,7 @@
112 utf8End = strlen(text);
113
114 pango_layout_set_text(layout, text, strlen(text));
115 + FixupSpaceWidths(layout, text);
116
117 PangoLayoutLine *line;
118 if (pango_layout_get_line_count(layout) != 1) {
119 @@ -1502,6 +1522,26 @@
120 return NS_OK;
121 }
122
123 +void
124 +nsFontMetricsPango::FixupSpaceWidths (PangoLayout *aLayout,
125 + const char *aString)
126 +{
127 + PangoLayoutLine *line = pango_layout_get_line(aLayout, 0);
128 +
129 + gint curRun = 0;
130 +
131 + for (GSList *tmpList = line->runs; tmpList && tmpList->data;
132 + tmpList = tmpList->next, curRun++) {
133 + PangoLayoutRun *layoutRun = (PangoLayoutRun *)tmpList->data;
134 +
135 + for (gint i=0; i < layoutRun->glyphs->num_glyphs; i++) {
136 + gint thisOffset = (gint)layoutRun->glyphs->log_clusters[i] + layoutRun->item->offset;
137 + if (aString[thisOffset] == ' ')
138 + layoutRun->glyphs->glyphs[i].geometry.width = mPangoSpaceWidth;
139 + }
140 + }
141 +}
142 +
143 /* static */
144 PRBool
145 IsASCIIFontName(const nsString& aName)
146 @@ -1790,7 +1830,6 @@
147 return nsCRT::strcmp(str1, str2);
148 }
149
150 -
151 // nsFontEnumeratorPango class
152
153 nsFontEnumeratorPango::nsFontEnumeratorPango()