summary refs log tree commit diff
path: root/bin/gfcocoa.m
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2018-02-04 00:11:18 -0500
committerJune McEnroe <june@causal.agency>2018-02-04 00:11:18 -0500
commit3cb4221f40d7ff8896aa1958f33ce5b9a623d69b (patch)
treeb24e9fa7570603d40e7c31797624379272121c95 /bin/gfcocoa.m
parentApparently this is how people write Objective-C (diff)
downloadsrc-3cb4221f40d7ff8896aa1958f33ce5b9a623d69b.tar.gz
src-3cb4221f40d7ff8896aa1958f33ce5b9a623d69b.zip
Quit gfcocoa when window closes
Diffstat (limited to '')
-rw-r--r--bin/gfcocoa.m35
1 files changed, 24 insertions, 11 deletions
diff --git a/bin/gfcocoa.m b/bin/gfcocoa.m
index af4d576a..cfd3d2ad 100644
--- a/bin/gfcocoa.m
+++ b/bin/gfcocoa.m
@@ -28,19 +28,19 @@ extern void input(char in);
 static size_t size = 4 * WIDTH * HEIGHT;
 static uint32_t buf[WIDTH * HEIGHT];
 
-@interface BufferView : NSView {
-}
+@interface BufferView : NSView
 @end
 
 @implementation BufferView
 - (void)drawRect:(NSRect)dirtyRect {
     CGContextRef ctx = [[NSGraphicsContext currentContext] CGContext];
     CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB();
-    CGDataProviderRef data = CGDataProviderCreateWithData(NULL, buf, size, NULL);
+    CGDataProviderRef data =
+        CGDataProviderCreateWithData(NULL, buf, size, NULL);
     CGImageRef image =
         CGImageCreate(WIDTH, HEIGHT, 8, 32, WIDTH * 4, rgb,
-        kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipFirst,
-        data, NULL, false, kCGRenderingIntentDefault);
+                      kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipFirst,
+                      data, NULL, false, kCGRenderingIntentDefault);
     CGContextDrawImage(ctx, CGRectMake(0, 0, WIDTH, HEIGHT), image);
     CGImageRelease(image);
     CGDataProviderRelease(data);
@@ -66,26 +66,39 @@ static uint32_t buf[WIDTH * HEIGHT];
 }
 @end
 
+@interface Delegate : NSObject <NSApplicationDelegate>
+@end
+
+@implementation Delegate
+- (BOOL)applicationShouldTerminateAfterLastWindowClosed:
+    (NSApplication *)sender {
+    return YES;
+}
+@end
+
 int main(int argc, char *argv[]) {
     int error = init(argc, argv);
-    if (error) return error;
+    if (error)
+        return error;
 
     draw(buf, WIDTH, HEIGHT);
 
     [NSApplication sharedApplication];
     [NSApp setActivationPolicy:NSApplicationActivationPolicyRegular];
+    [NSApp setDelegate:[Delegate new]];
 
     NSWindow *window = [[NSWindow alloc]
-        initWithContentRect:NSMakeRect(0, 0, 640, 480)
-                  styleMask:NSTitledWindowMask | NSClosableWindowMask
+        initWithContentRect:NSMakeRect(0, 0, WIDTH, HEIGHT)
+                  styleMask:NSTitledWindowMask | NSClosableWindowMask |
+                            NSMiniaturizableWindowMask | NSResizableWindowMask
                     backing:NSBackingStoreBuffered
-                      defer:NO];
-    [window setTitle:[[NSString alloc] initWithUTF8String:argv[0]]];
-    [window center];
+                      defer:YES];
 
     BufferView *view = [[BufferView alloc] initWithFrame:[window frame]];
     [window setContentView:view];
 
+    [window setTitle:[NSString stringWithUTF8String:argv[0]]];
+    [window center];
     [window makeKeyAndOrderFront:nil];
     [NSApp activateIgnoringOtherApps:YES];
     [NSApp run];