From 55a3d9007010286bc9c4f4736b4d38855bd4c80b Mon Sep 17 00:00:00 2001 From: Kleis Auke Wolthuizen Date: Wed, 19 Aug 2020 13:28:08 +0200 Subject: [PATCH] Add flags helper Similar to #47, but for flags (e.g. VipsForeignPngFilter). --- pyvips/base.py | 16 +++++++++++++++- pyvips/vdecls.py | 25 ++++++++++++++++++++----- 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/pyvips/base.py b/pyvips/base.py index b939ae5..f4abe0b 100644 --- a/pyvips/base.py +++ b/pyvips/base.py @@ -129,6 +129,19 @@ def values_for_enum(gtype): return values +def values_for_flag(gtype): + """Get all values for a flag (gtype).""" + + g_type_class = gobject_lib.g_type_class_ref(gtype) + g_flags_class = ffi.cast('GFlagsClass *', g_type_class) + + values = [] + + for i in range(0, g_flags_class.n_values): + value = _to_string(g_flags_class.values[i].value_nick) + values.append(value) + + return values __all__ = [ 'leak_set', @@ -142,5 +155,6 @@ def values_for_enum(gtype): 'type_name', 'type_map', 'type_from_name', - 'values_for_enum' + 'values_for_enum', + 'values_for_flag' ] diff --git a/pyvips/vdecls.py b/pyvips/vdecls.py index 2cc5119..7f837c3 100644 --- a/pyvips/vdecls.py +++ b/pyvips/vdecls.py @@ -177,14 +177,29 @@ def cdefs(features): } GEnumValue; typedef struct _GEnumClass { - GTypeClass *g_type_class; + GTypeClass *g_type_class; - int minimum; - int maximum; - unsigned int n_values; - GEnumValue *values; + int minimum; + int maximum; + unsigned int n_values; + GEnumValue *values; } GEnumClass; + typedef struct _GFlagsValue { + unsigned int value; + + const char *value_name; + const char *value_nick; + } GFlagsValue; + + typedef struct _GFlagsClass { + GTypeClass *g_type_class; + + unsigned int mask; + unsigned int n_values; + GFlagsValue *values; + } GFlagsClass; + void* g_type_class_ref (GType type); void* g_object_new (GType type, void*);