diff --git a/new/alloc_darwin.m b/new/alloc_darwin.m index 48b2a12..059152a 100644 --- a/new/alloc_darwin.m +++ b/new/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/new/init_darwin.m b/new/init_darwin.m index 86f271c..6d71152 100644 --- a/new/init_darwin.m +++ b/new/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/new/test.c b/new/test.c index 6bd5049..400c3f8 100644 --- a/new/test.c +++ b/new/test.c @@ -26,5 +26,6 @@ int main(void) uiWindowShow(w); uiMain(); + printf("after uiMain()\n"); return 0; } diff --git a/new/ui_darwin.h b/new/ui_darwin.h index 60826e4..159939c 100644 --- a/new/ui_darwin.h +++ b/new/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/new/window_darwin.m b/new/window_darwin.m index 4469690..1a60f8b 100644 --- a/new/window_darwin.m +++ b/new/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;