Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/src/java.desktop/share/native/libfreetype/include/freetype/ftoutln.h
42588 views
1
/****************************************************************************
2
*
3
* ftoutln.h
4
*
5
* Support for the FT_Outline type used to store glyph shapes of
6
* most scalable font formats (specification).
7
*
8
* Copyright (C) 1996-2020 by
9
* David Turner, Robert Wilhelm, and Werner Lemberg.
10
*
11
* This file is part of the FreeType project, and may only be used,
12
* modified, and distributed under the terms of the FreeType project
13
* license, LICENSE.TXT. By continuing to use, modify, or distribute
14
* this file you indicate that you have read the license and
15
* understand and accept it fully.
16
*
17
*/
18
19
20
#ifndef FTOUTLN_H_
21
#define FTOUTLN_H_
22
23
24
#include <freetype/freetype.h>
25
26
#ifdef FREETYPE_H
27
#error "freetype.h of FreeType 1 has been loaded!"
28
#error "Please fix the directory search order for header files"
29
#error "so that freetype.h of FreeType 2 is found first."
30
#endif
31
32
33
FT_BEGIN_HEADER
34
35
36
/**************************************************************************
37
*
38
* @section:
39
* outline_processing
40
*
41
* @title:
42
* Outline Processing
43
*
44
* @abstract:
45
* Functions to create, transform, and render vectorial glyph images.
46
*
47
* @description:
48
* This section contains routines used to create and destroy scalable
49
* glyph images known as 'outlines'. These can also be measured,
50
* transformed, and converted into bitmaps and pixmaps.
51
*
52
* @order:
53
* FT_Outline
54
* FT_Outline_New
55
* FT_Outline_Done
56
* FT_Outline_Copy
57
* FT_Outline_Translate
58
* FT_Outline_Transform
59
* FT_Outline_Embolden
60
* FT_Outline_EmboldenXY
61
* FT_Outline_Reverse
62
* FT_Outline_Check
63
*
64
* FT_Outline_Get_CBox
65
* FT_Outline_Get_BBox
66
*
67
* FT_Outline_Get_Bitmap
68
* FT_Outline_Render
69
* FT_Outline_Decompose
70
* FT_Outline_Funcs
71
* FT_Outline_MoveToFunc
72
* FT_Outline_LineToFunc
73
* FT_Outline_ConicToFunc
74
* FT_Outline_CubicToFunc
75
*
76
* FT_Orientation
77
* FT_Outline_Get_Orientation
78
*
79
* FT_OUTLINE_XXX
80
*
81
*/
82
83
84
/**************************************************************************
85
*
86
* @function:
87
* FT_Outline_Decompose
88
*
89
* @description:
90
* Walk over an outline's structure to decompose it into individual
91
* segments and Bezier arcs. This function also emits 'move to'
92
* operations to indicate the start of new contours in the outline.
93
*
94
* @input:
95
* outline ::
96
* A pointer to the source target.
97
*
98
* func_interface ::
99
* A table of 'emitters', i.e., function pointers called during
100
* decomposition to indicate path operations.
101
*
102
* @inout:
103
* user ::
104
* A typeless pointer that is passed to each emitter during the
105
* decomposition. It can be used to store the state during the
106
* decomposition.
107
*
108
* @return:
109
* FreeType error code. 0~means success.
110
*
111
* @note:
112
* A contour that contains a single point only is represented by a 'move
113
* to' operation followed by 'line to' to the same point. In most cases,
114
* it is best to filter this out before using the outline for stroking
115
* purposes (otherwise it would result in a visible dot when round caps
116
* are used).
117
*
118
* Similarly, the function returns success for an empty outline also
119
* (doing nothing, this is, not calling any emitter); if necessary, you
120
* should filter this out, too.
121
*/
122
FT_EXPORT( FT_Error )
123
FT_Outline_Decompose( FT_Outline* outline,
124
const FT_Outline_Funcs* func_interface,
125
void* user );
126
127
128
/**************************************************************************
129
*
130
* @function:
131
* FT_Outline_New
132
*
133
* @description:
134
* Create a new outline of a given size.
135
*
136
* @input:
137
* library ::
138
* A handle to the library object from where the outline is allocated.
139
* Note however that the new outline will **not** necessarily be
140
* **freed**, when destroying the library, by @FT_Done_FreeType.
141
*
142
* numPoints ::
143
* The maximum number of points within the outline. Must be smaller
144
* than or equal to 0xFFFF (65535).
145
*
146
* numContours ::
147
* The maximum number of contours within the outline. This value must
148
* be in the range 0 to `numPoints`.
149
*
150
* @output:
151
* anoutline ::
152
* A handle to the new outline.
153
*
154
* @return:
155
* FreeType error code. 0~means success.
156
*
157
* @note:
158
* The reason why this function takes a `library` parameter is simply to
159
* use the library's memory allocator.
160
*/
161
FT_EXPORT( FT_Error )
162
FT_Outline_New( FT_Library library,
163
FT_UInt numPoints,
164
FT_Int numContours,
165
FT_Outline *anoutline );
166
167
168
/**************************************************************************
169
*
170
* @function:
171
* FT_Outline_Done
172
*
173
* @description:
174
* Destroy an outline created with @FT_Outline_New.
175
*
176
* @input:
177
* library ::
178
* A handle of the library object used to allocate the outline.
179
*
180
* outline ::
181
* A pointer to the outline object to be discarded.
182
*
183
* @return:
184
* FreeType error code. 0~means success.
185
*
186
* @note:
187
* If the outline's 'owner' field is not set, only the outline descriptor
188
* will be released.
189
*/
190
FT_EXPORT( FT_Error )
191
FT_Outline_Done( FT_Library library,
192
FT_Outline* outline );
193
194
195
/**************************************************************************
196
*
197
* @function:
198
* FT_Outline_Check
199
*
200
* @description:
201
* Check the contents of an outline descriptor.
202
*
203
* @input:
204
* outline ::
205
* A handle to a source outline.
206
*
207
* @return:
208
* FreeType error code. 0~means success.
209
*
210
* @note:
211
* An empty outline, or an outline with a single point only is also
212
* valid.
213
*/
214
FT_EXPORT( FT_Error )
215
FT_Outline_Check( FT_Outline* outline );
216
217
218
/**************************************************************************
219
*
220
* @function:
221
* FT_Outline_Get_CBox
222
*
223
* @description:
224
* Return an outline's 'control box'. The control box encloses all the
225
* outline's points, including Bezier control points. Though it
226
* coincides with the exact bounding box for most glyphs, it can be
227
* slightly larger in some situations (like when rotating an outline that
228
* contains Bezier outside arcs).
229
*
230
* Computing the control box is very fast, while getting the bounding box
231
* can take much more time as it needs to walk over all segments and arcs
232
* in the outline. To get the latter, you can use the 'ftbbox'
233
* component, which is dedicated to this single task.
234
*
235
* @input:
236
* outline ::
237
* A pointer to the source outline descriptor.
238
*
239
* @output:
240
* acbox ::
241
* The outline's control box.
242
*
243
* @note:
244
* See @FT_Glyph_Get_CBox for a discussion of tricky fonts.
245
*/
246
FT_EXPORT( void )
247
FT_Outline_Get_CBox( const FT_Outline* outline,
248
FT_BBox *acbox );
249
250
251
/**************************************************************************
252
*
253
* @function:
254
* FT_Outline_Translate
255
*
256
* @description:
257
* Apply a simple translation to the points of an outline.
258
*
259
* @inout:
260
* outline ::
261
* A pointer to the target outline descriptor.
262
*
263
* @input:
264
* xOffset ::
265
* The horizontal offset.
266
*
267
* yOffset ::
268
* The vertical offset.
269
*/
270
FT_EXPORT( void )
271
FT_Outline_Translate( const FT_Outline* outline,
272
FT_Pos xOffset,
273
FT_Pos yOffset );
274
275
276
/**************************************************************************
277
*
278
* @function:
279
* FT_Outline_Copy
280
*
281
* @description:
282
* Copy an outline into another one. Both objects must have the same
283
* sizes (number of points & number of contours) when this function is
284
* called.
285
*
286
* @input:
287
* source ::
288
* A handle to the source outline.
289
*
290
* @output:
291
* target ::
292
* A handle to the target outline.
293
*
294
* @return:
295
* FreeType error code. 0~means success.
296
*/
297
FT_EXPORT( FT_Error )
298
FT_Outline_Copy( const FT_Outline* source,
299
FT_Outline *target );
300
301
302
/**************************************************************************
303
*
304
* @function:
305
* FT_Outline_Transform
306
*
307
* @description:
308
* Apply a simple 2x2 matrix to all of an outline's points. Useful for
309
* applying rotations, slanting, flipping, etc.
310
*
311
* @inout:
312
* outline ::
313
* A pointer to the target outline descriptor.
314
*
315
* @input:
316
* matrix ::
317
* A pointer to the transformation matrix.
318
*
319
* @note:
320
* You can use @FT_Outline_Translate if you need to translate the
321
* outline's points.
322
*/
323
FT_EXPORT( void )
324
FT_Outline_Transform( const FT_Outline* outline,
325
const FT_Matrix* matrix );
326
327
328
/**************************************************************************
329
*
330
* @function:
331
* FT_Outline_Embolden
332
*
333
* @description:
334
* Embolden an outline. The new outline will be at most 4~times
335
* `strength` pixels wider and higher. You may think of the left and
336
* bottom borders as unchanged.
337
*
338
* Negative `strength` values to reduce the outline thickness are
339
* possible also.
340
*
341
* @inout:
342
* outline ::
343
* A handle to the target outline.
344
*
345
* @input:
346
* strength ::
347
* How strong the glyph is emboldened. Expressed in 26.6 pixel format.
348
*
349
* @return:
350
* FreeType error code. 0~means success.
351
*
352
* @note:
353
* The used algorithm to increase or decrease the thickness of the glyph
354
* doesn't change the number of points; this means that certain
355
* situations like acute angles or intersections are sometimes handled
356
* incorrectly.
357
*
358
* If you need 'better' metrics values you should call
359
* @FT_Outline_Get_CBox or @FT_Outline_Get_BBox.
360
*
361
* To get meaningful results, font scaling values must be set with
362
* functions like @FT_Set_Char_Size before calling FT_Render_Glyph.
363
*
364
* @example:
365
* ```
366
* FT_Load_Glyph( face, index, FT_LOAD_DEFAULT );
367
*
368
* if ( face->glyph->format == FT_GLYPH_FORMAT_OUTLINE )
369
* FT_Outline_Embolden( &face->glyph->outline, strength );
370
* ```
371
*
372
*/
373
FT_EXPORT( FT_Error )
374
FT_Outline_Embolden( FT_Outline* outline,
375
FT_Pos strength );
376
377
378
/**************************************************************************
379
*
380
* @function:
381
* FT_Outline_EmboldenXY
382
*
383
* @description:
384
* Embolden an outline. The new outline will be `xstrength` pixels wider
385
* and `ystrength` pixels higher. Otherwise, it is similar to
386
* @FT_Outline_Embolden, which uses the same strength in both directions.
387
*
388
* @since:
389
* 2.4.10
390
*/
391
FT_EXPORT( FT_Error )
392
FT_Outline_EmboldenXY( FT_Outline* outline,
393
FT_Pos xstrength,
394
FT_Pos ystrength );
395
396
397
/**************************************************************************
398
*
399
* @function:
400
* FT_Outline_Reverse
401
*
402
* @description:
403
* Reverse the drawing direction of an outline. This is used to ensure
404
* consistent fill conventions for mirrored glyphs.
405
*
406
* @inout:
407
* outline ::
408
* A pointer to the target outline descriptor.
409
*
410
* @note:
411
* This function toggles the bit flag @FT_OUTLINE_REVERSE_FILL in the
412
* outline's `flags` field.
413
*
414
* It shouldn't be used by a normal client application, unless it knows
415
* what it is doing.
416
*/
417
FT_EXPORT( void )
418
FT_Outline_Reverse( FT_Outline* outline );
419
420
421
/**************************************************************************
422
*
423
* @function:
424
* FT_Outline_Get_Bitmap
425
*
426
* @description:
427
* Render an outline within a bitmap. The outline's image is simply
428
* OR-ed to the target bitmap.
429
*
430
* @input:
431
* library ::
432
* A handle to a FreeType library object.
433
*
434
* outline ::
435
* A pointer to the source outline descriptor.
436
*
437
* @inout:
438
* abitmap ::
439
* A pointer to the target bitmap descriptor.
440
*
441
* @return:
442
* FreeType error code. 0~means success.
443
*
444
* @note:
445
* This function does **not create** the bitmap, it only renders an
446
* outline image within the one you pass to it! Consequently, the
447
* various fields in `abitmap` should be set accordingly.
448
*
449
* It will use the raster corresponding to the default glyph format.
450
*
451
* The value of the `num_grays` field in `abitmap` is ignored. If you
452
* select the gray-level rasterizer, and you want less than 256 gray
453
* levels, you have to use @FT_Outline_Render directly.
454
*/
455
FT_EXPORT( FT_Error )
456
FT_Outline_Get_Bitmap( FT_Library library,
457
FT_Outline* outline,
458
const FT_Bitmap *abitmap );
459
460
461
/**************************************************************************
462
*
463
* @function:
464
* FT_Outline_Render
465
*
466
* @description:
467
* Render an outline within a bitmap using the current scan-convert.
468
*
469
* @input:
470
* library ::
471
* A handle to a FreeType library object.
472
*
473
* outline ::
474
* A pointer to the source outline descriptor.
475
*
476
* @inout:
477
* params ::
478
* A pointer to an @FT_Raster_Params structure used to describe the
479
* rendering operation.
480
*
481
* @return:
482
* FreeType error code. 0~means success.
483
*
484
* @note:
485
* This advanced function uses @FT_Raster_Params as an argument.
486
* The field `params.source` will be set to `outline` before the scan
487
* converter is called, which means that the value you give to it is
488
* actually ignored. Either `params.target` must point to preallocated
489
* bitmap, or @FT_RASTER_FLAG_DIRECT must be set in `params.flags`
490
* allowing FreeType rasterizer to be used for direct composition,
491
* translucency, etc. See @FT_Raster_Params for more details.
492
*/
493
FT_EXPORT( FT_Error )
494
FT_Outline_Render( FT_Library library,
495
FT_Outline* outline,
496
FT_Raster_Params* params );
497
498
499
/**************************************************************************
500
*
501
* @enum:
502
* FT_Orientation
503
*
504
* @description:
505
* A list of values used to describe an outline's contour orientation.
506
*
507
* The TrueType and PostScript specifications use different conventions
508
* to determine whether outline contours should be filled or unfilled.
509
*
510
* @values:
511
* FT_ORIENTATION_TRUETYPE ::
512
* According to the TrueType specification, clockwise contours must be
513
* filled, and counter-clockwise ones must be unfilled.
514
*
515
* FT_ORIENTATION_POSTSCRIPT ::
516
* According to the PostScript specification, counter-clockwise
517
* contours must be filled, and clockwise ones must be unfilled.
518
*
519
* FT_ORIENTATION_FILL_RIGHT ::
520
* This is identical to @FT_ORIENTATION_TRUETYPE, but is used to
521
* remember that in TrueType, everything that is to the right of the
522
* drawing direction of a contour must be filled.
523
*
524
* FT_ORIENTATION_FILL_LEFT ::
525
* This is identical to @FT_ORIENTATION_POSTSCRIPT, but is used to
526
* remember that in PostScript, everything that is to the left of the
527
* drawing direction of a contour must be filled.
528
*
529
* FT_ORIENTATION_NONE ::
530
* The orientation cannot be determined. That is, different parts of
531
* the glyph have different orientation.
532
*
533
*/
534
typedef enum FT_Orientation_
535
{
536
FT_ORIENTATION_TRUETYPE = 0,
537
FT_ORIENTATION_POSTSCRIPT = 1,
538
FT_ORIENTATION_FILL_RIGHT = FT_ORIENTATION_TRUETYPE,
539
FT_ORIENTATION_FILL_LEFT = FT_ORIENTATION_POSTSCRIPT,
540
FT_ORIENTATION_NONE
541
542
} FT_Orientation;
543
544
545
/**************************************************************************
546
*
547
* @function:
548
* FT_Outline_Get_Orientation
549
*
550
* @description:
551
* This function analyzes a glyph outline and tries to compute its fill
552
* orientation (see @FT_Orientation). This is done by integrating the
553
* total area covered by the outline. The positive integral corresponds
554
* to the clockwise orientation and @FT_ORIENTATION_POSTSCRIPT is
555
* returned. The negative integral corresponds to the counter-clockwise
556
* orientation and @FT_ORIENTATION_TRUETYPE is returned.
557
*
558
* Note that this will return @FT_ORIENTATION_TRUETYPE for empty
559
* outlines.
560
*
561
* @input:
562
* outline ::
563
* A handle to the source outline.
564
*
565
* @return:
566
* The orientation.
567
*
568
*/
569
FT_EXPORT( FT_Orientation )
570
FT_Outline_Get_Orientation( FT_Outline* outline );
571
572
573
/* */
574
575
576
FT_END_HEADER
577
578
#endif /* FTOUTLN_H_ */
579
580
581
/* END */
582
583
584
/* Local Variables: */
585
/* coding: utf-8 */
586
/* End: */
587
588