#pragma once /* * Copyright (C) 2005-2013 Team XBMC * http://xbmc.org * * This Program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This Program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with XBMC; see the file COPYING. If not, see * . * */ #if (defined HAVE_CONFIG_H) && (!defined TARGET_WINDOWS) #include "config.h" #endif #include #include "utils/log.h" #include "DynamicDll.h" struct wl_proxy; struct wl_interface; struct wl_display; struct wl_registry; struct wl_callback; struct wl_compositor; struct wl_shell; struct wl_shell_surface; struct wl_surface; struct wl_seat; struct wl_pointer; struct wl_keyboard; struct wl_output; struct wl_region; extern const struct wl_interface wl_display_interface; extern const struct wl_interface wl_registry_interface; extern const struct wl_interface wl_callback_interface; extern const struct wl_interface wl_compositor_interface; extern const struct wl_interface wl_shell_interface; extern const struct wl_interface wl_shell_surface_interface; extern const struct wl_interface wl_surface_interface; extern const struct wl_interface wl_seat_interface; extern const struct wl_interface wl_pointer_interface; extern const struct wl_interface wl_keyboard_interface; extern const struct wl_interface wl_output_interface; extern const struct wl_interface wl_region_interface; class IDllWaylandClient { public: typedef void(*wl_proxy_marshal_func)(struct wl_proxy *, uint32_t, ...); typedef void(*wl_proxy_listener_func)(void); typedef int(*wl_display_read_events_func)(struct wl_display *); typedef int(*wl_display_prepare_read_func)(struct wl_display *); virtual struct wl_interface ** Get_wl_display_interface() = 0; virtual struct wl_interface ** Get_wl_registry_interface() = 0; virtual struct wl_interface ** Get_wl_callback_interface() = 0; virtual struct wl_interface ** Get_wl_compositor_interface() = 0; virtual struct wl_interface ** Get_wl_shell_interface() = 0; virtual struct wl_interface ** Get_wl_shell_surface_interface() = 0; virtual struct wl_interface ** Get_wl_surface_interface() = 0; virtual struct wl_interface ** Get_wl_seat_interface() = 0; virtual struct wl_interface ** Get_wl_pointer_interface() = 0; virtual struct wl_interface ** Get_wl_keyboard_interface() = 0; virtual struct wl_interface ** Get_wl_output_interface() = 0; virtual struct wl_interface ** Get_wl_region_interface() = 0; virtual struct wl_display * wl_display_connect(const char *) = 0; virtual void wl_display_disconnect(struct wl_display *) = 0; virtual int wl_display_get_fd(struct wl_display *) = 0; virtual wl_display_prepare_read_func wl_display_prepare_read_proc() = 0; virtual wl_display_read_events_func wl_display_read_events_proc() = 0; virtual int wl_display_dispatch_pending(struct wl_display *) = 0; virtual int wl_display_dispatch(struct wl_display *) = 0; virtual int wl_display_flush(struct wl_display *) = 0; virtual wl_proxy_marshal_func wl_proxy_marshaller() = 0; virtual struct wl_proxy * wl_proxy_create(struct wl_proxy *, const struct wl_interface *) = 0; virtual void wl_proxy_destroy(struct wl_proxy *) = 0; virtual int wl_proxy_add_listener(struct wl_proxy *, wl_proxy_listener_func *, void *) = 0; virtual ~IDllWaylandClient() {} }; class DllWaylandClient : public DllDynamic, public IDllWaylandClient { DECLARE_DLL_WRAPPER(DllWaylandClient, DLL_PATH_WAYLAND_CLIENT) DEFINE_GLOBAL_PTR(struct wl_interface *, wl_display_interface); DEFINE_GLOBAL_PTR(struct wl_interface *, wl_registry_interface); DEFINE_GLOBAL_PTR(struct wl_interface *, wl_callback_interface); DEFINE_GLOBAL_PTR(struct wl_interface *, wl_compositor_interface); DEFINE_GLOBAL_PTR(struct wl_interface *, wl_shell_interface); DEFINE_GLOBAL_PTR(struct wl_interface *, wl_shell_surface_interface); DEFINE_GLOBAL_PTR(struct wl_interface *, wl_surface_interface); DEFINE_GLOBAL_PTR(struct wl_interface *, wl_seat_interface); DEFINE_GLOBAL_PTR(struct wl_interface *, wl_pointer_interface); DEFINE_GLOBAL_PTR(struct wl_interface *, wl_keyboard_interface); DEFINE_GLOBAL_PTR(struct wl_interface *, wl_output_interface); DEFINE_GLOBAL_PTR(struct wl_interface *, wl_region_interface); DEFINE_METHOD1(struct wl_display *, wl_display_connect, (const char *p1)); DEFINE_METHOD1(void, wl_display_disconnect, (struct wl_display *p1)); DEFINE_METHOD1(int, wl_display_get_fd, (struct wl_display *p1)); DEFINE_METHOD_FP(int, wl_display_prepare_read, (struct wl_display *p1)); DEFINE_METHOD_FP(int, wl_display_read_events, (struct wl_display *p1)); DEFINE_METHOD1(int, wl_display_dispatch_pending, (struct wl_display *p1)); DEFINE_METHOD1(int, wl_display_dispatch, (struct wl_display *p1)); DEFINE_METHOD1(int, wl_display_flush, (struct wl_display *p1)); /* We need to resolve wl_proxy_marshal as a function pointer as it * takes varargs */ DEFINE_METHOD_FP(void, wl_proxy_marshal, (struct wl_proxy *p1, uint32_t p2, ...)); DEFINE_METHOD2(struct wl_proxy *, wl_proxy_create, (struct wl_proxy *p1, const struct wl_interface *p2)); DEFINE_METHOD1(void, wl_proxy_destroy, (struct wl_proxy *p1)); DEFINE_METHOD3(int, wl_proxy_add_listener, (struct wl_proxy *p1, wl_proxy_listener_func *p2, void *p3)); BEGIN_METHOD_RESOLVE() RESOLVE_METHOD(wl_display_interface) RESOLVE_METHOD(wl_registry_interface) RESOLVE_METHOD(wl_callback_interface) RESOLVE_METHOD(wl_compositor_interface) RESOLVE_METHOD(wl_shell_interface) RESOLVE_METHOD(wl_shell_surface_interface) RESOLVE_METHOD(wl_surface_interface) RESOLVE_METHOD(wl_seat_interface) RESOLVE_METHOD(wl_pointer_interface) RESOLVE_METHOD(wl_keyboard_interface) RESOLVE_METHOD(wl_output_interface) RESOLVE_METHOD(wl_region_interface) RESOLVE_METHOD(wl_display_connect) RESOLVE_METHOD(wl_display_disconnect) RESOLVE_METHOD(wl_display_get_fd) RESOLVE_METHOD_OPTIONAL_FP(wl_display_prepare_read) RESOLVE_METHOD_OPTIONAL_FP(wl_display_read_events) RESOLVE_METHOD(wl_display_dispatch_pending) RESOLVE_METHOD(wl_display_dispatch) RESOLVE_METHOD(wl_display_flush) RESOLVE_METHOD_FP(wl_proxy_marshal) RESOLVE_METHOD(wl_proxy_create) RESOLVE_METHOD(wl_proxy_destroy) RESOLVE_METHOD(wl_proxy_add_listener) END_METHOD_RESOLVE() public: /* This overload returns the function pointer to wl_proxy_marshal * so that clients can call it directly */ wl_proxy_marshal_func wl_proxy_marshaller() { return DllWaylandClient::wl_proxy_marshal; } wl_display_prepare_read_func wl_display_prepare_read_proc() { return DllWaylandClient::wl_display_prepare_read; } wl_display_read_events_func wl_display_read_events_proc() { return DllWaylandClient::wl_display_read_events; } };