diff options
Diffstat (limited to 'sample/simple-egl/include')
-rw-r--r-- | sample/simple-egl/include/ivi-application-client-protocol.h | 245 | ||||
-rw-r--r-- | sample/simple-egl/include/platform.h | 115 |
2 files changed, 360 insertions, 0 deletions
diff --git a/sample/simple-egl/include/ivi-application-client-protocol.h b/sample/simple-egl/include/ivi-application-client-protocol.h new file mode 100644 index 0000000..ca31bf7 --- /dev/null +++ b/sample/simple-egl/include/ivi-application-client-protocol.h @@ -0,0 +1,245 @@ +/* Generated by wayland-scanner 1.11.0 */ + +#ifndef IVI_APPLICATION_CLIENT_PROTOCOL_H +#define IVI_APPLICATION_CLIENT_PROTOCOL_H + +#include <stdint.h> +#include <stddef.h> +#include "wayland-client.h" + +//#ifdef __cplusplus +//extern "C" { +//#endif + +/** + * @page page_ivi_application The ivi_application protocol + * @section page_ifaces_ivi_application Interfaces + * - @subpage page_iface_ivi_surface - application interface to surface in ivi compositor + * - @subpage page_iface_ivi_application - create ivi-style surfaces + * @section page_copyright_ivi_application Copyright + * <pre> + * + * Copyright (C) 2013 DENSO CORPORATION + * Copyright (c) 2013 BMW Car IT GmbH + * + * 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 ivi_application; +struct ivi_surface; +struct wl_surface; + +/** + * @page page_iface_ivi_surface ivi_surface + * @section page_iface_ivi_surface_desc Description + * @section page_iface_ivi_surface_api API + * See @ref iface_ivi_surface. + */ +/** + * @defgroup iface_ivi_surface The ivi_surface interface + */ +extern const struct wl_interface ivi_surface_interface; +/** + * @page page_iface_ivi_application ivi_application + * @section page_iface_ivi_application_desc Description + * + * This interface is exposed as a global singleton. + * This interface is implemented by servers that provide IVI-style user interfaces. + * It allows clients to associate a ivi_surface with wl_surface. + * @section page_iface_ivi_application_api API + * See @ref iface_ivi_application. + */ +/** + * @defgroup iface_ivi_application The ivi_application interface + * + * This interface is exposed as a global singleton. + * This interface is implemented by servers that provide IVI-style user interfaces. + * It allows clients to associate a ivi_surface with wl_surface. + */ +extern const struct wl_interface ivi_application_interface; + +/** + * @ingroup iface_ivi_surface + * @struct ivi_surface_listener + */ +struct ivi_surface_listener { + /** + * suggest resize + * + * The configure event asks the client to resize its surface. + * + * The size is a hint, in the sense that the client is free to + * ignore it if it doesn't resize, pick a smaller size (to satisfy + * aspect ratio or resize in steps of NxM pixels). + * + * The client is free to dismiss all but the last configure event + * it received. + * + * The width and height arguments specify the size of the window in + * surface-local coordinates. + */ + void (*configure)(void *data, + struct ivi_surface *ivi_surface, + int32_t width, + int32_t height); +}; + +/** + * @ingroup ivi_surface_iface + */ +static inline int +ivi_surface_add_listener(struct ivi_surface *ivi_surface, + const struct ivi_surface_listener *listener, void *data) +{ + return wl_proxy_add_listener((struct wl_proxy *) ivi_surface, + (void (**)(void)) listener, data); +} + +#define IVI_SURFACE_DESTROY 0 + +/** + * @ingroup iface_ivi_surface + */ +#define IVI_SURFACE_DESTROY_SINCE_VERSION 1 + +/** @ingroup iface_ivi_surface */ +static inline void +ivi_surface_set_user_data(struct ivi_surface *ivi_surface, void *user_data) +{ + wl_proxy_set_user_data((struct wl_proxy *) ivi_surface, user_data); +} + +/** @ingroup iface_ivi_surface */ +static inline void * +ivi_surface_get_user_data(struct ivi_surface *ivi_surface) +{ + return wl_proxy_get_user_data((struct wl_proxy *) ivi_surface); +} + +static inline uint32_t +ivi_surface_get_version(struct ivi_surface *ivi_surface) +{ + return wl_proxy_get_version((struct wl_proxy *) ivi_surface); +} + +/** + * @ingroup iface_ivi_surface + * + * This removes link from ivi_id to wl_surface and destroys ivi_surface. + * The ID, ivi_id, is free and can be used for surface_create again. + */ +static inline void +ivi_surface_destroy(struct ivi_surface *ivi_surface) +{ + wl_proxy_marshal((struct wl_proxy *) ivi_surface, + IVI_SURFACE_DESTROY); + + wl_proxy_destroy((struct wl_proxy *) ivi_surface); +} + +#ifndef IVI_APPLICATION_ERROR_ENUM +#define IVI_APPLICATION_ERROR_ENUM +enum ivi_application_error { + /** + * given wl_surface has another role + */ + IVI_APPLICATION_ERROR_ROLE = 0, + /** + * given ivi_id is assigned to another wl_surface + */ + IVI_APPLICATION_ERROR_IVI_ID = 1, +}; +#endif /* IVI_APPLICATION_ERROR_ENUM */ + +#define IVI_APPLICATION_SURFACE_CREATE 0 + +/** + * @ingroup iface_ivi_application + */ +#define IVI_APPLICATION_SURFACE_CREATE_SINCE_VERSION 1 + +/** @ingroup iface_ivi_application */ +static inline void +ivi_application_set_user_data(struct ivi_application *ivi_application, void *user_data) +{ + wl_proxy_set_user_data((struct wl_proxy *) ivi_application, user_data); +} + +/** @ingroup iface_ivi_application */ +static inline void * +ivi_application_get_user_data(struct ivi_application *ivi_application) +{ + return wl_proxy_get_user_data((struct wl_proxy *) ivi_application); +} + +static inline uint32_t +ivi_application_get_version(struct ivi_application *ivi_application) +{ + return wl_proxy_get_version((struct wl_proxy *) ivi_application); +} + +/** @ingroup iface_ivi_application */ +static inline void +ivi_application_destroy(struct ivi_application *ivi_application) +{ + wl_proxy_destroy((struct wl_proxy *) ivi_application); +} + +/** + * @ingroup iface_ivi_application + * + * This request gives the wl_surface the role of an IVI Surface. Creating more than + * one ivi_surface for a wl_surface is not allowed. Note, that this still allows the + * following example: + * + * 1. create a wl_surface + * 2. create ivi_surface for the wl_surface + * 3. destroy the ivi_surface + * 4. create ivi_surface for the wl_surface (with the same or another ivi_id as before) + * + * surface_create will create a interface:ivi_surface with numeric ID; ivi_id in + * ivi compositor. These ivi_ids are defined as unique in the system to identify + * it inside of ivi compositor. The ivi compositor implements business logic how to + * set properties of the surface with ivi_id according to status of the system. + * E.g. a unique ID for Car Navigation application is used for implementing special + * logic of the application about where it shall be located. + * The server regards following cases as protocol errors and disconnects the client. + * - wl_surface already has an nother role. + * - ivi_id is already assigned to an another wl_surface. + * + * If client destroys ivi_surface or wl_surface which is assigne to the ivi_surface, + * ivi_id which is assigned to the ivi_surface is free for reuse. + */ +static inline struct ivi_surface * +ivi_application_surface_create(struct ivi_application *ivi_application, uint32_t ivi_id, struct wl_surface *surface) +{ + struct wl_proxy *id; + + id = wl_proxy_marshal_constructor((struct wl_proxy *) ivi_application, + IVI_APPLICATION_SURFACE_CREATE, &ivi_surface_interface, ivi_id, surface, NULL); + + return (struct ivi_surface *) id; +} + +//#ifdef __cplusplus +//} +//#endif + +#endif diff --git a/sample/simple-egl/include/platform.h b/sample/simple-egl/include/platform.h new file mode 100644 index 0000000..8fd57b0 --- /dev/null +++ b/sample/simple-egl/include/platform.h @@ -0,0 +1,115 @@ +/* + * Copyright © 2015 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. + */ + +#ifndef WESTON_PLATFORM_H +#define WESTON_PLATFORM_H + +#include <string.h> + +#include <wayland-egl.h> +#include <EGL/egl.h> +#include <EGL/eglext.h> + +#ifndef EGL_PLATFORM_WAYLAND_KHR +#define EGL_PLATFORM_WAYLAND_KHR 0x31D8 +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifndef EGL_EXT_platform_base +typedef EGLDisplay (*PFNEGLGETPLATFORMDISPLAYEXTPROC) (EGLenum platform, + void *native_display, + const EGLint *attrib_list); +typedef EGLSurface (*PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC) (EGLDisplay dpy, + EGLConfig config, + void *native_window, + const EGLint *attrib_list); +#endif + +static inline void * +weston_platform_get_egl_proc_address(const char *address) +{ + const char *extensions = eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS); + + if (extensions + && (strstr(extensions, "EGL_EXT_platform_wayland") + || strstr(extensions, "EGL_KHR_platform_wayland"))) { + return (void *) eglGetProcAddress(address); + } + + return NULL; +} + +static inline EGLDisplay +weston_platform_get_egl_display(EGLenum platform, void *native_display, + const EGLint *attrib_list) +{ + static PFNEGLGETPLATFORMDISPLAYEXTPROC get_platform_display = NULL; + + if (!get_platform_display) { + get_platform_display = (PFNEGLGETPLATFORMDISPLAYEXTPROC) + weston_platform_get_egl_proc_address( + "eglGetPlatformDisplayEXT"); + } + + if (get_platform_display) + return get_platform_display(platform, + native_display, attrib_list); + + return eglGetDisplay((EGLNativeDisplayType) native_display); +} + +static inline EGLSurface +weston_platform_create_egl_surface(EGLDisplay dpy, EGLConfig config, + void *native_window, + const EGLint *attrib_list) +{ + static PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC + create_platform_window = NULL; + + if (!create_platform_window) { + create_platform_window = (PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC) + weston_platform_get_egl_proc_address( + "eglCreatePlatformWindowSurfaceEXT"); + } + + if (create_platform_window) + return create_platform_window(dpy, config, + native_window, + attrib_list); + + return eglCreateWindowSurface(dpy, config, + (EGLNativeWindowType) native_window, + attrib_list); +} + +#ifdef __cplusplus +} +#endif + +#endif /* WESTON_PLATFORM_H */ |