//======================================================================== // GLFW 3.3 Mir - www.glfw.org //------------------------------------------------------------------------ // Copyright (c) 2014-2017 Brandon Schaefer // // 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 #include #include #include 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_tls.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);