wl_platform.h
Go to the documentation of this file.
1 //========================================================================
2 // GLFW 3.3 Wayland - www.glfw.org
3 //------------------------------------------------------------------------
4 // Copyright (c) 2014 Jonas Ã…dahl <jadahl@gmail.com>
5 //
6 // This software is provided 'as-is', without any express or implied
7 // warranty. In no event will the authors be held liable for any damages
8 // arising from the use of this software.
9 //
10 // Permission is granted to anyone to use this software for any purpose,
11 // including commercial applications, and to alter it and redistribute it
12 // freely, subject to the following restrictions:
13 //
14 // 1. The origin of this software must not be misrepresented; you must not
15 // claim that you wrote the original software. If you use this software
16 // in a product, an acknowledgment in the product documentation would
17 // be appreciated but is not required.
18 //
19 // 2. Altered source versions must be plainly marked as such, and must not
20 // be misrepresented as being the original software.
21 //
22 // 3. This notice may not be removed or altered from any source
23 // distribution.
24 //
25 //========================================================================
26 
27 #include <wayland-client.h>
28 #include <xkbcommon/xkbcommon.h>
29 #ifdef HAVE_XKBCOMMON_COMPOSE_H
30 #include <xkbcommon/xkbcommon-compose.h>
31 #endif
32 #include <dlfcn.h>
33 
35 
37 {
39  const void* pNext;
41  struct wl_display* display;
42  struct wl_surface* surface;
44 
47 
48 #include "posix_thread.h"
49 #include "posix_time.h"
50 #ifdef __linux__
51 #include "linux_joystick.h"
52 #else
53 #include "null_joystick.h"
54 #endif
55 #include "xkb_unicode.h"
56 #include "egl_context.h"
57 #include "osmesa_context.h"
58 
59 #include "wayland-xdg-shell-client-protocol.h"
60 #include "wayland-xdg-decoration-client-protocol.h"
61 #include "wayland-viewporter-client-protocol.h"
62 #include "wayland-relative-pointer-unstable-v1-client-protocol.h"
63 #include "wayland-pointer-constraints-unstable-v1-client-protocol.h"
64 #include "wayland-idle-inhibit-unstable-v1-client-protocol.h"
65 
66 #define _glfw_dlopen(name) dlopen(name, RTLD_LAZY | RTLD_LOCAL)
67 #define _glfw_dlclose(handle) dlclose(handle)
68 #define _glfw_dlsym(handle, name) dlsym(handle, name)
69 
70 #define _GLFW_EGL_NATIVE_WINDOW ((EGLNativeWindowType) window->wl.native)
71 #define _GLFW_EGL_NATIVE_DISPLAY ((EGLNativeDisplayType) _glfw.wl.display)
72 
73 #define _GLFW_PLATFORM_WINDOW_STATE _GLFWwindowWayland wl
74 #define _GLFW_PLATFORM_LIBRARY_WINDOW_STATE _GLFWlibraryWayland wl
75 #define _GLFW_PLATFORM_MONITOR_STATE _GLFWmonitorWayland wl
76 #define _GLFW_PLATFORM_CURSOR_STATE _GLFWcursorWayland wl
77 
78 #define _GLFW_PLATFORM_CONTEXT_STATE
79 #define _GLFW_PLATFORM_LIBRARY_CONTEXT_STATE
80 
87 };
88 struct wl_cursor {
89  unsigned int image_count;
91  char* name;
92 };
93 typedef struct wl_cursor_theme* (* PFN_wl_cursor_theme_load)(const char*, int, struct wl_shm*);
94 typedef void (* PFN_wl_cursor_theme_destroy)(struct wl_cursor_theme*);
95 typedef struct wl_cursor* (* PFN_wl_cursor_theme_get_cursor)(struct wl_cursor_theme*, const char*);
96 typedef struct wl_buffer* (* PFN_wl_cursor_image_get_buffer)(struct wl_cursor_image*);
97 #define wl_cursor_theme_load _glfw.wl.cursor.theme_load
98 #define wl_cursor_theme_destroy _glfw.wl.cursor.theme_destroy
99 #define wl_cursor_theme_get_cursor _glfw.wl.cursor.theme_get_cursor
100 #define wl_cursor_image_get_buffer _glfw.wl.cursor.image_get_buffer
101 
102 typedef struct wl_egl_window* (* PFN_wl_egl_window_create)(struct wl_surface*, int, int);
103 typedef void (* PFN_wl_egl_window_destroy)(struct wl_egl_window*);
104 typedef void (* PFN_wl_egl_window_resize)(struct wl_egl_window*, int, int, int, int);
105 #define wl_egl_window_create _glfw.wl.egl.window_create
106 #define wl_egl_window_destroy _glfw.wl.egl.window_destroy
107 #define wl_egl_window_resize _glfw.wl.egl.window_resize
108 
109 typedef struct xkb_context* (* PFN_xkb_context_new)(enum xkb_context_flags);
110 typedef void (* PFN_xkb_context_unref)(struct xkb_context*);
111 typedef struct xkb_keymap* (* PFN_xkb_keymap_new_from_string)(struct xkb_context*, const char*, enum xkb_keymap_format, enum xkb_keymap_compile_flags);
112 typedef void (* PFN_xkb_keymap_unref)(struct xkb_keymap*);
113 typedef xkb_mod_index_t (* PFN_xkb_keymap_mod_get_index)(struct xkb_keymap*, const char*);
114 typedef int (* PFN_xkb_keymap_key_repeats)(struct xkb_keymap*, xkb_keycode_t);
115 typedef struct xkb_state* (* PFN_xkb_state_new)(struct xkb_keymap*);
116 typedef void (* PFN_xkb_state_unref)(struct xkb_state*);
117 typedef int (* PFN_xkb_state_key_get_syms)(struct xkb_state*, xkb_keycode_t, const xkb_keysym_t**);
118 typedef enum xkb_state_component (* PFN_xkb_state_update_mask)(struct xkb_state*, xkb_mod_mask_t, xkb_mod_mask_t, xkb_mod_mask_t, xkb_layout_index_t, xkb_layout_index_t, xkb_layout_index_t);
119 typedef xkb_mod_mask_t (* PFN_xkb_state_serialize_mods)(struct xkb_state*, enum xkb_state_component);
120 #define xkb_context_new _glfw.wl.xkb.context_new
121 #define xkb_context_unref _glfw.wl.xkb.context_unref
122 #define xkb_keymap_new_from_string _glfw.wl.xkb.keymap_new_from_string
123 #define xkb_keymap_unref _glfw.wl.xkb.keymap_unref
124 #define xkb_keymap_mod_get_index _glfw.wl.xkb.keymap_mod_get_index
125 #define xkb_keymap_key_repeats _glfw.wl.xkb.keymap_key_repeats
126 #define xkb_state_new _glfw.wl.xkb.state_new
127 #define xkb_state_unref _glfw.wl.xkb.state_unref
128 #define xkb_state_key_get_syms _glfw.wl.xkb.state_key_get_syms
129 #define xkb_state_update_mask _glfw.wl.xkb.state_update_mask
130 #define xkb_state_serialize_mods _glfw.wl.xkb.state_serialize_mods
131 
132 #ifdef HAVE_XKBCOMMON_COMPOSE_H
133 typedef struct xkb_compose_table* (* PFN_xkb_compose_table_new_from_locale)(struct xkb_context*, const char*, enum xkb_compose_compile_flags);
134 typedef void (* PFN_xkb_compose_table_unref)(struct xkb_compose_table*);
135 typedef struct xkb_compose_state* (* PFN_xkb_compose_state_new)(struct xkb_compose_table*, enum xkb_compose_state_flags);
136 typedef void (* PFN_xkb_compose_state_unref)(struct xkb_compose_state*);
137 typedef enum xkb_compose_feed_result (* PFN_xkb_compose_state_feed)(struct xkb_compose_state*, xkb_keysym_t);
138 typedef enum xkb_compose_status (* PFN_xkb_compose_state_get_status)(struct xkb_compose_state*);
139 typedef xkb_keysym_t (* PFN_xkb_compose_state_get_one_sym)(struct xkb_compose_state*);
140 #define xkb_compose_table_new_from_locale _glfw.wl.xkb.compose_table_new_from_locale
141 #define xkb_compose_table_unref _glfw.wl.xkb.compose_table_unref
142 #define xkb_compose_state_new _glfw.wl.xkb.compose_state_new
143 #define xkb_compose_state_unref _glfw.wl.xkb.compose_state_unref
144 #define xkb_compose_state_feed _glfw.wl.xkb.compose_state_feed
145 #define xkb_compose_state_get_status _glfw.wl.xkb.compose_state_get_status
146 #define xkb_compose_state_get_one_sym _glfw.wl.xkb.compose_state_get_one_sym
147 #endif
148 
149 #define _GLFW_DECORATION_WIDTH 4
150 #define _GLFW_DECORATION_TOP 24
151 #define _GLFW_DECORATION_VERTICAL (_GLFW_DECORATION_TOP + _GLFW_DECORATION_WIDTH)
152 #define _GLFW_DECORATION_HORIZONTAL (2 * _GLFW_DECORATION_WIDTH)
153 
155 {
161 
163 
165 {
166  struct wl_surface* surface;
167  struct wl_subsurface* subsurface;
168  struct wp_viewport* viewport;
169 
171 
172 // Wayland-specific per-window data
173 //
174 typedef struct _GLFWwindowWayland
175 {
176  int width, height;
181  struct wl_surface* surface;
182  struct wl_egl_window* native;
183  struct wl_shell_surface* shellSurface;
184  struct wl_callback* callback;
185 
186  struct {
187  struct xdg_surface* surface;
188  struct xdg_toplevel* toplevel;
189  struct zxdg_toplevel_decoration_v1* decoration;
190  } xdg;
191 
193  double cursorPosX, cursorPosY;
194 
195  char* title;
196 
197  // We need to track the monitors the window spans on to calculate the
198  // optimal scaling factor.
199  int scale;
203 
204  struct {
205  struct zwp_relative_pointer_v1* relativePointer;
206  struct zwp_locked_pointer_v1* lockedPointer;
207  } pointerLock;
208 
209  struct zwp_idle_inhibitor_v1* idleInhibitor;
210 
211  // This is a hack to prevent auto-iconification on creation.
213 
214  struct {
216  struct wl_buffer* buffer;
218  int focus;
219  } decorations;
220 
222 
223 // Wayland-specific global data
224 //
225 typedef struct _GLFWlibraryWayland
226 {
227  struct wl_display* display;
228  struct wl_registry* registry;
229  struct wl_compositor* compositor;
230  struct wl_subcompositor* subcompositor;
231  struct wl_shell* shell;
232  struct wl_shm* shm;
233  struct wl_seat* seat;
234  struct wl_pointer* pointer;
235  struct wl_keyboard* keyboard;
236  struct wl_data_device_manager* dataDeviceManager;
237  struct wl_data_device* dataDevice;
238  struct wl_data_offer* dataOffer;
239  struct wl_data_source* dataSource;
240  struct xdg_wm_base* wmBase;
241  struct zxdg_decoration_manager_v1* decorationManager;
242  struct wp_viewporter* viewporter;
243  struct zwp_relative_pointer_manager_v1* relativePointerManager;
244  struct zwp_pointer_constraints_v1* pointerConstraints;
245  struct zwp_idle_inhibit_manager_v1* idleInhibitManager;
246 
249 
250  struct wl_cursor_theme* cursorTheme;
251  struct wl_cursor_theme* cursorThemeHiDPI;
252  struct wl_surface* cursorSurface;
255 
264  int timerfd;
265  short int keycodes[256];
266  short int scancodes[GLFW_KEY_LAST + 1];
267 
268  struct {
269  void* handle;
270  struct xkb_context* context;
271  struct xkb_keymap* keymap;
272  struct xkb_state* state;
273 
274 #ifdef HAVE_XKBCOMMON_COMPOSE_H
275  struct xkb_compose_state* composeState;
276 #endif
277 
278  xkb_mod_mask_t controlMask;
279  xkb_mod_mask_t altMask;
280  xkb_mod_mask_t shiftMask;
281  xkb_mod_mask_t superMask;
282  xkb_mod_mask_t capsLockMask;
283  xkb_mod_mask_t numLockMask;
284  unsigned int modifiers;
285 
297 
298 #ifdef HAVE_XKBCOMMON_COMPOSE_H
299  PFN_xkb_compose_table_new_from_locale compose_table_new_from_locale;
300  PFN_xkb_compose_table_unref compose_table_unref;
301  PFN_xkb_compose_state_new compose_state_new;
302  PFN_xkb_compose_state_unref compose_state_unref;
303  PFN_xkb_compose_state_feed compose_state_feed;
304  PFN_xkb_compose_state_get_status compose_state_get_status;
305  PFN_xkb_compose_state_get_one_sym compose_state_get_one_sym;
306 #endif
307  } xkb;
308 
311 
312  struct {
313  void* handle;
314 
319  } cursor;
320 
321  struct {
322  void* handle;
323 
327  } egl;
328 
330 
331 // Wayland-specific per-monitor data
332 //
333 typedef struct _GLFWmonitorWayland
334 {
335  struct wl_output* output;
336  int name;
338 
339  int x;
340  int y;
341  int scale;
342 
344 
345 // Wayland-specific per-cursor data
346 //
347 typedef struct _GLFWcursorWayland
348 {
349  struct wl_cursor* cursor;
351  struct wl_buffer* buffer;
352  int width, height;
353  int xhot, yhot;
356 
357 
359 
struct wl_data_source * dataSource
Definition: wl_platform.h:239
uint32_t height
Definition: wl_platform.h:83
struct wl_cursor *(* PFN_wl_cursor_theme_get_cursor)(struct wl_cursor_theme *, const char *)
Definition: wl_platform.h:95
_GLFWdecorationSideWayland
Definition: wl_platform.h:154
VkStructureType
Definition: vulkan_core.h:159
VkWaylandSurfaceCreateFlagsKHR flags
Definition: wl_platform.h:40
struct xkb_context *(* PFN_xkb_context_new)(enum xkb_context_flags)
Definition: wl_platform.h:109
struct wl_buffer * buffer
Definition: wl_platform.h:351
uint32_t VkBool32
Definition: vulkan_core.h:67
struct zxdg_toplevel_decoration_v1 * decoration
Definition: wl_platform.h:189
typedef void(APIENTRY *GLDEBUGPROC)(GLenum source
GLuint const GLchar * name
VkResult
Definition: vulkan_core.h:122
struct zwp_idle_inhibitor_v1 * idleInhibitor
Definition: wl_platform.h:209
struct _GLFWmonitorWayland _GLFWmonitorWayland
void(* PFN_xkb_state_unref)(struct xkb_state *)
Definition: wl_platform.h:116
int32_t keyboardRepeatRate
Definition: wl_platform.h:256
VkResult(APIENTRY * PFN_vkCreateWaylandSurfaceKHR)(VkInstance, const VkWaylandSurfaceCreateInfoKHR *, const VkAllocationCallbacks *, VkSurfaceKHR *)
Definition: wl_platform.h:45
#define APIENTRY
xkb_mod_mask_t controlMask
Definition: wl_platform.h:278
struct wl_display * display
Definition: wl_platform.h:41
_GLFWcursor * currentCursor
Definition: wl_platform.h:192
struct zwp_locked_pointer_v1 * lockedPointer
Definition: wl_platform.h:206
struct zwp_relative_pointer_v1 * relativePointer
Definition: wl_platform.h:205
struct wl_keyboard * keyboard
Definition: wl_platform.h:235
GLuint64 GLenum void * handle
Definition: glext.h:7785
PFN_wl_cursor_theme_load theme_load
Definition: wl_platform.h:315
struct wl_surface * surface
Definition: wl_platform.h:166
_GLFWwindow * pointerFocus
Definition: wl_platform.h:309
unsigned int modifiers
Definition: wl_platform.h:284
struct wl_shm * shm
Definition: wl_platform.h:232
struct wl_cursor_image ** images
Definition: wl_platform.h:90
struct wl_egl_window *(* PFN_wl_egl_window_create)(struct wl_surface *, int, int)
Definition: wl_platform.h:102
struct wl_compositor * compositor
Definition: wl_platform.h:229
PFN_xkb_state_key_get_syms state_key_get_syms
Definition: wl_platform.h:294
PFN_xkb_keymap_unref keymap_unref
Definition: wl_platform.h:289
PFN_xkb_context_unref context_unref
Definition: wl_platform.h:287
xkb_mod_mask_t shiftMask
Definition: wl_platform.h:280
char * clipboardSendString
Definition: wl_platform.h:262
struct _GLFWdecorationWayland _GLFWdecorationWayland
int GLFWbool
Definition: internal.h:61
struct zxdg_decoration_manager_v1 * decorationManager
Definition: wl_platform.h:241
struct zwp_idle_inhibit_manager_v1 * idleInhibitManager
Definition: wl_platform.h:245
struct wl_subsurface * subsurface
Definition: wl_platform.h:167
void(* PFN_wl_egl_window_resize)(struct wl_egl_window *, int, int, int, int)
Definition: wl_platform.h:104
xkb_mod_mask_t altMask
Definition: wl_platform.h:279
struct wl_cursor_theme * cursorTheme
Definition: wl_platform.h:250
struct wl_surface * surface
Definition: wl_platform.h:181
struct wp_viewporter * viewporter
Definition: wl_platform.h:242
struct _GLFWcursorWayland _GLFWcursorWayland
PFN_wl_egl_window_create window_create
Definition: wl_platform.h:324
uint32_t hotspot_x
Definition: wl_platform.h:84
PFN_wl_cursor_theme_get_cursor theme_get_cursor
Definition: wl_platform.h:317
struct wl_output * output
Definition: wl_platform.h:335
struct wl_cursor_theme *(* PFN_wl_cursor_theme_load)(const char *, int, struct wl_shm *)
Definition: wl_platform.h:93
struct _GLFWwindowWayland _GLFWwindowWayland
struct wl_shell_surface * shellSurface
Definition: wl_platform.h:183
GLFWbool transparent
Definition: wl_platform.h:180
struct wl_data_device * dataDevice
Definition: wl_platform.h:237
uint32_t hotspot_y
Definition: wl_platform.h:85
struct xkb_context * context
Definition: wl_platform.h:270
int32_t keyboardRepeatDelay
Definition: wl_platform.h:257
void * VkInstance
Definition: internal.h:118
unsigned int uint32_t
Definition: stdint.h:80
struct VkWaylandSurfaceCreateInfoKHR VkWaylandSurfaceCreateInfoKHR
xkb_mod_mask_t(* PFN_xkb_state_serialize_mods)(struct xkb_state *, enum xkb_state_component)
Definition: wl_platform.h:119
struct wl_data_device_manager * dataDeviceManager
Definition: wl_platform.h:236
void * VkPhysicalDevice
Definition: internal.h:119
struct xdg_toplevel * toplevel
Definition: wl_platform.h:188
GLint GLsizei GLsizei height
struct _GLFWlibraryWayland _GLFWlibraryWayland
void(* PFN_wl_cursor_theme_destroy)(struct wl_cursor_theme *)
Definition: wl_platform.h:94
char * name
Definition: wl_platform.h:91
xkb_mod_mask_t numLockMask
Definition: wl_platform.h:283
struct wl_buffer *(* PFN_wl_cursor_image_get_buffer)(struct wl_cursor_image *)
Definition: wl_platform.h:96
struct wl_pointer * pointer
Definition: wl_platform.h:234
GLFWbool justCreated
Definition: wl_platform.h:212
GLint left
Definition: glext.h:1963
uint64_t VkSurfaceKHR
Definition: internal.h:120
struct wp_viewport * viewport
Definition: wl_platform.h:168
struct wl_registry * registry
Definition: wl_platform.h:228
void(* PFN_xkb_context_unref)(struct xkb_context *)
Definition: wl_platform.h:110
PFN_xkb_state_serialize_mods state_serialize_mods
Definition: wl_platform.h:296
struct wl_cursor * cursor
Definition: wl_platform.h:349
void(* PFN_xkb_keymap_unref)(struct xkb_keymap *)
Definition: wl_platform.h:112
VkBool32(APIENTRY * PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR)(VkPhysicalDevice, uint32_t, struct wl_display *)
Definition: wl_platform.h:46
VkFlags VkWaylandSurfaceCreateFlagsKHR
Definition: wl_platform.h:34
struct xkb_state *(* PFN_xkb_state_new)(struct xkb_keymap *)
Definition: wl_platform.h:115
uint32_t delay
Definition: wl_platform.h:86
struct xkb_keymap * keymap
Definition: wl_platform.h:271
struct wl_subcompositor * subcompositor
Definition: wl_platform.h:230
uint32_t VkFlags
Definition: vulkan_core.h:66
#define GLFW_KEY_LAST
Definition: glfw3.h:483
struct wl_egl_window * native
Definition: wl_platform.h:182
unsigned int image_count
Definition: wl_platform.h:89
PFN_wl_egl_window_resize window_resize
Definition: wl_platform.h:326
_GLFWdecorationWayland top
Definition: wl_platform.h:217
GLdouble right
PFN_xkb_state_update_mask state_update_mask
Definition: wl_platform.h:295
PFN_wl_cursor_theme_destroy theme_destroy
Definition: wl_platform.h:316
PFN_xkb_context_new context_new
Definition: wl_platform.h:286
int(* PFN_xkb_state_key_get_syms)(struct xkb_state *, xkb_keycode_t, const xkb_keysym_t **)
Definition: wl_platform.h:117
struct xkb_keymap *(* PFN_xkb_keymap_new_from_string)(struct xkb_context *, const char *, enum xkb_keymap_format, enum xkb_keymap_compile_flags)
Definition: wl_platform.h:111
enum xkb_state_component(* PFN_xkb_state_update_mask)(struct xkb_state *, xkb_mod_mask_t, xkb_mod_mask_t, xkb_mod_mask_t, xkb_layout_index_t, xkb_layout_index_t, xkb_layout_index_t)
Definition: wl_platform.h:118
PFN_xkb_keymap_key_repeats keymap_key_repeats
Definition: wl_platform.h:291
uint32_t width
Definition: wl_platform.h:82
void _glfwAddOutputWayland(uint32_t name, uint32_t version)
Definition: wl_monitor.c:112
struct wl_cursor_theme * cursorThemeHiDPI
Definition: wl_platform.h:251
struct wl_surface * cursorSurface
Definition: wl_platform.h:252
struct wl_seat * seat
Definition: wl_platform.h:233
PFN_wl_cursor_image_get_buffer image_get_buffer
Definition: wl_platform.h:318
struct xdg_wm_base * wmBase
Definition: wl_platform.h:240
struct wl_cursor * cursorHiDPI
Definition: wl_platform.h:350
PFN_wl_egl_window_destroy window_destroy
Definition: wl_platform.h:325
struct xdg_surface * surface
Definition: wl_platform.h:187
signed int int32_t
Definition: stdint.h:77
struct xkb_state * state
Definition: wl_platform.h:272
PFN_xkb_keymap_new_from_string keymap_new_from_string
Definition: wl_platform.h:288
xkb_mod_mask_t capsLockMask
Definition: wl_platform.h:282
void(* PFN_wl_egl_window_destroy)(struct wl_egl_window *)
Definition: wl_platform.h:103
PFN_xkb_keymap_mod_get_index keymap_mod_get_index
Definition: wl_platform.h:290
struct wl_display * display
Definition: wl_platform.h:227
struct wl_buffer * buffer
Definition: wl_platform.h:216
struct wl_callback * callback
Definition: wl_platform.h:184
_GLFWmonitor ** monitors
Definition: wl_platform.h:200
struct wl_shell * shell
Definition: wl_platform.h:231
PFN_xkb_state_new state_new
Definition: wl_platform.h:292
struct zwp_pointer_constraints_v1 * pointerConstraints
Definition: wl_platform.h:244
xkb_mod_index_t(* PFN_xkb_keymap_mod_get_index)(struct xkb_keymap *, const char *)
Definition: wl_platform.h:113
struct wl_surface * surface
Definition: wl_platform.h:42
PFN_xkb_state_unref state_unref
Definition: wl_platform.h:293
_GLFWwindow * keyboardFocus
Definition: wl_platform.h:310
int(* PFN_xkb_keymap_key_repeats)(struct xkb_keymap *, xkb_keycode_t)
Definition: wl_platform.h:114
struct wl_data_offer * dataOffer
Definition: wl_platform.h:238
struct zwp_relative_pointer_manager_v1 * relativePointerManager
Definition: wl_platform.h:243
xkb_mod_mask_t superMask
Definition: wl_platform.h:281
GLdouble GLdouble bottom


librealsense2
Author(s): Sergey Dorodnicov , Doron Hirshberg , Mark Horn , Reagan Lopez , Itay Carpis
autogenerated on Mon May 3 2021 02:50:23