From 1440a3a8cb8b44c4d762758c20b1fc31653ff187 Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Mon, 24 Feb 2020 10:56:37 +0000 Subject: surface: Add basic surface enumerator Signed-off-by: Daniel Silverstone --- include/libnsfb.h | 15 +++++++++++++++ src/surface/surface.c | 11 +++++++++++ 2 files changed, 26 insertions(+) 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 -- cgit v1.2.1