diff --git a/pyvips/base.py b/pyvips/base.py index ce52809..2ecc22f 100644 --- a/pyvips/base.py +++ b/pyvips/base.py @@ -1,7 +1,7 @@ # basic defs and link to ffi -from pyvips import ffi, vips_lib, gobject_lib, _to_string, _to_bytes, Error +from pyvips import ffi, vips_lib, glib_lib, gobject_lib, _to_string, _to_bytes, Error def leak_set(leak): @@ -89,6 +89,22 @@ def type_map(gtype, fn): return vips_lib.vips_type_map(gtype, cb, ffi.NULL, ffi.NULL) +def values_for_enum(gtype): + """Get all values for a enum (gtype).""" + + g_type_class = gobject_lib.g_type_class_ref(gtype) + g_enum_class = ffi.cast('GEnumClass *', g_type_class) + + values = [] + + # -1 since we always have a "last" member. + for i in range(0, g_enum_class.n_values - 1): + value = _to_string(ffi.string(g_enum_class.values[i].value_nick)) + values.append(value) + + return values + + __all__ = [ 'leak_set', 'version', @@ -100,4 +116,5 @@ def type_map(gtype, fn): 'type_name', 'type_map', 'type_from_name', + 'values_for_enum' ] diff --git a/pyvips/decls.py b/pyvips/decls.py index 1e62f8a..bd3027d 100644 --- a/pyvips/decls.py +++ b/pyvips/decls.py @@ -120,13 +120,15 @@ def cdefs(features): GType vips_interpretation_get_type (void); GType vips_operation_flags_get_type (void); GType vips_band_format_get_type (void); + GType vips_token_get_type (void); + GType vips_saveable_get_type (void); + GType vips_image_type_get_type (void); typedef struct _GData GData; typedef struct _GTypeClass GTypeClass; - typedef struct _GTypeInstance - { + typedef struct _GTypeInstance { GTypeClass *g_class; } GTypeInstance; @@ -153,6 +155,24 @@ def cdefs(features): unsigned int param_id; } GParamSpec; + typedef struct _GEnumValue { + int value; + + const char *value_name; + const char *value_nick; + } GEnumValue; + + typedef struct _GEnumClass { + GTypeClass *g_type_class; + + int minimum; + int maximum; + unsigned int n_values; + GEnumValue *values; + } GEnumClass; + + void* g_type_class_ref (GType type); + void g_object_ref (void* object); void g_object_unref (void* object);