Home | History | Annotate | Download | only in autofit

Lines Matching refs:edge

858         /* we are already on an edge, try to locate its start */
892 /* we are just leaving an edge; record a new segment! */
1150 /* an edge in our table that corresponds to its position. */
1152 /* If no edge is found, we create and insert a new edge in the */
1153 /* sorted table. Otherwise, we simply add the segment to the edge's */
1155 /* edge's properties. */
1157 /* Note that the table of edges is sorted along the segment/edge */
1162 /* assure that edge distance threshold is at most 0.25px */
1186 /* look for an edge corresponding to the segment */
1189 AF_Edge edge = axis->edges + ee;
1193 dist = seg->pos - edge->fpos;
1197 if ( dist < edge_distance_threshold && edge->dir == seg->dir )
1199 found = edge;
1206 AF_Edge edge;
1209 /* insert a new edge in the list and */
1213 memory, &edge );
1217 /* add the segment to the new edge's list */
1218 FT_ZERO( edge );
1220 edge->first = seg;
1221 edge->last = seg;
1222 edge->dir = seg->dir;
1223 edge->fpos = seg->pos;
1224 edge->opos = FT_MulFix( seg->pos, scale );
1225 edge->pos = edge->opos;
1230 /* if an edge was found, simply add the segment to the edge's */
1241 /* Good, we now compute each edge's properties according to the */
1244 /* - the edge's main direction */
1245 /* - stem edge, serif edge or both (which defaults to stem then) */
1246 /* - rounded edge, straight or both (which defaults to straight) */
1247 /* - link for edge */
1251 /* first of all, set the `edge' field in each segment -- this is */
1252 /* required in order to compute edge links */
1255 * Note that removing this loop and setting the `edge' field of each
1262 AF_Edge edge;
1265 for ( edge = edges; edge < edge_limit; edge++ )
1267 seg = edge->first;
1271 seg->edge = edge;
1274 } while ( seg != edge->first );
1277 /* now compute each edge properties */
1278 for ( edge = edges; edge < edge_limit; edge++ )
1288 seg = edge->first;
1312 seg->serif->edge &&
1313 seg->serif->edge != edge );
1315 if ( ( seg->link && seg->link->edge != NULL ) || is_serif )
1321 edge2 = edge->link;
1327 edge2 = edge->serif;
1336 edge_delta = edge->fpos - edge2->fpos;
1345 edge2 = seg2->edge;
1348 edge2 = seg2->edge;
1352 edge->serif = edge2;
1356 edge->link = edge2;
1361 } while ( seg != edge->first );
1364 edge->flags = AF_EDGE_NORMAL;
1367 edge->flags |= AF_EDGE_ROUND;
1370 /* set the edge's main direction */
1371 edge->dir = AF_DIR_NONE;
1374 edge->dir = (FT_Char)up_dir;
1377 edge->dir = (FT_Char)-up_dir;
1380 edge->dir = 0; /* both up and down! */
1387 if ( edge->serif && edge->link )
1388 edge->serif = 0;
1425 AF_Edge edge = axis->edges;
1426 AF_Edge edge_limit = edge + axis->num_edges;
1434 /* for each horizontal edge search the blue zone which is closest */
1435 for ( ; edge < edge_limit; edge++ )
1465 is_major_dir = FT_BOOL( edge->dir == axis->major_dir );
1467 /* if it is a top zone, the edge must be against the major */
1476 dist = edge->fpos - blue->ref.org;
1488 /* the edge is rounded, and whether the edge is over the */
1491 if ( edge->flags & AF_EDGE_ROUND && dist != 0 )
1493 FT_Bool is_under_ref = FT_BOOL( edge->fpos < blue->ref.org );
1498 dist = edge->fpos - blue->shoot.org;
1514 edge->blue_edge = best_blue;
1812 /* Align one stem edge relative to the previous stem edge. */
1830 FT_TRACE5(( " LINK: edge %d (opos=%.2f) linked to %.2f,"
1837 /* Shift the coordinates of the `serif' edge by the same amount */
1838 /* as the corresponding `base' edge has been moved already. */
1872 AF_Edge edge;
1881 FT_TRACE5(( "%s edge hinting\n",
1889 for ( edge = edges; edge < edge_limit; edge++ )
1895 if ( edge->flags & AF_EDGE_DONE )
1898 blue = edge->blue_edge;
1900 edge2 = edge->link;
1903 edge1 = edge;
1910 edge2 = edge;
1918 FT_TRACE5(( " BLUE_ANCHOR: edge %d (opos=%.2f) snapped to %.2f,"
1919 " was %.2f (anchor=edge %d)\n",
1921 edge1->pos / 64.0, edge - edges ));
1923 FT_TRACE5(( " BLUE: edge %d (opos=%.2f) snapped to %.2f,"
1945 anchor = edge;
1951 for ( edge = edges; edge < edge_limit; edge++ )
1956 if ( edge->flags & AF_EDGE_DONE )
1960 edge2 = edge->link;
1972 FT_TRACE5(( " ASSERTION FAILED for edge %d\n", edge2-edges ));
1974 af_latin_align_linked_edge( hints, dim, edge2, edge );
1975 edge->flags |= AF_EDGE_DONE;
1991 org_len = edge2->opos - edge->opos;
1994 (AF_Edge_Flags)edge->flags,
2015 org_center = edge->opos + ( org_len >> 1 );
2031 edge->pos = cur_pos1 - cur_len / 2;
2032 edge2->pos = edge->pos + cur_len;
2035 edge->pos = FT_PIX_ROUND( edge->opos );
2037 anchor = edge;
2038 edge->flags |= AF_EDGE_DONE;
2040 FT_TRACE5(( " ANCHOR: edge %d (opos=%.2f) and %d (opos=%.2f)"
2042 edge - edges, edge->opos / 64.0,
2044 edge->pos / 64.0, edge2->pos / 64.0 ));
2046 af_latin_align_linked_edge( hints, dim, edge, edge2 );
2058 org_pos = anchor->pos + ( edge->opos - anchor->opos );
2059 org_len = edge2->opos - edge->opos;
2064 (AF_Edge_Flags)edge->flags,
2069 FT_TRACE5(( " ADJUST: edge %d (pos=%.2f) moved to %.2f\n",
2070 edge - edges, edge->pos / 64.0,
2073 edge->pos = edge2->pos - cur_len;
2107 edge->pos = cur_pos1 - cur_len / 2;
2110 FT_TRACE5(( " STEM: edge %d (opos=%.2f) linked to %d (opos=%.2f)"
2112 edge - edges, edge->opos / 64.0,
2114 edge->pos / 64.0, edge2->pos / 64.0 ));
2119 org_pos = anchor->pos + ( edge->opos - anchor->opos );
2120 org_len = edge2->opos - edge->opos;
2125 (AF_Edge_Flags)edge->flags,
2138 edge->pos = ( delta1 < delta2 ) ? cur_pos1 : cur_pos2;
2139 edge2->pos = edge->pos + cur_len;
2141 FT_TRACE5(( " STEM: edge %d (opos=%.2f) linked to %d (opos=%.2f)"
2143 edge - edges, edge->opos / 64.0,
2145 edge->pos / 64.0, edge2->pos / 64.0 ));
2152 edge->flags |= AF_EDGE_DONE;
2155 if ( edge > edges && edge->pos < edge[-1].pos )
2158 FT_TRACE5(( " BOUND: edge %d (pos=%.2f) moved to %.2f\n",
2159 edge - edges, edge->pos / 64.0, edge[-1].pos / 64.0 ));
2164 edge->pos = edge[-1].pos;
2237 for ( edge = edges; edge < edge_limit; edge++ )
2242 if ( edge->flags & AF_EDGE_DONE )
2247 if ( edge->serif )
2249 delta = edge->serif->opos - edge->opos;
2256 af_latin_align_serif_edge( hints, edge->serif, edge );
2257 FT_TRACE5(( " SERIF: edge %d (opos=%.2f) serif to %d (opos=%.2f)"
2259 edge - edges, edge->opos / 64.0,
2260 edge->serif - edges, edge->serif->opos / 64.0,
2261 edge->pos / 64.0 ));
2265 edge->pos = FT_PIX_ROUND( edge->opos );
2266 anchor = edge;
2267 FT_TRACE5(( " SERIF_ANCHOR: edge %d (opos=%.2f)"
2269 edge-edges, edge->opos / 64.0, edge->pos / 64.0 ));
2276 for ( before = edge - 1; before >= edges; before-- )
2280 for ( after = edge + 1; after < edge_limit; after++ )
2284 if ( before >= edges && before < edge &&
2285 after < edge_limit && after > edge )
2288 edge->pos = before->pos;
2290 edge->pos = before->pos +
2291 FT_MulDiv( edge->opos - before->opos,
2295 FT_TRACE5(( " SERIF_LINK1: edge %d (opos=%.2f) snapped to %.2f"
2297 edge - edges, edge->opos / 64.0,
2298 edge->pos / 64.0,
2303 edge->pos = anchor->pos +
2304 ( ( edge->opos - anchor->opos + 16 ) & ~31 );
2305 FT_TRACE5(( " SERIF_LINK2: edge %d (opos=%.2f)"
2307 edge - edges, edge->opos / 64.0, edge->pos / 64.0 ));
2314 edge->flags |= AF_EDGE_DONE;
2316 if ( edge > edges && edge->pos < edge[-1].pos )
2319 FT_TRACE5(( " BOUND: edge %d (pos=%.2f) moved to %.2f\n",
2320 edge - edges, edge->pos / 64.0, edge[-1].pos / 64.0 ));
2324 edge->pos = edge[-1].pos;
2327 if ( edge + 1 < edge_limit &&
2328 edge[1].flags & AF_EDGE_DONE &&
2329 edge->pos > edge[1].pos )
2332 FT_TRACE5(( " BOUND: edge %d (pos=%.2f) moved to %.2f\n",
2333 edge - edges, edge->pos / 64.0, edge[1].pos / 64.0 ));
2338 edge->pos = edge[1].pos;