From 601a2cbbcbd28c4170b453e7bd476adcf1eb1266 Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Tue, 21 Jul 2015 20:53:40 +0100 Subject: Add request callback wrappers. --- src/request.h | 141 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 src/request.h (limited to 'src/request.h') diff --git a/src/request.h b/src/request.h new file mode 100644 index 0000000..c28468e --- /dev/null +++ b/src/request.h @@ -0,0 +1,141 @@ +/* + * This file is part of LibNSLayout + * Licensed under the ISC License, http://opensource.org/licenses/ISC + * Copyright 2015 Michael Drake + */ + +/** \file src/request.h + * Client callback wrappers + */ + +#ifndef nslayout_request_h_ +#define nslayout_request_h_ + +#include + +/** + * Perform GET_RESOURCE client callback + * + * \param[in] layout Layout object that the request concerns. + * \param[in] url Absolute URL to request replaced object handle for. + * \param[out] replaced Returns the replaced element content handle. + * \return NSLAYOUT_OK on success, appropriate error otherwise. + */ +static inline nslayout_error nsl_request_get_resource( + nslayout_layout *layout, + const char *url, + nslayout_replaced **replaced) +{ + nslayout_error err; + nslayout_request req; + + req.type = NSLAYOUT_GET_RESOURCE; + req.request.get_resource.url = url; + + err = layout->cb(layout, layout->pw, &req); + + *replaced = *req.response.get_resource.replaced; + return err; +} + +/** + * Perform CREATE_REPLACED client callback + * + * \param[in] layout Layout object that the request concerns. + * \param[in] element DOM element that needs replacement object. + * \param[out] replaced Returns the replaced element content handle. + * \return NSLAYOUT_OK on success, appropriate error otherwise. + */ +static inline nslayout_error nsl_request_create_replaced( + nslayout_layout *layout, + dom_element *element, + nslayout_replaced **replaced) +{ + nslayout_error err; + nslayout_request req; + + req.type = NSLAYOUT_CREATE_REPLACED; + req.request.create_replaced.element = element; + + err = layout->cb(layout, layout->pw, &req); + + *replaced = *req.response.create_replaced.replaced; + return err; +} + +/** + * Perform RENDER client callback + * + * \param[in] layout Layout object being rendered. + * \param[in] list Render list to render. + * \return NSLAYOUT_OK on success, appropriate error otherwise. + */ +static inline nslayout_error nsl_request_render( + nslayout_layout *layout, + nslayout_render_list *list) +{ + nslayout_error err; + nslayout_request req; + + req.type = NSLAYOUT_RENDER; + req.request.render.list = list; + + err = layout->cb(layout, layout->pw, &req); + + return err; +} + +/** + * Perform SET_EXTENTS client callback + * + * \param[in] layout Layout object that the request concerns. + * \param[in] width The layout's full width. + * \param[in] height The layout's full height. + * \return NSLAYOUT_OK on success, appropriate error otherwise. + */ +static inline nslayout_error nsl_request_set_extents( + nslayout_layout *layout, + unsigned int width, + unsigned int height) +{ + nslayout_error err; + nslayout_request req; + + req.type = NSLAYOUT_SET_EXTENTS; + req.request.set_extents.width = width; + req.request.set_extents.height = height; + + err = layout->cb(layout, layout->pw, &req); + + return err; +} + +/** + * Perform GET_INTRINSIC_SIZE client callback + * + * \param[in] layout Layout object that the request concerns. + * \param[in] replaced Replaced object to get intrinsic size of. + * \param[out] width Returns the replaced object's width. + * \param[out] height Returns the replaced object's height. + * \return NSLAYOUT_OK on success, appropriate error otherwise. + */ +static inline nslayout_error nsl_request_get_intrinsic_size( + nslayout_layout *layout, + nslayout_replaced *replaced, + unsigned int *width, + unsigned int *height) +{ + nslayout_error err; + nslayout_request req; + + req.type = NSLAYOUT_GET_INTRINSIC_SIZE; + req.request.get_intrinsic_size.replaced = replaced; + + err = layout->cb(layout, layout->pw, &req); + + *width = *req.response.get_intrinsic_size.width; + *height = *req.response.get_intrinsic_size.height; + return err; +} + +#endif -- cgit v1.2.3