1167 for ( edge = edges; edge < edge_limit; edge++ )
1168 {
1169 seg = edge->first;
1170 if ( seg )
1171 do
1172 {
1173 seg->edge = edge;
1174 seg = seg->edge_next;
1175
1176 } while ( seg != edge->first );
1177 }
1178
1179 /* now compute each edge properties */
1180 for ( edge = edges; edge < edge_limit; edge++ )
1181 {
1182 FT_Int is_round = 0; /* does it contain round segments? */
1183 FT_Int is_straight = 0; /* does it contain straight segments? */
1184
1185
1186 seg = edge->first;
1187
1188 do
1189 {
1190 FT_Bool is_serif;
1191
1192
1193 /* check for roundness of segment */
1194 if ( seg->flags & AF_EDGE_ROUND )
1195 is_round++;
1196 else
1197 is_straight++;
1198
1199 /* check for links -- if seg->serif is set, then seg->link must */
1200 /* be ignored */
1201 is_serif = FT_BOOL( seg->serif && seg->serif->edge != edge );
1202
1203 if ( seg->link || is_serif )
1204 {
1205 AF_Edge edge2;
1206 AF_Segment seg2;
1229
1230 if ( seg_delta < edge_delta )
1231 edge2 = seg2->edge;
1232 }
1233 else
1234 edge2 = seg2->edge;
1235
1236 if ( is_serif )
1237 {
1238 edge->serif = edge2;
1239 edge2->flags |= AF_EDGE_SERIF;
1240 }
1241 else
1242 edge->link = edge2;
1243 }
1244
1245 seg = seg->edge_next;
1246
1247 } while ( seg != edge->first );
1248
1249 /* set the round/straight flags */
1250 edge->flags = AF_EDGE_NORMAL;
1251
1252 if ( is_round > 0 && is_round >= is_straight )
1253 edge->flags |= AF_EDGE_ROUND;
1254
1255 /* get rid of serifs if link is set */
1256 /* XXX: This gets rid of many unpleasant artefacts! */
1257 /* Example: the `c' in cour.pfa at size 13 */
1258
1259 if ( edge->serif && edge->link )
1260 edge->serif = NULL;
1261 }
1262 }
1263
1264 Exit:
1265 return error;
1266 }
1267
1268
|
1167 for ( edge = edges; edge < edge_limit; edge++ )
1168 {
1169 seg = edge->first;
1170 if ( seg )
1171 do
1172 {
1173 seg->edge = edge;
1174 seg = seg->edge_next;
1175
1176 } while ( seg != edge->first );
1177 }
1178
1179 /* now compute each edge properties */
1180 for ( edge = edges; edge < edge_limit; edge++ )
1181 {
1182 FT_Int is_round = 0; /* does it contain round segments? */
1183 FT_Int is_straight = 0; /* does it contain straight segments? */
1184
1185
1186 seg = edge->first;
1187 if ( !seg )
1188 goto Skip_Loop;
1189
1190 do
1191 {
1192 FT_Bool is_serif;
1193
1194
1195 /* check for roundness of segment */
1196 if ( seg->flags & AF_EDGE_ROUND )
1197 is_round++;
1198 else
1199 is_straight++;
1200
1201 /* check for links -- if seg->serif is set, then seg->link must */
1202 /* be ignored */
1203 is_serif = FT_BOOL( seg->serif && seg->serif->edge != edge );
1204
1205 if ( seg->link || is_serif )
1206 {
1207 AF_Edge edge2;
1208 AF_Segment seg2;
1231
1232 if ( seg_delta < edge_delta )
1233 edge2 = seg2->edge;
1234 }
1235 else
1236 edge2 = seg2->edge;
1237
1238 if ( is_serif )
1239 {
1240 edge->serif = edge2;
1241 edge2->flags |= AF_EDGE_SERIF;
1242 }
1243 else
1244 edge->link = edge2;
1245 }
1246
1247 seg = seg->edge_next;
1248
1249 } while ( seg != edge->first );
1250
1251 Skip_Loop:
1252 /* set the round/straight flags */
1253 edge->flags = AF_EDGE_NORMAL;
1254
1255 if ( is_round > 0 && is_round >= is_straight )
1256 edge->flags |= AF_EDGE_ROUND;
1257
1258 /* get rid of serifs if link is set */
1259 /* XXX: This gets rid of many unpleasant artefacts! */
1260 /* Example: the `c' in cour.pfa at size 13 */
1261
1262 if ( edge->serif && edge->link )
1263 edge->serif = NULL;
1264 }
1265 }
1266
1267 Exit:
1268 return error;
1269 }
1270
1271
|