/* Generated by wayland-scanner 1.25.90 */ #ifndef XX_FRACTIONAL_SCALE_V2_CLIENT_PROTOCOL_H #define XX_FRACTIONAL_SCALE_V2_CLIENT_PROTOCOL_H #include #include #include "wayland-client.h" #ifdef __cplusplus extern "C" { #endif /** * @page page_xx_fractional_scale_v2 The xx_fractional_scale_v2 protocol * Protocol for fractional scaling * * @section page_desc_xx_fractional_scale_v2 Description * * This protocol allows compositors and clients to communicate the * coordinate space their surfaces act in. * * @section page_ifaces_xx_fractional_scale_v2 Interfaces * - @subpage page_iface_xx_fractional_scale_manager_v2 - creates surface scale * interfaces * - @subpage page_iface_xx_fractional_scale_v2 - interface for fractional * scaling * @section page_copyright_xx_fractional_scale_v2 Copyright *
 *
 * Copyright © 2022 Xaver Hugl
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice (including the next
 * paragraph) shall be included in all copies or substantial portions of the
 * Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 * DEALINGS IN THE SOFTWARE.
 * 
*/ struct wl_surface; struct xx_fractional_scale_manager_v2; struct xx_fractional_scale_v2; #ifndef XX_FRACTIONAL_SCALE_MANAGER_V2_INTERFACE # define XX_FRACTIONAL_SCALE_MANAGER_V2_INTERFACE /** * @page page_iface_xx_fractional_scale_manager_v2 * xx_fractional_scale_manager_v2 * @section page_iface_xx_fractional_scale_manager_v2_desc Description * * A global interface to create xx_fractional_scale_v2 interfaces. * @section page_iface_xx_fractional_scale_manager_v2_api API * See @ref iface_xx_fractional_scale_manager_v2. */ /** * @defgroup iface_xx_fractional_scale_manager_v2 The * xx_fractional_scale_manager_v2 interface * * A global interface to create xx_fractional_scale_v2 interfaces. */ extern const struct wl_interface xx_fractional_scale_manager_v2_interface; #endif #ifndef XX_FRACTIONAL_SCALE_V2_INTERFACE # define XX_FRACTIONAL_SCALE_V2_INTERFACE /** * @page page_iface_xx_fractional_scale_v2 xx_fractional_scale_v2 * @section page_iface_xx_fractional_scale_v2_desc Description * * An additional interface for a wl_surface object that allows compositor and * client to communicate in a different coordinate space, in order to enable * them to accurately describe coordinates and sizes in pixels. * The two coordinate spaces in consideration are logical and pixels, where * logical coordinates describe the size content should have and pixels * describe the size of buffers. * * A scale of one equals a lack of scaling, where the communicated values * define both logical coordinates and pixels. * A scale greater than one describes that for every logical coordinate, * more than one pixel is used, and a scale less than one describes that * multiple logical coordinates make up one pixel. * In mathematical terms, logical coordinates can be obtained by dividing * the provided values by the currently active scale. * * The initial compositor and client coordinate scale factors are 1. * @section page_iface_xx_fractional_scale_v2_api API * See @ref iface_xx_fractional_scale_v2. */ /** * @defgroup iface_xx_fractional_scale_v2 The xx_fractional_scale_v2 interface * * An additional interface for a wl_surface object that allows compositor and * client to communicate in a different coordinate space, in order to enable * them to accurately describe coordinates and sizes in pixels. * The two coordinate spaces in consideration are logical and pixels, where * logical coordinates describe the size content should have and pixels * describe the size of buffers. * * A scale of one equals a lack of scaling, where the communicated values * define both logical coordinates and pixels. * A scale greater than one describes that for every logical coordinate, * more than one pixel is used, and a scale less than one describes that * multiple logical coordinates make up one pixel. * In mathematical terms, logical coordinates can be obtained by dividing * the provided values by the currently active scale. * * The initial compositor and client coordinate scale factors are 1. */ extern const struct wl_interface xx_fractional_scale_v2_interface; #endif #ifndef XX_FRACTIONAL_SCALE_MANAGER_V2_ERROR_ENUM # define XX_FRACTIONAL_SCALE_MANAGER_V2_ERROR_ENUM enum xx_fractional_scale_manager_v2_error { /** * xx_fractional_scale_v2 for the surface already exists */ XX_FRACTIONAL_SCALE_MANAGER_V2_ERROR_FRACTIONAL_SCALE_EXISTS = 0, }; #endif /* XX_FRACTIONAL_SCALE_MANAGER_V2_ERROR_ENUM */ #define XX_FRACTIONAL_SCALE_MANAGER_V2_DESTROY 0 #define XX_FRACTIONAL_SCALE_MANAGER_V2_GET_FRACTIONAL_SCALE 1 /** * @ingroup iface_xx_fractional_scale_manager_v2 */ #define XX_FRACTIONAL_SCALE_MANAGER_V2_DESTROY_SINCE_VERSION 1 /** * @ingroup iface_xx_fractional_scale_manager_v2 */ #define XX_FRACTIONAL_SCALE_MANAGER_V2_GET_FRACTIONAL_SCALE_SINCE_VERSION 1 /** @ingroup iface_xx_fractional_scale_manager_v2 */ static inline void xx_fractional_scale_manager_v2_set_user_data( struct xx_fractional_scale_manager_v2* xx_fractional_scale_manager_v2, void* user_data) { wl_proxy_set_user_data((struct wl_proxy*)xx_fractional_scale_manager_v2, user_data); } /** @ingroup iface_xx_fractional_scale_manager_v2 */ static inline void* xx_fractional_scale_manager_v2_get_user_data( struct xx_fractional_scale_manager_v2* xx_fractional_scale_manager_v2) { return wl_proxy_get_user_data( (struct wl_proxy*)xx_fractional_scale_manager_v2); } static inline uint32_t xx_fractional_scale_manager_v2_get_version( struct xx_fractional_scale_manager_v2* xx_fractional_scale_manager_v2) { return wl_proxy_get_version((struct wl_proxy*)xx_fractional_scale_manager_v2); } /** * @ingroup iface_xx_fractional_scale_manager_v2 * * Informs the server that the client will not be using this protocol * object anymore. This does not affect any other objects. */ static inline void xx_fractional_scale_manager_v2_destroy( struct xx_fractional_scale_manager_v2* xx_fractional_scale_manager_v2) { wl_proxy_marshal_flags( (struct wl_proxy*)xx_fractional_scale_manager_v2, XX_FRACTIONAL_SCALE_MANAGER_V2_DESTROY, NULL, wl_proxy_get_version((struct wl_proxy*)xx_fractional_scale_manager_v2), WL_MARSHAL_FLAG_DESTROY); } /** * @ingroup iface_xx_fractional_scale_manager_v2 * * Create an interface object for a wl_surface to communicate scale. * If the given wl_surface already has a xx_fractional_scale_v2 object * associated, the fractional_scale_exists protocol error is raised. */ static inline struct xx_fractional_scale_v2* xx_fractional_scale_manager_v2_get_fractional_scale( struct xx_fractional_scale_manager_v2* xx_fractional_scale_manager_v2, struct wl_surface* surface) { struct wl_proxy* id; id = wl_proxy_marshal_flags( (struct wl_proxy*)xx_fractional_scale_manager_v2, XX_FRACTIONAL_SCALE_MANAGER_V2_GET_FRACTIONAL_SCALE, &xx_fractional_scale_v2_interface, wl_proxy_get_version((struct wl_proxy*)xx_fractional_scale_manager_v2), 0, NULL, surface); return (struct xx_fractional_scale_v2*)id; } #ifndef XX_FRACTIONAL_SCALE_V2_ERROR_ENUM # define XX_FRACTIONAL_SCALE_V2_ERROR_ENUM enum xx_fractional_scale_v2_error { /** * scale value is not valid */ XX_FRACTIONAL_SCALE_V2_ERROR_INVALID_SCALE = 0, }; #endif /* XX_FRACTIONAL_SCALE_V2_ERROR_ENUM */ /** * @ingroup iface_xx_fractional_scale_v2 * @struct xx_fractional_scale_v2_listener */ struct xx_fractional_scale_v2_listener { /** * set the compositor coordinate space scale factor * * This event sets a scale factor for the associated wl_surface * that describes the coordinate system the compositor will use for * events following xx_fractional_scale_v2.scale_factor. * * The scale factor is encoded in a 8.24 fixed point format. * * The compositor must not send a scale of zero. * * The client should re-render and commit a new buffer with the new * scale as soon as possible, in order to avoid artifacts caused by * the mismatch in compositor and client scales. * @param scale_8_24 surface scale factor */ void (*scale_factor)(void* data, struct xx_fractional_scale_v2* xx_fractional_scale_v2, uint32_t scale_8_24); }; /** * @ingroup iface_xx_fractional_scale_v2 */ static inline int xx_fractional_scale_v2_add_listener( struct xx_fractional_scale_v2* xx_fractional_scale_v2, const struct xx_fractional_scale_v2_listener* listener, void* data) { return wl_proxy_add_listener((struct wl_proxy*)xx_fractional_scale_v2, (void (**)(void))listener, data); } #define XX_FRACTIONAL_SCALE_V2_SET_SCALE_FACTOR 0 #define XX_FRACTIONAL_SCALE_V2_DESTROY 1 /** * @ingroup iface_xx_fractional_scale_v2 */ #define XX_FRACTIONAL_SCALE_V2_SCALE_FACTOR_SINCE_VERSION 1 /** * @ingroup iface_xx_fractional_scale_v2 */ #define XX_FRACTIONAL_SCALE_V2_SET_SCALE_FACTOR_SINCE_VERSION 1 /** * @ingroup iface_xx_fractional_scale_v2 */ #define XX_FRACTIONAL_SCALE_V2_DESTROY_SINCE_VERSION 1 /** @ingroup iface_xx_fractional_scale_v2 */ static inline void xx_fractional_scale_v2_set_user_data( struct xx_fractional_scale_v2* xx_fractional_scale_v2, void* user_data) { wl_proxy_set_user_data((struct wl_proxy*)xx_fractional_scale_v2, user_data); } /** @ingroup iface_xx_fractional_scale_v2 */ static inline void* xx_fractional_scale_v2_get_user_data( struct xx_fractional_scale_v2* xx_fractional_scale_v2) { return wl_proxy_get_user_data((struct wl_proxy*)xx_fractional_scale_v2); } static inline uint32_t xx_fractional_scale_v2_get_version( struct xx_fractional_scale_v2* xx_fractional_scale_v2) { return wl_proxy_get_version((struct wl_proxy*)xx_fractional_scale_v2); } /** * @ingroup iface_xx_fractional_scale_v2 * * This request sets a scale factor for the associated wl_surface that * describes the coordinate system the client uses for requests following * xx_fractional_scale_v2.set_scale_factor. * * The scale factor is encoded in a 8.24 fixed point format. * * If this scale factor does not match the scale factor provided by the * compositor with xx_fractional_scale_v2.scale_factor, the compositor may * apply transformations to the wl_surface that can result in blurriness * or other artifacts. * * If scale_8_24 is zero, the error invalid_scale will be raised. */ static inline void xx_fractional_scale_v2_set_scale_factor( struct xx_fractional_scale_v2* xx_fractional_scale_v2, uint32_t scale_8_24) { wl_proxy_marshal_flags( (struct wl_proxy*)xx_fractional_scale_v2, XX_FRACTIONAL_SCALE_V2_SET_SCALE_FACTOR, NULL, wl_proxy_get_version((struct wl_proxy*)xx_fractional_scale_v2), 0, scale_8_24); } /** * @ingroup iface_xx_fractional_scale_v2 * * The wl_surface's xx_fractional_scale_v2 object is destroyed, and the * associated scale is reset to 1. */ static inline void xx_fractional_scale_v2_destroy( struct xx_fractional_scale_v2* xx_fractional_scale_v2) { wl_proxy_marshal_flags( (struct wl_proxy*)xx_fractional_scale_v2, XX_FRACTIONAL_SCALE_V2_DESTROY, NULL, wl_proxy_get_version((struct wl_proxy*)xx_fractional_scale_v2), WL_MARSHAL_FLAG_DESTROY); } #ifdef __cplusplus } #endif #endif