diff --git a/PanoPainter/Assets.xcassets/AppIcon.appiconset/Contents.json b/PanoPainter/Assets.xcassets/AppIcon.appiconset/Contents.json index eeea76c..225fd2e 100644 --- a/PanoPainter/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/PanoPainter/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,5 +1,15 @@ { "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, { "idiom" : "iphone", "size" : "29x29", @@ -30,6 +40,16 @@ "size" : "60x60", "scale" : "3x" }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, { "idiom" : "ipad", "size" : "29x29", @@ -61,9 +81,16 @@ "scale" : "2x" }, { - "idiom" : "ipad", "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "icon512.png", "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "icon1024.png", + "scale" : "1x" } ], "info" : { diff --git a/PanoPainter/Assets.xcassets/AppIcon.appiconset/icon1024.png b/PanoPainter/Assets.xcassets/AppIcon.appiconset/icon1024.png new file mode 100644 index 0000000..5bf10fd Binary files /dev/null and b/PanoPainter/Assets.xcassets/AppIcon.appiconset/icon1024.png differ diff --git a/PanoPainter/Assets.xcassets/AppIcon.appiconset/icon512.png b/PanoPainter/Assets.xcassets/AppIcon.appiconset/icon512.png new file mode 100644 index 0000000..92ee41c Binary files /dev/null and b/PanoPainter/Assets.xcassets/AppIcon.appiconset/icon512.png differ diff --git a/PanoPainter/Base.lproj/Main.storyboard b/PanoPainter/Base.lproj/Main.storyboard index 2fd7b8e..37934bd 100644 --- a/PanoPainter/Base.lproj/Main.storyboard +++ b/PanoPainter/Base.lproj/Main.storyboard @@ -1,8 +1,12 @@ - - + + + + + - + + @@ -14,9 +18,9 @@ - + - + diff --git a/PanoPainter/GameViewController.h b/PanoPainter/GameViewController.h index 2547401..c8cfd3c 100644 --- a/PanoPainter/GameViewController.h +++ b/PanoPainter/GameViewController.h @@ -9,6 +9,6 @@ #import #import -@interface GameViewController : GLKViewController +@interface GameViewController : GLKViewController @end diff --git a/PanoPainter/GameViewController.m b/PanoPainter/GameViewController.m index aa19717..e636d50 100644 --- a/PanoPainter/GameViewController.m +++ b/PanoPainter/GameViewController.m @@ -19,28 +19,98 @@ - (void)tearDownGL; @end +//std::map< +int t_count = 0; + @implementation GameViewController +- (void)insertText:(NSString *)text +{ + if (const char* cstr = [text cStringUsingEncoding:NSASCIIStringEncoding]) + App::I.key_char(cstr[0]); + NSLog(@"%@", text); + // Do something with the typed character +} +- (void)deleteBackward { + App::I.key_char('\b'); + // Handle the delete key +} +- (BOOL)hasText { + // Return whether there's any text present + return YES; +} +- (BOOL)canBecomeFirstResponder { + return YES; +} + - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [[event allTouches] anyObject]; + CGPoint touchLocation = [touch locationInView:self.view]; float scale = self.view.contentScaleFactor; - App::I.mouse_down(0, touchLocation.x * scale, touchLocation.y * scale); + + App::I.mouse_down(0, touchLocation.x * scale, touchLocation.y * scale, touch.force); + t_count = 1; } - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { - UITouch *touch = [[event allTouches] anyObject]; - CGPoint touchLocation = [touch locationInView:self.view]; + NSUInteger n = [[event allTouches] count]; float scale = self.view.contentScaleFactor; - App::I.mouse_move(touchLocation.x * scale, touchLocation.y * scale); + + UITouch* t0 = nullptr; + UITouch* t1 = nullptr; + + t0 = [[[event allTouches] allObjects] objectAtIndex:0]; + CGPoint tl0 = [t0 locationInView:self.view]; + glm::vec2 p0 = glm::vec2(tl0.x * scale, tl0.y * scale); + glm::vec2 p1; + if (n > 1) + { + t1 = [[[event allTouches] allObjects] objectAtIndex:1]; + CGPoint tl1 = [t1 locationInView:self.view]; + p1 = glm::vec2(tl1.x * scale, tl1.y * scale); + } + + if (n == 2) + { + if (t_count == 1) + { + App::I.mouse_cancel(0); + App::I.gesture_start(p0, p1); + } + else + App::I.gesture_move(p0, p1); + t_count = 2; + } + else if (n == 1) + { + UITouch *touch = [[event allTouches] anyObject]; + CGPoint touchLocation = [touch locationInView:self.view]; + //auto p = glm::vec2(touchLocation.x * scale, touchLocation.y * scale); + float force = touch.type == UITouchType::UITouchTypeStylus ? touch.force : 1.0f; + if (t_count == 2) + { + //App::I.gesture_end(); + //App::I.mouse_down(0, touchLocation.x * scale, touchLocation.y * scale, force); + } + else + { + App::I.mouse_move(touchLocation.x * scale, touchLocation.y * scale, force); + } + } } -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [[event allTouches] anyObject]; CGPoint touchLocation = [touch locationInView:self.view]; float scale = self.view.contentScaleFactor; - App::I.mouse_up(0, touchLocation.x * scale, touchLocation.y * scale); + + if (t_count == 2) + App::I.gesture_end(); + else + App::I.mouse_up(0, touchLocation.x * scale, touchLocation.y * scale); + t_count = 0; } - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator @@ -49,11 +119,16 @@ size.height * self.view.contentScaleFactor); } +- (void)viewDidAppear:(BOOL)animated +{ + [self resignFirstResponder]; +} + - (void)viewDidLoad { [super viewDidLoad]; App::I.initLog(); - + App::I.ios_view = self; self.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES3]; diff --git a/engine.xcodeproj/project.pbxproj b/engine.xcodeproj/project.pbxproj index ddf1da2..4ef9843 100644 --- a/engine.xcodeproj/project.pbxproj +++ b/engine.xcodeproj/project.pbxproj @@ -150,6 +150,8 @@ AD58E0771E3421F2006ACC15 /* Yoga.c in Sources */ = {isa = PBXBuildFile; fileRef = AD58E0751E3421F2006ACC15 /* Yoga.c */; }; AD58E0791E342205006ACC15 /* tinyxml2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD58E0781E342205006ACC15 /* tinyxml2.cpp */; }; AD744B6E1EBC9EF800B66E30 /* canvas_modes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD744B6C1EBC9EF700B66E30 /* canvas_modes.cpp */; }; + AD759B681F2796EA00211963 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AD759B671F2796EA00211963 /* OpenGLES.framework */; }; + AD759B691F279B3900211963 /* GLKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AD759B661F27964D00211963 /* GLKit.framework */; }; AD8CF7211E913F0500083FFD /* log.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD8CF71F1E913F0500083FFD /* log.cpp */; }; AD8CF7231E914DE400083FFD /* libcurl.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = AD8CF7221E914DE400083FFD /* libcurl.tbd */; }; AD95AEC61E41EDEC002DD03A /* font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD95AEC31E41EDEC002DD03A /* font.cpp */; }; @@ -163,10 +165,8 @@ ADD7D27E1EBF9AE300D5A897 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = ADD7D27D1EBF9AE300D5A897 /* Assets.xcassets */; }; ADD7D2811EBF9AE300D5A897 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = ADD7D27F1EBF9AE300D5A897 /* LaunchScreen.storyboard */; }; ADD7D2871EBF9C6700D5A897 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ADD7D2861EBF9C6700D5A897 /* Foundation.framework */; }; - ADD7D2891EBF9D2A00D5A897 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ADD7D2881EBF9D2A00D5A897 /* OpenGLES.framework */; }; ADD7D28B1EBF9D5D00D5A897 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ADD7D28A1EBF9D5D00D5A897 /* UIKit.framework */; }; ADD7D28D1EBF9D6F00D5A897 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ADD7D28C1EBF9D6F00D5A897 /* CoreFoundation.framework */; }; - ADD7D28F1EBF9D8C00D5A897 /* GLKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ADD7D28E1EBF9D8C00D5A897 /* GLKit.framework */; }; ADD7D2901EBF9E1C00D5A897 /* canvas_modes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD744B6C1EBC9EF700B66E30 /* canvas_modes.cpp */; }; ADD7D2911EBF9E1C00D5A897 /* event.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ADB1C3D81EA3A156009A65BD /* event.cpp */; }; ADD7D2921EBF9E1C00D5A897 /* action.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD29CC601EA2B214008C8BFA /* action.cpp */; }; @@ -210,7 +210,7 @@ /* Begin PBXFileReference section */ AD02F0C01EDC456800B2E692 /* sequencer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sequencer.cpp; sourceTree = ""; }; AD02F0C11EDC456800B2E692 /* sequencer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sequencer.h; sourceTree = ""; }; - AD0E11921ECA20F200CDA6BB /* app_events.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = app_events.cpp; sourceTree = ""; }; + AD0E11921ECA20F200CDA6BB /* app_events.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp.preprocessed; fileEncoding = 4; path = app_events.cpp; sourceTree = ""; }; AD0E11931ECA20F200CDA6BB /* app_layout.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = app_layout.cpp; sourceTree = ""; }; AD0E11941ECA20F200CDA6BB /* app_shaders.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = app_shaders.cpp; sourceTree = ""; }; AD0E11951ECA20F200CDA6BB /* node_scroll.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = node_scroll.cpp; sourceTree = ""; }; @@ -244,7 +244,7 @@ AD1063641EC7ADFA002A525F /* node_image.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = node_image.h; sourceTree = ""; }; AD1063651EC7ADFA002A525F /* node_message_box.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = node_message_box.cpp; sourceTree = ""; }; AD1063661EC7ADFA002A525F /* node_message_box.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = node_message_box.h; sourceTree = ""; }; - AD1063671EC7ADFA002A525F /* node_panel_brush.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = node_panel_brush.cpp; sourceTree = ""; }; + AD1063671EC7ADFA002A525F /* node_panel_brush.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; path = node_panel_brush.cpp; sourceTree = ""; }; AD1063681EC7ADFA002A525F /* node_panel_brush.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = node_panel_brush.h; sourceTree = ""; }; AD1063691EC7ADFA002A525F /* node_panel_color.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = node_panel_color.cpp; sourceTree = ""; }; AD10636A1EC7ADFA002A525F /* node_panel_color.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = node_panel_color.h; sourceTree = ""; }; @@ -298,13 +298,16 @@ AD58E06C1E2A78BD006ACC15 /* pch.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pch.h; sourceTree = ""; }; AD58E06D1E2A80BC006ACC15 /* shape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = shape.cpp; sourceTree = ""; }; AD58E06E1E2A80BC006ACC15 /* shape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = shape.h; sourceTree = ""; }; - AD58E0701E2A90EF006ACC15 /* app.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = app.cpp; sourceTree = ""; }; + AD58E0701E2A90EF006ACC15 /* app.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; path = app.cpp; sourceTree = ""; }; AD58E0711E2A90EF006ACC15 /* app.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = app.h; sourceTree = ""; }; AD58E0741E3421F2006ACC15 /* YGNodeList.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = YGNodeList.c; path = libs/yoga/yoga/YGNodeList.c; sourceTree = ""; }; AD58E0751E3421F2006ACC15 /* Yoga.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Yoga.c; path = libs/yoga/yoga/Yoga.c; sourceTree = ""; }; AD58E0781E342205006ACC15 /* tinyxml2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tinyxml2.cpp; path = libs/tinyxml2/tinyxml2.cpp; sourceTree = ""; }; AD744B6C1EBC9EF700B66E30 /* canvas_modes.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = canvas_modes.cpp; sourceTree = ""; }; AD744B6D1EBC9EF800B66E30 /* canvas_modes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = canvas_modes.h; sourceTree = ""; }; + AD759B641F2793AE00211963 /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.0.sdk/System/Library/Frameworks/OpenGLES.framework; sourceTree = DEVELOPER_DIR; }; + AD759B661F27964D00211963 /* GLKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.0.sdk/System/Library/Frameworks/GLKit.framework; sourceTree = DEVELOPER_DIR; }; + AD759B671F2796EA00211963 /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/OpenGLES.framework; sourceTree = DEVELOPER_DIR; }; AD8CF71F1E913F0500083FFD /* log.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = log.cpp; sourceTree = ""; }; AD8CF7201E913F0500083FFD /* log.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = log.h; sourceTree = ""; }; AD8CF7221E914DE400083FFD /* libcurl.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libcurl.tbd; path = usr/lib/libcurl.tbd; sourceTree = SDKROOT; }; @@ -327,11 +330,10 @@ ADD7D2801EBF9AE300D5A897 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; ADD7D2821EBF9AE300D5A897 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; ADD7D2861EBF9C6700D5A897 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - ADD7D2881EBF9D2A00D5A897 /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/System/Library/Frameworks/OpenGLES.framework; sourceTree = DEVELOPER_DIR; }; ADD7D28A1EBF9D5D00D5A897 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; ADD7D28C1EBF9D6F00D5A897 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/System/Library/Frameworks/CoreFoundation.framework; sourceTree = DEVELOPER_DIR; }; ADD7D28E1EBF9D8C00D5A897 /* GLKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/System/Library/Frameworks/GLKit.framework; sourceTree = DEVELOPER_DIR; }; - ADD7D2AE1EBFA35F00D5A897 /* libcurl.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libcurl.a; path = "../../Downloads/curl-android-ios-master/prebuilt-with-ssl/iOS/x86_64/libcurl.a"; sourceTree = ""; }; + ADD7D2AE1EBFA35F00D5A897 /* libcurl.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libcurl.a; path = "../../Downloads/curl-android-ios-master/prebuilt-with-ssl/iOS/arm64/libcurl.a"; sourceTree = ""; }; ADD7D2B01EBFA42600D5A897 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/usr/lib/libz.tbd; sourceTree = DEVELOPER_DIR; }; ADD7D2B21EBFA42C00D5A897 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; /* End PBXFileReference section */ @@ -365,12 +367,12 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + AD759B691F279B3900211963 /* GLKit.framework in Frameworks */, ADD7D2B31EBFA42C00D5A897 /* Security.framework in Frameworks */, ADD7D2B11EBFA42600D5A897 /* libz.tbd in Frameworks */, - ADD7D28F1EBF9D8C00D5A897 /* GLKit.framework in Frameworks */, + AD759B681F2796EA00211963 /* OpenGLES.framework in Frameworks */, ADD7D28D1EBF9D6F00D5A897 /* CoreFoundation.framework in Frameworks */, ADD7D28B1EBF9D5D00D5A897 /* UIKit.framework in Frameworks */, - ADD7D2891EBF9D2A00D5A897 /* OpenGLES.framework in Frameworks */, ADD7D2871EBF9C6700D5A897 /* Foundation.framework in Frameworks */, ADD7D2AF1EBFA35F00D5A897 /* libcurl.a in Frameworks */, ); @@ -458,12 +460,12 @@ AD58E0461E107411006ACC15 = { isa = PBXGroup; children = ( + AD759B671F2796EA00211963 /* OpenGLES.framework */, ADD7D2B21EBFA42C00D5A897 /* Security.framework */, ADD7D2B01EBFA42600D5A897 /* libz.tbd */, ADD7D28E1EBF9D8C00D5A897 /* GLKit.framework */, ADD7D28C1EBF9D6F00D5A897 /* CoreFoundation.framework */, ADD7D28A1EBF9D5D00D5A897 /* UIKit.framework */, - ADD7D2881EBF9D2A00D5A897 /* OpenGLES.framework */, ADD7D2861EBF9C6700D5A897 /* Foundation.framework */, AD8CF7221E914DE400083FFD /* libcurl.tbd */, ADD7D2AE1EBFA35F00D5A897 /* libcurl.a */, @@ -477,6 +479,7 @@ ADD7D26C1EBF9AE300D5A897 /* PanoPainter */, AD0E5C9D1ECC6F2B00C35669 /* PanoPainter-OSX */, AD58E0501E107411006ACC15 /* Products */, + AD759B631F2793AD00211963 /* Frameworks */, ); sourceTree = ""; }; @@ -551,6 +554,15 @@ name = libs; sourceTree = ""; }; + AD759B631F2793AD00211963 /* Frameworks */ = { + isa = PBXGroup; + children = ( + AD759B661F27964D00211963 /* GLKit.framework */, + AD759B641F2793AE00211963 /* OpenGLES.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; ADD7D26C1EBF9AE300D5A897 /* PanoPainter */ = { isa = PBXGroup; children = ( @@ -643,9 +655,12 @@ }; AD58E04E1E107411006ACC15 = { CreatedOnToolsVersion = 7.2; + DevelopmentTeam = A6Y3VHN7V9; + ProvisioningStyle = Automatic; }; ADD7D26A1EBF9AE300D5A897 = { CreatedOnToolsVersion = 7.2; + DevelopmentTeam = A6Y3VHN7V9; }; }; }; @@ -936,6 +951,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD)"; CLANG_CXX_LANGUAGE_STANDARD = "c++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; @@ -990,6 +1006,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD)"; CLANG_CXX_LANGUAGE_STANDARD = "c++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; @@ -1036,16 +1053,24 @@ AD58E0571E107411006ACC15 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CODE_SIGN_IDENTITY = "Mac Developer"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = A6Y3VHN7V9; MACH_O_TYPE = mh_execute; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; }; name = Debug; }; AD58E0581E107411006ACC15 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CODE_SIGN_IDENTITY = "Mac Developer"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = A6Y3VHN7V9; MACH_O_TYPE = mh_execute; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; }; name = Release; }; @@ -1057,6 +1082,16 @@ CLANG_ENABLE_MODULES = NO; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = A6Y3VHN7V9; + HEADER_SEARCH_PATHS = ( + "/Users/omimac/Downloads/curl-android-ios-master/prebuilt-with-ssl/iOS/include", + libs/stb, + libs/glm, + libs/yoga, + libs/tinyxml2, + /opt/local/include, + libs/jpeg, + ); INFOPLIST_FILE = PanoPainter/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 9.2; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; @@ -1075,6 +1110,16 @@ CLANG_CXX_LANGUAGE_STANDARD = "c++14"; CLANG_ENABLE_MODULES = NO; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + DEVELOPMENT_TEAM = A6Y3VHN7V9; + HEADER_SEARCH_PATHS = ( + "/Users/omimac/Downloads/curl-android-ios-master/prebuilt-with-ssl/iOS/include", + libs/stb, + libs/glm, + libs/yoga, + libs/tinyxml2, + /opt/local/include, + libs/jpeg, + ); INFOPLIST_FILE = PanoPainter/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 9.2; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; diff --git a/engine/app.cpp b/engine/app.cpp index 3678be6..cb2332e 100644 --- a/engine/app.cpp +++ b/engine/app.cpp @@ -4,6 +4,10 @@ #include "node_icon.h" #include "node_dialog_open.h" +#ifdef __APPLE__ +#include +#endif + using namespace ui; App App::I; // singleton @@ -84,7 +88,13 @@ void App::init() LOG("Screen Resolution: %dx%d", (int)width, (int)height); - zoom = ceilf(width / 1000.f); + zoom = ceilf(width / 2000.f); + +#ifdef __IOS__ + NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); + NSString* docpath = [paths objectAtIndex:0]; + data_path = [docpath cStringUsingEncoding:NSASCIIStringEncoding]; +#endif glDisable(GL_DEPTH_TEST); #if defined(_WIN32) || defined(__OSX__) diff --git a/engine/app.h b/engine/app.h index edee05a..7110c57 100644 --- a/engine/app.h +++ b/engine/app.h @@ -15,6 +15,11 @@ #include "node_panel_stroke.h" #include "node_canvas.h" +#ifdef __OBJC__ +#import +#import "GameViewController.h" +#endif + class App { public: @@ -51,6 +56,12 @@ public: #else float zoom = 1.0; #endif // __ANDROID__ + +#if defined(__IOS__) && defined(__OBJC__) + GameViewController* ios_view; +#endif + void showKeyboard(); + void hideKeyboard(); void initLog(); void init(); void initShaders(); diff --git a/engine/app_events.cpp b/engine/app_events.cpp index 97703b6..6e47880 100644 --- a/engine/app_events.cpp +++ b/engine/app_events.cpp @@ -11,6 +11,20 @@ void App::resize(float w, float h) main->update(w , h, zoom); } +void App::showKeyboard() +{ +#ifdef __IOS__ + [ios_view becomeFirstResponder]; +#endif +} + +void App::hideKeyboard() +{ +#ifdef __IOS__ + [ios_view resignFirstResponder]; +#endif +} + bool App::mouse_down(int button, float x, float y, float pressure) { MouseEvent e; diff --git a/engine/font.cpp b/engine/font.cpp index c9c9e22..0e3afdc 100644 --- a/engine/font.cpp +++ b/engine/font.cpp @@ -16,7 +16,7 @@ bool Font::load(const char* ttf, int font_size) LOG("Font::load loaded"); auto bitmap = std::make_unique(w*h); chars.resize(num_chars); - stbtt_BakeFontBitmap(file.m_data, 0, (float)font_size, bitmap.get(), w, h, start_char, num_chars, chars.data()); + stbtt_BakeFontBitmap(file.m_data, 0, (float)font_size*2, bitmap.get(), w, h, start_char, num_chars, chars.data()); font_tex.create(w, h, GL_R8, GL_RED, bitmap.get()); file.close(); return true; @@ -75,18 +75,18 @@ void TextMesh::update(kFont id, const char* text) stbtt_aligned_quad q; stbtt_GetBakedQuad((stbtt_bakedchar*)f.chars.data(), f.w, f.h, c, &x, &y, &q, true); auto n = (int)v.size(); - v.emplace_back(q.x0, q.y1, q.s0, q.t1); - v.emplace_back(q.x0, q.y0, q.s0, q.t0); - v.emplace_back(q.x1, q.y0, q.s1, q.t0); - v.emplace_back(q.x1, q.y1, q.s1, q.t1); + v.emplace_back(q.x0/2.f, q.y1/2.f, q.s0, q.t1); + v.emplace_back(q.x0/2.f, q.y0/2.f, q.s0, q.t0); + v.emplace_back(q.x1/2.f, q.y0/2.f, q.s1, q.t0); + v.emplace_back(q.x1/2.f, q.y1/2.f, q.s1, q.t1); idx.push_back(n+0); idx.push_back(n+1); idx.push_back(n+2); idx.push_back(n+0); idx.push_back(n+2); idx.push_back(n+3); - bbmin = glm::min(bbmin, { q.x0, q.y0 }); - bbmax = glm::max(bbmax, { q.x1, q.y1 }); + bbmin = glm::min(bbmin, { q.x0/2.f, q.y0/2.f }); + bbmax = glm::max(bbmax, { q.x1/2.f, q.y1/2.f }); } for (int i = 0; i < len*4; i++) { diff --git a/engine/node_canvas.cpp b/engine/node_canvas.cpp index 2b28dd1..f139c0e 100644 --- a/engine/node_canvas.cpp +++ b/engine/node_canvas.cpp @@ -11,7 +11,7 @@ void NodeCanvas::init() { m_mouse_ignore = false; m_canvas = std::make_unique(); - m_canvas->create(2048, 2048); + m_canvas->create(512, 512); m_sampler.create(GL_NEAREST); m_face_plane.create<1>(2, 2); m_line.create(); @@ -25,7 +25,7 @@ void NodeCanvas::init() void NodeCanvas::restore_context() { Node::restore_context(); - m_canvas->create(2048, 2048); + m_canvas->create(512, 512); m_sampler.create(GL_NEAREST); m_face_plane.create<1>(2, 2); m_canvas->snapshot_restore(); diff --git a/engine/node_panel_brush.cpp b/engine/node_panel_brush.cpp index 6a66d90..08793df 100644 --- a/engine/node_panel_brush.cpp +++ b/engine/node_panel_brush.cpp @@ -3,6 +3,10 @@ #include "node_panel_brush.h" #include "asset.h" +#ifdef __APPLE__ +#include +#endif + Node* NodeButtonBrush::clone_instantiate() const { return new NodeButtonBrush(); @@ -99,9 +103,13 @@ std::vector NodePanelBrush::FindAllBrushes(std::string folder) } AAssetDir_close(dir); #else + NSString* bundle_path = [[NSBundle mainBundle] resourcePath]; + std::string base = [bundle_path cStringUsingEncoding:1]; + std::string abs_path = base + "/" + folder; + DIR *dp; struct dirent *ep; - dp = opendir(folder.c_str()); + dp = opendir(abs_path.c_str()); if (dp != NULL) { diff --git a/engine/node_text_input.cpp b/engine/node_text_input.cpp index 1d2f487..434f755 100644 --- a/engine/node_text_input.cpp +++ b/engine/node_text_input.cpp @@ -1,4 +1,5 @@ #include "pch.h" +#include "app.h" #include "log.h" #include "node_text_input.h" @@ -41,6 +42,7 @@ kEventResult NodeTextInput::handle_event(Event* e) switch (e->m_type) { case kEventType::MouseDownL: + App::I.showKeyboard(); break; case kEventType::MouseUpL: key_capture(); diff --git a/engine/pch.h b/engine/pch.h index ee1823e..3219756 100644 --- a/engine/pch.h +++ b/engine/pch.h @@ -14,7 +14,12 @@ #include #define SHADER_VERSION "#version 300 es\n" #elif TARGET_OS_IPHONE - // define something for iphone + #define TARGET_OS_IOS 1 + #define __IOS__ 1 + #include + #include + #include + #define SHADER_VERSION "#version 300 es\n" #else #define TARGET_OS_OSX 1 #define __OSX__ 1