1 2/* 3 * Copyright 2011 Google Inc. 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9#include <crt_externs.h> 10#import <Cocoa/Cocoa.h> 11#include "SkApplication.h" 12#include "SkNSView.h" 13 14@interface MainView : SkNSView { 15} 16- (id)initWithFrame: (NSRect)frame ; 17- (void)dealloc; 18- (void)begin; 19@end 20 21@implementation MainView : SkNSView 22 23- (id)initWithFrame: (NSRect)frame { 24 self = [super initWithFrame:frame]; 25 return self; 26} 27 28- (void)dealloc { 29 delete fWind; 30 [super dealloc]; 31} 32 33- (void)begin { 34 fWind = create_sk_window(self, *_NSGetArgc(), *_NSGetArgv()); 35 [self setUpWindow]; 36} 37@end 38 39@interface AppDelegate : NSObject<NSApplicationDelegate, NSWindowDelegate> { 40} 41- (id)init; 42- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)theApplication; 43@end 44 45# 46@implementation AppDelegate : NSObject 47- (id)init { 48 self = [super init]; 49 return self; 50} 51 52- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)theApplication { 53 return TRUE; 54} 55@end 56 57int main(int argc, char *argv[]) { 58 signal(SIGPIPE, SIG_IGN); 59 NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 60 61 NSApplication* app = [NSApplication sharedApplication]; 62 63 NSUInteger windowStyle = (NSTitledWindowMask | NSClosableWindowMask | NSResizableWindowMask | NSMiniaturizableWindowMask); 64 65 NSRect windowRect = NSMakeRect(100, 100, 1000, 1000); 66 NSWindow* window = [[NSWindow alloc] initWithContentRect:windowRect styleMask:windowStyle backing:NSBackingStoreBuffered defer:NO]; 67 68 NSRect rect = [NSWindow contentRectForFrameRect:windowRect styleMask:windowStyle]; 69 MainView* customView = [[MainView alloc] initWithFrame:rect]; 70 [customView setTranslatesAutoresizingMaskIntoConstraints:NO]; 71 NSView* contentView = window.contentView; 72 [contentView addSubview:customView]; 73 NSDictionary *views = NSDictionaryOfVariableBindings(customView); 74 75 [contentView addConstraints: 76 [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[customView]|" 77 options:0 78 metrics:nil 79 views:views]]; 80 81 [contentView addConstraints: 82 [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[customView]|" 83 options:0 84 metrics:nil 85 views:views]]; 86 87 [customView begin]; 88 [customView release]; 89 90 [window makeKeyAndOrderFront:NSApp]; 91 92 AppDelegate * appDelegate = [[[AppDelegate alloc] init] autorelease]; 93 94 app.delegate = appDelegate; 95 96 NSMenu* menu=[[NSMenu alloc] initWithTitle:@"AMainMenu"]; 97 NSMenuItem* item; 98 NSMenu* subMenu; 99 100 //Create the application menu. 101 item=[[NSMenuItem alloc] initWithTitle:@"Apple" action:NULL keyEquivalent:@""]; 102 [menu addItem:item]; 103 subMenu=[[NSMenu alloc] initWithTitle:@"Apple"]; 104 [menu setSubmenu:subMenu forItem:item]; 105 [item release]; 106 item=[[NSMenuItem alloc] initWithTitle:@"Quit" action:@selector(terminate:) keyEquivalent:@"q"]; 107 [subMenu addItem:item]; 108 [item release]; 109 [subMenu release]; 110 111 //Add the menu to the app. 112 [app setMenu:menu]; 113 114 [app setActivationPolicy:NSApplicationActivationPolicyRegular]; 115 116 [app run]; 117 118 [menu release]; 119 [appDelegate release]; 120 [window release]; 121 [pool release]; 122 123 return EXIT_SUCCESS; 124} 125