display-wayland: Replace scaler with viewporter
[glsdk/omapdrmtest.git] / util / viewporter-client-protocol.h
1 /* Generated by wayland-scanner 1.13.0 */
3 #ifndef VIEWPORTER_CLIENT_PROTOCOL_H
4 #define VIEWPORTER_CLIENT_PROTOCOL_H
6 #include <stdint.h>
7 #include <stddef.h>
8 #include "wayland-client.h"
10 #ifdef  __cplusplus
11 extern "C" {
12 #endif
14 /**
15  * @page page_viewporter The viewporter protocol
16  * @section page_ifaces_viewporter Interfaces
17  * - @subpage page_iface_wp_viewporter - surface cropping and scaling
18  * - @subpage page_iface_wp_viewport - crop and scale interface to a wl_surface
19  * @section page_copyright_viewporter Copyright
20  * <pre>
21  *
22  * Copyright © 2013-2016 Collabora, Ltd.
23  *
24  * Permission is hereby granted, free of charge, to any person obtaining a
25  * copy of this software and associated documentation files (the "Software"),
26  * to deal in the Software without restriction, including without limitation
27  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
28  * and/or sell copies of the Software, and to permit persons to whom the
29  * Software is furnished to do so, subject to the following conditions:
30  *
31  * The above copyright notice and this permission notice (including the next
32  * paragraph) shall be included in all copies or substantial portions of the
33  * Software.
34  *
35  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
36  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
37  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
38  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
39  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
40  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
41  * DEALINGS IN THE SOFTWARE.
42  * </pre>
43  */
44 struct wl_surface;
45 struct wp_viewport;
46 struct wp_viewporter;
48 /**
49  * @page page_iface_wp_viewporter wp_viewporter
50  * @section page_iface_wp_viewporter_desc Description
51  *
52  * The global interface exposing surface cropping and scaling
53  * capabilities is used to instantiate an interface extension for a
54  * wl_surface object. This extended interface will then allow
55  * cropping and scaling the surface contents, effectively
56  * disconnecting the direct relationship between the buffer and the
57  * surface size.
58  * @section page_iface_wp_viewporter_api API
59  * See @ref iface_wp_viewporter.
60  */
61 /**
62  * @defgroup iface_wp_viewporter The wp_viewporter interface
63  *
64  * The global interface exposing surface cropping and scaling
65  * capabilities is used to instantiate an interface extension for a
66  * wl_surface object. This extended interface will then allow
67  * cropping and scaling the surface contents, effectively
68  * disconnecting the direct relationship between the buffer and the
69  * surface size.
70  */
71 extern const struct wl_interface wp_viewporter_interface;
72 /**
73  * @page page_iface_wp_viewport wp_viewport
74  * @section page_iface_wp_viewport_desc Description
75  *
76  * An additional interface to a wl_surface object, which allows the
77  * client to specify the cropping and scaling of the surface
78  * contents.
79  *
80  * This interface works with two concepts: the source rectangle (src_x,
81  * src_y, src_width, src_height), and the destination size (dst_width,
82  * dst_height). The contents of the source rectangle are scaled to the
83  * destination size, and content outside the source rectangle is ignored.
84  * This state is double-buffered, and is applied on the next
85  * wl_surface.commit.
86  *
87  * The two parts of crop and scale state are independent: the source
88  * rectangle, and the destination size. Initially both are unset, that
89  * is, no scaling is applied. The whole of the current wl_buffer is
90  * used as the source, and the surface size is as defined in
91  * wl_surface.attach.
92  *
93  * If the destination size is set, it causes the surface size to become
94  * dst_width, dst_height. The source (rectangle) is scaled to exactly
95  * this size. This overrides whatever the attached wl_buffer size is,
96  * unless the wl_buffer is NULL. If the wl_buffer is NULL, the surface
97  * has no content and therefore no size. Otherwise, the size is always
98  * at least 1x1 in surface local coordinates.
99  *
100  * If the source rectangle is set, it defines what area of the wl_buffer is
101  * taken as the source. If the source rectangle is set and the destination
102  * size is not set, then src_width and src_height must be integers, and the
103  * surface size becomes the source rectangle size. This results in cropping
104  * without scaling. If src_width or src_height are not integers and
105  * destination size is not set, the bad_size protocol error is raised when
106  * the surface state is applied.
107  *
108  * The coordinate transformations from buffer pixel coordinates up to
109  * the surface-local coordinates happen in the following order:
110  * 1. buffer_transform (wl_surface.set_buffer_transform)
111  * 2. buffer_scale (wl_surface.set_buffer_scale)
112  * 3. crop and scale (wp_viewport.set*)
113  * This means, that the source rectangle coordinates of crop and scale
114  * are given in the coordinates after the buffer transform and scale,
115  * i.e. in the coordinates that would be the surface-local coordinates
116  * if the crop and scale was not applied.
117  *
118  * If src_x or src_y are negative, the bad_value protocol error is raised.
119  * Otherwise, if the source rectangle is partially or completely outside of
120  * the non-NULL wl_buffer, then the out_of_buffer protocol error is raised
121  * when the surface state is applied. A NULL wl_buffer does not raise the
122  * out_of_buffer error.
123  *
124  * The x, y arguments of wl_surface.attach are applied as normal to
125  * the surface. They indicate how many pixels to remove from the
126  * surface size from the left and the top. In other words, they are
127  * still in the surface-local coordinate system, just like dst_width
128  * and dst_height are.
129  *
130  * If the wl_surface associated with the wp_viewport is destroyed,
131  * all wp_viewport requests except 'destroy' raise the protocol error
132  * no_surface.
133  *
134  * If the wp_viewport object is destroyed, the crop and scale
135  * state is removed from the wl_surface. The change will be applied
136  * on the next wl_surface.commit.
137  * @section page_iface_wp_viewport_api API
138  * See @ref iface_wp_viewport.
139  */
140 /**
141  * @defgroup iface_wp_viewport The wp_viewport interface
142  *
143  * An additional interface to a wl_surface object, which allows the
144  * client to specify the cropping and scaling of the surface
145  * contents.
146  *
147  * This interface works with two concepts: the source rectangle (src_x,
148  * src_y, src_width, src_height), and the destination size (dst_width,
149  * dst_height). The contents of the source rectangle are scaled to the
150  * destination size, and content outside the source rectangle is ignored.
151  * This state is double-buffered, and is applied on the next
152  * wl_surface.commit.
153  *
154  * The two parts of crop and scale state are independent: the source
155  * rectangle, and the destination size. Initially both are unset, that
156  * is, no scaling is applied. The whole of the current wl_buffer is
157  * used as the source, and the surface size is as defined in
158  * wl_surface.attach.
159  *
160  * If the destination size is set, it causes the surface size to become
161  * dst_width, dst_height. The source (rectangle) is scaled to exactly
162  * this size. This overrides whatever the attached wl_buffer size is,
163  * unless the wl_buffer is NULL. If the wl_buffer is NULL, the surface
164  * has no content and therefore no size. Otherwise, the size is always
165  * at least 1x1 in surface local coordinates.
166  *
167  * If the source rectangle is set, it defines what area of the wl_buffer is
168  * taken as the source. If the source rectangle is set and the destination
169  * size is not set, then src_width and src_height must be integers, and the
170  * surface size becomes the source rectangle size. This results in cropping
171  * without scaling. If src_width or src_height are not integers and
172  * destination size is not set, the bad_size protocol error is raised when
173  * the surface state is applied.
174  *
175  * The coordinate transformations from buffer pixel coordinates up to
176  * the surface-local coordinates happen in the following order:
177  * 1. buffer_transform (wl_surface.set_buffer_transform)
178  * 2. buffer_scale (wl_surface.set_buffer_scale)
179  * 3. crop and scale (wp_viewport.set*)
180  * This means, that the source rectangle coordinates of crop and scale
181  * are given in the coordinates after the buffer transform and scale,
182  * i.e. in the coordinates that would be the surface-local coordinates
183  * if the crop and scale was not applied.
184  *
185  * If src_x or src_y are negative, the bad_value protocol error is raised.
186  * Otherwise, if the source rectangle is partially or completely outside of
187  * the non-NULL wl_buffer, then the out_of_buffer protocol error is raised
188  * when the surface state is applied. A NULL wl_buffer does not raise the
189  * out_of_buffer error.
190  *
191  * The x, y arguments of wl_surface.attach are applied as normal to
192  * the surface. They indicate how many pixels to remove from the
193  * surface size from the left and the top. In other words, they are
194  * still in the surface-local coordinate system, just like dst_width
195  * and dst_height are.
196  *
197  * If the wl_surface associated with the wp_viewport is destroyed,
198  * all wp_viewport requests except 'destroy' raise the protocol error
199  * no_surface.
200  *
201  * If the wp_viewport object is destroyed, the crop and scale
202  * state is removed from the wl_surface. The change will be applied
203  * on the next wl_surface.commit.
204  */
205 extern const struct wl_interface wp_viewport_interface;
207 #ifndef WP_VIEWPORTER_ERROR_ENUM
208 #define WP_VIEWPORTER_ERROR_ENUM
209 enum wp_viewporter_error {
210         /**
211          * the surface already has a viewport object associated
212          */
213         WP_VIEWPORTER_ERROR_VIEWPORT_EXISTS = 0,
214 };
215 #endif /* WP_VIEWPORTER_ERROR_ENUM */
217 #define WP_VIEWPORTER_DESTROY 0
218 #define WP_VIEWPORTER_GET_VIEWPORT 1
221 /**
222  * @ingroup iface_wp_viewporter
223  */
224 #define WP_VIEWPORTER_DESTROY_SINCE_VERSION 1
225 /**
226  * @ingroup iface_wp_viewporter
227  */
228 #define WP_VIEWPORTER_GET_VIEWPORT_SINCE_VERSION 1
230 /** @ingroup iface_wp_viewporter */
231 static inline void
232 wp_viewporter_set_user_data(struct wp_viewporter *wp_viewporter, void *user_data)
234         wl_proxy_set_user_data((struct wl_proxy *) wp_viewporter, user_data);
237 /** @ingroup iface_wp_viewporter */
238 static inline void *
239 wp_viewporter_get_user_data(struct wp_viewporter *wp_viewporter)
241         return wl_proxy_get_user_data((struct wl_proxy *) wp_viewporter);
244 static inline uint32_t
245 wp_viewporter_get_version(struct wp_viewporter *wp_viewporter)
247         return wl_proxy_get_version((struct wl_proxy *) wp_viewporter);
250 /**
251  * @ingroup iface_wp_viewporter
252  *
253  * Informs the server that the client will not be using this
254  * protocol object anymore. This does not affect any other objects,
255  * wp_viewport objects included.
256  */
257 static inline void
258 wp_viewporter_destroy(struct wp_viewporter *wp_viewporter)
260         wl_proxy_marshal((struct wl_proxy *) wp_viewporter,
261                          WP_VIEWPORTER_DESTROY);
263         wl_proxy_destroy((struct wl_proxy *) wp_viewporter);
266 /**
267  * @ingroup iface_wp_viewporter
268  *
269  * Instantiate an interface extension for the given wl_surface to
270  * crop and scale its content. If the given wl_surface already has
271  * a wp_viewport object associated, the viewport_exists
272  * protocol error is raised.
273  */
274 static inline struct wp_viewport *
275 wp_viewporter_get_viewport(struct wp_viewporter *wp_viewporter, struct wl_surface *surface)
277         struct wl_proxy *id;
279         id = wl_proxy_marshal_constructor((struct wl_proxy *) wp_viewporter,
280                          WP_VIEWPORTER_GET_VIEWPORT, &wp_viewport_interface, NULL, surface);
282         return (struct wp_viewport *) id;
285 #ifndef WP_VIEWPORT_ERROR_ENUM
286 #define WP_VIEWPORT_ERROR_ENUM
287 enum wp_viewport_error {
288         /**
289          * negative or zero values in width or height
290          */
291         WP_VIEWPORT_ERROR_BAD_VALUE = 0,
292         /**
293          * destination size is not integer
294          */
295         WP_VIEWPORT_ERROR_BAD_SIZE = 1,
296         /**
297          * source rectangle extends outside of the content area
298          */
299         WP_VIEWPORT_ERROR_OUT_OF_BUFFER = 2,
300         /**
301          * the wl_surface was destroyed
302          */
303         WP_VIEWPORT_ERROR_NO_SURFACE = 3,
304 };
305 #endif /* WP_VIEWPORT_ERROR_ENUM */
307 #define WP_VIEWPORT_DESTROY 0
308 #define WP_VIEWPORT_SET_SOURCE 1
309 #define WP_VIEWPORT_SET_DESTINATION 2
312 /**
313  * @ingroup iface_wp_viewport
314  */
315 #define WP_VIEWPORT_DESTROY_SINCE_VERSION 1
316 /**
317  * @ingroup iface_wp_viewport
318  */
319 #define WP_VIEWPORT_SET_SOURCE_SINCE_VERSION 1
320 /**
321  * @ingroup iface_wp_viewport
322  */
323 #define WP_VIEWPORT_SET_DESTINATION_SINCE_VERSION 1
325 /** @ingroup iface_wp_viewport */
326 static inline void
327 wp_viewport_set_user_data(struct wp_viewport *wp_viewport, void *user_data)
329         wl_proxy_set_user_data((struct wl_proxy *) wp_viewport, user_data);
332 /** @ingroup iface_wp_viewport */
333 static inline void *
334 wp_viewport_get_user_data(struct wp_viewport *wp_viewport)
336         return wl_proxy_get_user_data((struct wl_proxy *) wp_viewport);
339 static inline uint32_t
340 wp_viewport_get_version(struct wp_viewport *wp_viewport)
342         return wl_proxy_get_version((struct wl_proxy *) wp_viewport);
345 /**
346  * @ingroup iface_wp_viewport
347  *
348  * The associated wl_surface's crop and scale state is removed.
349  * The change is applied on the next wl_surface.commit.
350  */
351 static inline void
352 wp_viewport_destroy(struct wp_viewport *wp_viewport)
354         wl_proxy_marshal((struct wl_proxy *) wp_viewport,
355                          WP_VIEWPORT_DESTROY);
357         wl_proxy_destroy((struct wl_proxy *) wp_viewport);
360 /**
361  * @ingroup iface_wp_viewport
362  *
363  * Set the source rectangle of the associated wl_surface. See
364  * wp_viewport for the description, and relation to the wl_buffer
365  * size.
366  *
367  * If all of x, y, width and height are -1.0, the source rectangle is
368  * unset instead. Any other set of values where width or height are zero
369  * or negative, or x or y are negative, raise the bad_value protocol
370  * error.
371  *
372  * The crop and scale state is double-buffered state, and will be
373  * applied on the next wl_surface.commit.
374  */
375 static inline void
376 wp_viewport_set_source(struct wp_viewport *wp_viewport, wl_fixed_t x, wl_fixed_t y, wl_fixed_t width, wl_fixed_t height)
378         wl_proxy_marshal((struct wl_proxy *) wp_viewport,
379                          WP_VIEWPORT_SET_SOURCE, x, y, width, height);
382 /**
383  * @ingroup iface_wp_viewport
384  *
385  * Set the destination size of the associated wl_surface. See
386  * wp_viewport for the description, and relation to the wl_buffer
387  * size.
388  *
389  * If width is -1 and height is -1, the destination size is unset
390  * instead. Any other pair of values for width and height that
391  * contains zero or negative values raises the bad_value protocol
392  * error.
393  *
394  * The crop and scale state is double-buffered state, and will be
395  * applied on the next wl_surface.commit.
396  */
397 static inline void
398 wp_viewport_set_destination(struct wp_viewport *wp_viewport, int32_t width, int32_t height)
400         wl_proxy_marshal((struct wl_proxy *) wp_viewport,
401                          WP_VIEWPORT_SET_DESTINATION, width, height);
404 #ifdef  __cplusplus
406 #endif
408 #endif