OLD | NEW |
1 /***************************************************************************/ | 1 /***************************************************************************/ |
2 /* */ | 2 /* */ |
3 /* cf2hints.c */ | 3 /* cf2hints.c */ |
4 /* */ | 4 /* */ |
5 /* Adobe's code for handling CFF hints (body). */ | 5 /* Adobe's code for handling CFF hints (body). */ |
6 /* */ | 6 /* */ |
7 /* Copyright 2007-2013 Adobe Systems Incorporated. */ | 7 /* Copyright 2007-2013 Adobe Systems Incorporated. */ |
8 /* */ | 8 /* */ |
9 /* This software, and all works of authorship, whether in source or */ | 9 /* This software, and all works of authorship, whether in source or */ |
10 /* object code form as indicated by the copyright notice(s) included */ | 10 /* object code form as indicated by the copyright notice(s) included */ |
(...skipping 1567 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1578 /* construct offset points */ | 1578 /* construct offset points */ |
1579 P0.x = glyphpath->currentCS.x + xOffset; | 1579 P0.x = glyphpath->currentCS.x + xOffset; |
1580 P0.y = glyphpath->currentCS.y + yOffset; | 1580 P0.y = glyphpath->currentCS.y + yOffset; |
1581 P1.x = x + xOffset; | 1581 P1.x = x + xOffset; |
1582 P1.y = y + yOffset; | 1582 P1.y = y + yOffset; |
1583 | 1583 |
1584 if ( glyphpath->moveIsPending ) | 1584 if ( glyphpath->moveIsPending ) |
1585 { | 1585 { |
1586 /* emit offset 1st point as MoveTo */ | 1586 /* emit offset 1st point as MoveTo */ |
1587 cf2_glyphpath_pushMove( glyphpath, P0 ); | 1587 cf2_glyphpath_pushMove( glyphpath, P0 ); |
| 1588 if (glyphpath->callbacks && glyphpath->callbacks->error && *glyphpath-
>callbacks->error) return; |
1588 | 1589 |
1589 glyphpath->moveIsPending = FALSE; /* adjust state machine */ | 1590 glyphpath->moveIsPending = FALSE; /* adjust state machine */ |
1590 glyphpath->pathIsOpen = TRUE; | 1591 glyphpath->pathIsOpen = TRUE; |
1591 | 1592 |
1592 glyphpath->offsetStart1 = P1; /* record second point */ | 1593 glyphpath->offsetStart1 = P1; /* record second point */ |
1593 } | 1594 } |
1594 | 1595 |
1595 if ( glyphpath->elemIsQueued ) | 1596 if ( glyphpath->elemIsQueued ) |
1596 { | 1597 { |
1597 FT_ASSERT( cf2_hintmap_isValid( &glyphpath->hintMap ) ); | 1598 FT_ASSERT( cf2_hintmap_isValid( &glyphpath->hintMap ) ); |
1598 | 1599 |
1599 cf2_glyphpath_pushPrevElem( glyphpath, | 1600 cf2_glyphpath_pushPrevElem( glyphpath, |
1600 &glyphpath->hintMap, | 1601 &glyphpath->hintMap, |
1601 &P0, | 1602 &P0, |
1602 P1, | 1603 P1, |
1603 FALSE ); | 1604 FALSE ); |
| 1605 if (glyphpath->callbacks && glyphpath->callbacks->error && *glyphpath-
>callbacks->error) return; |
1604 } | 1606 } |
1605 | 1607 |
1606 /* queue the current element with offset points */ | 1608 /* queue the current element with offset points */ |
1607 glyphpath->elemIsQueued = TRUE; | 1609 glyphpath->elemIsQueued = TRUE; |
1608 glyphpath->prevElemOp = CF2_PathOpLineTo; | 1610 glyphpath->prevElemOp = CF2_PathOpLineTo; |
1609 glyphpath->prevElemP0 = P0; | 1611 glyphpath->prevElemP0 = P0; |
1610 glyphpath->prevElemP1 = P1; | 1612 glyphpath->prevElemP1 = P1; |
1611 | 1613 |
1612 /* update current map */ | 1614 /* update current map */ |
1613 if ( cf2_hintmask_isNew( glyphpath->hintMask ) ) | 1615 if ( cf2_hintmask_isNew( glyphpath->hintMask ) ) |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1664 /* note: preserve angle of final segment by using offset3 at both ends */ | 1666 /* note: preserve angle of final segment by using offset3 at both ends */ |
1665 P2.x = x2 + xOffset3; | 1667 P2.x = x2 + xOffset3; |
1666 P2.y = y2 + yOffset3; | 1668 P2.y = y2 + yOffset3; |
1667 P3.x = x3 + xOffset3; | 1669 P3.x = x3 + xOffset3; |
1668 P3.y = y3 + yOffset3; | 1670 P3.y = y3 + yOffset3; |
1669 | 1671 |
1670 if ( glyphpath->moveIsPending ) | 1672 if ( glyphpath->moveIsPending ) |
1671 { | 1673 { |
1672 /* emit offset 1st point as MoveTo */ | 1674 /* emit offset 1st point as MoveTo */ |
1673 cf2_glyphpath_pushMove( glyphpath, P0 ); | 1675 cf2_glyphpath_pushMove( glyphpath, P0 ); |
| 1676 if (glyphpath->callbacks && glyphpath->callbacks->error && *glyphpath-
>callbacks->error) return; |
1674 | 1677 |
1675 glyphpath->moveIsPending = FALSE; | 1678 glyphpath->moveIsPending = FALSE; |
1676 glyphpath->pathIsOpen = TRUE; | 1679 glyphpath->pathIsOpen = TRUE; |
1677 | 1680 |
1678 glyphpath->offsetStart1 = P1; /* record second point */ | 1681 glyphpath->offsetStart1 = P1; /* record second point */ |
1679 } | 1682 } |
1680 | 1683 |
1681 if ( glyphpath->elemIsQueued ) | 1684 if ( glyphpath->elemIsQueued ) |
1682 { | 1685 { |
1683 FT_ASSERT( cf2_hintmap_isValid( &glyphpath->hintMap ) ); | 1686 FT_ASSERT( cf2_hintmap_isValid( &glyphpath->hintMap ) ); |
1684 | 1687 |
1685 cf2_glyphpath_pushPrevElem( glyphpath, | 1688 cf2_glyphpath_pushPrevElem( glyphpath, |
1686 &glyphpath->hintMap, | 1689 &glyphpath->hintMap, |
1687 &P0, | 1690 &P0, |
1688 P1, | 1691 P1, |
1689 FALSE ); | 1692 FALSE ); |
| 1693 if (glyphpath->callbacks && glyphpath->callbacks->error && *glyphpath-
>callbacks->error) return; |
1690 } | 1694 } |
1691 | 1695 |
1692 /* queue the current element with offset points */ | 1696 /* queue the current element with offset points */ |
1693 glyphpath->elemIsQueued = TRUE; | 1697 glyphpath->elemIsQueued = TRUE; |
1694 glyphpath->prevElemOp = CF2_PathOpCubeTo; | 1698 glyphpath->prevElemOp = CF2_PathOpCubeTo; |
1695 glyphpath->prevElemP0 = P0; | 1699 glyphpath->prevElemP0 = P0; |
1696 glyphpath->prevElemP1 = P1; | 1700 glyphpath->prevElemP1 = P1; |
1697 glyphpath->prevElemP2 = P2; | 1701 glyphpath->prevElemP2 = P2; |
1698 glyphpath->prevElemP3 = P3; | 1702 glyphpath->prevElemP3 = P3; |
1699 | 1703 |
(...skipping 16 matching lines...) Expand all Loading... |
1716 { | 1720 { |
1717 if ( glyphpath->pathIsOpen ) | 1721 if ( glyphpath->pathIsOpen ) |
1718 { | 1722 { |
1719 FT_ASSERT( cf2_hintmap_isValid( &glyphpath->firstHintMap ) ); | 1723 FT_ASSERT( cf2_hintmap_isValid( &glyphpath->firstHintMap ) ); |
1720 | 1724 |
1721 /* since we need to apply an offset to the implicit lineto, we make */ | 1725 /* since we need to apply an offset to the implicit lineto, we make */ |
1722 /* it explicit here */ | 1726 /* it explicit here */ |
1723 cf2_glyphpath_lineTo( glyphpath, | 1727 cf2_glyphpath_lineTo( glyphpath, |
1724 glyphpath->start.x, | 1728 glyphpath->start.x, |
1725 glyphpath->start.y ); | 1729 glyphpath->start.y ); |
| 1730 if (glyphpath->callbacks && glyphpath->callbacks->error && *glyphpath-
>callbacks->error) return; |
1726 | 1731 |
1727 /* Draw previous element (the explicit LineTo we just created, */ | 1732 /* Draw previous element (the explicit LineTo we just created, */ |
1728 /* above) and connect it to the start point, but with the offset we */ | 1733 /* above) and connect it to the start point, but with the offset we */ |
1729 /* saved from the first element. */ | 1734 /* saved from the first element. */ |
1730 /* Use the saved HintMap, too. */ | 1735 /* Use the saved HintMap, too. */ |
1731 FT_ASSERT( glyphpath->elemIsQueued ); | 1736 FT_ASSERT( glyphpath->elemIsQueued ); |
1732 | 1737 |
1733 cf2_glyphpath_pushPrevElem( glyphpath, | 1738 cf2_glyphpath_pushPrevElem( glyphpath, |
1734 &glyphpath->firstHintMap, | 1739 &glyphpath->firstHintMap, |
1735 &glyphpath->offsetStart0, | 1740 &glyphpath->offsetStart0, |
1736 glyphpath->offsetStart1, | 1741 glyphpath->offsetStart1, |
1737 TRUE ); | 1742 TRUE ); |
1738 | 1743 |
1739 /* reset state machine */ | 1744 /* reset state machine */ |
1740 glyphpath->moveIsPending = TRUE; | 1745 glyphpath->moveIsPending = TRUE; |
1741 glyphpath->pathIsOpen = FALSE; | 1746 glyphpath->pathIsOpen = FALSE; |
1742 glyphpath->elemIsQueued = FALSE; | 1747 glyphpath->elemIsQueued = FALSE; |
1743 } | 1748 } |
1744 } | 1749 } |
1745 | 1750 |
1746 | 1751 |
1747 /* END */ | 1752 /* END */ |
OLD | NEW |