Browse Source

fix creating SDL window, enforce landscape

Andrey Filipenkov 4 years ago
parent
commit
a33db4f03b
4 changed files with 57 additions and 1 deletions
  1. 7 0
      Info.plist
  2. 20 1
      client/CMT.cpp
  3. 3 0
      client/CMakeLists.txt
  4. 27 0
      client/LaunchScreen.storyboard

+ 7 - 0
Info.plist

@@ -56,12 +56,19 @@
 	</array>
 	</array>
 	<key>UIFileSharingEnabled</key>
 	<key>UIFileSharingEnabled</key>
 	<true/>
 	<true/>
+	<key>UILaunchStoryboardName</key>
+	<string>LaunchScreen</string>
 	<key>UIRequiredDeviceCapabilities</key>
 	<key>UIRequiredDeviceCapabilities</key>
 	<array>
 	<array>
 		<string>armv7</string>
 		<string>armv7</string>
 	</array>
 	</array>
 	<key>UIRequiresFullScreen</key>
 	<key>UIRequiresFullScreen</key>
 	<true/>
 	<true/>
+	<key>UISupportedInterfaceOrientations</key>
+	<array>
+		<string>UIInterfaceOrientationLandscapeLeft</string>
+		<string>UIInterfaceOrientationLandscapeRight</string>
+	</array>
 	<key>UIUserInterfaceStyle</key>
 	<key>UIUserInterfaceStyle</key>
 	<string>Light</string>
 	<string>Light</string>
 </dict>
 </dict>

+ 20 - 1
client/CMT.cpp

@@ -1027,11 +1027,13 @@ static bool recreateWindow(int w, int h, int bpp, bool fullscreen, int displayIn
 		if (displayIndex < 0)
 		if (displayIndex < 0)
 			displayIndex = 0;
 			displayIndex = 0;
 	}
 	}
+#ifndef VCMI_IOS
 	if(!checkVideoMode(displayIndex, w, h))
 	if(!checkVideoMode(displayIndex, w, h))
 	{
 	{
 		logGlobal->error("Error: SDL says that %dx%d resolution is not available!", w, h);
 		logGlobal->error("Error: SDL says that %dx%d resolution is not available!", w, h);
 		return false;
 		return false;
 	}
 	}
+#endif
 
 
 	bool bufOnScreen = (screenBuf == screen);
 	bool bufOnScreen = (screenBuf == screen);
 	bool realFullscreen = settings["video"]["realFullscreen"].Bool();
 	bool realFullscreen = settings["video"]["realFullscreen"].Bool();
@@ -1124,6 +1126,23 @@ static bool recreateWindow(int w, int h, int bpp, bool fullscreen, int displayIn
 		{
 		{
 			logGlobal->error("Can't fix aspect ratio for screen");
 			logGlobal->error("Can't fix aspect ratio for screen");
 		}
 		}
+    #elif defined(VCMI_IOS)
+        auto createWindow = [displayIndex](Uint32 extraFlags = 0) {
+            mainWindow = SDL_CreateWindow(NAME.c_str(), SDL_WINDOWPOS_UNDEFINED_DISPLAY(displayIndex), SDL_WINDOWPOS_UNDEFINED_DISPLAY(displayIndex), 0, 0, SDL_WINDOW_FULLSCREEN/*_DESKTOP*/ | SDL_WINDOW_BORDERLESS | SDL_WINDOW_ALLOW_HIGHDPI | extraFlags);
+            return mainWindow != nullptr;
+        };
+        if (!createWindow(SDL_WINDOW_METAL))
+        {
+            logGlobal->warn("Metal unavailable, using OpenGL ES");
+            createWindow();
+        }
+        SDL_SetHint(SDL_HINT_ORIENTATIONS, "LandscapeLeft LandscapeRight"); // TODO: isn't setting in Info.plist not enough?
+        SDL_SetHint(SDL_HINT_IOS_HIDE_HOME_INDICATOR, "1");
+        //SDL_HINT_RETURN_KEY_HIDES_IME
+
+        logGlobal->info("before SDL_GetWindowSize %dx%d", w, h);
+        SDL_GetWindowSize(mainWindow, &w, &h);
+        logGlobal->info("after SDL_GetWindowSize %dx%d", w, h);
 	#else
 	#else
 
 
 		if(fullscreen)
 		if(fullscreen)
@@ -1161,7 +1180,7 @@ static bool recreateWindow(int w, int h, int bpp, bool fullscreen, int displayIn
 	}
 	}
 	else
 	else
 	{
 	{
-#ifndef VCMI_ANDROID
+#if !defined(VCMI_ANDROID) && !defined(VCMI_IOS)
 
 
 		if(fullscreen)
 		if(fullscreen)
 		{
 		{

+ 3 - 0
client/CMakeLists.txt

@@ -179,6 +179,9 @@ elseif(APPLE_IOS)
 	target_link_libraries(vcmiclient PRIVATE
 	target_link_libraries(vcmiclient PRIVATE
 		"-framework Foundation -framework UIKit -framework QuartzCore -framework CoreGraphics -framework CoreServices -framework ImageIO" # SDL2_image
 		"-framework Foundation -framework UIKit -framework QuartzCore -framework CoreGraphics -framework CoreServices -framework ImageIO" # SDL2_image
 	)
 	)
+
+	target_sources(vcmiclient PRIVATE ${CMAKE_SOURCE_DIR}/client/LaunchScreen.storyboard)
+	set_source_files_properties(${CMAKE_SOURCE_DIR}/client/LaunchScreen.storyboard PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
 endif()
 endif()
 
 
 target_link_libraries(vcmiclient PRIVATE
 target_link_libraries(vcmiclient PRIVATE

+ 27 - 0
client/LaunchScreen.storyboard

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="17701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
+    <device id="retina4_7" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment version="2304" identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="17703"/>
+        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <scenes>
+        <!--View Controller-->
+        <scene sceneID="EHf-IW-A2E">
+            <objects>
+                <viewController id="01J-lp-oVM" sceneMemberID="viewController">
+                    <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
+                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <viewLayoutGuide key="safeArea" id="Jnx-JV-IwA"/>
+                        <color key="backgroundColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    </view>
+                </viewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="53" y="375"/>
+        </scene>
+    </scenes>
+</document>