@@ -19,6 +19,38 @@ using namespace pybind11::literals;
19
19
* Enumerations in a C++ form.
20
20
* */
21
21
22
+ enum class FaceFlags : FT_Long {
23
+ #define DECLARE_FLAG (name ) name = FT_FACE_FLAG_##name
24
+ DECLARE_FLAG (SCALABLE),
25
+ DECLARE_FLAG (FIXED_SIZES),
26
+ DECLARE_FLAG (FIXED_WIDTH),
27
+ DECLARE_FLAG (SFNT),
28
+ DECLARE_FLAG (HORIZONTAL),
29
+ DECLARE_FLAG (VERTICAL),
30
+ DECLARE_FLAG (KERNING),
31
+ DECLARE_FLAG (FAST_GLYPHS),
32
+ DECLARE_FLAG (MULTIPLE_MASTERS),
33
+ DECLARE_FLAG (GLYPH_NAMES),
34
+ DECLARE_FLAG (EXTERNAL_STREAM),
35
+ DECLARE_FLAG (HINTER),
36
+ DECLARE_FLAG (CID_KEYED),
37
+ DECLARE_FLAG (TRICKY),
38
+ DECLARE_FLAG (COLOR),
39
+ #ifdef FT_FACE_FLAG_VARIATION // backcompat: ft 2.9.0.
40
+ DECLARE_FLAG (VARIATION),
41
+ #endif
42
+ #ifdef FT_FACE_FLAG_SVG // backcompat: ft 2.12.0.
43
+ DECLARE_FLAG (SVG),
44
+ #endif
45
+ #ifdef FT_FACE_FLAG_SBIX // backcompat: ft 2.12.0.
46
+ DECLARE_FLAG (SBIX),
47
+ #endif
48
+ #ifdef FT_FACE_FLAG_SBIX_OVERLAY // backcompat: ft 2.12.0.
49
+ DECLARE_FLAG (SBIX_OVERLAY),
50
+ #endif
51
+ #undef DECLARE_FLAG
52
+ };
53
+
22
54
enum class LoadFlags : FT_Int32 {
23
55
#define DECLARE_FLAG (name ) name = FT_LOAD_##name
24
56
DECLARE_FLAG (DEFAULT),
@@ -54,34 +86,54 @@ enum class LoadFlags : FT_Int32 {
54
86
#undef DECLARE_FLAG
55
87
};
56
88
89
+ enum class StyleFlags : FT_Long {
90
+ NORMAL = 0 ,
91
+ #define DECLARE_FLAG (name ) name = FT_STYLE_FLAG_##name
92
+ DECLARE_FLAG (ITALIC),
93
+ DECLARE_FLAG (BOLD),
94
+ #undef DECLARE_FLAG
95
+ };
96
+
57
97
template <typename E>
58
98
inline E operator &(E a, const E& b)
59
99
{
60
- static_assert (std::is_same<E, LoadFlags>::value, " You must use LoadFlags here" );
100
+ static_assert (std::is_same<E, FaceFlags>::value ||
101
+ std::is_same<E, LoadFlags>::value ||
102
+ std::is_same<E, StyleFlags>::value,
103
+ " You must use Flags here" );
61
104
return static_cast <E>(static_cast <std::underlying_type_t <E>>(a) &
62
105
static_cast <std::underlying_type_t <E>>(b));
63
106
}
64
107
65
108
template <typename E>
66
109
inline E operator |(E a, const E& b)
67
110
{
68
- static_assert (std::is_same<E, LoadFlags>::value, " You must use LoadFlags here" );
111
+ static_assert (std::is_same<E, FaceFlags>::value ||
112
+ std::is_same<E, LoadFlags>::value ||
113
+ std::is_same<E, StyleFlags>::value,
114
+ " You must use Flags here" );
69
115
return static_cast <E>(static_cast <std::underlying_type_t <E>>(a) |
70
116
static_cast <std::underlying_type_t <E>>(b));
71
117
}
72
118
73
119
template <typename E>
74
120
inline E operator ^(E a, const E& b)
75
121
{
76
- static_assert (std::is_same<E, LoadFlags>::value, " You must use LoadFlags here" );
122
+ static_assert (std::is_same<E, FaceFlags>::value ||
123
+ std::is_same<E, LoadFlags>::value ||
124
+ std::is_same<E, StyleFlags>::value,
125
+ " You must use Flags here" );
77
126
return static_cast <E>(static_cast <std::underlying_type_t <E>>(a) ^
78
127
static_cast <std::underlying_type_t <E>>(b));
79
128
}
80
129
81
130
template <typename E>
82
131
inline E operator ~(E a)
83
132
{
84
- static_assert (std::is_same<E, LoadFlags>::value, " You must use LoadFlags here" );
133
+ static_assert (std::is_same<E, FaceFlags>::value ||
134
+ std::is_same<E, LoadFlags>::value ||
135
+ std::is_same<E, StyleFlags>::value,
136
+ " You must use Flags here" );
85
137
return static_cast <E>(~static_cast <std::underlying_type_t <E>>(a));
86
138
}
87
139
@@ -989,16 +1041,16 @@ PyFT2Font_style_name(PyFT2Font *self)
989
1041
return name;
990
1042
}
991
1043
992
- static FT_Long
1044
+ static FaceFlags
993
1045
PyFT2Font_face_flags (PyFT2Font *self)
994
1046
{
995
- return self->x ->get_face ()->face_flags ;
1047
+ return static_cast <FaceFlags>( self->x ->get_face ()->face_flags ) ;
996
1048
}
997
1049
998
- static FT_Long
1050
+ static StyleFlags
999
1051
PyFT2Font_style_flags (PyFT2Font *self)
1000
1052
{
1001
- return self->x ->get_face ()->style_flags ;
1053
+ return static_cast <StyleFlags>( self->x ->get_face ()->style_flags ) ;
1002
1054
}
1003
1055
1004
1056
static FT_Long
@@ -1145,6 +1197,20 @@ ft2font__getattr__(std::string name) {
1145
1197
DEPRECATE_ATTR_FROM_FLAG (LOAD_TARGET_LCD, LoadFlags, TARGET_LCD);
1146
1198
DEPRECATE_ATTR_FROM_FLAG (LOAD_TARGET_LCD_V, LoadFlags, TARGET_LCD_V);
1147
1199
1200
+ DEPRECATE_ATTR_FROM_FLAG (SCALABLE, FaceFlags, SCALABLE);
1201
+ DEPRECATE_ATTR_FROM_FLAG (FIXED_SIZES, FaceFlags, FIXED_SIZES);
1202
+ DEPRECATE_ATTR_FROM_FLAG (FIXED_WIDTH, FaceFlags, FIXED_WIDTH);
1203
+ DEPRECATE_ATTR_FROM_FLAG (SFNT, FaceFlags, SFNT);
1204
+ DEPRECATE_ATTR_FROM_FLAG (HORIZONTAL, FaceFlags, HORIZONTAL);
1205
+ DEPRECATE_ATTR_FROM_FLAG (VERTICAL, FaceFlags, VERTICAL);
1206
+ DEPRECATE_ATTR_FROM_FLAG (KERNING, FaceFlags, KERNING);
1207
+ DEPRECATE_ATTR_FROM_FLAG (FAST_GLYPHS, FaceFlags, FAST_GLYPHS);
1208
+ DEPRECATE_ATTR_FROM_FLAG (MULTIPLE_MASTERS, FaceFlags, MULTIPLE_MASTERS);
1209
+ DEPRECATE_ATTR_FROM_FLAG (GLYPH_NAMES, FaceFlags, GLYPH_NAMES);
1210
+ DEPRECATE_ATTR_FROM_FLAG (EXTERNAL_STREAM, FaceFlags, EXTERNAL_STREAM);
1211
+
1212
+ DEPRECATE_ATTR_FROM_FLAG (ITALIC, StyleFlags, ITALIC);
1213
+ DEPRECATE_ATTR_FROM_FLAG (BOLD, StyleFlags, BOLD);
1148
1214
#undef DEPRECATE_ATTR_FROM_FLAG
1149
1215
1150
1216
throw py::attribute_error (
@@ -1177,6 +1243,42 @@ PYBIND11_MODULE(ft2font, m)
1177
1243
.def (py::self ^ py::self) \
1178
1244
.def (~py::self)
1179
1245
1246
+ py::enum_<FaceFlags>(m, " FaceFlags" , py::arithmetic ())
1247
+ #define DECLARE_ENUM (name ) .value(#name, FaceFlags::name)
1248
+ DECLARE_ENUM (SCALABLE)
1249
+ DECLARE_ENUM (FIXED_SIZES)
1250
+ DECLARE_ENUM (FIXED_WIDTH)
1251
+ DECLARE_ENUM (SFNT)
1252
+ DECLARE_ENUM (HORIZONTAL)
1253
+ DECLARE_ENUM (VERTICAL)
1254
+ DECLARE_ENUM (KERNING)
1255
+ DECLARE_ENUM (FAST_GLYPHS)
1256
+ DECLARE_ENUM (MULTIPLE_MASTERS)
1257
+ DECLARE_ENUM (GLYPH_NAMES)
1258
+ DECLARE_ENUM (EXTERNAL_STREAM)
1259
+ DECLARE_ENUM (HINTER)
1260
+ DECLARE_ENUM (CID_KEYED)
1261
+ DECLARE_ENUM (TRICKY)
1262
+ DECLARE_ENUM (COLOR)
1263
+ #ifdef FT_FACE_FLAG_VARIATION // backcompat: ft 2.9.0.
1264
+ DECLARE_ENUM (VARIATION)
1265
+ #endif
1266
+ #ifdef FT_FACE_FLAG_SVG // backcompat: ft 2.12.0.
1267
+ DECLARE_ENUM (SVG)
1268
+ #endif
1269
+ #ifdef FT_FACE_FLAG_SBIX // backcompat: ft 2.12.0.
1270
+ DECLARE_ENUM (SBIX)
1271
+ #endif
1272
+ #ifdef FT_FACE_FLAG_SBIX_OVERLAY // backcompat: ft 2.12.0.
1273
+ DECLARE_ENUM (SBIX_OVERLAY)
1274
+ #endif
1275
+ #undef DECLARE_ENUM
1276
+ ENUM_BITWISE_OPS
1277
+ .def (" __contains__" , [](const FaceFlags a, const FaceFlags b) -> bool {
1278
+ return (a & b) == b;
1279
+ }, py::is_operator ())
1280
+ ;
1281
+
1180
1282
py::enum_<LoadFlags>(m, " LoadFlags" , py::arithmetic ())
1181
1283
#define DECLARE_ENUM (name ) .value(#name, LoadFlags::name)
1182
1284
DECLARE_ENUM (DEFAULT)
@@ -1218,6 +1320,18 @@ PYBIND11_MODULE(ft2font, m)
1218
1320
}, py::is_operator ())
1219
1321
;
1220
1322
1323
+ py::enum_<StyleFlags>(m, " StyleFlags" , py::arithmetic ())
1324
+ #define DECLARE_ENUM (name ) .value(#name, StyleFlags::name)
1325
+ DECLARE_ENUM (NORMAL)
1326
+ DECLARE_ENUM (ITALIC)
1327
+ DECLARE_ENUM (BOLD)
1328
+ #undef DECLARE_ENUM
1329
+ ENUM_BITWISE_OPS
1330
+ .def (" __contains__" , [](const StyleFlags a, const StyleFlags b) -> bool {
1331
+ return (a & b) == b;
1332
+ }, py::is_operator ())
1333
+ ;
1334
+
1221
1335
py::enum_<FT_Kerning_Mode>(m, " Kerning" )
1222
1336
#define DECLARE_ENUM (name ) .value(#name, FT_KERNING_##name)
1223
1337
DECLARE_ENUM (DEFAULT)
@@ -1368,17 +1482,4 @@ PYBIND11_MODULE(ft2font, m)
1368
1482
m.attr (" __freetype_version__" ) = version_string;
1369
1483
m.attr (" __freetype_build_type__" ) = FREETYPE_BUILD_TYPE;
1370
1484
m.def (" __getattr__" , ft2font__getattr__);
1371
- m.attr (" SCALABLE" ) = FT_FACE_FLAG_SCALABLE;
1372
- m.attr (" FIXED_SIZES" ) = FT_FACE_FLAG_FIXED_SIZES;
1373
- m.attr (" FIXED_WIDTH" ) = FT_FACE_FLAG_FIXED_WIDTH;
1374
- m.attr (" SFNT" ) = FT_FACE_FLAG_SFNT;
1375
- m.attr (" HORIZONTAL" ) = FT_FACE_FLAG_HORIZONTAL;
1376
- m.attr (" VERTICAL" ) = FT_FACE_FLAG_VERTICAL;
1377
- m.attr (" KERNING" ) = FT_FACE_FLAG_KERNING;
1378
- m.attr (" FAST_GLYPHS" ) = FT_FACE_FLAG_FAST_GLYPHS;
1379
- m.attr (" MULTIPLE_MASTERS" ) = FT_FACE_FLAG_MULTIPLE_MASTERS;
1380
- m.attr (" GLYPH_NAMES" ) = FT_FACE_FLAG_GLYPH_NAMES;
1381
- m.attr (" EXTERNAL_STREAM" ) = FT_FACE_FLAG_EXTERNAL_STREAM;
1382
- m.attr (" ITALIC" ) = FT_STYLE_FLAG_ITALIC;
1383
- m.attr (" BOLD" ) = FT_STYLE_FLAG_BOLD;
1384
1485
}
0 commit comments