Skip to content

Commit 1e66eef

Browse files
authored
Add flags helper (#284)
Similar to #47, but for flags (e.g. VipsForeignPngFilter).
1 parent f7f724c commit 1e66eef

File tree

2 files changed

+35
-6
lines changed

2 files changed

+35
-6
lines changed

pyvips/base.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,19 @@ def values_for_enum(gtype):
129129

130130
return values
131131

132+
def values_for_flag(gtype):
133+
"""Get all values for a flag (gtype)."""
134+
135+
g_type_class = gobject_lib.g_type_class_ref(gtype)
136+
g_flags_class = ffi.cast('GFlagsClass *', g_type_class)
137+
138+
values = []
139+
140+
for i in range(0, g_flags_class.n_values):
141+
value = _to_string(g_flags_class.values[i].value_nick)
142+
values.append(value)
143+
144+
return values
132145

133146
__all__ = [
134147
'leak_set',
@@ -142,5 +155,6 @@ def values_for_enum(gtype):
142155
'type_name',
143156
'type_map',
144157
'type_from_name',
145-
'values_for_enum'
158+
'values_for_enum',
159+
'values_for_flag'
146160
]

pyvips/vdecls.py

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -177,14 +177,29 @@ def cdefs(features):
177177
} GEnumValue;
178178
179179
typedef struct _GEnumClass {
180-
GTypeClass *g_type_class;
180+
GTypeClass *g_type_class;
181181
182-
int minimum;
183-
int maximum;
184-
unsigned int n_values;
185-
GEnumValue *values;
182+
int minimum;
183+
int maximum;
184+
unsigned int n_values;
185+
GEnumValue *values;
186186
} GEnumClass;
187187
188+
typedef struct _GFlagsValue {
189+
unsigned int value;
190+
191+
const char *value_name;
192+
const char *value_nick;
193+
} GFlagsValue;
194+
195+
typedef struct _GFlagsClass {
196+
GTypeClass *g_type_class;
197+
198+
unsigned int mask;
199+
unsigned int n_values;
200+
GFlagsValue *values;
201+
} GFlagsClass;
202+
188203
void* g_type_class_ref (GType type);
189204
190205
void* g_object_new (GType type, void*);

0 commit comments

Comments
 (0)