summary refs log tree commit diff
path: root/bin/gfcocoa.m
diff options
context:
space:
mode:
authorJune McEnroe <programble@gmail.com>2018-02-04 00:11:18 -0500
committerJune McEnroe <programble@gmail.com>2018-02-04 00:11:18 -0500
commit609f8d0b1acb75a29e2c4192811c41037d13cf43 (patch)
tree18a7fb35e3b75ddf26343096d981a4ad592be7f4 /bin/gfcocoa.m
parentApparently this is how people write Objective-C (diff)
downloadsrc-609f8d0b1acb75a29e2c4192811c41037d13cf43.tar.gz
src-609f8d0b1acb75a29e2c4192811c41037d13cf43.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 04410820..a9e4a1b5 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];