@@ -33,6 +33,74 @@ P11X_DECLARE_ENUM(
3333 {" UNSCALED" , FT_KERNING_UNSCALED},
3434);
3535
36+ const char *FaceFlags__doc__ = R"""(
37+ Flags returned by `FT2Font.face_flags`.
38+
39+ For more information, see `the FreeType documentation
40+ <https://freetype.org/freetype2/docs/reference/ft2-face_creation.html#ft_face_flag_xxx>`_.
41+
42+ .. versionadded:: 3.10
43+ )""" ;
44+
45+ enum class FaceFlags : FT_Long {
46+ #define DECLARE_FLAG (name ) name = FT_FACE_FLAG_##name
47+ DECLARE_FLAG (SCALABLE),
48+ DECLARE_FLAG (FIXED_SIZES),
49+ DECLARE_FLAG (FIXED_WIDTH),
50+ DECLARE_FLAG (SFNT),
51+ DECLARE_FLAG (HORIZONTAL),
52+ DECLARE_FLAG (VERTICAL),
53+ DECLARE_FLAG (KERNING),
54+ DECLARE_FLAG (FAST_GLYPHS),
55+ DECLARE_FLAG (MULTIPLE_MASTERS),
56+ DECLARE_FLAG (GLYPH_NAMES),
57+ DECLARE_FLAG (EXTERNAL_STREAM),
58+ DECLARE_FLAG (HINTER),
59+ DECLARE_FLAG (CID_KEYED),
60+ DECLARE_FLAG (TRICKY),
61+ DECLARE_FLAG (COLOR),
62+ #ifdef FT_FACE_FLAG_VARIATION // backcompat: ft 2.9.0.
63+ DECLARE_FLAG (VARIATION),
64+ #endif
65+ #ifdef FT_FACE_FLAG_SVG // backcompat: ft 2.12.0.
66+ DECLARE_FLAG (SVG),
67+ #endif
68+ #ifdef FT_FACE_FLAG_SBIX // backcompat: ft 2.12.0.
69+ DECLARE_FLAG (SBIX),
70+ #endif
71+ #ifdef FT_FACE_FLAG_SBIX_OVERLAY // backcompat: ft 2.12.0.
72+ DECLARE_FLAG (SBIX_OVERLAY),
73+ #endif
74+ #undef DECLARE_FLAG
75+ };
76+
77+ P11X_DECLARE_ENUM (
78+ " FaceFlags" , " Flag" ,
79+ {" SCALABLE" , FaceFlags::SCALABLE},
80+ {" FIXED_SIZES" , FaceFlags::FIXED_SIZES},
81+ {" FIXED_WIDTH" , FaceFlags::FIXED_WIDTH},
82+ {" SFNT" , FaceFlags::SFNT},
83+ {" HORIZONTAL" , FaceFlags::HORIZONTAL},
84+ {" VERTICAL" , FaceFlags::VERTICAL},
85+ {" KERNING" , FaceFlags::KERNING},
86+ {" FAST_GLYPHS" , FaceFlags::FAST_GLYPHS},
87+ {" MULTIPLE_MASTERS" , FaceFlags::MULTIPLE_MASTERS},
88+ {" GLYPH_NAMES" , FaceFlags::GLYPH_NAMES},
89+ {" EXTERNAL_STREAM" , FaceFlags::EXTERNAL_STREAM},
90+ {" HINTER" , FaceFlags::HINTER},
91+ {" CID_KEYED" , FaceFlags::CID_KEYED},
92+ {" TRICKY" , FaceFlags::TRICKY},
93+ {" COLOR" , FaceFlags::COLOR},
94+ // backcompat: ft 2.9.0.
95+ // {"VARIATION", FaceFlags::VARIATION},
96+ // backcompat: ft 2.12.0.
97+ // {"SVG", FaceFlags::SVG},
98+ // backcompat: ft 2.12.0.
99+ // {"SBIX", FaceFlags::SBIX},
100+ // backcompat: ft 2.12.0.
101+ // {"SBIX_OVERLAY", FaceFlags::SBIX_OVERLAY},
102+ );
103+
36104const char *LoadFlags__doc__ = R"""(
37105 Flags for `FT2Font.load_char`, `FT2Font.load_glyph`, and `FT2Font.set_text`.
38106
@@ -110,6 +178,30 @@ P11X_DECLARE_ENUM(
110178 {" TARGET_LCD_V" , LoadFlags::TARGET_LCD_V},
111179);
112180
181+ const char *StyleFlags__doc__ = R"""(
182+ Flags returned by `FT2Font.style_flags`.
183+
184+ For more information, see `the FreeType documentation
185+ <https://freetype.org/freetype2/docs/reference/ft2-face_creation.html#ft_style_flag_xxx>`_.
186+
187+ .. versionadded:: 3.10
188+ )""" ;
189+
190+ enum class StyleFlags : FT_Long {
191+ #define DECLARE_FLAG (name ) name = FT_STYLE_FLAG_##name
192+ NORMAL = 0 ,
193+ DECLARE_FLAG (ITALIC),
194+ DECLARE_FLAG (BOLD),
195+ #undef DECLARE_FLAG
196+ };
197+
198+ P11X_DECLARE_ENUM (
199+ " StyleFlags" , " Flag" ,
200+ {" NORMAL" , StyleFlags::NORMAL},
201+ {" ITALIC" , StyleFlags::ITALIC},
202+ {" BOLD" , StyleFlags::BOLD},
203+ );
204+
113205/* *********************************************************************
114206 * FT2Image
115207 * */
@@ -1339,16 +1431,16 @@ PyFT2Font_style_name(PyFT2Font *self)
13391431 return name;
13401432}
13411433
1342- static FT_Long
1434+ static FaceFlags
13431435PyFT2Font_face_flags (PyFT2Font *self)
13441436{
1345- return self->x ->get_face ()->face_flags ;
1437+ return static_cast <FaceFlags>( self->x ->get_face ()->face_flags ) ;
13461438}
13471439
1348- static FT_Long
1440+ static StyleFlags
13491441PyFT2Font_style_flags (PyFT2Font *self)
13501442{
1351- return self->x ->get_face ()->style_flags ;
1443+ return static_cast <StyleFlags>( self->x ->get_face ()->style_flags ) ;
13521444}
13531445
13541446static FT_Long
@@ -1495,6 +1587,20 @@ ft2font__getattr__(std::string name) {
14951587 DEPRECATE_ATTR_FROM_FLAG (LOAD_TARGET_LCD, LoadFlags, TARGET_LCD);
14961588 DEPRECATE_ATTR_FROM_FLAG (LOAD_TARGET_LCD_V, LoadFlags, TARGET_LCD_V);
14971589
1590+ DEPRECATE_ATTR_FROM_FLAG (SCALABLE, FaceFlags, SCALABLE);
1591+ DEPRECATE_ATTR_FROM_FLAG (FIXED_SIZES, FaceFlags, FIXED_SIZES);
1592+ DEPRECATE_ATTR_FROM_FLAG (FIXED_WIDTH, FaceFlags, FIXED_WIDTH);
1593+ DEPRECATE_ATTR_FROM_FLAG (SFNT, FaceFlags, SFNT);
1594+ DEPRECATE_ATTR_FROM_FLAG (HORIZONTAL, FaceFlags, HORIZONTAL);
1595+ DEPRECATE_ATTR_FROM_FLAG (VERTICAL, FaceFlags, VERTICAL);
1596+ DEPRECATE_ATTR_FROM_FLAG (KERNING, FaceFlags, KERNING);
1597+ DEPRECATE_ATTR_FROM_FLAG (FAST_GLYPHS, FaceFlags, FAST_GLYPHS);
1598+ DEPRECATE_ATTR_FROM_FLAG (MULTIPLE_MASTERS, FaceFlags, MULTIPLE_MASTERS);
1599+ DEPRECATE_ATTR_FROM_FLAG (GLYPH_NAMES, FaceFlags, GLYPH_NAMES);
1600+ DEPRECATE_ATTR_FROM_FLAG (EXTERNAL_STREAM, FaceFlags, EXTERNAL_STREAM);
1601+
1602+ DEPRECATE_ATTR_FROM_FLAG (ITALIC, StyleFlags, ITALIC);
1603+ DEPRECATE_ATTR_FROM_FLAG (BOLD, StyleFlags, BOLD);
14981604#undef DEPRECATE_ATTR_FROM_FLAG
14991605
15001606 throw py::attribute_error (
@@ -1514,6 +1620,8 @@ PYBIND11_MODULE(ft2font, m)
15141620 p11x::bind_enums (m);
15151621 p11x::enums[" Kerning" ].attr (" __doc__" ) = Kerning__doc__;
15161622 p11x::enums[" LoadFlags" ].attr (" __doc__" ) = LoadFlags__doc__;
1623+ p11x::enums[" FaceFlags" ].attr (" __doc__" ) = FaceFlags__doc__;
1624+ p11x::enums[" StyleFlags" ].attr (" __doc__" ) = StyleFlags__doc__;
15171625
15181626 py::class_<FT2Image>(m, " FT2Image" , py::is_final (), py::buffer_protocol (),
15191627 PyFT2Image__doc__)
@@ -1613,9 +1721,9 @@ PYBIND11_MODULE(ft2font, m)
16131721 .def_property_readonly (" style_name" , &PyFT2Font_style_name,
16141722 " Style name." )
16151723 .def_property_readonly (" face_flags" , &PyFT2Font_face_flags,
1616- " Face flags; see the ft2font constants ." )
1724+ " Face flags; see `.FaceFlags` ." )
16171725 .def_property_readonly (" style_flags" , &PyFT2Font_style_flags,
1618- " Style flags; see the ft2font constants ." )
1726+ " Style flags; see `.StyleFlags` ." )
16191727 .def_property_readonly (" num_glyphs" , &PyFT2Font_num_glyphs,
16201728 " Number of glyphs in the face." )
16211729 .def_property_readonly (" num_fixed_sizes" , &PyFT2Font_num_fixed_sizes,
@@ -1657,17 +1765,4 @@ PYBIND11_MODULE(ft2font, m)
16571765 m.attr (" __freetype_version__" ) = version_string;
16581766 m.attr (" __freetype_build_type__" ) = FREETYPE_BUILD_TYPE;
16591767 m.def (" __getattr__" , ft2font__getattr__);
1660- m.attr (" SCALABLE" ) = FT_FACE_FLAG_SCALABLE;
1661- m.attr (" FIXED_SIZES" ) = FT_FACE_FLAG_FIXED_SIZES;
1662- m.attr (" FIXED_WIDTH" ) = FT_FACE_FLAG_FIXED_WIDTH;
1663- m.attr (" SFNT" ) = FT_FACE_FLAG_SFNT;
1664- m.attr (" HORIZONTAL" ) = FT_FACE_FLAG_HORIZONTAL;
1665- m.attr (" VERTICAL" ) = FT_FACE_FLAG_VERTICAL;
1666- m.attr (" KERNING" ) = FT_FACE_FLAG_KERNING;
1667- m.attr (" FAST_GLYPHS" ) = FT_FACE_FLAG_FAST_GLYPHS;
1668- m.attr (" MULTIPLE_MASTERS" ) = FT_FACE_FLAG_MULTIPLE_MASTERS;
1669- m.attr (" GLYPH_NAMES" ) = FT_FACE_FLAG_GLYPH_NAMES;
1670- m.attr (" EXTERNAL_STREAM" ) = FT_FACE_FLAG_EXTERNAL_STREAM;
1671- m.attr (" ITALIC" ) = FT_STYLE_FLAG_ITALIC;
1672- m.attr (" BOLD" ) = FT_STYLE_FLAG_BOLD;
16731768}
0 commit comments