| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- //========================================================================
- // GLFW 3.3 Mir - www.glfw.org
- //------------------------------------------------------------------------
- // Copyright (c) 2014-2017 Brandon Schaefer <[email protected]>
- //
- // This software is provided 'as-is', without any express or implied
- // warranty. In no event will the authors be held liable for any damages
- // arising from the use of this software.
- //
- // Permission is granted to anyone to use this software for any purpose,
- // including commercial applications, and to alter it and redistribute it
- // freely, subject to the following restrictions:
- //
- // 1. The origin of this software must not be misrepresented; you must not
- // claim that you wrote the original software. If you use this software
- // in a product, an acknowledgment in the product documentation would
- // be appreciated but is not required.
- //
- // 2. Altered source versions must be plainly marked as such, and must not
- // be misrepresented as being the original software.
- //
- // 3. This notice may not be removed or altered from any source
- // distribution.
- //
- //========================================================================
- #include <sys/queue.h>
- #include <pthread.h>
- #include <dlfcn.h>
- #include <mir_toolkit/mir_client_library.h>
- typedef VkFlags VkMirWindowCreateFlagsKHR;
- typedef struct VkMirWindowCreateInfoKHR
- {
- VkStructureType sType;
- const void* pNext;
- VkMirWindowCreateFlagsKHR flags;
- MirConnection* connection;
- MirWindow* mirWindow;
- } VkMirWindowCreateInfoKHR;
- typedef VkResult (APIENTRY *PFN_vkCreateMirWindowKHR)(VkInstance,const VkMirWindowCreateInfoKHR*,const VkAllocationCallbacks*,VkSurfaceKHR*);
- typedef VkBool32 (APIENTRY *PFN_vkGetPhysicalDeviceMirPresentationSupportKHR)(VkPhysicalDevice,uint32_t,MirConnection*);
- #include "posix_thread.h"
- #include "posix_time.h"
- #include "linux_joystick.h"
- #include "xkb_unicode.h"
- #include "egl_context.h"
- #include "osmesa_context.h"
- #define _glfw_dlopen(name) dlopen(name, RTLD_LAZY | RTLD_LOCAL)
- #define _glfw_dlclose(handle) dlclose(handle)
- #define _glfw_dlsym(handle, name) dlsym(handle, name)
- #define _GLFW_EGL_NATIVE_WINDOW ((EGLNativeWindowType) window->mir.nativeWindow)
- #define _GLFW_EGL_NATIVE_DISPLAY ((EGLNativeDisplayType) _glfw.mir.display)
- #define _GLFW_PLATFORM_WINDOW_STATE _GLFWwindowMir mir
- #define _GLFW_PLATFORM_MONITOR_STATE _GLFWmonitorMir mir
- #define _GLFW_PLATFORM_LIBRARY_WINDOW_STATE _GLFWlibraryMir mir
- #define _GLFW_PLATFORM_CURSOR_STATE _GLFWcursorMir mir
- #define _GLFW_PLATFORM_CONTEXT_STATE
- #define _GLFW_PLATFORM_LIBRARY_CONTEXT_STATE
- // Mir-specific Event Queue
- //
- typedef struct EventQueue
- {
- TAILQ_HEAD(, EventNode) head;
- } EventQueue;
- // Mir-specific per-window data
- //
- typedef struct _GLFWwindowMir
- {
- MirWindow* window;
- int width;
- int height;
- MirEGLNativeWindowType nativeWindow;
- _GLFWcursor* currentCursor;
- } _GLFWwindowMir;
- // Mir-specific per-monitor data
- //
- typedef struct _GLFWmonitorMir
- {
- int curMode;
- int outputId;
- int x;
- int y;
- } _GLFWmonitorMir;
- // Mir-specific global data
- //
- typedef struct _GLFWlibraryMir
- {
- MirConnection* connection;
- MirEGLNativeDisplayType display;
- EventQueue* eventQueue;
- short int keycodes[256];
- short int scancodes[GLFW_KEY_LAST + 1];
- pthread_mutex_t eventMutex;
- pthread_cond_t eventCond;
- // The window whose disabled cursor mode is active
- _GLFWwindow* disabledCursorWindow;
- } _GLFWlibraryMir;
- // Mir-specific per-cursor data
- // TODO: Only system cursors are implemented in Mir atm. Need to wait for support.
- //
- typedef struct _GLFWcursorMir
- {
- MirCursorConfiguration* conf;
- MirBufferStream* customCursor;
- char const* cursorName; // only needed for system cursors
- } _GLFWcursorMir;
- extern void _glfwPollMonitorsMir(void);
- extern void _glfwInitEventQueueMir(EventQueue* queue);
- extern void _glfwDeleteEventQueueMir(EventQueue* queue);
|