|
Lines 778-784
Link Here
|
| 778 |
contour++, first = last + 1 ) |
778 |
contour++, first = last + 1 ) |
| 779 |
{ |
779 |
{ |
| 780 |
FT_Vector* point; |
780 |
FT_Vector* point; |
| 781 |
|
781 |
FT_Int on_curve; |
|
|
782 |
FT_Int on_curve_count = 0; |
| 783 |
FT_Pos tmp_xmin = 32768L; |
| 784 |
FT_Vector* tmp_xmin_point = NULL; |
| 782 |
|
785 |
|
| 783 |
last = outline->points + *contour; |
786 |
last = outline->points + *contour; |
| 784 |
|
787 |
|
|
Lines 786-801
Link Here
|
| 786 |
if ( last < first + 2 ) |
789 |
if ( last < first + 2 ) |
| 787 |
continue; |
790 |
continue; |
| 788 |
|
791 |
|
| 789 |
for ( point = first; point <= last; point++ ) |
792 |
for ( point = first; point <= last; ++point ) |
| 790 |
{ |
793 |
{ |
| 791 |
if ( point->x < xmin ) |
794 |
/* Count on curve points, if there are less than 3 on curve points, |
|
|
795 |
then just bypass this contour. |
| 796 |
*/ |
| 797 |
on_curve = (outline->tags [point - outline->points] & 1); |
| 798 |
on_curve_count += on_curve; |
| 799 |
|
| 800 |
if ( point->x < tmp_xmin && on_curve) |
| 792 |
{ |
801 |
{ |
| 793 |
xmin = point->x; |
802 |
tmp_xmin = point->x; |
| 794 |
xmin_point = point; |
803 |
tmp_xmin_point = point; |
| 795 |
xmin_first = first; |
|
|
| 796 |
xmin_last = last; |
| 797 |
} |
804 |
} |
| 798 |
} |
805 |
} |
|
|
806 |
|
| 807 |
if (on_curve_count > 2 && tmp_xmin < xmin) |
| 808 |
{ |
| 809 |
xmin = tmp_xmin; |
| 810 |
xmin_point = tmp_xmin_point; |
| 811 |
xmin_first = first; |
| 812 |
xmin_last = last; |
| 813 |
} |
| 799 |
} |
814 |
} |
| 800 |
|
815 |
|
| 801 |
if ( !xmin_point ) |
816 |
if ( !xmin_point ) |
|
Lines 804-809
Link Here
|
| 804 |
prev = ( xmin_point == xmin_first ) ? xmin_last : xmin_point - 1; |
819 |
prev = ( xmin_point == xmin_first ) ? xmin_last : xmin_point - 1; |
| 805 |
next = ( xmin_point == xmin_last ) ? xmin_first : xmin_point + 1; |
820 |
next = ( xmin_point == xmin_last ) ? xmin_first : xmin_point + 1; |
| 806 |
|
821 |
|
|
|
822 |
/* Skip off curve points */ |
| 823 |
while ((outline->tags [prev - outline->points] & 1) == 0) |
| 824 |
{ |
| 825 |
if (prev == xmin_first) prev = xmin_last; |
| 826 |
else --prev; |
| 827 |
} |
| 828 |
|
| 829 |
while ((outline->tags [next - outline->points] & 1) == 0) |
| 830 |
{ |
| 831 |
if (next == xmin_last) next = xmin_first; |
| 832 |
else ++next; |
| 833 |
} |
| 834 |
|
| 807 |
if ( FT_Atan2( prev->x - xmin_point->x, prev->y - xmin_point->y ) > |
835 |
if ( FT_Atan2( prev->x - xmin_point->x, prev->y - xmin_point->y ) > |
| 808 |
FT_Atan2( next->x - xmin_point->x, next->y - xmin_point->y ) ) |
836 |
FT_Atan2( next->x - xmin_point->x, next->y - xmin_point->y ) ) |
| 809 |
return FT_ORIENTATION_POSTSCRIPT; |
837 |
return FT_ORIENTATION_POSTSCRIPT; |