Lines Matching refs:stroker

5 /*    FreeType path stroker (body).                                        */
794 FT_Stroker stroker = NULL;
802 if ( !FT_NEW( stroker ) )
804 stroker->library = library;
806 ft_stroke_border_init( &stroker->borders[0], memory );
807 ft_stroke_border_init( &stroker->borders[1], memory );
810 *astroker = stroker;
819 FT_Stroker_Set( FT_Stroker stroker,
825 stroker->radius = radius;
826 stroker->line_cap = line_cap;
827 stroker->line_join = line_join;
828 stroker->miter_limit = miter_limit;
831 if ( stroker->miter_limit < 0x10000 )
832 stroker->miter_limit = 0x10000;
836 stroker->line_join_saved = line_join;
838 FT_Stroker_Rewind( stroker );
845 FT_Stroker_Rewind( FT_Stroker stroker )
847 if ( stroker )
849 ft_stroke_border_reset( &stroker->borders[0] );
850 ft_stroke_border_reset( &stroker->borders[1] );
858 FT_Stroker_Done( FT_Stroker stroker )
860 if ( stroker )
862 FT_Memory memory = stroker->library->memory;
865 ft_stroke_border_done( &stroker->borders[0] );
866 ft_stroke_border_done( &stroker->borders[1] );
868 stroker->library = NULL;
869 FT_FREE( stroker );
876 ft_stroker_arcto( FT_Stroker stroker,
880 FT_Fixed radius = stroker->radius;
882 FT_StrokeBorder border = stroker->borders + side;
887 total = FT_Angle_Diff( stroker->angle_in, stroker->angle_out );
892 &stroker->center,
894 stroker->angle_in + rotate,
903 ft_stroker_cap( FT_Stroker stroker,
910 if ( stroker->line_cap == FT_STROKER_LINECAP_ROUND )
913 stroker->angle_in = angle;
914 stroker->angle_out = angle + FT_ANGLE_PI;
916 error = ft_stroker_arcto( stroker, side );
918 else if ( stroker->line_cap == FT_STROKER_LINECAP_SQUARE )
923 FT_Fixed radius = stroker->radius;
924 FT_StrokeBorder border = stroker->borders + side;
930 delta.x += stroker->center.x + delta2.x;
931 delta.y += stroker->center.y + delta2.y;
940 delta.x += delta2.x + stroker->center.x;
941 delta.y += delta2.y + stroker->center.y;
945 else if ( stroker->line_cap == FT_STROKER_LINECAP_BUTT )
950 FT_Fixed radius = stroker->radius;
951 FT_StrokeBorder border = stroker->borders + side;
956 delta.x += stroker->center.x;
957 delta.y += stroker->center.y;
965 delta.x += stroker->center.x;
966 delta.y += stroker->center.y;
978 ft_stroker_inside( FT_Stroker stroker,
982 FT_StrokeBorder border = stroker->borders + side;
992 theta = FT_Angle_Diff( stroker->angle_in, stroker->angle_out ) / 2;
1001 FT_Fixed min_length = ft_pos_abs( FT_MulFix( stroker->radius,
1005 intersect = FT_BOOL( stroker->line_length >= min_length &&
1011 FT_Vector_From_Polar( &delta, stroker->radius,
1012 stroker->angle_out + rotate );
1013 delta.x += stroker->center.x;
1014 delta.y += stroker->center.y;
1021 phi = stroker->angle_in + theta;
1025 length = FT_DivFix( stroker->radius, thcos );
1028 delta.x += stroker->center.x;
1029 delta.y += stroker->center.y;
1040 ft_stroker_outside( FT_Stroker stroker,
1044 FT_StrokeBorder border = stroker->borders + side;
1049 if ( stroker->line_join == FT_STROKER_LINEJOIN_ROUND )
1050 error = ft_stroker_arcto( stroker, side );
1054 FT_Fixed sigma = 0, radius = stroker->radius;
1063 FT_BOOL( stroker->line_join == FT_STROKER_LINEJOIN_BEVEL );
1066 FT_BOOL( stroker->line_join != FT_STROKER_LINEJOIN_MITER_VARIABLE );
1070 theta = FT_Angle_Diff( stroker->angle_in, stroker->angle_out );
1075 phi = stroker->angle_in;
1080 phi = stroker->angle_in + theta + rotate;
1084 sigma = FT_MulFix( stroker->miter_limit, thcos );
1107 stroker->angle_out + rotate );
1108 delta.x += stroker->center.x;
1109 delta.y += stroker->center.y;
1123 FT_MulFix( radius, stroker->miter_limit ),
1125 middle.x += stroker->center.x;
1126 middle.y += stroker->center.y;
1155 stroker->angle_out + rotate );
1157 delta.x += stroker->center.x;
1158 delta.y += stroker->center.y;
1170 length = FT_DivFix( stroker->radius, thcos );
1173 delta.x += stroker->center.x;
1174 delta.y += stroker->center.y;
1185 stroker->radius,
1186 stroker->angle_out + rotate );
1187 delta.x += stroker->center.x;
1188 delta.y += stroker->center.y;
1201 ft_stroker_process_corner( FT_Stroker stroker,
1209 turn = FT_Angle_Diff( stroker->angle_in, stroker->angle_out );
1223 error = ft_stroker_inside( stroker, inside_side, line_length );
1228 error = ft_stroker_outside( stroker, 1 - inside_side, line_length );
1238 ft_stroker_subpath_start( FT_Stroker stroker,
1248 FT_Vector_From_Polar( &delta, stroker->radius,
1251 point.x = stroker->center.x + delta.x;
1252 point.y = stroker->center.y + delta.y;
1254 border = stroker->borders;
1259 point.x = stroker->center.x - delta.x;
1260 point.y = stroker->center.y - delta.y;
1267 stroker->subpath_angle = start_angle;
1268 stroker->first_point = FALSE;
1269 stroker->subpath_line_length = line_length;
1279 FT_Stroker_LineTo( FT_Stroker stroker,
1290 delta.x = to->x - stroker->center.x;
1291 delta.y = to->y - stroker->center.y;
1301 FT_Vector_From_Polar( &delta, stroker->radius, angle + FT_ANGLE_PI2 );
1304 if ( stroker->first_point )
1309 error = ft_stroker_subpath_start( stroker, angle, line_length );
1316 stroker->angle_out = angle;
1317 error = ft_stroker_process_corner( stroker, line_length );
1323 for ( border = stroker->borders, side = 1; side >= 0; side--, border++ )
1340 stroker->angle_in = angle;
1341 stroker->center = *to;
1342 stroker->line_length = line_length;
1352 FT_Stroker_ConicTo( FT_Stroker stroker,
1365 if ( FT_IS_SMALL( stroker->center.x - control->x ) &&
1366 FT_IS_SMALL( stroker->center.y - control->y ) &&
1370 stroker->center = *to;
1377 arc[2] = stroker->center;
1385 angle_in = angle_out = stroker->angle_in;
1390 if ( stroker->first_point )
1391 stroker->angle_in = angle_in;
1403 if ( stroker->first_point )
1404 error = ft_stroker_subpath_start( stroker, angle_in, 0 );
1407 stroker->angle_out = angle_in;
1408 error = ft_stroker_process_corner( stroker, 0 );
1411 else if ( ft_pos_abs( FT_Angle_Diff( stroker->angle_in, angle_in ) ) >
1416 stroker->center = arc[2];
1417 stroker->angle_out = angle_in;
1418 stroker->line_join = FT_STROKER_LINEJOIN_ROUND;
1420 error = ft_stroker_process_corner( stroker, 0 );
1423 stroker->line_join = stroker->line_join_saved;
1441 length = FT_DivFix( stroker->radius, FT_Cos( theta ) );
1444 if ( stroker->handle_wide_strokes )
1447 for ( border = stroker->borders, side = 0;
1459 FT_Vector_From_Polar( &end, stroker->radius, angle_out + rotate );
1463 if ( stroker->handle_wide_strokes )
1534 stroker->angle_in = angle_out;
1537 stroker->center = *to;
1547 FT_Stroker_CubicTo( FT_Stroker stroker,
1561 if ( FT_IS_SMALL( stroker->center.x - control1->x ) &&
1562 FT_IS_SMALL( stroker->center.y - control1->y ) &&
1568 stroker->center = *to;
1576 arc[3] = stroker->center;
1584 angle_in = angle_out = angle_mid = stroker->angle_in;
1590 if ( stroker->first_point )
1591 stroker->angle_in = angle_in;
1603 if ( stroker->first_point )
1604 error = ft_stroker_subpath_start( stroker, angle_in, 0 );
1607 stroker->angle_out = angle_in;
1608 error = ft_stroker_process_corner( stroker, 0 );
1611 else if ( ft_pos_abs( FT_Angle_Diff( stroker->angle_in, angle_in ) ) >
1616 stroker->center = arc[3];
1617 stroker->angle_out = angle_in;
1618 stroker->line_join = FT_STROKER_LINEJOIN_ROUND;
1620 error = ft_stroker_process_corner( stroker, 0 );
1623 stroker->line_join = stroker->line_join_saved;
1643 length1 = FT_DivFix( stroker->radius, FT_Cos( theta1 ) );
1644 length2 = FT_DivFix( stroker->radius, FT_Cos( theta2 ) );
1647 if ( stroker->handle_wide_strokes )
1650 for ( border = stroker->borders, side = 0;
1666 FT_Vector_From_Polar( &end, stroker->radius, angle_out + rotate );
1670 if ( stroker->handle_wide_strokes )
1744 stroker->angle_in = angle_out;
1747 stroker->center = *to;
1757 FT_Stroker_BeginSubPath( FT_Stroker stroker,
1765 stroker->first_point = TRUE;
1766 stroker->center = *to;
1767 stroker->subpath_open = open;
1774 stroker->handle_wide_strokes =
1775 FT_BOOL( stroker->line_join != FT_STROKER_LINEJOIN_ROUND ||
1776 ( stroker->subpath_open &&
1777 stroker->line_cap == FT_STROKER_LINECAP_BUTT ) );
1780 stroker->subpath_start = *to;
1782 stroker->angle_in = 0;
1789 ft_stroker_add_reverse_left( FT_Stroker stroker,
1792 FT_StrokeBorder right = stroker->borders + 0;
1793 FT_StrokeBorder left = stroker->borders + 1;
1856 FT_Stroker_EndSubPath( FT_Stroker stroker )
1861 if ( stroker->subpath_open )
1863 FT_StrokeBorder right = stroker->borders;
1869 error = ft_stroker_cap( stroker, stroker->angle_in, 0 );
1874 error = ft_stroker_add_reverse_left( stroker, TRUE );
1879 stroker->center = stroker->subpath_start;
1880 error = ft_stroker_cap( stroker,
1881 stroker->subpath_angle + FT_ANGLE_PI, 0 );
1896 if ( stroker->center.x != stroker->subpath_start.x ||
1897 stroker->center.y != stroker->subpath_start.y )
1899 error = FT_Stroker_LineTo( stroker, &stroker->subpath_start );
1905 stroker->angle_out = stroker->subpath_angle;
1906 turn = FT_Angle_Diff( stroker->angle_in,
1907 stroker->angle_out );
1919 error = ft_stroker_inside( stroker,
1921 stroker->subpath_line_length );
1926 error = ft_stroker_outside( stroker,
1928 stroker->subpath_line_length );
1934 ft_stroke_border_close( stroker->borders + 0, FALSE );
1935 ft_stroke_border_close( stroker->borders + 1, TRUE );
1946 FT_Stroker_GetBorderCounts( FT_Stroker stroker,
1955 if ( !stroker || border > 1 )
1961 error = ft_stroke_border_get_counts( stroker->borders + border,
1977 FT_Stroker_GetCounts( FT_Stroker stroker,
1986 error = ft_stroke_border_get_counts( stroker->borders + 0,
1991 error = ft_stroke_border_get_counts( stroker->borders + 1,
2009 FT_Stroker_ExportBorder( FT_Stroker stroker,
2016 FT_StrokeBorder sborder = & stroker->borders[border];
2028 FT_Stroker_Export( FT_Stroker stroker,
2031 FT_Stroker_ExportBorder( stroker, FT_STROKER_BORDER_LEFT, outline );
2032 FT_Stroker_ExportBorder( stroker, FT_STROKER_BORDER_RIGHT, outline );
2043 FT_Stroker_ParseOutline( FT_Stroker stroker,
2062 if ( !outline || !stroker )
2065 FT_Stroker_Rewind( stroker );
2118 error = FT_Stroker_BeginSubPath( stroker, &v_start, opened );
2138 error = FT_Stroker_LineTo( stroker, &vec );
2163 error = FT_Stroker_ConicTo( stroker, &v_control, &vec );
2175 error = FT_Stroker_ConicTo( stroker, &v_control, &v_middle );
2183 error = FT_Stroker_ConicTo( stroker, &v_control, &v_start );
2208 error = FT_Stroker_CubicTo( stroker, &vec1, &vec2, &vec );
2214 error = FT_Stroker_CubicTo( stroker, &vec1, &vec2, &v_start );
2225 if ( !stroker->first_point )
2227 error = FT_Stroker_EndSubPath( stroker );
2258 FT_Stroker stroker,
2263 FT_Library library = stroker->library;
2292 error = FT_Stroker_ParseOutline( stroker, outline, FALSE );
2296 (void)FT_Stroker_GetCounts( stroker, &num_points, &num_contours );
2308 FT_Stroker_Export( stroker, outline );
2333 FT_Stroker stroker,
2339 FT_Library library = stroker->library;
2378 error = FT_Stroker_ParseOutline( stroker, outline, FALSE );
2382 (void)FT_Stroker_GetBorderCounts( stroker, border,
2397 FT_Stroker_ExportBorder( stroker, border, outline );