Vendor pinned Linux ABI headers and Wayland protocol bindings
Record the Plasma-first backend plan and provide checksum-verified maintainer refresh tooling. Ordinary builds will consume checked-in declarations and generated marshalling code. Verified hashes and byte-identical regeneration with wayland-scanner 1.24.0.
This commit is contained in:
parent
8a1f8fbd28
commit
afed52d567
|
|
@ -0,0 +1,74 @@
|
||||||
|
/* Generated by wayland-scanner 1.24.0 */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright © 2022 Kenny Levinsen
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "wayland-util.h"
|
||||||
|
|
||||||
|
#ifndef __has_attribute
|
||||||
|
# define __has_attribute(x) 0 /* Compatibility with non-clang compilers. */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (__has_attribute(visibility) || defined(__GNUC__) && __GNUC__ >= 4)
|
||||||
|
#define WL_PRIVATE __attribute__ ((visibility("hidden")))
|
||||||
|
#else
|
||||||
|
#define WL_PRIVATE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern const struct wl_interface wl_surface_interface;
|
||||||
|
extern const struct wl_interface wp_fractional_scale_v1_interface;
|
||||||
|
|
||||||
|
static const struct wl_interface *fractional_scale_v1_types[] = {
|
||||||
|
NULL,
|
||||||
|
&wp_fractional_scale_v1_interface,
|
||||||
|
&wl_surface_interface,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wp_fractional_scale_manager_v1_requests[] = {
|
||||||
|
{ "destroy", "", fractional_scale_v1_types + 0 },
|
||||||
|
{ "get_fractional_scale", "no", fractional_scale_v1_types + 1 },
|
||||||
|
};
|
||||||
|
|
||||||
|
WL_PRIVATE const struct wl_interface wp_fractional_scale_manager_v1_interface = {
|
||||||
|
"wp_fractional_scale_manager_v1", 1,
|
||||||
|
2, wp_fractional_scale_manager_v1_requests,
|
||||||
|
0, NULL,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wp_fractional_scale_v1_requests[] = {
|
||||||
|
{ "destroy", "", fractional_scale_v1_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wp_fractional_scale_v1_events[] = {
|
||||||
|
{ "preferred_scale", "u", fractional_scale_v1_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
WL_PRIVATE const struct wl_interface wp_fractional_scale_v1_interface = {
|
||||||
|
"wp_fractional_scale_v1", 1,
|
||||||
|
1, wp_fractional_scale_v1_requests,
|
||||||
|
1, wp_fractional_scale_v1_events,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
@ -0,0 +1,264 @@
|
||||||
|
/* Generated by wayland-scanner 1.24.0 */
|
||||||
|
|
||||||
|
#ifndef FRACTIONAL_SCALE_V1_CLIENT_PROTOCOL_H
|
||||||
|
#define FRACTIONAL_SCALE_V1_CLIENT_PROTOCOL_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include "wayland-client.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @page page_fractional_scale_v1 The fractional_scale_v1 protocol
|
||||||
|
* Protocol for requesting fractional surface scales
|
||||||
|
*
|
||||||
|
* @section page_desc_fractional_scale_v1 Description
|
||||||
|
*
|
||||||
|
* This protocol allows a compositor to suggest for surfaces to render at
|
||||||
|
* fractional scales.
|
||||||
|
*
|
||||||
|
* A client can submit scaled content by utilizing wp_viewport. This is done by
|
||||||
|
* creating a wp_viewport object for the surface and setting the destination
|
||||||
|
* rectangle to the surface size before the scale factor is applied.
|
||||||
|
*
|
||||||
|
* The buffer size is calculated by multiplying the surface size by the
|
||||||
|
* intended scale.
|
||||||
|
*
|
||||||
|
* The wl_surface buffer scale should remain set to 1.
|
||||||
|
*
|
||||||
|
* If a surface has a surface-local size of 100 px by 50 px and wishes to
|
||||||
|
* submit buffers with a scale of 1.5, then a buffer of 150px by 75 px should
|
||||||
|
* be used and the wp_viewport destination rectangle should be 100 px by 50 px.
|
||||||
|
*
|
||||||
|
* For toplevel surfaces, the size is rounded halfway away from zero. The
|
||||||
|
* rounding algorithm for subsurface position and size is not defined.
|
||||||
|
*
|
||||||
|
* @section page_ifaces_fractional_scale_v1 Interfaces
|
||||||
|
* - @subpage page_iface_wp_fractional_scale_manager_v1 - fractional surface scale information
|
||||||
|
* - @subpage page_iface_wp_fractional_scale_v1 - fractional scale interface to a wl_surface
|
||||||
|
* @section page_copyright_fractional_scale_v1 Copyright
|
||||||
|
* <pre>
|
||||||
|
*
|
||||||
|
* Copyright © 2022 Kenny Levinsen
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
struct wl_surface;
|
||||||
|
struct wp_fractional_scale_manager_v1;
|
||||||
|
struct wp_fractional_scale_v1;
|
||||||
|
|
||||||
|
#ifndef WP_FRACTIONAL_SCALE_MANAGER_V1_INTERFACE
|
||||||
|
#define WP_FRACTIONAL_SCALE_MANAGER_V1_INTERFACE
|
||||||
|
/**
|
||||||
|
* @page page_iface_wp_fractional_scale_manager_v1 wp_fractional_scale_manager_v1
|
||||||
|
* @section page_iface_wp_fractional_scale_manager_v1_desc Description
|
||||||
|
*
|
||||||
|
* A global interface for requesting surfaces to use fractional scales.
|
||||||
|
* @section page_iface_wp_fractional_scale_manager_v1_api API
|
||||||
|
* See @ref iface_wp_fractional_scale_manager_v1.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @defgroup iface_wp_fractional_scale_manager_v1 The wp_fractional_scale_manager_v1 interface
|
||||||
|
*
|
||||||
|
* A global interface for requesting surfaces to use fractional scales.
|
||||||
|
*/
|
||||||
|
extern const struct wl_interface wp_fractional_scale_manager_v1_interface;
|
||||||
|
#endif
|
||||||
|
#ifndef WP_FRACTIONAL_SCALE_V1_INTERFACE
|
||||||
|
#define WP_FRACTIONAL_SCALE_V1_INTERFACE
|
||||||
|
/**
|
||||||
|
* @page page_iface_wp_fractional_scale_v1 wp_fractional_scale_v1
|
||||||
|
* @section page_iface_wp_fractional_scale_v1_desc Description
|
||||||
|
*
|
||||||
|
* An additional interface to a wl_surface object which allows the compositor
|
||||||
|
* to inform the client of the preferred scale.
|
||||||
|
* @section page_iface_wp_fractional_scale_v1_api API
|
||||||
|
* See @ref iface_wp_fractional_scale_v1.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @defgroup iface_wp_fractional_scale_v1 The wp_fractional_scale_v1 interface
|
||||||
|
*
|
||||||
|
* An additional interface to a wl_surface object which allows the compositor
|
||||||
|
* to inform the client of the preferred scale.
|
||||||
|
*/
|
||||||
|
extern const struct wl_interface wp_fractional_scale_v1_interface;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WP_FRACTIONAL_SCALE_MANAGER_V1_ERROR_ENUM
|
||||||
|
#define WP_FRACTIONAL_SCALE_MANAGER_V1_ERROR_ENUM
|
||||||
|
enum wp_fractional_scale_manager_v1_error {
|
||||||
|
/**
|
||||||
|
* the surface already has a fractional_scale object associated
|
||||||
|
*/
|
||||||
|
WP_FRACTIONAL_SCALE_MANAGER_V1_ERROR_FRACTIONAL_SCALE_EXISTS = 0,
|
||||||
|
};
|
||||||
|
#endif /* WP_FRACTIONAL_SCALE_MANAGER_V1_ERROR_ENUM */
|
||||||
|
|
||||||
|
#define WP_FRACTIONAL_SCALE_MANAGER_V1_DESTROY 0
|
||||||
|
#define WP_FRACTIONAL_SCALE_MANAGER_V1_GET_FRACTIONAL_SCALE 1
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ingroup iface_wp_fractional_scale_manager_v1
|
||||||
|
*/
|
||||||
|
#define WP_FRACTIONAL_SCALE_MANAGER_V1_DESTROY_SINCE_VERSION 1
|
||||||
|
/**
|
||||||
|
* @ingroup iface_wp_fractional_scale_manager_v1
|
||||||
|
*/
|
||||||
|
#define WP_FRACTIONAL_SCALE_MANAGER_V1_GET_FRACTIONAL_SCALE_SINCE_VERSION 1
|
||||||
|
|
||||||
|
/** @ingroup iface_wp_fractional_scale_manager_v1 */
|
||||||
|
static inline void
|
||||||
|
wp_fractional_scale_manager_v1_set_user_data(struct wp_fractional_scale_manager_v1 *wp_fractional_scale_manager_v1, void *user_data)
|
||||||
|
{
|
||||||
|
wl_proxy_set_user_data((struct wl_proxy *) wp_fractional_scale_manager_v1, user_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @ingroup iface_wp_fractional_scale_manager_v1 */
|
||||||
|
static inline void *
|
||||||
|
wp_fractional_scale_manager_v1_get_user_data(struct wp_fractional_scale_manager_v1 *wp_fractional_scale_manager_v1)
|
||||||
|
{
|
||||||
|
return wl_proxy_get_user_data((struct wl_proxy *) wp_fractional_scale_manager_v1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline uint32_t
|
||||||
|
wp_fractional_scale_manager_v1_get_version(struct wp_fractional_scale_manager_v1 *wp_fractional_scale_manager_v1)
|
||||||
|
{
|
||||||
|
return wl_proxy_get_version((struct wl_proxy *) wp_fractional_scale_manager_v1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ingroup iface_wp_fractional_scale_manager_v1
|
||||||
|
*
|
||||||
|
* Informs the server that the client will not be using this protocol
|
||||||
|
* object anymore. This does not affect any other objects,
|
||||||
|
* wp_fractional_scale_v1 objects included.
|
||||||
|
*/
|
||||||
|
static inline void
|
||||||
|
wp_fractional_scale_manager_v1_destroy(struct wp_fractional_scale_manager_v1 *wp_fractional_scale_manager_v1)
|
||||||
|
{
|
||||||
|
wl_proxy_marshal_flags((struct wl_proxy *) wp_fractional_scale_manager_v1,
|
||||||
|
WP_FRACTIONAL_SCALE_MANAGER_V1_DESTROY, NULL, wl_proxy_get_version((struct wl_proxy *) wp_fractional_scale_manager_v1), WL_MARSHAL_FLAG_DESTROY);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ingroup iface_wp_fractional_scale_manager_v1
|
||||||
|
*
|
||||||
|
* Create an add-on object for the the wl_surface to let the compositor
|
||||||
|
* request fractional scales. If the given wl_surface already has a
|
||||||
|
* wp_fractional_scale_v1 object associated, the fractional_scale_exists
|
||||||
|
* protocol error is raised.
|
||||||
|
*/
|
||||||
|
static inline struct wp_fractional_scale_v1 *
|
||||||
|
wp_fractional_scale_manager_v1_get_fractional_scale(struct wp_fractional_scale_manager_v1 *wp_fractional_scale_manager_v1, struct wl_surface *surface)
|
||||||
|
{
|
||||||
|
struct wl_proxy *id;
|
||||||
|
|
||||||
|
id = wl_proxy_marshal_flags((struct wl_proxy *) wp_fractional_scale_manager_v1,
|
||||||
|
WP_FRACTIONAL_SCALE_MANAGER_V1_GET_FRACTIONAL_SCALE, &wp_fractional_scale_v1_interface, wl_proxy_get_version((struct wl_proxy *) wp_fractional_scale_manager_v1), 0, NULL, surface);
|
||||||
|
|
||||||
|
return (struct wp_fractional_scale_v1 *) id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ingroup iface_wp_fractional_scale_v1
|
||||||
|
* @struct wp_fractional_scale_v1_listener
|
||||||
|
*/
|
||||||
|
struct wp_fractional_scale_v1_listener {
|
||||||
|
/**
|
||||||
|
* notify of new preferred scale
|
||||||
|
*
|
||||||
|
* Notification of a new preferred scale for this surface that
|
||||||
|
* the compositor suggests that the client should use.
|
||||||
|
*
|
||||||
|
* The sent scale is the numerator of a fraction with a denominator
|
||||||
|
* of 120.
|
||||||
|
* @param scale the new preferred scale
|
||||||
|
*/
|
||||||
|
void (*preferred_scale)(void *data,
|
||||||
|
struct wp_fractional_scale_v1 *wp_fractional_scale_v1,
|
||||||
|
uint32_t scale);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ingroup iface_wp_fractional_scale_v1
|
||||||
|
*/
|
||||||
|
static inline int
|
||||||
|
wp_fractional_scale_v1_add_listener(struct wp_fractional_scale_v1 *wp_fractional_scale_v1,
|
||||||
|
const struct wp_fractional_scale_v1_listener *listener, void *data)
|
||||||
|
{
|
||||||
|
return wl_proxy_add_listener((struct wl_proxy *) wp_fractional_scale_v1,
|
||||||
|
(void (**)(void)) listener, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define WP_FRACTIONAL_SCALE_V1_DESTROY 0
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ingroup iface_wp_fractional_scale_v1
|
||||||
|
*/
|
||||||
|
#define WP_FRACTIONAL_SCALE_V1_PREFERRED_SCALE_SINCE_VERSION 1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ingroup iface_wp_fractional_scale_v1
|
||||||
|
*/
|
||||||
|
#define WP_FRACTIONAL_SCALE_V1_DESTROY_SINCE_VERSION 1
|
||||||
|
|
||||||
|
/** @ingroup iface_wp_fractional_scale_v1 */
|
||||||
|
static inline void
|
||||||
|
wp_fractional_scale_v1_set_user_data(struct wp_fractional_scale_v1 *wp_fractional_scale_v1, void *user_data)
|
||||||
|
{
|
||||||
|
wl_proxy_set_user_data((struct wl_proxy *) wp_fractional_scale_v1, user_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @ingroup iface_wp_fractional_scale_v1 */
|
||||||
|
static inline void *
|
||||||
|
wp_fractional_scale_v1_get_user_data(struct wp_fractional_scale_v1 *wp_fractional_scale_v1)
|
||||||
|
{
|
||||||
|
return wl_proxy_get_user_data((struct wl_proxy *) wp_fractional_scale_v1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline uint32_t
|
||||||
|
wp_fractional_scale_v1_get_version(struct wp_fractional_scale_v1 *wp_fractional_scale_v1)
|
||||||
|
{
|
||||||
|
return wl_proxy_get_version((struct wl_proxy *) wp_fractional_scale_v1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ingroup iface_wp_fractional_scale_v1
|
||||||
|
*
|
||||||
|
* Destroy the fractional scale object. When this object is destroyed,
|
||||||
|
* preferred_scale events will no longer be sent.
|
||||||
|
*/
|
||||||
|
static inline void
|
||||||
|
wp_fractional_scale_v1_destroy(struct wp_fractional_scale_v1 *wp_fractional_scale_v1)
|
||||||
|
{
|
||||||
|
wl_proxy_marshal_flags((struct wl_proxy *) wp_fractional_scale_v1,
|
||||||
|
WP_FRACTIONAL_SCALE_V1_DESTROY, NULL, wl_proxy_get_version((struct wl_proxy *) wp_fractional_scale_v1), WL_MARSHAL_FLAG_DESTROY);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
/* Generated by tools/protocols.py; private protocol descriptors. */
|
||||||
|
#define wp_fractional_scale_manager_v1_interface z_uhdk_wp_fractional_scale_manager_v1_interface
|
||||||
|
#define wp_fractional_scale_v1_interface z_uhdk_wp_fractional_scale_v1_interface
|
||||||
|
#define wp_viewporter_interface z_uhdk_wp_viewporter_interface
|
||||||
|
#define wp_viewport_interface z_uhdk_wp_viewport_interface
|
||||||
|
#define wl_display_interface z_uhdk_wl_display_interface
|
||||||
|
#define wl_registry_interface z_uhdk_wl_registry_interface
|
||||||
|
#define wl_callback_interface z_uhdk_wl_callback_interface
|
||||||
|
#define wl_compositor_interface z_uhdk_wl_compositor_interface
|
||||||
|
#define wl_shm_pool_interface z_uhdk_wl_shm_pool_interface
|
||||||
|
#define wl_shm_interface z_uhdk_wl_shm_interface
|
||||||
|
#define wl_buffer_interface z_uhdk_wl_buffer_interface
|
||||||
|
#define wl_data_offer_interface z_uhdk_wl_data_offer_interface
|
||||||
|
#define wl_data_source_interface z_uhdk_wl_data_source_interface
|
||||||
|
#define wl_data_device_interface z_uhdk_wl_data_device_interface
|
||||||
|
#define wl_data_device_manager_interface z_uhdk_wl_data_device_manager_interface
|
||||||
|
#define wl_shell_interface z_uhdk_wl_shell_interface
|
||||||
|
#define wl_shell_surface_interface z_uhdk_wl_shell_surface_interface
|
||||||
|
#define wl_surface_interface z_uhdk_wl_surface_interface
|
||||||
|
#define wl_seat_interface z_uhdk_wl_seat_interface
|
||||||
|
#define wl_pointer_interface z_uhdk_wl_pointer_interface
|
||||||
|
#define wl_keyboard_interface z_uhdk_wl_keyboard_interface
|
||||||
|
#define wl_touch_interface z_uhdk_wl_touch_interface
|
||||||
|
#define wl_output_interface z_uhdk_wl_output_interface
|
||||||
|
#define wl_region_interface z_uhdk_wl_region_interface
|
||||||
|
#define wl_subcompositor_interface z_uhdk_wl_subcompositor_interface
|
||||||
|
#define wl_subsurface_interface z_uhdk_wl_subsurface_interface
|
||||||
|
#define wl_fixes_interface z_uhdk_wl_fixes_interface
|
||||||
|
#define zxdg_decoration_manager_v1_interface z_uhdk_zxdg_decoration_manager_v1_interface
|
||||||
|
#define zxdg_toplevel_decoration_v1_interface z_uhdk_zxdg_toplevel_decoration_v1_interface
|
||||||
|
#define xdg_wm_base_interface z_uhdk_xdg_wm_base_interface
|
||||||
|
#define xdg_positioner_interface z_uhdk_xdg_positioner_interface
|
||||||
|
#define xdg_surface_interface z_uhdk_xdg_surface_interface
|
||||||
|
#define xdg_toplevel_interface z_uhdk_xdg_toplevel_interface
|
||||||
|
#define xdg_popup_interface z_uhdk_xdg_popup_interface
|
||||||
|
|
@ -0,0 +1,75 @@
|
||||||
|
/* Generated by wayland-scanner 1.24.0 */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright © 2013-2016 Collabora, Ltd.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "wayland-util.h"
|
||||||
|
|
||||||
|
#ifndef __has_attribute
|
||||||
|
# define __has_attribute(x) 0 /* Compatibility with non-clang compilers. */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (__has_attribute(visibility) || defined(__GNUC__) && __GNUC__ >= 4)
|
||||||
|
#define WL_PRIVATE __attribute__ ((visibility("hidden")))
|
||||||
|
#else
|
||||||
|
#define WL_PRIVATE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern const struct wl_interface wl_surface_interface;
|
||||||
|
extern const struct wl_interface wp_viewport_interface;
|
||||||
|
|
||||||
|
static const struct wl_interface *viewporter_types[] = {
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
&wp_viewport_interface,
|
||||||
|
&wl_surface_interface,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wp_viewporter_requests[] = {
|
||||||
|
{ "destroy", "", viewporter_types + 0 },
|
||||||
|
{ "get_viewport", "no", viewporter_types + 4 },
|
||||||
|
};
|
||||||
|
|
||||||
|
WL_PRIVATE const struct wl_interface wp_viewporter_interface = {
|
||||||
|
"wp_viewporter", 1,
|
||||||
|
2, wp_viewporter_requests,
|
||||||
|
0, NULL,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wp_viewport_requests[] = {
|
||||||
|
{ "destroy", "", viewporter_types + 0 },
|
||||||
|
{ "set_source", "ffff", viewporter_types + 0 },
|
||||||
|
{ "set_destination", "ii", viewporter_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
WL_PRIVATE const struct wl_interface wp_viewport_interface = {
|
||||||
|
"wp_viewport", 1,
|
||||||
|
3, wp_viewport_requests,
|
||||||
|
0, NULL,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
@ -0,0 +1,394 @@
|
||||||
|
/* Generated by wayland-scanner 1.24.0 */
|
||||||
|
|
||||||
|
#ifndef VIEWPORTER_CLIENT_PROTOCOL_H
|
||||||
|
#define VIEWPORTER_CLIENT_PROTOCOL_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include "wayland-client.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @page page_viewporter The viewporter protocol
|
||||||
|
* @section page_ifaces_viewporter Interfaces
|
||||||
|
* - @subpage page_iface_wp_viewporter - surface cropping and scaling
|
||||||
|
* - @subpage page_iface_wp_viewport - crop and scale interface to a wl_surface
|
||||||
|
* @section page_copyright_viewporter Copyright
|
||||||
|
* <pre>
|
||||||
|
*
|
||||||
|
* Copyright © 2013-2016 Collabora, Ltd.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
struct wl_surface;
|
||||||
|
struct wp_viewport;
|
||||||
|
struct wp_viewporter;
|
||||||
|
|
||||||
|
#ifndef WP_VIEWPORTER_INTERFACE
|
||||||
|
#define WP_VIEWPORTER_INTERFACE
|
||||||
|
/**
|
||||||
|
* @page page_iface_wp_viewporter wp_viewporter
|
||||||
|
* @section page_iface_wp_viewporter_desc Description
|
||||||
|
*
|
||||||
|
* The global interface exposing surface cropping and scaling
|
||||||
|
* capabilities is used to instantiate an interface extension for a
|
||||||
|
* wl_surface object. This extended interface will then allow
|
||||||
|
* cropping and scaling the surface contents, effectively
|
||||||
|
* disconnecting the direct relationship between the buffer and the
|
||||||
|
* surface size.
|
||||||
|
* @section page_iface_wp_viewporter_api API
|
||||||
|
* See @ref iface_wp_viewporter.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @defgroup iface_wp_viewporter The wp_viewporter interface
|
||||||
|
*
|
||||||
|
* The global interface exposing surface cropping and scaling
|
||||||
|
* capabilities is used to instantiate an interface extension for a
|
||||||
|
* wl_surface object. This extended interface will then allow
|
||||||
|
* cropping and scaling the surface contents, effectively
|
||||||
|
* disconnecting the direct relationship between the buffer and the
|
||||||
|
* surface size.
|
||||||
|
*/
|
||||||
|
extern const struct wl_interface wp_viewporter_interface;
|
||||||
|
#endif
|
||||||
|
#ifndef WP_VIEWPORT_INTERFACE
|
||||||
|
#define WP_VIEWPORT_INTERFACE
|
||||||
|
/**
|
||||||
|
* @page page_iface_wp_viewport wp_viewport
|
||||||
|
* @section page_iface_wp_viewport_desc Description
|
||||||
|
*
|
||||||
|
* An additional interface to a wl_surface object, which allows the
|
||||||
|
* client to specify the cropping and scaling of the surface
|
||||||
|
* contents.
|
||||||
|
*
|
||||||
|
* This interface works with two concepts: the source rectangle (src_x,
|
||||||
|
* src_y, src_width, src_height), and the destination size (dst_width,
|
||||||
|
* dst_height). The contents of the source rectangle are scaled to the
|
||||||
|
* destination size, and content outside the source rectangle is ignored.
|
||||||
|
* This state is double-buffered, see wl_surface.commit.
|
||||||
|
*
|
||||||
|
* The two parts of crop and scale state are independent: the source
|
||||||
|
* rectangle, and the destination size. Initially both are unset, that
|
||||||
|
* is, no scaling is applied. The whole of the current wl_buffer is
|
||||||
|
* used as the source, and the surface size is as defined in
|
||||||
|
* wl_surface.attach.
|
||||||
|
*
|
||||||
|
* If the destination size is set, it causes the surface size to become
|
||||||
|
* dst_width, dst_height. The source (rectangle) is scaled to exactly
|
||||||
|
* this size. This overrides whatever the attached wl_buffer size is,
|
||||||
|
* unless the wl_buffer is NULL. If the wl_buffer is NULL, the surface
|
||||||
|
* has no content and therefore no size. Otherwise, the size is always
|
||||||
|
* at least 1x1 in surface local coordinates.
|
||||||
|
*
|
||||||
|
* If the source rectangle is set, it defines what area of the wl_buffer is
|
||||||
|
* taken as the source. If the source rectangle is set and the destination
|
||||||
|
* size is not set, then src_width and src_height must be integers, and the
|
||||||
|
* surface size becomes the source rectangle size. This results in cropping
|
||||||
|
* without scaling. If src_width or src_height are not integers and
|
||||||
|
* destination size is not set, the bad_size protocol error is raised when
|
||||||
|
* the surface state is applied.
|
||||||
|
*
|
||||||
|
* The coordinate transformations from buffer pixel coordinates up to
|
||||||
|
* the surface-local coordinates happen in the following order:
|
||||||
|
* 1. buffer_transform (wl_surface.set_buffer_transform)
|
||||||
|
* 2. buffer_scale (wl_surface.set_buffer_scale)
|
||||||
|
* 3. crop and scale (wp_viewport.set*)
|
||||||
|
* This means, that the source rectangle coordinates of crop and scale
|
||||||
|
* are given in the coordinates after the buffer transform and scale,
|
||||||
|
* i.e. in the coordinates that would be the surface-local coordinates
|
||||||
|
* if the crop and scale was not applied.
|
||||||
|
*
|
||||||
|
* If src_x or src_y are negative, the bad_value protocol error is raised.
|
||||||
|
* Otherwise, if the source rectangle is partially or completely outside of
|
||||||
|
* the non-NULL wl_buffer, then the out_of_buffer protocol error is raised
|
||||||
|
* when the surface state is applied. A NULL wl_buffer does not raise the
|
||||||
|
* out_of_buffer error.
|
||||||
|
*
|
||||||
|
* If the wl_surface associated with the wp_viewport is destroyed,
|
||||||
|
* all wp_viewport requests except 'destroy' raise the protocol error
|
||||||
|
* no_surface.
|
||||||
|
*
|
||||||
|
* If the wp_viewport object is destroyed, the crop and scale
|
||||||
|
* state is removed from the wl_surface. The change will be applied
|
||||||
|
* on the next wl_surface.commit.
|
||||||
|
* @section page_iface_wp_viewport_api API
|
||||||
|
* See @ref iface_wp_viewport.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @defgroup iface_wp_viewport The wp_viewport interface
|
||||||
|
*
|
||||||
|
* An additional interface to a wl_surface object, which allows the
|
||||||
|
* client to specify the cropping and scaling of the surface
|
||||||
|
* contents.
|
||||||
|
*
|
||||||
|
* This interface works with two concepts: the source rectangle (src_x,
|
||||||
|
* src_y, src_width, src_height), and the destination size (dst_width,
|
||||||
|
* dst_height). The contents of the source rectangle are scaled to the
|
||||||
|
* destination size, and content outside the source rectangle is ignored.
|
||||||
|
* This state is double-buffered, see wl_surface.commit.
|
||||||
|
*
|
||||||
|
* The two parts of crop and scale state are independent: the source
|
||||||
|
* rectangle, and the destination size. Initially both are unset, that
|
||||||
|
* is, no scaling is applied. The whole of the current wl_buffer is
|
||||||
|
* used as the source, and the surface size is as defined in
|
||||||
|
* wl_surface.attach.
|
||||||
|
*
|
||||||
|
* If the destination size is set, it causes the surface size to become
|
||||||
|
* dst_width, dst_height. The source (rectangle) is scaled to exactly
|
||||||
|
* this size. This overrides whatever the attached wl_buffer size is,
|
||||||
|
* unless the wl_buffer is NULL. If the wl_buffer is NULL, the surface
|
||||||
|
* has no content and therefore no size. Otherwise, the size is always
|
||||||
|
* at least 1x1 in surface local coordinates.
|
||||||
|
*
|
||||||
|
* If the source rectangle is set, it defines what area of the wl_buffer is
|
||||||
|
* taken as the source. If the source rectangle is set and the destination
|
||||||
|
* size is not set, then src_width and src_height must be integers, and the
|
||||||
|
* surface size becomes the source rectangle size. This results in cropping
|
||||||
|
* without scaling. If src_width or src_height are not integers and
|
||||||
|
* destination size is not set, the bad_size protocol error is raised when
|
||||||
|
* the surface state is applied.
|
||||||
|
*
|
||||||
|
* The coordinate transformations from buffer pixel coordinates up to
|
||||||
|
* the surface-local coordinates happen in the following order:
|
||||||
|
* 1. buffer_transform (wl_surface.set_buffer_transform)
|
||||||
|
* 2. buffer_scale (wl_surface.set_buffer_scale)
|
||||||
|
* 3. crop and scale (wp_viewport.set*)
|
||||||
|
* This means, that the source rectangle coordinates of crop and scale
|
||||||
|
* are given in the coordinates after the buffer transform and scale,
|
||||||
|
* i.e. in the coordinates that would be the surface-local coordinates
|
||||||
|
* if the crop and scale was not applied.
|
||||||
|
*
|
||||||
|
* If src_x or src_y are negative, the bad_value protocol error is raised.
|
||||||
|
* Otherwise, if the source rectangle is partially or completely outside of
|
||||||
|
* the non-NULL wl_buffer, then the out_of_buffer protocol error is raised
|
||||||
|
* when the surface state is applied. A NULL wl_buffer does not raise the
|
||||||
|
* out_of_buffer error.
|
||||||
|
*
|
||||||
|
* If the wl_surface associated with the wp_viewport is destroyed,
|
||||||
|
* all wp_viewport requests except 'destroy' raise the protocol error
|
||||||
|
* no_surface.
|
||||||
|
*
|
||||||
|
* If the wp_viewport object is destroyed, the crop and scale
|
||||||
|
* state is removed from the wl_surface. The change will be applied
|
||||||
|
* on the next wl_surface.commit.
|
||||||
|
*/
|
||||||
|
extern const struct wl_interface wp_viewport_interface;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WP_VIEWPORTER_ERROR_ENUM
|
||||||
|
#define WP_VIEWPORTER_ERROR_ENUM
|
||||||
|
enum wp_viewporter_error {
|
||||||
|
/**
|
||||||
|
* the surface already has a viewport object associated
|
||||||
|
*/
|
||||||
|
WP_VIEWPORTER_ERROR_VIEWPORT_EXISTS = 0,
|
||||||
|
};
|
||||||
|
#endif /* WP_VIEWPORTER_ERROR_ENUM */
|
||||||
|
|
||||||
|
#define WP_VIEWPORTER_DESTROY 0
|
||||||
|
#define WP_VIEWPORTER_GET_VIEWPORT 1
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ingroup iface_wp_viewporter
|
||||||
|
*/
|
||||||
|
#define WP_VIEWPORTER_DESTROY_SINCE_VERSION 1
|
||||||
|
/**
|
||||||
|
* @ingroup iface_wp_viewporter
|
||||||
|
*/
|
||||||
|
#define WP_VIEWPORTER_GET_VIEWPORT_SINCE_VERSION 1
|
||||||
|
|
||||||
|
/** @ingroup iface_wp_viewporter */
|
||||||
|
static inline void
|
||||||
|
wp_viewporter_set_user_data(struct wp_viewporter *wp_viewporter, void *user_data)
|
||||||
|
{
|
||||||
|
wl_proxy_set_user_data((struct wl_proxy *) wp_viewporter, user_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @ingroup iface_wp_viewporter */
|
||||||
|
static inline void *
|
||||||
|
wp_viewporter_get_user_data(struct wp_viewporter *wp_viewporter)
|
||||||
|
{
|
||||||
|
return wl_proxy_get_user_data((struct wl_proxy *) wp_viewporter);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline uint32_t
|
||||||
|
wp_viewporter_get_version(struct wp_viewporter *wp_viewporter)
|
||||||
|
{
|
||||||
|
return wl_proxy_get_version((struct wl_proxy *) wp_viewporter);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ingroup iface_wp_viewporter
|
||||||
|
*
|
||||||
|
* Informs the server that the client will not be using this
|
||||||
|
* protocol object anymore. This does not affect any other objects,
|
||||||
|
* wp_viewport objects included.
|
||||||
|
*/
|
||||||
|
static inline void
|
||||||
|
wp_viewporter_destroy(struct wp_viewporter *wp_viewporter)
|
||||||
|
{
|
||||||
|
wl_proxy_marshal_flags((struct wl_proxy *) wp_viewporter,
|
||||||
|
WP_VIEWPORTER_DESTROY, NULL, wl_proxy_get_version((struct wl_proxy *) wp_viewporter), WL_MARSHAL_FLAG_DESTROY);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ingroup iface_wp_viewporter
|
||||||
|
*
|
||||||
|
* Instantiate an interface extension for the given wl_surface to
|
||||||
|
* crop and scale its content. If the given wl_surface already has
|
||||||
|
* a wp_viewport object associated, the viewport_exists
|
||||||
|
* protocol error is raised.
|
||||||
|
*/
|
||||||
|
static inline struct wp_viewport *
|
||||||
|
wp_viewporter_get_viewport(struct wp_viewporter *wp_viewporter, struct wl_surface *surface)
|
||||||
|
{
|
||||||
|
struct wl_proxy *id;
|
||||||
|
|
||||||
|
id = wl_proxy_marshal_flags((struct wl_proxy *) wp_viewporter,
|
||||||
|
WP_VIEWPORTER_GET_VIEWPORT, &wp_viewport_interface, wl_proxy_get_version((struct wl_proxy *) wp_viewporter), 0, NULL, surface);
|
||||||
|
|
||||||
|
return (struct wp_viewport *) id;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifndef WP_VIEWPORT_ERROR_ENUM
|
||||||
|
#define WP_VIEWPORT_ERROR_ENUM
|
||||||
|
enum wp_viewport_error {
|
||||||
|
/**
|
||||||
|
* negative or zero values in width or height
|
||||||
|
*/
|
||||||
|
WP_VIEWPORT_ERROR_BAD_VALUE = 0,
|
||||||
|
/**
|
||||||
|
* destination size is not integer
|
||||||
|
*/
|
||||||
|
WP_VIEWPORT_ERROR_BAD_SIZE = 1,
|
||||||
|
/**
|
||||||
|
* source rectangle extends outside of the content area
|
||||||
|
*/
|
||||||
|
WP_VIEWPORT_ERROR_OUT_OF_BUFFER = 2,
|
||||||
|
/**
|
||||||
|
* the wl_surface was destroyed
|
||||||
|
*/
|
||||||
|
WP_VIEWPORT_ERROR_NO_SURFACE = 3,
|
||||||
|
};
|
||||||
|
#endif /* WP_VIEWPORT_ERROR_ENUM */
|
||||||
|
|
||||||
|
#define WP_VIEWPORT_DESTROY 0
|
||||||
|
#define WP_VIEWPORT_SET_SOURCE 1
|
||||||
|
#define WP_VIEWPORT_SET_DESTINATION 2
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ingroup iface_wp_viewport
|
||||||
|
*/
|
||||||
|
#define WP_VIEWPORT_DESTROY_SINCE_VERSION 1
|
||||||
|
/**
|
||||||
|
* @ingroup iface_wp_viewport
|
||||||
|
*/
|
||||||
|
#define WP_VIEWPORT_SET_SOURCE_SINCE_VERSION 1
|
||||||
|
/**
|
||||||
|
* @ingroup iface_wp_viewport
|
||||||
|
*/
|
||||||
|
#define WP_VIEWPORT_SET_DESTINATION_SINCE_VERSION 1
|
||||||
|
|
||||||
|
/** @ingroup iface_wp_viewport */
|
||||||
|
static inline void
|
||||||
|
wp_viewport_set_user_data(struct wp_viewport *wp_viewport, void *user_data)
|
||||||
|
{
|
||||||
|
wl_proxy_set_user_data((struct wl_proxy *) wp_viewport, user_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @ingroup iface_wp_viewport */
|
||||||
|
static inline void *
|
||||||
|
wp_viewport_get_user_data(struct wp_viewport *wp_viewport)
|
||||||
|
{
|
||||||
|
return wl_proxy_get_user_data((struct wl_proxy *) wp_viewport);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline uint32_t
|
||||||
|
wp_viewport_get_version(struct wp_viewport *wp_viewport)
|
||||||
|
{
|
||||||
|
return wl_proxy_get_version((struct wl_proxy *) wp_viewport);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ingroup iface_wp_viewport
|
||||||
|
*
|
||||||
|
* The associated wl_surface's crop and scale state is removed.
|
||||||
|
* The change is applied on the next wl_surface.commit.
|
||||||
|
*/
|
||||||
|
static inline void
|
||||||
|
wp_viewport_destroy(struct wp_viewport *wp_viewport)
|
||||||
|
{
|
||||||
|
wl_proxy_marshal_flags((struct wl_proxy *) wp_viewport,
|
||||||
|
WP_VIEWPORT_DESTROY, NULL, wl_proxy_get_version((struct wl_proxy *) wp_viewport), WL_MARSHAL_FLAG_DESTROY);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ingroup iface_wp_viewport
|
||||||
|
*
|
||||||
|
* Set the source rectangle of the associated wl_surface. See
|
||||||
|
* wp_viewport for the description, and relation to the wl_buffer
|
||||||
|
* size.
|
||||||
|
*
|
||||||
|
* If all of x, y, width and height are -1.0, the source rectangle is
|
||||||
|
* unset instead. Any other set of values where width or height are zero
|
||||||
|
* or negative, or x or y are negative, raise the bad_value protocol
|
||||||
|
* error.
|
||||||
|
*
|
||||||
|
* The crop and scale state is double-buffered, see wl_surface.commit.
|
||||||
|
*/
|
||||||
|
static inline void
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
wl_proxy_marshal_flags((struct wl_proxy *) wp_viewport,
|
||||||
|
WP_VIEWPORT_SET_SOURCE, NULL, wl_proxy_get_version((struct wl_proxy *) wp_viewport), 0, x, y, width, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ingroup iface_wp_viewport
|
||||||
|
*
|
||||||
|
* Set the destination size of the associated wl_surface. See
|
||||||
|
* wp_viewport for the description, and relation to the wl_buffer
|
||||||
|
* size.
|
||||||
|
*
|
||||||
|
* If width is -1 and height is -1, the destination size is unset
|
||||||
|
* instead. Any other pair of values for width and height that
|
||||||
|
* contains zero or negative values raises the bad_value protocol
|
||||||
|
* error.
|
||||||
|
*
|
||||||
|
* The crop and scale state is double-buffered, see wl_surface.commit.
|
||||||
|
*/
|
||||||
|
static inline void
|
||||||
|
wp_viewport_set_destination(struct wp_viewport *wp_viewport, int32_t width, int32_t height)
|
||||||
|
{
|
||||||
|
wl_proxy_marshal_flags((struct wl_proxy *) wp_viewport,
|
||||||
|
WP_VIEWPORT_SET_DESTINATION, NULL, wl_proxy_get_version((struct wl_proxy *) wp_viewport), 0, width, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,34 @@
|
||||||
|
/*
|
||||||
|
* Copyright © 2012 Intel Corporation
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef WAYLAND_VERSION_H
|
||||||
|
#define WAYLAND_VERSION_H
|
||||||
|
|
||||||
|
#define WAYLAND_VERSION_MAJOR 1
|
||||||
|
#define WAYLAND_VERSION_MINOR 24
|
||||||
|
#define WAYLAND_VERSION_MICRO 0
|
||||||
|
#define WAYLAND_VERSION "1.24.0"
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,538 @@
|
||||||
|
/* Generated by wayland-scanner 1.24.0 */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright © 2008-2011 Kristian Høgsberg
|
||||||
|
* Copyright © 2010-2011 Intel Corporation
|
||||||
|
* Copyright © 2012-2013 Collabora, Ltd.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "wayland-util.h"
|
||||||
|
|
||||||
|
#ifndef __has_attribute
|
||||||
|
# define __has_attribute(x) 0 /* Compatibility with non-clang compilers. */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (__has_attribute(visibility) || defined(__GNUC__) && __GNUC__ >= 4)
|
||||||
|
#define WL_PRIVATE __attribute__ ((visibility("hidden")))
|
||||||
|
#else
|
||||||
|
#define WL_PRIVATE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern const struct wl_interface wl_buffer_interface;
|
||||||
|
extern const struct wl_interface wl_callback_interface;
|
||||||
|
extern const struct wl_interface wl_data_device_interface;
|
||||||
|
extern const struct wl_interface wl_data_offer_interface;
|
||||||
|
extern const struct wl_interface wl_data_source_interface;
|
||||||
|
extern const struct wl_interface wl_keyboard_interface;
|
||||||
|
extern const struct wl_interface wl_output_interface;
|
||||||
|
extern const struct wl_interface wl_pointer_interface;
|
||||||
|
extern const struct wl_interface wl_region_interface;
|
||||||
|
extern const struct wl_interface wl_registry_interface;
|
||||||
|
extern const struct wl_interface wl_seat_interface;
|
||||||
|
extern const struct wl_interface wl_shell_surface_interface;
|
||||||
|
extern const struct wl_interface wl_shm_pool_interface;
|
||||||
|
extern const struct wl_interface wl_subsurface_interface;
|
||||||
|
extern const struct wl_interface wl_surface_interface;
|
||||||
|
extern const struct wl_interface wl_touch_interface;
|
||||||
|
|
||||||
|
static const struct wl_interface *wayland_types[] = {
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
&wl_callback_interface,
|
||||||
|
&wl_registry_interface,
|
||||||
|
&wl_surface_interface,
|
||||||
|
&wl_region_interface,
|
||||||
|
&wl_buffer_interface,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
&wl_shm_pool_interface,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
&wl_data_source_interface,
|
||||||
|
&wl_surface_interface,
|
||||||
|
&wl_surface_interface,
|
||||||
|
NULL,
|
||||||
|
&wl_data_source_interface,
|
||||||
|
NULL,
|
||||||
|
&wl_data_offer_interface,
|
||||||
|
NULL,
|
||||||
|
&wl_surface_interface,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
&wl_data_offer_interface,
|
||||||
|
&wl_data_offer_interface,
|
||||||
|
&wl_data_source_interface,
|
||||||
|
&wl_data_device_interface,
|
||||||
|
&wl_seat_interface,
|
||||||
|
&wl_shell_surface_interface,
|
||||||
|
&wl_surface_interface,
|
||||||
|
&wl_seat_interface,
|
||||||
|
NULL,
|
||||||
|
&wl_seat_interface,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
&wl_surface_interface,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
&wl_output_interface,
|
||||||
|
&wl_seat_interface,
|
||||||
|
NULL,
|
||||||
|
&wl_surface_interface,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
&wl_output_interface,
|
||||||
|
&wl_buffer_interface,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
&wl_callback_interface,
|
||||||
|
&wl_region_interface,
|
||||||
|
&wl_region_interface,
|
||||||
|
&wl_output_interface,
|
||||||
|
&wl_output_interface,
|
||||||
|
&wl_pointer_interface,
|
||||||
|
&wl_keyboard_interface,
|
||||||
|
&wl_touch_interface,
|
||||||
|
NULL,
|
||||||
|
&wl_surface_interface,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
&wl_surface_interface,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
&wl_surface_interface,
|
||||||
|
NULL,
|
||||||
|
&wl_surface_interface,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
&wl_surface_interface,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
&wl_surface_interface,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
&wl_subsurface_interface,
|
||||||
|
&wl_surface_interface,
|
||||||
|
&wl_surface_interface,
|
||||||
|
&wl_surface_interface,
|
||||||
|
&wl_surface_interface,
|
||||||
|
&wl_registry_interface,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wl_display_requests[] = {
|
||||||
|
{ "sync", "n", wayland_types + 8 },
|
||||||
|
{ "get_registry", "n", wayland_types + 9 },
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wl_display_events[] = {
|
||||||
|
{ "error", "ous", wayland_types + 0 },
|
||||||
|
{ "delete_id", "u", wayland_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
WL_PRIVATE const struct wl_interface wl_display_interface = {
|
||||||
|
"wl_display", 1,
|
||||||
|
2, wl_display_requests,
|
||||||
|
2, wl_display_events,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wl_registry_requests[] = {
|
||||||
|
{ "bind", "usun", wayland_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wl_registry_events[] = {
|
||||||
|
{ "global", "usu", wayland_types + 0 },
|
||||||
|
{ "global_remove", "u", wayland_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
WL_PRIVATE const struct wl_interface wl_registry_interface = {
|
||||||
|
"wl_registry", 1,
|
||||||
|
1, wl_registry_requests,
|
||||||
|
2, wl_registry_events,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wl_callback_events[] = {
|
||||||
|
{ "done", "u", wayland_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
WL_PRIVATE const struct wl_interface wl_callback_interface = {
|
||||||
|
"wl_callback", 1,
|
||||||
|
0, NULL,
|
||||||
|
1, wl_callback_events,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wl_compositor_requests[] = {
|
||||||
|
{ "create_surface", "n", wayland_types + 10 },
|
||||||
|
{ "create_region", "n", wayland_types + 11 },
|
||||||
|
};
|
||||||
|
|
||||||
|
WL_PRIVATE const struct wl_interface wl_compositor_interface = {
|
||||||
|
"wl_compositor", 6,
|
||||||
|
2, wl_compositor_requests,
|
||||||
|
0, NULL,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wl_shm_pool_requests[] = {
|
||||||
|
{ "create_buffer", "niiiiu", wayland_types + 12 },
|
||||||
|
{ "destroy", "", wayland_types + 0 },
|
||||||
|
{ "resize", "i", wayland_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
WL_PRIVATE const struct wl_interface wl_shm_pool_interface = {
|
||||||
|
"wl_shm_pool", 2,
|
||||||
|
3, wl_shm_pool_requests,
|
||||||
|
0, NULL,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wl_shm_requests[] = {
|
||||||
|
{ "create_pool", "nhi", wayland_types + 18 },
|
||||||
|
{ "release", "2", wayland_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wl_shm_events[] = {
|
||||||
|
{ "format", "u", wayland_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
WL_PRIVATE const struct wl_interface wl_shm_interface = {
|
||||||
|
"wl_shm", 2,
|
||||||
|
2, wl_shm_requests,
|
||||||
|
1, wl_shm_events,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wl_buffer_requests[] = {
|
||||||
|
{ "destroy", "", wayland_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wl_buffer_events[] = {
|
||||||
|
{ "release", "", wayland_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
WL_PRIVATE const struct wl_interface wl_buffer_interface = {
|
||||||
|
"wl_buffer", 1,
|
||||||
|
1, wl_buffer_requests,
|
||||||
|
1, wl_buffer_events,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wl_data_offer_requests[] = {
|
||||||
|
{ "accept", "u?s", wayland_types + 0 },
|
||||||
|
{ "receive", "sh", wayland_types + 0 },
|
||||||
|
{ "destroy", "", wayland_types + 0 },
|
||||||
|
{ "finish", "3", wayland_types + 0 },
|
||||||
|
{ "set_actions", "3uu", wayland_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wl_data_offer_events[] = {
|
||||||
|
{ "offer", "s", wayland_types + 0 },
|
||||||
|
{ "source_actions", "3u", wayland_types + 0 },
|
||||||
|
{ "action", "3u", wayland_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
WL_PRIVATE const struct wl_interface wl_data_offer_interface = {
|
||||||
|
"wl_data_offer", 3,
|
||||||
|
5, wl_data_offer_requests,
|
||||||
|
3, wl_data_offer_events,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wl_data_source_requests[] = {
|
||||||
|
{ "offer", "s", wayland_types + 0 },
|
||||||
|
{ "destroy", "", wayland_types + 0 },
|
||||||
|
{ "set_actions", "3u", wayland_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wl_data_source_events[] = {
|
||||||
|
{ "target", "?s", wayland_types + 0 },
|
||||||
|
{ "send", "sh", wayland_types + 0 },
|
||||||
|
{ "cancelled", "", wayland_types + 0 },
|
||||||
|
{ "dnd_drop_performed", "3", wayland_types + 0 },
|
||||||
|
{ "dnd_finished", "3", wayland_types + 0 },
|
||||||
|
{ "action", "3u", wayland_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
WL_PRIVATE const struct wl_interface wl_data_source_interface = {
|
||||||
|
"wl_data_source", 3,
|
||||||
|
3, wl_data_source_requests,
|
||||||
|
6, wl_data_source_events,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wl_data_device_requests[] = {
|
||||||
|
{ "start_drag", "?oo?ou", wayland_types + 21 },
|
||||||
|
{ "set_selection", "?ou", wayland_types + 25 },
|
||||||
|
{ "release", "2", wayland_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wl_data_device_events[] = {
|
||||||
|
{ "data_offer", "n", wayland_types + 27 },
|
||||||
|
{ "enter", "uoff?o", wayland_types + 28 },
|
||||||
|
{ "leave", "", wayland_types + 0 },
|
||||||
|
{ "motion", "uff", wayland_types + 0 },
|
||||||
|
{ "drop", "", wayland_types + 0 },
|
||||||
|
{ "selection", "?o", wayland_types + 33 },
|
||||||
|
};
|
||||||
|
|
||||||
|
WL_PRIVATE const struct wl_interface wl_data_device_interface = {
|
||||||
|
"wl_data_device", 3,
|
||||||
|
3, wl_data_device_requests,
|
||||||
|
6, wl_data_device_events,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wl_data_device_manager_requests[] = {
|
||||||
|
{ "create_data_source", "n", wayland_types + 34 },
|
||||||
|
{ "get_data_device", "no", wayland_types + 35 },
|
||||||
|
};
|
||||||
|
|
||||||
|
WL_PRIVATE const struct wl_interface wl_data_device_manager_interface = {
|
||||||
|
"wl_data_device_manager", 3,
|
||||||
|
2, wl_data_device_manager_requests,
|
||||||
|
0, NULL,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wl_shell_requests[] = {
|
||||||
|
{ "get_shell_surface", "no", wayland_types + 37 },
|
||||||
|
};
|
||||||
|
|
||||||
|
WL_PRIVATE const struct wl_interface wl_shell_interface = {
|
||||||
|
"wl_shell", 1,
|
||||||
|
1, wl_shell_requests,
|
||||||
|
0, NULL,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wl_shell_surface_requests[] = {
|
||||||
|
{ "pong", "u", wayland_types + 0 },
|
||||||
|
{ "move", "ou", wayland_types + 39 },
|
||||||
|
{ "resize", "ouu", wayland_types + 41 },
|
||||||
|
{ "set_toplevel", "", wayland_types + 0 },
|
||||||
|
{ "set_transient", "oiiu", wayland_types + 44 },
|
||||||
|
{ "set_fullscreen", "uu?o", wayland_types + 48 },
|
||||||
|
{ "set_popup", "ouoiiu", wayland_types + 51 },
|
||||||
|
{ "set_maximized", "?o", wayland_types + 57 },
|
||||||
|
{ "set_title", "s", wayland_types + 0 },
|
||||||
|
{ "set_class", "s", wayland_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wl_shell_surface_events[] = {
|
||||||
|
{ "ping", "u", wayland_types + 0 },
|
||||||
|
{ "configure", "uii", wayland_types + 0 },
|
||||||
|
{ "popup_done", "", wayland_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
WL_PRIVATE const struct wl_interface wl_shell_surface_interface = {
|
||||||
|
"wl_shell_surface", 1,
|
||||||
|
10, wl_shell_surface_requests,
|
||||||
|
3, wl_shell_surface_events,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wl_surface_requests[] = {
|
||||||
|
{ "destroy", "", wayland_types + 0 },
|
||||||
|
{ "attach", "?oii", wayland_types + 58 },
|
||||||
|
{ "damage", "iiii", wayland_types + 0 },
|
||||||
|
{ "frame", "n", wayland_types + 61 },
|
||||||
|
{ "set_opaque_region", "?o", wayland_types + 62 },
|
||||||
|
{ "set_input_region", "?o", wayland_types + 63 },
|
||||||
|
{ "commit", "", wayland_types + 0 },
|
||||||
|
{ "set_buffer_transform", "2i", wayland_types + 0 },
|
||||||
|
{ "set_buffer_scale", "3i", wayland_types + 0 },
|
||||||
|
{ "damage_buffer", "4iiii", wayland_types + 0 },
|
||||||
|
{ "offset", "5ii", wayland_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wl_surface_events[] = {
|
||||||
|
{ "enter", "o", wayland_types + 64 },
|
||||||
|
{ "leave", "o", wayland_types + 65 },
|
||||||
|
{ "preferred_buffer_scale", "6i", wayland_types + 0 },
|
||||||
|
{ "preferred_buffer_transform", "6u", wayland_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
WL_PRIVATE const struct wl_interface wl_surface_interface = {
|
||||||
|
"wl_surface", 6,
|
||||||
|
11, wl_surface_requests,
|
||||||
|
4, wl_surface_events,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wl_seat_requests[] = {
|
||||||
|
{ "get_pointer", "n", wayland_types + 66 },
|
||||||
|
{ "get_keyboard", "n", wayland_types + 67 },
|
||||||
|
{ "get_touch", "n", wayland_types + 68 },
|
||||||
|
{ "release", "5", wayland_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wl_seat_events[] = {
|
||||||
|
{ "capabilities", "u", wayland_types + 0 },
|
||||||
|
{ "name", "2s", wayland_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
WL_PRIVATE const struct wl_interface wl_seat_interface = {
|
||||||
|
"wl_seat", 10,
|
||||||
|
4, wl_seat_requests,
|
||||||
|
2, wl_seat_events,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wl_pointer_requests[] = {
|
||||||
|
{ "set_cursor", "u?oii", wayland_types + 69 },
|
||||||
|
{ "release", "3", wayland_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wl_pointer_events[] = {
|
||||||
|
{ "enter", "uoff", wayland_types + 73 },
|
||||||
|
{ "leave", "uo", wayland_types + 77 },
|
||||||
|
{ "motion", "uff", wayland_types + 0 },
|
||||||
|
{ "button", "uuuu", wayland_types + 0 },
|
||||||
|
{ "axis", "uuf", wayland_types + 0 },
|
||||||
|
{ "frame", "5", wayland_types + 0 },
|
||||||
|
{ "axis_source", "5u", wayland_types + 0 },
|
||||||
|
{ "axis_stop", "5uu", wayland_types + 0 },
|
||||||
|
{ "axis_discrete", "5ui", wayland_types + 0 },
|
||||||
|
{ "axis_value120", "8ui", wayland_types + 0 },
|
||||||
|
{ "axis_relative_direction", "9uu", wayland_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
WL_PRIVATE const struct wl_interface wl_pointer_interface = {
|
||||||
|
"wl_pointer", 10,
|
||||||
|
2, wl_pointer_requests,
|
||||||
|
11, wl_pointer_events,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wl_keyboard_requests[] = {
|
||||||
|
{ "release", "3", wayland_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wl_keyboard_events[] = {
|
||||||
|
{ "keymap", "uhu", wayland_types + 0 },
|
||||||
|
{ "enter", "uoa", wayland_types + 79 },
|
||||||
|
{ "leave", "uo", wayland_types + 82 },
|
||||||
|
{ "key", "uuuu", wayland_types + 0 },
|
||||||
|
{ "modifiers", "uuuuu", wayland_types + 0 },
|
||||||
|
{ "repeat_info", "4ii", wayland_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
WL_PRIVATE const struct wl_interface wl_keyboard_interface = {
|
||||||
|
"wl_keyboard", 10,
|
||||||
|
1, wl_keyboard_requests,
|
||||||
|
6, wl_keyboard_events,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wl_touch_requests[] = {
|
||||||
|
{ "release", "3", wayland_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wl_touch_events[] = {
|
||||||
|
{ "down", "uuoiff", wayland_types + 84 },
|
||||||
|
{ "up", "uui", wayland_types + 0 },
|
||||||
|
{ "motion", "uiff", wayland_types + 0 },
|
||||||
|
{ "frame", "", wayland_types + 0 },
|
||||||
|
{ "cancel", "", wayland_types + 0 },
|
||||||
|
{ "shape", "6iff", wayland_types + 0 },
|
||||||
|
{ "orientation", "6if", wayland_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
WL_PRIVATE const struct wl_interface wl_touch_interface = {
|
||||||
|
"wl_touch", 10,
|
||||||
|
1, wl_touch_requests,
|
||||||
|
7, wl_touch_events,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wl_output_requests[] = {
|
||||||
|
{ "release", "3", wayland_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wl_output_events[] = {
|
||||||
|
{ "geometry", "iiiiissi", wayland_types + 0 },
|
||||||
|
{ "mode", "uiii", wayland_types + 0 },
|
||||||
|
{ "done", "2", wayland_types + 0 },
|
||||||
|
{ "scale", "2i", wayland_types + 0 },
|
||||||
|
{ "name", "4s", wayland_types + 0 },
|
||||||
|
{ "description", "4s", wayland_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
WL_PRIVATE const struct wl_interface wl_output_interface = {
|
||||||
|
"wl_output", 4,
|
||||||
|
1, wl_output_requests,
|
||||||
|
6, wl_output_events,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wl_region_requests[] = {
|
||||||
|
{ "destroy", "", wayland_types + 0 },
|
||||||
|
{ "add", "iiii", wayland_types + 0 },
|
||||||
|
{ "subtract", "iiii", wayland_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
WL_PRIVATE const struct wl_interface wl_region_interface = {
|
||||||
|
"wl_region", 1,
|
||||||
|
3, wl_region_requests,
|
||||||
|
0, NULL,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wl_subcompositor_requests[] = {
|
||||||
|
{ "destroy", "", wayland_types + 0 },
|
||||||
|
{ "get_subsurface", "noo", wayland_types + 90 },
|
||||||
|
};
|
||||||
|
|
||||||
|
WL_PRIVATE const struct wl_interface wl_subcompositor_interface = {
|
||||||
|
"wl_subcompositor", 1,
|
||||||
|
2, wl_subcompositor_requests,
|
||||||
|
0, NULL,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wl_subsurface_requests[] = {
|
||||||
|
{ "destroy", "", wayland_types + 0 },
|
||||||
|
{ "set_position", "ii", wayland_types + 0 },
|
||||||
|
{ "place_above", "o", wayland_types + 93 },
|
||||||
|
{ "place_below", "o", wayland_types + 94 },
|
||||||
|
{ "set_sync", "", wayland_types + 0 },
|
||||||
|
{ "set_desync", "", wayland_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
WL_PRIVATE const struct wl_interface wl_subsurface_interface = {
|
||||||
|
"wl_subsurface", 1,
|
||||||
|
6, wl_subsurface_requests,
|
||||||
|
0, NULL,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message wl_fixes_requests[] = {
|
||||||
|
{ "destroy", "", wayland_types + 0 },
|
||||||
|
{ "destroy_registry", "o", wayland_types + 95 },
|
||||||
|
};
|
||||||
|
|
||||||
|
WL_PRIVATE const struct wl_interface wl_fixes_interface = {
|
||||||
|
"wl_fixes", 1,
|
||||||
|
2, wl_fixes_requests,
|
||||||
|
0, NULL,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
@ -0,0 +1,76 @@
|
||||||
|
/* Generated by wayland-scanner 1.24.0 */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright © 2018 Simon Ser
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "wayland-util.h"
|
||||||
|
|
||||||
|
#ifndef __has_attribute
|
||||||
|
# define __has_attribute(x) 0 /* Compatibility with non-clang compilers. */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (__has_attribute(visibility) || defined(__GNUC__) && __GNUC__ >= 4)
|
||||||
|
#define WL_PRIVATE __attribute__ ((visibility("hidden")))
|
||||||
|
#else
|
||||||
|
#define WL_PRIVATE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern const struct wl_interface xdg_toplevel_interface;
|
||||||
|
extern const struct wl_interface zxdg_toplevel_decoration_v1_interface;
|
||||||
|
|
||||||
|
static const struct wl_interface *xdg_decoration_unstable_v1_types[] = {
|
||||||
|
NULL,
|
||||||
|
&zxdg_toplevel_decoration_v1_interface,
|
||||||
|
&xdg_toplevel_interface,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message zxdg_decoration_manager_v1_requests[] = {
|
||||||
|
{ "destroy", "", xdg_decoration_unstable_v1_types + 0 },
|
||||||
|
{ "get_toplevel_decoration", "no", xdg_decoration_unstable_v1_types + 1 },
|
||||||
|
};
|
||||||
|
|
||||||
|
WL_PRIVATE const struct wl_interface zxdg_decoration_manager_v1_interface = {
|
||||||
|
"zxdg_decoration_manager_v1", 1,
|
||||||
|
2, zxdg_decoration_manager_v1_requests,
|
||||||
|
0, NULL,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message zxdg_toplevel_decoration_v1_requests[] = {
|
||||||
|
{ "destroy", "", xdg_decoration_unstable_v1_types + 0 },
|
||||||
|
{ "set_mode", "u", xdg_decoration_unstable_v1_types + 0 },
|
||||||
|
{ "unset_mode", "", xdg_decoration_unstable_v1_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message zxdg_toplevel_decoration_v1_events[] = {
|
||||||
|
{ "configure", "u", xdg_decoration_unstable_v1_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
WL_PRIVATE const struct wl_interface zxdg_toplevel_decoration_v1_interface = {
|
||||||
|
"zxdg_toplevel_decoration_v1", 1,
|
||||||
|
3, zxdg_toplevel_decoration_v1_requests,
|
||||||
|
1, zxdg_toplevel_decoration_v1_events,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
@ -0,0 +1,384 @@
|
||||||
|
/* Generated by wayland-scanner 1.24.0 */
|
||||||
|
|
||||||
|
#ifndef XDG_DECORATION_UNSTABLE_V1_CLIENT_PROTOCOL_H
|
||||||
|
#define XDG_DECORATION_UNSTABLE_V1_CLIENT_PROTOCOL_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include "wayland-client.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @page page_xdg_decoration_unstable_v1 The xdg_decoration_unstable_v1 protocol
|
||||||
|
* @section page_ifaces_xdg_decoration_unstable_v1 Interfaces
|
||||||
|
* - @subpage page_iface_zxdg_decoration_manager_v1 - window decoration manager
|
||||||
|
* - @subpage page_iface_zxdg_toplevel_decoration_v1 - decoration object for a toplevel surface
|
||||||
|
* @section page_copyright_xdg_decoration_unstable_v1 Copyright
|
||||||
|
* <pre>
|
||||||
|
*
|
||||||
|
* Copyright © 2018 Simon Ser
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
struct xdg_toplevel;
|
||||||
|
struct zxdg_decoration_manager_v1;
|
||||||
|
struct zxdg_toplevel_decoration_v1;
|
||||||
|
|
||||||
|
#ifndef ZXDG_DECORATION_MANAGER_V1_INTERFACE
|
||||||
|
#define ZXDG_DECORATION_MANAGER_V1_INTERFACE
|
||||||
|
/**
|
||||||
|
* @page page_iface_zxdg_decoration_manager_v1 zxdg_decoration_manager_v1
|
||||||
|
* @section page_iface_zxdg_decoration_manager_v1_desc Description
|
||||||
|
*
|
||||||
|
* This interface allows a compositor to announce support for server-side
|
||||||
|
* decorations.
|
||||||
|
*
|
||||||
|
* A window decoration is a set of window controls as deemed appropriate by
|
||||||
|
* the party managing them, such as user interface components used to move,
|
||||||
|
* resize and change a window's state.
|
||||||
|
*
|
||||||
|
* A client can use this protocol to request being decorated by a supporting
|
||||||
|
* compositor.
|
||||||
|
*
|
||||||
|
* If compositor and client do not negotiate the use of a server-side
|
||||||
|
* decoration using this protocol, clients continue to self-decorate as they
|
||||||
|
* see fit.
|
||||||
|
*
|
||||||
|
* Warning! The protocol described in this file is experimental and
|
||||||
|
* backward incompatible changes may be made. Backward compatible changes
|
||||||
|
* may be added together with the corresponding interface version bump.
|
||||||
|
* Backward incompatible changes are done by bumping the version number in
|
||||||
|
* the protocol and interface names and resetting the interface version.
|
||||||
|
* Once the protocol is to be declared stable, the 'z' prefix and the
|
||||||
|
* version number in the protocol and interface names are removed and the
|
||||||
|
* interface version number is reset.
|
||||||
|
* @section page_iface_zxdg_decoration_manager_v1_api API
|
||||||
|
* See @ref iface_zxdg_decoration_manager_v1.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @defgroup iface_zxdg_decoration_manager_v1 The zxdg_decoration_manager_v1 interface
|
||||||
|
*
|
||||||
|
* This interface allows a compositor to announce support for server-side
|
||||||
|
* decorations.
|
||||||
|
*
|
||||||
|
* A window decoration is a set of window controls as deemed appropriate by
|
||||||
|
* the party managing them, such as user interface components used to move,
|
||||||
|
* resize and change a window's state.
|
||||||
|
*
|
||||||
|
* A client can use this protocol to request being decorated by a supporting
|
||||||
|
* compositor.
|
||||||
|
*
|
||||||
|
* If compositor and client do not negotiate the use of a server-side
|
||||||
|
* decoration using this protocol, clients continue to self-decorate as they
|
||||||
|
* see fit.
|
||||||
|
*
|
||||||
|
* Warning! The protocol described in this file is experimental and
|
||||||
|
* backward incompatible changes may be made. Backward compatible changes
|
||||||
|
* may be added together with the corresponding interface version bump.
|
||||||
|
* Backward incompatible changes are done by bumping the version number in
|
||||||
|
* the protocol and interface names and resetting the interface version.
|
||||||
|
* Once the protocol is to be declared stable, the 'z' prefix and the
|
||||||
|
* version number in the protocol and interface names are removed and the
|
||||||
|
* interface version number is reset.
|
||||||
|
*/
|
||||||
|
extern const struct wl_interface zxdg_decoration_manager_v1_interface;
|
||||||
|
#endif
|
||||||
|
#ifndef ZXDG_TOPLEVEL_DECORATION_V1_INTERFACE
|
||||||
|
#define ZXDG_TOPLEVEL_DECORATION_V1_INTERFACE
|
||||||
|
/**
|
||||||
|
* @page page_iface_zxdg_toplevel_decoration_v1 zxdg_toplevel_decoration_v1
|
||||||
|
* @section page_iface_zxdg_toplevel_decoration_v1_desc Description
|
||||||
|
*
|
||||||
|
* The decoration object allows the compositor to toggle server-side window
|
||||||
|
* decorations for a toplevel surface. The client can request to switch to
|
||||||
|
* another mode.
|
||||||
|
*
|
||||||
|
* The xdg_toplevel_decoration object must be destroyed before its
|
||||||
|
* xdg_toplevel.
|
||||||
|
* @section page_iface_zxdg_toplevel_decoration_v1_api API
|
||||||
|
* See @ref iface_zxdg_toplevel_decoration_v1.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @defgroup iface_zxdg_toplevel_decoration_v1 The zxdg_toplevel_decoration_v1 interface
|
||||||
|
*
|
||||||
|
* The decoration object allows the compositor to toggle server-side window
|
||||||
|
* decorations for a toplevel surface. The client can request to switch to
|
||||||
|
* another mode.
|
||||||
|
*
|
||||||
|
* The xdg_toplevel_decoration object must be destroyed before its
|
||||||
|
* xdg_toplevel.
|
||||||
|
*/
|
||||||
|
extern const struct wl_interface zxdg_toplevel_decoration_v1_interface;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define ZXDG_DECORATION_MANAGER_V1_DESTROY 0
|
||||||
|
#define ZXDG_DECORATION_MANAGER_V1_GET_TOPLEVEL_DECORATION 1
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ingroup iface_zxdg_decoration_manager_v1
|
||||||
|
*/
|
||||||
|
#define ZXDG_DECORATION_MANAGER_V1_DESTROY_SINCE_VERSION 1
|
||||||
|
/**
|
||||||
|
* @ingroup iface_zxdg_decoration_manager_v1
|
||||||
|
*/
|
||||||
|
#define ZXDG_DECORATION_MANAGER_V1_GET_TOPLEVEL_DECORATION_SINCE_VERSION 1
|
||||||
|
|
||||||
|
/** @ingroup iface_zxdg_decoration_manager_v1 */
|
||||||
|
static inline void
|
||||||
|
zxdg_decoration_manager_v1_set_user_data(struct zxdg_decoration_manager_v1 *zxdg_decoration_manager_v1, void *user_data)
|
||||||
|
{
|
||||||
|
wl_proxy_set_user_data((struct wl_proxy *) zxdg_decoration_manager_v1, user_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @ingroup iface_zxdg_decoration_manager_v1 */
|
||||||
|
static inline void *
|
||||||
|
zxdg_decoration_manager_v1_get_user_data(struct zxdg_decoration_manager_v1 *zxdg_decoration_manager_v1)
|
||||||
|
{
|
||||||
|
return wl_proxy_get_user_data((struct wl_proxy *) zxdg_decoration_manager_v1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline uint32_t
|
||||||
|
zxdg_decoration_manager_v1_get_version(struct zxdg_decoration_manager_v1 *zxdg_decoration_manager_v1)
|
||||||
|
{
|
||||||
|
return wl_proxy_get_version((struct wl_proxy *) zxdg_decoration_manager_v1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ingroup iface_zxdg_decoration_manager_v1
|
||||||
|
*
|
||||||
|
* Destroy the decoration manager. This doesn't destroy objects created
|
||||||
|
* with the manager.
|
||||||
|
*/
|
||||||
|
static inline void
|
||||||
|
zxdg_decoration_manager_v1_destroy(struct zxdg_decoration_manager_v1 *zxdg_decoration_manager_v1)
|
||||||
|
{
|
||||||
|
wl_proxy_marshal_flags((struct wl_proxy *) zxdg_decoration_manager_v1,
|
||||||
|
ZXDG_DECORATION_MANAGER_V1_DESTROY, NULL, wl_proxy_get_version((struct wl_proxy *) zxdg_decoration_manager_v1), WL_MARSHAL_FLAG_DESTROY);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ingroup iface_zxdg_decoration_manager_v1
|
||||||
|
*
|
||||||
|
* Create a new decoration object associated with the given toplevel.
|
||||||
|
*
|
||||||
|
* Creating an xdg_toplevel_decoration from an xdg_toplevel which has a
|
||||||
|
* buffer attached or committed is a client error, and any attempts by a
|
||||||
|
* client to attach or manipulate a buffer prior to the first
|
||||||
|
* xdg_toplevel_decoration.configure event must also be treated as
|
||||||
|
* errors.
|
||||||
|
*/
|
||||||
|
static inline struct zxdg_toplevel_decoration_v1 *
|
||||||
|
zxdg_decoration_manager_v1_get_toplevel_decoration(struct zxdg_decoration_manager_v1 *zxdg_decoration_manager_v1, struct xdg_toplevel *toplevel)
|
||||||
|
{
|
||||||
|
struct wl_proxy *id;
|
||||||
|
|
||||||
|
id = wl_proxy_marshal_flags((struct wl_proxy *) zxdg_decoration_manager_v1,
|
||||||
|
ZXDG_DECORATION_MANAGER_V1_GET_TOPLEVEL_DECORATION, &zxdg_toplevel_decoration_v1_interface, wl_proxy_get_version((struct wl_proxy *) zxdg_decoration_manager_v1), 0, NULL, toplevel);
|
||||||
|
|
||||||
|
return (struct zxdg_toplevel_decoration_v1 *) id;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifndef ZXDG_TOPLEVEL_DECORATION_V1_ERROR_ENUM
|
||||||
|
#define ZXDG_TOPLEVEL_DECORATION_V1_ERROR_ENUM
|
||||||
|
enum zxdg_toplevel_decoration_v1_error {
|
||||||
|
/**
|
||||||
|
* xdg_toplevel has a buffer attached before configure
|
||||||
|
*/
|
||||||
|
ZXDG_TOPLEVEL_DECORATION_V1_ERROR_UNCONFIGURED_BUFFER = 0,
|
||||||
|
/**
|
||||||
|
* xdg_toplevel already has a decoration object
|
||||||
|
*/
|
||||||
|
ZXDG_TOPLEVEL_DECORATION_V1_ERROR_ALREADY_CONSTRUCTED = 1,
|
||||||
|
/**
|
||||||
|
* xdg_toplevel destroyed before the decoration object
|
||||||
|
*/
|
||||||
|
ZXDG_TOPLEVEL_DECORATION_V1_ERROR_ORPHANED = 2,
|
||||||
|
/**
|
||||||
|
* invalid mode
|
||||||
|
*/
|
||||||
|
ZXDG_TOPLEVEL_DECORATION_V1_ERROR_INVALID_MODE = 3,
|
||||||
|
};
|
||||||
|
#endif /* ZXDG_TOPLEVEL_DECORATION_V1_ERROR_ENUM */
|
||||||
|
|
||||||
|
#ifndef ZXDG_TOPLEVEL_DECORATION_V1_MODE_ENUM
|
||||||
|
#define ZXDG_TOPLEVEL_DECORATION_V1_MODE_ENUM
|
||||||
|
/**
|
||||||
|
* @ingroup iface_zxdg_toplevel_decoration_v1
|
||||||
|
* window decoration modes
|
||||||
|
*
|
||||||
|
* These values describe window decoration modes.
|
||||||
|
*/
|
||||||
|
enum zxdg_toplevel_decoration_v1_mode {
|
||||||
|
/**
|
||||||
|
* no server-side window decoration
|
||||||
|
*/
|
||||||
|
ZXDG_TOPLEVEL_DECORATION_V1_MODE_CLIENT_SIDE = 1,
|
||||||
|
/**
|
||||||
|
* server-side window decoration
|
||||||
|
*/
|
||||||
|
ZXDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE = 2,
|
||||||
|
};
|
||||||
|
#endif /* ZXDG_TOPLEVEL_DECORATION_V1_MODE_ENUM */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ingroup iface_zxdg_toplevel_decoration_v1
|
||||||
|
* @struct zxdg_toplevel_decoration_v1_listener
|
||||||
|
*/
|
||||||
|
struct zxdg_toplevel_decoration_v1_listener {
|
||||||
|
/**
|
||||||
|
* notify a decoration mode change
|
||||||
|
*
|
||||||
|
* The configure event configures the effective decoration mode.
|
||||||
|
* The configured state should not be applied immediately. Clients
|
||||||
|
* must send an ack_configure in response to this event. See
|
||||||
|
* xdg_surface.configure and xdg_surface.ack_configure for details.
|
||||||
|
*
|
||||||
|
* A configure event can be sent at any time. The specified mode
|
||||||
|
* must be obeyed by the client.
|
||||||
|
* @param mode the decoration mode
|
||||||
|
*/
|
||||||
|
void (*configure)(void *data,
|
||||||
|
struct zxdg_toplevel_decoration_v1 *zxdg_toplevel_decoration_v1,
|
||||||
|
uint32_t mode);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ingroup iface_zxdg_toplevel_decoration_v1
|
||||||
|
*/
|
||||||
|
static inline int
|
||||||
|
zxdg_toplevel_decoration_v1_add_listener(struct zxdg_toplevel_decoration_v1 *zxdg_toplevel_decoration_v1,
|
||||||
|
const struct zxdg_toplevel_decoration_v1_listener *listener, void *data)
|
||||||
|
{
|
||||||
|
return wl_proxy_add_listener((struct wl_proxy *) zxdg_toplevel_decoration_v1,
|
||||||
|
(void (**)(void)) listener, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define ZXDG_TOPLEVEL_DECORATION_V1_DESTROY 0
|
||||||
|
#define ZXDG_TOPLEVEL_DECORATION_V1_SET_MODE 1
|
||||||
|
#define ZXDG_TOPLEVEL_DECORATION_V1_UNSET_MODE 2
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ingroup iface_zxdg_toplevel_decoration_v1
|
||||||
|
*/
|
||||||
|
#define ZXDG_TOPLEVEL_DECORATION_V1_CONFIGURE_SINCE_VERSION 1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ingroup iface_zxdg_toplevel_decoration_v1
|
||||||
|
*/
|
||||||
|
#define ZXDG_TOPLEVEL_DECORATION_V1_DESTROY_SINCE_VERSION 1
|
||||||
|
/**
|
||||||
|
* @ingroup iface_zxdg_toplevel_decoration_v1
|
||||||
|
*/
|
||||||
|
#define ZXDG_TOPLEVEL_DECORATION_V1_SET_MODE_SINCE_VERSION 1
|
||||||
|
/**
|
||||||
|
* @ingroup iface_zxdg_toplevel_decoration_v1
|
||||||
|
*/
|
||||||
|
#define ZXDG_TOPLEVEL_DECORATION_V1_UNSET_MODE_SINCE_VERSION 1
|
||||||
|
|
||||||
|
/** @ingroup iface_zxdg_toplevel_decoration_v1 */
|
||||||
|
static inline void
|
||||||
|
zxdg_toplevel_decoration_v1_set_user_data(struct zxdg_toplevel_decoration_v1 *zxdg_toplevel_decoration_v1, void *user_data)
|
||||||
|
{
|
||||||
|
wl_proxy_set_user_data((struct wl_proxy *) zxdg_toplevel_decoration_v1, user_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @ingroup iface_zxdg_toplevel_decoration_v1 */
|
||||||
|
static inline void *
|
||||||
|
zxdg_toplevel_decoration_v1_get_user_data(struct zxdg_toplevel_decoration_v1 *zxdg_toplevel_decoration_v1)
|
||||||
|
{
|
||||||
|
return wl_proxy_get_user_data((struct wl_proxy *) zxdg_toplevel_decoration_v1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline uint32_t
|
||||||
|
zxdg_toplevel_decoration_v1_get_version(struct zxdg_toplevel_decoration_v1 *zxdg_toplevel_decoration_v1)
|
||||||
|
{
|
||||||
|
return wl_proxy_get_version((struct wl_proxy *) zxdg_toplevel_decoration_v1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ingroup iface_zxdg_toplevel_decoration_v1
|
||||||
|
*
|
||||||
|
* Switch back to a mode without any server-side decorations at the next
|
||||||
|
* commit.
|
||||||
|
*/
|
||||||
|
static inline void
|
||||||
|
zxdg_toplevel_decoration_v1_destroy(struct zxdg_toplevel_decoration_v1 *zxdg_toplevel_decoration_v1)
|
||||||
|
{
|
||||||
|
wl_proxy_marshal_flags((struct wl_proxy *) zxdg_toplevel_decoration_v1,
|
||||||
|
ZXDG_TOPLEVEL_DECORATION_V1_DESTROY, NULL, wl_proxy_get_version((struct wl_proxy *) zxdg_toplevel_decoration_v1), WL_MARSHAL_FLAG_DESTROY);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ingroup iface_zxdg_toplevel_decoration_v1
|
||||||
|
*
|
||||||
|
* Set the toplevel surface decoration mode. This informs the compositor
|
||||||
|
* that the client prefers the provided decoration mode.
|
||||||
|
*
|
||||||
|
* After requesting a decoration mode, the compositor will respond by
|
||||||
|
* emitting an xdg_surface.configure event. The client should then update
|
||||||
|
* its content, drawing it without decorations if the received mode is
|
||||||
|
* server-side decorations. The client must also acknowledge the configure
|
||||||
|
* when committing the new content (see xdg_surface.ack_configure).
|
||||||
|
*
|
||||||
|
* The compositor can decide not to use the client's mode and enforce a
|
||||||
|
* different mode instead.
|
||||||
|
*
|
||||||
|
* Clients whose decoration mode depend on the xdg_toplevel state may send
|
||||||
|
* a set_mode request in response to an xdg_surface.configure event and wait
|
||||||
|
* for the next xdg_surface.configure event to prevent unwanted state.
|
||||||
|
* Such clients are responsible for preventing configure loops and must
|
||||||
|
* make sure not to send multiple successive set_mode requests with the
|
||||||
|
* same decoration mode.
|
||||||
|
*
|
||||||
|
* If an invalid mode is supplied by the client, the invalid_mode protocol
|
||||||
|
* error is raised by the compositor.
|
||||||
|
*/
|
||||||
|
static inline void
|
||||||
|
zxdg_toplevel_decoration_v1_set_mode(struct zxdg_toplevel_decoration_v1 *zxdg_toplevel_decoration_v1, uint32_t mode)
|
||||||
|
{
|
||||||
|
wl_proxy_marshal_flags((struct wl_proxy *) zxdg_toplevel_decoration_v1,
|
||||||
|
ZXDG_TOPLEVEL_DECORATION_V1_SET_MODE, NULL, wl_proxy_get_version((struct wl_proxy *) zxdg_toplevel_decoration_v1), 0, mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ingroup iface_zxdg_toplevel_decoration_v1
|
||||||
|
*
|
||||||
|
* Unset the toplevel surface decoration mode. This informs the compositor
|
||||||
|
* that the client doesn't prefer a particular decoration mode.
|
||||||
|
*
|
||||||
|
* This request has the same semantics as set_mode.
|
||||||
|
*/
|
||||||
|
static inline void
|
||||||
|
zxdg_toplevel_decoration_v1_unset_mode(struct zxdg_toplevel_decoration_v1 *zxdg_toplevel_decoration_v1)
|
||||||
|
{
|
||||||
|
wl_proxy_marshal_flags((struct wl_proxy *) zxdg_toplevel_decoration_v1,
|
||||||
|
ZXDG_TOPLEVEL_DECORATION_V1_UNSET_MODE, NULL, wl_proxy_get_version((struct wl_proxy *) zxdg_toplevel_decoration_v1), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,184 @@
|
||||||
|
/* Generated by wayland-scanner 1.24.0 */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright © 2008-2013 Kristian Høgsberg
|
||||||
|
* Copyright © 2013 Rafael Antognolli
|
||||||
|
* Copyright © 2013 Jasper St. Pierre
|
||||||
|
* Copyright © 2010-2013 Intel Corporation
|
||||||
|
* Copyright © 2015-2017 Samsung Electronics Co., Ltd
|
||||||
|
* Copyright © 2015-2017 Red Hat Inc.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "wayland-util.h"
|
||||||
|
|
||||||
|
#ifndef __has_attribute
|
||||||
|
# define __has_attribute(x) 0 /* Compatibility with non-clang compilers. */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (__has_attribute(visibility) || defined(__GNUC__) && __GNUC__ >= 4)
|
||||||
|
#define WL_PRIVATE __attribute__ ((visibility("hidden")))
|
||||||
|
#else
|
||||||
|
#define WL_PRIVATE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern const struct wl_interface wl_output_interface;
|
||||||
|
extern const struct wl_interface wl_seat_interface;
|
||||||
|
extern const struct wl_interface wl_surface_interface;
|
||||||
|
extern const struct wl_interface xdg_popup_interface;
|
||||||
|
extern const struct wl_interface xdg_positioner_interface;
|
||||||
|
extern const struct wl_interface xdg_surface_interface;
|
||||||
|
extern const struct wl_interface xdg_toplevel_interface;
|
||||||
|
|
||||||
|
static const struct wl_interface *xdg_shell_types[] = {
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
&xdg_positioner_interface,
|
||||||
|
&xdg_surface_interface,
|
||||||
|
&wl_surface_interface,
|
||||||
|
&xdg_toplevel_interface,
|
||||||
|
&xdg_popup_interface,
|
||||||
|
&xdg_surface_interface,
|
||||||
|
&xdg_positioner_interface,
|
||||||
|
&xdg_toplevel_interface,
|
||||||
|
&wl_seat_interface,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
&wl_seat_interface,
|
||||||
|
NULL,
|
||||||
|
&wl_seat_interface,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
&wl_output_interface,
|
||||||
|
&wl_seat_interface,
|
||||||
|
NULL,
|
||||||
|
&xdg_positioner_interface,
|
||||||
|
NULL,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message xdg_wm_base_requests[] = {
|
||||||
|
{ "destroy", "", xdg_shell_types + 0 },
|
||||||
|
{ "create_positioner", "n", xdg_shell_types + 4 },
|
||||||
|
{ "get_xdg_surface", "no", xdg_shell_types + 5 },
|
||||||
|
{ "pong", "u", xdg_shell_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message xdg_wm_base_events[] = {
|
||||||
|
{ "ping", "u", xdg_shell_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
WL_PRIVATE const struct wl_interface xdg_wm_base_interface = {
|
||||||
|
"xdg_wm_base", 7,
|
||||||
|
4, xdg_wm_base_requests,
|
||||||
|
1, xdg_wm_base_events,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message xdg_positioner_requests[] = {
|
||||||
|
{ "destroy", "", xdg_shell_types + 0 },
|
||||||
|
{ "set_size", "ii", xdg_shell_types + 0 },
|
||||||
|
{ "set_anchor_rect", "iiii", xdg_shell_types + 0 },
|
||||||
|
{ "set_anchor", "u", xdg_shell_types + 0 },
|
||||||
|
{ "set_gravity", "u", xdg_shell_types + 0 },
|
||||||
|
{ "set_constraint_adjustment", "u", xdg_shell_types + 0 },
|
||||||
|
{ "set_offset", "ii", xdg_shell_types + 0 },
|
||||||
|
{ "set_reactive", "3", xdg_shell_types + 0 },
|
||||||
|
{ "set_parent_size", "3ii", xdg_shell_types + 0 },
|
||||||
|
{ "set_parent_configure", "3u", xdg_shell_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
WL_PRIVATE const struct wl_interface xdg_positioner_interface = {
|
||||||
|
"xdg_positioner", 7,
|
||||||
|
10, xdg_positioner_requests,
|
||||||
|
0, NULL,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message xdg_surface_requests[] = {
|
||||||
|
{ "destroy", "", xdg_shell_types + 0 },
|
||||||
|
{ "get_toplevel", "n", xdg_shell_types + 7 },
|
||||||
|
{ "get_popup", "n?oo", xdg_shell_types + 8 },
|
||||||
|
{ "set_window_geometry", "iiii", xdg_shell_types + 0 },
|
||||||
|
{ "ack_configure", "u", xdg_shell_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message xdg_surface_events[] = {
|
||||||
|
{ "configure", "u", xdg_shell_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
WL_PRIVATE const struct wl_interface xdg_surface_interface = {
|
||||||
|
"xdg_surface", 7,
|
||||||
|
5, xdg_surface_requests,
|
||||||
|
1, xdg_surface_events,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message xdg_toplevel_requests[] = {
|
||||||
|
{ "destroy", "", xdg_shell_types + 0 },
|
||||||
|
{ "set_parent", "?o", xdg_shell_types + 11 },
|
||||||
|
{ "set_title", "s", xdg_shell_types + 0 },
|
||||||
|
{ "set_app_id", "s", xdg_shell_types + 0 },
|
||||||
|
{ "show_window_menu", "ouii", xdg_shell_types + 12 },
|
||||||
|
{ "move", "ou", xdg_shell_types + 16 },
|
||||||
|
{ "resize", "ouu", xdg_shell_types + 18 },
|
||||||
|
{ "set_max_size", "ii", xdg_shell_types + 0 },
|
||||||
|
{ "set_min_size", "ii", xdg_shell_types + 0 },
|
||||||
|
{ "set_maximized", "", xdg_shell_types + 0 },
|
||||||
|
{ "unset_maximized", "", xdg_shell_types + 0 },
|
||||||
|
{ "set_fullscreen", "?o", xdg_shell_types + 21 },
|
||||||
|
{ "unset_fullscreen", "", xdg_shell_types + 0 },
|
||||||
|
{ "set_minimized", "", xdg_shell_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message xdg_toplevel_events[] = {
|
||||||
|
{ "configure", "iia", xdg_shell_types + 0 },
|
||||||
|
{ "close", "", xdg_shell_types + 0 },
|
||||||
|
{ "configure_bounds", "4ii", xdg_shell_types + 0 },
|
||||||
|
{ "wm_capabilities", "5a", xdg_shell_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
WL_PRIVATE const struct wl_interface xdg_toplevel_interface = {
|
||||||
|
"xdg_toplevel", 7,
|
||||||
|
14, xdg_toplevel_requests,
|
||||||
|
4, xdg_toplevel_events,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message xdg_popup_requests[] = {
|
||||||
|
{ "destroy", "", xdg_shell_types + 0 },
|
||||||
|
{ "grab", "ou", xdg_shell_types + 22 },
|
||||||
|
{ "reposition", "3ou", xdg_shell_types + 24 },
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct wl_message xdg_popup_events[] = {
|
||||||
|
{ "configure", "iiii", xdg_shell_types + 0 },
|
||||||
|
{ "popup_done", "", xdg_shell_types + 0 },
|
||||||
|
{ "repositioned", "3u", xdg_shell_types + 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
WL_PRIVATE const struct wl_interface xdg_popup_interface = {
|
||||||
|
"xdg_popup", 7,
|
||||||
|
3, xdg_popup_requests,
|
||||||
|
3, xdg_popup_events,
|
||||||
|
};
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,102 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<protocol name="fractional_scale_v1">
|
||||||
|
<copyright>
|
||||||
|
Copyright © 2022 Kenny Levinsen
|
||||||
|
|
||||||
|
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.
|
||||||
|
</copyright>
|
||||||
|
|
||||||
|
<description summary="Protocol for requesting fractional surface scales">
|
||||||
|
This protocol allows a compositor to suggest for surfaces to render at
|
||||||
|
fractional scales.
|
||||||
|
|
||||||
|
A client can submit scaled content by utilizing wp_viewport. This is done by
|
||||||
|
creating a wp_viewport object for the surface and setting the destination
|
||||||
|
rectangle to the surface size before the scale factor is applied.
|
||||||
|
|
||||||
|
The buffer size is calculated by multiplying the surface size by the
|
||||||
|
intended scale.
|
||||||
|
|
||||||
|
The wl_surface buffer scale should remain set to 1.
|
||||||
|
|
||||||
|
If a surface has a surface-local size of 100 px by 50 px and wishes to
|
||||||
|
submit buffers with a scale of 1.5, then a buffer of 150px by 75 px should
|
||||||
|
be used and the wp_viewport destination rectangle should be 100 px by 50 px.
|
||||||
|
|
||||||
|
For toplevel surfaces, the size is rounded halfway away from zero. The
|
||||||
|
rounding algorithm for subsurface position and size is not defined.
|
||||||
|
</description>
|
||||||
|
|
||||||
|
<interface name="wp_fractional_scale_manager_v1" version="1">
|
||||||
|
<description summary="fractional surface scale information">
|
||||||
|
A global interface for requesting surfaces to use fractional scales.
|
||||||
|
</description>
|
||||||
|
|
||||||
|
<request name="destroy" type="destructor">
|
||||||
|
<description summary="unbind the fractional surface scale interface">
|
||||||
|
Informs the server that the client will not be using this protocol
|
||||||
|
object anymore. This does not affect any other objects,
|
||||||
|
wp_fractional_scale_v1 objects included.
|
||||||
|
</description>
|
||||||
|
</request>
|
||||||
|
|
||||||
|
<enum name="error">
|
||||||
|
<entry name="fractional_scale_exists" value="0"
|
||||||
|
summary="the surface already has a fractional_scale object associated"/>
|
||||||
|
</enum>
|
||||||
|
|
||||||
|
<request name="get_fractional_scale">
|
||||||
|
<description summary="extend surface interface for scale information">
|
||||||
|
Create an add-on object for the the wl_surface to let the compositor
|
||||||
|
request fractional scales. If the given wl_surface already has a
|
||||||
|
wp_fractional_scale_v1 object associated, the fractional_scale_exists
|
||||||
|
protocol error is raised.
|
||||||
|
</description>
|
||||||
|
<arg name="id" type="new_id" interface="wp_fractional_scale_v1"
|
||||||
|
summary="the new surface scale info interface id"/>
|
||||||
|
<arg name="surface" type="object" interface="wl_surface"
|
||||||
|
summary="the surface"/>
|
||||||
|
</request>
|
||||||
|
</interface>
|
||||||
|
|
||||||
|
<interface name="wp_fractional_scale_v1" version="1">
|
||||||
|
<description summary="fractional scale interface to a wl_surface">
|
||||||
|
An additional interface to a wl_surface object which allows the compositor
|
||||||
|
to inform the client of the preferred scale.
|
||||||
|
</description>
|
||||||
|
|
||||||
|
<request name="destroy" type="destructor">
|
||||||
|
<description summary="remove surface scale information for surface">
|
||||||
|
Destroy the fractional scale object. When this object is destroyed,
|
||||||
|
preferred_scale events will no longer be sent.
|
||||||
|
</description>
|
||||||
|
</request>
|
||||||
|
|
||||||
|
<event name="preferred_scale">
|
||||||
|
<description summary="notify of new preferred scale">
|
||||||
|
Notification of a new preferred scale for this surface that the
|
||||||
|
compositor suggests that the client should use.
|
||||||
|
|
||||||
|
The sent scale is the numerator of a fraction with a denominator of 120.
|
||||||
|
</description>
|
||||||
|
<arg name="scale" type="uint" summary="the new preferred scale"/>
|
||||||
|
</event>
|
||||||
|
</interface>
|
||||||
|
</protocol>
|
||||||
|
|
@ -0,0 +1,177 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<protocol name="viewporter">
|
||||||
|
|
||||||
|
<copyright>
|
||||||
|
Copyright © 2013-2016 Collabora, Ltd.
|
||||||
|
|
||||||
|
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.
|
||||||
|
</copyright>
|
||||||
|
|
||||||
|
<interface name="wp_viewporter" version="1">
|
||||||
|
<description summary="surface cropping and scaling">
|
||||||
|
The global interface exposing surface cropping and scaling
|
||||||
|
capabilities is used to instantiate an interface extension for a
|
||||||
|
wl_surface object. This extended interface will then allow
|
||||||
|
cropping and scaling the surface contents, effectively
|
||||||
|
disconnecting the direct relationship between the buffer and the
|
||||||
|
surface size.
|
||||||
|
</description>
|
||||||
|
|
||||||
|
<request name="destroy" type="destructor">
|
||||||
|
<description summary="unbind from the cropping and scaling interface">
|
||||||
|
Informs the server that the client will not be using this
|
||||||
|
protocol object anymore. This does not affect any other objects,
|
||||||
|
wp_viewport objects included.
|
||||||
|
</description>
|
||||||
|
</request>
|
||||||
|
|
||||||
|
<enum name="error">
|
||||||
|
<entry name="viewport_exists" value="0"
|
||||||
|
summary="the surface already has a viewport object associated"/>
|
||||||
|
</enum>
|
||||||
|
|
||||||
|
<request name="get_viewport">
|
||||||
|
<description summary="extend surface interface for crop and scale">
|
||||||
|
Instantiate an interface extension for the given wl_surface to
|
||||||
|
crop and scale its content. If the given wl_surface already has
|
||||||
|
a wp_viewport object associated, the viewport_exists
|
||||||
|
protocol error is raised.
|
||||||
|
</description>
|
||||||
|
<arg name="id" type="new_id" interface="wp_viewport"
|
||||||
|
summary="the new viewport interface id"/>
|
||||||
|
<arg name="surface" type="object" interface="wl_surface"
|
||||||
|
summary="the surface"/>
|
||||||
|
</request>
|
||||||
|
</interface>
|
||||||
|
|
||||||
|
<interface name="wp_viewport" version="1">
|
||||||
|
<description summary="crop and scale interface to a wl_surface">
|
||||||
|
An additional interface to a wl_surface object, which allows the
|
||||||
|
client to specify the cropping and scaling of the surface
|
||||||
|
contents.
|
||||||
|
|
||||||
|
This interface works with two concepts: the source rectangle (src_x,
|
||||||
|
src_y, src_width, src_height), and the destination size (dst_width,
|
||||||
|
dst_height). The contents of the source rectangle are scaled to the
|
||||||
|
destination size, and content outside the source rectangle is ignored.
|
||||||
|
This state is double-buffered, see wl_surface.commit.
|
||||||
|
|
||||||
|
The two parts of crop and scale state are independent: the source
|
||||||
|
rectangle, and the destination size. Initially both are unset, that
|
||||||
|
is, no scaling is applied. The whole of the current wl_buffer is
|
||||||
|
used as the source, and the surface size is as defined in
|
||||||
|
wl_surface.attach.
|
||||||
|
|
||||||
|
If the destination size is set, it causes the surface size to become
|
||||||
|
dst_width, dst_height. The source (rectangle) is scaled to exactly
|
||||||
|
this size. This overrides whatever the attached wl_buffer size is,
|
||||||
|
unless the wl_buffer is NULL. If the wl_buffer is NULL, the surface
|
||||||
|
has no content and therefore no size. Otherwise, the size is always
|
||||||
|
at least 1x1 in surface local coordinates.
|
||||||
|
|
||||||
|
If the source rectangle is set, it defines what area of the wl_buffer is
|
||||||
|
taken as the source. If the source rectangle is set and the destination
|
||||||
|
size is not set, then src_width and src_height must be integers, and the
|
||||||
|
surface size becomes the source rectangle size. This results in cropping
|
||||||
|
without scaling. If src_width or src_height are not integers and
|
||||||
|
destination size is not set, the bad_size protocol error is raised when
|
||||||
|
the surface state is applied.
|
||||||
|
|
||||||
|
The coordinate transformations from buffer pixel coordinates up to
|
||||||
|
the surface-local coordinates happen in the following order:
|
||||||
|
1. buffer_transform (wl_surface.set_buffer_transform)
|
||||||
|
2. buffer_scale (wl_surface.set_buffer_scale)
|
||||||
|
3. crop and scale (wp_viewport.set*)
|
||||||
|
This means, that the source rectangle coordinates of crop and scale
|
||||||
|
are given in the coordinates after the buffer transform and scale,
|
||||||
|
i.e. in the coordinates that would be the surface-local coordinates
|
||||||
|
if the crop and scale was not applied.
|
||||||
|
|
||||||
|
If src_x or src_y are negative, the bad_value protocol error is raised.
|
||||||
|
Otherwise, if the source rectangle is partially or completely outside of
|
||||||
|
the non-NULL wl_buffer, then the out_of_buffer protocol error is raised
|
||||||
|
when the surface state is applied. A NULL wl_buffer does not raise the
|
||||||
|
out_of_buffer error.
|
||||||
|
|
||||||
|
If the wl_surface associated with the wp_viewport is destroyed,
|
||||||
|
all wp_viewport requests except 'destroy' raise the protocol error
|
||||||
|
no_surface.
|
||||||
|
|
||||||
|
If the wp_viewport object is destroyed, the crop and scale
|
||||||
|
state is removed from the wl_surface. The change will be applied
|
||||||
|
on the next wl_surface.commit.
|
||||||
|
</description>
|
||||||
|
|
||||||
|
<request name="destroy" type="destructor">
|
||||||
|
<description summary="remove scaling and cropping from the surface">
|
||||||
|
The associated wl_surface's crop and scale state is removed.
|
||||||
|
The change is applied on the next wl_surface.commit.
|
||||||
|
</description>
|
||||||
|
</request>
|
||||||
|
|
||||||
|
<enum name="error">
|
||||||
|
<entry name="bad_value" value="0"
|
||||||
|
summary="negative or zero values in width or height"/>
|
||||||
|
<entry name="bad_size" value="1"
|
||||||
|
summary="destination size is not integer"/>
|
||||||
|
<entry name="out_of_buffer" value="2"
|
||||||
|
summary="source rectangle extends outside of the content area"/>
|
||||||
|
<entry name="no_surface" value="3"
|
||||||
|
summary="the wl_surface was destroyed"/>
|
||||||
|
</enum>
|
||||||
|
|
||||||
|
<request name="set_source">
|
||||||
|
<description summary="set the source rectangle for cropping">
|
||||||
|
Set the source rectangle of the associated wl_surface. See
|
||||||
|
wp_viewport for the description, and relation to the wl_buffer
|
||||||
|
size.
|
||||||
|
|
||||||
|
If all of x, y, width and height are -1.0, the source rectangle is
|
||||||
|
unset instead. Any other set of values where width or height are zero
|
||||||
|
or negative, or x or y are negative, raise the bad_value protocol
|
||||||
|
error.
|
||||||
|
|
||||||
|
The crop and scale state is double-buffered, see wl_surface.commit.
|
||||||
|
</description>
|
||||||
|
<arg name="x" type="fixed" summary="source rectangle x"/>
|
||||||
|
<arg name="y" type="fixed" summary="source rectangle y"/>
|
||||||
|
<arg name="width" type="fixed" summary="source rectangle width"/>
|
||||||
|
<arg name="height" type="fixed" summary="source rectangle height"/>
|
||||||
|
</request>
|
||||||
|
|
||||||
|
<request name="set_destination">
|
||||||
|
<description summary="set the surface size for scaling">
|
||||||
|
Set the destination size of the associated wl_surface. See
|
||||||
|
wp_viewport for the description, and relation to the wl_buffer
|
||||||
|
size.
|
||||||
|
|
||||||
|
If width is -1 and height is -1, the destination size is unset
|
||||||
|
instead. Any other pair of values for width and height that
|
||||||
|
contains zero or negative values raises the bad_value protocol
|
||||||
|
error.
|
||||||
|
|
||||||
|
The crop and scale state is double-buffered, see wl_surface.commit.
|
||||||
|
</description>
|
||||||
|
<arg name="width" type="int" summary="surface width"/>
|
||||||
|
<arg name="height" type="int" summary="surface height"/>
|
||||||
|
</request>
|
||||||
|
</interface>
|
||||||
|
|
||||||
|
</protocol>
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,160 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<protocol name="xdg_decoration_unstable_v1">
|
||||||
|
<copyright>
|
||||||
|
Copyright © 2018 Simon Ser
|
||||||
|
|
||||||
|
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.
|
||||||
|
</copyright>
|
||||||
|
|
||||||
|
<interface name="zxdg_decoration_manager_v1" version="1">
|
||||||
|
<description summary="window decoration manager">
|
||||||
|
This interface allows a compositor to announce support for server-side
|
||||||
|
decorations.
|
||||||
|
|
||||||
|
A window decoration is a set of window controls as deemed appropriate by
|
||||||
|
the party managing them, such as user interface components used to move,
|
||||||
|
resize and change a window's state.
|
||||||
|
|
||||||
|
A client can use this protocol to request being decorated by a supporting
|
||||||
|
compositor.
|
||||||
|
|
||||||
|
If compositor and client do not negotiate the use of a server-side
|
||||||
|
decoration using this protocol, clients continue to self-decorate as they
|
||||||
|
see fit.
|
||||||
|
|
||||||
|
Warning! The protocol described in this file is experimental and
|
||||||
|
backward incompatible changes may be made. Backward compatible changes
|
||||||
|
may be added together with the corresponding interface version bump.
|
||||||
|
Backward incompatible changes are done by bumping the version number in
|
||||||
|
the protocol and interface names and resetting the interface version.
|
||||||
|
Once the protocol is to be declared stable, the 'z' prefix and the
|
||||||
|
version number in the protocol and interface names are removed and the
|
||||||
|
interface version number is reset.
|
||||||
|
</description>
|
||||||
|
|
||||||
|
<request name="destroy" type="destructor">
|
||||||
|
<description summary="destroy the decoration manager object">
|
||||||
|
Destroy the decoration manager. This doesn't destroy objects created
|
||||||
|
with the manager.
|
||||||
|
</description>
|
||||||
|
</request>
|
||||||
|
|
||||||
|
<request name="get_toplevel_decoration">
|
||||||
|
<description summary="create a new toplevel decoration object">
|
||||||
|
Create a new decoration object associated with the given toplevel.
|
||||||
|
|
||||||
|
Creating an xdg_toplevel_decoration from an xdg_toplevel which has a
|
||||||
|
buffer attached or committed is a client error, and any attempts by a
|
||||||
|
client to attach or manipulate a buffer prior to the first
|
||||||
|
xdg_toplevel_decoration.configure event must also be treated as
|
||||||
|
errors.
|
||||||
|
</description>
|
||||||
|
<arg name="id" type="new_id" interface="zxdg_toplevel_decoration_v1"/>
|
||||||
|
<arg name="toplevel" type="object" interface="xdg_toplevel"/>
|
||||||
|
</request>
|
||||||
|
</interface>
|
||||||
|
|
||||||
|
<interface name="zxdg_toplevel_decoration_v1" version="1">
|
||||||
|
<description summary="decoration object for a toplevel surface">
|
||||||
|
The decoration object allows the compositor to toggle server-side window
|
||||||
|
decorations for a toplevel surface. The client can request to switch to
|
||||||
|
another mode.
|
||||||
|
|
||||||
|
The xdg_toplevel_decoration object must be destroyed before its
|
||||||
|
xdg_toplevel.
|
||||||
|
</description>
|
||||||
|
|
||||||
|
<enum name="error">
|
||||||
|
<entry name="unconfigured_buffer" value="0"
|
||||||
|
summary="xdg_toplevel has a buffer attached before configure"/>
|
||||||
|
<entry name="already_constructed" value="1"
|
||||||
|
summary="xdg_toplevel already has a decoration object"/>
|
||||||
|
<entry name="orphaned" value="2"
|
||||||
|
summary="xdg_toplevel destroyed before the decoration object"/>
|
||||||
|
<entry name="invalid_mode" value="3" summary="invalid mode"/>
|
||||||
|
</enum>
|
||||||
|
|
||||||
|
<request name="destroy" type="destructor">
|
||||||
|
<description summary="destroy the decoration object">
|
||||||
|
Switch back to a mode without any server-side decorations at the next
|
||||||
|
commit.
|
||||||
|
</description>
|
||||||
|
</request>
|
||||||
|
|
||||||
|
<enum name="mode">
|
||||||
|
<description summary="window decoration modes">
|
||||||
|
These values describe window decoration modes.
|
||||||
|
</description>
|
||||||
|
<entry name="client_side" value="1"
|
||||||
|
summary="no server-side window decoration"/>
|
||||||
|
<entry name="server_side" value="2"
|
||||||
|
summary="server-side window decoration"/>
|
||||||
|
</enum>
|
||||||
|
|
||||||
|
<request name="set_mode">
|
||||||
|
<description summary="set the decoration mode">
|
||||||
|
Set the toplevel surface decoration mode. This informs the compositor
|
||||||
|
that the client prefers the provided decoration mode.
|
||||||
|
|
||||||
|
After requesting a decoration mode, the compositor will respond by
|
||||||
|
emitting an xdg_surface.configure event. The client should then update
|
||||||
|
its content, drawing it without decorations if the received mode is
|
||||||
|
server-side decorations. The client must also acknowledge the configure
|
||||||
|
when committing the new content (see xdg_surface.ack_configure).
|
||||||
|
|
||||||
|
The compositor can decide not to use the client's mode and enforce a
|
||||||
|
different mode instead.
|
||||||
|
|
||||||
|
Clients whose decoration mode depend on the xdg_toplevel state may send
|
||||||
|
a set_mode request in response to an xdg_surface.configure event and wait
|
||||||
|
for the next xdg_surface.configure event to prevent unwanted state.
|
||||||
|
Such clients are responsible for preventing configure loops and must
|
||||||
|
make sure not to send multiple successive set_mode requests with the
|
||||||
|
same decoration mode.
|
||||||
|
|
||||||
|
If an invalid mode is supplied by the client, the invalid_mode protocol
|
||||||
|
error is raised by the compositor.
|
||||||
|
</description>
|
||||||
|
<arg name="mode" type="uint" enum="mode" summary="the decoration mode"/>
|
||||||
|
</request>
|
||||||
|
|
||||||
|
<request name="unset_mode">
|
||||||
|
<description summary="unset the decoration mode">
|
||||||
|
Unset the toplevel surface decoration mode. This informs the compositor
|
||||||
|
that the client doesn't prefer a particular decoration mode.
|
||||||
|
|
||||||
|
This request has the same semantics as set_mode.
|
||||||
|
</description>
|
||||||
|
</request>
|
||||||
|
|
||||||
|
<event name="configure">
|
||||||
|
<description summary="notify a decoration mode change">
|
||||||
|
The configure event configures the effective decoration mode. The
|
||||||
|
configured state should not be applied immediately. Clients must send an
|
||||||
|
ack_configure in response to this event. See xdg_surface.configure and
|
||||||
|
xdg_surface.ack_configure for details.
|
||||||
|
|
||||||
|
A configure event can be sent at any time. The specified mode must be
|
||||||
|
obeyed by the client.
|
||||||
|
</description>
|
||||||
|
<arg name="mode" type="uint" enum="mode" summary="the decoration mode"/>
|
||||||
|
</event>
|
||||||
|
</interface>
|
||||||
|
</protocol>
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,86 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Maintainer-only refresh/check of pinned ABI headers and protocol bindings."""
|
||||||
|
import argparse
|
||||||
|
import hashlib
|
||||||
|
import io
|
||||||
|
import json
|
||||||
|
from pathlib import Path
|
||||||
|
import subprocess
|
||||||
|
import tarfile
|
||||||
|
import tempfile
|
||||||
|
import urllib.request
|
||||||
|
import xml.etree.ElementTree as ET
|
||||||
|
|
||||||
|
ROOT = Path(__file__).resolve().parents[1]
|
||||||
|
MANIFEST = ROOT / 'vendor/manifest.json'
|
||||||
|
|
||||||
|
|
||||||
|
def digest(data):
|
||||||
|
return hashlib.sha256(data).hexdigest()
|
||||||
|
|
||||||
|
|
||||||
|
def generate(root, version):
|
||||||
|
result = subprocess.run(['wayland-scanner', '--version'], capture_output=True, text=True, check=True)
|
||||||
|
if (result.stdout + result.stderr).strip() != 'wayland-scanner ' + version:
|
||||||
|
raise SystemExit('Expected wayland-scanner ' + version)
|
||||||
|
output = root / 'protocols/generated'
|
||||||
|
output.mkdir(parents=True, exist_ok=True)
|
||||||
|
version_h = (root / 'vendor/wayland/wayland-version.h.in').read_text()
|
||||||
|
for key, value in zip(['MAJOR', 'MINOR', 'MICRO'], version.split('.')):
|
||||||
|
version_h = version_h.replace('@WAYLAND_VERSION_' + key + '@', value)
|
||||||
|
version_h = version_h.replace('@WAYLAND_VERSION@', version)
|
||||||
|
(output / 'wayland-version.h').write_text(version_h)
|
||||||
|
symbols = ['/* Generated by tools/protocols.py; private protocol descriptors. */']
|
||||||
|
for xml in sorted((root / 'protocols/xml').glob('*.xml')):
|
||||||
|
for interface in ET.parse(xml).getroot().findall('interface'):
|
||||||
|
name = interface.attrib['name'] + '_interface'
|
||||||
|
symbols.append(f'#define {name} z_uhdk_{name}')
|
||||||
|
for mode, suffix in [('client-header', '.h'), ('private-code', '.c')]:
|
||||||
|
subprocess.run(['wayland-scanner', mode, str(xml), str(output / (('wayland-client-protocol' if xml.stem == 'wayland' and mode == 'client-header' else xml.stem) + suffix))], check=True)
|
||||||
|
(output / 'private-symbols.h').write_text('\n'.join(symbols) + '\n')
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = argparse.ArgumentParser(description=__doc__)
|
||||||
|
mode = parser.add_mutually_exclusive_group(required=True)
|
||||||
|
mode.add_argument('--check', action='store_true', help='verify checked-in file hashes; no tools/network needed')
|
||||||
|
mode.add_argument('--regenerate', action='store_true', help='regenerate using the pinned scanner and update generated hashes')
|
||||||
|
mode.add_argument('--verify-generation', action='store_true', help='regenerate in a temporary directory and compare')
|
||||||
|
mode.add_argument('--fetch', action='store_true', help='restore exact upstream files using checksum-verified sources')
|
||||||
|
args = parser.parse_args()
|
||||||
|
manifest = json.loads(MANIFEST.read_text())
|
||||||
|
if args.fetch:
|
||||||
|
for source in manifest['sources']:
|
||||||
|
with urllib.request.urlopen(source['url'], timeout=60) as response:
|
||||||
|
data = response.read()
|
||||||
|
if digest(data) != source['sha256']:
|
||||||
|
raise SystemExit('Source checksum mismatch: ' + source['url'])
|
||||||
|
if 'destination' in source:
|
||||||
|
(ROOT / source['destination']).write_bytes(data)
|
||||||
|
else:
|
||||||
|
with tarfile.open(fileobj=io.BytesIO(data)) as archive:
|
||||||
|
for src, dst in source['files'].items():
|
||||||
|
(ROOT / dst).write_bytes(archive.extractfile(source['prefix'] + src).read())
|
||||||
|
if args.regenerate:
|
||||||
|
generate(ROOT, manifest['scanner'])
|
||||||
|
manifest['generated'] = {str(p.relative_to(ROOT)): digest(p.read_bytes())
|
||||||
|
for p in sorted((ROOT / 'protocols/generated').iterdir())}
|
||||||
|
MANIFEST.write_text(json.dumps(manifest, indent=2) + '\n')
|
||||||
|
if args.verify_generation:
|
||||||
|
import shutil
|
||||||
|
with tempfile.TemporaryDirectory(prefix='uhdk-protocols-') as directory:
|
||||||
|
temporary = Path(directory)
|
||||||
|
shutil.copytree(ROOT / 'vendor', temporary / 'vendor')
|
||||||
|
shutil.copytree(ROOT / 'protocols/xml', temporary / 'protocols/xml')
|
||||||
|
generate(temporary, manifest['scanner'])
|
||||||
|
for path, checksum in manifest['generated'].items():
|
||||||
|
if digest((temporary / path).read_bytes()) != checksum:
|
||||||
|
raise SystemExit('Generation differs: ' + path)
|
||||||
|
for path, checksum in (manifest['files'] | manifest.get('generated', {})).items():
|
||||||
|
if digest((ROOT / path).read_bytes()) != checksum:
|
||||||
|
raise SystemExit('File checksum mismatch: ' + path)
|
||||||
|
print('Pinned headers and protocols verified.')
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
|
|
@ -0,0 +1,33 @@
|
||||||
|
# Linux ABI declarations
|
||||||
|
|
||||||
|
Only declarations, protocol XML, licenses, and generated protocol marshalling
|
||||||
|
code are vendored. No desktop library implementation or compiled library is
|
||||||
|
included. `manifest.json` records exact upstream URLs, source SHA-256 digests,
|
||||||
|
per-file digests, and the scanner version.
|
||||||
|
|
||||||
|
- Wayland 1.24.0: client/utility/EGL ABI headers and core XML. MIT license in
|
||||||
|
`wayland/COPYING` and individual file notices.
|
||||||
|
- wayland-protocols 1.45: xdg-shell, xdg-decoration, viewporter, fractional-scale.
|
||||||
|
License in `wayland-protocols/COPYING` and each XML's copyright element.
|
||||||
|
- Khronos EGL-Registry revision `5961a7fe64cf8a126890ced6f13d69e0a1e1b83e`:
|
||||||
|
EGL and platform ABI headers. Apache-2.0 or MIT notices are embedded in the
|
||||||
|
headers, including the full MIT grant where applicable.
|
||||||
|
|
||||||
|
Upstream files are unmodified. `wayland-version.h` is produced by substituting
|
||||||
|
the release version into the upstream template. The scanner generates client
|
||||||
|
headers and private descriptor C files. `private-symbols.h` gives the descriptors
|
||||||
|
UHDK-specific names at compilation, preventing collisions with other clients.
|
||||||
|
|
||||||
|
From the package directory:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
python3 src/linux/tools/protocols.py --check
|
||||||
|
python3 src/linux/tools/protocols.py --verify-generation # needs scanner 1.24.0
|
||||||
|
python3 src/linux/tools/protocols.py --fetch # restore pinned upstream files
|
||||||
|
python3 src/linux/tools/protocols.py --regenerate # update generated files/hashes
|
||||||
|
```
|
||||||
|
|
||||||
|
Ordinary builds do not execute this tool. Dependency updates require deliberately
|
||||||
|
updating the source pins and file hashes, retaining license notices, and reviewing
|
||||||
|
the regenerated diff. `--fetch` verifies archive hashes before extracting only
|
||||||
|
explicitly listed members; it does not update pins or accept new checksums.
|
||||||
|
|
@ -0,0 +1,342 @@
|
||||||
|
#ifndef __egl_h_
|
||||||
|
#define __egl_h_ 1
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Copyright 2013-2020 The Khronos Group Inc.
|
||||||
|
** SPDX-License-Identifier: Apache-2.0
|
||||||
|
**
|
||||||
|
** This header is generated from the Khronos EGL XML API Registry.
|
||||||
|
** The current version of the Registry, generator scripts
|
||||||
|
** used to make the header, and the header can be found at
|
||||||
|
** http://www.khronos.org/registry/egl
|
||||||
|
**
|
||||||
|
** Khronos $Git commit SHA1: e80a2e0050 $ on $Git commit date: 2026-03-19 06:21:49 +0100 $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <EGL/eglplatform.h>
|
||||||
|
|
||||||
|
#ifndef EGL_EGL_PROTOTYPES
|
||||||
|
#define EGL_EGL_PROTOTYPES 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Generated on date 20260319 */
|
||||||
|
|
||||||
|
/* Generated C header for:
|
||||||
|
* API: egl
|
||||||
|
* Versions considered: .*
|
||||||
|
* Versions emitted: .*
|
||||||
|
* Default extensions included: None
|
||||||
|
* Additional extensions included: _nomatch_^
|
||||||
|
* Extensions removed: _nomatch_^
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef EGL_VERSION_1_0
|
||||||
|
#define EGL_VERSION_1_0 1
|
||||||
|
typedef unsigned int EGLBoolean;
|
||||||
|
typedef void *EGLDisplay;
|
||||||
|
#include <KHR/khrplatform.h>
|
||||||
|
#include <EGL/eglplatform.h>
|
||||||
|
typedef void *EGLConfig;
|
||||||
|
typedef void *EGLSurface;
|
||||||
|
typedef void *EGLContext;
|
||||||
|
typedef void (*__eglMustCastToProperFunctionPointerType)(void);
|
||||||
|
#define EGL_ALPHA_SIZE 0x3021
|
||||||
|
#define EGL_BAD_ACCESS 0x3002
|
||||||
|
#define EGL_BAD_ALLOC 0x3003
|
||||||
|
#define EGL_BAD_ATTRIBUTE 0x3004
|
||||||
|
#define EGL_BAD_CONFIG 0x3005
|
||||||
|
#define EGL_BAD_CONTEXT 0x3006
|
||||||
|
#define EGL_BAD_CURRENT_SURFACE 0x3007
|
||||||
|
#define EGL_BAD_DISPLAY 0x3008
|
||||||
|
#define EGL_BAD_MATCH 0x3009
|
||||||
|
#define EGL_BAD_NATIVE_PIXMAP 0x300A
|
||||||
|
#define EGL_BAD_NATIVE_WINDOW 0x300B
|
||||||
|
#define EGL_BAD_PARAMETER 0x300C
|
||||||
|
#define EGL_BAD_SURFACE 0x300D
|
||||||
|
#define EGL_BLUE_SIZE 0x3022
|
||||||
|
#define EGL_BUFFER_SIZE 0x3020
|
||||||
|
#define EGL_CONFIG_CAVEAT 0x3027
|
||||||
|
#define EGL_CONFIG_ID 0x3028
|
||||||
|
#define EGL_CORE_NATIVE_ENGINE 0x305B
|
||||||
|
#define EGL_DEPTH_SIZE 0x3025
|
||||||
|
#define EGL_DONT_CARE EGL_CAST(EGLint,-1)
|
||||||
|
#define EGL_DRAW 0x3059
|
||||||
|
#define EGL_EXTENSIONS 0x3055
|
||||||
|
#define EGL_FALSE 0
|
||||||
|
#define EGL_GREEN_SIZE 0x3023
|
||||||
|
#define EGL_HEIGHT 0x3056
|
||||||
|
#define EGL_LARGEST_PBUFFER 0x3058
|
||||||
|
#define EGL_LEVEL 0x3029
|
||||||
|
#define EGL_MAX_PBUFFER_HEIGHT 0x302A
|
||||||
|
#define EGL_MAX_PBUFFER_PIXELS 0x302B
|
||||||
|
#define EGL_MAX_PBUFFER_WIDTH 0x302C
|
||||||
|
#define EGL_NATIVE_RENDERABLE 0x302D
|
||||||
|
#define EGL_NATIVE_VISUAL_ID 0x302E
|
||||||
|
#define EGL_NATIVE_VISUAL_TYPE 0x302F
|
||||||
|
#define EGL_NONE 0x3038
|
||||||
|
#define EGL_NON_CONFORMANT_CONFIG 0x3051
|
||||||
|
#define EGL_NOT_INITIALIZED 0x3001
|
||||||
|
#define EGL_NO_CONTEXT EGL_CAST(EGLContext,0)
|
||||||
|
#define EGL_NO_DISPLAY EGL_CAST(EGLDisplay,0)
|
||||||
|
#define EGL_NO_SURFACE EGL_CAST(EGLSurface,0)
|
||||||
|
#define EGL_PBUFFER_BIT 0x0001
|
||||||
|
#define EGL_PIXMAP_BIT 0x0002
|
||||||
|
#define EGL_READ 0x305A
|
||||||
|
#define EGL_RED_SIZE 0x3024
|
||||||
|
#define EGL_SAMPLES 0x3031
|
||||||
|
#define EGL_SAMPLE_BUFFERS 0x3032
|
||||||
|
#define EGL_SLOW_CONFIG 0x3050
|
||||||
|
#define EGL_STENCIL_SIZE 0x3026
|
||||||
|
#define EGL_SUCCESS 0x3000
|
||||||
|
#define EGL_SURFACE_TYPE 0x3033
|
||||||
|
#define EGL_TRANSPARENT_BLUE_VALUE 0x3035
|
||||||
|
#define EGL_TRANSPARENT_GREEN_VALUE 0x3036
|
||||||
|
#define EGL_TRANSPARENT_RED_VALUE 0x3037
|
||||||
|
#define EGL_TRANSPARENT_RGB 0x3052
|
||||||
|
#define EGL_TRANSPARENT_TYPE 0x3034
|
||||||
|
#define EGL_TRUE 1
|
||||||
|
#define EGL_VENDOR 0x3053
|
||||||
|
#define EGL_VERSION 0x3054
|
||||||
|
#define EGL_WIDTH 0x3057
|
||||||
|
#define EGL_WINDOW_BIT 0x0004
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLCHOOSECONFIGPROC) (EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOPYBUFFERSPROC) (EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target);
|
||||||
|
typedef EGLContext (EGLAPIENTRYP PFNEGLCREATECONTEXTPROC) (EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list);
|
||||||
|
typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPBUFFERSURFACEPROC) (EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list);
|
||||||
|
typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPIXMAPSURFACEPROC) (EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list);
|
||||||
|
typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEWINDOWSURFACEPROC) (EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint *attrib_list);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYCONTEXTPROC) (EGLDisplay dpy, EGLContext ctx);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSURFACEPROC) (EGLDisplay dpy, EGLSurface surface);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETCONFIGATTRIBPROC) (EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETCONFIGSPROC) (EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config);
|
||||||
|
typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETCURRENTDISPLAYPROC) (void);
|
||||||
|
typedef EGLSurface (EGLAPIENTRYP PFNEGLGETCURRENTSURFACEPROC) (EGLint readdraw);
|
||||||
|
typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETDISPLAYPROC) (EGLNativeDisplayType display_id);
|
||||||
|
typedef EGLint (EGLAPIENTRYP PFNEGLGETERRORPROC) (void);
|
||||||
|
typedef __eglMustCastToProperFunctionPointerType (EGLAPIENTRYP PFNEGLGETPROCADDRESSPROC) (const char *procname);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLINITIALIZEPROC) (EGLDisplay dpy, EGLint *major, EGLint *minor);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLMAKECURRENTPROC) (EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYCONTEXTPROC) (EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value);
|
||||||
|
typedef const char *(EGLAPIENTRYP PFNEGLQUERYSTRINGPROC) (EGLDisplay dpy, EGLint name);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSURFACEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSPROC) (EGLDisplay dpy, EGLSurface surface);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLTERMINATEPROC) (EGLDisplay dpy);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLWAITGLPROC) (void);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLWAITNATIVEPROC) (EGLint engine);
|
||||||
|
#if EGL_EGL_PROTOTYPES
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglChooseConfig (EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglCopyBuffers (EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target);
|
||||||
|
EGLAPI EGLContext EGLAPIENTRY eglCreateContext (EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list);
|
||||||
|
EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferSurface (EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list);
|
||||||
|
EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurface (EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list);
|
||||||
|
EGLAPI EGLSurface EGLAPIENTRY eglCreateWindowSurface (EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint *attrib_list);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglDestroyContext (EGLDisplay dpy, EGLContext ctx);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglDestroySurface (EGLDisplay dpy, EGLSurface surface);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigAttrib (EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigs (EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config);
|
||||||
|
EGLAPI EGLDisplay EGLAPIENTRY eglGetCurrentDisplay (void);
|
||||||
|
EGLAPI EGLSurface EGLAPIENTRY eglGetCurrentSurface (EGLint readdraw);
|
||||||
|
EGLAPI EGLDisplay EGLAPIENTRY eglGetDisplay (EGLNativeDisplayType display_id);
|
||||||
|
EGLAPI EGLint EGLAPIENTRY eglGetError (void);
|
||||||
|
EGLAPI __eglMustCastToProperFunctionPointerType EGLAPIENTRY eglGetProcAddress (const char *procname);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglInitialize (EGLDisplay dpy, EGLint *major, EGLint *minor);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglMakeCurrent (EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglQueryContext (EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value);
|
||||||
|
EGLAPI const char *EGLAPIENTRY eglQueryString (EGLDisplay dpy, EGLint name);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurface (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers (EGLDisplay dpy, EGLSurface surface);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglTerminate (EGLDisplay dpy);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglWaitGL (void);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglWaitNative (EGLint engine);
|
||||||
|
#endif
|
||||||
|
#endif /* EGL_VERSION_1_0 */
|
||||||
|
|
||||||
|
#ifndef EGL_VERSION_1_1
|
||||||
|
#define EGL_VERSION_1_1 1
|
||||||
|
#define EGL_BACK_BUFFER 0x3084
|
||||||
|
#define EGL_BIND_TO_TEXTURE_RGB 0x3039
|
||||||
|
#define EGL_BIND_TO_TEXTURE_RGBA 0x303A
|
||||||
|
#define EGL_CONTEXT_LOST 0x300E
|
||||||
|
#define EGL_MIN_SWAP_INTERVAL 0x303B
|
||||||
|
#define EGL_MAX_SWAP_INTERVAL 0x303C
|
||||||
|
#define EGL_MIPMAP_TEXTURE 0x3082
|
||||||
|
#define EGL_MIPMAP_LEVEL 0x3083
|
||||||
|
#define EGL_NO_TEXTURE 0x305C
|
||||||
|
#define EGL_TEXTURE_2D 0x305F
|
||||||
|
#define EGL_TEXTURE_FORMAT 0x3080
|
||||||
|
#define EGL_TEXTURE_RGB 0x305D
|
||||||
|
#define EGL_TEXTURE_RGBA 0x305E
|
||||||
|
#define EGL_TEXTURE_TARGET 0x3081
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLBINDTEXIMAGEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint buffer);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLRELEASETEXIMAGEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint buffer);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLSURFACEATTRIBPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPINTERVALPROC) (EGLDisplay dpy, EGLint interval);
|
||||||
|
#if EGL_EGL_PROTOTYPES
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglBindTexImage (EGLDisplay dpy, EGLSurface surface, EGLint buffer);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglReleaseTexImage (EGLDisplay dpy, EGLSurface surface, EGLint buffer);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglSurfaceAttrib (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglSwapInterval (EGLDisplay dpy, EGLint interval);
|
||||||
|
#endif
|
||||||
|
#endif /* EGL_VERSION_1_1 */
|
||||||
|
|
||||||
|
#ifndef EGL_VERSION_1_2
|
||||||
|
#define EGL_VERSION_1_2 1
|
||||||
|
typedef unsigned int EGLenum;
|
||||||
|
typedef void *EGLClientBuffer;
|
||||||
|
#define EGL_ALPHA_FORMAT 0x3088
|
||||||
|
#define EGL_ALPHA_FORMAT_NONPRE 0x308B
|
||||||
|
#define EGL_ALPHA_FORMAT_PRE 0x308C
|
||||||
|
#define EGL_ALPHA_MASK_SIZE 0x303E
|
||||||
|
#define EGL_BUFFER_PRESERVED 0x3094
|
||||||
|
#define EGL_BUFFER_DESTROYED 0x3095
|
||||||
|
#define EGL_CLIENT_APIS 0x308D
|
||||||
|
#define EGL_COLORSPACE 0x3087
|
||||||
|
#define EGL_COLORSPACE_sRGB 0x3089
|
||||||
|
#define EGL_COLORSPACE_LINEAR 0x308A
|
||||||
|
#define EGL_COLOR_BUFFER_TYPE 0x303F
|
||||||
|
#define EGL_CONTEXT_CLIENT_TYPE 0x3097
|
||||||
|
#define EGL_DISPLAY_SCALING 10000
|
||||||
|
#define EGL_HORIZONTAL_RESOLUTION 0x3090
|
||||||
|
#define EGL_LUMINANCE_BUFFER 0x308F
|
||||||
|
#define EGL_LUMINANCE_SIZE 0x303D
|
||||||
|
#define EGL_OPENGL_ES_BIT 0x0001
|
||||||
|
#define EGL_OPENVG_BIT 0x0002
|
||||||
|
#define EGL_OPENGL_ES_API 0x30A0
|
||||||
|
#define EGL_OPENVG_API 0x30A1
|
||||||
|
#define EGL_OPENVG_IMAGE 0x3096
|
||||||
|
#define EGL_PIXEL_ASPECT_RATIO 0x3092
|
||||||
|
#define EGL_RENDERABLE_TYPE 0x3040
|
||||||
|
#define EGL_RENDER_BUFFER 0x3086
|
||||||
|
#define EGL_RGB_BUFFER 0x308E
|
||||||
|
#define EGL_SINGLE_BUFFER 0x3085
|
||||||
|
#define EGL_SWAP_BEHAVIOR 0x3093
|
||||||
|
#define EGL_UNKNOWN EGL_CAST(EGLint,-1)
|
||||||
|
#define EGL_VERTICAL_RESOLUTION 0x3091
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLBINDAPIPROC) (EGLenum api);
|
||||||
|
typedef EGLenum (EGLAPIENTRYP PFNEGLQUERYAPIPROC) (void);
|
||||||
|
typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPBUFFERFROMCLIENTBUFFERPROC) (EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLRELEASETHREADPROC) (void);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLWAITCLIENTPROC) (void);
|
||||||
|
#if EGL_EGL_PROTOTYPES
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglBindAPI (EGLenum api);
|
||||||
|
EGLAPI EGLenum EGLAPIENTRY eglQueryAPI (void);
|
||||||
|
EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferFromClientBuffer (EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglReleaseThread (void);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglWaitClient (void);
|
||||||
|
#endif
|
||||||
|
#endif /* EGL_VERSION_1_2 */
|
||||||
|
|
||||||
|
#ifndef EGL_VERSION_1_3
|
||||||
|
#define EGL_VERSION_1_3 1
|
||||||
|
#define EGL_CONFORMANT 0x3042
|
||||||
|
#define EGL_CONTEXT_CLIENT_VERSION 0x3098
|
||||||
|
#define EGL_MATCH_NATIVE_PIXMAP 0x3041
|
||||||
|
#define EGL_OPENGL_ES2_BIT 0x0004
|
||||||
|
#define EGL_VG_ALPHA_FORMAT 0x3088
|
||||||
|
#define EGL_VG_ALPHA_FORMAT_NONPRE 0x308B
|
||||||
|
#define EGL_VG_ALPHA_FORMAT_PRE 0x308C
|
||||||
|
#define EGL_VG_ALPHA_FORMAT_PRE_BIT 0x0040
|
||||||
|
#define EGL_VG_COLORSPACE 0x3087
|
||||||
|
#define EGL_VG_COLORSPACE_sRGB 0x3089
|
||||||
|
#define EGL_VG_COLORSPACE_LINEAR 0x308A
|
||||||
|
#define EGL_VG_COLORSPACE_LINEAR_BIT 0x0020
|
||||||
|
#endif /* EGL_VERSION_1_3 */
|
||||||
|
|
||||||
|
#ifndef EGL_VERSION_1_4
|
||||||
|
#define EGL_VERSION_1_4 1
|
||||||
|
#define EGL_DEFAULT_DISPLAY EGL_CAST(EGLNativeDisplayType,0)
|
||||||
|
#define EGL_MULTISAMPLE_RESOLVE_BOX_BIT 0x0200
|
||||||
|
#define EGL_MULTISAMPLE_RESOLVE 0x3099
|
||||||
|
#define EGL_MULTISAMPLE_RESOLVE_DEFAULT 0x309A
|
||||||
|
#define EGL_MULTISAMPLE_RESOLVE_BOX 0x309B
|
||||||
|
#define EGL_OPENGL_API 0x30A2
|
||||||
|
#define EGL_OPENGL_BIT 0x0008
|
||||||
|
#define EGL_SWAP_BEHAVIOR_PRESERVED_BIT 0x0400
|
||||||
|
typedef EGLContext (EGLAPIENTRYP PFNEGLGETCURRENTCONTEXTPROC) (void);
|
||||||
|
#if EGL_EGL_PROTOTYPES
|
||||||
|
EGLAPI EGLContext EGLAPIENTRY eglGetCurrentContext (void);
|
||||||
|
#endif
|
||||||
|
#endif /* EGL_VERSION_1_4 */
|
||||||
|
|
||||||
|
#ifndef EGL_VERSION_1_5
|
||||||
|
#define EGL_VERSION_1_5 1
|
||||||
|
typedef void *EGLSync;
|
||||||
|
typedef intptr_t EGLAttrib;
|
||||||
|
typedef khronos_utime_nanoseconds_t EGLTime;
|
||||||
|
typedef void *EGLImage;
|
||||||
|
#define EGL_CONTEXT_MAJOR_VERSION 0x3098
|
||||||
|
#define EGL_CONTEXT_MINOR_VERSION 0x30FB
|
||||||
|
#define EGL_CONTEXT_OPENGL_PROFILE_MASK 0x30FD
|
||||||
|
#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY 0x31BD
|
||||||
|
#define EGL_NO_RESET_NOTIFICATION 0x31BE
|
||||||
|
#define EGL_LOSE_CONTEXT_ON_RESET 0x31BF
|
||||||
|
#define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT 0x00000001
|
||||||
|
#define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT 0x00000002
|
||||||
|
#define EGL_CONTEXT_OPENGL_DEBUG 0x31B0
|
||||||
|
#define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE 0x31B1
|
||||||
|
#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS 0x31B2
|
||||||
|
#define EGL_OPENGL_ES3_BIT 0x00000040
|
||||||
|
#define EGL_CL_EVENT_HANDLE 0x309C
|
||||||
|
#define EGL_SYNC_CL_EVENT 0x30FE
|
||||||
|
#define EGL_SYNC_CL_EVENT_COMPLETE 0x30FF
|
||||||
|
#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE 0x30F0
|
||||||
|
#define EGL_SYNC_TYPE 0x30F7
|
||||||
|
#define EGL_SYNC_STATUS 0x30F1
|
||||||
|
#define EGL_SYNC_CONDITION 0x30F8
|
||||||
|
#define EGL_SIGNALED 0x30F2
|
||||||
|
#define EGL_UNSIGNALED 0x30F3
|
||||||
|
#define EGL_SYNC_FLUSH_COMMANDS_BIT 0x0001
|
||||||
|
#define EGL_FOREVER 0xFFFFFFFFFFFFFFFFull
|
||||||
|
#define EGL_TIMEOUT_EXPIRED 0x30F5
|
||||||
|
#define EGL_CONDITION_SATISFIED 0x30F6
|
||||||
|
#define EGL_NO_SYNC EGL_CAST(EGLSync,0)
|
||||||
|
#define EGL_SYNC_FENCE 0x30F9
|
||||||
|
#define EGL_GL_COLORSPACE 0x309D
|
||||||
|
#define EGL_GL_COLORSPACE_SRGB 0x3089
|
||||||
|
#define EGL_GL_COLORSPACE_LINEAR 0x308A
|
||||||
|
#define EGL_GL_RENDERBUFFER 0x30B9
|
||||||
|
#define EGL_GL_TEXTURE_2D 0x30B1
|
||||||
|
#define EGL_GL_TEXTURE_LEVEL 0x30BC
|
||||||
|
#define EGL_GL_TEXTURE_3D 0x30B2
|
||||||
|
#define EGL_GL_TEXTURE_ZOFFSET 0x30BD
|
||||||
|
#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x30B3
|
||||||
|
#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x30B4
|
||||||
|
#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x30B5
|
||||||
|
#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x30B6
|
||||||
|
#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x30B7
|
||||||
|
#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x30B8
|
||||||
|
#define EGL_IMAGE_PRESERVED 0x30D2
|
||||||
|
#define EGL_NO_IMAGE EGL_CAST(EGLImage,0)
|
||||||
|
typedef EGLSync (EGLAPIENTRYP PFNEGLCREATESYNCPROC) (EGLDisplay dpy, EGLenum type, const EGLAttrib *attrib_list);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCPROC) (EGLDisplay dpy, EGLSync sync);
|
||||||
|
typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCPROC) (EGLDisplay dpy, EGLSync sync, EGLint flags, EGLTime timeout);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBPROC) (EGLDisplay dpy, EGLSync sync, EGLint attribute, EGLAttrib *value);
|
||||||
|
typedef EGLImage (EGLAPIENTRYP PFNEGLCREATEIMAGEPROC) (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLAttrib *attrib_list);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYIMAGEPROC) (EGLDisplay dpy, EGLImage image);
|
||||||
|
typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETPLATFORMDISPLAYPROC) (EGLenum platform, void *native_display, const EGLAttrib *attrib_list);
|
||||||
|
typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMWINDOWSURFACEPROC) (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLAttrib *attrib_list);
|
||||||
|
typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMPIXMAPSURFACEPROC) (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLAttrib *attrib_list);
|
||||||
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLWAITSYNCPROC) (EGLDisplay dpy, EGLSync sync, EGLint flags);
|
||||||
|
#if EGL_EGL_PROTOTYPES
|
||||||
|
EGLAPI EGLSync EGLAPIENTRY eglCreateSync (EGLDisplay dpy, EGLenum type, const EGLAttrib *attrib_list);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglDestroySync (EGLDisplay dpy, EGLSync sync);
|
||||||
|
EGLAPI EGLint EGLAPIENTRY eglClientWaitSync (EGLDisplay dpy, EGLSync sync, EGLint flags, EGLTime timeout);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttrib (EGLDisplay dpy, EGLSync sync, EGLint attribute, EGLAttrib *value);
|
||||||
|
EGLAPI EGLImage EGLAPIENTRY eglCreateImage (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLAttrib *attrib_list);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglDestroyImage (EGLDisplay dpy, EGLImage image);
|
||||||
|
EGLAPI EGLDisplay EGLAPIENTRY eglGetPlatformDisplay (EGLenum platform, void *native_display, const EGLAttrib *attrib_list);
|
||||||
|
EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformWindowSurface (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLAttrib *attrib_list);
|
||||||
|
EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformPixmapSurface (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLAttrib *attrib_list);
|
||||||
|
EGLAPI EGLBoolean EGLAPIENTRY eglWaitSync (EGLDisplay dpy, EGLSync sync, EGLint flags);
|
||||||
|
#endif
|
||||||
|
#endif /* EGL_VERSION_1_5 */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,175 @@
|
||||||
|
#ifndef __eglplatform_h_
|
||||||
|
#define __eglplatform_h_
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Copyright 2007-2020 The Khronos Group Inc.
|
||||||
|
** SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Platform-specific types and definitions for egl.h
|
||||||
|
*
|
||||||
|
* Adopters may modify khrplatform.h and this file to suit their platform.
|
||||||
|
* You are encouraged to submit all modifications to the Khronos group so that
|
||||||
|
* they can be included in future versions of this file. Please submit changes
|
||||||
|
* by filing an issue or pull request on the public Khronos EGL Registry, at
|
||||||
|
* https://www.github.com/KhronosGroup/EGL-Registry/
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <KHR/khrplatform.h>
|
||||||
|
|
||||||
|
/* Macros used in EGL function prototype declarations.
|
||||||
|
*
|
||||||
|
* EGL functions should be prototyped as:
|
||||||
|
*
|
||||||
|
* EGLAPI return-type EGLAPIENTRY eglFunction(arguments);
|
||||||
|
* typedef return-type (EXPAPIENTRYP PFNEGLFUNCTIONPROC) (arguments);
|
||||||
|
*
|
||||||
|
* KHRONOS_APICALL and KHRONOS_APIENTRY are defined in KHR/khrplatform.h
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef EGLAPI
|
||||||
|
#define EGLAPI KHRONOS_APICALL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef EGLAPIENTRY
|
||||||
|
#define EGLAPIENTRY KHRONOS_APIENTRY
|
||||||
|
#endif
|
||||||
|
#define EGLAPIENTRYP EGLAPIENTRY*
|
||||||
|
|
||||||
|
/* The types NativeDisplayType, NativeWindowType, and NativePixmapType
|
||||||
|
* are aliases of window-system-dependent types, such as X Display * or
|
||||||
|
* Windows Device Context. They must be defined in platform-specific
|
||||||
|
* code below. The EGL-prefixed versions of Native*Type are the same
|
||||||
|
* types, renamed in EGL 1.3 so all types in the API start with "EGL".
|
||||||
|
*
|
||||||
|
* Khronos STRONGLY RECOMMENDS that you use the default definitions
|
||||||
|
* provided below, since these changes affect both binary and source
|
||||||
|
* portability of applications using EGL running on different EGL
|
||||||
|
* implementations.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(EGL_NO_PLATFORM_SPECIFIC_TYPES)
|
||||||
|
|
||||||
|
typedef void *EGLNativeDisplayType;
|
||||||
|
typedef void *EGLNativePixmapType;
|
||||||
|
typedef void *EGLNativeWindowType;
|
||||||
|
|
||||||
|
#elif defined(_WIN32) || defined(__VC32__) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) /* Win32 and WinCE */
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_LEAN_AND_MEAN 1
|
||||||
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
|
typedef HDC EGLNativeDisplayType;
|
||||||
|
typedef HBITMAP EGLNativePixmapType;
|
||||||
|
typedef HWND EGLNativeWindowType;
|
||||||
|
|
||||||
|
#elif defined(__QNX__)
|
||||||
|
|
||||||
|
typedef khronos_uintptr_t EGLNativeDisplayType;
|
||||||
|
typedef struct _screen_pixmap* EGLNativePixmapType; /* screen_pixmap_t */
|
||||||
|
typedef struct _screen_window* EGLNativeWindowType; /* screen_window_t */
|
||||||
|
|
||||||
|
#elif defined(__EMSCRIPTEN__)
|
||||||
|
|
||||||
|
typedef int EGLNativeDisplayType;
|
||||||
|
typedef int EGLNativePixmapType;
|
||||||
|
typedef int EGLNativeWindowType;
|
||||||
|
|
||||||
|
#elif defined(__WINSCW__) || defined(__SYMBIAN32__) /* Symbian */
|
||||||
|
|
||||||
|
typedef int EGLNativeDisplayType;
|
||||||
|
typedef void *EGLNativePixmapType;
|
||||||
|
typedef void *EGLNativeWindowType;
|
||||||
|
|
||||||
|
#elif defined(WL_EGL_PLATFORM)
|
||||||
|
|
||||||
|
typedef struct wl_display *EGLNativeDisplayType;
|
||||||
|
typedef struct wl_egl_pixmap *EGLNativePixmapType;
|
||||||
|
typedef struct wl_egl_window *EGLNativeWindowType;
|
||||||
|
|
||||||
|
#elif defined(__GBM__)
|
||||||
|
|
||||||
|
typedef struct gbm_device *EGLNativeDisplayType;
|
||||||
|
typedef struct gbm_bo *EGLNativePixmapType;
|
||||||
|
typedef void *EGLNativeWindowType;
|
||||||
|
|
||||||
|
#elif defined(__ANDROID__) || defined(ANDROID)
|
||||||
|
|
||||||
|
struct ANativeWindow;
|
||||||
|
struct egl_native_pixmap_t;
|
||||||
|
|
||||||
|
typedef void* EGLNativeDisplayType;
|
||||||
|
typedef struct egl_native_pixmap_t* EGLNativePixmapType;
|
||||||
|
typedef struct ANativeWindow* EGLNativeWindowType;
|
||||||
|
|
||||||
|
#elif defined(USE_OZONE)
|
||||||
|
|
||||||
|
typedef intptr_t EGLNativeDisplayType;
|
||||||
|
typedef intptr_t EGLNativePixmapType;
|
||||||
|
typedef intptr_t EGLNativeWindowType;
|
||||||
|
|
||||||
|
#elif defined(USE_X11)
|
||||||
|
|
||||||
|
/* X11 (tentative) */
|
||||||
|
#include <X11/Xlib.h>
|
||||||
|
#include <X11/Xutil.h>
|
||||||
|
|
||||||
|
typedef Display *EGLNativeDisplayType;
|
||||||
|
typedef Pixmap EGLNativePixmapType;
|
||||||
|
typedef Window EGLNativeWindowType;
|
||||||
|
|
||||||
|
#elif defined(__unix__)
|
||||||
|
|
||||||
|
typedef void *EGLNativeDisplayType;
|
||||||
|
typedef khronos_uintptr_t EGLNativePixmapType;
|
||||||
|
typedef khronos_uintptr_t EGLNativeWindowType;
|
||||||
|
|
||||||
|
#elif defined(__APPLE__)
|
||||||
|
|
||||||
|
typedef int EGLNativeDisplayType;
|
||||||
|
typedef void *EGLNativePixmapType;
|
||||||
|
typedef void *EGLNativeWindowType;
|
||||||
|
|
||||||
|
#elif defined(__HAIKU__)
|
||||||
|
|
||||||
|
#include <kernel/image.h>
|
||||||
|
|
||||||
|
typedef void *EGLNativeDisplayType;
|
||||||
|
typedef khronos_uintptr_t EGLNativePixmapType;
|
||||||
|
typedef khronos_uintptr_t EGLNativeWindowType;
|
||||||
|
|
||||||
|
#elif defined(__Fuchsia__)
|
||||||
|
|
||||||
|
typedef void *EGLNativeDisplayType;
|
||||||
|
typedef khronos_uintptr_t EGLNativePixmapType;
|
||||||
|
typedef khronos_uintptr_t EGLNativeWindowType;
|
||||||
|
|
||||||
|
#else
|
||||||
|
#error "Platform not recognized"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* EGL 1.2 types, renamed for consistency in EGL 1.3 */
|
||||||
|
typedef EGLNativeDisplayType NativeDisplayType;
|
||||||
|
typedef EGLNativePixmapType NativePixmapType;
|
||||||
|
typedef EGLNativeWindowType NativeWindowType;
|
||||||
|
|
||||||
|
|
||||||
|
/* Define EGLint. This must be a signed integral type large enough to contain
|
||||||
|
* all legal attribute names and values passed into and out of EGL, whether
|
||||||
|
* their type is boolean, bitmask, enumerant (symbolic constant), integer,
|
||||||
|
* handle, or other. While in general a 32-bit integer will suffice, if
|
||||||
|
* handles are 64 bit types, then EGLint should be defined as a signed 64-bit
|
||||||
|
* integer type.
|
||||||
|
*/
|
||||||
|
typedef khronos_int32_t EGLint;
|
||||||
|
|
||||||
|
|
||||||
|
/* C++ / C typecast macros for special EGL handle values */
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
#define EGL_CAST(type, value) (static_cast<type>(value))
|
||||||
|
#else
|
||||||
|
#define EGL_CAST(type, value) ((type) (value))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __eglplatform_h */
|
||||||
|
|
@ -0,0 +1,311 @@
|
||||||
|
#ifndef __khrplatform_h_
|
||||||
|
#define __khrplatform_h_
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Copyright (c) 2008-2018 The Khronos Group Inc.
|
||||||
|
**
|
||||||
|
** Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
** copy of this software and/or associated documentation files (the
|
||||||
|
** "Materials"), to deal in the Materials without restriction, including
|
||||||
|
** without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
** distribute, sublicense, and/or sell copies of the Materials, and to
|
||||||
|
** permit persons to whom the Materials are furnished to do so, subject to
|
||||||
|
** the following conditions:
|
||||||
|
**
|
||||||
|
** The above copyright notice and this permission notice shall be included
|
||||||
|
** in all copies or substantial portions of the Materials.
|
||||||
|
**
|
||||||
|
** THE MATERIALS ARE 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
|
||||||
|
** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Khronos platform-specific types and definitions.
|
||||||
|
*
|
||||||
|
* The master copy of khrplatform.h is maintained in the Khronos EGL
|
||||||
|
* Registry repository at https://github.com/KhronosGroup/EGL-Registry
|
||||||
|
* The last semantic modification to khrplatform.h was at commit ID:
|
||||||
|
* 67a3e0864c2d75ea5287b9f3d2eb74a745936692
|
||||||
|
*
|
||||||
|
* Adopters may modify this file to suit their platform. Adopters are
|
||||||
|
* encouraged to submit platform specific modifications to the Khronos
|
||||||
|
* group so that they can be included in future versions of this file.
|
||||||
|
* Please submit changes by filing pull requests or issues on
|
||||||
|
* the EGL Registry repository linked above.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* See the Implementer's Guidelines for information about where this file
|
||||||
|
* should be located on your system and for more details of its use:
|
||||||
|
* http://www.khronos.org/registry/implementers_guide.pdf
|
||||||
|
*
|
||||||
|
* This file should be included as
|
||||||
|
* #include <KHR/khrplatform.h>
|
||||||
|
* by Khronos client API header files that use its types and defines.
|
||||||
|
*
|
||||||
|
* The types in khrplatform.h should only be used to define API-specific types.
|
||||||
|
*
|
||||||
|
* Types defined in khrplatform.h:
|
||||||
|
* khronos_int8_t signed 8 bit
|
||||||
|
* khronos_uint8_t unsigned 8 bit
|
||||||
|
* khronos_int16_t signed 16 bit
|
||||||
|
* khronos_uint16_t unsigned 16 bit
|
||||||
|
* khronos_int32_t signed 32 bit
|
||||||
|
* khronos_uint32_t unsigned 32 bit
|
||||||
|
* khronos_int64_t signed 64 bit
|
||||||
|
* khronos_uint64_t unsigned 64 bit
|
||||||
|
* khronos_intptr_t signed same number of bits as a pointer
|
||||||
|
* khronos_uintptr_t unsigned same number of bits as a pointer
|
||||||
|
* khronos_ssize_t signed size
|
||||||
|
* khronos_usize_t unsigned size
|
||||||
|
* khronos_float_t signed 32 bit floating point
|
||||||
|
* khronos_time_ns_t unsigned 64 bit time in nanoseconds
|
||||||
|
* khronos_utime_nanoseconds_t unsigned time interval or absolute time in
|
||||||
|
* nanoseconds
|
||||||
|
* khronos_stime_nanoseconds_t signed time interval in nanoseconds
|
||||||
|
* khronos_boolean_enum_t enumerated boolean type. This should
|
||||||
|
* only be used as a base type when a client API's boolean type is
|
||||||
|
* an enum. Client APIs which use an integer or other type for
|
||||||
|
* booleans cannot use this as the base type for their boolean.
|
||||||
|
*
|
||||||
|
* Tokens defined in khrplatform.h:
|
||||||
|
*
|
||||||
|
* KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values.
|
||||||
|
*
|
||||||
|
* KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0.
|
||||||
|
* KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0.
|
||||||
|
*
|
||||||
|
* Calling convention macros defined in this file:
|
||||||
|
* KHRONOS_APICALL
|
||||||
|
* KHRONOS_APIENTRY
|
||||||
|
* KHRONOS_APIATTRIBUTES
|
||||||
|
*
|
||||||
|
* These may be used in function prototypes as:
|
||||||
|
*
|
||||||
|
* KHRONOS_APICALL void KHRONOS_APIENTRY funcname(
|
||||||
|
* int arg1,
|
||||||
|
* int arg2) KHRONOS_APIATTRIBUTES;
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(__SCITECH_SNAP__) && !defined(KHRONOS_STATIC)
|
||||||
|
# define KHRONOS_STATIC 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
* Definition of KHRONOS_APICALL
|
||||||
|
*-------------------------------------------------------------------------
|
||||||
|
* This precedes the return type of the function in the function prototype.
|
||||||
|
*/
|
||||||
|
#if defined(KHRONOS_STATIC)
|
||||||
|
/* If the preprocessor constant KHRONOS_STATIC is defined, make the
|
||||||
|
* header compatible with static linking. */
|
||||||
|
# define KHRONOS_APICALL
|
||||||
|
#elif defined(_WIN32)
|
||||||
|
# define KHRONOS_APICALL __declspec(dllimport)
|
||||||
|
#elif defined (__SYMBIAN32__)
|
||||||
|
# define KHRONOS_APICALL IMPORT_C
|
||||||
|
#elif defined(__ANDROID__)
|
||||||
|
# define KHRONOS_APICALL __attribute__((visibility("default")))
|
||||||
|
#else
|
||||||
|
# define KHRONOS_APICALL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
* Definition of KHRONOS_APIENTRY
|
||||||
|
*-------------------------------------------------------------------------
|
||||||
|
* This follows the return type of the function and precedes the function
|
||||||
|
* name in the function prototype.
|
||||||
|
*/
|
||||||
|
#if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__)
|
||||||
|
/* Win32 but not WinCE */
|
||||||
|
# define KHRONOS_APIENTRY __stdcall
|
||||||
|
#else
|
||||||
|
# define KHRONOS_APIENTRY
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
* Definition of KHRONOS_APIATTRIBUTES
|
||||||
|
*-------------------------------------------------------------------------
|
||||||
|
* This follows the closing parenthesis of the function prototype arguments.
|
||||||
|
*/
|
||||||
|
#if defined (__ARMCC_2__)
|
||||||
|
#define KHRONOS_APIATTRIBUTES __softfp
|
||||||
|
#else
|
||||||
|
#define KHRONOS_APIATTRIBUTES
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
* basic type definitions
|
||||||
|
*-----------------------------------------------------------------------*/
|
||||||
|
#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__)
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Using <stdint.h>
|
||||||
|
*/
|
||||||
|
#include <stdint.h>
|
||||||
|
typedef int32_t khronos_int32_t;
|
||||||
|
typedef uint32_t khronos_uint32_t;
|
||||||
|
typedef int64_t khronos_int64_t;
|
||||||
|
typedef uint64_t khronos_uint64_t;
|
||||||
|
#define KHRONOS_SUPPORT_INT64 1
|
||||||
|
#define KHRONOS_SUPPORT_FLOAT 1
|
||||||
|
/*
|
||||||
|
* To support platform where unsigned long cannot be used interchangeably with
|
||||||
|
* inptr_t (e.g. CHERI-extended ISAs), we can use the stdint.h intptr_t.
|
||||||
|
* Ideally, we could just use (u)intptr_t everywhere, but this could result in
|
||||||
|
* ABI breakage if khronos_uintptr_t is changed from unsigned long to
|
||||||
|
* unsigned long long or similar (this results in different C++ name mangling).
|
||||||
|
* To avoid changes for existing platforms, we restrict usage of intptr_t to
|
||||||
|
* platforms where the size of a pointer is larger than the size of long.
|
||||||
|
*/
|
||||||
|
#if defined(__SIZEOF_LONG__) && defined(__SIZEOF_POINTER__)
|
||||||
|
#if __SIZEOF_POINTER__ > __SIZEOF_LONG__
|
||||||
|
#define KHRONOS_USE_INTPTR_T
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#elif defined(__VMS ) || defined(__sgi)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Using <inttypes.h>
|
||||||
|
*/
|
||||||
|
#include <inttypes.h>
|
||||||
|
typedef int32_t khronos_int32_t;
|
||||||
|
typedef uint32_t khronos_uint32_t;
|
||||||
|
typedef int64_t khronos_int64_t;
|
||||||
|
typedef uint64_t khronos_uint64_t;
|
||||||
|
#define KHRONOS_SUPPORT_INT64 1
|
||||||
|
#define KHRONOS_SUPPORT_FLOAT 1
|
||||||
|
|
||||||
|
#elif defined(_WIN32) && !defined(__SCITECH_SNAP__)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Win32
|
||||||
|
*/
|
||||||
|
typedef __int32 khronos_int32_t;
|
||||||
|
typedef unsigned __int32 khronos_uint32_t;
|
||||||
|
typedef __int64 khronos_int64_t;
|
||||||
|
typedef unsigned __int64 khronos_uint64_t;
|
||||||
|
#define KHRONOS_SUPPORT_INT64 1
|
||||||
|
#define KHRONOS_SUPPORT_FLOAT 1
|
||||||
|
|
||||||
|
#elif defined(__sun__) || defined(__digital__)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Sun or Digital
|
||||||
|
*/
|
||||||
|
typedef int khronos_int32_t;
|
||||||
|
typedef unsigned int khronos_uint32_t;
|
||||||
|
#if defined(__arch64__) || defined(_LP64)
|
||||||
|
typedef long int khronos_int64_t;
|
||||||
|
typedef unsigned long int khronos_uint64_t;
|
||||||
|
#else
|
||||||
|
typedef long long int khronos_int64_t;
|
||||||
|
typedef unsigned long long int khronos_uint64_t;
|
||||||
|
#endif /* __arch64__ */
|
||||||
|
#define KHRONOS_SUPPORT_INT64 1
|
||||||
|
#define KHRONOS_SUPPORT_FLOAT 1
|
||||||
|
|
||||||
|
#elif 0
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Hypothetical platform with no float or int64 support
|
||||||
|
*/
|
||||||
|
typedef int khronos_int32_t;
|
||||||
|
typedef unsigned int khronos_uint32_t;
|
||||||
|
#define KHRONOS_SUPPORT_INT64 0
|
||||||
|
#define KHRONOS_SUPPORT_FLOAT 0
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Generic fallback
|
||||||
|
*/
|
||||||
|
#include <stdint.h>
|
||||||
|
typedef int32_t khronos_int32_t;
|
||||||
|
typedef uint32_t khronos_uint32_t;
|
||||||
|
typedef int64_t khronos_int64_t;
|
||||||
|
typedef uint64_t khronos_uint64_t;
|
||||||
|
#define KHRONOS_SUPPORT_INT64 1
|
||||||
|
#define KHRONOS_SUPPORT_FLOAT 1
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Types that are (so far) the same on all platforms
|
||||||
|
*/
|
||||||
|
typedef signed char khronos_int8_t;
|
||||||
|
typedef unsigned char khronos_uint8_t;
|
||||||
|
typedef signed short int khronos_int16_t;
|
||||||
|
typedef unsigned short int khronos_uint16_t;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Types that differ between LLP64 and LP64 architectures - in LLP64,
|
||||||
|
* pointers are 64 bits, but 'long' is still 32 bits. Win64 appears
|
||||||
|
* to be the only LLP64 architecture in current use.
|
||||||
|
*/
|
||||||
|
#ifdef KHRONOS_USE_INTPTR_T
|
||||||
|
typedef intptr_t khronos_intptr_t;
|
||||||
|
typedef uintptr_t khronos_uintptr_t;
|
||||||
|
#elif defined(_WIN64)
|
||||||
|
typedef signed long long int khronos_intptr_t;
|
||||||
|
typedef unsigned long long int khronos_uintptr_t;
|
||||||
|
#else
|
||||||
|
typedef signed long int khronos_intptr_t;
|
||||||
|
typedef unsigned long int khronos_uintptr_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_WIN64)
|
||||||
|
typedef signed long long int khronos_ssize_t;
|
||||||
|
typedef unsigned long long int khronos_usize_t;
|
||||||
|
#else
|
||||||
|
typedef signed long int khronos_ssize_t;
|
||||||
|
typedef unsigned long int khronos_usize_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if KHRONOS_SUPPORT_FLOAT
|
||||||
|
/*
|
||||||
|
* Float type
|
||||||
|
*/
|
||||||
|
typedef float khronos_float_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if KHRONOS_SUPPORT_INT64
|
||||||
|
/* Time types
|
||||||
|
*
|
||||||
|
* These types can be used to represent a time interval in nanoseconds or
|
||||||
|
* an absolute Unadjusted System Time. Unadjusted System Time is the number
|
||||||
|
* of nanoseconds since some arbitrary system event (e.g. since the last
|
||||||
|
* time the system booted). The Unadjusted System Time is an unsigned
|
||||||
|
* 64 bit value that wraps back to 0 every 584 years. Time intervals
|
||||||
|
* may be either signed or unsigned.
|
||||||
|
*/
|
||||||
|
typedef khronos_uint64_t khronos_utime_nanoseconds_t;
|
||||||
|
typedef khronos_int64_t khronos_stime_nanoseconds_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Dummy value used to pad enum types to 32 bits.
|
||||||
|
*/
|
||||||
|
#ifndef KHRONOS_MAX_ENUM
|
||||||
|
#define KHRONOS_MAX_ENUM 0x7FFFFFFF
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Enumerated boolean type
|
||||||
|
*
|
||||||
|
* Values other than zero should be considered to be true. Therefore
|
||||||
|
* comparisons should not be made against KHRONOS_TRUE.
|
||||||
|
*/
|
||||||
|
typedef enum {
|
||||||
|
KHRONOS_FALSE = 0,
|
||||||
|
KHRONOS_TRUE = 1,
|
||||||
|
KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM
|
||||||
|
} khronos_boolean_enum_t;
|
||||||
|
|
||||||
|
#endif /* __khrplatform_h_ */
|
||||||
|
|
@ -0,0 +1,83 @@
|
||||||
|
{
|
||||||
|
"scanner": "1.24.0",
|
||||||
|
"sources": [
|
||||||
|
{
|
||||||
|
"url": "https://gitlab.freedesktop.org/wayland/wayland/-/releases/1.24.0/downloads/wayland-1.24.0.tar.xz",
|
||||||
|
"sha256": "82892487a01ad67b334eca83b54317a7c86a03a89cfadacfef5211f11a5d0536",
|
||||||
|
"prefix": "wayland-1.24.0/",
|
||||||
|
"files": {
|
||||||
|
"src/wayland-client-core.h": "vendor/wayland/wayland-client-core.h",
|
||||||
|
"src/wayland-util.h": "vendor/wayland/wayland-util.h",
|
||||||
|
"src/wayland-version.h.in": "vendor/wayland/wayland-version.h.in",
|
||||||
|
"egl/wayland-egl-core.h": "vendor/wayland/wayland-egl-core.h",
|
||||||
|
"COPYING": "vendor/wayland/COPYING",
|
||||||
|
"protocol/wayland.xml": "protocols/xml/wayland.xml",
|
||||||
|
"src/wayland-client.h": "vendor/wayland/wayland-client.h"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://gitlab.freedesktop.org/wayland/wayland-protocols/-/releases/1.45/downloads/wayland-protocols-1.45.tar.xz",
|
||||||
|
"sha256": "4d2b2a9e3e099d017dc8107bf1c334d27bb87d9e4aff19a0c8d856d17cd41ef0",
|
||||||
|
"prefix": "wayland-protocols-1.45/",
|
||||||
|
"files": {
|
||||||
|
"COPYING": "vendor/wayland-protocols/COPYING",
|
||||||
|
"stable/xdg-shell/xdg-shell.xml": "protocols/xml/xdg-shell.xml",
|
||||||
|
"unstable/xdg-decoration/xdg-decoration-unstable-v1.xml": "protocols/xml/xdg-decoration-unstable-v1.xml",
|
||||||
|
"stable/viewporter/viewporter.xml": "protocols/xml/viewporter.xml",
|
||||||
|
"staging/fractional-scale/fractional-scale-v1.xml": "protocols/xml/fractional-scale-v1.xml"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://raw.githubusercontent.com/KhronosGroup/EGL-Registry/5961a7fe64cf8a126890ced6f13d69e0a1e1b83e/api/EGL/egl.h",
|
||||||
|
"sha256": "a7c24c828bf2e1a4dfe6511b4f4812b948a285eb54787074015896976d4da076",
|
||||||
|
"destination": "vendor/khronos/EGL/egl.h"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://raw.githubusercontent.com/KhronosGroup/EGL-Registry/5961a7fe64cf8a126890ced6f13d69e0a1e1b83e/api/EGL/eglext.h",
|
||||||
|
"sha256": "a5f574a0074001400c6c50232235ee00e9a67b2168bfd1c364ba0f6f52e5a75c",
|
||||||
|
"destination": "vendor/khronos/EGL/eglext.h"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://raw.githubusercontent.com/KhronosGroup/EGL-Registry/5961a7fe64cf8a126890ced6f13d69e0a1e1b83e/api/EGL/eglplatform.h",
|
||||||
|
"sha256": "25b5391655effcf363a38fa00c3154f356a3eab3d35dc067847875513cf1e441",
|
||||||
|
"destination": "vendor/khronos/EGL/eglplatform.h"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://raw.githubusercontent.com/KhronosGroup/EGL-Registry/5961a7fe64cf8a126890ced6f13d69e0a1e1b83e/api/KHR/khrplatform.h",
|
||||||
|
"sha256": "7b1e01aaa7ad8f6fc34b5c7bdf79ebf5189bb09e2c4d2e79fc5d350623d11e83",
|
||||||
|
"destination": "vendor/khronos/KHR/khrplatform.h"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"files": {
|
||||||
|
"vendor/wayland/wayland-client-core.h": "f744b2c9191bffe7580b7b3894d24f513f52e5dbc586404c4ea8b0f70952dfcd",
|
||||||
|
"vendor/wayland/wayland-util.h": "f336a00a03fcf442a59dc9e5fcce3fc94b2cbfcbcf0befba018be3657b7ea381",
|
||||||
|
"vendor/wayland/wayland-version.h.in": "3d66b4a1c0cc3d04cae23b3c4d4914d8107f9e9ef797ebe9554a846d38920b73",
|
||||||
|
"vendor/wayland/wayland-egl-core.h": "07cd540e327a028066da1dc79dc25126641509857a4478560471540cf1b35c42",
|
||||||
|
"vendor/wayland/COPYING": "6eefcb023622a463168a5c20add95fd24a38c7482622a9254a23b99b7c153061",
|
||||||
|
"protocols/xml/wayland.xml": "60abb5864546288a660f3d8af0c838fc87c85bb386582da23e52cb8476e9adbf",
|
||||||
|
"vendor/wayland-protocols/COPYING": "f1a2b233e8a9a71c40f4aa885be08a0842ac85bb8588703c1dd7e6e6502e3124",
|
||||||
|
"protocols/xml/xdg-shell.xml": "9d9e27038ca722f159a361293f8c6cd270dab907ab52de5b8ecfbb8d6b9651c2",
|
||||||
|
"protocols/xml/xdg-decoration-unstable-v1.xml": "73101094eedd2295ac48972a2562d6f99881fee68f3d4d403675837434ab7c70",
|
||||||
|
"protocols/xml/viewporter.xml": "dcb12279a03746301fe490aaed4b38a403485a925abfce2ccfceb644e104fe71",
|
||||||
|
"protocols/xml/fractional-scale-v1.xml": "5941de5d28f427ecdadddc8623a6f6af0a30b0ab4726847236ba7a7652b81316",
|
||||||
|
"vendor/khronos/EGL/egl.h": "a7c24c828bf2e1a4dfe6511b4f4812b948a285eb54787074015896976d4da076",
|
||||||
|
"vendor/khronos/EGL/eglext.h": "a5f574a0074001400c6c50232235ee00e9a67b2168bfd1c364ba0f6f52e5a75c",
|
||||||
|
"vendor/khronos/EGL/eglplatform.h": "25b5391655effcf363a38fa00c3154f356a3eab3d35dc067847875513cf1e441",
|
||||||
|
"vendor/khronos/KHR/khrplatform.h": "7b1e01aaa7ad8f6fc34b5c7bdf79ebf5189bb09e2c4d2e79fc5d350623d11e83",
|
||||||
|
"vendor/wayland/wayland-client.h": "e9dd1fb014aa6ad848cb7d241cc223b1a70fc0b17fed5997262024e4c05532f7"
|
||||||
|
},
|
||||||
|
"generated": {
|
||||||
|
"protocols/generated/fractional-scale-v1.c": "fb40e729ee05acafe996d1261367424b47722be02dbee65c90b3f4972f259dca",
|
||||||
|
"protocols/generated/fractional-scale-v1.h": "9243e57b2ce11317f6aaa2cd76c0a9f999fb54ced38b880d81891a6ee5dd27df",
|
||||||
|
"protocols/generated/private-symbols.h": "e66e9c2dd9608df352bf1dc53c6d244225018557844f5ec9c9ae258ea47e3521",
|
||||||
|
"protocols/generated/viewporter.c": "ee3b669764240a69b4436e8cc7cb2e4d42dc872752df3f34df98851bbcb51d11",
|
||||||
|
"protocols/generated/viewporter.h": "dbb68745babf07d3d5587b3f3b83a7cb46848f03885bde4b9cd5e71d19114458",
|
||||||
|
"protocols/generated/wayland-client-protocol.h": "3643fd6aca2f52abcb92a125a0f659c3697268435608a7d3a54e0b614e150f83",
|
||||||
|
"protocols/generated/wayland-version.h": "9ba722d91f4ae3f2820757785f66247868571bc7014f7a679a22f729daaac79f",
|
||||||
|
"protocols/generated/wayland.c": "9a3a273b8d007ff2f40906d36734034a0967a67796965d46e0a5873ff0045315",
|
||||||
|
"protocols/generated/xdg-decoration-unstable-v1.c": "a6cafd5ed52a70e30eacc91e6e230eb8cbed6a6cf790cdcb732acb7e19e51579",
|
||||||
|
"protocols/generated/xdg-decoration-unstable-v1.h": "fa1d17dbdfad9e13f35a0d807906926a054edb18cef836cc39063a586d5f6dd4",
|
||||||
|
"protocols/generated/xdg-shell.c": "7788ec2e1e8774e4f069d361c450048ccb7e907a204d4ca2d74a64fab7bf7be5",
|
||||||
|
"protocols/generated/xdg-shell.h": "4b472982e483e37f9e28a1b655aabb5718a6e6a54023dac90fee45bad316ecc9"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,33 @@
|
||||||
|
Copyright © 2008-2013 Kristian Høgsberg
|
||||||
|
Copyright © 2010-2013 Intel Corporation
|
||||||
|
Copyright © 2013 Rafael Antognolli
|
||||||
|
Copyright © 2013 Jasper St. Pierre
|
||||||
|
Copyright © 2014 Jonas Ådahl
|
||||||
|
Copyright © 2014 Jason Ekstrand
|
||||||
|
Copyright © 2014-2015 Collabora, Ltd.
|
||||||
|
Copyright © 2015 Red Hat Inc.
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
The above is the version of the MIT "Expat" License used by X.org:
|
||||||
|
|
||||||
|
http://cgit.freedesktop.org/xorg/xserver/tree/COPYING
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
Copyright © 2008-2012 Kristian Høgsberg
|
||||||
|
Copyright © 2010-2012 Intel Corporation
|
||||||
|
Copyright © 2011 Benjamin Franzke
|
||||||
|
Copyright © 2012 Collabora, Ltd.
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
The above is the version of the MIT "Expat" License used by X.org:
|
||||||
|
|
||||||
|
http://cgit.freedesktop.org/xorg/xserver/tree/COPYING
|
||||||
|
|
@ -0,0 +1,323 @@
|
||||||
|
/*
|
||||||
|
* Copyright © 2008 Kristian Høgsberg
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef WAYLAND_CLIENT_CORE_H
|
||||||
|
#define WAYLAND_CLIENT_CORE_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "wayland-util.h"
|
||||||
|
#include "wayland-version.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct timespec;
|
||||||
|
|
||||||
|
/** \class wl_proxy
|
||||||
|
*
|
||||||
|
* \brief Represents a protocol object on the client side.
|
||||||
|
*
|
||||||
|
* A wl_proxy acts as a client side proxy to an object existing in the
|
||||||
|
* compositor. The proxy is responsible for converting requests made by the
|
||||||
|
* clients with \ref wl_proxy_marshal() into Wayland's wire format. Events
|
||||||
|
* coming from the compositor are also handled by the proxy, which will in
|
||||||
|
* turn call the handler set with \ref wl_proxy_add_listener().
|
||||||
|
*
|
||||||
|
* \note With the exception of function \ref wl_proxy_set_queue(), functions
|
||||||
|
* accessing a wl_proxy are not normally used by client code. Clients
|
||||||
|
* should normally use the higher level interface generated by the scanner to
|
||||||
|
* interact with compositor objects.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
struct wl_proxy;
|
||||||
|
|
||||||
|
/** \class wl_display
|
||||||
|
*
|
||||||
|
* \brief Represents a connection to the compositor and acts as a proxy to
|
||||||
|
* the wl_display singleton object.
|
||||||
|
*
|
||||||
|
* A wl_display object represents a client connection to a Wayland
|
||||||
|
* compositor. It is created with either \ref wl_display_connect() or
|
||||||
|
* \ref wl_display_connect_to_fd(). A connection is terminated using
|
||||||
|
* \ref wl_display_disconnect().
|
||||||
|
*
|
||||||
|
* A wl_display is also used as the \ref wl_proxy for the wl_display
|
||||||
|
* singleton object on the compositor side.
|
||||||
|
*
|
||||||
|
* A wl_display object handles all the data sent from and to the
|
||||||
|
* compositor. When a \ref wl_proxy marshals a request, it will write its wire
|
||||||
|
* representation to the display's write buffer. The data is sent to the
|
||||||
|
* compositor when the client calls \ref wl_display_flush().
|
||||||
|
*
|
||||||
|
* Incoming data is handled in two steps: queueing and dispatching. In the
|
||||||
|
* queue step, the data coming from the display fd is interpreted and
|
||||||
|
* added to a queue. On the dispatch step, the handler for the incoming
|
||||||
|
* event set by the client on the corresponding \ref wl_proxy is called.
|
||||||
|
*
|
||||||
|
* A wl_display has at least one event queue, called the <em>default
|
||||||
|
* queue</em>. Clients can create additional event queues with \ref
|
||||||
|
* wl_display_create_queue() and assign \ref wl_proxy's to it. Events
|
||||||
|
* occurring in a particular proxy are always queued in its assigned queue.
|
||||||
|
* A client can ensure that a certain assumption, such as holding a lock
|
||||||
|
* or running from a given thread, is true when a proxy event handler is
|
||||||
|
* called by assigning that proxy to an event queue and making sure that
|
||||||
|
* this queue is only dispatched when the assumption holds.
|
||||||
|
*
|
||||||
|
* The default queue is dispatched by calling \ref wl_display_dispatch().
|
||||||
|
* This will dispatch any events queued on the default queue and attempt
|
||||||
|
* to read from the display fd if it's empty. Events read are then queued
|
||||||
|
* on the appropriate queues according to the proxy assignment.
|
||||||
|
*
|
||||||
|
* A user created queue is dispatched with \ref wl_display_dispatch_queue().
|
||||||
|
* This function behaves exactly the same as wl_display_dispatch()
|
||||||
|
* but it dispatches given queue instead of the default queue.
|
||||||
|
*
|
||||||
|
* A real world example of event queue usage is Mesa's implementation of
|
||||||
|
* eglSwapBuffers() for the Wayland platform. This function might need
|
||||||
|
* to block until a frame callback is received, but dispatching the default
|
||||||
|
* queue could cause an event handler on the client to start drawing
|
||||||
|
* again. This problem is solved using another event queue, so that only
|
||||||
|
* the events handled by the EGL code are dispatched during the block.
|
||||||
|
*
|
||||||
|
* This creates a problem where a thread dispatches a non-default
|
||||||
|
* queue, reading all the data from the display fd. If the application
|
||||||
|
* would call \em poll(2) after that it would block, even though there
|
||||||
|
* might be events queued on the default queue. Those events should be
|
||||||
|
* dispatched with \ref wl_display_dispatch_pending() or \ref
|
||||||
|
* wl_display_dispatch_queue_pending() before flushing and blocking.
|
||||||
|
*/
|
||||||
|
struct wl_display;
|
||||||
|
|
||||||
|
/** \class wl_event_queue
|
||||||
|
*
|
||||||
|
* \brief A queue for \ref wl_proxy object events.
|
||||||
|
*
|
||||||
|
* Event queues allows the events on a display to be handled in a thread-safe
|
||||||
|
* manner. See \ref wl_display for details.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
struct wl_event_queue;
|
||||||
|
|
||||||
|
/** Destroy proxy after marshalling
|
||||||
|
* \relates wl_proxy
|
||||||
|
*/
|
||||||
|
#define WL_MARSHAL_FLAG_DESTROY (1 << 0)
|
||||||
|
|
||||||
|
void
|
||||||
|
wl_event_queue_destroy(struct wl_event_queue *queue);
|
||||||
|
|
||||||
|
struct wl_proxy *
|
||||||
|
wl_proxy_marshal_flags(struct wl_proxy *proxy, uint32_t opcode,
|
||||||
|
const struct wl_interface *interface,
|
||||||
|
uint32_t version,
|
||||||
|
uint32_t flags, ...);
|
||||||
|
|
||||||
|
struct wl_proxy *
|
||||||
|
wl_proxy_marshal_array_flags(struct wl_proxy *proxy, uint32_t opcode,
|
||||||
|
const struct wl_interface *interface,
|
||||||
|
uint32_t version,
|
||||||
|
uint32_t flags,
|
||||||
|
union wl_argument *args);
|
||||||
|
|
||||||
|
void
|
||||||
|
wl_proxy_marshal(struct wl_proxy *p, uint32_t opcode, ...);
|
||||||
|
|
||||||
|
void
|
||||||
|
wl_proxy_marshal_array(struct wl_proxy *p, uint32_t opcode,
|
||||||
|
union wl_argument *args);
|
||||||
|
|
||||||
|
struct wl_proxy *
|
||||||
|
wl_proxy_create(struct wl_proxy *factory,
|
||||||
|
const struct wl_interface *interface);
|
||||||
|
|
||||||
|
void *
|
||||||
|
wl_proxy_create_wrapper(void *proxy);
|
||||||
|
|
||||||
|
void
|
||||||
|
wl_proxy_wrapper_destroy(void *proxy_wrapper);
|
||||||
|
|
||||||
|
struct wl_proxy *
|
||||||
|
wl_proxy_marshal_constructor(struct wl_proxy *proxy,
|
||||||
|
uint32_t opcode,
|
||||||
|
const struct wl_interface *interface,
|
||||||
|
...);
|
||||||
|
|
||||||
|
struct wl_proxy *
|
||||||
|
wl_proxy_marshal_constructor_versioned(struct wl_proxy *proxy,
|
||||||
|
uint32_t opcode,
|
||||||
|
const struct wl_interface *interface,
|
||||||
|
uint32_t version,
|
||||||
|
...);
|
||||||
|
|
||||||
|
struct wl_proxy *
|
||||||
|
wl_proxy_marshal_array_constructor(struct wl_proxy *proxy,
|
||||||
|
uint32_t opcode, union wl_argument *args,
|
||||||
|
const struct wl_interface *interface);
|
||||||
|
|
||||||
|
struct wl_proxy *
|
||||||
|
wl_proxy_marshal_array_constructor_versioned(struct wl_proxy *proxy,
|
||||||
|
uint32_t opcode,
|
||||||
|
union wl_argument *args,
|
||||||
|
const struct wl_interface *interface,
|
||||||
|
uint32_t version);
|
||||||
|
|
||||||
|
void
|
||||||
|
wl_proxy_destroy(struct wl_proxy *proxy);
|
||||||
|
|
||||||
|
int
|
||||||
|
wl_proxy_add_listener(struct wl_proxy *proxy,
|
||||||
|
void (**implementation)(void), void *data);
|
||||||
|
|
||||||
|
const void *
|
||||||
|
wl_proxy_get_listener(struct wl_proxy *proxy);
|
||||||
|
|
||||||
|
int
|
||||||
|
wl_proxy_add_dispatcher(struct wl_proxy *proxy,
|
||||||
|
wl_dispatcher_func_t dispatcher_func,
|
||||||
|
const void * dispatcher_data, void *data);
|
||||||
|
|
||||||
|
void
|
||||||
|
wl_proxy_set_user_data(struct wl_proxy *proxy, void *user_data);
|
||||||
|
|
||||||
|
void *
|
||||||
|
wl_proxy_get_user_data(struct wl_proxy *proxy);
|
||||||
|
|
||||||
|
uint32_t
|
||||||
|
wl_proxy_get_version(struct wl_proxy *proxy);
|
||||||
|
|
||||||
|
uint32_t
|
||||||
|
wl_proxy_get_id(struct wl_proxy *proxy);
|
||||||
|
|
||||||
|
void
|
||||||
|
wl_proxy_set_tag(struct wl_proxy *proxy,
|
||||||
|
const char * const *tag);
|
||||||
|
|
||||||
|
const char * const *
|
||||||
|
wl_proxy_get_tag(struct wl_proxy *proxy);
|
||||||
|
|
||||||
|
const char *
|
||||||
|
wl_proxy_get_class(struct wl_proxy *proxy);
|
||||||
|
|
||||||
|
const struct wl_interface *
|
||||||
|
wl_proxy_get_interface(struct wl_proxy *proxy);
|
||||||
|
|
||||||
|
struct wl_display *
|
||||||
|
wl_proxy_get_display(struct wl_proxy *proxy);
|
||||||
|
|
||||||
|
void
|
||||||
|
wl_proxy_set_queue(struct wl_proxy *proxy, struct wl_event_queue *queue);
|
||||||
|
|
||||||
|
struct wl_event_queue *
|
||||||
|
wl_proxy_get_queue(const struct wl_proxy *proxy);
|
||||||
|
|
||||||
|
const char *
|
||||||
|
wl_event_queue_get_name(const struct wl_event_queue *queue);
|
||||||
|
|
||||||
|
struct wl_display *
|
||||||
|
wl_display_connect(const char *name);
|
||||||
|
|
||||||
|
struct wl_display *
|
||||||
|
wl_display_connect_to_fd(int fd);
|
||||||
|
|
||||||
|
void
|
||||||
|
wl_display_disconnect(struct wl_display *display);
|
||||||
|
|
||||||
|
int
|
||||||
|
wl_display_get_fd(struct wl_display *display);
|
||||||
|
|
||||||
|
int
|
||||||
|
wl_display_dispatch(struct wl_display *display);
|
||||||
|
|
||||||
|
int
|
||||||
|
wl_display_dispatch_queue(struct wl_display *display,
|
||||||
|
struct wl_event_queue *queue);
|
||||||
|
|
||||||
|
int
|
||||||
|
wl_display_dispatch_timeout(struct wl_display *display,
|
||||||
|
const struct timespec *timeout);
|
||||||
|
|
||||||
|
int
|
||||||
|
wl_display_dispatch_queue_timeout(struct wl_display *display,
|
||||||
|
struct wl_event_queue *queue,
|
||||||
|
const struct timespec *timeout);
|
||||||
|
|
||||||
|
int
|
||||||
|
wl_display_dispatch_queue_pending(struct wl_display *display,
|
||||||
|
struct wl_event_queue *queue);
|
||||||
|
|
||||||
|
int
|
||||||
|
wl_display_dispatch_pending(struct wl_display *display);
|
||||||
|
|
||||||
|
int
|
||||||
|
wl_display_get_error(struct wl_display *display);
|
||||||
|
|
||||||
|
uint32_t
|
||||||
|
wl_display_get_protocol_error(struct wl_display *display,
|
||||||
|
const struct wl_interface **interface,
|
||||||
|
uint32_t *id);
|
||||||
|
|
||||||
|
int
|
||||||
|
wl_display_flush(struct wl_display *display);
|
||||||
|
|
||||||
|
int
|
||||||
|
wl_display_roundtrip_queue(struct wl_display *display,
|
||||||
|
struct wl_event_queue *queue);
|
||||||
|
|
||||||
|
int
|
||||||
|
wl_display_roundtrip(struct wl_display *display);
|
||||||
|
|
||||||
|
struct wl_event_queue *
|
||||||
|
wl_display_create_queue(struct wl_display *display);
|
||||||
|
|
||||||
|
struct wl_event_queue *
|
||||||
|
wl_display_create_queue_with_name(struct wl_display *display,
|
||||||
|
const char *name);
|
||||||
|
|
||||||
|
int
|
||||||
|
wl_display_prepare_read_queue(struct wl_display *display,
|
||||||
|
struct wl_event_queue *queue);
|
||||||
|
|
||||||
|
int
|
||||||
|
wl_display_prepare_read(struct wl_display *display);
|
||||||
|
|
||||||
|
void
|
||||||
|
wl_display_cancel_read(struct wl_display *display);
|
||||||
|
|
||||||
|
int
|
||||||
|
wl_display_read_events(struct wl_display *display);
|
||||||
|
|
||||||
|
void
|
||||||
|
wl_log_set_handler_client(wl_log_func_t handler);
|
||||||
|
|
||||||
|
void
|
||||||
|
wl_display_set_max_buffer_size(struct wl_display *display,
|
||||||
|
size_t max_buffer_size);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,42 @@
|
||||||
|
/*
|
||||||
|
* Copyright © 2008 Kristian Høgsberg
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** \file
|
||||||
|
*
|
||||||
|
* \brief Include the client API and protocol C API.
|
||||||
|
*
|
||||||
|
* \warning Use of this header file is discouraged. Prefer including
|
||||||
|
* wayland-client-core.h instead, which does not include the
|
||||||
|
* client protocol header and as such only defines the library
|
||||||
|
* API.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef WAYLAND_CLIENT_H
|
||||||
|
#define WAYLAND_CLIENT_H
|
||||||
|
|
||||||
|
#include "wayland-client-core.h"
|
||||||
|
#include "wayland-client-protocol.h"
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,59 @@
|
||||||
|
/*
|
||||||
|
* Copyright © 2011 Kristian Høgsberg
|
||||||
|
* Copyright © 2011 Benjamin Franzke
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef WAYLAND_EGL_CORE_H
|
||||||
|
#define WAYLAND_EGL_CORE_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define WL_EGL_PLATFORM 1
|
||||||
|
|
||||||
|
struct wl_egl_window;
|
||||||
|
struct wl_surface;
|
||||||
|
|
||||||
|
struct wl_egl_window *
|
||||||
|
wl_egl_window_create(struct wl_surface *surface,
|
||||||
|
int width, int height);
|
||||||
|
|
||||||
|
void
|
||||||
|
wl_egl_window_destroy(struct wl_egl_window *egl_window);
|
||||||
|
|
||||||
|
void
|
||||||
|
wl_egl_window_resize(struct wl_egl_window *egl_window,
|
||||||
|
int width, int height,
|
||||||
|
int dx, int dy);
|
||||||
|
|
||||||
|
void
|
||||||
|
wl_egl_window_get_attached_size(struct wl_egl_window *egl_window,
|
||||||
|
int *width, int *height);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,768 @@
|
||||||
|
/*
|
||||||
|
* Copyright © 2008 Kristian Høgsberg
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** \file wayland-util.h
|
||||||
|
*
|
||||||
|
* \brief Utility classes, functions, and macros.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef WAYLAND_UTIL_H
|
||||||
|
#define WAYLAND_UTIL_H
|
||||||
|
|
||||||
|
#include <math.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/** Visibility attribute */
|
||||||
|
#if defined(__GNUC__) && __GNUC__ >= 4
|
||||||
|
#define WL_EXPORT __attribute__ ((visibility("default")))
|
||||||
|
#else
|
||||||
|
#define WL_EXPORT
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/** Deprecated attribute */
|
||||||
|
#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L) || (defined(__cplusplus) && __cplusplus >= 201402L)
|
||||||
|
#define WL_DEPRECATED [[deprecated]]
|
||||||
|
#elif defined(__GNUC__) && __GNUC__ >= 4
|
||||||
|
#define WL_DEPRECATED __attribute__ ((deprecated))
|
||||||
|
#else
|
||||||
|
#define WL_DEPRECATED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Printf-style argument attribute
|
||||||
|
*
|
||||||
|
* \param x Ordinality of the format string argument
|
||||||
|
* \param y Ordinality of the argument to check against the format string
|
||||||
|
*
|
||||||
|
* \sa https://gcc.gnu.org/onlinedocs/gcc-3.2.1/gcc/Function-Attributes.html
|
||||||
|
*/
|
||||||
|
#if defined(__GNUC__) && __GNUC__ >= 4
|
||||||
|
#define WL_PRINTF(x, y) __attribute__((__format__(__printf__, x, y)))
|
||||||
|
#else
|
||||||
|
#define WL_PRINTF(x, y)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L
|
||||||
|
#define WL_TYPEOF(expr) typeof(expr)
|
||||||
|
#else
|
||||||
|
#define WL_TYPEOF(expr) __typeof__(expr)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/** \class wl_object
|
||||||
|
*
|
||||||
|
* \brief A protocol object.
|
||||||
|
*
|
||||||
|
* A `wl_object` is an opaque struct identifying the protocol object
|
||||||
|
* underlying a `wl_proxy` or `wl_resource`.
|
||||||
|
*
|
||||||
|
* \note Functions accessing a `wl_object` are not normally used by client code.
|
||||||
|
* Clients should normally use the higher level interface generated by the
|
||||||
|
* scanner to interact with compositor objects.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
struct wl_object;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The maximum size of a protocol message.
|
||||||
|
*
|
||||||
|
* If a message size exceeds this value, the connection will be dropped.
|
||||||
|
* Servers will send an invalid_method error before disconnecting.
|
||||||
|
*/
|
||||||
|
#define WL_MAX_MESSAGE_SIZE 4096
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Protocol message signature
|
||||||
|
*
|
||||||
|
* A wl_message describes the signature of an actual protocol message, such as a
|
||||||
|
* request or event, that adheres to the Wayland protocol wire format. The
|
||||||
|
* protocol implementation uses a wl_message within its demarshal machinery for
|
||||||
|
* decoding messages between a compositor and its clients. In a sense, a
|
||||||
|
* wl_message is to a protocol message like a class is to an object.
|
||||||
|
*
|
||||||
|
* The `name` of a wl_message is the name of the corresponding protocol message.
|
||||||
|
*
|
||||||
|
* The `signature` is an ordered list of symbols representing the data types
|
||||||
|
* of message arguments and, optionally, a protocol version and indicators for
|
||||||
|
* nullability. A leading integer in the `signature` indicates the _since_
|
||||||
|
* version of the protocol message. A `?` preceding a data type symbol indicates
|
||||||
|
* that the following argument type is nullable. While it is a protocol violation
|
||||||
|
* to send messages with non-nullable arguments set to `NULL`, event handlers in
|
||||||
|
* clients might still get called with non-nullable object arguments set to
|
||||||
|
* `NULL`. This can happen when the client destroyed the object being used as
|
||||||
|
* argument on its side and an event referencing that object was sent before the
|
||||||
|
* server knew about its destruction. As this race cannot be prevented, clients
|
||||||
|
* should - as a general rule - program their event handlers such that they can
|
||||||
|
* handle object arguments declared non-nullable being `NULL` gracefully.
|
||||||
|
*
|
||||||
|
* When no arguments accompany a message, `signature` is an empty string.
|
||||||
|
*
|
||||||
|
* Symbols:
|
||||||
|
*
|
||||||
|
* * `i`: int
|
||||||
|
* * `u`: uint
|
||||||
|
* * `f`: fixed
|
||||||
|
* * `s`: string
|
||||||
|
* * `o`: object
|
||||||
|
* * `n`: new_id
|
||||||
|
* * `a`: array
|
||||||
|
* * `h`: fd
|
||||||
|
* * `?`: following argument (`o` or `s`) is nullable
|
||||||
|
*
|
||||||
|
* While demarshaling primitive arguments is straightforward, when demarshaling
|
||||||
|
* messages containing `object` or `new_id` arguments, the protocol
|
||||||
|
* implementation often must determine the type of the object. The `types` of a
|
||||||
|
* wl_message is an array of wl_interface references that correspond to `o` and
|
||||||
|
* `n` arguments in `signature`, with `NULL` placeholders for arguments with
|
||||||
|
* non-object types.
|
||||||
|
*
|
||||||
|
* Consider the protocol event wl_display `delete_id` that has a single `uint`
|
||||||
|
* argument. The wl_message is:
|
||||||
|
*
|
||||||
|
* \code
|
||||||
|
* { "delete_id", "u", [NULL] }
|
||||||
|
* \endcode
|
||||||
|
*
|
||||||
|
* Here, the message `name` is `"delete_id"`, the `signature` is `"u"`, and the
|
||||||
|
* argument `types` is `[NULL]`, indicating that the `uint` argument has no
|
||||||
|
* corresponding wl_interface since it is a primitive argument.
|
||||||
|
*
|
||||||
|
* In contrast, consider a `wl_foo` interface supporting protocol request `bar`
|
||||||
|
* that has existed since version 2, and has two arguments: a `uint` and an
|
||||||
|
* object of type `wl_baz_interface` that may be `NULL`. Such a `wl_message`
|
||||||
|
* might be:
|
||||||
|
*
|
||||||
|
* \code
|
||||||
|
* { "bar", "2u?o", [NULL, &wl_baz_interface] }
|
||||||
|
* \endcode
|
||||||
|
*
|
||||||
|
* Here, the message `name` is `"bar"`, and the `signature` is `"2u?o"`. Notice
|
||||||
|
* how the `2` indicates the protocol version, the `u` indicates the first
|
||||||
|
* argument type is `uint`, and the `?o` indicates that the second argument
|
||||||
|
* is an object that may be `NULL`. Lastly, the argument `types` array indicates
|
||||||
|
* that no wl_interface corresponds to the first argument, while the type
|
||||||
|
* `wl_baz_interface` corresponds to the second argument.
|
||||||
|
*
|
||||||
|
* \sa wl_argument
|
||||||
|
* \sa wl_interface
|
||||||
|
* \sa <a href="https://wayland.freedesktop.org/docs/html/ch04.html#sect-Protocol-Wire-Format">Wire Format</a>
|
||||||
|
*/
|
||||||
|
struct wl_message {
|
||||||
|
/** Message name */
|
||||||
|
const char *name;
|
||||||
|
/** Message signature */
|
||||||
|
const char *signature;
|
||||||
|
/** Object argument interfaces */
|
||||||
|
const struct wl_interface **types;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Protocol object interface
|
||||||
|
*
|
||||||
|
* A wl_interface describes the API of a protocol object defined in the Wayland
|
||||||
|
* protocol specification. The protocol implementation uses a wl_interface
|
||||||
|
* within its marshalling machinery for encoding client requests.
|
||||||
|
*
|
||||||
|
* The `name` of a wl_interface is the name of the corresponding protocol
|
||||||
|
* interface, and `version` represents the version of the interface. The members
|
||||||
|
* `method_count` and `event_count` represent the number of `methods` (requests)
|
||||||
|
* and `events` in the respective wl_message members.
|
||||||
|
*
|
||||||
|
* For example, consider a protocol interface `foo`, marked as version `1`, with
|
||||||
|
* two requests and one event.
|
||||||
|
*
|
||||||
|
* \code{.xml}
|
||||||
|
* <interface name="foo" version="1">
|
||||||
|
* <request name="a"></request>
|
||||||
|
* <request name="b"></request>
|
||||||
|
* <event name="c"></event>
|
||||||
|
* </interface>
|
||||||
|
* \endcode
|
||||||
|
*
|
||||||
|
* Given two wl_message arrays `foo_requests` and `foo_events`, a wl_interface
|
||||||
|
* for `foo` might be:
|
||||||
|
*
|
||||||
|
* \code
|
||||||
|
* struct wl_interface foo_interface = {
|
||||||
|
* "foo", 1,
|
||||||
|
* 2, foo_requests,
|
||||||
|
* 1, foo_events
|
||||||
|
* };
|
||||||
|
* \endcode
|
||||||
|
*
|
||||||
|
* \note The server side of the protocol may define interface <em>implementation
|
||||||
|
* types</em> that incorporate the term `interface` in their name. Take
|
||||||
|
* care to not confuse these server-side `struct`s with a wl_interface
|
||||||
|
* variable whose name also ends in `interface`. For example, while the
|
||||||
|
* server may define a type `struct wl_foo_interface`, the client may
|
||||||
|
* define a `struct wl_interface wl_foo_interface`.
|
||||||
|
*
|
||||||
|
* \sa wl_message
|
||||||
|
* \sa wl_proxy
|
||||||
|
* \sa <a href="https://wayland.freedesktop.org/docs/html/ch04.html#sect-Protocol-Interfaces">Interfaces</a>
|
||||||
|
* \sa <a href="https://wayland.freedesktop.org/docs/html/ch04.html#sect-Protocol-Versioning">Versioning</a>
|
||||||
|
*/
|
||||||
|
struct wl_interface {
|
||||||
|
/** Interface name */
|
||||||
|
const char *name;
|
||||||
|
/** Interface version */
|
||||||
|
int version;
|
||||||
|
/** Number of methods (requests) */
|
||||||
|
int method_count;
|
||||||
|
/** Method (request) signatures */
|
||||||
|
const struct wl_message *methods;
|
||||||
|
/** Number of events */
|
||||||
|
int event_count;
|
||||||
|
/** Event signatures */
|
||||||
|
const struct wl_message *events;
|
||||||
|
};
|
||||||
|
|
||||||
|
/** \class wl_list
|
||||||
|
*
|
||||||
|
* \brief Doubly-linked list
|
||||||
|
*
|
||||||
|
* On its own, an instance of `struct wl_list` represents the sentinel head of
|
||||||
|
* a doubly-linked list, and must be initialized using wl_list_init().
|
||||||
|
* When empty, the list head's `next` and `prev` members point to the list head
|
||||||
|
* itself, otherwise `next` references the first element in the list, and `prev`
|
||||||
|
* refers to the last element in the list.
|
||||||
|
*
|
||||||
|
* Use the `struct wl_list` type to represent both the list head and the links
|
||||||
|
* between elements within the list. Use wl_list_empty() to determine if the
|
||||||
|
* list is empty in O(1).
|
||||||
|
*
|
||||||
|
* All elements in the list must be of the same type. The element type must have
|
||||||
|
* a `struct wl_list` member, often named `link` by convention. Prior to
|
||||||
|
* insertion, there is no need to initialize an element's `link` - invoking
|
||||||
|
* wl_list_init() on an individual list element's `struct wl_list` member is
|
||||||
|
* unnecessary if the very next operation is wl_list_insert(). However, a
|
||||||
|
* common idiom is to initialize an element's `link` prior to removal - ensure
|
||||||
|
* safety by invoking wl_list_init() before wl_list_remove().
|
||||||
|
*
|
||||||
|
* Consider a list reference `struct wl_list foo_list`, an element type as
|
||||||
|
* `struct element`, and an element's link member as `struct wl_list link`.
|
||||||
|
*
|
||||||
|
* The following code initializes a list and adds three elements to it.
|
||||||
|
*
|
||||||
|
* \code
|
||||||
|
* struct wl_list foo_list;
|
||||||
|
*
|
||||||
|
* struct element {
|
||||||
|
* int foo;
|
||||||
|
* struct wl_list link;
|
||||||
|
* };
|
||||||
|
* struct element e1, e2, e3;
|
||||||
|
*
|
||||||
|
* wl_list_init(&foo_list);
|
||||||
|
* wl_list_insert(&foo_list, &e1.link); // e1 is the first element
|
||||||
|
* wl_list_insert(&foo_list, &e2.link); // e2 is now the first element
|
||||||
|
* wl_list_insert(&e2.link, &e3.link); // insert e3 after e2
|
||||||
|
* \endcode
|
||||||
|
*
|
||||||
|
* The list now looks like <em>[e2, e3, e1]</em>.
|
||||||
|
*
|
||||||
|
* The `wl_list` API provides some iterator macros. For example, to iterate
|
||||||
|
* a list in ascending order:
|
||||||
|
*
|
||||||
|
* \code
|
||||||
|
* struct element *e;
|
||||||
|
* wl_list_for_each(e, foo_list, link) {
|
||||||
|
* do_something_with_element(e);
|
||||||
|
* }
|
||||||
|
* \endcode
|
||||||
|
*
|
||||||
|
* See the documentation of each iterator for details.
|
||||||
|
* \sa http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/linux/list.h
|
||||||
|
*/
|
||||||
|
struct wl_list {
|
||||||
|
/** Previous list element */
|
||||||
|
struct wl_list *prev;
|
||||||
|
/** Next list element */
|
||||||
|
struct wl_list *next;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes the list.
|
||||||
|
*
|
||||||
|
* \param list List to initialize
|
||||||
|
*
|
||||||
|
* \memberof wl_list
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
wl_list_init(struct wl_list *list);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Inserts an element into the list, after the element represented by \p list.
|
||||||
|
* When \p list is a reference to the list itself (the head), set the containing
|
||||||
|
* struct of \p elm as the first element in the list.
|
||||||
|
*
|
||||||
|
* \note If \p elm is already part of a list, inserting it again will lead to
|
||||||
|
* list corruption.
|
||||||
|
*
|
||||||
|
* \param list List element after which the new element is inserted
|
||||||
|
* \param elm Link of the containing struct to insert into the list
|
||||||
|
*
|
||||||
|
* \memberof wl_list
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
wl_list_insert(struct wl_list *list, struct wl_list *elm);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes an element from the list.
|
||||||
|
*
|
||||||
|
* \note This operation leaves \p elm in an invalid state.
|
||||||
|
*
|
||||||
|
* \param elm Link of the containing struct to remove from the list
|
||||||
|
*
|
||||||
|
* \memberof wl_list
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
wl_list_remove(struct wl_list *elm);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determines the length of the list.
|
||||||
|
*
|
||||||
|
* \note This is an O(n) operation.
|
||||||
|
*
|
||||||
|
* \param list List whose length is to be determined
|
||||||
|
*
|
||||||
|
* \return Number of elements in the list
|
||||||
|
*
|
||||||
|
* \memberof wl_list
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
wl_list_length(const struct wl_list *list);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determines if the list is empty.
|
||||||
|
*
|
||||||
|
* \param list List whose emptiness is to be determined
|
||||||
|
*
|
||||||
|
* \return 1 if empty, or 0 if not empty
|
||||||
|
*
|
||||||
|
* \memberof wl_list
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
wl_list_empty(const struct wl_list *list);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Inserts all of the elements of one list into another, after the element
|
||||||
|
* represented by \p list.
|
||||||
|
*
|
||||||
|
* \note This leaves \p other in an invalid state.
|
||||||
|
*
|
||||||
|
* \param list List element after which the other list elements will be inserted
|
||||||
|
* \param other List of elements to insert
|
||||||
|
*
|
||||||
|
* \memberof wl_list
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
wl_list_insert_list(struct wl_list *list, struct wl_list *other);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves a pointer to a containing struct, given a member name.
|
||||||
|
*
|
||||||
|
* This macro allows "conversion" from a pointer to a member to its containing
|
||||||
|
* struct. This is useful if you have a contained item like a wl_list,
|
||||||
|
* wl_listener, or wl_signal, provided via a callback or other means, and would
|
||||||
|
* like to retrieve the struct that contains it.
|
||||||
|
*
|
||||||
|
* To demonstrate, the following example retrieves a pointer to
|
||||||
|
* `example_container` given only its `destroy_listener` member:
|
||||||
|
*
|
||||||
|
* \code
|
||||||
|
* struct example_container {
|
||||||
|
* struct wl_listener destroy_listener;
|
||||||
|
* // other members...
|
||||||
|
* };
|
||||||
|
*
|
||||||
|
* void example_container_destroy(struct wl_listener *listener, void *data)
|
||||||
|
* {
|
||||||
|
* struct example_container *ctr;
|
||||||
|
*
|
||||||
|
* ctr = wl_container_of(listener, ctr, destroy_listener);
|
||||||
|
* // destroy ctr...
|
||||||
|
* }
|
||||||
|
* \endcode
|
||||||
|
*
|
||||||
|
* \note `sample` need not be a valid pointer. A null or uninitialised pointer
|
||||||
|
* is sufficient.
|
||||||
|
*
|
||||||
|
* \param ptr Valid pointer to the contained member
|
||||||
|
* \param sample Pointer to a struct whose type contains \p ptr
|
||||||
|
* \param member Named location of \p ptr within the \p sample type
|
||||||
|
*
|
||||||
|
* \return The container for the specified pointer
|
||||||
|
*/
|
||||||
|
#define wl_container_of(ptr, sample, member) \
|
||||||
|
(WL_TYPEOF(sample))((char *)(ptr) - \
|
||||||
|
offsetof(WL_TYPEOF(*sample), member))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Iterates over a list.
|
||||||
|
*
|
||||||
|
* This macro expresses a for-each iterator for wl_list. Given a list and
|
||||||
|
* wl_list link member name (often named `link` by convention), this macro
|
||||||
|
* assigns each element in the list to \p pos, which can then be referenced in
|
||||||
|
* a trailing code block. For example, given a wl_list of `struct message`
|
||||||
|
* elements:
|
||||||
|
*
|
||||||
|
* \code
|
||||||
|
* struct message {
|
||||||
|
* char *contents;
|
||||||
|
* wl_list link;
|
||||||
|
* };
|
||||||
|
*
|
||||||
|
* struct wl_list *message_list;
|
||||||
|
* // Assume message_list now "contains" many messages
|
||||||
|
*
|
||||||
|
* struct message *m;
|
||||||
|
* wl_list_for_each(m, message_list, link) {
|
||||||
|
* do_something_with_message(m);
|
||||||
|
* }
|
||||||
|
* \endcode
|
||||||
|
*
|
||||||
|
* \param pos Cursor that each list element will be assigned to
|
||||||
|
* \param head Head of the list to iterate over
|
||||||
|
* \param member Name of the link member within the element struct
|
||||||
|
*
|
||||||
|
* \relates wl_list
|
||||||
|
*/
|
||||||
|
#define wl_list_for_each(pos, head, member) \
|
||||||
|
for (pos = wl_container_of((head)->next, pos, member); \
|
||||||
|
&pos->member != (head); \
|
||||||
|
pos = wl_container_of(pos->member.next, pos, member))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Iterates over a list, safe against removal of the list element.
|
||||||
|
*
|
||||||
|
* \note Only removal of the current element, \p pos, is safe. Removing
|
||||||
|
* any other element during traversal may lead to a loop malfunction.
|
||||||
|
*
|
||||||
|
* \sa wl_list_for_each()
|
||||||
|
*
|
||||||
|
* \param pos Cursor that each list element will be assigned to
|
||||||
|
* \param tmp Temporary pointer of the same type as \p pos
|
||||||
|
* \param head Head of the list to iterate over
|
||||||
|
* \param member Name of the link member within the element struct
|
||||||
|
*
|
||||||
|
* \relates wl_list
|
||||||
|
*/
|
||||||
|
#define wl_list_for_each_safe(pos, tmp, head, member) \
|
||||||
|
for (pos = wl_container_of((head)->next, pos, member), \
|
||||||
|
tmp = wl_container_of((pos)->member.next, tmp, member); \
|
||||||
|
&pos->member != (head); \
|
||||||
|
pos = tmp, \
|
||||||
|
tmp = wl_container_of(pos->member.next, tmp, member))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Iterates backwards over a list.
|
||||||
|
*
|
||||||
|
* \sa wl_list_for_each()
|
||||||
|
*
|
||||||
|
* \param pos Cursor that each list element will be assigned to
|
||||||
|
* \param head Head of the list to iterate over
|
||||||
|
* \param member Name of the link member within the element struct
|
||||||
|
*
|
||||||
|
* \relates wl_list
|
||||||
|
*/
|
||||||
|
#define wl_list_for_each_reverse(pos, head, member) \
|
||||||
|
for (pos = wl_container_of((head)->prev, pos, member); \
|
||||||
|
&pos->member != (head); \
|
||||||
|
pos = wl_container_of(pos->member.prev, pos, member))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Iterates backwards over a list, safe against removal of the list element.
|
||||||
|
*
|
||||||
|
* \note Only removal of the current element, \p pos, is safe. Removing
|
||||||
|
* any other element during traversal may lead to a loop malfunction.
|
||||||
|
*
|
||||||
|
* \sa wl_list_for_each()
|
||||||
|
*
|
||||||
|
* \param pos Cursor that each list element will be assigned to
|
||||||
|
* \param tmp Temporary pointer of the same type as \p pos
|
||||||
|
* \param head Head of the list to iterate over
|
||||||
|
* \param member Name of the link member within the element struct
|
||||||
|
*
|
||||||
|
* \relates wl_list
|
||||||
|
*/
|
||||||
|
#define wl_list_for_each_reverse_safe(pos, tmp, head, member) \
|
||||||
|
for (pos = wl_container_of((head)->prev, pos, member), \
|
||||||
|
tmp = wl_container_of((pos)->member.prev, tmp, member); \
|
||||||
|
&pos->member != (head); \
|
||||||
|
pos = tmp, \
|
||||||
|
tmp = wl_container_of(pos->member.prev, tmp, member))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \class wl_array
|
||||||
|
*
|
||||||
|
* Dynamic array
|
||||||
|
*
|
||||||
|
* A wl_array is a dynamic array that can only grow until released. It is
|
||||||
|
* intended for relatively small allocations whose size is variable or not known
|
||||||
|
* in advance. While construction of a wl_array does not require all elements to
|
||||||
|
* be of the same size, wl_array_for_each() does require all elements to have
|
||||||
|
* the same type and size.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
struct wl_array {
|
||||||
|
/** Array size */
|
||||||
|
size_t size;
|
||||||
|
/** Allocated space */
|
||||||
|
size_t alloc;
|
||||||
|
/** Array data */
|
||||||
|
void *data;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes the array.
|
||||||
|
*
|
||||||
|
* \param array Array to initialize
|
||||||
|
*
|
||||||
|
* \memberof wl_array
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
wl_array_init(struct wl_array *array);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Releases the array data.
|
||||||
|
*
|
||||||
|
* \note Leaves the array in an invalid state.
|
||||||
|
*
|
||||||
|
* \param array Array whose data is to be released
|
||||||
|
*
|
||||||
|
* \memberof wl_array
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
wl_array_release(struct wl_array *array);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Increases the size of the array by \p size bytes.
|
||||||
|
*
|
||||||
|
* \param array Array whose size is to be increased
|
||||||
|
* \param size Number of bytes to increase the size of the array by
|
||||||
|
*
|
||||||
|
* \return A pointer to the beginning of the newly appended space, or NULL when
|
||||||
|
* resizing fails.
|
||||||
|
*
|
||||||
|
* \memberof wl_array
|
||||||
|
*/
|
||||||
|
void *
|
||||||
|
wl_array_add(struct wl_array *array, size_t size);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copies the contents of \p source to \p array.
|
||||||
|
*
|
||||||
|
* \param array Destination array to copy to
|
||||||
|
* \param source Source array to copy from
|
||||||
|
*
|
||||||
|
* \return 0 on success, or -1 on failure
|
||||||
|
*
|
||||||
|
* \memberof wl_array
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
wl_array_copy(struct wl_array *array, struct wl_array *source);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Iterates over an array.
|
||||||
|
*
|
||||||
|
* This macro expresses a for-each iterator for wl_array. It assigns each
|
||||||
|
* element in the array to \p pos, which can then be referenced in a trailing
|
||||||
|
* code block. \p pos must be a pointer to the array element type, and all
|
||||||
|
* array elements must be of the same type and size.
|
||||||
|
*
|
||||||
|
* \param pos Cursor that each array element will be assigned to
|
||||||
|
* \param array Array to iterate over
|
||||||
|
*
|
||||||
|
* \relates wl_array
|
||||||
|
* \sa wl_list_for_each()
|
||||||
|
*/
|
||||||
|
#define wl_array_for_each(pos, array) \
|
||||||
|
for (pos = (array)->data; \
|
||||||
|
(array)->size != 0 && \
|
||||||
|
(const char *) pos < ((const char *) (array)->data + (array)->size); \
|
||||||
|
(pos)++)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fixed-point number
|
||||||
|
*
|
||||||
|
* A `wl_fixed_t` is a 24.8 signed fixed-point number with a sign bit, 23 bits
|
||||||
|
* of integer precision and 8 bits of decimal precision. Consider `wl_fixed_t`
|
||||||
|
* as an opaque struct with methods that facilitate conversion to and from
|
||||||
|
* `double` and `int` types.
|
||||||
|
*/
|
||||||
|
typedef int32_t wl_fixed_t;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a fixed-point number to a floating-point number.
|
||||||
|
*
|
||||||
|
* \param f Fixed-point number to convert
|
||||||
|
*
|
||||||
|
* \return Floating-point representation of the fixed-point argument
|
||||||
|
*/
|
||||||
|
static inline double
|
||||||
|
wl_fixed_to_double(wl_fixed_t f)
|
||||||
|
{
|
||||||
|
return f / 256.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a floating-point number to a fixed-point number.
|
||||||
|
*
|
||||||
|
* \param d Floating-point number to convert
|
||||||
|
*
|
||||||
|
* \return Fixed-point representation of the floating-point argument
|
||||||
|
*/
|
||||||
|
static inline wl_fixed_t
|
||||||
|
wl_fixed_from_double(double d)
|
||||||
|
{
|
||||||
|
return (wl_fixed_t) (round(d * 256.0));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a fixed-point number to an integer.
|
||||||
|
*
|
||||||
|
* \param f Fixed-point number to convert
|
||||||
|
*
|
||||||
|
* \return Integer component of the fixed-point argument
|
||||||
|
*/
|
||||||
|
static inline int
|
||||||
|
wl_fixed_to_int(wl_fixed_t f)
|
||||||
|
{
|
||||||
|
return f / 256;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts an integer to a fixed-point number.
|
||||||
|
*
|
||||||
|
* \param i Integer to convert
|
||||||
|
*
|
||||||
|
* \return Fixed-point representation of the integer argument
|
||||||
|
*/
|
||||||
|
static inline wl_fixed_t
|
||||||
|
wl_fixed_from_int(int i)
|
||||||
|
{
|
||||||
|
return i * 256;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Protocol message argument data types
|
||||||
|
*
|
||||||
|
* This union represents all of the argument types in the Wayland protocol wire
|
||||||
|
* format. The protocol implementation uses wl_argument within its marshalling
|
||||||
|
* machinery for dispatching messages between a client and a compositor.
|
||||||
|
*
|
||||||
|
* \sa wl_message
|
||||||
|
* \sa wl_interface
|
||||||
|
* \sa <a href="https://wayland.freedesktop.org/docs/html/ch04.html#sect-Protocol-wire-Format">Wire Format</a>
|
||||||
|
*/
|
||||||
|
union wl_argument {
|
||||||
|
int32_t i; /**< `int` */
|
||||||
|
uint32_t u; /**< `uint` */
|
||||||
|
wl_fixed_t f; /**< `fixed` */
|
||||||
|
const char *s; /**< `string` */
|
||||||
|
struct wl_object *o; /**< `object` */
|
||||||
|
uint32_t n; /**< `new_id` */
|
||||||
|
struct wl_array *a; /**< `array` */
|
||||||
|
int32_t h; /**< `fd` */
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dispatcher function type alias
|
||||||
|
*
|
||||||
|
* A dispatcher is a function that handles the emitting of callbacks in client
|
||||||
|
* code. For programs directly using the C library, this is done by using
|
||||||
|
* libffi to call function pointers. When binding to languages other than C,
|
||||||
|
* dispatchers provide a way to abstract the function calling process to be
|
||||||
|
* friendlier to other function calling systems.
|
||||||
|
*
|
||||||
|
* A dispatcher takes five arguments: The first is the dispatcher-specific
|
||||||
|
* implementation associated with the target object. The second is the object
|
||||||
|
* upon which the callback is being invoked (either wl_proxy or wl_resource).
|
||||||
|
* The third and fourth arguments are the opcode and the wl_message
|
||||||
|
* corresponding to the callback. The final argument is an array of arguments
|
||||||
|
* received from the other process via the wire protocol.
|
||||||
|
*
|
||||||
|
* \param user_data Dispatcher-specific implementation data
|
||||||
|
* \param target Callback invocation target (wl_proxy or `wl_resource`)
|
||||||
|
* \param opcode Callback opcode
|
||||||
|
* \param msg Callback message signature
|
||||||
|
* \param args Array of received arguments
|
||||||
|
*
|
||||||
|
* \return 0 on success, or -1 on failure
|
||||||
|
*/
|
||||||
|
typedef int (*wl_dispatcher_func_t)(const void *user_data, void *target,
|
||||||
|
uint32_t opcode, const struct wl_message *msg,
|
||||||
|
union wl_argument *args);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Log function type alias
|
||||||
|
*
|
||||||
|
* The C implementation of the Wayland protocol abstracts the details of
|
||||||
|
* logging. Users may customize the logging behavior, with a function conforming
|
||||||
|
* to the `wl_log_func_t` type, via `wl_log_set_handler_client` and
|
||||||
|
* `wl_log_set_handler_server`.
|
||||||
|
*
|
||||||
|
* A `wl_log_func_t` must conform to the expectations of `vprintf`, and
|
||||||
|
* expects two arguments: a string to write and a corresponding variable
|
||||||
|
* argument list. While the string to write may contain format specifiers and
|
||||||
|
* use values in the variable argument list, the behavior of any `wl_log_func_t`
|
||||||
|
* depends on the implementation.
|
||||||
|
*
|
||||||
|
* \note Take care to not confuse this with `wl_protocol_logger_func_t`, which
|
||||||
|
* is a specific server-side logger for requests and events.
|
||||||
|
*
|
||||||
|
* \param fmt String to write to the log, containing optional format
|
||||||
|
* specifiers
|
||||||
|
* \param args Variable argument list
|
||||||
|
*
|
||||||
|
* \sa wl_log_set_handler_client
|
||||||
|
* \sa wl_log_set_handler_server
|
||||||
|
*/
|
||||||
|
typedef void (*wl_log_func_t)(const char *fmt, va_list args) WL_PRINTF(1, 0);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return value of an iterator function
|
||||||
|
*
|
||||||
|
* \sa wl_client_for_each_resource_iterator_func_t
|
||||||
|
* \sa wl_client_for_each_resource
|
||||||
|
*/
|
||||||
|
enum wl_iterator_result {
|
||||||
|
/** Stop the iteration */
|
||||||
|
WL_ITERATOR_STOP,
|
||||||
|
/** Continue the iteration */
|
||||||
|
WL_ITERATOR_CONTINUE
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
/*
|
||||||
|
* Copyright © 2012 Intel Corporation
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef WAYLAND_VERSION_H
|
||||||
|
#define WAYLAND_VERSION_H
|
||||||
|
|
||||||
|
#define WAYLAND_VERSION_MAJOR @WAYLAND_VERSION_MAJOR@
|
||||||
|
#define WAYLAND_VERSION_MINOR @WAYLAND_VERSION_MINOR@
|
||||||
|
#define WAYLAND_VERSION_MICRO @WAYLAND_VERSION_MICRO@
|
||||||
|
#define WAYLAND_VERSION "@WAYLAND_VERSION@"
|
||||||
|
|
||||||
|
#endif
|
||||||
Loading…
Reference in New Issue