iOS Objective-C code dump.

ViewController courtesy of rock88.
Made modifications for simplification and code-style.
Still missing some files (eg. images). Also, CMake is not set up correctly yet.
This commit is contained in:
Sacha 2013-02-18 00:04:44 +10:00
parent a9eb6cf4a4
commit 8ba2769d5e
9 changed files with 371 additions and 4 deletions

View File

@ -410,6 +410,16 @@ if(ANDROID)
native/android/native-audio-so.h)
target_link_libraries(native_audio OpenSLES)
# No target
elseif(IOS)
set(nativeExtra ${nativeExtra}
ios/main.m
ios/AppDelegate.m
ios/AppDelegate.h
ios/ViewController.mm
ios/ViewController.h)
set(CMAKE_EXE_LINKER_FLAGS "-framework Foundation -framework CoreGraphics -framework QuartzCore -framework OpenGLES -framework UIKit")
# No target
# set(TargetBin PPSSPP)
elseif(USING_QT_UI)
# Currently unused
find_package(Qt4 COMPONENTS QtMultimedia QtOpenGL QtGui QtCore)
@ -433,9 +443,7 @@ elseif(SDL_FOUND)
elseif(PANDORA)
set(nativeExtraLibs ${nativeExtraLibs} pthread EGL X11)
endif()
if(NOT IOS) # No target
set(TargetBin PPSSPPSDL)
endif()
set(TargetBin PPSSPPSDL)
else()
message(FATAL_ERROR "Could not find SDL. Failing.")
endif()
@ -950,4 +958,9 @@ endif()
file(INSTALL ${NativeAssets} DESTINATION assets)
# code signing
if (IOS)
set_target_properties(${NAME} PROPERTIES MACOSX_BUNDLE_INFO_PLIST PPSSPP-Info.plist XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "iPhone Developer: My Name")
endif()
#include(CPack)

13
ios/AppDelegate.h Normal file
View File

@ -0,0 +1,13 @@
// AppDelegate.h boilerplate
#import <UIKit/UIKit.h>
@class ViewController;
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) ViewController *viewController;
@end

25
ios/AppDelegate.m Normal file
View File

@ -0,0 +1,25 @@
// AppDelegate.m boilerplate
#import "AppDelegate.h"
#import "ViewController.h"
@implementation AppDelegate
- (void)dealloc
{
[_window release];
[_viewController release];
[super dealloc];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
self.viewController = [[[ViewController alloc] init] autorelease];
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
return YES;
}
@end

46
ios/PPSSPP-Info.plist Normal file
View File

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleDisplayName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key>
<string>com.rock88dev.${PRODUCT_NAME:rfc1034identifier}</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
</array>
<key>UIStatusBarHidden</key>
<true/>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
</dict>
</plist>

9
ios/PPSSPP-Prefix.pch Normal file
View File

@ -0,0 +1,9 @@
#import <Availability.h>
#ifndef __IPHONE_4_0
#warning "This project uses features only available in iOS SDK 4.0 and later."
#endif
#ifdef __OBJC__
#import <Foundation/Foundation.h>
#endif

8
ios/ViewController.h Normal file
View File

@ -0,0 +1,8 @@
// ViewController.h boilerplate
#import <UIKit/UIKit.h>
#import <GLKit/GLKit.h>
@interface ViewController : GLKViewController
@end

241
ios/ViewController.mm Normal file
View File

@ -0,0 +1,241 @@
//
// ViewController.m
//
// Created by rock88
// Modified by xSacha
//
#import "ViewController.h"
#import <GLKit/GLKit.h>
#include "base/display.h"
#include "base/timeutil.h"
#include "file/zip_read.h"
#include "input/input_state.h"
#include "net/resolve.h"
#include "ui_atlas.h"
#include "ui/screen.h"
#include "Config.h"
#include "gfx_es2/fbo.h"
#define IS_IPAD() ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad)
extern void UIUpdateMouse(int i, float x, float y, bool down);
float dp_xscale = 1.0f;
float dp_yscale = 1.0f;
static uint32_t pad_buttons_async_set = 0;
static uint32_t pad_buttons_async_clear = 0;
extern ScreenManager *screenManager;
InputState input_state;
extern std::string ram_temp_file;
@interface ViewController ()
@property (strong, nonatomic) EAGLContext *context;
@property (nonatomic,retain) NSString* documentsPath;
@property (nonatomic,retain) NSString* bundlePath;
@property (nonatomic,retain) NSMutableArray* touches;
@end
@implementation ViewController
@synthesize documentsPath,bundlePath,touches;
- (id)init
{
self = [super init];
if (self) {
self.touches = [[[NSMutableArray alloc] init] autorelease];
self.documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
self.bundlePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/"];
memset(&input_state, 0, sizeof(input_state));
net::Init();
ram_temp_file = [[NSTemporaryDirectory() stringByAppendingPathComponent:@"ram_tmp.file"] fileSystemRepresentation];
NativeInit(0, NULL, [self.bundlePath UTF8String], [self.documentsPath UTF8String], NULL);
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.frame = [[UIScreen mainScreen] bounds];
self.view.multipleTouchEnabled = YES;
self.context = [[[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2] autorelease];
GLKView *view = (GLKView *)self.view;
view.context = self.context;
view.drawableDepthFormat = GLKViewDrawableDepthFormat24;
[EAGLContext setCurrentContext:self.context];
float scale = [UIScreen mainScreen].scale;
CGSize size = [[UIApplication sharedApplication].delegate window].frame.size;
if (size.height > size.width) {
float h = size.height;
size.height = size.width;
size.width = h;
}
g_dpi = (IS_IPAD() ? 200 : 150) * scale;
g_dpi_scale = 240.0f / (float)g_dpi;
pixel_xres = size.width * scale;
pixel_yres = size.height * scale;
pixel_in_dps = (float)pixel_xres / (float)dp_xres;
dp_xres = pixel_xres * g_dpi_scale;
dp_yres = pixel_yres * g_dpi_scale;
NativeInitGraphics();
dp_xscale = (float)dp_xres / (float)pixel_xres;
dp_yscale = (float)dp_yres / (float)pixel_yres;
/*
UISwipeGestureRecognizer* gesture = [[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeGesture:)] autorelease];
[self.view addGestureRecognizer:gesture];
*/
}
- (void)viewDidUnload
{
[super viewDidUnload];
if ([EAGLContext currentContext] == self.context) {
[EAGLContext setCurrentContext:nil];
}
self.context = nil;
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
- (void)dealloc
{
[self viewDidUnload];
self.touches = nil;
self.documentsPath = nil;
self.bundlePath = nil;
NativeShutdown();
[super dealloc];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
return YES;
}
//static BOOL menuDown = NO;
- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect
{
lock_guard guard(input_state.lock);
input_state.pad_buttons |= pad_buttons_async_set;
input_state.pad_buttons &= ~pad_buttons_async_clear;
UpdateInputState(&input_state);
{
lock_guard guard(input_state.lock);
UIUpdateMouse(0, input_state.pointer_x[0], input_state.pointer_y[0], input_state.pointer_down[0]);
screenManager->update(input_state);
}
{
lock_guard guard(input_state.lock);
EndInputState(&input_state);
}
NativeRender();
time_update();
}
- (void)swipeGesture:(id)sender
{
// TODO: Use a swipe gesture to handle BACK
/*
pad_buttons_async_set |= PAD_BUTTON_MENU;
pad_buttons_async_clear &= PAD_BUTTON_MENU;
int64_t delayInSeconds = 1.5;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
pad_buttons_async_set &= PAD_BUTTON_MENU;
pad_buttons_async_clear |= PAD_BUTTON_MENU;
});
if (g_Config.bBufferedRendering)
fbo_unbind();
screenManager->push(new InGameMenuScreen());
*/
}
- (void)touchX:(float)x y:(float)y code:(int)code pointerId:(int)pointerId
{
lock_guard guard(input_state.lock);
float scale = [UIScreen mainScreen].scale;
float scaledX = (int)(x * dp_xscale) * scale;
float scaledY = (int)(y * dp_yscale) * scale;
input_state.pointer_x[pointerId] = scaledX;
input_state.pointer_y[pointerId] = scaledY;
if (code == 1) {
input_state.pointer_down[pointerId] = true;
} else if (code == 2) {
input_state.pointer_down[pointerId] = false;
}
input_state.mouse_valid = true;
}
- (void)touchesBegan:(NSSet *)_touches withEvent:(UIEvent *)event
{
for(UITouch* touch in _touches) {
[self.touches addObject:touch];
CGPoint point = [touch locationInView:self.view];
[self touchX:point.x y:point.y code:1 pointerId:[self.touches indexOfObject:touch]];
}
}
- (void)touchesMoved:(NSSet *)_touches withEvent:(UIEvent *)event
{
for(UITouch* touch in _touches) {
CGPoint point = [touch locationInView:self.view];
[self touchX:point.x y:point.y code:0 pointerId:[self.touches indexOfObject:touch]];
}
}
- (void)touchesEnded:(NSSet *)_touches withEvent:(UIEvent *)event
{
for(UITouch* touch in _touches) {
CGPoint point = [touch locationInView:self.view];
[self touchX:point.x y:point.y code:2 pointerId:[self.touches indexOfObject:touch]];
[self.touches removeObject:touch];
}
}
void LaunchBrowser(char const* url)
{
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithCString:url encoding:NSStringEncodingConversionAllowLossy]]];
}
void EnableFZ(){};
void DisableFZ(){};
@end

View File

@ -141,7 +141,7 @@ set (CMAKE_OSX_SYSROOT ${CMAKE_IOS_SDK_ROOT} CACHE PATH "Sysroot used for iOS su
# set the architecture for iOS
# NOTE: Currently both ARCHS_STANDARD_32_BIT and ARCHS_UNIVERSAL_IPHONE_OS set armv7 only, so set both manually
if (${IOS_PLATFORM} STREQUAL "OS")
set (IOS_ARCH armv6 armv7)
set (IOS_ARCH armv7)
else (${IOS_PLATFORM} STREQUAL "OS")
set (IOS_ARCH i386)
endif (${IOS_PLATFORM} STREQUAL "OS")

12
ios/main.m Normal file
View File

@ -0,0 +1,12 @@
// main.m boilerplate
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}