diff options
-rw-r--r-- | include/libnsfb.h | 15 | ||||
-rw-r--r-- | src/surface/surface.c | 11 |
2 files changed, 26 insertions, 0 deletions
diff --git a/include/libnsfb.h b/include/libnsfb.h index dfb720c..d52d821 100644 --- a/include/libnsfb.h +++ b/include/libnsfb.h @@ -58,6 +58,21 @@ enum nsfb_format_e { NSFB_FMT_I1, /* black and white */ }; +/** Callback for surface enumeration + * + * @param The context you gave for the enumeration + * @param The name of a surface registered with libnsfb + * @param The type of that surface for use with ::nsfb_new + */ +typedef void (*surface_enumeration_cb)(void *, const char *, enum nsfb_type_e); + +/** Enumerate surface types registered with libnsfb + * + * @param cb The callback to call with each surface + * @param context The context to pass to the enumeration callback + */ +void nsfb_enumerate_surface_types(surface_enumeration_cb cb, void *context); + /** Select frontend type from a name. * * @param name The name to select a frontend. diff --git a/src/surface/surface.c b/src/surface/surface.c index f3127bd..426efa9 100644 --- a/src/surface/surface.c +++ b/src/surface/surface.c @@ -151,6 +151,17 @@ nsfb_type_from_name(const char *name) return NSFB_SURFACE_NONE; } +/* exported interface defined in libnsfb.h */ +void +nsfb_enumerate_surface_types(surface_enumeration_cb cb, void *context) +{ + int fend_loop; + + for (fend_loop = 0; fend_loop < surface_count; fend_loop++) { + cb(context, surfaces[fend_loop].name, surfaces[fend_loop].type); + } +} + /* * Local variables: * c-basic-offset: 4 |