20 #define GL_SILENCE_DEPRECATION
28 #import <Cocoa/Cocoa.h>
36 NSPasteboard* pasteboard = [NSPasteboard generalPasteboard];
37 [pasteboard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil];
38 NSString*
string = [NSString stringWithCString:
text.c_str() encoding:NSUTF8StringEncoding];
39 if (![pasteboard setString:
string forType:NSStringPboardType])
41 Log(
"Writing to Cocoa pasteboard failed");
51 NSPasteboard* pasteboard = [NSPasteboard generalPasteboard];
52 const char* chars = [[pasteboard stringForType:NSStringPboardType] cStringUsingEncoding:NSUTF8StringEncoding];
60 return [[NSPasteboard generalPasteboard] availableTypeFromArray:[NSArray arrayWithObject:NSStringPboardType]];
65 NSAlert* alert = [NSAlert alertWithMessageText:
@"Fatal Error"
69 informativeTextWithFormat:
@"%@",
70 [NSString stringWithUTF8String:message]
77 [NSApp requestUserAttention:NSCriticalRequest];
94 return DoInit (argc, argv);
102 [NSApp terminate:[NSApp delegate]];
111 while (CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, TRUE) == kCFRunLoopRunHandledSource);
113 while ((event = [NSApp nextEventMatchingMask:NSEventMaskAny untilDate:[NSDate distantPast] inMode:NSEventTrackingRunLoopMode dequeue:YES]) != nil)
115 [NSApp sendEvent:event];
116 [NSApp updateWindows];
121 static int32_t bitDepthFromPixelEncoding(CFStringRef encoding)
124 if (CFStringCompare(encoding, CFSTR(IO32BitDirectPixels), kCFCompareCaseInsensitive) == kCFCompareEqualTo)
126 else if(CFStringCompare(encoding, CFSTR(IO16BitDirectPixels), kCFCompareCaseInsensitive) == kCFCompareEqualTo)
128 else if(CFStringCompare(encoding, CFSTR(IO8BitIndexedPixels), kCFCompareCaseInsensitive) == kCFCompareEqualTo)
137 CFArrayRef array = CGDisplayCopyAllDisplayModes(iMonitor, NULL);
138 bool good_index = iIndex >= 0 && iIndex < (int32_t)CFArrayGetCount(array);
141 CGDisplayModeRef displayMode = (CGDisplayModeRef)CFArrayGetValueAtIndex(array, iIndex);
142 *piXRes = CGDisplayModeGetWidth(displayMode);
143 *piYRes = CGDisplayModeGetHeight(displayMode);
144 CFStringRef pixelEncoding = CGDisplayModeCopyPixelEncoding(displayMode);
145 *piBitDepth = bitDepthFromPixelEncoding(pixelEncoding);
146 CFRelease(pixelEncoding);
160 NSWindow* window = controller.window;
162 size_t dw = CGDisplayPixelsWide(C4OpenGLView.displayID);
163 size_t dh = CGDisplayPixelsHigh(C4OpenGLView.displayID);
168 ActualFullscreenX = iXRes;
169 ActualFullscreenY = iYRes;
170 [C4OpenGLView setSurfaceBackingSizeOf:[C4OpenGLView mainContext] width:ActualFullscreenX height:ActualFullscreenY];
171 if ((window.styleMask & NSWindowStyleMaskFullScreen) == 0)
173 [window setResizeIncrements:NSMakeSize(1.0, 1.0)];
175 [controller setFullscreen:fFullScreen];
176 [window setAspectRatio:[[window contentView] frame].size];
181 [window toggleFullScreen:window];
185 [window makeKeyAndOrderFront:nil];
195 id languages = [[NSUserDefaults standardUserDefaults] valueForKey:
@"AppleLanguages"];
196 return languages && [[languages objectAtIndex:0] isEqualToString:
@"de"];
201 std::string command = std::string(
"open ") +
'"' + szURL +
'"';
202 std::system(command.c_str());
208 NSString* filename = [NSString stringWithUTF8String: szFilename];
209 return [[NSWorkspace sharedWorkspace]
210 performFileOperation: NSWorkspaceRecycleOperation
211 source: [filename stringByDeletingLastPathComponent]
213 files: [NSArray arrayWithObject: [filename lastPathComponent]]
217 std::string C4AbstractApp::GetGameDataPath()
219 return [[[NSBundle mainBundle] resourcePath] fileSystemRepresentation];
bool EraseItemSafe(const char *szFilename)
bool OpenURL(const char *szURL)
bool Log(const char *szMessage)
void MessageDialog(const char *message)
bool SetVideoMode(int iXRes, int iYRes, unsigned int iRefreshRate, unsigned int iMonitor, bool fFullScreen)
bool IsClipboardFull(bool fClipboard=true)
virtual void OnResolutionChanged(unsigned int iXRes, unsigned int iYRes)=0
bool GetIndexedDisplayMode(int32_t iIndex, int32_t *piXRes, int32_t *piYRes, int32_t *piBitDepth, int32_t *piRefreshRate, uint32_t iMonitor)
~C4AbstractApp() override
bool Copy(const std::string &text, bool fClipboard=true)
std::string Paste(bool fClipboard=true)
virtual bool DoInit(int argc, char *argv[])=0
bool Init(int argc, char *argv[])
void SetSize(unsigned int cx, unsigned int cy)