xref: /aosp_15_r20/external/harfbuzz_ng/src/hb-ft.h (revision 2d1272b857b1f7575e6e246373e1cb218663db8a)
1*2d1272b8SAndroid Build Coastguard Worker /*
2*2d1272b8SAndroid Build Coastguard Worker  * Copyright © 2009  Red Hat, Inc.
3*2d1272b8SAndroid Build Coastguard Worker  * Copyright © 2015  Google, Inc.
4*2d1272b8SAndroid Build Coastguard Worker  *
5*2d1272b8SAndroid Build Coastguard Worker  *  This is part of HarfBuzz, a text shaping library.
6*2d1272b8SAndroid Build Coastguard Worker  *
7*2d1272b8SAndroid Build Coastguard Worker  * Permission is hereby granted, without written agreement and without
8*2d1272b8SAndroid Build Coastguard Worker  * license or royalty fees, to use, copy, modify, and distribute this
9*2d1272b8SAndroid Build Coastguard Worker  * software and its documentation for any purpose, provided that the
10*2d1272b8SAndroid Build Coastguard Worker  * above copyright notice and the following two paragraphs appear in
11*2d1272b8SAndroid Build Coastguard Worker  * all copies of this software.
12*2d1272b8SAndroid Build Coastguard Worker  *
13*2d1272b8SAndroid Build Coastguard Worker  * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
14*2d1272b8SAndroid Build Coastguard Worker  * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
15*2d1272b8SAndroid Build Coastguard Worker  * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
16*2d1272b8SAndroid Build Coastguard Worker  * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
17*2d1272b8SAndroid Build Coastguard Worker  * DAMAGE.
18*2d1272b8SAndroid Build Coastguard Worker  *
19*2d1272b8SAndroid Build Coastguard Worker  * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
20*2d1272b8SAndroid Build Coastguard Worker  * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
21*2d1272b8SAndroid Build Coastguard Worker  * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
22*2d1272b8SAndroid Build Coastguard Worker  * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
23*2d1272b8SAndroid Build Coastguard Worker  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
24*2d1272b8SAndroid Build Coastguard Worker  *
25*2d1272b8SAndroid Build Coastguard Worker  * Red Hat Author(s): Behdad Esfahbod
26*2d1272b8SAndroid Build Coastguard Worker  * Google Author(s): Behdad Esfahbod
27*2d1272b8SAndroid Build Coastguard Worker  */
28*2d1272b8SAndroid Build Coastguard Worker 
29*2d1272b8SAndroid Build Coastguard Worker #ifndef HB_FT_H
30*2d1272b8SAndroid Build Coastguard Worker #define HB_FT_H
31*2d1272b8SAndroid Build Coastguard Worker 
32*2d1272b8SAndroid Build Coastguard Worker #include "hb.h"
33*2d1272b8SAndroid Build Coastguard Worker 
34*2d1272b8SAndroid Build Coastguard Worker #include <ft2build.h>
35*2d1272b8SAndroid Build Coastguard Worker #include FT_FREETYPE_H
36*2d1272b8SAndroid Build Coastguard Worker 
37*2d1272b8SAndroid Build Coastguard Worker HB_BEGIN_DECLS
38*2d1272b8SAndroid Build Coastguard Worker 
39*2d1272b8SAndroid Build Coastguard Worker /*
40*2d1272b8SAndroid Build Coastguard Worker  * Note: FreeType is not thread-safe.
41*2d1272b8SAndroid Build Coastguard Worker  * Hence, these functions are not either.
42*2d1272b8SAndroid Build Coastguard Worker  */
43*2d1272b8SAndroid Build Coastguard Worker 
44*2d1272b8SAndroid Build Coastguard Worker /*
45*2d1272b8SAndroid Build Coastguard Worker  * hb-face from ft-face.
46*2d1272b8SAndroid Build Coastguard Worker  */
47*2d1272b8SAndroid Build Coastguard Worker 
48*2d1272b8SAndroid Build Coastguard Worker /* This one creates a new hb-face for given ft-face.
49*2d1272b8SAndroid Build Coastguard Worker  * When the returned hb-face is destroyed, the destroy
50*2d1272b8SAndroid Build Coastguard Worker  * callback is called (if not NULL), with the ft-face passed
51*2d1272b8SAndroid Build Coastguard Worker  * to it.
52*2d1272b8SAndroid Build Coastguard Worker  *
53*2d1272b8SAndroid Build Coastguard Worker  * The client is responsible to make sure that ft-face is
54*2d1272b8SAndroid Build Coastguard Worker  * destroyed after hb-face is destroyed.
55*2d1272b8SAndroid Build Coastguard Worker  *
56*2d1272b8SAndroid Build Coastguard Worker  * Most often you don't want this function.  You should use either
57*2d1272b8SAndroid Build Coastguard Worker  * hb_ft_face_create_cached(), or hb_ft_face_create_referenced().
58*2d1272b8SAndroid Build Coastguard Worker  * In particular, if you are going to pass NULL as destroy, you
59*2d1272b8SAndroid Build Coastguard Worker  * probably should use (the more recent) hb_ft_face_create_referenced()
60*2d1272b8SAndroid Build Coastguard Worker  * instead.
61*2d1272b8SAndroid Build Coastguard Worker  */
62*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN hb_face_t *
63*2d1272b8SAndroid Build Coastguard Worker hb_ft_face_create (FT_Face           ft_face,
64*2d1272b8SAndroid Build Coastguard Worker 		   hb_destroy_func_t destroy);
65*2d1272b8SAndroid Build Coastguard Worker 
66*2d1272b8SAndroid Build Coastguard Worker /* This version is like hb_ft_face_create(), except that it caches
67*2d1272b8SAndroid Build Coastguard Worker  * the hb-face using the generic pointer of the ft-face.  This means
68*2d1272b8SAndroid Build Coastguard Worker  * that subsequent calls to this function with the same ft-face will
69*2d1272b8SAndroid Build Coastguard Worker  * return the same hb-face (correctly referenced).
70*2d1272b8SAndroid Build Coastguard Worker  *
71*2d1272b8SAndroid Build Coastguard Worker  * Client is still responsible for making sure that ft-face is destroyed
72*2d1272b8SAndroid Build Coastguard Worker  * after hb-face is.
73*2d1272b8SAndroid Build Coastguard Worker  */
74*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN hb_face_t *
75*2d1272b8SAndroid Build Coastguard Worker hb_ft_face_create_cached (FT_Face ft_face);
76*2d1272b8SAndroid Build Coastguard Worker 
77*2d1272b8SAndroid Build Coastguard Worker /* This version is like hb_ft_face_create(), except that it calls
78*2d1272b8SAndroid Build Coastguard Worker  * FT_Reference_Face() on ft-face, as such keeping ft-face alive
79*2d1272b8SAndroid Build Coastguard Worker  * as long as the hb-face is.
80*2d1272b8SAndroid Build Coastguard Worker  *
81*2d1272b8SAndroid Build Coastguard Worker  * This is the most convenient version to use.  Use it unless you have
82*2d1272b8SAndroid Build Coastguard Worker  * very good reasons not to.
83*2d1272b8SAndroid Build Coastguard Worker  */
84*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN hb_face_t *
85*2d1272b8SAndroid Build Coastguard Worker hb_ft_face_create_referenced (FT_Face ft_face);
86*2d1272b8SAndroid Build Coastguard Worker 
87*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN hb_face_t *
88*2d1272b8SAndroid Build Coastguard Worker hb_ft_face_create_from_file_or_fail (const char   *file_name,
89*2d1272b8SAndroid Build Coastguard Worker 				     unsigned int  index);
90*2d1272b8SAndroid Build Coastguard Worker 
91*2d1272b8SAndroid Build Coastguard Worker /*
92*2d1272b8SAndroid Build Coastguard Worker  * hb-font from ft-face.
93*2d1272b8SAndroid Build Coastguard Worker  */
94*2d1272b8SAndroid Build Coastguard Worker 
95*2d1272b8SAndroid Build Coastguard Worker /*
96*2d1272b8SAndroid Build Coastguard Worker  * Note:
97*2d1272b8SAndroid Build Coastguard Worker  *
98*2d1272b8SAndroid Build Coastguard Worker  * Set face size on ft-face before creating hb-font from it.
99*2d1272b8SAndroid Build Coastguard Worker  * Otherwise hb-ft would NOT pick up the font size correctly.
100*2d1272b8SAndroid Build Coastguard Worker  */
101*2d1272b8SAndroid Build Coastguard Worker 
102*2d1272b8SAndroid Build Coastguard Worker /* See notes on hb_ft_face_create().  Same issues re lifecycle-management
103*2d1272b8SAndroid Build Coastguard Worker  * apply here.  Use hb_ft_font_create_referenced() if you can. */
104*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN hb_font_t *
105*2d1272b8SAndroid Build Coastguard Worker hb_ft_font_create (FT_Face           ft_face,
106*2d1272b8SAndroid Build Coastguard Worker 		   hb_destroy_func_t destroy);
107*2d1272b8SAndroid Build Coastguard Worker 
108*2d1272b8SAndroid Build Coastguard Worker /* See notes on hb_ft_face_create_referenced() re lifecycle-management
109*2d1272b8SAndroid Build Coastguard Worker  * issues. */
110*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN hb_font_t *
111*2d1272b8SAndroid Build Coastguard Worker hb_ft_font_create_referenced (FT_Face ft_face);
112*2d1272b8SAndroid Build Coastguard Worker 
113*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN FT_Face
114*2d1272b8SAndroid Build Coastguard Worker hb_ft_font_get_face (hb_font_t *font);
115*2d1272b8SAndroid Build Coastguard Worker 
116*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN FT_Face
117*2d1272b8SAndroid Build Coastguard Worker hb_ft_font_lock_face (hb_font_t *font);
118*2d1272b8SAndroid Build Coastguard Worker 
119*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN void
120*2d1272b8SAndroid Build Coastguard Worker hb_ft_font_unlock_face (hb_font_t *font);
121*2d1272b8SAndroid Build Coastguard Worker 
122*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN void
123*2d1272b8SAndroid Build Coastguard Worker hb_ft_font_set_load_flags (hb_font_t *font, int load_flags);
124*2d1272b8SAndroid Build Coastguard Worker 
125*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN int
126*2d1272b8SAndroid Build Coastguard Worker hb_ft_font_get_load_flags (hb_font_t *font);
127*2d1272b8SAndroid Build Coastguard Worker 
128*2d1272b8SAndroid Build Coastguard Worker /* Call when size or variations settings on underlying FT_Face changed,
129*2d1272b8SAndroid Build Coastguard Worker  * and you want to update the hb_font_t from it. */
130*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN void
131*2d1272b8SAndroid Build Coastguard Worker hb_ft_font_changed (hb_font_t *font);
132*2d1272b8SAndroid Build Coastguard Worker 
133*2d1272b8SAndroid Build Coastguard Worker /* Call when size or variations settings on underlying hb_font_t may have
134*2d1272b8SAndroid Build Coastguard Worker  * changed, and you want to update the FT_Face from it.  This call is fast
135*2d1272b8SAndroid Build Coastguard Worker  * if nothing changed on hb_font_t. Returns true if changed. */
136*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN hb_bool_t
137*2d1272b8SAndroid Build Coastguard Worker hb_ft_hb_font_changed (hb_font_t *font);
138*2d1272b8SAndroid Build Coastguard Worker 
139*2d1272b8SAndroid Build Coastguard Worker /* Makes an hb_font_t use FreeType internally to implement font functions.
140*2d1272b8SAndroid Build Coastguard Worker  * Note: this internally creates an FT_Face.  Use it when you create your
141*2d1272b8SAndroid Build Coastguard Worker  * hb_face_t using hb_face_create(). */
142*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN void
143*2d1272b8SAndroid Build Coastguard Worker hb_ft_font_set_funcs (hb_font_t *font);
144*2d1272b8SAndroid Build Coastguard Worker 
145*2d1272b8SAndroid Build Coastguard Worker 
146*2d1272b8SAndroid Build Coastguard Worker HB_END_DECLS
147*2d1272b8SAndroid Build Coastguard Worker 
148*2d1272b8SAndroid Build Coastguard Worker #endif /* HB_FT_H */
149