| //======================================================================== |
| // GLFW 3.3 macOS - www.glfw.org |
| //------------------------------------------------------------------------ |
| // Copyright (c) 2009-2016 Camilla Löwy <elmindreda@glfw.org> |
| // |
| // 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 <stdint.h> |
| #include <dlfcn.h> |
| |
| #include <Carbon/Carbon.h> |
| #if defined(__OBJC__) |
| #import <Cocoa/Cocoa.h> |
| #else |
| typedef void* id; |
| #endif |
| |
| typedef VkFlags VkMacOSSurfaceCreateFlagsMVK; |
| |
| typedef struct VkMacOSSurfaceCreateInfoMVK |
| { |
| VkStructureType sType; |
| const void* pNext; |
| VkMacOSSurfaceCreateFlagsMVK flags; |
| const void* pView; |
| } VkMacOSSurfaceCreateInfoMVK; |
| |
| typedef VkResult (APIENTRY *PFN_vkCreateMacOSSurfaceMVK)(VkInstance,const VkMacOSSurfaceCreateInfoMVK*,const VkAllocationCallbacks*,VkSurfaceKHR*); |
| |
| #include "posix_thread.h" |
| #include "cocoa_joystick.h" |
| #include "nsgl_context.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->ns.view) |
| #define _GLFW_EGL_NATIVE_DISPLAY EGL_DEFAULT_DISPLAY |
| |
| #define _GLFW_PLATFORM_WINDOW_STATE _GLFWwindowNS ns |
| #define _GLFW_PLATFORM_LIBRARY_WINDOW_STATE _GLFWlibraryNS ns |
| #define _GLFW_PLATFORM_LIBRARY_TIMER_STATE _GLFWtimerNS ns |
| #define _GLFW_PLATFORM_MONITOR_STATE _GLFWmonitorNS ns |
| #define _GLFW_PLATFORM_CURSOR_STATE _GLFWcursorNS ns |
| |
| // HIToolbox.framework pointer typedefs |
| #define kTISPropertyUnicodeKeyLayoutData _glfw.ns.tis.kPropertyUnicodeKeyLayoutData |
| typedef TISInputSourceRef (*PFN_TISCopyCurrentKeyboardLayoutInputSource)(void); |
| #define TISCopyCurrentKeyboardLayoutInputSource _glfw.ns.tis.CopyCurrentKeyboardLayoutInputSource |
| typedef void* (*PFN_TISGetInputSourceProperty)(TISInputSourceRef,CFStringRef); |
| #define TISGetInputSourceProperty _glfw.ns.tis.GetInputSourceProperty |
| typedef UInt8 (*PFN_LMGetKbdType)(void); |
| #define LMGetKbdType _glfw.ns.tis.GetKbdType |
| |
| |
| // Cocoa-specific per-window data |
| // |
| typedef struct _GLFWwindowNS |
| { |
| id object; |
| id delegate; |
| id view; |
| id layer; |
| |
| GLFWbool maximized; |
| |
| // Cached window properties to filter out duplicate events |
| int width, height; |
| int fbWidth, fbHeight; |
| float xscale, yscale; |
| |
| // The total sum of the distances the cursor has been warped |
| // since the last cursor motion event was processed |
| // This is kept to counteract Cocoa doing the same internally |
| double cursorWarpDeltaX, cursorWarpDeltaY; |
| |
| } _GLFWwindowNS; |
| |
| // Cocoa-specific global data |
| // |
| typedef struct _GLFWlibraryNS |
| { |
| CGEventSourceRef eventSource; |
| id delegate; |
| id autoreleasePool; |
| GLFWbool finishedLaunching; |
| GLFWbool cursorHidden; |
| TISInputSourceRef inputSource; |
| IOHIDManagerRef hidManager; |
| id unicodeData; |
| id helper; |
| id keyUpMonitor; |
| id nibObjects; |
| |
| char keyName[64]; |
| short int keycodes[256]; |
| short int scancodes[GLFW_KEY_LAST + 1]; |
| char* clipboardString; |
| CGPoint cascadePoint; |
| // Where to place the cursor when re-enabled |
| double restoreCursorPosX, restoreCursorPosY; |
| // The window whose disabled cursor mode is active |
| _GLFWwindow* disabledCursorWindow; |
| |
| struct { |
| CFBundleRef bundle; |
| PFN_TISCopyCurrentKeyboardLayoutInputSource CopyCurrentKeyboardLayoutInputSource; |
| PFN_TISGetInputSourceProperty GetInputSourceProperty; |
| PFN_LMGetKbdType GetKbdType; |
| CFStringRef kPropertyUnicodeKeyLayoutData; |
| } tis; |
| |
| } _GLFWlibraryNS; |
| |
| // Cocoa-specific per-monitor data |
| // |
| typedef struct _GLFWmonitorNS |
| { |
| CGDirectDisplayID displayID; |
| CGDisplayModeRef previousMode; |
| uint32_t unitNumber; |
| id screen; |
| |
| } _GLFWmonitorNS; |
| |
| // Cocoa-specific per-cursor data |
| // |
| typedef struct _GLFWcursorNS |
| { |
| id object; |
| |
| } _GLFWcursorNS; |
| |
| // Cocoa-specific global timer data |
| // |
| typedef struct _GLFWtimerNS |
| { |
| uint64_t frequency; |
| |
| } _GLFWtimerNS; |
| |
| |
| void _glfwInitTimerNS(void); |
| |
| void _glfwPollMonitorsNS(void); |
| void _glfwSetVideoModeNS(_GLFWmonitor* monitor, const GLFWvidmode* desired); |
| void _glfwRestoreVideoModeNS(_GLFWmonitor* monitor); |
| |