113 lines
3.9 KiB
Objective-C
113 lines
3.9 KiB
Objective-C
#if defined(OS_MACOS)
|
|
|
|
#include <CoreFoundation/CFBundle.h>
|
|
#include <ApplicationServices/ApplicationServices.h>
|
|
#include <Foundation/NSUserDefaults.h>
|
|
#include <AppKit/NSScreen.h>
|
|
#include <CoreFoundation/CoreFoundation.h>
|
|
#include <CoreText/CoreText.h>
|
|
|
|
#include <string.h>
|
|
#include <stdlib.h>
|
|
#include <stdint.h>
|
|
|
|
#define GLFW_EXPOSE_NATIVE_COCOA
|
|
#include <GLFW/glfw3.h>
|
|
#include <GLFW/glfw3native.h>
|
|
|
|
#import <Cocoa/Cocoa.h>
|
|
#import <Foundation/Foundation.h>
|
|
|
|
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
|