diff options
author | Grigori Goronzy <greg@blackbox> | 2009-07-12 08:01:23 +0200 |
---|---|---|
committer | Grigori Goronzy <greg@blackbox> | 2009-07-12 08:02:52 +0200 |
commit | 71fc0fbbf34110050bda200d25eb230b8b044324 (patch) | |
tree | 15cc23637cf7a1c461244cfcc3f2c4bf98ab31ca /libass | |
parent | d3cd5b0148d64ae0f6e288e69b09acfe639fdcce (diff) | |
download | libass-71fc0fbbf34110050bda200d25eb230b8b044324.tar.bz2 libass-71fc0fbbf34110050bda200d25eb230b8b044324.tar.xz |
Allow passing user data to callback
It is often useful or necessary to pass custom data to a callback.
Add an argument to the callback registering function to pass a void
pointer object to the callback each time it is called.
Diffstat (limited to 'libass')
-rw-r--r-- | libass/ass.h | 3 | ||||
-rw-r--r-- | libass/ass_library.c | 12 | ||||
-rw-r--r-- | libass/ass_library.h | 3 | ||||
-rw-r--r-- | libass/ass_utils.c | 2 |
4 files changed, 14 insertions, 6 deletions
diff --git a/libass/ass.h b/libass/ass.h index e0160d6..0a03ec2 100644 --- a/libass/ass.h +++ b/libass/ass.h @@ -71,7 +71,8 @@ void ass_set_style_overrides(ass_library_t *priv, char **list); void ass_process_force_style(ass_track_t *track); void ass_set_message_cb(ass_library_t *priv, - void (*msg_cb)(int, char *, va_list *)); + void (*msg_cb)(int, char *, va_list *, void *), + void *data); /** * \brief initialize the renderer diff --git a/libass/ass_library.c b/libass/ass_library.c index 2a8f5b2..9b6da02 100644 --- a/libass/ass_library.c +++ b/libass/ass_library.c @@ -28,7 +28,7 @@ #include "ass_library.h" #include "ass_utils.h" -static void ass_msg_handler(int level, char *fmt, va_list *va) +static void ass_msg_handler(int level, char *fmt, va_list *va, void *data) { if (level > MSGL_INFO) return; @@ -132,11 +132,17 @@ void ass_clear_fonts(ass_library_t *priv) * Register a message callback function with libass. Without setting one, * a default handler is used which prints everything with MSGL_INFO or * higher to the standard output. + * + * \param msg_cb the callback function + * \param data additional data that will be passed to the callback */ void ass_set_message_cb(ass_library_t *priv, - void (*msg_cb)(int, char *, va_list *)) + void (*msg_cb)(int, char *, va_list *, void *), + void *data) { - if (msg_cb) + if (msg_cb) { priv->msg_callback = msg_cb; + priv->msg_callback_data = data; + } } diff --git a/libass/ass_library.h b/libass/ass_library.h index a73dd6c..85b0842 100644 --- a/libass/ass_library.h +++ b/libass/ass_library.h @@ -36,7 +36,8 @@ struct ass_library_s { ass_fontdata_t *fontdata; int num_fontdata; - void (*msg_callback)(int, char *, va_list *); + void (*msg_callback)(int, char *, va_list *, void *); + void *msg_callback_data; }; #endif /* LIBASS_LIBRARY_H */ diff --git a/libass/ass_utils.c b/libass/ass_utils.c index 0592d33..56ca0ef 100644 --- a/libass/ass_utils.c +++ b/libass/ass_utils.c @@ -126,7 +126,7 @@ void ass_msg(ass_library_t *priv, int lvl, char *fmt, ...) { va_list va; va_start(va, fmt); - priv->msg_callback(lvl, fmt, &va); + priv->msg_callback(lvl, fmt, &va, priv->msg_callback_data); va_end(va); } |