af90967dda0deb5a669adbf832f5dc4cc305ead0
[platform/upstream/freetype2.git] / include / freetype / ftsynth.h
1 /****************************************************************************
2  *
3  * ftsynth.h
4  *
5  *   FreeType synthesizing code for emboldening and slanting
6  *   (specification).
7  *
8  * Copyright (C) 2000-2023 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   /*************************************************************************/
21   /*************************************************************************/
22   /*************************************************************************/
23   /*************************************************************************/
24   /*************************************************************************/
25   /*********                                                       *********/
26   /*********        WARNING, THIS IS ALPHA CODE!  THIS API         *********/
27   /*********    IS DUE TO CHANGE UNTIL STRICTLY NOTIFIED BY THE    *********/
28   /*********            FREETYPE DEVELOPMENT TEAM                  *********/
29   /*********                                                       *********/
30   /*************************************************************************/
31   /*************************************************************************/
32   /*************************************************************************/
33   /*************************************************************************/
34   /*************************************************************************/
35
36
37   /* Main reason for not lifting the functions in this module to a  */
38   /* 'standard' API is that the used parameters for emboldening and */
39   /* slanting are not configurable.  Consider the functions as a    */
40   /* code resource that should be copied into the application and   */
41   /* adapted to the particular needs.                               */
42
43
44 #ifndef FTSYNTH_H_
45 #define FTSYNTH_H_
46
47
48 #include <freetype/freetype.h>
49
50 #ifdef FREETYPE_H
51 #error "freetype.h of FreeType 1 has been loaded!"
52 #error "Please fix the directory search order for header files"
53 #error "so that freetype.h of FreeType 2 is found first."
54 #endif
55
56
57 FT_BEGIN_HEADER
58
59   /* Embolden a glyph by a 'reasonable' value (which is highly a matter of */
60   /* taste).  This function is actually a convenience function, providing  */
61   /* a wrapper for @FT_Outline_Embolden and @FT_Bitmap_Embolden.           */
62   /*                                                                       */
63   /* For emboldened outlines the height, width, and advance metrics are    */
64   /* increased by the strength of the emboldening -- this even affects     */
65   /* mono-width fonts!                                                     */
66   /*                                                                       */
67   /* You can also call @FT_Outline_Get_CBox to get precise values.         */
68   FT_EXPORT( void )
69   FT_GlyphSlot_Embolden( FT_GlyphSlot  slot );
70
71   /* Precisely adjust the glyph weight either horizontally or vertically.  */
72   /* The `xdelta` and `ydelta` values are fractions of the face Em size    */
73   /* (in fixed-point format).  Considering that a regular face would have  */
74   /* stem widths on the order of 0.1 Em, a delta of 0.05 (0x0CCC) should   */
75   /* be very noticeable.  To increase or decrease the weight, use positive */
76   /* or negative values, respectively.                                     */
77   FT_EXPORT( void )
78   FT_GlyphSlot_AdjustWeight( FT_GlyphSlot  slot,
79                              FT_Fixed      xdelta,
80                              FT_Fixed      ydelta );
81
82
83   /* Slant an outline glyph to the right by about 12 degrees.              */
84   FT_EXPORT( void )
85   FT_GlyphSlot_Oblique( FT_GlyphSlot  slot );
86
87   /* Slant an outline glyph by a given sine of an angle.  You can apply    */
88   /* slant along either x- or y-axis by choosing a corresponding non-zero  */
89   /* argument.  If both slants are non-zero, some affine transformation    */
90   /* will result.                                                          */
91   FT_EXPORT( void )
92   FT_GlyphSlot_Slant( FT_GlyphSlot  slot,
93                       FT_Fixed      xslant,
94                       FT_Fixed      yslant );
95
96   /* */
97
98
99 FT_END_HEADER
100
101 #endif /* FTSYNTH_H_ */
102
103
104 /* END */