87bda3dabe
If you launch the Mac viewer from the command line, it will sit there until you click on the thumbnail in the dock, and only then will bring up the window. This fixes that so it will open the window immediately. Change-Id: I5628dc6c59833f808a61dedde457774114dd0e94 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/222783 Commit-Queue: Jim Van Verth <jvanverth@google.com> Commit-Queue: Brian Osman <brianosman@google.com> Auto-Submit: Jim Van Verth <jvanverth@google.com> Reviewed-by: Brian Osman <brianosman@google.com>
114 lines
3.0 KiB
Plaintext
114 lines
3.0 KiB
Plaintext
/*
|
|
* Copyright 2019 Google Inc.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
|
|
#import <Cocoa/Cocoa.h>
|
|
|
|
#include "tools/sk_app/Application.h"
|
|
#include "tools/sk_app/mac/Window_mac.h"
|
|
|
|
@interface AppDelegate : NSObject<NSApplicationDelegate, NSWindowDelegate>
|
|
|
|
@property (nonatomic, assign) BOOL done;
|
|
|
|
@end
|
|
|
|
@implementation AppDelegate : NSObject
|
|
|
|
@synthesize done = _done;
|
|
|
|
- (id)init {
|
|
self = [super init];
|
|
_done = FALSE;
|
|
return self;
|
|
}
|
|
|
|
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender {
|
|
_done = TRUE;
|
|
return NSTerminateCancel;
|
|
}
|
|
|
|
- (void)applicationDidFinishLaunching:(NSNotification *)notification {
|
|
[NSApp stop:nil];
|
|
}
|
|
|
|
@end
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
using sk_app::Application;
|
|
using sk_app::Window_mac;
|
|
|
|
int main(int argc, char * argv[]) {
|
|
#if MAC_OS_X_VERSION_MAX_ALLOWED < 1070
|
|
// we only run on systems that support at least Core Profile 3.2
|
|
return EXIT_FAILURE;
|
|
#endif
|
|
|
|
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
|
|
[NSApplication sharedApplication];
|
|
|
|
[NSApp setActivationPolicy:NSApplicationActivationPolicyRegular];
|
|
|
|
//Create the application menu.
|
|
NSMenu* menuBar=[[NSMenu alloc] initWithTitle:@"AMainMenu"];
|
|
[NSApp setMainMenu:menuBar];
|
|
|
|
NSMenuItem* item;
|
|
NSMenu* subMenu;
|
|
|
|
item=[[NSMenuItem alloc] initWithTitle:@"Apple" action:NULL keyEquivalent:@""];
|
|
[menuBar addItem:item];
|
|
subMenu=[[NSMenu alloc] initWithTitle:@"Apple"];
|
|
[menuBar setSubmenu:subMenu forItem:item];
|
|
[item release];
|
|
item=[[NSMenuItem alloc] initWithTitle:@"Quit" action:@selector(terminate:) keyEquivalent:@"q"];
|
|
[subMenu addItem:item];
|
|
[item release];
|
|
[subMenu release];
|
|
|
|
// Set AppDelegate to catch certain global events
|
|
AppDelegate* appDelegate = [[AppDelegate alloc] init];
|
|
[NSApp setDelegate:appDelegate];
|
|
|
|
Application* app = Application::Create(argc, argv, nullptr);
|
|
|
|
// This will run until the application finishes launching, then lets us take over
|
|
[NSApp run];
|
|
|
|
// Now we process the events
|
|
while (![appDelegate done]) {
|
|
NSEvent* event;
|
|
do {
|
|
event = [NSApp nextEventMatchingMask:NSAnyEventMask
|
|
untilDate:[NSDate distantPast]
|
|
inMode:NSDefaultRunLoopMode
|
|
dequeue:YES];
|
|
[NSApp sendEvent:event];
|
|
} while (event != nil);
|
|
|
|
[pool drain];
|
|
pool = [[NSAutoreleasePool alloc] init];
|
|
|
|
// Rather than depending on a Mac event to drive this, we treat our window
|
|
// invalidation flag as a separate event stream. Window::onPaint() will clear
|
|
// the invalidation flag, effectively removing it from the stream.
|
|
Window_mac::PaintWindows();
|
|
|
|
app->onIdle();
|
|
}
|
|
|
|
delete app;
|
|
|
|
[NSApp setDelegate:nil];
|
|
[appDelegate release];
|
|
|
|
[menuBar release];
|
|
[pool release];
|
|
|
|
return EXIT_SUCCESS;
|
|
}
|