< prev index next >

src/java.desktop/share/native/libfreetype/src/autofit/afcjk.c

Print this page




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 


< prev index next >