minesweeper

A minewseeper implementation to play around with Hare and Raylib
git clone https://git.tronto.net/minesweeper
Download | Log | Files | Refs | README | LICENSE

cocoa_platform.h (12920B)


      1 //========================================================================
      2 // GLFW 3.4 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 
     29 #include <Carbon/Carbon.h>
     30 #include <IOKit/hid/IOHIDLib.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 #ifndef GL_SILENCE_DEPRECATION
     35 #define GL_SILENCE_DEPRECATION
     36 #endif
     37 
     38 #if defined(__OBJC__)
     39 #import <Cocoa/Cocoa.h>
     40 #else
     41 typedef void* id;
     42 #endif
     43 
     44 // NOTE: Many Cocoa enum values have been renamed and we need to build across
     45 //       SDK versions where one is unavailable or deprecated.
     46 //       We use the newer names in code and replace them with the older names if
     47 //       the base SDK does not provide the newer names.
     48 
     49 #if MAC_OS_X_VERSION_MAX_ALLOWED < 101400
     50  #define NSOpenGLContextParameterSwapInterval NSOpenGLCPSwapInterval
     51  #define NSOpenGLContextParameterSurfaceOpacity NSOpenGLCPSurfaceOpacity
     52 #endif
     53 
     54 #if MAC_OS_X_VERSION_MAX_ALLOWED < 101200
     55  #define NSBitmapFormatAlphaNonpremultiplied NSAlphaNonpremultipliedBitmapFormat
     56  #define NSEventMaskAny NSAnyEventMask
     57  #define NSEventMaskKeyUp NSKeyUpMask
     58  #define NSEventModifierFlagCapsLock NSAlphaShiftKeyMask
     59  #define NSEventModifierFlagCommand NSCommandKeyMask
     60  #define NSEventModifierFlagControl NSControlKeyMask
     61  #define NSEventModifierFlagDeviceIndependentFlagsMask NSDeviceIndependentModifierFlagsMask
     62  #define NSEventModifierFlagOption NSAlternateKeyMask
     63  #define NSEventModifierFlagShift NSShiftKeyMask
     64  #define NSEventTypeApplicationDefined NSApplicationDefined
     65  #define NSWindowStyleMaskBorderless NSBorderlessWindowMask
     66  #define NSWindowStyleMaskClosable NSClosableWindowMask
     67  #define NSWindowStyleMaskMiniaturizable NSMiniaturizableWindowMask
     68  #define NSWindowStyleMaskResizable NSResizableWindowMask
     69  #define NSWindowStyleMaskTitled NSTitledWindowMask
     70 #endif
     71 
     72 // NOTE: Many Cocoa dynamically linked constants have been renamed and we need
     73 //       to build across SDK versions where one is unavailable or deprecated.
     74 //       We use the newer names in code and replace them with the older names if
     75 //       the deployment target is older than the newer names.
     76 
     77 #if MAC_OS_X_VERSION_MIN_REQUIRED < 101300
     78  #define NSPasteboardTypeURL NSURLPboardType
     79 #endif
     80 
     81 typedef VkFlags VkMacOSSurfaceCreateFlagsMVK;
     82 typedef VkFlags VkMetalSurfaceCreateFlagsEXT;
     83 
     84 typedef struct VkMacOSSurfaceCreateInfoMVK
     85 {
     86     VkStructureType                 sType;
     87     const void*                     pNext;
     88     VkMacOSSurfaceCreateFlagsMVK    flags;
     89     const void*                     pView;
     90 } VkMacOSSurfaceCreateInfoMVK;
     91 
     92 typedef struct VkMetalSurfaceCreateInfoEXT
     93 {
     94     VkStructureType                 sType;
     95     const void*                     pNext;
     96     VkMetalSurfaceCreateFlagsEXT    flags;
     97     const void*                     pLayer;
     98 } VkMetalSurfaceCreateInfoEXT;
     99 
    100 typedef VkResult (APIENTRY *PFN_vkCreateMacOSSurfaceMVK)(VkInstance,const VkMacOSSurfaceCreateInfoMVK*,const VkAllocationCallbacks*,VkSurfaceKHR*);
    101 typedef VkResult (APIENTRY *PFN_vkCreateMetalSurfaceEXT)(VkInstance,const VkMetalSurfaceCreateInfoEXT*,const VkAllocationCallbacks*,VkSurfaceKHR*);
    102 
    103 #define GLFW_COCOA_WINDOW_STATE         _GLFWwindowNS  ns;
    104 #define GLFW_COCOA_LIBRARY_WINDOW_STATE _GLFWlibraryNS ns;
    105 #define GLFW_COCOA_MONITOR_STATE        _GLFWmonitorNS ns;
    106 #define GLFW_COCOA_CURSOR_STATE         _GLFWcursorNS  ns;
    107 
    108 #define GLFW_NSGL_CONTEXT_STATE         _GLFWcontextNSGL nsgl;
    109 #define GLFW_NSGL_LIBRARY_CONTEXT_STATE _GLFWlibraryNSGL nsgl;
    110 
    111 // HIToolbox.framework pointer typedefs
    112 #define kTISPropertyUnicodeKeyLayoutData _glfw.ns.tis.kPropertyUnicodeKeyLayoutData
    113 typedef TISInputSourceRef (*PFN_TISCopyCurrentKeyboardLayoutInputSource)(void);
    114 #define TISCopyCurrentKeyboardLayoutInputSource _glfw.ns.tis.CopyCurrentKeyboardLayoutInputSource
    115 typedef void* (*PFN_TISGetInputSourceProperty)(TISInputSourceRef,CFStringRef);
    116 #define TISGetInputSourceProperty _glfw.ns.tis.GetInputSourceProperty
    117 typedef UInt8 (*PFN_LMGetKbdType)(void);
    118 #define LMGetKbdType _glfw.ns.tis.GetKbdType
    119 
    120 
    121 // NSGL-specific per-context data
    122 //
    123 typedef struct _GLFWcontextNSGL
    124 {
    125     id                pixelFormat;
    126     id                object;
    127 } _GLFWcontextNSGL;
    128 
    129 // NSGL-specific global data
    130 //
    131 typedef struct _GLFWlibraryNSGL
    132 {
    133     // dlopen handle for OpenGL.framework (for glfwGetProcAddress)
    134     CFBundleRef     framework;
    135 } _GLFWlibraryNSGL;
    136 
    137 // Cocoa-specific per-window data
    138 //
    139 typedef struct _GLFWwindowNS
    140 {
    141     id              object;
    142     id              delegate;
    143     id              view;
    144     id              layer;
    145 
    146     GLFWbool        maximized;
    147     GLFWbool        occluded;
    148     GLFWbool        scaleFramebuffer;
    149 
    150     // Cached window properties to filter out duplicate events
    151     int             width, height;
    152     int             fbWidth, fbHeight;
    153     float           xscale, yscale;
    154 
    155     // The total sum of the distances the cursor has been warped
    156     // since the last cursor motion event was processed
    157     // This is kept to counteract Cocoa doing the same internally
    158     double          cursorWarpDeltaX, cursorWarpDeltaY;
    159 } _GLFWwindowNS;
    160 
    161 // Cocoa-specific global data
    162 //
    163 typedef struct _GLFWlibraryNS
    164 {
    165     CGEventSourceRef    eventSource;
    166     id                  delegate;
    167     GLFWbool            cursorHidden;
    168     TISInputSourceRef   inputSource;
    169     IOHIDManagerRef     hidManager;
    170     id                  unicodeData;
    171     id                  helper;
    172     id                  keyUpMonitor;
    173     id                  nibObjects;
    174 
    175     char                keynames[GLFW_KEY_LAST + 1][17];
    176     short int           keycodes[256];
    177     short int           scancodes[GLFW_KEY_LAST + 1];
    178     char*               clipboardString;
    179     CGPoint             cascadePoint;
    180     // Where to place the cursor when re-enabled
    181     double              restoreCursorPosX, restoreCursorPosY;
    182     // The window whose disabled cursor mode is active
    183     _GLFWwindow*        disabledCursorWindow;
    184 
    185     struct {
    186         CFBundleRef     bundle;
    187         PFN_TISCopyCurrentKeyboardLayoutInputSource CopyCurrentKeyboardLayoutInputSource;
    188         PFN_TISGetInputSourceProperty GetInputSourceProperty;
    189         PFN_LMGetKbdType GetKbdType;
    190         CFStringRef     kPropertyUnicodeKeyLayoutData;
    191     } tis;
    192 } _GLFWlibraryNS;
    193 
    194 // Cocoa-specific per-monitor data
    195 //
    196 typedef struct _GLFWmonitorNS
    197 {
    198     CGDirectDisplayID   displayID;
    199     CGDisplayModeRef    previousMode;
    200     uint32_t            unitNumber;
    201     id                  screen;
    202     double              fallbackRefreshRate;
    203 } _GLFWmonitorNS;
    204 
    205 // Cocoa-specific per-cursor data
    206 //
    207 typedef struct _GLFWcursorNS
    208 {
    209     id              object;
    210 } _GLFWcursorNS;
    211 
    212 
    213 GLFWbool _glfwConnectCocoa(int platformID, _GLFWplatform* platform);
    214 int _glfwInitCocoa(void);
    215 void _glfwTerminateCocoa(void);
    216 
    217 GLFWbool _glfwCreateWindowCocoa(_GLFWwindow* window, const _GLFWwndconfig* wndconfig, const _GLFWctxconfig* ctxconfig, const _GLFWfbconfig* fbconfig);
    218 void _glfwDestroyWindowCocoa(_GLFWwindow* window);
    219 void _glfwSetWindowTitleCocoa(_GLFWwindow* window, const char* title);
    220 void _glfwSetWindowIconCocoa(_GLFWwindow* window, int count, const GLFWimage* images);
    221 void _glfwGetWindowPosCocoa(_GLFWwindow* window, int* xpos, int* ypos);
    222 void _glfwSetWindowPosCocoa(_GLFWwindow* window, int xpos, int ypos);
    223 void _glfwGetWindowSizeCocoa(_GLFWwindow* window, int* width, int* height);
    224 void _glfwSetWindowSizeCocoa(_GLFWwindow* window, int width, int height);
    225 void _glfwSetWindowSizeLimitsCocoa(_GLFWwindow* window, int minwidth, int minheight, int maxwidth, int maxheight);
    226 void _glfwSetWindowAspectRatioCocoa(_GLFWwindow* window, int numer, int denom);
    227 void _glfwGetFramebufferSizeCocoa(_GLFWwindow* window, int* width, int* height);
    228 void _glfwGetWindowFrameSizeCocoa(_GLFWwindow* window, int* left, int* top, int* right, int* bottom);
    229 void _glfwGetWindowContentScaleCocoa(_GLFWwindow* window, float* xscale, float* yscale);
    230 void _glfwIconifyWindowCocoa(_GLFWwindow* window);
    231 void _glfwRestoreWindowCocoa(_GLFWwindow* window);
    232 void _glfwMaximizeWindowCocoa(_GLFWwindow* window);
    233 void _glfwShowWindowCocoa(_GLFWwindow* window);
    234 void _glfwHideWindowCocoa(_GLFWwindow* window);
    235 void _glfwRequestWindowAttentionCocoa(_GLFWwindow* window);
    236 void _glfwFocusWindowCocoa(_GLFWwindow* window);
    237 void _glfwSetWindowMonitorCocoa(_GLFWwindow* window, _GLFWmonitor* monitor, int xpos, int ypos, int width, int height, int refreshRate);
    238 GLFWbool _glfwWindowFocusedCocoa(_GLFWwindow* window);
    239 GLFWbool _glfwWindowIconifiedCocoa(_GLFWwindow* window);
    240 GLFWbool _glfwWindowVisibleCocoa(_GLFWwindow* window);
    241 GLFWbool _glfwWindowMaximizedCocoa(_GLFWwindow* window);
    242 GLFWbool _glfwWindowHoveredCocoa(_GLFWwindow* window);
    243 GLFWbool _glfwFramebufferTransparentCocoa(_GLFWwindow* window);
    244 void _glfwSetWindowResizableCocoa(_GLFWwindow* window, GLFWbool enabled);
    245 void _glfwSetWindowDecoratedCocoa(_GLFWwindow* window, GLFWbool enabled);
    246 void _glfwSetWindowFloatingCocoa(_GLFWwindow* window, GLFWbool enabled);
    247 float _glfwGetWindowOpacityCocoa(_GLFWwindow* window);
    248 void _glfwSetWindowOpacityCocoa(_GLFWwindow* window, float opacity);
    249 void _glfwSetWindowMousePassthroughCocoa(_GLFWwindow* window, GLFWbool enabled);
    250 
    251 void _glfwSetRawMouseMotionCocoa(_GLFWwindow *window, GLFWbool enabled);
    252 GLFWbool _glfwRawMouseMotionSupportedCocoa(void);
    253 
    254 void _glfwPollEventsCocoa(void);
    255 void _glfwWaitEventsCocoa(void);
    256 void _glfwWaitEventsTimeoutCocoa(double timeout);
    257 void _glfwPostEmptyEventCocoa(void);
    258 
    259 void _glfwGetCursorPosCocoa(_GLFWwindow* window, double* xpos, double* ypos);
    260 void _glfwSetCursorPosCocoa(_GLFWwindow* window, double xpos, double ypos);
    261 void _glfwSetCursorModeCocoa(_GLFWwindow* window, int mode);
    262 const char* _glfwGetScancodeNameCocoa(int scancode);
    263 int _glfwGetKeyScancodeCocoa(int key);
    264 GLFWbool _glfwCreateCursorCocoa(_GLFWcursor* cursor, const GLFWimage* image, int xhot, int yhot);
    265 GLFWbool _glfwCreateStandardCursorCocoa(_GLFWcursor* cursor, int shape);
    266 void _glfwDestroyCursorCocoa(_GLFWcursor* cursor);
    267 void _glfwSetCursorCocoa(_GLFWwindow* window, _GLFWcursor* cursor);
    268 void _glfwSetClipboardStringCocoa(const char* string);
    269 const char* _glfwGetClipboardStringCocoa(void);
    270 
    271 EGLenum _glfwGetEGLPlatformCocoa(EGLint** attribs);
    272 EGLNativeDisplayType _glfwGetEGLNativeDisplayCocoa(void);
    273 EGLNativeWindowType _glfwGetEGLNativeWindowCocoa(_GLFWwindow* window);
    274 
    275 void _glfwGetRequiredInstanceExtensionsCocoa(char** extensions);
    276 GLFWbool _glfwGetPhysicalDevicePresentationSupportCocoa(VkInstance instance, VkPhysicalDevice device, uint32_t queuefamily);
    277 VkResult _glfwCreateWindowSurfaceCocoa(VkInstance instance, _GLFWwindow* window, const VkAllocationCallbacks* allocator, VkSurfaceKHR* surface);
    278 
    279 void _glfwFreeMonitorCocoa(_GLFWmonitor* monitor);
    280 void _glfwGetMonitorPosCocoa(_GLFWmonitor* monitor, int* xpos, int* ypos);
    281 void _glfwGetMonitorContentScaleCocoa(_GLFWmonitor* monitor, float* xscale, float* yscale);
    282 void _glfwGetMonitorWorkareaCocoa(_GLFWmonitor* monitor, int* xpos, int* ypos, int* width, int* height);
    283 GLFWvidmode* _glfwGetVideoModesCocoa(_GLFWmonitor* monitor, int* count);
    284 GLFWbool _glfwGetVideoModeCocoa(_GLFWmonitor* monitor, GLFWvidmode* mode);
    285 GLFWbool _glfwGetGammaRampCocoa(_GLFWmonitor* monitor, GLFWgammaramp* ramp);
    286 void _glfwSetGammaRampCocoa(_GLFWmonitor* monitor, const GLFWgammaramp* ramp);
    287 
    288 void _glfwPollMonitorsCocoa(void);
    289 void _glfwSetVideoModeCocoa(_GLFWmonitor* monitor, const GLFWvidmode* desired);
    290 void _glfwRestoreVideoModeCocoa(_GLFWmonitor* monitor);
    291 
    292 float _glfwTransformYCocoa(float y);
    293 
    294 void* _glfwLoadLocalVulkanLoaderCocoa(void);
    295 
    296 GLFWbool _glfwInitNSGL(void);
    297 void _glfwTerminateNSGL(void);
    298 GLFWbool _glfwCreateContextNSGL(_GLFWwindow* window,
    299                                 const _GLFWctxconfig* ctxconfig,
    300                                 const _GLFWfbconfig* fbconfig);
    301 void _glfwDestroyContextNSGL(_GLFWwindow* window);
    302