From e08a9c04928dbce1b74801556ed271236ea142c6 Mon Sep 17 00:00:00 2001 From: Pietro Gagliardi Date: Mon, 6 Apr 2015 20:01:14 -0400 Subject: [PATCH] Fixed initial Mac OS X code. --- alloc_darwin.m | 6 ++++-- init_darwin.m | 3 ++- test.c | 1 + ui_darwin.h | 2 ++ window_darwin.m | 11 +++++++---- 5 files changed, 16 insertions(+), 7 deletions(-) diff --git a/alloc_darwin.m b/alloc_darwin.m index 48b2a12f..059152ae 100644 --- a/alloc_darwin.m +++ b/alloc_darwin.m @@ -1,12 +1,14 @@ // 4 december 2014 #include "ui_darwin.h" +// TODO is there a better alternative to NSCAssert()? preferably a built-in allocator that panics on out of memory for us? + void *uiAlloc(size_t size) { void *out; out = malloc(size); - NSAssert(out != NULL, @"out of memory in uiAlloc()"); + NSCAssert(out != NULL, @"out of memory in uiAlloc()"); memset(out, 0, size); return out; } @@ -18,7 +20,7 @@ void *uiRealloc(void *p, size_t size) if (p == NULL) return uiAlloc(size); out = realloc(p, size); - NSAssert(out != NULL, @"out of memory in uiRealloc()"); + NSCAssert(out != NULL, @"out of memory in uiRealloc()"); // TODO zero the extra memory return out; } diff --git a/init_darwin.m b/init_darwin.m index 86f271c5..6d71152b 100644 --- a/init_darwin.m +++ b/init_darwin.m @@ -1,5 +1,5 @@ // 6 april 2015 -#include "ui_darwin.m" +#include "ui_darwin.h" @interface uiApplication : NSApplication @end @@ -31,6 +31,7 @@ uiInitError *uiInit(uiInitOptions *o) const char *uiInitErrorMessage(uiInitError *err) { + return ""; } void uiInitErrorFree(uiInitError *err) diff --git a/test.c b/test.c index 6bd50492..400c3f86 100644 --- a/test.c +++ b/test.c @@ -26,5 +26,6 @@ int main(void) uiWindowShow(w); uiMain(); + printf("after uiMain()\n"); return 0; } diff --git a/ui_darwin.h b/ui_darwin.h index 60826e4e..159939ca 100644 --- a/ui_darwin.h +++ b/ui_darwin.h @@ -8,6 +8,8 @@ #import #import "ui.h" +#define toNSString(str) [NSString stringWithUTF8String:(str)] + // alloc_darwin.m extern void *uiAlloc(size_t); extern void *uiRealloc(void *, size_t); diff --git a/window_darwin.m b/window_darwin.m index 44696901..1a60f8bf 100644 --- a/window_darwin.m +++ b/window_darwin.m @@ -1,8 +1,9 @@ // 6 april 2015 #include "ui_darwin.h" -@interface uiWindowDelegate : NSWindowDelegate -@property void (*onClosing)(uiWindow *, void *); +@interface uiWindowDelegate : NSObject +@property uiWindow *w; +@property int (*onClosing)(uiWindow *, void *); @property void *onClosingData; @end @@ -12,7 +13,7 @@ - (BOOL)windowShouldClose:(id)win { // return exact constants to be safe - if ((*(self.onClosing))(self.onClosingData)) + if ((*(self.onClosing))(self.w, self.onClosingData)) return YES; return NO; } @@ -39,9 +40,11 @@ uiWindow *uiNewWindow(char *title, int width, int height) styleMask:(NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask | NSResizableWindowMask) backing:NSBackingStoreBuffered defer:YES]; + [w->w setTitle:toNSString(title)]; // TODO substitutions w->d = [uiWindowDelegate new]; + w->d.w = w; w->d.onClosing = defaultOnClosing; [w->w setDelegate:w->d]; @@ -71,7 +74,7 @@ void uiWindowHide(uiWindow *w) [w->w orderOut:w->w]; } -void uiWindowOnClosing(uiWindow *w, int (*)(uiWindow *f, void *), void *data) +void uiWindowOnClosing(uiWindow *w, int (*f)(uiWindow *, void *), void *data) { w->d.onClosing = f; w->d.onClosingData = data;