Home | History | Annotate | Download | only in autofit

Lines Matching refs:edge

1219         /* we are already on an edge, try to locate its start */
1253 /* we are just leaving an edge; record a new segment! */
1559 /* an edge in our table that corresponds to its position. */
1561 /* If no edge is found, we create and insert a new edge in the */
1562 /* sorted table. Otherwise, we simply add the segment to the edge's */
1564 /* edge's properties. */
1566 /* Note that the table of edges is sorted along the segment/edge */
1571 edge distance threshold is at most 0.25px */
1595 /* look for an edge corresponding to the segment */
1598 AF_Edge edge = axis->edges + ee;
1602 dist = seg->pos - edge->fpos;
1606 if ( dist < edge_distance_threshold && edge->dir == seg->dir )
1608 found = edge;
1615 AF_Edge edge;
1618 /* insert a new edge in the list and */
1622 memory, &edge );
1626 /* add the segment to the new edge's list */
1627 FT_ZERO( edge );
1629 edge->first = seg;
1630 edge->last = seg;
1631 edge->dir = seg->dir;
1632 edge->fpos = seg->pos;
1633 edge->opos = FT_MulFix( seg->pos, scale );
1634 edge->pos = edge->opos;
1639 /* if an edge was found, simply add the segment to the edge's */
1650 /* Good, we now compute each edge's properties according to the */
1653 /* - the edge's main direction */
1654 /* - stem edge, serif edge or both (which defaults to stem then) */
1655 /* - rounded edge, straight or both (which defaults to straight) */
1656 /* - link for edge */
1660 /* first of all, set the `edge' field in each segment -- this is */
1661 /* required in order to compute edge links */
1664 * Note that removing this loop and setting the `edge' field of each
1671 AF_Edge edge;
1674 for ( edge = edges; edge < edge_limit; edge++ )
1676 seg = edge->first;
1680 seg->edge = edge;
1683 } while ( seg != edge->first );
1686 /* now compute each edge properties */
1687 for ( edge = edges; edge < edge_limit; edge++ )
1697 seg = edge->first;
1721 seg->serif->edge &&
1722 seg->serif->edge != edge );
1724 if ( ( seg->link && seg->link->edge != NULL ) || is_serif )
1730 edge2 = edge->link;
1736 edge2 = edge->serif;
1745 edge_delta = edge->fpos - edge2->fpos;
1754 edge2 = seg2->edge;
1757 edge2 = seg2->edge;
1761 edge->serif = edge2;
1765 edge->link = edge2;
1770 } while ( seg != edge->first );
1773 edge->flags = AF_EDGE_NORMAL;
1776 edge->flags |= AF_EDGE_ROUND;
1779 /* set the edge's main direction */
1780 edge->dir = AF_DIR_NONE;
1783 edge->dir = (FT_Char)up_dir;
1786 edge->dir = (FT_Char)-up_dir;
1789 edge->dir = 0; /* both up and down! */
1796 if ( edge->serif && edge->link )
1797 edge->serif = 0;
1836 AF_Edge edge = axis->edges;
1837 AF_Edge edge_limit = edge + axis->num_edges;
1845 /* for each horizontal edge search the blue zone which is closest */
1846 for ( ; edge < edge_limit; edge++ )
1881 FT_BOOL( edge->dir == axis->major_dir );
1890 dist = edge->fpos - blue->ref.org;
1903 /* the edge is rounded, and whether the edge is over the */
1907 if ( edge->flags & AF_EDGE_ROUND &&
1911 FT_Bool is_under_ref = FT_BOOL( edge->fpos < blue->ref.org );
1916 dist = edge->fpos - blue->shoot.org;
1934 edge->blue_edge = best_blue;
1936 edge->flags |= AF_EDGE_NEUTRAL;
2235 /* Align one stem edge relative to the previous stem edge. */
2253 FT_TRACE5(( " LINK: edge %d (opos=%.2f) linked to %.2f,"
2260 /* Shift the coordinates of the `serif' edge by the same amount */
2261 /* as the corresponding `base' edge has been moved already. */
2295 AF_Edge edge;
2304 FT_TRACE5(( "latin %s edge hinting (style `%s')\n",
2313 for ( edge = edges; edge < edge_limit; edge++ )
2319 if ( edge->flags & AF_EDGE_DONE )
2323 edge2 = edge->link;
2334 if ( edge->blue_edge && edge2 && edge2->blue_edge )
2336 FT_Byte neutral = edge->flags & AF_EDGE_NEUTRAL;
2347 edge->blue_edge = NULL;
2348 edge->flags &= ~AF_EDGE_NEUTRAL;
2352 blue = edge->blue_edge;
2354 edge1 = edge;
2356 /* flip edges if the other edge is aligned to a blue zone */
2361 edge2 = edge;
2369 FT_TRACE5(( " BLUE_ANCHOR: edge %d (opos=%.2f) snapped to %.2f,"
2370 " was %.2f (anchor=edge %d)\n",
2372 edge1->pos / 64.0, edge - edges ));
2374 FT_TRACE5(( " BLUE: edge %d (opos=%.2f) snapped to %.2f,"
2396 anchor = edge;
2402 for ( edge = edges; edge < edge_limit; edge++ )
2407 if ( edge->flags & AF_EDGE_DONE )
2411 edge2 = edge->link;
2423 FT_TRACE5(( " ASSERTION FAILED for edge %d\n", edge2 - edges ));
2425 af_latin_align_linked_edge( hints, dim, edge2, edge );
2426 edge->flags |= AF_EDGE_DONE;
2442 org_len = edge2->opos - edge->opos;
2445 (AF_Edge_Flags)edge->flags,
2466 org_center = edge->opos + ( org_len >> 1 );
2482 edge->pos = cur_pos1 - cur_len / 2;
2483 edge2->pos = edge->pos + cur_len;
2486 edge->pos = FT_PIX_ROUND( edge->opos );
2488 anchor = edge;
2489 edge->flags |= AF_EDGE_DONE;
2491 FT_TRACE5(( " ANCHOR: edge %d (opos=%.2f) and %d (opos=%.2f)"
2493 edge - edges, edge->opos / 64.0,
2495 edge->pos / 64.0, edge2->pos / 64.0 ));
2497 af_latin_align_linked_edge( hints, dim, edge, edge2 );
2509 org_pos = anchor->pos + ( edge->opos - anchor->opos );
2510 org_len = edge2->opos - edge->opos;
2515 (AF_Edge_Flags)edge->flags,
2520 FT_TRACE5(( " ADJUST: edge %d (pos=%.2f) moved to %.2f\n",
2521 edge - edges, edge->pos / 64.0,
2524 edge->pos = edge2->pos - cur_len;
2558 edge->pos = cur_pos1 - cur_len / 2;
2561 FT_TRACE5(( " STEM: edge %d (opos=%.2f) linked to %d (opos=%.2f)"
2563 edge - edges, edge->opos / 64.0,
2565 edge->pos / 64.0, edge2->pos / 64.0 ));
2570 org_pos = anchor->pos + ( edge->opos - anchor->opos );
2571 org_len = edge2->opos - edge->opos;
2576 (AF_Edge_Flags)edge->flags,
2589 edge->pos = ( delta1 < delta2 ) ? cur_pos1 : cur_pos2;
2590 edge2->pos = edge->pos + cur_len;
2592 FT_TRACE5(( " STEM: edge %d (opos=%.2f) linked to %d (opos=%.2f)"
2594 edge - edges, edge->opos / 64.0,
2596 edge->pos / 64.0, edge2->pos / 64.0 ));
2603 edge->flags |= AF_EDGE_DONE;
2606 if ( edge > edges && edge->pos < edge[-1].pos )
2609 FT_TRACE5(( " BOUND: edge %d (pos=%.2f) moved to %.2f\n",
2610 edge - edges, edge->pos / 64.0, edge[-1].pos / 64.0 ));
2615 edge->pos = edge[-1].pos;
2688 for ( edge = edges; edge < edge_limit; edge++ )
2693 if ( edge->flags & AF_EDGE_DONE )
2698 if ( edge->serif )
2700 delta = edge->serif->opos - edge->opos;
2707 af_latin_align_serif_edge( hints, edge->serif, edge );
2708 FT_TRACE5(( " SERIF: edge %d (opos=%.2f) serif to %d (opos=%.2f)"
2710 edge - edges, edge->opos / 64.0,
2711 edge->serif - edges, edge->serif->opos / 64.0,
2712 edge->pos / 64.0 ));
2716 edge->pos = FT_PIX_ROUND( edge->opos );
2717 anchor = edge;
2718 FT_TRACE5(( " SERIF_ANCHOR: edge %d (opos=%.2f)"
2720 edge-edges, edge->opos / 64.0, edge->pos / 64.0 ));
2727 for ( before = edge - 1; before >= edges; before-- )
2731 for ( after = edge + 1; after < edge_limit; after++ )
2735 if ( before >= edges && before < edge &&
2736 after < edge_limit && after > edge )
2739 edge->pos = before->pos;
2741 edge->pos = before->pos +
2742 FT_MulDiv( edge->opos - before->opos,
2746 FT_TRACE5(( " SERIF_LINK1: edge %d (opos=%.2f) snapped to %.2f"
2748 edge - edges, edge->opos / 64.0,
2749 edge->pos / 64.0,
2754 edge->pos = anchor->pos +
2755 ( ( edge->opos - anchor->opos + 16 ) & ~31 );
2756 FT_TRACE5(( " SERIF_LINK2: edge %d (opos=%.2f)"
2758 edge - edges, edge->opos / 64.0, edge->pos / 64.0 ));
2765 edge->flags |= AF_EDGE_DONE;
2767 if ( edge > edges && edge->pos < edge[-1].pos )
2770 FT_TRACE5(( " BOUND: edge %d (pos=%.2f) moved to %.2f\n",
2771 edge - edges, edge->pos / 64.0, edge[-1].pos / 64.0 ));
2775 edge->pos = edge[-1].pos;
2778 if ( edge + 1 < edge_limit &&
2779 edge[1].flags & AF_EDGE_DONE &&
2780 edge->pos > edge[1].pos )
2783 FT_TRACE5(( " BOUND: edge %d (pos=%.2f) moved to %.2f\n",
2784 edge - edges, edge->pos / 64.0, edge[1].pos / 64.0 ));
2789 edge->pos = edge[1].pos;