master
ブランチ master
ShaderPlayground / deps / glfw / src / cocoa_platform.h
7.3 KB、211行 生 Blame 履歴
1//========================================================================
2// GLFW 3.3 macOS - www.glfw.org
3//------------------------------------------------------------------------
4// Copyright (c) 2009-2019 Camilla Löwy <elmindreda@glfw.org>
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 <stdint.h>
28#include <dlfcn.h>
29
30#include <Carbon/Carbon.h>
31
32// NOTE: All of NSGL was deprecated in the 10.14 SDK
33// This disables the pointless warnings for every symbol we use
34#define GL_SILENCE_DEPRECATION
35
36#if defined(__OBJC__)
37#import <Cocoa/Cocoa.h>
38#else
39typedef void* id;
40#endif
41
42// NOTE: Many Cocoa enum values have been renamed and we need to build across
43// SDK versions where one is unavailable or the other deprecated
44// We use the newer names in code and these macros to handle compatibility
45#if MAC_OS_X_VERSION_MAX_ALLOWED < 101200
46 #define NSBitmapFormatAlphaNonpremultiplied NSAlphaNonpremultipliedBitmapFormat
47 #define NSEventMaskAny NSAnyEventMask
48 #define NSEventMaskKeyUp NSKeyUpMask
49 #define NSEventModifierFlagCapsLock NSAlphaShiftKeyMask
50 #define NSEventModifierFlagCommand NSCommandKeyMask
51 #define NSEventModifierFlagControl NSControlKeyMask
52 #define NSEventModifierFlagDeviceIndependentFlagsMask NSDeviceIndependentModifierFlagsMask
53 #define NSEventModifierFlagOption NSAlternateKeyMask
54 #define NSEventModifierFlagShift NSShiftKeyMask
55 #define NSEventTypeApplicationDefined NSApplicationDefined
56 #define NSWindowStyleMaskBorderless NSBorderlessWindowMask
57 #define NSWindowStyleMaskClosable NSClosableWindowMask
58 #define NSWindowStyleMaskMiniaturizable NSMiniaturizableWindowMask
59 #define NSWindowStyleMaskResizable NSResizableWindowMask
60 #define NSWindowStyleMaskTitled NSTitledWindowMask
61#endif
62
63typedef VkFlags VkMacOSSurfaceCreateFlagsMVK;
64typedef VkFlags VkMetalSurfaceCreateFlagsEXT;
65
66typedef struct VkMacOSSurfaceCreateInfoMVK
67{
68 VkStructureType sType;
69 const void* pNext;
70 VkMacOSSurfaceCreateFlagsMVK flags;
71 const void* pView;
72} VkMacOSSurfaceCreateInfoMVK;
73
74typedef struct VkMetalSurfaceCreateInfoEXT
75{
76 VkStructureType sType;
77 const void* pNext;
78 VkMetalSurfaceCreateFlagsEXT flags;
79 const void* pLayer;
80} VkMetalSurfaceCreateInfoEXT;
81
82typedef VkResult (APIENTRY *PFN_vkCreateMacOSSurfaceMVK)(VkInstance,const VkMacOSSurfaceCreateInfoMVK*,const VkAllocationCallbacks*,VkSurfaceKHR*);
83typedef VkResult (APIENTRY *PFN_vkCreateMetalSurfaceEXT)(VkInstance,const VkMetalSurfaceCreateInfoEXT*,const VkAllocationCallbacks*,VkSurfaceKHR*);
84
85#include "posix_thread.h"
86#include "cocoa_joystick.h"
87#include "nsgl_context.h"
88#include "egl_context.h"
89#include "osmesa_context.h"
90
91#define _glfw_dlopen(name) dlopen(name, RTLD_LAZY | RTLD_LOCAL)
92#define _glfw_dlclose(handle) dlclose(handle)
93#define _glfw_dlsym(handle, name) dlsym(handle, name)
94
95#define _GLFW_EGL_NATIVE_WINDOW ((EGLNativeWindowType) window->ns.view)
96#define _GLFW_EGL_NATIVE_DISPLAY EGL_DEFAULT_DISPLAY
97
98#define _GLFW_PLATFORM_WINDOW_STATE _GLFWwindowNS ns
99#define _GLFW_PLATFORM_LIBRARY_WINDOW_STATE _GLFWlibraryNS ns
100#define _GLFW_PLATFORM_LIBRARY_TIMER_STATE _GLFWtimerNS ns
101#define _GLFW_PLATFORM_MONITOR_STATE _GLFWmonitorNS ns
102#define _GLFW_PLATFORM_CURSOR_STATE _GLFWcursorNS ns
103
104// HIToolbox.framework pointer typedefs
105#define kTISPropertyUnicodeKeyLayoutData _glfw.ns.tis.kPropertyUnicodeKeyLayoutData
106typedef TISInputSourceRef (*PFN_TISCopyCurrentKeyboardLayoutInputSource)(void);
107#define TISCopyCurrentKeyboardLayoutInputSource _glfw.ns.tis.CopyCurrentKeyboardLayoutInputSource
108typedef void* (*PFN_TISGetInputSourceProperty)(TISInputSourceRef,CFStringRef);
109#define TISGetInputSourceProperty _glfw.ns.tis.GetInputSourceProperty
110typedef UInt8 (*PFN_LMGetKbdType)(void);
111#define LMGetKbdType _glfw.ns.tis.GetKbdType
112
113
114// Cocoa-specific per-window data
115//
116typedef struct _GLFWwindowNS
117{
118 id object;
119 id delegate;
120 id view;
121 id layer;
122
123 GLFWbool maximized;
124 GLFWbool retina;
125
126 // Cached window properties to filter out duplicate events
127 int width, height;
128 int fbWidth, fbHeight;
129 float xscale, yscale;
130
131 // The total sum of the distances the cursor has been warped
132 // since the last cursor motion event was processed
133 // This is kept to counteract Cocoa doing the same internally
134 double cursorWarpDeltaX, cursorWarpDeltaY;
135
136} _GLFWwindowNS;
137
138// Cocoa-specific global data
139//
140typedef struct _GLFWlibraryNS
141{
142 CGEventSourceRef eventSource;
143 id delegate;
144 GLFWbool finishedLaunching;
145 GLFWbool cursorHidden;
146 TISInputSourceRef inputSource;
147 IOHIDManagerRef hidManager;
148 id unicodeData;
149 id helper;
150 id keyUpMonitor;
151 id nibObjects;
152
153 char keynames[GLFW_KEY_LAST + 1][17];
154 short int keycodes[256];
155 short int scancodes[GLFW_KEY_LAST + 1];
156 char* clipboardString;
157 CGPoint cascadePoint;
158 // Where to place the cursor when re-enabled
159 double restoreCursorPosX, restoreCursorPosY;
160 // The window whose disabled cursor mode is active
161 _GLFWwindow* disabledCursorWindow;
162
163 struct {
164 CFBundleRef bundle;
165 PFN_TISCopyCurrentKeyboardLayoutInputSource CopyCurrentKeyboardLayoutInputSource;
166 PFN_TISGetInputSourceProperty GetInputSourceProperty;
167 PFN_LMGetKbdType GetKbdType;
168 CFStringRef kPropertyUnicodeKeyLayoutData;
169 } tis;
170
171} _GLFWlibraryNS;
172
173// Cocoa-specific per-monitor data
174//
175typedef struct _GLFWmonitorNS
176{
177 CGDirectDisplayID displayID;
178 CGDisplayModeRef previousMode;
179 uint32_t unitNumber;
180 id screen;
181 double fallbackRefreshRate;
182
183} _GLFWmonitorNS;
184
185// Cocoa-specific per-cursor data
186//
187typedef struct _GLFWcursorNS
188{
189 id object;
190
191} _GLFWcursorNS;
192
193// Cocoa-specific global timer data
194//
195typedef struct _GLFWtimerNS
196{
197 uint64_t frequency;
198
199} _GLFWtimerNS;
200
201
202void _glfwInitTimerNS(void);
203
204void _glfwPollMonitorsNS(void);
205void _glfwSetVideoModeNS(_GLFWmonitor* monitor, const GLFWvidmode* desired);
206void _glfwRestoreVideoModeNS(_GLFWmonitor* monitor);
207
208float _glfwTransformYNS(float y);
209
210void* _glfwLoadLocalVulkanLoaderNS(void);
211