You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
2.5 KiB
93 lines
2.5 KiB
/*
|
|
* Copyright 2017 Google Inc.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
|
|
#include "include/core/SkTypes.h"
|
|
#include "tools/sk_app/Application.h"
|
|
#include "tools/sk_app/ios/Window_ios.h"
|
|
|
|
#import <QuartzCore/QuartzCore.h>
|
|
#import <UIKit/UIKit.h>
|
|
|
|
#if __has_feature(objc_arc)
|
|
#error "File should not be compiled with ARC."
|
|
#endif
|
|
|
|
namespace {
|
|
|
|
static int gArgc;
|
|
static char** gArgv;
|
|
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
|
|
@interface AppDelegate : UIResponder<UIApplicationDelegate>
|
|
|
|
@end
|
|
|
|
@implementation AppDelegate {
|
|
CADisplayLink* fDisplayLink; // Owned by the run loop.
|
|
std::unique_ptr<sk_app::Application> fApp;
|
|
}
|
|
|
|
#pragma mark - UIApplicationDelegate
|
|
|
|
- (void)applicationWillResignActive:(UIApplication *)sender {
|
|
sk_app::Window_ios* mainWindow = sk_app::Window_ios::MainWindow();
|
|
if (mainWindow) {
|
|
mainWindow->onActivate(false);
|
|
}
|
|
}
|
|
|
|
- (void)applicationDidBecomeActive:(UIApplication *)sender {
|
|
sk_app::Window_ios* mainWindow = sk_app::Window_ios::MainWindow();
|
|
if (mainWindow) {
|
|
mainWindow->onActivate(true);
|
|
}
|
|
}
|
|
|
|
- (void)applicationWillTerminate:(UIApplication *)sender {
|
|
// Display link retains us, so we break the cycle now.
|
|
// Note: dealloc is never called.
|
|
[fDisplayLink invalidate];
|
|
fDisplayLink = nil;
|
|
fApp.reset();
|
|
}
|
|
|
|
- (BOOL)application:(UIApplication *)application
|
|
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
|
|
fApp = std::unique_ptr<sk_app::Application>(sk_app::Application::Create(gArgc, gArgv, nullptr));
|
|
|
|
auto mainWindow = sk_app::Window_ios::MainWindow();
|
|
mainWindow->onActivate(application.applicationState == UIApplicationStateActive);
|
|
|
|
fDisplayLink = [CADisplayLink displayLinkWithTarget:self
|
|
selector:@selector(displayLinkFired)];
|
|
[fDisplayLink addToRunLoop:NSRunLoop.mainRunLoop forMode:NSRunLoopCommonModes];
|
|
|
|
return YES;
|
|
}
|
|
|
|
- (void)displayLinkFired {
|
|
// TODO: Hook into CAMetalLayer's drawing event loop or our own run loop observer.
|
|
// Need to handle animated slides/redraw mode, so we need something that will wake up the
|
|
// run loop.
|
|
sk_app::Window_ios::PaintWindow();
|
|
|
|
fApp->onIdle();
|
|
}
|
|
|
|
@end
|
|
|
|
///////////////////////////////////////////////////////////////////
|
|
|
|
int main(int argc, char **argv) {
|
|
gArgc = argc;
|
|
gArgv = argv;
|
|
return UIApplicationMain(argc, argv, nil, @"AppDelegate");
|
|
}
|