summaryrefslogtreecommitdiff
path: root/src/request.h
blob: c28468ebcb2213148a0c2fb8918538562a0ed705 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
/*
 * This file is part of LibNSLayout
 * Licensed under the ISC License, http://opensource.org/licenses/ISC
 * Copyright 2015 Michael Drake <tlsa@netsurf-browser.org>
 */

/** \file src/request.h
 * Client callback wrappers
 */

#ifndef nslayout_request_h_
#define nslayout_request_h_

#include <libnslayout/nslayout.h>

/**
 * 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