From 26bfb08dfd6377346ad5d5ca4d3c117b36a6a9ce Mon Sep 17 00:00:00 2001 From: Maxime Graulich <maxime.graulich@gmail.com> Date: Fri, 21 Mar 2014 12:03:06 +0000 Subject: [PATCH] iOS: add "about" page and edit rotate/translate --- .../iOS/Onelab.xcodeproj/project.pbxproj | 14 ++++++ contrib/mobile/iOS/Onelab/EAGLView.mm | 21 +++------ .../mobile/iOS/Onelab/ModelListController.mm | 8 ++++ .../mobile/iOS/Onelab/ModelViewController.h | 2 + .../mobile/iOS/Onelab/ModelViewController.mm | 12 ++++-- contrib/mobile/iOS/Onelab/Onelab-Info.plist | 17 -------- .../Onelab/en.lproj/iPadStoryboard.storyboard | 21 +++++++-- .../en.lproj/iPhoneiPodStoryboard.storyboard | 40 +++++++++++++----- contrib/mobile/iOS/Onelab/icon_rotate.png | Bin 0 -> 18386 bytes contrib/mobile/iOS/Onelab/icon_translate.png | Bin 0 -> 7754 bytes 10 files changed, 85 insertions(+), 50 deletions(-) create mode 100644 contrib/mobile/iOS/Onelab/icon_rotate.png create mode 100644 contrib/mobile/iOS/Onelab/icon_translate.png diff --git a/contrib/mobile/iOS/Onelab.xcodeproj/project.pbxproj b/contrib/mobile/iOS/Onelab.xcodeproj/project.pbxproj index cd1a4684fa..9947de4cde 100644 --- a/contrib/mobile/iOS/Onelab.xcodeproj/project.pbxproj +++ b/contrib/mobile/iOS/Onelab.xcodeproj/project.pbxproj @@ -27,6 +27,9 @@ 9C96089D1712C7F600E1D4A0 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C96089C1712C7F600E1D4A0 /* QuartzCore.framework */; }; 9C96089F1712C8EB00E1D4A0 /* emulatorFix.c in Sources */ = {isa = PBXBuildFile; fileRef = 9C96089E1712C8EB00E1D4A0 /* emulatorFix.c */; }; 9C9608AC1712EF0900E1D4A0 /* iPadStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9C9608AA1712EF0900E1D4A0 /* iPadStoryboard.storyboard */; }; + 9CB1CD9818DB2D8700110882 /* icon_rotate.png in Resources */ = {isa = PBXBuildFile; fileRef = 9CB1CD9618DB2D8700110882 /* icon_rotate.png */; }; + 9CB1CD9B18DC36AC00110882 /* AboutViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9CB1CD9A18DC36AC00110882 /* AboutViewController.mm */; }; + 9CB1CD9D18DC57DE00110882 /* icon_translate.png in Resources */ = {isa = PBXBuildFile; fileRef = 9CB1CD9C18DC57DE00110882 /* icon_translate.png */; }; 9CC6EBB717BA0A38001CA21A /* drawGeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9CC6EBB617BA0A38001CA21A /* drawGeom.cpp */; }; 9CC6EBB917BA1CC7001CA21A /* drawMesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9CC6EBB817BA1CC7001CA21A /* drawMesh.cpp */; }; 9CC85C021790286C00F241C4 /* files in Resources */ = {isa = PBXBuildFile; fileRef = 9CC85C011790286C00F241C4 /* files */; }; @@ -76,6 +79,10 @@ 9C96089E1712C8EB00E1D4A0 /* emulatorFix.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = emulatorFix.c; sourceTree = "<group>"; usesTabs = 1; }; 9C9608AB1712EF0900E1D4A0 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = en; path = en.lproj/iPadStoryboard.storyboard; sourceTree = "<group>"; }; 9C99754C17390DEE0036EC24 /* iosGModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iosGModel.h; sourceTree = "<group>"; usesTabs = 1; }; + 9CB1CD9618DB2D8700110882 /* icon_rotate.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon_rotate.png; sourceTree = "<group>"; }; + 9CB1CD9918DC36AC00110882 /* AboutViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AboutViewController.h; sourceTree = "<group>"; }; + 9CB1CD9A18DC36AC00110882 /* AboutViewController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = AboutViewController.mm; sourceTree = "<group>"; }; + 9CB1CD9C18DC57DE00110882 /* icon_translate.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon_translate.png; sourceTree = "<group>"; }; 9CC6EBB617BA0A38001CA21A /* drawGeom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = drawGeom.cpp; sourceTree = "<group>"; usesTabs = 1; }; 9CC6EBB817BA1CC7001CA21A /* drawMesh.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = drawMesh.cpp; sourceTree = "<group>"; }; 9CC85C011790286C00F241C4 /* files */ = {isa = PBXFileReference; lastKnownFileType = folder; path = files; sourceTree = "<group>"; }; @@ -132,6 +139,8 @@ 9C928621180D216500AAABD4 /* icons */ = { isa = PBXGroup; children = ( + 9CB1CD9C18DC57DE00110882 /* icon_translate.png */, + 9CB1CD9618DB2D8700110882 /* icon_rotate.png */, 9C928624180D217A00AAABD4 /* icon_app_ipad_retina.png */, 9C928625180D217A00AAABD4 /* icon_app_ipad.png */, 9C928628180D217B00AAABD4 /* icon_app_iphone_retina.png */, @@ -204,6 +213,8 @@ 9CE18C1F17B27EDB009BA06E /* Parameter.mm */, 9CEAECC517A91CD20014D229 /* ModelListController.h */, 9CEAECC617A91CD20014D229 /* ModelListController.mm */, + 9CB1CD9918DC36AC00110882 /* AboutViewController.h */, + 9CB1CD9A18DC36AC00110882 /* AboutViewController.mm */, 9CEAE87B17AFD5BB00813524 /* SplitViewController.h */, 9CEAE87C17AFD5BB00813524 /* SplitViewController.mm */, 9C96084F1712C16400E1D4A0 /* ParametersViewController.h */, @@ -289,7 +300,9 @@ buildActionMask = 2147483647; files = ( 9C9608AC1712EF0900E1D4A0 /* iPadStoryboard.storyboard in Resources */, + 9CB1CD9818DB2D8700110882 /* icon_rotate.png in Resources */, 9CC85C021790286C00F241C4 /* files in Resources */, + 9CB1CD9D18DC57DE00110882 /* icon_translate.png in Resources */, 9C92862F180D217B00AAABD4 /* icon_app_iphone_retina.png in Resources */, 9C92862C180D217B00AAABD4 /* icon_app_ipad.png in Resources */, 9CE1A65A17B0FB9700E5152F /* iPhoneiPodStoryboard.storyboard in Resources */, @@ -310,6 +323,7 @@ 9C9608511712C16400E1D4A0 /* ParametersViewController.mm in Sources */, 9C9608541712C16400E1D4A0 /* ModelViewController.mm in Sources */, 9C9608741712C47200E1D4A0 /* EAGLView.mm in Sources */, + 9CB1CD9B18DC36AC00110882 /* AboutViewController.mm in Sources */, 9C96089F1712C8EB00E1D4A0 /* emulatorFix.c in Sources */, 9C95B7F61726C88E00C0CCE2 /* main.mm in Sources */, 9C6A645817A7C3DB00DEDAFC /* drawString.cpp in Sources */, diff --git a/contrib/mobile/iOS/Onelab/EAGLView.mm b/contrib/mobile/iOS/Onelab/EAGLView.mm index 14a0ee9d12..606e788472 100644 --- a/contrib/mobile/iOS/Onelab/EAGLView.mm +++ b/contrib/mobile/iOS/Onelab/EAGLView.mm @@ -85,22 +85,11 @@ NSUInteger ntouch = [[event allTouches] count]; UITouch* touch = [touches anyObject]; CGPoint position = [touch locationInView:self]; - switch(ntouch) - { - case 1: - { - mContext->eventHandler(1,position.x,position.y); - } - break; - case 3: - { - rotate = true; - mContext->eventHandler(3,position.x,position.y); - } - break; - default: - return ; - } + if(ntouch != 1) return; + if(rotate) + mContext->eventHandler(3,position.x,position.y); + else + mContext->eventHandler(1,position.x,position.y); [self drawView]; } diff --git a/contrib/mobile/iOS/Onelab/ModelListController.mm b/contrib/mobile/iOS/Onelab/ModelListController.mm index a387d6e5b8..95b5e50493 100644 --- a/contrib/mobile/iOS/Onelab/ModelListController.mm +++ b/contrib/mobile/iOS/Onelab/ModelListController.mm @@ -37,6 +37,14 @@ } } } + + UIBarButtonItem *about = [[UIBarButtonItem alloc] initWithTitle:@"About" style:UIBarButtonItemStyleBordered target:self action:@selector(showAbout)]; + [self.navigationItem setRightBarButtonItems:[NSArray arrayWithObjects: about, nil]]; +} + +-(void)showAbout +{ + [self performSegueWithIdentifier:@"showAboutSegue" sender:self]; } -(void)refreshList diff --git a/contrib/mobile/iOS/Onelab/ModelViewController.h b/contrib/mobile/iOS/Onelab/ModelViewController.h index 9c5d307e1e..16eb121bde 100644 --- a/contrib/mobile/iOS/Onelab/ModelViewController.h +++ b/contrib/mobile/iOS/Onelab/ModelViewController.h @@ -41,4 +41,6 @@ @property (nonatomic, retain) NSString *initialModel; +- (IBAction)startRotation:(UIButton *)sender; + @end diff --git a/contrib/mobile/iOS/Onelab/ModelViewController.mm b/contrib/mobile/iOS/Onelab/ModelViewController.mm index f73c148d71..da88a78644 100644 --- a/contrib/mobile/iOS/Onelab/ModelViewController.mm +++ b/contrib/mobile/iOS/Onelab/ModelViewController.mm @@ -99,7 +99,7 @@ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(requestRender) name:@"requestRender" object:nil]; _runStopButton = [[UIBarButtonItem alloc] initWithTitle:@"Run" style:UIBarButtonItemStyleBordered target:self action:@selector(compute)]; - UIBarButtonItem *share = [[UIBarButtonItem alloc] initWithTitle:@"Share" style:UIBarButtonItemStyleBordered target:self action:@selector(share)]; + //UIBarButtonItem *share = [[UIBarButtonItem alloc] initWithTitle:@"Share" style:UIBarButtonItemStyleBordered target:self action:@selector(share)]; if([[UIDevice currentDevice].model isEqualToString:@"iPad"] || [[UIDevice currentDevice].model isEqualToString:@"iPad Simulator"]){ UIBarButtonItem *model = [[UIBarButtonItem alloc] initWithTitle:@"Model list" style:UIBarButtonItemStyleBordered target:self action:@selector(showModelsList)]; [self.navigationItem setRightBarButtonItems:[NSArray arrayWithObjects:_runStopButton, model, /*share,*/ nil]]; @@ -218,7 +218,7 @@ -(void)prevAnimation { animation_prev(); [self requestRender]; } -(IBAction)pinch:(UIPinchGestureRecognizer *)sender { - if(!glView->rotate && [sender numberOfTouches] <= 2) { + if(!glView->rotate && [sender numberOfTouches] != 1) { float mScale = scaleFactor; if (sender.state == UIGestureRecognizerStateBegan) mScale = scaleFactor; @@ -254,7 +254,6 @@ UITouch *touch = [[event allTouches] anyObject]; CGPoint touchPoint = [touch locationInView:self.view]; glView->mContext->eventHandler(4, touchPoint.x, touchPoint.y); - glView->rotate = false; } - (IBAction)singleTap:(UITapGestureRecognizer *)sender { @@ -412,4 +411,11 @@ void getBitmap(void *self, const char *text, int textsize, unsigned char **map, *(*map+byteIndex/4) = rawData[byteIndex + 3]; free(rawData); } +- (IBAction)startRotation:(UIButton *)sender { + glView->rotate = !glView->rotate; + if(glView->rotate) + [sender setImage:[UIImage imageNamed:@"icon_translate.png"] forState:UIControlStateNormal]; + else + [sender setImage:[UIImage imageNamed:@"icon_rotate.png"] forState:UIControlStateNormal]; +} @end diff --git a/contrib/mobile/iOS/Onelab/Onelab-Info.plist b/contrib/mobile/iOS/Onelab/Onelab-Info.plist index 4a16e04527..3677b436e5 100644 --- a/contrib/mobile/iOS/Onelab/Onelab-Info.plist +++ b/contrib/mobile/iOS/Onelab/Onelab-Info.plist @@ -2,23 +2,6 @@ <!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>CFBundleDocumentTypes</key> - <array> - <dict> - <key>CFBundleTypeExtensions</key> - <array> - <string>onelab</string> - </array> - <key>CFBundleTypeName</key> - <string>Onelab package</string> - <key>LSTypeIsPackage</key> - <true/> - </dict> - </array> <key>CFBundleExecutable</key> <string>${EXECUTABLE_NAME}</string> <key>CFBundleIcons</key> diff --git a/contrib/mobile/iOS/Onelab/en.lproj/iPadStoryboard.storyboard b/contrib/mobile/iOS/Onelab/en.lproj/iPadStoryboard.storyboard index 4581de2000..aeb1720540 100644 --- a/contrib/mobile/iOS/Onelab/en.lproj/iPadStoryboard.storyboard +++ b/contrib/mobile/iOS/Onelab/en.lproj/iPadStoryboard.storyboard @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="4510" systemVersion="12F37" targetRuntime="iOS.CocoaTouch.iPad" propertyAccessControl="none" initialViewController="dwa-Pq-2vA"> +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="5053" systemVersion="13C64" targetRuntime="iOS.CocoaTouch.iPad" propertyAccessControl="none" initialViewController="dwa-Pq-2vA"> <dependencies> - <deployment defaultVersion="1536" identifier="iOS"/> - <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3742"/> + <deployment defaultVersion="1792" identifier="iOS"/> + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3733"/> </dependencies> <scenes> <!--Navigation Controller--> @@ -46,6 +46,16 @@ <rect key="frame" x="20" y="708" width="20" height="20"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> </activityIndicatorView> + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="right" contentVerticalAlignment="bottom" lineBreakMode="middleTruncation" id="GRU-nz-BNs"> + <rect key="frame" x="652" y="722" width="30" height="30"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> + <state key="normal" image="icon_rotate.png"> + <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/> + </state> + <connections> + <action selector="startRotation:" destination="4" eventType="touchUpInside" id="Ufg-Lv-KVt"/> + </connections> + </button> </subviews> <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> <simulatedOrientationMetrics key="simulatedOrientationMetrics" orientation="landscapeRight"/> @@ -307,9 +317,12 @@ <point key="canvasLocation" x="336" y="340"/> </scene> </scenes> + <resources> + <image name="icon_rotate.png" width="512" height="512"/> + </resources> <simulatedMetricsContainer key="defaultSimulatedMetrics"> <simulatedStatusBarMetrics key="statusBar"/> <simulatedOrientationMetrics key="orientation"/> <simulatedScreenMetrics key="destination"/> </simulatedMetricsContainer> -</document> \ No newline at end of file +</document> diff --git a/contrib/mobile/iOS/Onelab/en.lproj/iPhoneiPodStoryboard.storyboard b/contrib/mobile/iOS/Onelab/en.lproj/iPhoneiPodStoryboard.storyboard index 84217ff7c4..f9b64bf586 100644 --- a/contrib/mobile/iOS/Onelab/en.lproj/iPhoneiPodStoryboard.storyboard +++ b/contrib/mobile/iOS/Onelab/en.lproj/iPhoneiPodStoryboard.storyboard @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="2.0" toolsVersion="4510" systemVersion="12F37" targetRuntime="iOS.CocoaTouch" variant="6xAndEarlier" propertyAccessControl="none" useAutolayout="YES" initialViewController="vAG-uz-hfU"> +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="2.0" toolsVersion="5053" systemVersion="13C64" targetRuntime="iOS.CocoaTouch" variant="6xAndEarlier" propertyAccessControl="none" useAutolayout="YES" initialViewController="vAG-uz-hfU"> <dependencies> - <deployment defaultVersion="1536" identifier="iOS"/> + <deployment defaultVersion="1792" identifier="iOS"/> <development version="4600" identifier="xcode"/> - <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3742"/> + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3733"/> </dependencies> <scenes> <!--Model List Controller - Model list--> @@ -55,16 +55,33 @@ <constraint firstAttribute="width" constant="20" id="f9c-ZY-6q4"/> </constraints> </activityIndicatorView> + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="l9e-j0-zky"> + <rect key="frame" x="270" y="464" width="30" height="30"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> + <constraints> + <constraint firstAttribute="height" constant="30" id="NdA-3S-xkw"/> + <constraint firstAttribute="width" constant="30" id="hcG-Wv-rkt"/> + </constraints> + <fontDescription key="fontDescription" type="system" pointSize="18"/> + <state key="normal" title=" " image="icon_rotate.png"> + <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/> + </state> + <connections> + <action selector="startRotation:" destination="NyB-7w-cP0" eventType="touchUpInside" id="Uz9-hR-WIi"/> + </connections> + </button> </subviews> <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> <gestureRecognizers/> <constraints> - <constraint firstAttribute="trailing" secondItem="yT7-IR-qUJ" secondAttribute="trailing" constant="20" symbolic="YES" type="default" id="02X-Hf-QoA"/> - <constraint firstAttribute="bottom" secondItem="yT7-IR-qUJ" secondAttribute="bottom" constant="20" symbolic="YES" type="default" id="4by-pW-cH0"/> - <constraint firstItem="Fuh-zG-zVR" firstAttribute="centerY" secondItem="yT7-IR-qUJ" secondAttribute="centerY" type="default" id="BLC-3x-kRj"/> - <constraint firstItem="Fuh-zG-zVR" firstAttribute="top" secondItem="yT7-IR-qUJ" secondAttribute="top" type="default" id="REs-y3-luE"/> + <constraint firstItem="yT7-IR-qUJ" firstAttribute="bottom" secondItem="Fuh-zG-zVR" secondAttribute="bottom" type="default" id="AP1-zU-goA"/> + <constraint firstAttribute="bottom" secondItem="Fuh-zG-zVR" secondAttribute="bottom" constant="20" symbolic="YES" type="default" id="J47-7T-QdC"/> + <constraint firstItem="l9e-j0-zky" firstAttribute="top" secondItem="Fuh-zG-zVR" secondAttribute="top" type="default" id="Wag-TJ-vx5"/> + <constraint firstAttribute="trailing" secondItem="yT7-IR-qUJ" secondAttribute="trailing" constant="20" symbolic="YES" type="default" id="g9K-qJ-W8Q"/> + <constraint firstItem="l9e-j0-zky" firstAttribute="trailing" secondItem="yT7-IR-qUJ" secondAttribute="trailing" type="default" id="il1-8K-evV"/> <constraint firstItem="yT7-IR-qUJ" firstAttribute="leading" secondItem="Fuh-zG-zVR" secondAttribute="trailing" constant="8" symbolic="YES" type="default" id="oc4-6x-CF7"/> <constraint firstItem="Fuh-zG-zVR" firstAttribute="leading" secondItem="zrj-Dd-WPc" secondAttribute="leading" constant="20" symbolic="YES" type="default" id="qfh-y2-BuW"/> + <constraint firstItem="l9e-j0-zky" firstAttribute="top" secondItem="yT7-IR-qUJ" secondAttribute="top" type="default" id="wy0-ch-fl3"/> </constraints> <connections> <outletCollection property="gestureRecognizers" destination="7R3-zZ-cpa" appends="YES" id="K8X-lL-YUb"/> @@ -225,13 +242,13 @@ <textInputTraits key="textInputTraits"/> </textField> <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Raise (Z)" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Bfu-t9-dAj"> - <rect key="frame" x="-8" y="265" width="91" height="21"/> + <rect key="frame" x="-8" y="273" width="91" height="21"/> <fontDescription key="fontDescription" type="system" pointSize="17"/> <color key="textColor" cocoaTouchSystemColor="darkTextColor"/> <nil key="highlightedColor"/> </label> <slider opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" minValue="-5" maxValue="5" translatesAutoresizingMaskIntoConstraints="NO" id="BC5-E7-rEF"> - <rect key="frame" x="89" y="264" width="185" height="23"/> + <rect key="frame" x="89" y="264" width="185" height="31"/> </slider> <pickerView contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="xW0-cN-kxL"> <rect key="frame" x="0.0" y="0.0" width="292" height="216"/> @@ -292,9 +309,12 @@ <point key="canvasLocation" x="1596" y="160"/> </scene> </scenes> + <resources> + <image name="icon_rotate.png" width="512" height="512"/> + </resources> <simulatedMetricsContainer key="defaultSimulatedMetrics"> <simulatedStatusBarMetrics key="statusBar"/> <simulatedOrientationMetrics key="orientation"/> <simulatedScreenMetrics key="destination" type="retina4"/> </simulatedMetricsContainer> -</document> \ No newline at end of file +</document> diff --git a/contrib/mobile/iOS/Onelab/icon_rotate.png b/contrib/mobile/iOS/Onelab/icon_rotate.png new file mode 100644 index 0000000000000000000000000000000000000000..0f0ec77d927c324994704e7064ac2125110060a3 GIT binary patch literal 18386 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%0D})%3DfL@5q0~n0D{5uh(=|tdg5(R-|Y*xihiZ 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 QU|?YIboFyt=akR{0ElUw5C8xG literal 0 HcmV?d00001 diff --git a/contrib/mobile/iOS/Onelab/icon_translate.png b/contrib/mobile/iOS/Onelab/icon_translate.png new file mode 100644 index 0000000000000000000000000000000000000000..2c43ceab43ff0d8214f7b41ba6e47b6566f55e36 GIT binary patch literal 7754 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 literal 0 HcmV?d00001 -- GitLab