#if defined(OS_MACOS) #include #include #include #include #include #include #include #include #include #define GLFW_EXPOSE_NATIVE_COCOA #include #include #import #import void errorMessageMacos(const char *cMessage) { CFStringRef strMessage = CFStringCreateWithCString(NULL, cMessage, kCFStringEncodingUTF8); CFUserNotificationDisplayAlert(0, kCFUserNotificationStopAlertLevel, NULL, NULL, NULL, strMessage, NULL, NULL, NULL, NULL, NULL); } void openFile(const char *path); void registerFont(const char *fontName, const char *fontPath); void openWebpageMacos(const char *url) { CFURLRef urlRef = CFURLCreateWithBytes(NULL, (uint8_t*)(url), strlen(url), kCFStringEncodingASCII, NULL); LSOpenCFURLRef(urlRef, NULL); CFRelease(urlRef); } bool isMacosSystemDarkModeEnabled(void) { NSString * appleInterfaceStyle = [[NSUserDefaults standardUserDefaults] stringForKey:@"AppleInterfaceStyle"]; if (appleInterfaceStyle && [appleInterfaceStyle length] > 0) { return [[appleInterfaceStyle lowercaseString] containsString:@"dark"]; } else { return false; } } float getBackingScaleFactor(void) { return [[NSScreen mainScreen] backingScaleFactor]; } void setupMacosWindowStyle(GLFWwindow *window, bool borderlessWindowMode) { NSWindow* cocoaWindow = glfwGetCocoaWindow(window); cocoaWindow.titleVisibility = NSWindowTitleHidden; if (borderlessWindowMode) { cocoaWindow.titlebarAppearsTransparent = YES; cocoaWindow.styleMask |= NSWindowStyleMaskFullSizeContentView; [cocoaWindow setOpaque:NO]; [cocoaWindow setHasShadow:YES]; [cocoaWindow setBackgroundColor:[NSColor colorWithWhite: 0 alpha: 0.001f]]; } } bool isMacosFullScreenModeEnabled(GLFWwindow *window) { NSWindow* cocoaWindow = glfwGetCocoaWindow(window); return (cocoaWindow.styleMask & NSWindowStyleMaskFullScreen) == NSWindowStyleMaskFullScreen; } void enumerateFontsMacos(void) { CFArrayRef fontDescriptors = CTFontManagerCopyAvailableFontFamilyNames(); CFIndex count = CFArrayGetCount(fontDescriptors); for (CFIndex i = 0; i < count; i++) { CFStringRef fontName = (CFStringRef)CFArrayGetValueAtIndex(fontDescriptors, i); // Get font path CFDictionaryRef attributes = (__bridge CFDictionaryRef)@{ (__bridge NSString *)kCTFontNameAttribute : (__bridge NSString *)fontName }; CTFontDescriptorRef descriptor = CTFontDescriptorCreateWithAttributes(attributes); CFURLRef fontURL = CTFontDescriptorCopyAttribute(descriptor, kCTFontURLAttribute); CFStringRef fontPath = CFURLCopyFileSystemPath(fontURL, kCFURLPOSIXPathStyle); registerFont([(__bridge NSString *)fontName UTF8String], [(__bridge NSString *)fontPath UTF8String]); CFRelease(descriptor); CFRelease(fontURL); } CFRelease(fontDescriptors); } @interface HexDocument : NSDocument @end @implementation HexDocument - (BOOL) readFromURL:(NSURL *)url ofType:(NSString *)typeName error:(NSError **)outError { NSString* urlString = [url absoluteString]; const char* utf8String = [urlString UTF8String]; const char *prefix = "file://"; if (strncmp(utf8String, prefix, strlen(prefix)) == 0) utf8String += strlen(prefix); openFile(utf8String); return YES; } @end #endif