|
1 /***************************************************************************/ |
|
2 /* */ |
|
3 /* ftstroke.h */ |
|
4 /* */ |
|
5 /* FreeType path stroker (specification). */ |
|
6 /* */ |
|
7 /* Copyright 2002-2006, 2008, 2009, 2011-2012 by */ |
|
8 /* David Turner, Robert Wilhelm, and Werner Lemberg. */ |
|
9 /* */ |
|
10 /* This file is part of the FreeType project, and may only be used, */ |
|
11 /* modified, and distributed under the terms of the FreeType project */ |
|
12 /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ |
|
13 /* this file you indicate that you have read the license and */ |
|
14 /* understand and accept it fully. */ |
|
15 /* */ |
|
16 /***************************************************************************/ |
|
17 |
|
18 |
|
19 #ifndef __FT_STROKE_H__ |
|
20 #define __FT_STROKE_H__ |
|
21 |
|
22 #include <ft2build.h> |
|
23 #include FT_OUTLINE_H |
|
24 #include FT_GLYPH_H |
|
25 |
|
26 |
|
27 FT_BEGIN_HEADER |
|
28 |
|
29 |
|
30 /************************************************************************ |
|
31 * |
|
32 * @section: |
|
33 * glyph_stroker |
|
34 * |
|
35 * @title: |
|
36 * Glyph Stroker |
|
37 * |
|
38 * @abstract: |
|
39 * Generating bordered and stroked glyphs. |
|
40 * |
|
41 * @description: |
|
42 * This component generates stroked outlines of a given vectorial |
|
43 * glyph. It also allows you to retrieve the `outside' and/or the |
|
44 * `inside' borders of the stroke. |
|
45 * |
|
46 * This can be useful to generate `bordered' glyph, i.e., glyphs |
|
47 * displayed with a coloured (and anti-aliased) border around their |
|
48 * shape. |
|
49 */ |
|
50 |
|
51 |
|
52 /************************************************************** |
|
53 * |
|
54 * @type: |
|
55 * FT_Stroker |
|
56 * |
|
57 * @description: |
|
58 * Opaque handler to a path stroker object. |
|
59 */ |
|
60 typedef struct FT_StrokerRec_* FT_Stroker; |
|
61 |
|
62 |
|
63 /************************************************************** |
|
64 * |
|
65 * @enum: |
|
66 * FT_Stroker_LineJoin |
|
67 * |
|
68 * @description: |
|
69 * These values determine how two joining lines are rendered |
|
70 * in a stroker. |
|
71 * |
|
72 * @values: |
|
73 * FT_STROKER_LINEJOIN_ROUND :: |
|
74 * Used to render rounded line joins. Circular arcs are used |
|
75 * to join two lines smoothly. |
|
76 * |
|
77 * FT_STROKER_LINEJOIN_BEVEL :: |
|
78 * Used to render beveled line joins. The outer corner of |
|
79 * the joined lines is filled by enclosing the triangular |
|
80 * region of the corner with a straight line between the |
|
81 * outer corners of each stroke. |
|
82 * |
|
83 * FT_STROKER_LINEJOIN_MITER_FIXED :: |
|
84 * Used to render mitered line joins, with fixed bevels if the |
|
85 * miter limit is exceeded. The outer edges of the strokes |
|
86 * for the two segments are extended until they meet at an |
|
87 * angle. If the segments meet at too sharp an angle (such |
|
88 * that the miter would extend from the intersection of the |
|
89 * segments a distance greater than the product of the miter |
|
90 * limit value and the border radius), then a bevel join (see |
|
91 * above) is used instead. This prevents long spikes being |
|
92 * created. FT_STROKER_LINEJOIN_MITER_FIXED generates a miter |
|
93 * line join as used in PostScript and PDF. |
|
94 * |
|
95 * FT_STROKER_LINEJOIN_MITER_VARIABLE :: |
|
96 * FT_STROKER_LINEJOIN_MITER :: |
|
97 * Used to render mitered line joins, with variable bevels if |
|
98 * the miter limit is exceeded. The intersection of the |
|
99 * strokes is clipped at a line perpendicular to the bisector |
|
100 * of the angle between the strokes, at the distance from the |
|
101 * intersection of the segments equal to the product of the |
|
102 * miter limit value and the border radius. This prevents |
|
103 * long spikes being created. |
|
104 * FT_STROKER_LINEJOIN_MITER_VARIABLE generates a mitered line |
|
105 * join as used in XPS. FT_STROKER_LINEJOIN_MITER is an alias |
|
106 * for FT_STROKER_LINEJOIN_MITER_VARIABLE, retained for |
|
107 * backwards compatibility. |
|
108 */ |
|
109 typedef enum FT_Stroker_LineJoin_ |
|
110 { |
|
111 FT_STROKER_LINEJOIN_ROUND = 0, |
|
112 FT_STROKER_LINEJOIN_BEVEL = 1, |
|
113 FT_STROKER_LINEJOIN_MITER_VARIABLE = 2, |
|
114 FT_STROKER_LINEJOIN_MITER = FT_STROKER_LINEJOIN_MITER_VARIABLE, |
|
115 FT_STROKER_LINEJOIN_MITER_FIXED = 3 |
|
116 |
|
117 } FT_Stroker_LineJoin; |
|
118 |
|
119 |
|
120 /************************************************************** |
|
121 * |
|
122 * @enum: |
|
123 * FT_Stroker_LineCap |
|
124 * |
|
125 * @description: |
|
126 * These values determine how the end of opened sub-paths are |
|
127 * rendered in a stroke. |
|
128 * |
|
129 * @values: |
|
130 * FT_STROKER_LINECAP_BUTT :: |
|
131 * The end of lines is rendered as a full stop on the last |
|
132 * point itself. |
|
133 * |
|
134 * FT_STROKER_LINECAP_ROUND :: |
|
135 * The end of lines is rendered as a half-circle around the |
|
136 * last point. |
|
137 * |
|
138 * FT_STROKER_LINECAP_SQUARE :: |
|
139 * The end of lines is rendered as a square around the |
|
140 * last point. |
|
141 */ |
|
142 typedef enum FT_Stroker_LineCap_ |
|
143 { |
|
144 FT_STROKER_LINECAP_BUTT = 0, |
|
145 FT_STROKER_LINECAP_ROUND, |
|
146 FT_STROKER_LINECAP_SQUARE |
|
147 |
|
148 } FT_Stroker_LineCap; |
|
149 |
|
150 |
|
151 /************************************************************** |
|
152 * |
|
153 * @enum: |
|
154 * FT_StrokerBorder |
|
155 * |
|
156 * @description: |
|
157 * These values are used to select a given stroke border |
|
158 * in @FT_Stroker_GetBorderCounts and @FT_Stroker_ExportBorder. |
|
159 * |
|
160 * @values: |
|
161 * FT_STROKER_BORDER_LEFT :: |
|
162 * Select the left border, relative to the drawing direction. |
|
163 * |
|
164 * FT_STROKER_BORDER_RIGHT :: |
|
165 * Select the right border, relative to the drawing direction. |
|
166 * |
|
167 * @note: |
|
168 * Applications are generally interested in the `inside' and `outside' |
|
169 * borders. However, there is no direct mapping between these and the |
|
170 * `left' and `right' ones, since this really depends on the glyph's |
|
171 * drawing orientation, which varies between font formats. |
|
172 * |
|
173 * You can however use @FT_Outline_GetInsideBorder and |
|
174 * @FT_Outline_GetOutsideBorder to get these. |
|
175 */ |
|
176 typedef enum FT_StrokerBorder_ |
|
177 { |
|
178 FT_STROKER_BORDER_LEFT = 0, |
|
179 FT_STROKER_BORDER_RIGHT |
|
180 |
|
181 } FT_StrokerBorder; |
|
182 |
|
183 |
|
184 /************************************************************** |
|
185 * |
|
186 * @function: |
|
187 * FT_Outline_GetInsideBorder |
|
188 * |
|
189 * @description: |
|
190 * Retrieve the @FT_StrokerBorder value corresponding to the |
|
191 * `inside' borders of a given outline. |
|
192 * |
|
193 * @input: |
|
194 * outline :: |
|
195 * The source outline handle. |
|
196 * |
|
197 * @return: |
|
198 * The border index. @FT_STROKER_BORDER_RIGHT for empty or invalid |
|
199 * outlines. |
|
200 */ |
|
201 FT_EXPORT( FT_StrokerBorder ) |
|
202 FT_Outline_GetInsideBorder( FT_Outline* outline ); |
|
203 |
|
204 |
|
205 /************************************************************** |
|
206 * |
|
207 * @function: |
|
208 * FT_Outline_GetOutsideBorder |
|
209 * |
|
210 * @description: |
|
211 * Retrieve the @FT_StrokerBorder value corresponding to the |
|
212 * `outside' borders of a given outline. |
|
213 * |
|
214 * @input: |
|
215 * outline :: |
|
216 * The source outline handle. |
|
217 * |
|
218 * @return: |
|
219 * The border index. @FT_STROKER_BORDER_LEFT for empty or invalid |
|
220 * outlines. |
|
221 */ |
|
222 FT_EXPORT( FT_StrokerBorder ) |
|
223 FT_Outline_GetOutsideBorder( FT_Outline* outline ); |
|
224 |
|
225 |
|
226 /************************************************************** |
|
227 * |
|
228 * @function: |
|
229 * FT_Stroker_New |
|
230 * |
|
231 * @description: |
|
232 * Create a new stroker object. |
|
233 * |
|
234 * @input: |
|
235 * library :: |
|
236 * FreeType library handle. |
|
237 * |
|
238 * @output: |
|
239 * astroker :: |
|
240 * A new stroker object handle. NULL in case of error. |
|
241 * |
|
242 * @return: |
|
243 * FreeType error code. 0~means success. |
|
244 */ |
|
245 FT_EXPORT( FT_Error ) |
|
246 FT_Stroker_New( FT_Library library, |
|
247 FT_Stroker *astroker ); |
|
248 |
|
249 |
|
250 /************************************************************** |
|
251 * |
|
252 * @function: |
|
253 * FT_Stroker_Set |
|
254 * |
|
255 * @description: |
|
256 * Reset a stroker object's attributes. |
|
257 * |
|
258 * @input: |
|
259 * stroker :: |
|
260 * The target stroker handle. |
|
261 * |
|
262 * radius :: |
|
263 * The border radius. |
|
264 * |
|
265 * line_cap :: |
|
266 * The line cap style. |
|
267 * |
|
268 * line_join :: |
|
269 * The line join style. |
|
270 * |
|
271 * miter_limit :: |
|
272 * The miter limit for the FT_STROKER_LINEJOIN_MITER_FIXED and |
|
273 * FT_STROKER_LINEJOIN_MITER_VARIABLE line join styles, |
|
274 * expressed as 16.16 fixed-point value. |
|
275 * |
|
276 * @note: |
|
277 * The radius is expressed in the same units as the outline |
|
278 * coordinates. |
|
279 */ |
|
280 FT_EXPORT( void ) |
|
281 FT_Stroker_Set( FT_Stroker stroker, |
|
282 FT_Fixed radius, |
|
283 FT_Stroker_LineCap line_cap, |
|
284 FT_Stroker_LineJoin line_join, |
|
285 FT_Fixed miter_limit ); |
|
286 |
|
287 |
|
288 /************************************************************** |
|
289 * |
|
290 * @function: |
|
291 * FT_Stroker_Rewind |
|
292 * |
|
293 * @description: |
|
294 * Reset a stroker object without changing its attributes. |
|
295 * You should call this function before beginning a new |
|
296 * series of calls to @FT_Stroker_BeginSubPath or |
|
297 * @FT_Stroker_EndSubPath. |
|
298 * |
|
299 * @input: |
|
300 * stroker :: |
|
301 * The target stroker handle. |
|
302 */ |
|
303 FT_EXPORT( void ) |
|
304 FT_Stroker_Rewind( FT_Stroker stroker ); |
|
305 |
|
306 |
|
307 /************************************************************** |
|
308 * |
|
309 * @function: |
|
310 * FT_Stroker_ParseOutline |
|
311 * |
|
312 * @description: |
|
313 * A convenience function used to parse a whole outline with |
|
314 * the stroker. The resulting outline(s) can be retrieved |
|
315 * later by functions like @FT_Stroker_GetCounts and @FT_Stroker_Export. |
|
316 * |
|
317 * @input: |
|
318 * stroker :: |
|
319 * The target stroker handle. |
|
320 * |
|
321 * outline :: |
|
322 * The source outline. |
|
323 * |
|
324 * opened :: |
|
325 * A boolean. If~1, the outline is treated as an open path instead |
|
326 * of a closed one. |
|
327 * |
|
328 * @return: |
|
329 * FreeType error code. 0~means success. |
|
330 * |
|
331 * @note: |
|
332 * If `opened' is~0 (the default), the outline is treated as a closed |
|
333 * path, and the stroker generates two distinct `border' outlines. |
|
334 * |
|
335 * If `opened' is~1, the outline is processed as an open path, and the |
|
336 * stroker generates a single `stroke' outline. |
|
337 * |
|
338 * This function calls @FT_Stroker_Rewind automatically. |
|
339 */ |
|
340 FT_EXPORT( FT_Error ) |
|
341 FT_Stroker_ParseOutline( FT_Stroker stroker, |
|
342 FT_Outline* outline, |
|
343 FT_Bool opened ); |
|
344 |
|
345 |
|
346 /************************************************************** |
|
347 * |
|
348 * @function: |
|
349 * FT_Stroker_BeginSubPath |
|
350 * |
|
351 * @description: |
|
352 * Start a new sub-path in the stroker. |
|
353 * |
|
354 * @input: |
|
355 * stroker :: |
|
356 * The target stroker handle. |
|
357 * |
|
358 * to :: |
|
359 * A pointer to the start vector. |
|
360 * |
|
361 * open :: |
|
362 * A boolean. If~1, the sub-path is treated as an open one. |
|
363 * |
|
364 * @return: |
|
365 * FreeType error code. 0~means success. |
|
366 * |
|
367 * @note: |
|
368 * This function is useful when you need to stroke a path that is |
|
369 * not stored as an @FT_Outline object. |
|
370 */ |
|
371 FT_EXPORT( FT_Error ) |
|
372 FT_Stroker_BeginSubPath( FT_Stroker stroker, |
|
373 FT_Vector* to, |
|
374 FT_Bool open ); |
|
375 |
|
376 |
|
377 /************************************************************** |
|
378 * |
|
379 * @function: |
|
380 * FT_Stroker_EndSubPath |
|
381 * |
|
382 * @description: |
|
383 * Close the current sub-path in the stroker. |
|
384 * |
|
385 * @input: |
|
386 * stroker :: |
|
387 * The target stroker handle. |
|
388 * |
|
389 * @return: |
|
390 * FreeType error code. 0~means success. |
|
391 * |
|
392 * @note: |
|
393 * You should call this function after @FT_Stroker_BeginSubPath. |
|
394 * If the subpath was not `opened', this function `draws' a |
|
395 * single line segment to the start position when needed. |
|
396 */ |
|
397 FT_EXPORT( FT_Error ) |
|
398 FT_Stroker_EndSubPath( FT_Stroker stroker ); |
|
399 |
|
400 |
|
401 /************************************************************** |
|
402 * |
|
403 * @function: |
|
404 * FT_Stroker_LineTo |
|
405 * |
|
406 * @description: |
|
407 * `Draw' a single line segment in the stroker's current sub-path, |
|
408 * from the last position. |
|
409 * |
|
410 * @input: |
|
411 * stroker :: |
|
412 * The target stroker handle. |
|
413 * |
|
414 * to :: |
|
415 * A pointer to the destination point. |
|
416 * |
|
417 * @return: |
|
418 * FreeType error code. 0~means success. |
|
419 * |
|
420 * @note: |
|
421 * You should call this function between @FT_Stroker_BeginSubPath and |
|
422 * @FT_Stroker_EndSubPath. |
|
423 */ |
|
424 FT_EXPORT( FT_Error ) |
|
425 FT_Stroker_LineTo( FT_Stroker stroker, |
|
426 FT_Vector* to ); |
|
427 |
|
428 |
|
429 /************************************************************** |
|
430 * |
|
431 * @function: |
|
432 * FT_Stroker_ConicTo |
|
433 * |
|
434 * @description: |
|
435 * `Draw' a single quadratic Bézier in the stroker's current sub-path, |
|
436 * from the last position. |
|
437 * |
|
438 * @input: |
|
439 * stroker :: |
|
440 * The target stroker handle. |
|
441 * |
|
442 * control :: |
|
443 * A pointer to a Bézier control point. |
|
444 * |
|
445 * to :: |
|
446 * A pointer to the destination point. |
|
447 * |
|
448 * @return: |
|
449 * FreeType error code. 0~means success. |
|
450 * |
|
451 * @note: |
|
452 * You should call this function between @FT_Stroker_BeginSubPath and |
|
453 * @FT_Stroker_EndSubPath. |
|
454 */ |
|
455 FT_EXPORT( FT_Error ) |
|
456 FT_Stroker_ConicTo( FT_Stroker stroker, |
|
457 FT_Vector* control, |
|
458 FT_Vector* to ); |
|
459 |
|
460 |
|
461 /************************************************************** |
|
462 * |
|
463 * @function: |
|
464 * FT_Stroker_CubicTo |
|
465 * |
|
466 * @description: |
|
467 * `Draw' a single cubic Bézier in the stroker's current sub-path, |
|
468 * from the last position. |
|
469 * |
|
470 * @input: |
|
471 * stroker :: |
|
472 * The target stroker handle. |
|
473 * |
|
474 * control1 :: |
|
475 * A pointer to the first Bézier control point. |
|
476 * |
|
477 * control2 :: |
|
478 * A pointer to second Bézier control point. |
|
479 * |
|
480 * to :: |
|
481 * A pointer to the destination point. |
|
482 * |
|
483 * @return: |
|
484 * FreeType error code. 0~means success. |
|
485 * |
|
486 * @note: |
|
487 * You should call this function between @FT_Stroker_BeginSubPath and |
|
488 * @FT_Stroker_EndSubPath. |
|
489 */ |
|
490 FT_EXPORT( FT_Error ) |
|
491 FT_Stroker_CubicTo( FT_Stroker stroker, |
|
492 FT_Vector* control1, |
|
493 FT_Vector* control2, |
|
494 FT_Vector* to ); |
|
495 |
|
496 |
|
497 /************************************************************** |
|
498 * |
|
499 * @function: |
|
500 * FT_Stroker_GetBorderCounts |
|
501 * |
|
502 * @description: |
|
503 * Call this function once you have finished parsing your paths |
|
504 * with the stroker. It returns the number of points and |
|
505 * contours necessary to export one of the `border' or `stroke' |
|
506 * outlines generated by the stroker. |
|
507 * |
|
508 * @input: |
|
509 * stroker :: |
|
510 * The target stroker handle. |
|
511 * |
|
512 * border :: |
|
513 * The border index. |
|
514 * |
|
515 * @output: |
|
516 * anum_points :: |
|
517 * The number of points. |
|
518 * |
|
519 * anum_contours :: |
|
520 * The number of contours. |
|
521 * |
|
522 * @return: |
|
523 * FreeType error code. 0~means success. |
|
524 * |
|
525 * @note: |
|
526 * When an outline, or a sub-path, is `closed', the stroker generates |
|
527 * two independent `border' outlines, named `left' and `right'. |
|
528 * |
|
529 * When the outline, or a sub-path, is `opened', the stroker merges |
|
530 * the `border' outlines with caps. The `left' border receives all |
|
531 * points, while the `right' border becomes empty. |
|
532 * |
|
533 * Use the function @FT_Stroker_GetCounts instead if you want to |
|
534 * retrieve the counts associated to both borders. |
|
535 */ |
|
536 FT_EXPORT( FT_Error ) |
|
537 FT_Stroker_GetBorderCounts( FT_Stroker stroker, |
|
538 FT_StrokerBorder border, |
|
539 FT_UInt *anum_points, |
|
540 FT_UInt *anum_contours ); |
|
541 |
|
542 |
|
543 /************************************************************** |
|
544 * |
|
545 * @function: |
|
546 * FT_Stroker_ExportBorder |
|
547 * |
|
548 * @description: |
|
549 * Call this function after @FT_Stroker_GetBorderCounts to |
|
550 * export the corresponding border to your own @FT_Outline |
|
551 * structure. |
|
552 * |
|
553 * Note that this function appends the border points and |
|
554 * contours to your outline, but does not try to resize its |
|
555 * arrays. |
|
556 * |
|
557 * @input: |
|
558 * stroker :: |
|
559 * The target stroker handle. |
|
560 * |
|
561 * border :: |
|
562 * The border index. |
|
563 * |
|
564 * outline :: |
|
565 * The target outline handle. |
|
566 * |
|
567 * @note: |
|
568 * Always call this function after @FT_Stroker_GetBorderCounts to |
|
569 * get sure that there is enough room in your @FT_Outline object to |
|
570 * receive all new data. |
|
571 * |
|
572 * When an outline, or a sub-path, is `closed', the stroker generates |
|
573 * two independent `border' outlines, named `left' and `right' |
|
574 * |
|
575 * When the outline, or a sub-path, is `opened', the stroker merges |
|
576 * the `border' outlines with caps. The `left' border receives all |
|
577 * points, while the `right' border becomes empty. |
|
578 * |
|
579 * Use the function @FT_Stroker_Export instead if you want to |
|
580 * retrieve all borders at once. |
|
581 */ |
|
582 FT_EXPORT( void ) |
|
583 FT_Stroker_ExportBorder( FT_Stroker stroker, |
|
584 FT_StrokerBorder border, |
|
585 FT_Outline* outline ); |
|
586 |
|
587 |
|
588 /************************************************************** |
|
589 * |
|
590 * @function: |
|
591 * FT_Stroker_GetCounts |
|
592 * |
|
593 * @description: |
|
594 * Call this function once you have finished parsing your paths |
|
595 * with the stroker. It returns the number of points and |
|
596 * contours necessary to export all points/borders from the stroked |
|
597 * outline/path. |
|
598 * |
|
599 * @input: |
|
600 * stroker :: |
|
601 * The target stroker handle. |
|
602 * |
|
603 * @output: |
|
604 * anum_points :: |
|
605 * The number of points. |
|
606 * |
|
607 * anum_contours :: |
|
608 * The number of contours. |
|
609 * |
|
610 * @return: |
|
611 * FreeType error code. 0~means success. |
|
612 */ |
|
613 FT_EXPORT( FT_Error ) |
|
614 FT_Stroker_GetCounts( FT_Stroker stroker, |
|
615 FT_UInt *anum_points, |
|
616 FT_UInt *anum_contours ); |
|
617 |
|
618 |
|
619 /************************************************************** |
|
620 * |
|
621 * @function: |
|
622 * FT_Stroker_Export |
|
623 * |
|
624 * @description: |
|
625 * Call this function after @FT_Stroker_GetBorderCounts to |
|
626 * export all borders to your own @FT_Outline structure. |
|
627 * |
|
628 * Note that this function appends the border points and |
|
629 * contours to your outline, but does not try to resize its |
|
630 * arrays. |
|
631 * |
|
632 * @input: |
|
633 * stroker :: |
|
634 * The target stroker handle. |
|
635 * |
|
636 * outline :: |
|
637 * The target outline handle. |
|
638 */ |
|
639 FT_EXPORT( void ) |
|
640 FT_Stroker_Export( FT_Stroker stroker, |
|
641 FT_Outline* outline ); |
|
642 |
|
643 |
|
644 /************************************************************** |
|
645 * |
|
646 * @function: |
|
647 * FT_Stroker_Done |
|
648 * |
|
649 * @description: |
|
650 * Destroy a stroker object. |
|
651 * |
|
652 * @input: |
|
653 * stroker :: |
|
654 * A stroker handle. Can be NULL. |
|
655 */ |
|
656 FT_EXPORT( void ) |
|
657 FT_Stroker_Done( FT_Stroker stroker ); |
|
658 |
|
659 |
|
660 /************************************************************** |
|
661 * |
|
662 * @function: |
|
663 * FT_Glyph_Stroke |
|
664 * |
|
665 * @description: |
|
666 * Stroke a given outline glyph object with a given stroker. |
|
667 * |
|
668 * @inout: |
|
669 * pglyph :: |
|
670 * Source glyph handle on input, new glyph handle on output. |
|
671 * |
|
672 * @input: |
|
673 * stroker :: |
|
674 * A stroker handle. |
|
675 * |
|
676 * destroy :: |
|
677 * A Boolean. If~1, the source glyph object is destroyed |
|
678 * on success. |
|
679 * |
|
680 * @return: |
|
681 * FreeType error code. 0~means success. |
|
682 * |
|
683 * @note: |
|
684 * The source glyph is untouched in case of error. |
|
685 * |
|
686 * Adding stroke may yield a significantly wider and taller glyph |
|
687 * depending on how large of a radius was used to stroke the glyph. You |
|
688 * may need to manually adjust horizontal and vertical advance amounts |
|
689 * to account for this added size. |
|
690 */ |
|
691 FT_EXPORT( FT_Error ) |
|
692 FT_Glyph_Stroke( FT_Glyph *pglyph, |
|
693 FT_Stroker stroker, |
|
694 FT_Bool destroy ); |
|
695 |
|
696 |
|
697 /************************************************************** |
|
698 * |
|
699 * @function: |
|
700 * FT_Glyph_StrokeBorder |
|
701 * |
|
702 * @description: |
|
703 * Stroke a given outline glyph object with a given stroker, but |
|
704 * only return either its inside or outside border. |
|
705 * |
|
706 * @inout: |
|
707 * pglyph :: |
|
708 * Source glyph handle on input, new glyph handle on output. |
|
709 * |
|
710 * @input: |
|
711 * stroker :: |
|
712 * A stroker handle. |
|
713 * |
|
714 * inside :: |
|
715 * A Boolean. If~1, return the inside border, otherwise |
|
716 * the outside border. |
|
717 * |
|
718 * destroy :: |
|
719 * A Boolean. If~1, the source glyph object is destroyed |
|
720 * on success. |
|
721 * |
|
722 * @return: |
|
723 * FreeType error code. 0~means success. |
|
724 * |
|
725 * @note: |
|
726 * The source glyph is untouched in case of error. |
|
727 * |
|
728 * Adding stroke may yield a significantly wider and taller glyph |
|
729 * depending on how large of a radius was used to stroke the glyph. You |
|
730 * may need to manually adjust horizontal and vertical advance amounts |
|
731 * to account for this added size. |
|
732 */ |
|
733 FT_EXPORT( FT_Error ) |
|
734 FT_Glyph_StrokeBorder( FT_Glyph *pglyph, |
|
735 FT_Stroker stroker, |
|
736 FT_Bool inside, |
|
737 FT_Bool destroy ); |
|
738 |
|
739 /* */ |
|
740 |
|
741 FT_END_HEADER |
|
742 |
|
743 #endif /* __FT_STROKE_H__ */ |
|
744 |
|
745 |
|
746 /* END */ |
|
747 |
|
748 |
|
749 /* Local Variables: */ |
|
750 /* coding: utf-8 */ |
|
751 /* End: */ |