1 ===================================================================
2 RCS file: /sources/freetype/freetype2/src/truetype/ttinterp.c,v
3 retrieving revision 1.99
4 retrieving revision 1.102
6 --- freetype2/src/truetype/ttinterp.c 2007/02/16 08:12:50 1.99
7 +++ freetype2/src/truetype/ttinterp.c 2007/03/18 07:35:08 1.102
8 @@ -4839,16 +4839,18 @@
11 if ( CUR.GS.gep0 == 0 || CUR.GS.gep1 == 0 )
12 - FT_ARRAY_COPY( CUR.twilight.orus,
14 - CUR.twilight.n_points );
16 - /* get scaled orus coordinates */
17 - vec1.x = TT_MULFIX( CUR.zp0.orus[L].x - CUR.zp1.orus[K].x,
18 - CUR.metrics.x_scale );
19 - vec1.y = TT_MULFIX( CUR.zp0.orus[L].y - CUR.zp1.orus[L].y,
20 - CUR.metrics.y_scale );
23 + vec1.x = CUR.zp0.org[L].x - CUR.zp1.org[K].x;
24 + vec1.y = CUR.zp0.org[L].y - CUR.zp1.org[K].y;
28 + /* get scaled orus coordinates */
29 + vec1.x = TT_MULFIX( CUR.zp0.orus[L].x - CUR.zp1.orus[K].x,
30 + CUR.metrics.x_scale );
31 + vec1.y = TT_MULFIX( CUR.zp0.orus[L].y - CUR.zp1.orus[K].y,
32 + CUR.metrics.y_scale );
34 D = CUR_fast_dualproj( &vec1 );
37 @@ -5780,23 +5782,28 @@
41 + /* UNDOCUMENTED: twilight zone special case */
43 + if ( CUR.GS.gep0 == 0 || CUR.GS.gep1 == 0 )
45 + FT_Vector* vec1 = &CUR.zp1.org[point];
46 + FT_Vector* vec2 = &CUR.zp0.org[CUR.GS.rp0];
48 + org_dist = CUR_Func_dualproj( vec1, vec2 );
52 FT_Vector* vec1 = &CUR.zp1.orus[point];
53 FT_Vector* vec2 = &CUR.zp0.orus[CUR.GS.rp0];
56 - if ( CUR.GS.gep0 == 0 || CUR.GS.gep1 == 0 )
57 - FT_ARRAY_COPY( CUR.twilight.orus,
59 - CUR.twilight.n_points );
61 - if ( CUR.metrics.x_scale == CUR.metrics.y_scale )
62 + if ( CUR.metrics.x_scale == CUR.metrics.y_scale )
64 /* this should be faster */
65 org_dist = CUR_Func_dualproj( vec1, vec2 );
66 org_dist = TT_MULFIX( org_dist, CUR.metrics.x_scale );
74 FT_F26Dot6 old_range, cur_range;
81 @@ -6184,21 +6192,18 @@
85 - * We need to deal in a special way with the twilight zone. The easiest
86 - * solution is simply to copy the coordinates from `org' to `orus'
87 - * whenever a font tries to perform intersections based on some of its
90 + * We need to deal in a special way with the twilight zone.
91 * Otherwise, by definition, the value of CUR.twilight.orus[n] is (0,0),
92 - * whatever value of `n'.
95 - if ( CUR.GS.gep0 == 0 || CUR.GS.gep1 == 0 || CUR.GS.gep2 == 0 )
96 - FT_ARRAY_COPY( CUR.twilight.orus,
98 - CUR.twilight.n_points );
99 + twilight = ( CUR.GS.gep0 == 0 || CUR.GS.gep1 == 0 || CUR.GS.gep2 == 0 );
102 + orus_base = &CUR.zp0.org[CUR.GS.rp1];
104 + orus_base = &CUR.zp0.orus[CUR.GS.rp1];
106 - orus_base = &CUR.zp0.orus[CUR.GS.rp1];
107 - cur_base = &CUR.zp0.cur[CUR.GS.rp1];
108 + cur_base = &CUR.zp0.cur[CUR.GS.rp1];
110 /* XXX: There are some glyphs in some braindead but popular */
111 /* fonts out there (e.g. [aeu]grave in monotype.ttf) */
112 @@ -6212,7 +6217,11 @@
116 - old_range = CUR_Func_dualproj( &CUR.zp1.orus[CUR.GS.rp2], orus_base );
118 + old_range = CUR_Func_dualproj( &CUR.zp1.org[CUR.GS.rp2], orus_base );
120 + old_range = CUR_Func_dualproj( &CUR.zp1.orus[CUR.GS.rp2], orus_base );
122 cur_range = CUR_Func_project ( &CUR.zp1.cur[CUR.GS.rp2], cur_base );
125 @@ -6233,7 +6242,11 @@
129 - org_dist = CUR_Func_dualproj( &CUR.zp2.orus[point], orus_base );
131 + org_dist = CUR_Func_dualproj( &CUR.zp2.org[point], orus_base );
133 + org_dist = CUR_Func_dualproj( &CUR.zp2.orus[point], orus_base );
135 cur_dist = CUR_Func_project ( &CUR.zp2.cur[point], cur_base );
136 new_dist = (old_range != 0)
137 ? TT_MULDIV( org_dist, cur_range, old_range )