|
|
|
@ -1634,27 +1634,24 @@ |
|
|
|
|
t1_builder_close_contour( T1_Builder builder ) |
|
|
|
|
{ |
|
|
|
|
FT_Outline* outline = builder->current; |
|
|
|
|
FT_Int first; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ( !outline ) |
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
/* XXXX: We must not include the last point in the path if it */ |
|
|
|
|
/* is located on the first point. */ |
|
|
|
|
first = outline->n_contours <= 1 |
|
|
|
|
? 0 : outline->contours[outline->n_contours - 2] + 1; |
|
|
|
|
|
|
|
|
|
/* We must not include the last point in the path if it */ |
|
|
|
|
/* is located on the first point. */ |
|
|
|
|
if ( outline->n_points > 1 ) |
|
|
|
|
{ |
|
|
|
|
FT_Int first = 0; |
|
|
|
|
FT_Vector* p1 = outline->points + first; |
|
|
|
|
FT_Vector* p2 = outline->points + outline->n_points - 1; |
|
|
|
|
FT_Byte* control = (FT_Byte*)outline->tags + outline->n_points - 1; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ( outline->n_contours > 1 ) |
|
|
|
|
{ |
|
|
|
|
first = outline->contours[outline->n_contours - 2] + 1; |
|
|
|
|
p1 = outline->points + first; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* `delete' last point only if it coincides with the first */ |
|
|
|
|
/* point and it is not a control point (which can happen). */ |
|
|
|
|
if ( p1->x == p2->x && p1->y == p2->y ) |
|
|
|
@ -1663,8 +1660,18 @@ |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if ( outline->n_contours > 0 ) |
|
|
|
|
outline->contours[outline->n_contours - 1] = |
|
|
|
|
(short)( outline->n_points - 1 ); |
|
|
|
|
{ |
|
|
|
|
/* Don't add contours only consisting of one point, i.e., */ |
|
|
|
|
/* check whether begin point and last point are the same. */ |
|
|
|
|
if ( first == outline->n_points - 1 ) |
|
|
|
|
{ |
|
|
|
|
outline->n_contours--; |
|
|
|
|
outline->n_points--; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
outline->contours[outline->n_contours - 1] = |
|
|
|
|
(short)( outline->n_points - 1 ); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|