mirror of
https://github.com/glfw/glfw.git
synced 2024-11-10 00:51:47 +00:00
Load libwayland-cursor at runtime
This commit is contained in:
parent
5fbf4ddde8
commit
407a3e2860
@ -34,7 +34,6 @@
|
|||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <wayland-client.h>
|
#include <wayland-client.h>
|
||||||
#include <wayland-cursor.h>
|
|
||||||
|
|
||||||
|
|
||||||
static inline int min(int n1, int n2)
|
static inline int min(int n1, int n2)
|
||||||
@ -683,6 +682,23 @@ static void createKeyTables(void)
|
|||||||
|
|
||||||
int _glfwPlatformInit(void)
|
int _glfwPlatformInit(void)
|
||||||
{
|
{
|
||||||
|
_glfw.wl.cursor.handle = _glfw_dlopen("libwayland-cursor.so.0");
|
||||||
|
if (!_glfw.wl.cursor.handle)
|
||||||
|
{
|
||||||
|
_glfwInputError(GLFW_PLATFORM_ERROR,
|
||||||
|
"Wayland: Failed to open libwayland-cursor.");
|
||||||
|
return GLFW_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
_glfw.wl.cursor.theme_load = (PFN_wl_cursor_theme_load)
|
||||||
|
_glfw_dlsym(_glfw.wl.cursor.handle, "wl_cursor_theme_load");
|
||||||
|
_glfw.wl.cursor.theme_destroy = (PFN_wl_cursor_theme_destroy)
|
||||||
|
_glfw_dlsym(_glfw.wl.cursor.handle, "wl_cursor_theme_destroy");
|
||||||
|
_glfw.wl.cursor.theme_get_cursor = (PFN_wl_cursor_theme_get_cursor)
|
||||||
|
_glfw_dlsym(_glfw.wl.cursor.handle, "wl_cursor_theme_get_cursor");
|
||||||
|
_glfw.wl.cursor.image_get_buffer = (PFN_wl_cursor_image_get_buffer)
|
||||||
|
_glfw_dlsym(_glfw.wl.cursor.handle, "wl_cursor_image_get_buffer");
|
||||||
|
|
||||||
_glfw.wl.egl.handle = _glfw_dlopen("libwayland-egl.so.1");
|
_glfw.wl.egl.handle = _glfw_dlopen("libwayland-egl.so.1");
|
||||||
if (!_glfw.wl.egl.handle)
|
if (!_glfw.wl.egl.handle)
|
||||||
{
|
{
|
||||||
@ -819,6 +835,11 @@ void _glfwPlatformTerminate(void)
|
|||||||
_glfw_dlclose(_glfw.wl.egl.handle);
|
_glfw_dlclose(_glfw.wl.egl.handle);
|
||||||
_glfw.wl.egl.handle = NULL;
|
_glfw.wl.egl.handle = NULL;
|
||||||
}
|
}
|
||||||
|
if (_glfw.wl.cursor.handle)
|
||||||
|
{
|
||||||
|
_glfw_dlclose(_glfw.wl.cursor.handle);
|
||||||
|
_glfw.wl.cursor.handle = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (_glfw.wl.cursorTheme)
|
if (_glfw.wl.cursorTheme)
|
||||||
wl_cursor_theme_destroy(_glfw.wl.cursorTheme);
|
wl_cursor_theme_destroy(_glfw.wl.cursorTheme);
|
||||||
|
@ -71,6 +71,27 @@ typedef VkBool32 (APIENTRY *PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR
|
|||||||
#define _GLFW_PLATFORM_CONTEXT_STATE
|
#define _GLFW_PLATFORM_CONTEXT_STATE
|
||||||
#define _GLFW_PLATFORM_LIBRARY_CONTEXT_STATE
|
#define _GLFW_PLATFORM_LIBRARY_CONTEXT_STATE
|
||||||
|
|
||||||
|
struct wl_cursor_image {
|
||||||
|
uint32_t width;
|
||||||
|
uint32_t height;
|
||||||
|
uint32_t hotspot_x;
|
||||||
|
uint32_t hotspot_y;
|
||||||
|
uint32_t delay;
|
||||||
|
};
|
||||||
|
struct wl_cursor {
|
||||||
|
unsigned int image_count;
|
||||||
|
struct wl_cursor_image** images;
|
||||||
|
char* name;
|
||||||
|
};
|
||||||
|
typedef struct wl_cursor_theme* (* PFN_wl_cursor_theme_load)(const char*, int, struct wl_shm*);
|
||||||
|
typedef void (* PFN_wl_cursor_theme_destroy)(struct wl_cursor_theme*);
|
||||||
|
typedef struct wl_cursor* (* PFN_wl_cursor_theme_get_cursor)(struct wl_cursor_theme*, const char*);
|
||||||
|
typedef struct wl_buffer* (* PFN_wl_cursor_image_get_buffer)(struct wl_cursor_image*);
|
||||||
|
#define wl_cursor_theme_load _glfw.wl.cursor.theme_load
|
||||||
|
#define wl_cursor_theme_destroy _glfw.wl.cursor.theme_destroy
|
||||||
|
#define wl_cursor_theme_get_cursor _glfw.wl.cursor.theme_get_cursor
|
||||||
|
#define wl_cursor_image_get_buffer _glfw.wl.cursor.image_get_buffer
|
||||||
|
|
||||||
typedef struct wl_egl_window* (* PFN_wl_egl_window_create)(struct wl_surface*, int, int);
|
typedef struct wl_egl_window* (* PFN_wl_egl_window_create)(struct wl_surface*, int, int);
|
||||||
typedef void (* PFN_wl_egl_window_destroy)(struct wl_egl_window*);
|
typedef void (* PFN_wl_egl_window_destroy)(struct wl_egl_window*);
|
||||||
typedef void (* PFN_wl_egl_window_resize)(struct wl_egl_window*, int, int, int, int);
|
typedef void (* PFN_wl_egl_window_resize)(struct wl_egl_window*, int, int, int, int);
|
||||||
@ -220,6 +241,15 @@ typedef struct _GLFWlibraryWayland
|
|||||||
_GLFWwindow* pointerFocus;
|
_GLFWwindow* pointerFocus;
|
||||||
_GLFWwindow* keyboardFocus;
|
_GLFWwindow* keyboardFocus;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
void* handle;
|
||||||
|
|
||||||
|
PFN_wl_cursor_theme_load theme_load;
|
||||||
|
PFN_wl_cursor_theme_destroy theme_destroy;
|
||||||
|
PFN_wl_cursor_theme_get_cursor theme_get_cursor;
|
||||||
|
PFN_wl_cursor_image_get_buffer image_get_buffer;
|
||||||
|
} cursor;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
void* handle;
|
void* handle;
|
||||||
|
|
||||||
|
@ -37,8 +37,6 @@
|
|||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
#include <poll.h>
|
#include <poll.h>
|
||||||
|
|
||||||
#include <wayland-cursor.h>
|
|
||||||
|
|
||||||
|
|
||||||
static void handlePing(void* data,
|
static void handlePing(void* data,
|
||||||
struct wl_shell_surface* shellSurface,
|
struct wl_shell_surface* shellSurface,
|
||||||
|
Loading…
Reference in New Issue
Block a user