├── .gitignore ├── LICENSE ├── Podfile ├── Podfile.lock ├── README.md ├── Screen Ruler.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ └── contents.xcworkspacedata └── xcshareddata │ └── xcschemes │ └── ScreenRuler.xcscheme ├── Screen Ruler.xcworkspace └── contents.xcworkspacedata └── ScreenRuler ├── AppDelegate ├── AppDelegate.h └── AppDelegate.m ├── AssetsAndResources ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── Icon-60.png │ │ ├── Icon-60@2x.png │ │ ├── Icon-60@3x.png │ │ ├── Icon-76.png │ │ ├── Icon-76@2x.png │ │ ├── Icon-Small.png │ │ ├── Icon-Small@2x-1.png │ │ ├── Icon-Small@2x.png │ │ ├── Icon-Small@3x.png │ │ ├── Icon-Spotlight-40.png │ │ ├── Icon-Spotlight-40@2x-1.png │ │ ├── Icon-Spotlight-40@2x.png │ │ ├── Icon-Spotlight-40@3x.png │ │ ├── Icon-Spotlight-41.png │ │ ├── Icon-Spotlight-42.png │ │ ├── Icon-Spotlight-43.png │ │ └── Icon-iPadPro@2x.png │ ├── Arrow Icons │ │ ├── Contents.json │ │ ├── arrow-down.imageset │ │ │ ├── Contents.json │ │ │ ├── arrow-down@2x.png │ │ │ └── arrow-down@3x.png │ │ ├── arrow-left.imageset │ │ │ ├── Contents.json │ │ │ ├── arrow-left@2x.png │ │ │ └── arrow-left@3x.png │ │ ├── arrow-right.imageset │ │ │ ├── Contents.json │ │ │ ├── arrow-right@2x.png │ │ │ └── arrow-right@3x.png │ │ └── arrow-top.imageset │ │ │ ├── Contents.json │ │ │ ├── arrow-top@2x.png │ │ │ └── arrow-top@3x.png │ ├── Brand Assets.launchimage │ │ ├── Contents.json │ │ ├── Default@2x.png │ │ ├── Default~568h@2x.png │ │ ├── Default~667h@2x.png │ │ ├── Default~736h@2x.png │ │ ├── Default~736w@2x.png │ │ ├── Default~iPad.png │ │ ├── Default~iPad@2x.png │ │ ├── Default~iPad~w@2x.png │ │ └── Default~iPad~width.png │ ├── Contents.json │ ├── Features │ │ ├── Contents.json │ │ ├── color_palette.imageset │ │ │ ├── Contents.json │ │ │ ├── color_palette@2x.png │ │ │ └── color_palette@3x.png │ │ ├── crop.imageset │ │ │ ├── Contents.json │ │ │ ├── crop@2x.png │ │ │ └── crop@3x.png │ │ ├── edit.imageset │ │ │ ├── Contents.json │ │ │ ├── edit@2x.png │ │ │ └── edit@3x.png │ │ ├── horizontal_ruler.imageset │ │ │ ├── Contents.json │ │ │ ├── horizontal_ruler@2x.png │ │ │ └── horizontal_ruler@3x.png │ │ ├── line_frame.imageset │ │ │ ├── Contents.json │ │ │ ├── line_frame@2x.png │ │ │ └── line_frame@3x.png │ │ ├── protractor.imageset │ │ │ ├── Contents.json │ │ │ ├── protractor@2x.png │ │ │ └── protractor@3x.png │ │ ├── ratio.imageset │ │ │ ├── Contents.json │ │ │ ├── ratio@2x.png │ │ │ └── ratio@3x.png │ │ ├── resize.imageset │ │ │ ├── Contents.json │ │ │ ├── resize@2x.png │ │ │ └── resize@3x.png │ │ ├── rotate.imageset │ │ │ ├── Contents.json │ │ │ ├── rotate@2x.png │ │ │ └── rotate@3x.png │ │ └── vertical_ruler.imageset │ │ │ ├── Contents.json │ │ │ ├── vertical_ruler@2x.png │ │ │ └── vertical_ruler@3x.png │ ├── Gestures │ │ ├── Contents.json │ │ ├── DoubleTap.imageset │ │ │ ├── Contents.json │ │ │ └── DoubleTap.png │ │ ├── Pinch.imageset │ │ │ ├── Contents.json │ │ │ └── Pinch.png │ │ ├── Press-and-Drag.imageset │ │ │ ├── Contents.json │ │ │ └── Press-and-Drag.png │ │ ├── Press.imageset │ │ │ ├── Contents.json │ │ │ └── Press.png │ │ ├── Rotate.imageset │ │ │ ├── Contents.json │ │ │ └── Rotate.png │ │ ├── Scroll-Horizontal.imageset │ │ │ ├── Contents.json │ │ │ └── Scroll-Horizontal.png │ │ ├── Scroll-Vertical.imageset │ │ │ ├── Contents.json │ │ │ └── Scroll-Vertical.png │ │ ├── Tap.imageset │ │ │ ├── Contents.json │ │ │ └── Tap.png │ │ └── Zoom.imageset │ │ │ ├── Contents.json │ │ │ └── Zoom.png │ ├── GitHub-Mark.imageset │ │ ├── Contents.json │ │ ├── GitHub-Mark@2x.png │ │ └── GitHub-Mark@3x.png │ ├── iPhone-sceenshot.imageset │ │ ├── Contents.json │ │ ├── iPhone-sceenshot@2x.png │ │ └── iPhone-sceenshot@3x.png │ ├── option.imageset │ │ ├── Contents.json │ │ ├── option@2x.png │ │ └── option@3x.png │ ├── photo_access.imageset │ │ ├── Contents.json │ │ ├── photo_access@2x.png │ │ └── photo_access@3x.png │ ├── photo_library.imageset │ │ ├── Contents.json │ │ ├── photo_library@2x.png │ │ └── photo_library@3x.png │ ├── ruler_logo.imageset │ │ ├── Contents.json │ │ ├── ruler_logo@2x.png │ │ └── ruler_logo@3x.png │ └── settings.imageset │ │ ├── Contents.json │ │ ├── settings@2x.png │ │ └── settings@3x.png ├── Icon-60.png ├── iTunesArtwork └── iTunesArtwork@2x ├── Base.lproj ├── InfoPlist.strings ├── LaunchScreen.storyboard ├── Localizable.strings └── Main.storyboard ├── Categories ├── UIColor+ThemeColor.h ├── UIColor+ThemeColor.m ├── UIFont+AppFont.h ├── UIFont+AppFont.m ├── UIImage+Color.h └── UIImage+Color.m ├── Info.plist ├── Other ├── RoundedCornerView.h ├── RoundedCornerView.m ├── SRIconsGeneratorViewController.h └── SRIconsGeneratorViewController.m ├── Subclasses ├── SRImagePickerController.h ├── SRImagePickerController.m ├── SRNavigationBar.h ├── SRNavigationBar.m ├── SRNavigationController.h ├── SRNavigationController.m ├── SRToolbar.h ├── SRToolbar.m ├── SRToolbarButton.h └── SRToolbarButton.m ├── Vendor ├── ACMagnifyingGlass │ ├── ACMagnifyingGlass.h │ ├── ACMagnifyingGlass.m │ └── Resources │ │ └── kb-loupe-hi_7.png ├── Classes │ ├── CBZRasterSplashView.h │ ├── CBZRasterSplashView.m │ ├── CBZSplashView.h │ ├── CBZSplashView.m │ ├── CBZVectorSplashView.h │ ├── CBZVectorSplashView.m │ ├── UIBezierPath+Shapes.h │ └── UIBezierPath+Shapes.m ├── DebugHelper │ ├── SRDebugHelper.h │ └── SRDebugHelper.m ├── IQAngleView │ ├── IQAngleView.h │ ├── IQAngleView.m │ ├── IQProtractorView.h │ └── IQProtractorView.m ├── IQColorPicker │ ├── HFColorPicker │ │ ├── HFColorButton.h │ │ ├── HFColorButton.m │ │ ├── HFColorPickerView.h │ │ └── HFColorPickerView.m │ ├── IQColorPickerButton.h │ ├── IQColorPickerButton.m │ ├── IQTextPickerButton.h │ ├── IQTextPickerButton.m │ ├── UIColor+HexColors.h │ └── UIColor+HexColors.m ├── IQCropperView │ ├── IQCropperView.h │ ├── IQCropperView.m │ ├── UIImage+CropRotate.h │ └── UIImage+CropRotate.m ├── IQGeometry │ ├── IQGeometry+AffineTransform.h │ ├── IQGeometry+AffineTransform.m │ ├── IQGeometry+Angle.h │ ├── IQGeometry+Angle.m │ ├── IQGeometry+Distance.h │ ├── IQGeometry+Distance.m │ ├── IQGeometry+Line.h │ ├── IQGeometry+Line.m │ ├── IQGeometry+Point.h │ ├── IQGeometry+Point.m │ ├── IQGeometry+Rect.h │ ├── IQGeometry+Rect.m │ ├── IQGeometry+Size.h │ ├── IQGeometry+Size.m │ └── IQGeometry.h ├── IQLineFrameView │ ├── IQLineFrameView.h │ ├── IQLineFrameView.m │ ├── NSMutableArray+Stack.h │ ├── NSMutableArray+Stack.m │ ├── SRLineImageView.h │ └── SRLineImageView.m ├── IQRulerScrollView │ ├── IQRulerScrollView.h │ ├── IQRulerScrollView.m │ ├── IQScrollContainerView.h │ ├── IQScrollContainerView.m │ ├── UIScrollView+Addition.h │ └── UIScrollView+Addition.m ├── IQRulerView │ ├── IQRulerView.h │ └── IQRulerView.m ├── MPCoachMarks │ ├── MPCoachMark.h │ ├── MPCoachMark.m │ ├── MPCoachMarkView.h │ └── MPCoachMarkView.m ├── SmoothedBIView │ ├── IQ_SmoothedBIView.h │ └── IQ_SmoothedBIView.m └── UIImage+FloodFill │ ├── LinkedListStack.h │ ├── LinkedListStack.m │ ├── UIImage+FloodFill.h │ └── UIImage+FloodFill.m ├── ViewControllers ├── Home Page Flow │ ├── SRCropViewController.h │ ├── SRCropViewController.m │ ├── SRDrawViewController.h │ ├── SRDrawViewController.m │ ├── SREditOptionViewController.h │ ├── SREditOptionViewController.m │ ├── SRHomeViewController.h │ └── SRHomeViewController.m ├── Onboarding Controllers │ ├── SROnboardingMagnifierController.h │ ├── SROnboardingMagnifierController.m │ ├── SROnboardingNavigationController.h │ ├── SROnboardingNavigationController.m │ ├── SROnboardingProtractorController.h │ ├── SROnboardingProtractorController.m │ ├── SROnboardingRulerScaleController.h │ ├── SROnboardingRulerScaleController.m │ ├── SROnboardingScaleAdjustController.h │ ├── SROnboardingScaleAdjustController.m │ ├── SROnboardingScreenScaleController.h │ ├── SROnboardingScreenScaleController.m │ ├── SROnboardingWelcomeController.h │ ├── SROnboardingWelcomeController.m │ ├── SROnboardingZoomController.h │ └── SROnboardingZoomController.m ├── Screenshot Picker Flow │ ├── Cell │ │ ├── SRScreenshotCollectionViewCell.h │ │ └── SRScreenshotCollectionViewCell.m │ ├── SRScreenshotCollectionViewController.h │ └── SRScreenshotCollectionViewController.m └── Settings Flow │ ├── Cell │ ├── SRLicenseTableViewCell.h │ ├── SRLicenseTableViewCell.m │ ├── SRSettingsTableViewCell.h │ ├── SRSettingsTableViewCell.m │ ├── SRThemeTableViewCell.h │ ├── SRThemeTableViewCell.m │ ├── SRVersionTableViewCell.h │ └── SRVersionTableViewCell.m │ ├── Resources │ ├── Acknowledgement.plist │ └── EULA.html │ ├── SRAcknowledgementTableViewController.h │ ├── SRAcknowledgementTableViewController.m │ ├── SRDeveloperSettingsViewController.h │ ├── SRDeveloperSettingsViewController.m │ ├── SRPrivacyPolicyViewController.h │ ├── SRPrivacyPolicyViewController.m │ ├── SRSettingTableViewController.h │ └── SRSettingTableViewController.m ├── ar.lproj ├── InfoPlist.strings └── Localizable.strings ├── ca.lproj ├── InfoPlist.strings └── Localizable.strings ├── da.lproj ├── InfoPlist.strings └── Localizable.strings ├── de.lproj ├── InfoPlist.strings └── Localizable.strings ├── el.lproj ├── InfoPlist.strings └── Localizable.strings ├── en.lproj ├── InfoPlist.strings └── Localizable.strings ├── es-MX.lproj ├── InfoPlist.strings └── Localizable.strings ├── es.lproj ├── InfoPlist.strings └── Localizable.strings ├── fi.lproj ├── InfoPlist.strings └── Localizable.strings ├── fil-PH.lproj ├── InfoPlist.strings └── Localizable.strings ├── fil.lproj ├── InfoPlist.strings └── Localizable.strings ├── fr-CA.lproj ├── InfoPlist.strings └── Localizable.strings ├── fr.lproj ├── InfoPlist.strings └── Localizable.strings ├── hi.lproj ├── InfoPlist.strings └── Localizable.strings ├── id.lproj ├── InfoPlist.strings └── Localizable.strings ├── it.lproj ├── InfoPlist.strings └── Localizable.strings ├── ja.lproj ├── InfoPlist.strings └── Localizable.strings ├── ko.lproj ├── InfoPlist.strings └── Localizable.strings ├── main.m ├── ms.lproj ├── InfoPlist.strings └── Localizable.strings ├── nl.lproj ├── InfoPlist.strings └── Localizable.strings ├── pl.lproj ├── InfoPlist.strings └── Localizable.strings ├── pt-BR.lproj ├── InfoPlist.strings └── Localizable.strings ├── pt-PT.lproj ├── InfoPlist.strings └── Localizable.strings ├── ro.lproj ├── InfoPlist.strings └── Localizable.strings ├── ru.lproj ├── InfoPlist.strings └── Localizable.strings ├── sk.lproj ├── InfoPlist.strings └── Localizable.strings ├── sv.lproj ├── InfoPlist.strings └── Localizable.strings ├── ta-IN.lproj ├── InfoPlist.strings └── Localizable.strings ├── ta-LK.lproj ├── InfoPlist.strings └── Localizable.strings ├── ta-MY.lproj ├── InfoPlist.strings └── Localizable.strings ├── ta-SG.lproj ├── InfoPlist.strings └── Localizable.strings ├── ta.lproj ├── InfoPlist.strings └── Localizable.strings ├── th.lproj ├── InfoPlist.strings └── Localizable.strings ├── tr.lproj ├── InfoPlist.strings └── Localizable.strings ├── uk.lproj ├── InfoPlist.strings └── Localizable.strings ├── vi.lproj ├── InfoPlist.strings └── Localizable.strings ├── zh-Hans.lproj ├── InfoPlist.strings └── Localizable.strings └── zh-Hant.lproj ├── InfoPlist.strings └── Localizable.strings /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## Build generated 6 | build/ 7 | DerivedData/ 8 | 9 | ## Various settings 10 | *.pbxuser 11 | !default.pbxuser 12 | *.mode1v3 13 | !default.mode1v3 14 | *.mode2v3 15 | !default.mode2v3 16 | *.perspectivev3 17 | !default.perspectivev3 18 | xcuserdata/ 19 | 20 | ## Other 21 | *.moved-aside 22 | *.xcuserstate 23 | 24 | ## Obj-C/Swift specific 25 | *.hmap 26 | *.ipa 27 | *.dSYM.zip 28 | *.dSYM 29 | 30 | # CocoaPods 31 | # 32 | # We recommend against adding the Pods directory to your .gitignore. However 33 | # you should judge for yourself, the pros and cons are mentioned at: 34 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 35 | # 36 | Pods/ 37 | 38 | # Carthage 39 | # 40 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 41 | Carthage/Checkouts 42 | 43 | Carthage/Build 44 | 45 | # fastlane 46 | # 47 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 48 | # screenshots whenever they are needed. 49 | # For more information about the recommended setup visit: 50 | # https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md 51 | 52 | fastlane/report.xml 53 | fastlane/screenshots 54 | 55 | #Code Injection 56 | # 57 | # After new code Injection tools there's a generated folder /iOSInjectionProject 58 | # https://github.com/johnno1962/injectionforxcode 59 | 60 | iOSInjectionProject/ 61 | .DS_Store 62 | 63 | -------------------------------------------------------------------------------- /Podfile: -------------------------------------------------------------------------------- 1 | platform :ios, '9.0' 2 | inhibit_all_warnings! 3 | 4 | target 'ScreenRuler' do 5 | # pod 'UIColor-HexRGB' 6 | pod 'UIImage+FixOrientation' 7 | pod 'NYXImagesKit' 8 | pod 'COSTouchVisualizer' 9 | pod 'iVersion' 10 | pod 'iRate' 11 | pod 'Fabric' 12 | pod 'Crashlytics' 13 | end 14 | -------------------------------------------------------------------------------- /Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - COSTouchVisualizer (1.0.6) 3 | - Crashlytics (3.8.2): 4 | - Fabric (~> 1.6.3) 5 | - Fabric (1.6.9) 6 | - iRate (1.11.6) 7 | - iVersion (1.11.4) 8 | - NYXImagesKit (2.3) 9 | - UIImage+FixOrientation (1.0.0) 10 | 11 | DEPENDENCIES: 12 | - COSTouchVisualizer 13 | - Crashlytics 14 | - Fabric 15 | - iRate 16 | - iVersion 17 | - NYXImagesKit 18 | - UIImage+FixOrientation 19 | 20 | SPEC CHECKSUMS: 21 | COSTouchVisualizer: a398089327a6c02897823614d7447ccc97198997 22 | Crashlytics: 27acca95a01b042a8294291dd6dff27f8f6af6d7 23 | Fabric: bc5bec42cef4bcf1ee3ce0e218fc518e4b44dfbb 24 | iRate: 61e558919c4a7fde63b3c22ebbd6c114a1eee658 25 | iVersion: 2b6ffe708672cb494ba3cab150a94800c2892e81 26 | NYXImagesKit: 8163e3335a40eaa173ca5bbbf81fafb57d3947eb 27 | UIImage+FixOrientation: 6889ce14a2761462c22d6f92d26685db79a0c9b2 28 | 29 | PODFILE CHECKSUM: 7f3128a336d42f93983c44be4fff774a2d92f444 30 | 31 | COCOAPODS: 1.2.0 32 | -------------------------------------------------------------------------------- /Screen Ruler.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Screen Ruler.xcodeproj/xcshareddata/xcschemes/ScreenRuler.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 31 | 32 | 33 | 34 | 40 | 41 | 42 | 43 | 44 | 45 | 56 | 58 | 64 | 65 | 66 | 67 | 71 | 72 | 73 | 74 | 80 | 82 | 88 | 89 | 90 | 91 | 93 | 94 | 97 | 98 | 99 | -------------------------------------------------------------------------------- /Screen Ruler.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ScreenRuler/AppDelegate/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import 10 | 11 | extern NSNotificationName iVersionDidUpdateNotification; 12 | 13 | extern const NSInteger kSRAppStoreID; 14 | 15 | @interface AppDelegate : UIResponder 16 | 17 | @property (strong, nonatomic) UIWindow *window; 18 | 19 | @property BOOL shouldShowTouches; 20 | 21 | @property BOOL isCheckingNewVersion; 22 | @property NSString* updatedVersionString; 23 | 24 | @end 25 | 26 | -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "Icon-Spotlight-41.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "Icon-60.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "Icon-Small@2x-1.png", 19 | "scale" : "2x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "Icon-Small@3x.png", 25 | "scale" : "3x" 26 | }, 27 | { 28 | "size" : "40x40", 29 | "idiom" : "iphone", 30 | "filename" : "Icon-Spotlight-40@2x.png", 31 | "scale" : "2x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "Icon-Spotlight-40@3x.png", 37 | "scale" : "3x" 38 | }, 39 | { 40 | "size" : "60x60", 41 | "idiom" : "iphone", 42 | "filename" : "Icon-60@2x.png", 43 | "scale" : "2x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "Icon-60@3x.png", 49 | "scale" : "3x" 50 | }, 51 | { 52 | "size" : "20x20", 53 | "idiom" : "ipad", 54 | "filename" : "Icon-Spotlight-43.png", 55 | "scale" : "1x" 56 | }, 57 | { 58 | "size" : "20x20", 59 | "idiom" : "ipad", 60 | "filename" : "Icon-Spotlight-40.png", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "size" : "29x29", 65 | "idiom" : "ipad", 66 | "filename" : "Icon-Small.png", 67 | "scale" : "1x" 68 | }, 69 | { 70 | "size" : "29x29", 71 | "idiom" : "ipad", 72 | "filename" : "Icon-Small@2x.png", 73 | "scale" : "2x" 74 | }, 75 | { 76 | "size" : "40x40", 77 | "idiom" : "ipad", 78 | "filename" : "Icon-Spotlight-42.png", 79 | "scale" : "1x" 80 | }, 81 | { 82 | "size" : "40x40", 83 | "idiom" : "ipad", 84 | "filename" : "Icon-Spotlight-40@2x-1.png", 85 | "scale" : "2x" 86 | }, 87 | { 88 | "size" : "76x76", 89 | "idiom" : "ipad", 90 | "filename" : "Icon-76.png", 91 | "scale" : "1x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "Icon-76@2x.png", 97 | "scale" : "2x" 98 | }, 99 | { 100 | "size" : "83.5x83.5", 101 | "idiom" : "ipad", 102 | "filename" : "Icon-iPadPro@2x.png", 103 | "scale" : "2x" 104 | } 105 | ], 106 | "info" : { 107 | "version" : 1, 108 | "author" : "xcode" 109 | } 110 | } -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/AppIcon.appiconset/Icon-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/AppIcon.appiconset/Icon-60.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/AppIcon.appiconset/Icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/AppIcon.appiconset/Icon-76.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/AppIcon.appiconset/Icon-Small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/AppIcon.appiconset/Icon-Small.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x-1.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x-1.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-41.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-42.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-43.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-43.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/AppIcon.appiconset/Icon-iPadPro@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/AppIcon.appiconset/Icon-iPadPro@2x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Arrow Icons/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Arrow Icons/arrow-down.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "arrow-down@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "arrow-down@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Arrow Icons/arrow-down.imageset/arrow-down@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Arrow Icons/arrow-down.imageset/arrow-down@2x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Arrow Icons/arrow-down.imageset/arrow-down@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Arrow Icons/arrow-down.imageset/arrow-down@3x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Arrow Icons/arrow-left.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "arrow-left@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "arrow-left@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Arrow Icons/arrow-left.imageset/arrow-left@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Arrow Icons/arrow-left.imageset/arrow-left@2x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Arrow Icons/arrow-left.imageset/arrow-left@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Arrow Icons/arrow-left.imageset/arrow-left@3x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Arrow Icons/arrow-right.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "arrow-right@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "arrow-right@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Arrow Icons/arrow-right.imageset/arrow-right@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Arrow Icons/arrow-right.imageset/arrow-right@2x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Arrow Icons/arrow-right.imageset/arrow-right@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Arrow Icons/arrow-right.imageset/arrow-right@3x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Arrow Icons/arrow-top.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "arrow-top@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "arrow-top@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Arrow Icons/arrow-top.imageset/arrow-top@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Arrow Icons/arrow-top.imageset/arrow-top@2x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Arrow Icons/arrow-top.imageset/arrow-top@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Arrow Icons/arrow-top.imageset/arrow-top@3x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Brand Assets.launchimage/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "extent" : "full-screen", 5 | "idiom" : "iphone", 6 | "subtype" : "736h", 7 | "filename" : "Default~736h@2x.png", 8 | "minimum-system-version" : "8.0", 9 | "orientation" : "portrait", 10 | "scale" : "3x" 11 | }, 12 | { 13 | "extent" : "full-screen", 14 | "idiom" : "iphone", 15 | "subtype" : "736h", 16 | "filename" : "Default~736w@2x.png", 17 | "minimum-system-version" : "8.0", 18 | "orientation" : "landscape", 19 | "scale" : "3x" 20 | }, 21 | { 22 | "extent" : "full-screen", 23 | "idiom" : "iphone", 24 | "subtype" : "667h", 25 | "filename" : "Default~667h@2x.png", 26 | "minimum-system-version" : "8.0", 27 | "orientation" : "portrait", 28 | "scale" : "2x" 29 | }, 30 | { 31 | "orientation" : "portrait", 32 | "idiom" : "iphone", 33 | "filename" : "Default@2x.png", 34 | "extent" : "full-screen", 35 | "minimum-system-version" : "7.0", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "extent" : "full-screen", 40 | "idiom" : "iphone", 41 | "subtype" : "retina4", 42 | "filename" : "Default~568h@2x.png", 43 | "minimum-system-version" : "7.0", 44 | "orientation" : "portrait", 45 | "scale" : "2x" 46 | }, 47 | { 48 | "orientation" : "portrait", 49 | "idiom" : "ipad", 50 | "filename" : "Default~iPad.png", 51 | "extent" : "full-screen", 52 | "minimum-system-version" : "7.0", 53 | "scale" : "1x" 54 | }, 55 | { 56 | "orientation" : "landscape", 57 | "idiom" : "ipad", 58 | "filename" : "Default~iPad~width.png", 59 | "extent" : "full-screen", 60 | "minimum-system-version" : "7.0", 61 | "scale" : "1x" 62 | }, 63 | { 64 | "orientation" : "portrait", 65 | "idiom" : "ipad", 66 | "filename" : "Default~iPad@2x.png", 67 | "extent" : "full-screen", 68 | "minimum-system-version" : "7.0", 69 | "scale" : "2x" 70 | }, 71 | { 72 | "orientation" : "landscape", 73 | "idiom" : "ipad", 74 | "filename" : "Default~iPad~w@2x.png", 75 | "extent" : "full-screen", 76 | "minimum-system-version" : "7.0", 77 | "scale" : "2x" 78 | } 79 | ], 80 | "info" : { 81 | "version" : 1, 82 | "author" : "xcode" 83 | } 84 | } -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Brand Assets.launchimage/Default@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Brand Assets.launchimage/Default@2x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Brand Assets.launchimage/Default~568h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Brand Assets.launchimage/Default~568h@2x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Brand Assets.launchimage/Default~667h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Brand Assets.launchimage/Default~667h@2x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Brand Assets.launchimage/Default~736h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Brand Assets.launchimage/Default~736h@2x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Brand Assets.launchimage/Default~736w@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Brand Assets.launchimage/Default~736w@2x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Brand Assets.launchimage/Default~iPad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Brand Assets.launchimage/Default~iPad.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Brand Assets.launchimage/Default~iPad@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Brand Assets.launchimage/Default~iPad@2x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Brand Assets.launchimage/Default~iPad~w@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Brand Assets.launchimage/Default~iPad~w@2x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Brand Assets.launchimage/Default~iPad~width.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Brand Assets.launchimage/Default~iPad~width.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Features/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Features/color_palette.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "color_palette@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "color_palette@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Features/color_palette.imageset/color_palette@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Features/color_palette.imageset/color_palette@2x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Features/color_palette.imageset/color_palette@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Features/color_palette.imageset/color_palette@3x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Features/crop.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "crop@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "crop@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Features/crop.imageset/crop@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Features/crop.imageset/crop@2x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Features/crop.imageset/crop@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Features/crop.imageset/crop@3x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Features/edit.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "edit@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "edit@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Features/edit.imageset/edit@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Features/edit.imageset/edit@2x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Features/edit.imageset/edit@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Features/edit.imageset/edit@3x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Features/horizontal_ruler.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "horizontal_ruler@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "horizontal_ruler@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Features/horizontal_ruler.imageset/horizontal_ruler@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Features/horizontal_ruler.imageset/horizontal_ruler@2x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Features/horizontal_ruler.imageset/horizontal_ruler@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Features/horizontal_ruler.imageset/horizontal_ruler@3x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Features/line_frame.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "line_frame@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "line_frame@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Features/line_frame.imageset/line_frame@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Features/line_frame.imageset/line_frame@2x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Features/line_frame.imageset/line_frame@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Features/line_frame.imageset/line_frame@3x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Features/protractor.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "protractor@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "protractor@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Features/protractor.imageset/protractor@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Features/protractor.imageset/protractor@2x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Features/protractor.imageset/protractor@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Features/protractor.imageset/protractor@3x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Features/ratio.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "ratio@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "ratio@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Features/ratio.imageset/ratio@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Features/ratio.imageset/ratio@2x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Features/ratio.imageset/ratio@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Features/ratio.imageset/ratio@3x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Features/resize.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "resize@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "resize@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Features/resize.imageset/resize@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Features/resize.imageset/resize@2x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Features/resize.imageset/resize@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Features/resize.imageset/resize@3x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Features/rotate.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "rotate@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "rotate@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Features/rotate.imageset/rotate@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Features/rotate.imageset/rotate@2x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Features/rotate.imageset/rotate@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Features/rotate.imageset/rotate@3x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Features/vertical_ruler.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "vertical_ruler@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "vertical_ruler@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Features/vertical_ruler.imageset/vertical_ruler@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Features/vertical_ruler.imageset/vertical_ruler@2x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Features/vertical_ruler.imageset/vertical_ruler@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Features/vertical_ruler.imageset/vertical_ruler@3x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Gestures/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Gestures/DoubleTap.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "DoubleTap.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Gestures/DoubleTap.imageset/DoubleTap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Gestures/DoubleTap.imageset/DoubleTap.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Gestures/Pinch.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Pinch.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Gestures/Pinch.imageset/Pinch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Gestures/Pinch.imageset/Pinch.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Gestures/Press-and-Drag.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Press-and-Drag.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Gestures/Press-and-Drag.imageset/Press-and-Drag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Gestures/Press-and-Drag.imageset/Press-and-Drag.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Gestures/Press.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Press.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Gestures/Press.imageset/Press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Gestures/Press.imageset/Press.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Gestures/Rotate.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Rotate.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Gestures/Rotate.imageset/Rotate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Gestures/Rotate.imageset/Rotate.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Gestures/Scroll-Horizontal.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Scroll-Horizontal.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Gestures/Scroll-Horizontal.imageset/Scroll-Horizontal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Gestures/Scroll-Horizontal.imageset/Scroll-Horizontal.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Gestures/Scroll-Vertical.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Scroll-Vertical.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Gestures/Scroll-Vertical.imageset/Scroll-Vertical.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Gestures/Scroll-Vertical.imageset/Scroll-Vertical.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Gestures/Tap.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Tap.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Gestures/Tap.imageset/Tap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Gestures/Tap.imageset/Tap.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Gestures/Zoom.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Zoom.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/Gestures/Zoom.imageset/Zoom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/Gestures/Zoom.imageset/Zoom.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/GitHub-Mark.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "GitHub-Mark@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "GitHub-Mark@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | }, 22 | "properties" : { 23 | "template-rendering-intent" : "template" 24 | } 25 | } -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/GitHub-Mark.imageset/GitHub-Mark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/GitHub-Mark.imageset/GitHub-Mark@2x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/GitHub-Mark.imageset/GitHub-Mark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/GitHub-Mark.imageset/GitHub-Mark@3x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/iPhone-sceenshot.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "iPhone-sceenshot@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "iPhone-sceenshot@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/iPhone-sceenshot.imageset/iPhone-sceenshot@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/iPhone-sceenshot.imageset/iPhone-sceenshot@2x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/iPhone-sceenshot.imageset/iPhone-sceenshot@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/iPhone-sceenshot.imageset/iPhone-sceenshot@3x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/option.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "option@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "option@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/option.imageset/option@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/option.imageset/option@2x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/option.imageset/option@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/option.imageset/option@3x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/photo_access.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "photo_access@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "photo_access@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/photo_access.imageset/photo_access@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/photo_access.imageset/photo_access@2x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/photo_access.imageset/photo_access@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/photo_access.imageset/photo_access@3x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/photo_library.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "photo_library@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "photo_library@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/photo_library.imageset/photo_library@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/photo_library.imageset/photo_library@2x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/photo_library.imageset/photo_library@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/photo_library.imageset/photo_library@3x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/ruler_logo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "ruler_logo@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "ruler_logo@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/ruler_logo.imageset/ruler_logo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/ruler_logo.imageset/ruler_logo@2x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/ruler_logo.imageset/ruler_logo@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/ruler_logo.imageset/ruler_logo@3x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/settings.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "settings@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "settings@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/settings.imageset/settings@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/settings.imageset/settings@2x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Assets.xcassets/settings.imageset/settings@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Assets.xcassets/settings.imageset/settings@3x.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/Icon-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/Icon-60.png -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/iTunesArtwork: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/iTunesArtwork -------------------------------------------------------------------------------- /ScreenRuler/AssetsAndResources/iTunesArtwork@2x: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/AssetsAndResources/iTunesArtwork@2x -------------------------------------------------------------------------------- /ScreenRuler/Base.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleDisplayName" = "Screen Ruler"; 2 | "CFBundleName" = "Screen Ruler"; 3 | -------------------------------------------------------------------------------- /ScreenRuler/Base.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/Base.lproj/Localizable.strings -------------------------------------------------------------------------------- /ScreenRuler/Categories/UIColor+ThemeColor.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIColor+ThemeColor.h 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import 10 | 11 | extern NSString *const kRASettingsChangedNotification; 12 | 13 | @interface UIColor (ThemeColor) 14 | 15 | +(UIColor*)originalThemeColor; 16 | 17 | +(UIColor*)themeColor; 18 | +(UIColor*)themeTextColor; 19 | +(UIColor*)themeBackgroundColor; 20 | 21 | +(void)setThemeColor:(UIColor*)color; 22 | +(void)setThemeInverted:(BOOL)inverted; 23 | +(BOOL)isThemeInverted; 24 | 25 | -(UIColor*)colorWithShadeFactor:(CGFloat)shadeFactor; 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /ScreenRuler/Categories/UIFont+AppFont.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIFont+AppFont.h 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import 10 | 11 | @interface UIFont (AppFont) 12 | 13 | +(UIFont*)kohinoorBanglaRegularWithSize:(CGFloat)size; 14 | +(UIFont*)kohinoorBanglaSemiboldWithSize:(CGFloat)size; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /ScreenRuler/Categories/UIFont+AppFont.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIFont+AppFont.m 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import "UIFont+AppFont.h" 10 | 11 | @implementation UIFont (AppFont) 12 | 13 | +(UIFont*)kohinoorBanglaRegularWithSize:(CGFloat)size 14 | { 15 | UIFont *font = [UIFont fontWithName:@"KohinoorBangla-Regular" size:size]; 16 | 17 | if (font == nil) 18 | { 19 | font = [UIFont systemFontOfSize:size]; 20 | } 21 | 22 | return font; 23 | } 24 | 25 | +(UIFont*)kohinoorBanglaSemiboldWithSize:(CGFloat)size 26 | { 27 | UIFont *font = [UIFont fontWithName:@"KohinoorBangla-Semibold" size:size]; 28 | 29 | if (font == nil) 30 | { 31 | font = [UIFont boldSystemFontOfSize:size]; 32 | } 33 | 34 | return font; 35 | } 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /ScreenRuler/Categories/UIImage+Color.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIImage+Color.h 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import 10 | 11 | @interface UIImage (Color) 12 | 13 | + (UIImage *)imageWithColor:(UIColor *)color; 14 | 15 | -(UIImage*)imageWithColor:(UIColor*)color; 16 | 17 | -(void)colorAtPoint:(CGPoint)point preparingBlock:(void (^)(void))preparingBlock completion:(void (^)(UIColor*))colorCompletion; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /ScreenRuler/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | Screen Ruler 9 | CFBundleDocumentTypes 10 | 11 | 12 | CFBundleTypeIconFiles 13 | 14 | Icon-64 15 | 16 | CFBundleTypeName 17 | Screenshots PNG 18 | CFBundleTypeRole 19 | Viewer 20 | LSHandlerRank 21 | Default 22 | LSItemContentTypes 23 | 24 | public.image 25 | 26 | UTTypeConformsTo 27 | 28 | public.image 29 | 30 | 31 | 32 | CFBundleExecutable 33 | $(EXECUTABLE_NAME) 34 | CFBundleIdentifier 35 | $(PRODUCT_BUNDLE_IDENTIFIER) 36 | CFBundleInfoDictionaryVersion 37 | 6.0 38 | CFBundleName 39 | Screen Ruler 40 | CFBundlePackageType 41 | APPL 42 | CFBundleShortVersionString 43 | 3.0.1 44 | CFBundleSignature 45 | APPL 46 | CFBundleSpokenName 47 | Screen Ruler 48 | CFBundleVersion 49 | 1 50 | Fabric 51 | 52 | APIKey 53 | 2a2b05af157dab9ab59f9b8e79c037ee6025e805 54 | Kits 55 | 56 | 57 | KitInfo 58 | 59 | KitName 60 | Crashlytics 61 | 62 | 63 | 64 | ITSAppUsesNonExemptEncryption 65 | 66 | LSApplicationCategoryType 67 | public.app-category.developer-tools 68 | LSMinimumSystemVersion 69 | 8.0 70 | LSRequiresIPhoneOS 71 | 72 | NSAppTransportSecurity 73 | 74 | NSAllowsArbitraryLoads 75 | 76 | 77 | NSCameraUsageDescription 78 | This lets you capture photos you'd like to debug. 79 | NSHumanReadableCopyright 80 | InfoEnum Software Systems 81 | NSPhotoLibraryUsageDescription 82 | This lets you choose the screenshot you'd like to debug. 83 | UIApplicationShortcutItems 84 | 85 | 86 | UIApplicationShortcutItemIconType 87 | UIApplicationShortcutIconTypeCapturePhoto 88 | UIApplicationShortcutItemTitle 89 | Open Latest Screenshot 90 | UIApplicationShortcutItemType 91 | com.infoenum.ruler.openlatestscreenshot 92 | 93 | 94 | UILaunchStoryboardName 95 | LaunchScreen 96 | UIMainStoryboardFile 97 | Main 98 | UIPrerenderedIcon 99 | 100 | UIRequiredDeviceCapabilities 101 | 102 | armv7 103 | 104 | UIRequiresFullScreen 105 | 106 | UIStatusBarHidden 107 | 108 | UIStatusBarStyle 109 | UIStatusBarStyleLightContent 110 | UISupportedInterfaceOrientations 111 | 112 | UIInterfaceOrientationPortrait 113 | UIInterfaceOrientationLandscapeLeft 114 | UIInterfaceOrientationLandscapeRight 115 | UIInterfaceOrientationPortraitUpsideDown 116 | 117 | UIWhitePointAdaptivityStyle 118 | UIWhitePointAdaptivityStylePhoto 119 | 120 | 121 | -------------------------------------------------------------------------------- /ScreenRuler/Other/RoundedCornerView.h: -------------------------------------------------------------------------------- 1 | // 2 | // RoundedCornerView.h 3 | // Screen Ruler 4 | // 5 | // Created by IEMacBook01 on 15/10/16. 6 | // Copyright © 2016 InfoEnum Software Systems. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface RoundedCornerView : UIView 12 | 13 | @property(nonatomic, assign) IBInspectable CGFloat cornerRadiusRatio; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /ScreenRuler/Other/RoundedCornerView.m: -------------------------------------------------------------------------------- 1 | // 2 | // RoundedCornerView.m 3 | // Screen Ruler 4 | // 5 | // Created by IEMacBook01 on 15/10/16. 6 | // Copyright © 2016 InfoEnum Software Systems. All rights reserved. 7 | // 8 | 9 | #import "RoundedCornerView.h" 10 | 11 | @implementation RoundedCornerView 12 | 13 | -(void)layoutSubviews 14 | { 15 | [super layoutSubviews]; 16 | 17 | if (_cornerRadiusRatio > 0) 18 | { 19 | CGFloat widthHeight = MIN(self.frame.size.width, self.frame.size.height); 20 | 21 | self.layer.cornerRadius = widthHeight*_cornerRadiusRatio; 22 | } 23 | } 24 | /* 25 | // Only override drawRect: if you perform custom drawing. 26 | // An empty implementation adversely affects performance during animation. 27 | - (void)drawRect:(CGRect)rect { 28 | // Drawing code 29 | } 30 | */ 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /ScreenRuler/Other/SRIconsGeneratorViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // SRIconsGeneratorViewController.h 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import 10 | 11 | @interface SRIconsGeneratorViewController : UIViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /ScreenRuler/Other/SRIconsGeneratorViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // SRIconsGeneratorViewController.m 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import "SRIconsGeneratorViewController.h" 10 | 11 | @interface SRIconsGeneratorViewController () 12 | 13 | @property (strong, nonatomic) IBOutlet UIView *lineFrameView; 14 | @property (strong, nonatomic) IBOutlet UIView *cropView; 15 | @property (strong, nonatomic) IBOutlet UIView *aspectRatioView; 16 | @property (strong, nonatomic) IBOutlet UIView *resizeView; 17 | @property (strong, nonatomic) IBOutlet UIView *humbergerView; 18 | @property (strong, nonatomic) IBOutlet UIView *scaleView; 19 | 20 | @property (strong, nonatomic) IBOutlet UIView *freeScaleContainerView; 21 | @property (strong, nonatomic) IBOutlet UIView *freeScaleview; 22 | 23 | 24 | @end 25 | 26 | @implementation SRIconsGeneratorViewController 27 | 28 | - (void)viewDidLoad { 29 | [super viewDidLoad]; 30 | // Do any additional setup after loading the view. 31 | } 32 | 33 | -(void)viewWillAppear:(BOOL)animated 34 | { 35 | [super viewWillAppear:animated]; 36 | 37 | self.freeScaleview.transform = CGAffineTransformMakeRotation(M_PI_2*3); 38 | } 39 | 40 | -(void)viewDidAppear:(BOOL)animated 41 | { 42 | [super viewDidAppear:animated]; 43 | 44 | NSLog(@"%@",self.freeScaleview); 45 | NSLog(@"%@",self.scaleView); 46 | } 47 | 48 | - (void)didReceiveMemoryWarning { 49 | [super didReceiveMemoryWarning]; 50 | // Dispose of any resources that can be recreated. 51 | } 52 | 53 | /* 54 | #pragma mark - Navigation 55 | 56 | // In a storyboard-based application, you will often want to do a little preparation before navigation 57 | - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 58 | // Get the new view controller using [segue destinationViewController]. 59 | // Pass the selected object to the new view controller. 60 | } 61 | */ 62 | 63 | @end 64 | -------------------------------------------------------------------------------- /ScreenRuler/Subclasses/SRImagePickerController.h: -------------------------------------------------------------------------------- 1 | // 2 | // SRImagePickerController.h 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import 10 | 11 | @interface SRImagePickerController : UIImagePickerController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /ScreenRuler/Subclasses/SRImagePickerController.m: -------------------------------------------------------------------------------- 1 | // 2 | // SRImagePickerController.m 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import "SRImagePickerController.h" 10 | 11 | @implementation SRImagePickerController 12 | 13 | 14 | - (BOOL)shouldAutorotate 15 | { 16 | return YES; 17 | } 18 | 19 | - (UIInterfaceOrientationMask)supportedInterfaceOrientations 20 | { 21 | if (self.sourceType == UIImagePickerControllerSourceTypeCamera) 22 | { 23 | return UIInterfaceOrientationMaskPortrait; 24 | } 25 | else 26 | { 27 | return UIInterfaceOrientationMaskAllButUpsideDown; 28 | } 29 | } 30 | 31 | //-(UIInterfaceOrientation)interfaceOrientation 32 | //{ 33 | // if ([self.presentedViewController isKindOfClass:[UIAlertController class]] == NO) 34 | // { 35 | // return self.presentedViewController.interfaceOrientation; 36 | // } 37 | // else 38 | // { 39 | // return [super interfaceOrientation]; 40 | // } 41 | //} 42 | 43 | @end 44 | -------------------------------------------------------------------------------- /ScreenRuler/Subclasses/SRNavigationBar.h: -------------------------------------------------------------------------------- 1 | // 2 | // SRNavigationBar.h 3 | // Screen Ruler 4 | // 5 | // Created by IEMacBook02 on 01/01/17. 6 | // Copyright © 2017 InfoEnum Software Systems. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface SRNavigationBar : UINavigationBar 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /ScreenRuler/Subclasses/SRNavigationBar.m: -------------------------------------------------------------------------------- 1 | // 2 | // SRNavigationBar.m 3 | // Screen Ruler 4 | // 5 | // Created by IEMacBook02 on 01/01/17. 6 | // Copyright © 2017 InfoEnum Software Systems. All rights reserved. 7 | // 8 | 9 | #import "SRNavigationBar.h" 10 | #import "SRToolbarButton.h" 11 | #import "UIImage+Color.h" 12 | 13 | @implementation SRNavigationBar 14 | 15 | -(void)setTintColor:(UIColor *)tintColor 16 | { 17 | [super setTintColor:tintColor]; 18 | 19 | [self updateColors]; 20 | } 21 | 22 | -(void)setBarTintColor:(UIColor *)barTintColor 23 | { 24 | [super setBarTintColor:barTintColor]; 25 | 26 | [self updateColors]; 27 | } 28 | 29 | //barStyle 30 | 31 | -(void)updateColors 32 | { 33 | UIColor *tintColor = [[self tintColor] colorWithAlphaComponent:1]; 34 | UIColor *barTintColor = [[self barTintColor] colorWithAlphaComponent:1]; 35 | 36 | for (UINavigationItem *item in self.items) 37 | { 38 | for (UIBarButtonItem *barItem in item.leftBarButtonItems) 39 | { 40 | barItem.tintColor = tintColor; 41 | } 42 | 43 | for (UIBarButtonItem *barItem in item.rightBarButtonItems) 44 | { 45 | barItem.tintColor = tintColor; 46 | } 47 | } 48 | 49 | for (UIView *barButtonItemView in self.subviews) 50 | { 51 | if ([barButtonItemView isKindOfClass:[SRToolbarButton class]]) 52 | { 53 | SRToolbarButton *button = (SRToolbarButton*)barButtonItemView; 54 | button.highlightedStateColor = tintColor; 55 | button.selectedStateColor = tintColor; 56 | button.tintColor = tintColor; 57 | 58 | UIImage *image = [button imageForState:UIControlStateNormal]; 59 | 60 | if (image) 61 | { 62 | [button setImage:[image imageWithColor:tintColor] forState:UIControlStateNormal]; 63 | } 64 | 65 | UIImage *selectedImage = [button imageForState:UIControlStateSelected]; 66 | 67 | if (selectedImage) 68 | { 69 | [button setImage:[selectedImage imageWithColor:barTintColor] forState:UIControlStateSelected]; 70 | } 71 | } 72 | } 73 | } 74 | 75 | -(CGSize)sizeThatFits:(CGSize)size 76 | { 77 | CGSize sizeThatFits = [super sizeThatFits:size]; 78 | sizeThatFits.height = 44; 79 | return sizeThatFits; 80 | } 81 | 82 | @end 83 | -------------------------------------------------------------------------------- /ScreenRuler/Subclasses/SRNavigationController.h: -------------------------------------------------------------------------------- 1 | // 2 | // SRNavigationController.h 3 | // ScreenRuler 4 | // 5 | // Created by Iftekhar on 02/11/17. 6 | // Copyright © 2017 InfoEnum Software Systems. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface SRNavigationController : UINavigationController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /ScreenRuler/Subclasses/SRNavigationController.m: -------------------------------------------------------------------------------- 1 | // 2 | // SRNavigationController.m 3 | // ScreenRuler 4 | // 5 | // Created by Iftekhar on 02/11/17. 6 | // Copyright © 2017 InfoEnum Software Systems. All rights reserved. 7 | // 8 | 9 | #import "SRNavigationController.h" 10 | 11 | @interface SRNavigationController () 12 | 13 | @end 14 | 15 | @implementation SRNavigationController 16 | 17 | -(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator 18 | { 19 | __weak typeof(self) weakSelf = self; 20 | 21 | [coordinator animateAlongsideTransition:^(id _Nonnull context) { 22 | 23 | if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) 24 | { 25 | BOOL hidden = (size.width > size.height); 26 | [weakSelf setNavigationBarHidden:hidden animated:YES]; 27 | [weakSelf setToolbarHidden:hidden animated:YES]; 28 | } 29 | 30 | } completion:^(id _Nonnull context) { 31 | 32 | }]; 33 | } 34 | 35 | @end 36 | -------------------------------------------------------------------------------- /ScreenRuler/Subclasses/SRToolbar.h: -------------------------------------------------------------------------------- 1 | // 2 | // SRToolbar.h 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import 10 | 11 | @interface SRToolbar : UIToolbar 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /ScreenRuler/Subclasses/SRToolbar.m: -------------------------------------------------------------------------------- 1 | // 2 | // SRToolbar.m 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import "SRToolbar.h" 10 | #import "SRToolbarButton.h" 11 | #import "UIImage+Color.h" 12 | 13 | @implementation SRToolbar 14 | 15 | -(void)setTintColor:(UIColor *)tintColor 16 | { 17 | [super setTintColor:tintColor]; 18 | 19 | [self updateColors]; 20 | } 21 | 22 | -(void)setBarTintColor:(UIColor *)barTintColor 23 | { 24 | [super setBarTintColor:barTintColor]; 25 | 26 | [self updateColors]; 27 | } 28 | 29 | -(void)updateColors 30 | { 31 | UIColor *tintColor = [[self tintColor] colorWithAlphaComponent:1]; 32 | UIColor *barTintColor = [[self barTintColor] colorWithAlphaComponent:1]; 33 | 34 | for (UIBarButtonItem *item in self.items) 35 | { 36 | item.tintColor = tintColor; 37 | } 38 | 39 | for (UIView *barButtonItemView in self.subviews) 40 | { 41 | if ([barButtonItemView isKindOfClass:[SRToolbarButton class]]) 42 | { 43 | SRToolbarButton *button = (SRToolbarButton*)barButtonItemView; 44 | button.highlightedStateColor = tintColor; 45 | button.selectedStateColor = tintColor; 46 | button.tintColor = tintColor; 47 | 48 | UIImage *image = [button imageForState:UIControlStateNormal]; 49 | 50 | if (image) 51 | { 52 | [button setImage:[image imageWithColor:tintColor] forState:UIControlStateNormal]; 53 | } 54 | 55 | UIImage *selectedImage = [button imageForState:UIControlStateSelected]; 56 | 57 | if (selectedImage) 58 | { 59 | [button setImage:[selectedImage imageWithColor:barTintColor] forState:UIControlStateSelected]; 60 | } 61 | } 62 | } 63 | } 64 | 65 | -(CGSize)sizeThatFits:(CGSize)size 66 | { 67 | CGSize sizeThatFits = [super sizeThatFits:size]; 68 | sizeThatFits.height = 44; 69 | return sizeThatFits; 70 | } 71 | 72 | @end 73 | -------------------------------------------------------------------------------- /ScreenRuler/Subclasses/SRToolbarButton.h: -------------------------------------------------------------------------------- 1 | // 2 | // SRToolbarButton.h 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import 10 | 11 | @interface SRToolbarButton : UIButton 12 | 13 | @property(nonatomic, strong) IBInspectable UIColor *normalStateColor; 14 | @property(nonatomic, strong) IBInspectable UIColor *highlightedStateColor; 15 | @property(nonatomic, strong) IBInspectable UIColor *disabledStateColor; 16 | @property(nonatomic, strong) IBInspectable UIColor *selectedStateColor; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /ScreenRuler/Subclasses/SRToolbarButton.m: -------------------------------------------------------------------------------- 1 | // 2 | // SRToolbarButton.m 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import "SRToolbarButton.h" 10 | #import "UIImage+Color.h" 11 | 12 | @implementation SRToolbarButton 13 | 14 | -(void)setNormalStateColor:(UIColor *)normalStateColor 15 | { 16 | _normalStateColor = normalStateColor; 17 | 18 | UIImage *image = [[UIImage imageWithColor:_normalStateColor] resizableImageWithCapInsets:UIEdgeInsetsZero resizingMode:UIImageResizingModeStretch]; 19 | [self setBackgroundImage:image forState:UIControlStateNormal]; 20 | } 21 | 22 | -(void)setHighlightedStateColor:(UIColor *)highlightedStateColor 23 | { 24 | _highlightedStateColor = highlightedStateColor; 25 | 26 | UIImage *image = [[UIImage imageWithColor:_highlightedStateColor] resizableImageWithCapInsets:UIEdgeInsetsZero resizingMode:UIImageResizingModeStretch]; 27 | [self setBackgroundImage:image forState:UIControlStateHighlighted]; 28 | } 29 | 30 | -(void)setDisabledStateColor:(UIColor *)disabledStateColor 31 | { 32 | _disabledStateColor = disabledStateColor; 33 | 34 | UIImage *image = [[UIImage imageWithColor:_disabledStateColor] resizableImageWithCapInsets:UIEdgeInsetsZero resizingMode:UIImageResizingModeStretch]; 35 | [self setBackgroundImage:image forState:UIControlStateDisabled]; 36 | } 37 | 38 | -(void)setSelectedStateColor:(UIColor *)selectedStateColor 39 | { 40 | _selectedStateColor = selectedStateColor; 41 | 42 | UIImage *image = [[UIImage imageWithColor:_selectedStateColor] resizableImageWithCapInsets:UIEdgeInsetsZero resizingMode:UIImageResizingModeStretch]; 43 | [self setBackgroundImage:image forState:UIControlStateSelected]; 44 | } 45 | 46 | @end 47 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/ACMagnifyingGlass/ACMagnifyingGlass.h: -------------------------------------------------------------------------------- 1 | // 2 | // ACMagnifyingGlass.h 3 | // MagnifyingGlass 4 | // 5 | 6 | // doc: http://coffeeshopped.com/2010/03/a-simpler-magnifying-glass-loupe-view-for-the-iphone 7 | 8 | #import 9 | 10 | extern CGFloat const kACMagnifyingGlassDefaultOffset; 11 | 12 | @interface ACMagnifyingGlass : UIView 13 | 14 | @property (nonatomic, retain) UIView *viewToMagnify; 15 | @property (nonatomic, assign) CGPoint touchPoint; 16 | @property (nonatomic, assign) CGPoint touchPointOffset; 17 | @property (nonatomic, assign) CGFloat scale; 18 | @property (nonatomic, assign) BOOL scaleAtTouchPoint; 19 | 20 | @property (nonatomic, strong) UIColor *color; 21 | 22 | -(void)show; 23 | -(void)hide; 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/ACMagnifyingGlass/Resources/kb-loupe-hi_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/Vendor/ACMagnifyingGlass/Resources/kb-loupe-hi_7.png -------------------------------------------------------------------------------- /ScreenRuler/Vendor/Classes/CBZRasterSplashView.h: -------------------------------------------------------------------------------- 1 | // 2 | // CBZRasterSplashView.h 3 | // Telly 4 | // 5 | // Created by Mazyad Alabduljaleel on 8/7/14. 6 | // Copyright (c) 2014 Telly, Inc. All rights reserved. 7 | // 8 | 9 | #import "CBZSplashView.h" 10 | 11 | /** 12 | * RasterSplash animates in a rasterized UIImage while fading the whole view 13 | */ 14 | @interface CBZRasterSplashView : CBZSplashView 15 | 16 | - (instancetype)initWithIconImage:(UIImage *)icon backgroundColor:(UIColor *)color; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/Classes/CBZRasterSplashView.m: -------------------------------------------------------------------------------- 1 | // 2 | // CBZRasterSplashView.m 3 | // Telly 4 | // 5 | // Created by Mazyad Alabduljaleel on 8/7/14. 6 | // Copyright (c) 2014 Telly, Inc. All rights reserved. 7 | // 8 | 9 | #import "CBZRasterSplashView.h" 10 | 11 | @interface CBZRasterSplashView () 12 | 13 | @property (nonatomic, strong) UIImage *iconImage; 14 | @property (nonatomic, strong) UIImageView *iconImageView; 15 | 16 | @end 17 | 18 | @implementation CBZRasterSplashView 19 | 20 | - (instancetype)initWithIconImage:(UIImage *)icon backgroundColor:(UIColor *)color 21 | { 22 | self = [super initWithFrame:[[UIScreen mainScreen] bounds]]; 23 | if (self) { 24 | self.backgroundColor = color; 25 | 26 | UIImageView *iconImageView = [UIImageView new]; 27 | iconImageView.image = [icon imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; 28 | iconImageView.tintColor = self.iconColor; 29 | iconImageView.frame = CGRectMake(0, 0, self.iconStartSize.width, self.iconStartSize.height); 30 | iconImageView.contentMode = UIViewContentModeScaleAspectFit; 31 | iconImageView.center = self.center; 32 | 33 | [self addSubview:iconImageView]; 34 | 35 | _iconImageView = iconImageView; 36 | } 37 | return self; 38 | } 39 | 40 | - (void)startAnimationWithCompletionHandler:(void (^)(void))completionHandler 41 | { 42 | __block __weak typeof(self) weakSelf = self; 43 | 44 | if (!self.animationDuration) { 45 | return; 46 | } 47 | 48 | CGFloat shrinkDuration = self.animationDuration * 0.3; 49 | CGFloat growDuration = self.animationDuration * 0.7; 50 | 51 | [UIView animateWithDuration:shrinkDuration delay:0 usingSpringWithDamping:0.7f initialSpringVelocity:10 options:UIViewAnimationOptionCurveEaseInOut animations:^{ 52 | CGAffineTransform scaleTransform = CGAffineTransformMakeScale(0.75, 0.75); 53 | weakSelf.iconImageView.transform = scaleTransform; 54 | } completion:^(BOOL finished) { 55 | [UIView animateWithDuration:growDuration animations:^{ 56 | CGAffineTransform scaleTransform = CGAffineTransformMakeScale(20, 20); 57 | weakSelf.iconImageView.transform = scaleTransform; 58 | weakSelf.alpha = 0; 59 | } completion:^(BOOL finished) { 60 | [weakSelf removeFromSuperview]; 61 | if (completionHandler) { 62 | completionHandler(); 63 | } 64 | }]; 65 | }]; 66 | } 67 | 68 | @end 69 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/Classes/CBZSplashView.h: -------------------------------------------------------------------------------- 1 | // 2 | // CBZSplashView.h 3 | // MicroMessage 4 | // 5 | // Created by Callum Boddy on 22/07/2014. 6 | // Copyright (c) 2014 Callum Boddy. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | /** 13 | * The abstract class that provides the common interface between all splash view implementations. 14 | */ 15 | @interface CBZSplashView : UIView 16 | 17 | 18 | /** 19 | * This initializer takes a raster image that will be used in the animation. 20 | * 21 | * The animation is first scales the image down a bit, then, simultanuously scales it all the way up and fades the view out. 22 | * 23 | * @param icon The icon image in the centre 24 | * @param backgroundColor the background color of the entire view 25 | * 26 | * @return The Splash view 27 | */ 28 | + (instancetype)splashViewWithIcon:(UIImage *)icon backgroundColor:(UIColor *)backgroundColor; 29 | 30 | + (instancetype)splashViewWithBezierPath:(UIBezierPath *)bezier backgroundColor:(UIColor *)backgroundColor; 31 | 32 | 33 | /** 34 | * Call to start the animation. 35 | */ 36 | - (void)startAnimation; 37 | 38 | /** 39 | * Call to start the animation with completion handler. 40 | */ 41 | - (void)startAnimationWithCompletionHandler:(void(^)(void))completionHandler; 42 | 43 | /** 44 | * The starting size of the centred icon. 45 | */ 46 | @property (nonatomic, assign) CGSize iconStartSize; 47 | 48 | /** 49 | * total length of animation. 50 | */ 51 | @property (nonatomic, assign) CGFloat animationDuration; 52 | 53 | /** 54 | * The animation applied to the icon 55 | */ 56 | @property (nonatomic, strong) CAAnimation *iconAnimation; 57 | 58 | /** 59 | * the color of the icon 60 | */ 61 | @property (nonatomic, strong) UIColor *iconColor; 62 | 63 | @end 64 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/Classes/CBZSplashView.m: -------------------------------------------------------------------------------- 1 | // 2 | // CBZSplashView.m 3 | // MicroMessage 4 | // 5 | // Created by Callum Boddy on 22/07/2014. 6 | // Copyright (c) 2014 Callum Boddy. All rights reserved. 7 | // 8 | 9 | #import "CBZSplashView.h" 10 | #import "CBZRasterSplashView.h" 11 | #import "CBZVectorSplashView.h" 12 | 13 | 14 | @implementation CBZSplashView 15 | 16 | #pragma mark - Factory methods 17 | 18 | + (instancetype)splashViewWithIcon:(UIImage *)icon backgroundColor:(UIColor *)backgroundColor 19 | { 20 | /* This component is useless without an icon */ 21 | NSParameterAssert(icon); 22 | 23 | return [[CBZRasterSplashView alloc] initWithIconImage:icon backgroundColor:backgroundColor]; 24 | } 25 | 26 | + (instancetype)splashViewWithBezierPath:(UIBezierPath *)bezier backgroundColor:(UIColor *)backgroundColor 27 | { 28 | return [[CBZVectorSplashView alloc] initWithBezierPath:bezier backgroundColor:backgroundColor]; 29 | } 30 | 31 | #pragma mark - Init & Dealloc 32 | 33 | - (instancetype)init 34 | { 35 | return [super initWithFrame:[[UIScreen mainScreen] bounds]]; 36 | } 37 | 38 | #pragma mark - Public methods 39 | 40 | - (void)startAnimation 41 | { 42 | [self startAnimationWithCompletionHandler:nil]; 43 | } 44 | 45 | - (void)startAnimationWithCompletionHandler:(void(^)(void))completionHandler; 46 | { 47 | NSAssert(NO, @"Override me!"); 48 | } 49 | 50 | #pragma mark - property getters 51 | 52 | - (CGSize)iconStartSize 53 | { 54 | if (!_iconStartSize.height) { 55 | _iconStartSize = CGSizeMake(60, 60); 56 | } 57 | return _iconStartSize; 58 | } 59 | 60 | - (CGFloat)animationDuration 61 | { 62 | if (!_animationDuration) { 63 | _animationDuration = 1.0f; 64 | } 65 | return _animationDuration; 66 | } 67 | 68 | - (CAAnimation *)iconAnimation 69 | { 70 | if (!_iconAnimation) { 71 | CAKeyframeAnimation *scaleAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; 72 | 73 | CATransform3D transform1 = CATransform3DMakeScale(1, 1, 1); 74 | CATransform3D transform2 = CATransform3DMakeScale(0.9, 0.9, 0.9); 75 | CATransform3D transform3 = CATransform3DTranslate(CATransform3DMakeScale(300, 300, 300), 0, -25, 0); 76 | 77 | scaleAnimation.values = @[[NSValue valueWithCATransform3D:transform1], 78 | [NSValue valueWithCATransform3D:transform2], 79 | [NSValue valueWithCATransform3D:transform3]]; 80 | scaleAnimation.duration = self.animationDuration; 81 | scaleAnimation.removedOnCompletion = NO; 82 | scaleAnimation.fillMode = kCAFillModeForwards; 83 | scaleAnimation.keyTimes = @[@0, @0.4, @1]; 84 | scaleAnimation.timingFunctions = @[[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut], 85 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]]; 86 | 87 | _iconAnimation = scaleAnimation; 88 | } 89 | return _iconAnimation; 90 | } 91 | 92 | - (UIColor *)iconColor 93 | { 94 | if (!_iconColor) { 95 | _iconColor = [UIColor whiteColor]; 96 | } 97 | return _iconColor; 98 | } 99 | 100 | @end 101 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/Classes/CBZVectorSplashView.h: -------------------------------------------------------------------------------- 1 | // 2 | // CBZVectorSplashView.h 3 | // Telly 4 | // 5 | // Created by Mazyad Alabduljaleel on 8/7/14. 6 | // Copyright (c) 2014 Telly, Inc. All rights reserved. 7 | // 8 | 9 | #import "CBZSplashView.h" 10 | 11 | /** 12 | * VectorSplash uses a UIBezierPath to carve a mask in the middle that expands while revealing the content behind it. 13 | */ 14 | @interface CBZVectorSplashView : CBZSplashView 15 | 16 | - (instancetype)initWithBezierPath:(UIBezierPath *)bezier backgroundColor:(UIColor *)backgroundColor; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/Classes/CBZVectorSplashView.m: -------------------------------------------------------------------------------- 1 | // 2 | // CBZVectorSplashView.m 3 | // Telly 4 | // 5 | // Created by Mazyad Alabduljaleel on 8/7/14. 6 | // Copyright (c) 2014 Telly, Inc. All rights reserved. 7 | // 8 | 9 | #import "CBZVectorSplashView.h" 10 | 11 | @interface CBZVectorSplashView () 12 | 13 | @property (nonatomic, copy) void(^animationCompletionHandler)(void); 14 | 15 | @property (nonatomic, strong) CAShapeLayer *iconLayer; 16 | @property (nonatomic, strong) UIColor *backgroundViewColor; 17 | 18 | @end 19 | 20 | @implementation CBZVectorSplashView 21 | 22 | - (instancetype)initWithBezierPath:(UIBezierPath *)bezier backgroundColor:(UIColor *)backgroundColor 23 | { 24 | self = [super initWithFrame:[[UIScreen mainScreen] bounds]]; 25 | if (self) { 26 | _backgroundViewColor = backgroundColor; 27 | _iconLayer = [self _createShapeLayerWithBezierPath:bezier]; 28 | 29 | [self.layer addSublayer:_iconLayer]; 30 | 31 | self.backgroundColor = self.iconColor; 32 | } 33 | return self; 34 | } 35 | 36 | - (CAShapeLayer *)_createShapeLayerWithBezierPath:(UIBezierPath *)bezier 37 | { 38 | /* Expand the shape bounds, so when it scales down a bit in the beginning, we have some padding */ 39 | CGRect shapeBounds = CGRectInset(self.bounds, -CGRectGetWidth(self.bounds), -CGRectGetHeight(self.bounds)); 40 | 41 | CGMutablePathRef mutablePath = CGPathCreateMutable(); 42 | CGPathAddRect(mutablePath, NULL, shapeBounds); 43 | 44 | /* Move the icon to the middle */ 45 | CGPoint iconOffset = CGPointMake(CGRectGetMidX(self.bounds) - CGRectGetMidX(bezier.bounds), 46 | CGRectGetMidY(self.bounds) - CGRectGetMidY(bezier.bounds)); 47 | 48 | CGAffineTransform iconTransform = CGAffineTransformMakeTranslation(iconOffset.x, iconOffset.y); 49 | 50 | CGPathAddPath(mutablePath, &iconTransform, bezier.CGPath); 51 | 52 | CAShapeLayer *shapeLayer = [CAShapeLayer layer]; 53 | shapeLayer.bounds = shapeBounds; 54 | shapeLayer.position = CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds)); 55 | shapeLayer.path = mutablePath; 56 | shapeLayer.anchorPoint = CGPointMake(0.5, 0.5); 57 | shapeLayer.fillColor = self.backgroundViewColor.CGColor; 58 | 59 | CGPathRelease(mutablePath); 60 | 61 | return shapeLayer; 62 | } 63 | 64 | - (void)startAnimationWithCompletionHandler:(void (^)(void))completionHandler 65 | { 66 | self.animationCompletionHandler = completionHandler; 67 | 68 | self.iconAnimation.delegate = self; 69 | [self.iconLayer addAnimation:self.iconAnimation forKey:@"CBZVectorSplashViewIconAnimation"]; 70 | 71 | /* Reveal the content behind the mask view after the icon expands a bit */ 72 | [self performSelector:@selector(setBackgroundColor:) withObject:[UIColor clearColor] afterDelay:self.animationDuration * 0.4]; 73 | } 74 | 75 | #pragma mark - CAAnimation Delegate methods 76 | 77 | - (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag 78 | { 79 | if (self.animationCompletionHandler) { 80 | self.animationCompletionHandler(); 81 | } 82 | 83 | [self removeFromSuperview]; 84 | } 85 | 86 | @end 87 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/Classes/UIBezierPath+Shapes.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIBezierPath+Shapes.h 3 | // CBZSplashView 4 | // 5 | // Created by Mazyad Alabduljaleel on 8/8/14. 6 | // Copyright (c) 2014 Callum Boddy. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIBezierPath (Shapes) 12 | 13 | + (instancetype)rulerShape; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/Classes/UIBezierPath+Shapes.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIBezierPath+Shapes.m 3 | // CBZSplashView 4 | // 5 | // Created by Mazyad Alabduljaleel on 8/8/14. 6 | // Copyright (c) 2014 Callum Boddy. All rights reserved. 7 | // 8 | 9 | #import "UIBezierPath+Shapes.h" 10 | 11 | @implementation UIBezierPath (Shapes) 12 | 13 | + (instancetype)rulerShape 14 | { 15 | UIBezierPath* nPath = [UIBezierPath bezierPath]; 16 | 17 | CGSize size = CGSizeMake(200, 200); 18 | CGFloat diff = size.width/17.0; 19 | 20 | [nPath moveToPoint:CGPointMake(diff*3, diff*3)]; 21 | 22 | [nPath addLineToPoint: CGPointMake(diff*0.5, diff*5.5)]; 23 | [nPath addQuadCurveToPoint:CGPointMake(diff*0.5, diff*6.5) controlPoint:CGPointMake(0, diff*6)]; 24 | 25 | [nPath addLineToPoint: CGPointMake(diff*10.5, diff*16.5)]; 26 | [nPath addQuadCurveToPoint:CGPointMake(diff*11.5, diff*16.5) controlPoint:CGPointMake(diff*11, size.height)]; 27 | 28 | [nPath addLineToPoint: CGPointMake(diff*16.5, diff*11.5)]; 29 | [nPath addQuadCurveToPoint:CGPointMake(diff*16.5, diff*10.5) controlPoint:CGPointMake(size.width, diff*11)]; 30 | 31 | [nPath addLineToPoint: CGPointMake(diff*6.5, diff*0.5)]; 32 | [nPath addQuadCurveToPoint:CGPointMake(diff*5.5, diff*0.5) controlPoint:CGPointMake(diff*6, 0)]; 33 | [nPath closePath]; 34 | 35 | [nPath moveToPoint: CGPointMake(diff*4, diff*4)]; 36 | 37 | [nPath addLineToPoint:CGPointMake(diff*2, diff*6)]; 38 | [nPath addLineToPoint:CGPointMake(diff*3, diff*7)]; 39 | 40 | for (NSInteger i = 0; i<4; i++) 41 | { 42 | CGPoint topPoint = CGPointMake(diff*(5.5+i*2), diff*(4.5+i*2)); 43 | 44 | if (i%2 != 0) 45 | { 46 | topPoint = CGPointMake(diff*(4.2+i*2), diff*(5.8+i*2)); 47 | } 48 | 49 | CGPoint bottomPoint = CGPointMake(topPoint.x+diff, topPoint.y+diff); 50 | 51 | [nPath addLineToPoint: topPoint]; 52 | 53 | [nPath addCurveToPoint: bottomPoint controlPoint1: CGPointMake(topPoint.x + diff*0.75, topPoint.y - diff*0.75) controlPoint2: CGPointMake(bottomPoint.x + diff*0.75, bottomPoint.y - diff*0.75)]; 54 | 55 | [nPath addLineToPoint: CGPointMake(diff*(4+i*2), diff*(8+i*2))]; 56 | [nPath addLineToPoint: CGPointMake(diff*(5+i*2), diff*(9+i*2))]; 57 | } 58 | 59 | [nPath addLineToPoint: CGPointMake(diff*15, diff*11)]; 60 | [nPath addLineToPoint: CGPointMake(diff*6, diff*2)]; 61 | [nPath closePath]; 62 | 63 | return nPath; 64 | } 65 | 66 | @end 67 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/DebugHelper/SRDebugHelper.h: -------------------------------------------------------------------------------- 1 | // 2 | // SRDebugHelper.h 3 | // Screen Ruler 4 | // 5 | // Created by IEMacBook01 on 16/10/16. 6 | // Copyright © 2016 InfoEnum Software Systems. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | @interface SRDebugHelper : NSObject 13 | 14 | +(BOOL)isBeingDebugged; 15 | 16 | +(struct task_basic_info)memoryReport; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/DebugHelper/SRDebugHelper.m: -------------------------------------------------------------------------------- 1 | // 2 | // SRDebugHelper.m 3 | // Screen Ruler 4 | // 5 | // Created by IEMacBook01 on 16/10/16. 6 | // Copyright © 2016 InfoEnum Software Systems. All rights reserved. 7 | // 8 | 9 | #import "SRDebugHelper.h" 10 | #import 11 | #include 12 | #include 13 | #include 14 | #include 15 | #include 16 | 17 | @implementation SRDebugHelper 18 | 19 | +(struct task_basic_info)memoryReport 20 | { 21 | struct task_basic_info info; 22 | mach_msg_type_number_t size = sizeof(info); 23 | task_info(mach_task_self(), TASK_BASIC_INFO, (task_info_t)&info, &size); 24 | return info; 25 | // if( kerr == KERN_SUCCESS ) { 26 | // NSLog(@"Memory in use (in bytes): %lu", info.resident_size); 27 | // } else { 28 | // NSLog(@"Error with task_info(): %s", mach_error_string(kerr)); 29 | // } 30 | } 31 | 32 | +(BOOL)isBeingDebugged 33 | // Returns true if the current process is being debugged (either 34 | // running under the debugger or has a debugger attached post facto). 35 | { 36 | int junk; 37 | int mib[4]; 38 | struct kinfo_proc info; 39 | size_t size; 40 | 41 | // Initialize the flags so that, if sysctl fails for some bizarre 42 | // reason, we get a predictable result. 43 | 44 | info.kp_proc.p_flag = 0; 45 | 46 | // Initialize mib, which tells sysctl the info we want, in this case 47 | // we're looking for information about a specific process ID. 48 | 49 | mib[0] = CTL_KERN; 50 | mib[1] = KERN_PROC; 51 | mib[2] = KERN_PROC_PID; 52 | mib[3] = getpid(); 53 | 54 | // Call sysctl. 55 | 56 | size = sizeof(info); 57 | junk = sysctl(mib, sizeof(mib) / sizeof(*mib), &info, &size, NULL, 0); 58 | assert(junk == 0); 59 | 60 | // We're being debugged if the P_TRACED flag is set. 61 | 62 | return ( (info.kp_proc.p_flag & P_TRACED) != 0 ); 63 | } 64 | 65 | @end 66 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/IQAngleView/IQAngleView.h: -------------------------------------------------------------------------------- 1 | // 2 | // IQAngleView.h 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import 10 | 11 | @interface IQAngleView : UIView 12 | 13 | @property(nonatomic, strong) UIColor *textColor; 14 | @property(nonatomic, assign) CGFloat angle; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/IQAngleView/IQProtractorView.h: -------------------------------------------------------------------------------- 1 | // 2 | // IQProtractorView.h 3 | // Screen Ruler 4 | // 5 | // Created by IEMacBook02 on 24/12/16. 6 | // Copyright © 2016 InfoEnum Software Systems. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface IQProtractorView : UIView 12 | 13 | @property(strong, readonly) UIPanGestureRecognizer *panRecognizer; 14 | 15 | @property(nonatomic, strong) UIColor *textColor; 16 | @property(nonatomic, strong) UIColor *protractorColor; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/IQColorPicker/HFColorPicker/HFColorButton.h: -------------------------------------------------------------------------------- 1 | // 2 | // HFColorButton.h 3 | // HFColorPickerDemo 4 | // 5 | // Created by Hendrik Frahmann on 30.04.14. 6 | // Copyright (c) 2014 Hendrik Frahmann. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface HFColorButton : UIButton 12 | 13 | @property (nonatomic, strong) IBInspectable UIColor* color; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/IQColorPicker/HFColorPicker/HFColorButton.m: -------------------------------------------------------------------------------- 1 | // 2 | // HFColorButton.m 3 | // HFColorPickerDemo 4 | // 5 | // Created by Hendrik Frahmann on 30.04.14. 6 | // Copyright (c) 2014 Hendrik Frahmann. All rights reserved. 7 | // 8 | 9 | #import "HFColorButton.h" 10 | 11 | @interface HFColorButton() 12 | { 13 | CGContextRef context; 14 | } 15 | @end 16 | 17 | 18 | @implementation HFColorButton 19 | 20 | @synthesize color = _color; 21 | 22 | static inline float radians(double degrees) { return degrees * M_PI / 180; } 23 | 24 | - (void)drawRect:(CGRect)rect 25 | { 26 | CGRect parentViewBounds = self.bounds; 27 | 28 | CGFloat centerX = CGRectGetWidth(parentViewBounds) / 2; 29 | CGFloat centerY = CGRectGetHeight(parentViewBounds) / 2; 30 | 31 | CGFloat radius = self.bounds.size.width / 2; 32 | 33 | // Get the graphics context and clear it 34 | if(context == nil) 35 | context = UIGraphicsGetCurrentContext(); 36 | CGContextClearRect(context, rect); 37 | 38 | CGFloat colorRadius = radius * 0.6; 39 | 40 | if(self.selected) 41 | { 42 | colorRadius = radius * 0.7; 43 | 44 | CGContextSetShadowWithColor(context, CGSizeMake(0.0f, 0.0f), 2.0f, [[UIColor colorWithRed:0 green:0 blue:0 alpha:1] CGColor]); 45 | CGContextSetFillColor(context, CGColorGetComponents([[UIColor colorWithRed:1 green:1 blue:1 alpha:1.0] CGColor])); 46 | CGContextMoveToPoint(context, centerX, centerY); 47 | CGContextAddArc(context, centerX, centerY, radius*0.9, radians(0), radians(360), 0); 48 | CGContextClosePath(context); 49 | CGContextFillPath(context); 50 | } 51 | 52 | 53 | CGContextSetShadow(context, CGSizeMake(0,0), 0); 54 | CGContextSetFillColor(context, CGColorGetComponents([_color CGColor])); 55 | CGContextMoveToPoint(context, centerX, centerY); 56 | CGContextAddArc(context, centerX, centerY, colorRadius, radians(0), radians(360), 0); 57 | CGContextClosePath(context); 58 | CGContextFillPath(context); 59 | } 60 | 61 | @end 62 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/IQColorPicker/HFColorPicker/HFColorPickerView.h: -------------------------------------------------------------------------------- 1 | // 2 | // HFColorPickerView.h 3 | // HFColorPickerDemo 4 | // 5 | // Created by Hendrik Frahmann on 30.04.14. 6 | // Copyright (c) 2014 Hendrik Frahmann. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @protocol HFColorPickerViewDelegate; 12 | 13 | @interface HFColorPickerView : UIView 14 | 15 | @property (nonatomic, assign) IBOutlet id delegate; 16 | @property (nonatomic, strong) NSArray* colors; 17 | @property (nonatomic) CGFloat buttonDiameter; 18 | @property (nonatomic) NSInteger selectedIndex; 19 | @property (nonatomic) NSUInteger numberOfColorsPerRow; 20 | 21 | +(NSArray *)colorAttributes; 22 | 23 | @end 24 | 25 | 26 | @protocol HFColorPickerViewDelegate 27 | 28 | - (void)colorPicker:(HFColorPickerView*)colorPickerView selectedColor:(UIColor*)selectedColor; 29 | 30 | @end -------------------------------------------------------------------------------- /ScreenRuler/Vendor/IQColorPicker/IQColorPickerButton.h: -------------------------------------------------------------------------------- 1 | // 2 | // IQColorPickerButton.h 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | 10 | #import "HFColorButton.h" 11 | 12 | @interface IQColorPickerButton : HFColorButton 13 | 14 | @property (nullable, readwrite, strong) UIView *inputView; 15 | @property (nullable, readwrite, strong) UIView *inputAccessoryView; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/IQColorPicker/IQTextPickerButton.h: -------------------------------------------------------------------------------- 1 | // 2 | // IQTextPickerButton.h 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import 10 | 11 | @interface IQTextPickerButton : UIButton 12 | 13 | @property (nullable, readwrite, strong) UIView *inputView; 14 | @property (nullable, readwrite, strong) UIView *inputAccessoryView; 15 | 16 | @property(nullable,nonatomic, strong) NSString* selectedItem; 17 | 18 | @property(nullable,nonatomic, strong) NSArray *items; 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/IQColorPicker/IQTextPickerButton.m: -------------------------------------------------------------------------------- 1 | // 2 | // IQTextPickerButton.m 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import "IQTextPickerButton.h" 10 | 11 | @interface IQTextPickerButton () 12 | 13 | @end 14 | 15 | 16 | @implementation IQTextPickerButton 17 | { 18 | UIPickerView *pickerView; 19 | } 20 | 21 | -(void)initialize 22 | { 23 | self.selected = YES; 24 | 25 | pickerView = [[UIPickerView alloc] init]; 26 | [pickerView sizeToFit]; 27 | pickerView.delegate = self; 28 | 29 | self.inputView = pickerView; 30 | 31 | { 32 | UIToolbar *toolbar = [[UIToolbar alloc] init]; 33 | [toolbar sizeToFit]; 34 | 35 | NSMutableArray *items = [[NSMutableArray alloc] init]; 36 | 37 | //Flexible space 38 | UIBarButtonItem *nilButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 39 | [items addObject:nilButton]; 40 | 41 | //Done button 42 | UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneAction:)]; 43 | [items addObject:doneButton]; 44 | 45 | // Adding button to toolBar. 46 | [toolbar setItems:items]; 47 | 48 | self.inputAccessoryView = toolbar; 49 | 50 | [self addTarget:self action:@selector(textPickerTapped:) forControlEvents:UIControlEventTouchUpInside]; 51 | } 52 | 53 | self.tintColor = [UIColor clearColor]; 54 | } 55 | 56 | - (instancetype)initWithFrame:(CGRect)frame 57 | { 58 | self = [super initWithFrame:frame]; 59 | if (self) { 60 | [self initialize]; 61 | } 62 | return self; 63 | } 64 | 65 | -(void)awakeFromNib 66 | { 67 | [super awakeFromNib]; 68 | 69 | [self initialize]; 70 | } 71 | 72 | -(void)doneAction:(UIBarButtonItem*)item 73 | { 74 | [self resignFirstResponder]; 75 | } 76 | 77 | -(void)textPickerTapped:(IQTextPickerButton*)textPicker 78 | { 79 | [self becomeFirstResponder]; 80 | } 81 | 82 | -(BOOL)canBecomeFirstResponder 83 | { 84 | return YES; 85 | } 86 | 87 | -(BOOL)becomeFirstResponder 88 | { 89 | if (_selectedItem) 90 | { 91 | [pickerView selectRow:[_items indexOfObject:_selectedItem] inComponent:0 animated:YES]; 92 | } 93 | 94 | return [super becomeFirstResponder]; 95 | } 96 | 97 | -(BOOL)resignFirstResponder 98 | { 99 | self.selectedItem = _items[[pickerView selectedRowInComponent:0]]; 100 | [self sendActionsForControlEvents:UIControlEventValueChanged]; 101 | return [super resignFirstResponder]; 102 | } 103 | 104 | -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 105 | { 106 | return 1; 107 | } 108 | 109 | -(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 110 | { 111 | return _items.count; 112 | } 113 | 114 | -(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 115 | { 116 | return _items[row]; 117 | } 118 | 119 | -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 120 | { 121 | self.selectedItem = _items[row]; 122 | [self sendActionsForControlEvents:UIControlEventValueChanged]; 123 | } 124 | 125 | -(void)setSelectedItem:(NSString *)selectedItem 126 | { 127 | for (NSString *item in _items) 128 | { 129 | if ([item isEqualToString:selectedItem]) 130 | { 131 | _selectedItem = selectedItem; 132 | [self setTitle:item forState:UIControlStateNormal]; 133 | [pickerView selectRow:[_items indexOfObject:selectedItem] inComponent:0 animated:YES]; 134 | break; 135 | } 136 | } 137 | } 138 | 139 | @end 140 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/IQColorPicker/UIColor+HexColors.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIColor+HexColors.h 3 | // KiwiHarness 4 | // 5 | // Created by Tim Duckett on 07/09/2012. 6 | // Copyright (c) 2012 Charismatic Megafauna Ltd. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIColor (HexColors) 12 | 13 | @property(nonatomic, readonly) NSString *hexValue; 14 | @property(nonatomic, readonly) CGFloat alpha; 15 | @property(nonatomic, readonly) CGFloat red; 16 | @property(nonatomic, readonly) CGFloat green; 17 | @property(nonatomic, readonly) CGFloat blue; 18 | 19 | +(UIColor *)colorWithHexString:(NSString *)hexString; 20 | 21 | -(BOOL)isDarkColor; 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/IQColorPicker/UIColor+HexColors.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIColor+HexColors.m 3 | // KiwiHarness 4 | // 5 | // Created by Tim on 07/09/2012. 6 | // Copyright (c) 2012 Charismatic Megafauna Ltd. All rights reserved. 7 | // 8 | 9 | #import "UIColor+HexColors.h" 10 | 11 | @implementation UIColor (HexColors) 12 | 13 | -(CGFloat)alpha 14 | { 15 | return CGColorGetAlpha(self.CGColor); 16 | } 17 | 18 | -(CGFloat)red 19 | { 20 | CGFloat red; 21 | 22 | [self getRed:&red green:NULL blue:NULL alpha:NULL]; 23 | 24 | return red; 25 | } 26 | 27 | -(CGFloat)green 28 | { 29 | CGFloat green; 30 | 31 | [self getRed:NULL green:&green blue:NULL alpha:NULL]; 32 | 33 | return green; 34 | } 35 | 36 | -(CGFloat)blue 37 | { 38 | CGFloat blue; 39 | 40 | [self getRed:NULL green:NULL blue:&blue alpha:NULL]; 41 | 42 | return blue; 43 | } 44 | 45 | +(UIColor *)colorWithHexString:(NSString *)hexString { 46 | 47 | if ([hexString length] != 6) { 48 | return nil; 49 | } 50 | 51 | // Brutal and not-very elegant test for non hex-numeric characters 52 | NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[^a-fA-F|0-9]" options:0 error:NULL]; 53 | NSUInteger match = [regex numberOfMatchesInString:hexString options:NSMatchingReportCompletion range:NSMakeRange(0, [hexString length])]; 54 | 55 | if (match != 0) { 56 | return nil; 57 | } 58 | 59 | NSRange rRange = NSMakeRange(0, 2); 60 | NSString *rComponent = [hexString substringWithRange:rRange]; 61 | unsigned rVal = 0; 62 | NSScanner *rScanner = [NSScanner scannerWithString:rComponent]; 63 | [rScanner scanHexInt:&rVal]; 64 | float rRetVal = (float)rVal / 255; 65 | 66 | 67 | NSRange gRange = NSMakeRange(2, 2); 68 | NSString *gComponent = [hexString substringWithRange:gRange]; 69 | unsigned gVal = 0; 70 | NSScanner *gScanner = [NSScanner scannerWithString:gComponent]; 71 | [gScanner scanHexInt:&gVal]; 72 | float gRetVal = (float)gVal / 255; 73 | 74 | NSRange bRange = NSMakeRange(4, 2); 75 | NSString *bComponent = [hexString substringWithRange:bRange]; 76 | unsigned bVal = 0; 77 | NSScanner *bScanner = [NSScanner scannerWithString:bComponent]; 78 | [bScanner scanHexInt:&bVal]; 79 | float bRetVal = (float)bVal / 255; 80 | 81 | return [UIColor colorWithRed:rRetVal green:gRetVal blue:bRetVal alpha:1.0f]; 82 | 83 | } 84 | 85 | -(NSString *)hexValue 86 | { 87 | if (self == [UIColor whiteColor]) 88 | { 89 | // Special case, as white doesn't fall into the RGB color space 90 | return @"ffffff"; 91 | } 92 | 93 | CGFloat red; 94 | CGFloat blue; 95 | CGFloat green; 96 | CGFloat alpha; 97 | 98 | [self getRed:&red green:&green blue:&blue alpha:&alpha]; 99 | 100 | int redDec = (int)(red * 255); 101 | int greenDec = (int)(green * 255); 102 | int blueDec = (int)(blue * 255); 103 | 104 | NSString *returnString = [NSString stringWithFormat:@"%02x%02x%02x", (unsigned int)redDec, (unsigned int)greenDec, (unsigned int)blueDec]; 105 | 106 | return returnString; 107 | 108 | } 109 | 110 | -(BOOL)isDarkColor; 111 | { 112 | const CGFloat *componentColors = CGColorGetComponents(self.CGColor); 113 | 114 | CGFloat colorBrightness = ((componentColors[0] * 299) + (componentColors[1] * 587) + (componentColors[2] * 114)) / 1000; 115 | 116 | return (colorBrightness < 0.5); 117 | } 118 | 119 | @end 120 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/IQCropperView/IQCropperView.h: -------------------------------------------------------------------------------- 1 | // 2 | // IQCropperView.h 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import 10 | 11 | @class IQCropperView; 12 | 13 | typedef NS_ENUM(NSInteger, IQCropViewEdge) { 14 | IQCropViewEdgeNone, 15 | IQCropViewEdgeTopLeft, 16 | IQCropViewEdgeTop, 17 | IQCropViewEdgeTopRight, 18 | IQCropViewEdgeRight, 19 | IQCropViewEdgeBottomRight, 20 | IQCropViewEdgeBottom, 21 | IQCropViewEdgeBottomLeft, 22 | IQCropViewEdgeLeft 23 | }; 24 | 25 | typedef NS_ENUM(NSInteger, IQ_IQAspectSize) { 26 | IQ_IQAspectSizeOriginal, 27 | IQ_IQAspectSizeSquare, 28 | 29 | IQ_IQAspectSize2x3, 30 | IQ_IQAspectSize3x4, 31 | IQ_IQAspectSize4x5, 32 | IQ_IQAspectSize5x7, 33 | IQ_IQAspectSize9x16, 34 | IQ_IQAspectSize1x235, 35 | 36 | IQ_IQAspectSize3x2, 37 | IQ_IQAspectSize4x3, 38 | IQ_IQAspectSize5x4, 39 | IQ_IQAspectSize7x5, 40 | IQ_IQAspectSize16x9, 41 | IQ_IQAspectSize235x1, 42 | 43 | }; 44 | 45 | @protocol IQCropViewDelegate 46 | 47 | @optional 48 | -(void)cropViewDidChangedCropRect:(IQCropperView*)view; 49 | 50 | @end 51 | 52 | @interface IQCropperView : UIView 53 | 54 | @property(nonatomic, assign) UIEdgeInsets edgeInset; 55 | 56 | @property(nonatomic, weak) IBOutlet id delegate; 57 | @property(nonatomic, assign) CGRect cropRect; 58 | @property(nonatomic, assign) IQ_IQAspectSize aspectSize; 59 | 60 | -(void)updateCropRectAnimated:(BOOL)animated; 61 | 62 | @end 63 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/IQCropperView/UIImage+CropRotate.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIImage+CropRotate.h 3 | // 4 | // Copyright 2015-2016 Timothy Oliver. All rights reserved. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to 8 | // deal in the Software without restriction, including without limitation the 9 | // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 10 | // sell copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 17 | // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 20 | // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 21 | // IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 22 | 23 | #import 24 | 25 | @interface UIImage (CropRotate) 26 | 27 | - (UIImage *)croppedImageWithFrame:(CGRect)frame angle:(NSInteger)angle; 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/IQCropperView/UIImage+CropRotate.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIImage+CropRotate.m 3 | // 4 | // Copyright 2015-2016 Timothy Oliver. All rights reserved. 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to 8 | // deal in the Software without restriction, including without limitation the 9 | // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 10 | // sell copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 17 | // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 20 | // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 21 | // IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 22 | 23 | #import "UIImage+CropRotate.h" 24 | 25 | @implementation UIImage (CropRotate) 26 | 27 | - (BOOL)hasAlpha 28 | { 29 | CGImageAlphaInfo alphaInfo = CGImageGetAlphaInfo(self.CGImage); 30 | return (alphaInfo == kCGImageAlphaFirst || alphaInfo == kCGImageAlphaLast || 31 | alphaInfo == kCGImageAlphaPremultipliedFirst || alphaInfo == kCGImageAlphaPremultipliedLast); 32 | } 33 | 34 | - (UIImage *)croppedImageWithFrame:(CGRect)frame angle:(NSInteger)angle 35 | { 36 | frame = CGRectIntersection(CGRectMake(0, 0, self.size.width, self.size.height), frame); 37 | 38 | UIImage *croppedImage = nil; 39 | UIGraphicsBeginImageContextWithOptions(frame.size, ![self hasAlpha], self.scale); 40 | { 41 | CGContextRef context = UIGraphicsGetCurrentContext(); 42 | 43 | //To conserve memory in not needing to completely re-render the image re-rotated, 44 | //map the image to a view and then use Core Animation to manipulate its rotation 45 | if (angle != 0) { 46 | UIImageView *imageView = [[UIImageView alloc] initWithImage:self]; 47 | imageView.layer.minificationFilter = kCAFilterNearest; 48 | imageView.layer.magnificationFilter = kCAFilterNearest; 49 | imageView.transform = CGAffineTransformRotate(CGAffineTransformIdentity, angle * (M_PI/180.0f)); 50 | CGRect rotatedRect = CGRectApplyAffineTransform(imageView.bounds, imageView.transform); 51 | UIView *containerView = [[UIView alloc] initWithFrame:(CGRect){CGPointZero, rotatedRect.size}]; 52 | [containerView addSubview:imageView]; 53 | imageView.center = containerView.center; 54 | CGContextTranslateCTM(context, -frame.origin.x, -frame.origin.y); 55 | [containerView.layer renderInContext:context]; 56 | } 57 | else { 58 | CGContextTranslateCTM(context, -frame.origin.x, -frame.origin.y); 59 | [self drawAtPoint:CGPointZero]; 60 | } 61 | 62 | croppedImage = UIGraphicsGetImageFromCurrentImageContext(); 63 | } 64 | UIGraphicsEndImageContext(); 65 | 66 | return croppedImage; 67 | } 68 | 69 | 70 | @end 71 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/IQGeometry/IQGeometry+AffineTransform.h: -------------------------------------------------------------------------------- 1 | // 2 | // IQGeometry+CGAffineTransform.h 3 | // Geometry Extension 4 | // 5 | // Created by Iftekhar Mac Pro on 8/25/13. 6 | // Copyright (c) 2013 Iftekhar. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | CGFloat IQAffineTransformGetAngle(CGAffineTransform t); 13 | 14 | CGSize IQAffineTransformGetScale(CGAffineTransform t); 15 | 16 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/IQGeometry/IQGeometry+AffineTransform.m: -------------------------------------------------------------------------------- 1 | // 2 | // IQGeometry+CGAffineTransform.m 3 | // Geometry Extension 4 | // 5 | // Created by Iftekhar Mac Pro on 8/25/13. 6 | // Copyright (c) 2013 Iftekhar. All rights reserved. 7 | // 8 | 9 | #import "IQGeometry+AffineTransform.h" 10 | 11 | CGFloat IQAffineTransformGetAngle(CGAffineTransform t) 12 | { 13 | return atan2(t.b, t.a); 14 | } 15 | 16 | CGSize IQAffineTransformGetScale(CGAffineTransform t) 17 | { 18 | return CGSizeMake(sqrt(t.a * t.a + t.c * t.c), sqrt(t.b * t.b + t.d * t.d)) ; 19 | } 20 | 21 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/IQGeometry/IQGeometry+Angle.h: -------------------------------------------------------------------------------- 1 | // 2 | // IQGeometry+Angle.h 3 | // Geometry Extension 4 | // 5 | // Created by Iftekhar Mac Pro on 8/25/13. 6 | // Copyright (c) 2013 Iftekhar. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | /*Angle conversion*/ 13 | CGFloat IQDegreeToRadian(CGFloat angle); 14 | CGFloat IQRadianToDegree(CGFloat radians); 15 | 16 | /*Angle between two point*/ 17 | // Say the distances are P1-P2 = A, P2-P3 = B and P3-P1 = C: 18 | // Angle = arccos ( (B^2-A^2-C^2) / 2AC ) 19 | CGFloat IQPointGetAngle(CGPoint centerPoint, CGPoint point1, CGPoint point2); 20 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/IQGeometry/IQGeometry+Angle.m: -------------------------------------------------------------------------------- 1 | // 2 | // IQGeometry+Angle.m 3 | // Geometry Extension 4 | // 5 | // Created by Iftekhar Mac Pro on 8/25/13. 6 | // Copyright (c) 2013 Iftekhar. All rights reserved. 7 | // 8 | 9 | #import "IQGeometry+Angle.h" 10 | #import "IQGeometry+Distance.h" 11 | 12 | CGFloat IQDegreeToRadian(CGFloat angle) 13 | { 14 | return angle*(M_PI/180.0); 15 | } 16 | 17 | CGFloat IQRadianToDegree(CGFloat radians) 18 | { 19 | return radians*(180.0/M_PI); 20 | } 21 | 22 | CGFloat IQPointGetAngle(CGPoint centerPoint, CGPoint point1, CGPoint point2) 23 | { 24 | //Find angle. 25 | CGFloat angle = atan2(point2.y-centerPoint.y, point2.x-centerPoint.x) - atan2(point1.y-centerPoint.y, point1.x-centerPoint.x); 26 | 27 | //If angle is less than 0. then adding 360 degree to it. 28 | return (angle>0 ? angle : angle+M_PI*2); 29 | } 30 | 31 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/IQGeometry/IQGeometry+Distance.h: -------------------------------------------------------------------------------- 1 | // 2 | // IQGeometry+Distance.h 3 | // Geometry Extension 4 | // 5 | // Created by Iftekhar Mac Pro on 8/25/13. 6 | // Copyright (c) 2013 Iftekhar. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | /* 12 | A (x1, y1) and B (x2, y2) = sqrt( (x2−x1)2+(y2−y1)2) 13 | */ 14 | CGFloat IQPointGetDistance(CGPoint point1, CGPoint point2); 15 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/IQGeometry/IQGeometry+Distance.m: -------------------------------------------------------------------------------- 1 | // 2 | // IQGeometry+Distance.m 3 | // Geometry Extension 4 | // 5 | // Created by Iftekhar Mac Pro on 8/25/13. 6 | // Copyright (c) 2013 Iftekhar. All rights reserved. 7 | // 8 | 9 | #import "IQGeometry+Distance.h" 10 | 11 | CGFloat IQPointGetDistance(CGPoint point1, CGPoint point2) 12 | { 13 | //Saving Variables. 14 | CGFloat fx = (point2.x - point1.x); 15 | CGFloat fy = (point2.y - point1.y); 16 | 17 | return sqrt((fx*fx + fy*fy)); 18 | } 19 | 20 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/IQGeometry/IQGeometry+Line.h: -------------------------------------------------------------------------------- 1 | // 2 | // IQGeometry+CGLine.h 3 | // Geometry Extension 4 | // 5 | // Created by Iftekhar Mac Pro on 8/25/13. 6 | // Copyright (c) 2013 Iftekhar. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | struct IQLine { 13 | CGPoint beginPoint; 14 | CGPoint endPoint; 15 | }; 16 | typedef struct IQLine IQLine; 17 | 18 | IQLine IQLineMake(CGPoint beginPoint, CGPoint endPoint); 19 | 20 | 21 | 22 | @interface NSValue (Line) 23 | 24 | + (id)valueWithIQLine:(IQLine)line; 25 | 26 | - (IQLine)lineValue; 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/IQGeometry/IQGeometry+Line.m: -------------------------------------------------------------------------------- 1 | // 2 | // IQGeometry+CGLine.m 3 | // Geometry Extension 4 | // 5 | // Created by Iftekhar Mac Pro on 8/25/13. 6 | // Copyright (c) 2013 Iftekhar. All rights reserved. 7 | // 8 | 9 | #import "IQGeometry+Line.h" 10 | 11 | IQLine IQLineMake(CGPoint beginPoint, CGPoint endPoint) 12 | { 13 | IQLine line; line.beginPoint = beginPoint; line.endPoint = endPoint; return line; 14 | } 15 | 16 | 17 | 18 | @implementation NSValue (Line) 19 | 20 | + (id)valueWithIQLine:(IQLine)line 21 | { 22 | return [NSValue value:&line withObjCType:@encode(IQLine)]; 23 | } 24 | 25 | - (IQLine)lineValue; 26 | { 27 | IQLine line; [self getValue:&line]; return line; 28 | } 29 | 30 | @end -------------------------------------------------------------------------------- /ScreenRuler/Vendor/IQGeometry/IQGeometry+Point.h: -------------------------------------------------------------------------------- 1 | // 2 | // IQGeometry+CGPoint.h 3 | // Geometry Extension 4 | // 5 | // Created by Iftekhar Mac Pro on 8/25/13. 6 | // Copyright (c) 2013 Iftekhar. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | #import "IQGeometry+Line.h" 12 | 13 | CGPoint IQPointGetMidPoint(CGPoint point1, CGPoint point2); 14 | 15 | /* (x1,y1) (x,y) (x2,y2) */ 16 | /* *-----------------*----------------------------------* */ 17 | /* <----distance-----> */ 18 | //Returns a point(x,y) lies between point1(x1,y1) and point2(x2,y2) by distance from point1(x1,y1). 19 | CGPoint IQPointWithDistance(CGPoint point1, CGPoint point2, CGFloat distance); 20 | 21 | /* 22 | line1.beginPoint line2.endPoint 23 | \ / 24 | \ / 25 | \/ 26 | /\ 27 | / \ 28 | / \ 29 | line2.beginPoint line1.endPoint 30 | */ 31 | CGPoint IQPointOfIntersect(IQLine line1, IQLine line2); 32 | 33 | CGFloat IQPointGetDistanceOfPoint(CGPoint point, IQLine line); 34 | 35 | /* Centroid of points, A, B and C is (x1+x2+x3)/3, (y1+y2+y3)/3 */ 36 | CGPoint IQPointCentroidOfPoints(NSArray* points); 37 | 38 | CGPoint IQPointRotate(CGPoint basePoint,CGPoint point, CGFloat angle); 39 | 40 | CGPoint IQPointGetNearPoint(CGPoint basePoint, NSArray *points); 41 | 42 | CGPoint IQPointFlipHorizontal(CGPoint point, CGRect outerRect); 43 | 44 | CGPoint IQPointFlipVertical(CGPoint point, CGRect outerRect); 45 | 46 | CGPoint IQPointAspectFill(CGPoint point, CGSize destSize, CGRect sourceRect); 47 | 48 | CGPoint IQPointOffset(CGPoint aPoint, CGFloat dx, CGFloat dy); 49 | 50 | CGPoint IQPointScale(CGPoint aPoint, CGFloat wScale, CGFloat hScale); 51 | 52 | // Flipping coordinates 53 | CGPoint IQPointFlip(CGPoint point); 54 | 55 | 56 | 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/IQGeometry/IQGeometry+Rect.h: -------------------------------------------------------------------------------- 1 | // 2 | // IQGeometry+Convenience.h 3 | // Geometry Extension 4 | // 5 | // Created by Iftekhar Mac Pro on 8/25/13. 6 | // Copyright (c) 2013 Iftekhar. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | /*Set Origin*/ 13 | CGRect IQRectSetX(CGRect rect, CGFloat x); 14 | CGRect IQRectSetY(CGRect rect, CGFloat y); 15 | CGRect IQRectSetOrigin(CGRect rect, CGPoint origin); 16 | CGRect IQRectMakeOrigin(CGRect rect, CGFloat x, CGFloat y); 17 | 18 | /*Set Size*/ 19 | CGRect IQRectSetHeight(CGRect rect, CGFloat height); 20 | CGRect IQRectSetWidth(CGRect rect, CGFloat width); 21 | CGRect IQRectSetSize(CGRect rect, CGSize size); 22 | CGRect IQRectMakeSize(CGRect rect, CGFloat width, CGFloat height); 23 | 24 | /*Set Center*/ 25 | CGRect IQRectSetCenter(CGRect rect, CGPoint center); 26 | CGPoint IQRectGetCenter(CGRect rect); 27 | CGRect IQRectWithCenterSize(CGPoint center, CGSize size); 28 | CGRect IQRectCenteredInRect(CGRect rect, CGRect mainRect); 29 | 30 | /*Rect from Points*/ 31 | CGRect IQRectFromPoint(CGPoint startPoint, CGPoint endPoint); 32 | 33 | CGPoint IQRectGetTopLeft(CGRect rect); 34 | CGPoint IQRectGetTopRight(CGRect rect); 35 | CGPoint IQRectGetBottomLeft(CGRect rect); 36 | CGPoint IQRectGetBottomRight(CGRect rect); 37 | 38 | /*Flip Rect Origin and Size*/ 39 | CGRect IQRectFlipHorizontal(CGRect rect, CGRect outerRect); 40 | CGRect IQRectFlipVertical(CGRect rect, CGRect outerRect); 41 | CGRect IQRectFlipFlop(CGRect rect); 42 | // Does not affect size 43 | CGRect IQRectFlipOrigin(CGRect rect); 44 | // Does not affect point of origin 45 | CGRect IQRectFlipSize(CGRect rect); 46 | 47 | /*Scale*/ 48 | CGRect IQRectScale(CGRect rect, CGFloat wScale, CGFloat hScale); 49 | CGRect IQRectScaleOrigin(CGRect rect, CGFloat wScale, CGFloat hScale); 50 | CGRect IQRectScaleSize(CGRect rect, CGFloat wScale, CGFloat hScale); 51 | 52 | /*Aspect Fit*/ 53 | CGRect IQRectAspectFit(CGSize sourceSize, CGRect destRect); 54 | CGFloat IQAspectScaleFit(CGSize sourceSize, CGRect destRect); 55 | // Only scales down, not up, and centers result 56 | CGRect IQRectFitSizeInRect(CGSize sourceSize, CGRect destRect); 57 | 58 | /*Aspect Fill*/ 59 | CGRect IQRectAspectFillRect(CGSize sourceSize, CGRect destRect); 60 | CGFloat IQAspectScaleFill(CGSize sourceSize, CGRect destRect); 61 | 62 | CGRect IQBoundAspectFillRectWithAngle(CGRect rect, CGFloat angle); 63 | CGRect IQBoundAspectFitRectWithAngle(CGRect rect, CGFloat angle); 64 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/IQGeometry/IQGeometry+Size.h: -------------------------------------------------------------------------------- 1 | // 2 | // IQGeometry+CGSize.h 3 | // Geometry Extension 4 | // 5 | // Created by Iftekhar Mac Pro on 8/25/13. 6 | // Copyright (c) 2013 Iftekhar. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | CGSize IQSizeScale(CGSize aSize, CGFloat wScale, CGFloat hScale); 13 | 14 | CGSize IQSizeFlip(CGSize size); 15 | 16 | CGSize IQSizeFitInSize(CGSize sourceSize, CGSize destSize); 17 | 18 | CGSize IQSizeGetScale(CGSize sourceSize, CGSize destSize); 19 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/IQGeometry/IQGeometry+Size.m: -------------------------------------------------------------------------------- 1 | // 2 | // IQGeometry+CGSize.m 3 | // Geometry Extension 4 | // 5 | // Created by Iftekhar Mac Pro on 8/25/13. 6 | // Copyright (c) 2013 Iftekhar. All rights reserved. 7 | // 8 | 9 | #import "IQGeometry+Size.h" 10 | 11 | CGSize IQSizeScale(CGSize aSize, CGFloat wScale, CGFloat hScale) 12 | { 13 | return CGSizeMake(aSize.width * wScale, aSize.height * hScale); 14 | } 15 | 16 | CGSize IQSizeGetScale(CGSize sourceSize, CGSize destSize) 17 | { 18 | CGFloat scaleW = destSize.width / sourceSize.width; 19 | CGFloat scaleH = destSize.height / sourceSize.height; 20 | 21 | return CGSizeMake(scaleW, scaleH); 22 | } 23 | 24 | CGSize IQSizeFlip(CGSize size) 25 | { 26 | return CGSizeMake(size.height, size.width); 27 | } 28 | 29 | CGSize IQSizeFitInSize(CGSize sourceSize, CGSize destSize) 30 | { 31 | CGFloat destScale; 32 | CGSize newSize = sourceSize; 33 | 34 | if (newSize.height && (newSize.height > destSize.height)) 35 | { 36 | destScale = destSize.height / newSize.height; 37 | newSize.width *= destScale; 38 | newSize.height *= destScale; 39 | } 40 | 41 | if (newSize.width && (newSize.width >= destSize.width)) 42 | { 43 | destScale = destSize.width / newSize.width; 44 | newSize.width *= destScale; 45 | newSize.height *= destScale; 46 | } 47 | 48 | return newSize; 49 | } 50 | 51 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/IQGeometry/IQGeometry.h: -------------------------------------------------------------------------------- 1 | // 2 | // IQGeometry.h 3 | // Geometry Extension 4 | // 5 | // Created by Iftekhar Mac Pro on 8/25/13. 6 | // Copyright (c) 2013 Iftekhar. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import 12 | #import 13 | #import 14 | #import 15 | #import 16 | #import 17 | #import 18 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/IQLineFrameView/IQLineFrameView.h: -------------------------------------------------------------------------------- 1 | // 2 | // IQLineFrameView.h 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import 10 | 11 | @class IQLineFrameView; 12 | 13 | @protocol IQLineFrameViewDelegate 14 | 15 | -(void)lineFrameDidChangeStartingScalePoint:(IQLineFrameView*)lineView; 16 | 17 | @end 18 | 19 | @interface IQLineFrameView : UIView 20 | 21 | @property(nonatomic, weak) id delegate; 22 | 23 | @property(nonatomic,assign) CGPoint startingScalePoint; 24 | @property(nonatomic,assign) CGSize scaleMargin; 25 | 26 | @property(nonatomic,assign) CGFloat deviceScale; 27 | 28 | @property(nonatomic,assign) CGFloat zoomScale; 29 | -(void)setZoomScale:(CGFloat)zoomScale animated:(BOOL)animated; 30 | 31 | @property(nonatomic,weak) UIView *respectiveView; 32 | 33 | @property(nonatomic, strong) UIColor *lineColor; 34 | @property(nonatomic,strong) UIColor *rulerColor; 35 | 36 | @property(nonatomic, assign) BOOL hideRuler; 37 | 38 | -(void)updateUIAnimated:(BOOL)animated; 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/IQLineFrameView/NSMutableArray+Stack.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSMutableArray+Stack.h 3 | // Screen Ruler 4 | // 5 | // Created by IEMacBook02 on 06/11/16. 6 | // Copyright © 2016 InfoEnum Software Systems. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSMutableArray (Stack) 12 | 13 | -(void)push:(id)object; 14 | -(void)pushObjects:(NSArray*)objects; 15 | -(id)pop; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/IQLineFrameView/NSMutableArray+Stack.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSMutableArray+Stack.m 3 | // Screen Ruler 4 | // 5 | // Created by IEMacBook02 on 06/11/16. 6 | // Copyright © 2016 InfoEnum Software Systems. All rights reserved. 7 | // 8 | 9 | #import "NSMutableArray+Stack.h" 10 | 11 | @implementation NSMutableArray (Stack) 12 | 13 | -(void)push:(id)object 14 | { 15 | [self addObject:object]; 16 | } 17 | 18 | -(void)pushObjects:(NSArray*)objects 19 | { 20 | [self addObjectsFromArray:objects]; 21 | } 22 | 23 | -(id)pop 24 | { 25 | id object = [self lastObject]; 26 | [self removeLastObject]; 27 | return object; 28 | } 29 | 30 | @end 31 | 32 | 33 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/IQLineFrameView/SRLineImageView.h: -------------------------------------------------------------------------------- 1 | // 2 | // SRLineView.h 3 | // Screen Ruler 4 | // 5 | // Created by IEMacBook02 on 06/11/16. 6 | // Copyright © 2016 InfoEnum Software Systems. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface SRLineImageView : UIImageView 12 | 13 | @property(nonatomic,assign) CGPoint startingScalePoint; 14 | @property(nonatomic,assign) CGSize scaleMargin; 15 | 16 | @property(nonatomic,assign) CGFloat deviceScale; 17 | 18 | @property(nonatomic,assign) CGFloat zoomScale; 19 | 20 | @property(nonatomic, strong) UIColor *lineColor; 21 | 22 | @property(nonatomic, assign) BOOL hideLine; 23 | 24 | @end 25 | 26 | 27 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/IQRulerScrollView/IQRulerScrollView.h: -------------------------------------------------------------------------------- 1 | // 2 | // IQRulerScrollView.h 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import 10 | #import "SRLineImageView.h" 11 | 12 | @interface IQRulerScrollView : UIScrollView 13 | 14 | @property(nonatomic, strong) UIView *contentView; 15 | 16 | @property(nonatomic, strong) SRLineImageView *imageView; 17 | 18 | @property(nonatomic, strong) UIImage *image; 19 | 20 | @property (strong, nonatomic, readonly) UITapGestureRecognizer *doubleTapRecognizer; 21 | 22 | @property (strong, nonatomic) UITapGestureRecognizer *doubleTapTwoFingerRecognizer; 23 | 24 | @end 25 | 26 | 27 | @interface UIView (IQRulerScrollViewHierarchy) 28 | 29 | @property(readonly, assign) IQRulerScrollView *rulerView; 30 | 31 | @end 32 | 33 | 34 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/IQRulerScrollView/IQScrollContainerView.h: -------------------------------------------------------------------------------- 1 | // 2 | // IQScrollContainerView.h 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import 10 | #import "IQRulerScrollView.h" 11 | 12 | @interface IQScrollContainerView : UIView 13 | 14 | @property(nonatomic) UIViewContentMode contentMode; //UIViewContentModeScaleAspectFit & UIViewContentModeScaleAspectFill are only supported 15 | 16 | @property(nonatomic,weak) IBOutlet id delegate; 17 | 18 | @property(nonatomic, readonly) IQRulerScrollView *scrollView; 19 | 20 | @property(nonatomic, readonly) SRLineImageView *imageView; 21 | 22 | @property(nonatomic) UIImage *image; 23 | 24 | @property(nonatomic) CGFloat zoomScale; 25 | @property(nonatomic) CGFloat minimumZoomScale; 26 | @property(nonatomic) CGFloat maximumZoomScale; 27 | @property(nonatomic) BOOL showZoomControls; 28 | 29 | @property(nonatomic) CGPoint contentOffset; 30 | - (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated; 31 | 32 | - (void)setZoomScale:(CGFloat)scale animated:(BOOL)animated; 33 | 34 | - (void)zoomToMinimumScaleAnimated:(BOOL)animated; 35 | - (void)zoomToOriginalScaleAnimated:(BOOL)animated; 36 | - (void)zoomToMaximumScaleAnimated:(BOOL)animated; 37 | 38 | @end 39 | 40 | @interface UIView (IQScrollContainerViewHierarchy) 41 | 42 | @property(readonly, assign) IQScrollContainerView *scrollContainerView; 43 | 44 | @end 45 | 46 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/IQRulerScrollView/UIScrollView+Addition.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIScrollView+Addition.h 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import 10 | 11 | @interface UIScrollView (Addition) 12 | 13 | - (void)setZoomScale:(CGFloat)scale withCenter:(CGPoint)center animated:(BOOL)animated; 14 | 15 | @property(nonatomic, readonly) CGSize minimumSize; 16 | 17 | @property(nonatomic, readonly) CGRect visibleRect; 18 | 19 | -(CGRect)visibleRectWithInsetSize:(CGSize)insetSize; 20 | 21 | @property(nonatomic, readonly) CGRect presentationLayerVisibleRect; 22 | 23 | -(CGRect)presentationLayerVisibleRectWithInsetSize:(CGSize)insetSize; 24 | 25 | /** 26 | * The receiver's `contentOffset` property, during animations. (read-only) 27 | * 28 | * `contentOffset` returns the wrong value if the receiver is animating, for example when `zoomBouncing` is `YES`. 29 | * 30 | * @see contentOffset 31 | */ 32 | @property (nonatomic, assign, readonly) CGPoint presentationLayerContentOffset; 33 | 34 | /** 35 | * The receiver's `contentSize` property, during animations. (read-only) 36 | * 37 | * `contentSize` returns the wrong value if the receiver is animating, for example when `zoomBouncing` is `YES`. 38 | * 39 | * @see contentSize 40 | */ 41 | @property (nonatomic, assign, readonly) CGSize presentationLayerContentSize; 42 | 43 | /** 44 | * The receiver's `zoomScale` property, during animations. (read-only) 45 | * 46 | * `zoomScale` returns the wrong value if the receiver is animating, for example when `zoomBouncing` is `YES`. 47 | * 48 | * @see zoomScale 49 | */ 50 | @property (nonatomic, assign, readonly) CGFloat presentationLayerZoomScale; 51 | 52 | @end 53 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/IQRulerScrollView/UIScrollView+Addition.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIScrollView+Addition.m 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import "UIScrollView+Addition.h" 10 | 11 | @implementation UIScrollView (Addition) 12 | 13 | - (void)setZoomScale:(CGFloat)scale withCenter:(CGPoint)center animated:(BOOL)animated 14 | { 15 | CGSize boundsSize = self.bounds.size; 16 | CGRect zoomRect; 17 | 18 | zoomRect.size.width = boundsSize.width / scale; 19 | zoomRect.size.height = boundsSize.height / scale; 20 | zoomRect.origin.x = center.x - (zoomRect.size.width / 2.0f); 21 | zoomRect.origin.y = center.y - (zoomRect.size.height / 2.0f); 22 | 23 | [self zoomToRect:zoomRect animated:YES]; 24 | } 25 | 26 | -(CGRect)visibleRect 27 | { 28 | return [self visibleRectWithInsetSize:CGSizeZero]; 29 | } 30 | 31 | -(CGRect)visibleRectWithInsetSize:(CGSize)insetSize 32 | { 33 | UIView *zoomView = [self.delegate respondsToSelector:@selector(viewForZoomingInScrollView:)] ? [self.delegate viewForZoomingInScrollView:self] : self; 34 | return [self convertRect:CGRectInset(self.bounds, insetSize.width, insetSize.height) toView:zoomView]; 35 | } 36 | 37 | -(CGRect)presentationLayerVisibleRect 38 | { 39 | return [self presentationLayerVisibleRectWithInsetSize:CGSizeZero]; 40 | } 41 | 42 | -(CGRect)presentationLayerVisibleRectWithInsetSize:(CGSize)insetSize 43 | { 44 | UIView *zoomView = [self.delegate respondsToSelector:@selector(viewForZoomingInScrollView:)] ? [self.delegate viewForZoomingInScrollView:self] : self; 45 | return [self.layer.presentationLayer convertRect:CGRectInset(self.layer.presentationLayer.bounds, insetSize.width, insetSize.height) toLayer:zoomView.layer.presentationLayer]; 46 | } 47 | 48 | -(CGSize)minimumSize 49 | { 50 | if ([self.delegate respondsToSelector:@selector(viewForZoomingInScrollView:)]) 51 | { 52 | UIView *zoomView = [self.delegate viewForZoomingInScrollView:self]; 53 | return CGSizeMake(CGRectGetWidth(zoomView.bounds)*self.minimumZoomScale, CGRectGetHeight(zoomView.bounds)*self.minimumZoomScale); 54 | } 55 | else 56 | { 57 | return CGSizeZero; 58 | } 59 | } 60 | 61 | -(CGPoint)presentationLayerContentOffset 62 | { 63 | CALayer *presentationLayer = self.layer.presentationLayer; 64 | return presentationLayer.bounds.origin; 65 | } 66 | 67 | -(CGSize)presentationLayerContentSize 68 | { 69 | if ([self.delegate respondsToSelector:@selector(viewForZoomingInScrollView:)]) { 70 | UIView *zoomView = [self.delegate viewForZoomingInScrollView:self]; 71 | CALayer *zoomPresentationLayer = zoomView.layer.presentationLayer; 72 | 73 | return zoomPresentationLayer.frame.size; 74 | } else 75 | return self.contentSize; 76 | } 77 | 78 | -(CGFloat)presentationLayerZoomScale 79 | { 80 | if ([self.delegate respondsToSelector:@selector(viewForZoomingInScrollView:)]) { 81 | UIView *zoomView = [self.delegate viewForZoomingInScrollView:self]; 82 | CALayer *zoomPresentationLayer = zoomView.layer.presentationLayer; 83 | 84 | return zoomPresentationLayer.transform.m11; 85 | } else 86 | return self.zoomScale; 87 | } 88 | 89 | @end 90 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/IQRulerView/IQRulerView.h: -------------------------------------------------------------------------------- 1 | // 2 | // IQRulerView.h 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import 10 | #import "IQAngleView.h" 11 | 12 | @interface IQRulerView : UIView 13 | 14 | @property(strong, readonly) UIPanGestureRecognizer *panRecognizer; 15 | 16 | @property(nonatomic,assign) CGFloat deviceScale; 17 | @property(nonatomic,assign) CGFloat zoomScale; 18 | @property(nonatomic,weak) UIView *respectiveView; 19 | 20 | @property(nonatomic,strong) UIColor *lineColor; 21 | @property(nonatomic,strong) UIColor *rulerColor; 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/MPCoachMarks/MPCoachMark.h: -------------------------------------------------------------------------------- 1 | // 2 | // MPCoachMark.h 3 | // Example 4 | // 5 | // Created by marcelo.perretta@gmail.com on 7/8/15. 6 | // Copyright (c) 2015 MAWAPE. All rights reserved. 7 | // 8 | // This code is distributed under the terms and conditions of the MIT license. 9 | // 10 | // Permission is hereby granted, free of charge, to any person obtaining a copy 11 | // of this software and associated documentation files (the "Software"), to deal 12 | // in the Software without restriction, including without limitation the rights 13 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | // copies of the Software, and to permit persons to whom the Software is 15 | // furnished to do so, subject to the following conditions: 16 | // 17 | // The above copyright notice and this permission notice shall be included in 18 | // all copies or substantial portions of the Software. 19 | // 20 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 26 | // THE SOFTWARE. 27 | 28 | #import 29 | 30 | typedef NS_ENUM(NSInteger, MaskShape) { 31 | DEFAULT, 32 | SHAPE_CIRCLE, 33 | SHAPE_SQUARE, 34 | }; 35 | 36 | typedef NS_ENUM(NSInteger, LabelAligment) { 37 | LABEL_ALIGNMENT_CENTER, 38 | LABEL_ALIGNMENT_LEFT, 39 | LABEL_ALIGNMENT_RIGHT, 40 | }; 41 | 42 | typedef NS_ENUM(NSInteger, LabelPosition) { 43 | LABEL_POSITION_BOTTOM, 44 | LABEL_POSITION_LEFT, 45 | LABEL_POSITION_TOP, 46 | LABEL_POSITION_RIGHT, 47 | LABEL_POSITION_RIGHT_BOTTOM 48 | }; 49 | 50 | @interface MPCoachMark : NSObject 51 | 52 | - (instancetype)init __attribute__((unavailable("init is not available"))); 53 | 54 | -(instancetype)initWithAttributes:(NSDictionary*)attributes; 55 | +(instancetype)markWithAttributes:(NSDictionary*)attributes; 56 | 57 | @property(nonatomic, weak) UIView *view; 58 | @property(nonatomic, assign) CGRect rect; 59 | @property(nonatomic, assign) UIEdgeInsets inset; 60 | @property(nonatomic, strong) UIColor *borderColor; 61 | 62 | @property(nonatomic, assign) NSTimeInterval beginInterval; 63 | @property(nonatomic, strong) NSString *caption; 64 | @property(nonatomic, assign) MaskShape shape; 65 | @property(nonatomic, assign) LabelPosition position; 66 | @property(nonatomic, assign) LabelAligment alignment; 67 | @property(nonatomic, strong) UIImage *image; 68 | @property(nonatomic, assign) CGFloat cutoutRadius; 69 | 70 | 71 | @end 72 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/MPCoachMarks/MPCoachMark.m: -------------------------------------------------------------------------------- 1 | // 2 | // MPCoachMark.m 3 | // Example 4 | // 5 | // Created by marcelo.perretta@gmail.com on 7/8/15. 6 | // Copyright (c) 2015 MAWAPE. All rights reserved. 7 | // 8 | // This code is distributed under the terms and conditions of the MIT license. 9 | // 10 | // Permission is hereby granted, free of charge, to any person obtaining a copy 11 | // of this software and associated documentation files (the "Software"), to deal 12 | // in the Software without restriction, including without limitation the rights 13 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | // copies of the Software, and to permit persons to whom the Software is 15 | // furnished to do so, subject to the following conditions: 16 | // 17 | // The above copyright notice and this permission notice shall be included in 18 | // all copies or substantial portions of the Software. 19 | // 20 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 26 | // THE SOFTWARE. 27 | 28 | #import "MPCoachMark.h" 29 | 30 | @implementation MPCoachMark 31 | 32 | -(instancetype)initWithAttributes:(NSDictionary *)attributes 33 | { 34 | self = [super init]; 35 | 36 | if (self) 37 | { 38 | self.view = [attributes objectForKey:@"view"]; 39 | self.rect = [[attributes objectForKey:@"rect"] CGRectValue]; 40 | self.inset = ([attributes objectForKey:@"inset"])?[[attributes objectForKey:@"inset"] UIEdgeInsetsValue]:UIEdgeInsetsMake(-10, -10, -10, -10); 41 | self.borderColor = [attributes objectForKey:@"borderColor"]; 42 | 43 | self.beginInterval = [[attributes objectForKey:@"beginInterval"] doubleValue]; 44 | 45 | self.caption = [attributes objectForKey:@"caption"]; 46 | self.shape = [[attributes objectForKey:@"shape"] integerValue]; 47 | self.position = [[attributes objectForKey:@"position"] integerValue]; 48 | self.alignment = [[attributes objectForKey:@"alignment"] integerValue]; 49 | self.image = [[attributes objectForKey:@"image"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; 50 | self.cutoutRadius = ([attributes objectForKey:@"cutoutRadius"])?[[attributes objectForKey:@"cutoutRadius"] floatValue]:5.0; 51 | } 52 | 53 | return self; 54 | } 55 | 56 | +(instancetype)markWithAttributes:(NSDictionary*)attributes 57 | { 58 | return [[self alloc] initWithAttributes:attributes]; 59 | } 60 | 61 | @end 62 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/MPCoachMarks/MPCoachMarkView.h: -------------------------------------------------------------------------------- 1 | // 2 | // MPCoachMarks.h 3 | // Example 4 | // 5 | // Created by marcelo.perretta@gmail.com on 7/8/15. 6 | // Copyright (c) 2015 MAWAPE. All rights reserved. 7 | // 8 | // This code is distributed under the terms and conditions of the MIT license. 9 | // 10 | // Permission is hereby granted, free of charge, to any person obtaining a copy 11 | // of this software and associated documentation files (the "Software"), to deal 12 | // in the Software without restriction, including without limitation the rights 13 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | // copies of the Software, and to permit persons to whom the Software is 15 | // furnished to do so, subject to the following conditions: 16 | // 17 | // The above copyright notice and this permission notice shall be included in 18 | // all copies or substantial portions of the Software. 19 | // 20 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 26 | // THE SOFTWARE. 27 | 28 | #import 29 | #import "MPCoachMark.h" 30 | 31 | 32 | #ifndef MP_WEAK 33 | #if __has_feature(objc_arc_weak) 34 | #define MP_WEAK weak 35 | #elif __has_feature(objc_arc) 36 | #define MP_WEAK unsafe_unretained 37 | #else 38 | #define MP_WEAK assign 39 | #endif 40 | #endif 41 | 42 | 43 | typedef NS_ENUM(NSInteger, ContinueLocation) { 44 | LOCATION_TOP, 45 | LOCATION_CENTER, 46 | LOCATION_BOTTOM, 47 | }; 48 | 49 | @protocol MPCoachMarksViewDelegate; 50 | 51 | @interface MPCoachMarkView : UIView 52 | 53 | @property (nonatomic, MP_WEAK) id delegate; 54 | @property (nonatomic, strong) NSArray *coachMarks; 55 | @property (nonatomic, strong) UILabel *lblCaption; 56 | @property (nonatomic, strong) UIColor *maskColor; 57 | @property (nonatomic, strong) UILabel *lblContinue; 58 | @property (nonatomic, strong) UIButton *btnSkipCoach; 59 | 60 | @property (nonatomic, readonly) NSUInteger markIndex; 61 | 62 | @property (nonatomic) CGFloat animationDuration; 63 | @property (nonatomic) CGFloat cutoutRadius; 64 | @property (nonatomic) CGFloat maxLblWidth; 65 | @property (nonatomic) CGFloat lblSpacing; 66 | @property (nonatomic) BOOL enableContinueLabel; 67 | @property (nonatomic) BOOL enableSkipButton; 68 | @property (nonatomic) ContinueLocation continueLocation; 69 | @property (nonatomic, strong) UIImageView *arrowImage; 70 | 71 | + (instancetype)startWithCoachMarks:(NSArray*)marks; 72 | 73 | -(void)goToCoachMarkIndexed:(NSUInteger)index; 74 | 75 | @end 76 | 77 | @protocol MPCoachMarksViewDelegate 78 | 79 | @optional 80 | - (void)coachMarksView:(MPCoachMarkView *)coachMarksView willNavigateToIndex:(NSUInteger)index; 81 | - (void)coachMarksView:(MPCoachMarkView *)coachMarksView willMoveFromIndex:(NSUInteger)index; 82 | - (void)coachMarksView:(MPCoachMarkView *)coachMarksView didNavigateToIndex:(NSUInteger)index; 83 | - (void)coachMarksViewWillCleanup:(MPCoachMarkView *)coachMarksView; 84 | - (void)coachMarksViewDidCleanup:(MPCoachMarkView *)coachMarksView; 85 | - (void)coachMarksViewDidClicked:(MPCoachMarkView *)coachMarksView atIndex:(NSInteger)index; 86 | 87 | @end 88 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/SmoothedBIView/IQ_SmoothedBIView.h: -------------------------------------------------------------------------------- 1 | // 2 | // SmoothedBIView.h 3 | // FreehandDrawingTut 4 | // 5 | // Created by A Khan on 12/10/2012. 6 | // Copyright (c) 2012 __MyCompanyName__. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface IQ_SmoothedBIView : UIView 12 | 13 | @property(nonatomic, strong, readonly) UIPanGestureRecognizer *panRecognizer; 14 | 15 | @property(nonatomic, strong) UIColor *strokeColor; 16 | 17 | @property(nonatomic, assign) CGFloat strokeWidth; 18 | 19 | -(void)clear; 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/UIImage+FloodFill/LinkedListStack.h: -------------------------------------------------------------------------------- 1 | // 2 | // LinkedList.h 3 | // NSDataLinkedList 4 | // 5 | // Created by Sam Davies on 26/09/2012. 6 | // Copyright (c) 2012 VisualPutty. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #define FINAL_NODE_OFFSET -1 12 | #define INVALID_NODE_CONTENT INT_MIN 13 | typedef struct PointNode 14 | { 15 | NSInteger nextNodeOffset; 16 | 17 | NSInteger point; 18 | 19 | } PointNode; 20 | 21 | @interface LinkedListStack : NSObject 22 | { 23 | NSMutableData *nodeCache; 24 | 25 | NSInteger freeNodeOffset; 26 | NSInteger topNodeOffset; 27 | NSInteger _cacheSizeIncrements; 28 | 29 | NSInteger multiplier; 30 | } 31 | 32 | - (id)initWithCapacity:(NSInteger)capacity incrementSize:(NSInteger)increment andMultiplier:(NSInteger)mul; 33 | - (id)initWithCapacity:(NSInteger)capacity; 34 | 35 | - (void)pushFrontX:(NSInteger)x andY:(NSInteger)y; 36 | - (NSInteger)popFront:(NSInteger *)x andY:(NSInteger *)y; 37 | @end 38 | -------------------------------------------------------------------------------- /ScreenRuler/Vendor/UIImage+FloodFill/UIImage+FloodFill.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIImage+FloodFill.h 3 | // ImageFloodFilleDemo 4 | // 5 | // Created by chintan on 15/07/13. 6 | // Copyright (c) 2013 ZWT. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "LinkedListStack.h" 11 | 12 | @interface UIImage (FloodFill) 13 | 14 | - (UIImage *) floodFillFromPoint:(CGPoint)startPoint withColor:(UIColor *)newColor andTolerance:(int)tolerance; 15 | - (UIImage *) floodFillFromPoint:(CGPoint)startPoint withColor:(UIColor *)newColor andTolerance:(int)tolerance useAntiAlias:(BOOL)antiAlias; 16 | 17 | @end -------------------------------------------------------------------------------- /ScreenRuler/ViewControllers/Home Page Flow/SRCropViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // SRCropViewController.h 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import 10 | #import "SRHomeViewController.h" 11 | 12 | @interface SRCropViewController : UIViewController 13 | 14 | @property(nonatomic, weak) id delegate; 15 | @property(nonatomic, strong) UIImage* image; 16 | @property(nonatomic, assign) CGFloat zoomScale; 17 | @property(nonatomic, assign) CGPoint contentOffset; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /ScreenRuler/ViewControllers/Home Page Flow/SRDrawViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // SRDrawViewController.h 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import 10 | #import "SRHomeViewController.h" 11 | 12 | @interface SRDrawViewController : UIViewController 13 | 14 | @property(nonatomic, weak) id delegate; 15 | @property(nonatomic, strong) UIImage* image; 16 | @property(nonatomic, assign) CGFloat zoomScale; 17 | @property(nonatomic, assign) CGPoint contentOffset; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /ScreenRuler/ViewControllers/Home Page Flow/SREditOptionViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // SREditOptionViewController.h 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import 10 | #import "SRHomeViewController.h" 11 | 12 | @interface SREditOptionViewController : UIViewController 13 | 14 | @property(nonatomic, weak) id delegate; 15 | @property(nonatomic, strong) UIImage* image; 16 | @property(nonatomic, assign) CGFloat zoomScale; 17 | @property(nonatomic, assign) CGPoint contentOffset; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /ScreenRuler/ViewControllers/Home Page Flow/SRHomeViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // SRHomeViewController.h 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import 10 | 11 | @protocol SRImageControllerDelegate 12 | 13 | -(void)controller:(UIViewController*)controller finishWithImage:(UIImage*)image zoomScale:(CGFloat)zoomScale contentOffset:(CGPoint)contentOffset; 14 | 15 | @end 16 | 17 | @interface SRHomeViewController : UIViewController 18 | 19 | @property(nonatomic, strong) UIImage *image; 20 | -(void)openWithLatestScreenshot; 21 | 22 | @property (assign, nonatomic) BOOL isRequestingImage; 23 | @property (assign, nonatomic) BOOL isRequestShouldIgnore; 24 | 25 | @end 26 | 27 | -------------------------------------------------------------------------------- /ScreenRuler/ViewControllers/Onboarding Controllers/SROnboardingMagnifierController.h: -------------------------------------------------------------------------------- 1 | // 2 | // SROnboardingMagnifierController.h 3 | // Screen Ruler 4 | // 5 | // Created by IEMacBook02 on 12/01/17. 6 | // Copyright © 2017 InfoEnum Software Systems. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface SROnboardingMagnifierController : UIViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /ScreenRuler/ViewControllers/Onboarding Controllers/SROnboardingMagnifierController.m: -------------------------------------------------------------------------------- 1 | // 2 | // SROnboardingMagnifierController.m 3 | // Screen Ruler 4 | // 5 | // Created by IEMacBook02 on 12/01/17. 6 | // Copyright © 2017 InfoEnum Software Systems. All rights reserved. 7 | // 8 | 9 | #import "SROnboardingMagnifierController.h" 10 | 11 | @interface SROnboardingMagnifierController () 12 | 13 | @end 14 | 15 | @implementation SROnboardingMagnifierController 16 | 17 | - (void)viewDidLoad { 18 | [super viewDidLoad]; 19 | // Do any additional setup after loading the view. 20 | } 21 | 22 | - (void)didReceiveMemoryWarning { 23 | [super didReceiveMemoryWarning]; 24 | // Dispose of any resources that can be recreated. 25 | } 26 | 27 | /* 28 | #pragma mark - Navigation 29 | 30 | // In a storyboard-based application, you will often want to do a little preparation before navigation 31 | - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 32 | // Get the new view controller using [segue destinationViewController]. 33 | // Pass the selected object to the new view controller. 34 | } 35 | */ 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /ScreenRuler/ViewControllers/Onboarding Controllers/SROnboardingNavigationController.h: -------------------------------------------------------------------------------- 1 | // 2 | // SROnboardingNavigationController.h 3 | // Screen Ruler 4 | // 5 | // Created by IEMacBook02 on 12/01/17. 6 | // Copyright © 2017 InfoEnum Software Systems. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface SROnboardingNavigationController : UINavigationController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /ScreenRuler/ViewControllers/Onboarding Controllers/SROnboardingNavigationController.m: -------------------------------------------------------------------------------- 1 | // 2 | // SROnboardingNavigationController.m 3 | // Screen Ruler 4 | // 5 | // Created by IEMacBook02 on 12/01/17. 6 | // Copyright © 2017 InfoEnum Software Systems. All rights reserved. 7 | // 8 | 9 | #import "SROnboardingNavigationController.h" 10 | #import "SROnboardingWelcomeController.h" 11 | #import "SROnboardingZoomController.h" 12 | 13 | @interface SROnboardingNavigationController () 14 | 15 | @end 16 | 17 | @implementation SROnboardingNavigationController 18 | 19 | - (void)viewDidLoad { 20 | [super viewDidLoad]; 21 | 22 | NSLog(@"%@",self.view.subviews); 23 | 24 | self.view.backgroundColor = [UIColor whiteColor]; 25 | 26 | UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem]; 27 | [button addTarget:self action:@selector(nextAction:) forControlEvents:UIControlEventTouchUpInside]; 28 | button.frame = CGRectMake(50, 500, 100, 100); 29 | [button setTitle:@"next" forState:UIControlStateNormal]; 30 | [self.view addSubview:button]; 31 | 32 | UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50, 200, 100, 100)]; 33 | label.text = @"Welcome navigation top"; 34 | label.backgroundColor = [UIColor greenColor]; 35 | [self.view addSubview:label]; 36 | NSLog(@"%@",self.view); 37 | 38 | SROnboardingWelcomeController *welcomeController = [[SROnboardingWelcomeController alloc] init]; 39 | self.viewControllers = @[welcomeController]; 40 | [self setNavigationBarHidden:YES]; 41 | 42 | UILabel *label2 = [[UILabel alloc] initWithFrame:CGRectMake(50, 350, 100, 100)]; 43 | label2.text = @"Welcome navigation bottom"; 44 | label2.backgroundColor = [UIColor greenColor]; 45 | [self.view addSubview:label2]; 46 | NSLog(@"%@",self.view); 47 | 48 | NSLog(@"%@",self.view.subviews); 49 | } 50 | 51 | -(void)nextAction:(UIButton*)sender 52 | { 53 | SROnboardingZoomController *controller = [[SROnboardingZoomController alloc] init]; 54 | 55 | UIViewController *topController = self.topViewController; 56 | 57 | [UIView transitionFromView:topController.view toView:controller.view duration:1.0 options:UIViewAnimationOptionTransitionCrossDissolve completion:^(BOOL finished) { 58 | }]; 59 | 60 | [self pushViewController:controller animated:NO]; 61 | } 62 | 63 | 64 | @end 65 | -------------------------------------------------------------------------------- /ScreenRuler/ViewControllers/Onboarding Controllers/SROnboardingProtractorController.h: -------------------------------------------------------------------------------- 1 | // 2 | // SROnboardingProtractorController.h 3 | // Screen Ruler 4 | // 5 | // Created by IEMacBook02 on 12/01/17. 6 | // Copyright © 2017 InfoEnum Software Systems. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface SROnboardingProtractorController : UIViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /ScreenRuler/ViewControllers/Onboarding Controllers/SROnboardingProtractorController.m: -------------------------------------------------------------------------------- 1 | // 2 | // SROnboardingProtractorController.m 3 | // Screen Ruler 4 | // 5 | // Created by IEMacBook02 on 12/01/17. 6 | // Copyright © 2017 InfoEnum Software Systems. All rights reserved. 7 | // 8 | 9 | #import "SROnboardingProtractorController.h" 10 | 11 | @interface SROnboardingProtractorController () 12 | 13 | @end 14 | 15 | @implementation SROnboardingProtractorController 16 | 17 | - (void)viewDidLoad { 18 | [super viewDidLoad]; 19 | // Do any additional setup after loading the view. 20 | } 21 | 22 | - (void)didReceiveMemoryWarning { 23 | [super didReceiveMemoryWarning]; 24 | // Dispose of any resources that can be recreated. 25 | } 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /ScreenRuler/ViewControllers/Onboarding Controllers/SROnboardingRulerScaleController.h: -------------------------------------------------------------------------------- 1 | // 2 | // SROnboardingRulerScaleController.h 3 | // Screen Ruler 4 | // 5 | // Created by IEMacBook02 on 12/01/17. 6 | // Copyright © 2017 InfoEnum Software Systems. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface SROnboardingRulerScaleController : UIViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /ScreenRuler/ViewControllers/Onboarding Controllers/SROnboardingRulerScaleController.m: -------------------------------------------------------------------------------- 1 | // 2 | // SROnboardingRulerScaleController.m 3 | // Screen Ruler 4 | // 5 | // Created by IEMacBook02 on 12/01/17. 6 | // Copyright © 2017 InfoEnum Software Systems. All rights reserved. 7 | // 8 | 9 | #import "SROnboardingRulerScaleController.h" 10 | 11 | @interface SROnboardingRulerScaleController () 12 | 13 | @end 14 | 15 | @implementation SROnboardingRulerScaleController 16 | 17 | - (void)viewDidLoad { 18 | [super viewDidLoad]; 19 | // Do any additional setup after loading the view. 20 | } 21 | 22 | - (void)didReceiveMemoryWarning { 23 | [super didReceiveMemoryWarning]; 24 | // Dispose of any resources that can be recreated. 25 | } 26 | 27 | /* 28 | #pragma mark - Navigation 29 | 30 | // In a storyboard-based application, you will often want to do a little preparation before navigation 31 | - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 32 | // Get the new view controller using [segue destinationViewController]. 33 | // Pass the selected object to the new view controller. 34 | } 35 | */ 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /ScreenRuler/ViewControllers/Onboarding Controllers/SROnboardingScaleAdjustController.h: -------------------------------------------------------------------------------- 1 | // 2 | // SROnboardingScaleAdjustController.h 3 | // Screen Ruler 4 | // 5 | // Created by IEMacBook02 on 12/01/17. 6 | // Copyright © 2017 InfoEnum Software Systems. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface SROnboardingScaleAdjustController : UIViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /ScreenRuler/ViewControllers/Onboarding Controllers/SROnboardingScaleAdjustController.m: -------------------------------------------------------------------------------- 1 | // 2 | // SROnboardingScaleAdjustController.m 3 | // Screen Ruler 4 | // 5 | // Created by IEMacBook02 on 12/01/17. 6 | // Copyright © 2017 InfoEnum Software Systems. All rights reserved. 7 | // 8 | 9 | #import "SROnboardingScaleAdjustController.h" 10 | 11 | @interface SROnboardingScaleAdjustController () 12 | 13 | @end 14 | 15 | @implementation SROnboardingScaleAdjustController 16 | 17 | - (void)viewDidLoad { 18 | [super viewDidLoad]; 19 | // Do any additional setup after loading the view. 20 | } 21 | 22 | - (void)didReceiveMemoryWarning { 23 | [super didReceiveMemoryWarning]; 24 | // Dispose of any resources that can be recreated. 25 | } 26 | 27 | /* 28 | #pragma mark - Navigation 29 | 30 | // In a storyboard-based application, you will often want to do a little preparation before navigation 31 | - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 32 | // Get the new view controller using [segue destinationViewController]. 33 | // Pass the selected object to the new view controller. 34 | } 35 | */ 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /ScreenRuler/ViewControllers/Onboarding Controllers/SROnboardingScreenScaleController.h: -------------------------------------------------------------------------------- 1 | // 2 | // SROnboardingScreenScaleController.h 3 | // Screen Ruler 4 | // 5 | // Created by IEMacBook02 on 12/01/17. 6 | // Copyright © 2017 InfoEnum Software Systems. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface SROnboardingScreenScaleController : UIViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /ScreenRuler/ViewControllers/Onboarding Controllers/SROnboardingScreenScaleController.m: -------------------------------------------------------------------------------- 1 | // 2 | // SROnboardingScreenScaleController.m 3 | // Screen Ruler 4 | // 5 | // Created by IEMacBook02 on 12/01/17. 6 | // Copyright © 2017 InfoEnum Software Systems. All rights reserved. 7 | // 8 | 9 | #import "SROnboardingScreenScaleController.h" 10 | 11 | @interface SROnboardingScreenScaleController () 12 | 13 | @end 14 | 15 | @implementation SROnboardingScreenScaleController 16 | 17 | - (void)viewDidLoad { 18 | [super viewDidLoad]; 19 | // Do any additional setup after loading the view. 20 | } 21 | 22 | - (void)didReceiveMemoryWarning { 23 | [super didReceiveMemoryWarning]; 24 | // Dispose of any resources that can be recreated. 25 | } 26 | 27 | /* 28 | #pragma mark - Navigation 29 | 30 | // In a storyboard-based application, you will often want to do a little preparation before navigation 31 | - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 32 | // Get the new view controller using [segue destinationViewController]. 33 | // Pass the selected object to the new view controller. 34 | } 35 | */ 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /ScreenRuler/ViewControllers/Onboarding Controllers/SROnboardingWelcomeController.h: -------------------------------------------------------------------------------- 1 | // 2 | // SROnboardingWelcomeController.h 3 | // Screen Ruler 4 | // 5 | // Created by IEMacBook02 on 12/01/17. 6 | // Copyright © 2017 InfoEnum Software Systems. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface SROnboardingWelcomeController : UIViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /ScreenRuler/ViewControllers/Onboarding Controllers/SROnboardingWelcomeController.m: -------------------------------------------------------------------------------- 1 | // 2 | // SROnboardingWelcomeController.m 3 | // Screen Ruler 4 | // 5 | // Created by IEMacBook02 on 12/01/17. 6 | // Copyright © 2017 InfoEnum Software Systems. All rights reserved. 7 | // 8 | 9 | #import "SROnboardingWelcomeController.h" 10 | 11 | @interface SROnboardingWelcomeController () 12 | 13 | @end 14 | 15 | @implementation SROnboardingWelcomeController 16 | 17 | - (void)viewDidLoad { 18 | [super viewDidLoad]; 19 | // self.view.backgroundColor = [UIColor whiteColor]; 20 | // Do any additional setup after loading the view. 21 | 22 | UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50, 50, 100, 100)]; 23 | label.text = @"Welcome"; 24 | label.backgroundColor = [UIColor greenColor]; 25 | [self.view addSubview:label]; 26 | NSLog(@"%@",self.view); 27 | } 28 | 29 | - (void)didReceiveMemoryWarning { 30 | [super didReceiveMemoryWarning]; 31 | // Dispose of any resources that can be recreated. 32 | } 33 | 34 | /* 35 | #pragma mark - Navigation 36 | 37 | // In a storyboard-based application, you will often want to do a little preparation before navigation 38 | - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 39 | // Get the new view controller using [segue destinationViewController]. 40 | // Pass the selected object to the new view controller. 41 | } 42 | */ 43 | 44 | @end 45 | -------------------------------------------------------------------------------- /ScreenRuler/ViewControllers/Onboarding Controllers/SROnboardingZoomController.h: -------------------------------------------------------------------------------- 1 | // 2 | // SROnboardingZoomController.h 3 | // Screen Ruler 4 | // 5 | // Created by IEMacBook02 on 12/01/17. 6 | // Copyright © 2017 InfoEnum Software Systems. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface SROnboardingZoomController : UIViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /ScreenRuler/ViewControllers/Onboarding Controllers/SROnboardingZoomController.m: -------------------------------------------------------------------------------- 1 | // 2 | // SROnboardingZoomController.m 3 | // Screen Ruler 4 | // 5 | // Created by IEMacBook02 on 12/01/17. 6 | // Copyright © 2017 InfoEnum Software Systems. All rights reserved. 7 | // 8 | 9 | #import "SROnboardingZoomController.h" 10 | 11 | @interface SROnboardingZoomController () 12 | 13 | @end 14 | 15 | @implementation SROnboardingZoomController 16 | 17 | - (void)viewDidLoad { 18 | [super viewDidLoad]; 19 | 20 | UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50, 50, 100, 100)]; 21 | label.text = @"zoom"; 22 | label.backgroundColor = [UIColor greenColor]; 23 | [self.view addSubview:label]; 24 | NSLog(@"%@",self.view); 25 | } 26 | 27 | - (void)didReceiveMemoryWarning { 28 | [super didReceiveMemoryWarning]; 29 | // Dispose of any resources that can be recreated. 30 | } 31 | 32 | /* 33 | #pragma mark - Navigation 34 | 35 | // In a storyboard-based application, you will often want to do a little preparation before navigation 36 | - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 37 | // Get the new view controller using [segue destinationViewController]. 38 | // Pass the selected object to the new view controller. 39 | } 40 | */ 41 | 42 | @end 43 | -------------------------------------------------------------------------------- /ScreenRuler/ViewControllers/Screenshot Picker Flow/Cell/SRScreenshotCollectionViewCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // SRScreenshotCollectionViewCell.h 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import 10 | 11 | @interface SRScreenshotCollectionViewCell : UICollectionViewCell 12 | 13 | @property(nonatomic, strong) IBOutlet UIImageView *screenshotImageView; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /ScreenRuler/ViewControllers/Screenshot Picker Flow/Cell/SRScreenshotCollectionViewCell.m: -------------------------------------------------------------------------------- 1 | // 2 | // SRScreenshotCollectionViewCell.m 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import "SRScreenshotCollectionViewCell.h" 10 | 11 | @implementation SRScreenshotCollectionViewCell 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /ScreenRuler/ViewControllers/Screenshot Picker Flow/SRScreenshotCollectionViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // SRScreenshotCollectionViewController.h 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import 10 | 11 | @class SRScreenshotCollectionViewController; 12 | 13 | @protocol SRScreenshotCollectionViewControllerDelegate 14 | 15 | -(void)screenshotControllerDidSelectOpenCamera:(SRScreenshotCollectionViewController*)controller; 16 | 17 | -(void)screenshotControllerDidSelectOpenPhotoLibrary:(SRScreenshotCollectionViewController*)controller; 18 | 19 | -(void)screenshotController:(SRScreenshotCollectionViewController*)controller didSelectScreenshot:(UIImage*)image; 20 | 21 | @end 22 | 23 | @interface SRScreenshotCollectionViewController : UIViewController 24 | 25 | @property(nonatomic, weak) id delegate; 26 | 27 | -(void)presentOverViewController:(UIViewController*)controller completion:(void (^)(void))completion; 28 | -(void)dismissViewControllerCompletion:(void (^)(void))completion; 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /ScreenRuler/ViewControllers/Settings Flow/Cell/SRLicenseTableViewCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // SRLicenseTableViewCell.h 3 | // Screen Ruler 4 | // 5 | // Created by IEMacBook01 on 16/10/16. 6 | // Copyright © 2016 InfoEnum Software Systems. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface SRLicenseTableViewCell : UITableViewCell 12 | 13 | @property (strong, nonatomic) IBOutlet UILabel *labelTitle; 14 | @property (strong, nonatomic) IBOutlet UIButton *buttonLink; 15 | @property (strong, nonatomic) IBOutlet UILabel *labelLicenseType; 16 | @property (strong, nonatomic) IBOutlet UILabel *labelDescription; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /ScreenRuler/ViewControllers/Settings Flow/Cell/SRLicenseTableViewCell.m: -------------------------------------------------------------------------------- 1 | // 2 | // SRLicenseTableViewCell.m 3 | // Screen Ruler 4 | // 5 | // Created by IEMacBook01 on 16/10/16. 6 | // Copyright © 2016 InfoEnum Software Systems. All rights reserved. 7 | // 8 | 9 | #import "SRLicenseTableViewCell.h" 10 | 11 | @implementation SRLicenseTableViewCell 12 | 13 | - (void)awakeFromNib { 14 | [super awakeFromNib]; 15 | // Initialization code 16 | } 17 | 18 | - (void)setSelected:(BOOL)selected animated:(BOOL)animated { 19 | [super setSelected:selected animated:animated]; 20 | 21 | // Configure the view for the selected state 22 | } 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /ScreenRuler/ViewControllers/Settings Flow/Cell/SRSettingsTableViewCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // SRSettingsTableViewCell.h 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import 10 | 11 | @interface SRSettingsTableViewCell : UITableViewCell 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /ScreenRuler/ViewControllers/Settings Flow/Cell/SRSettingsTableViewCell.m: -------------------------------------------------------------------------------- 1 | // 2 | // SRSettingsTableViewCell.m 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import "SRSettingsTableViewCell.h" 10 | 11 | @implementation SRSettingsTableViewCell 12 | 13 | - (void)awakeFromNib { 14 | [super awakeFromNib]; 15 | // Initialization code 16 | } 17 | 18 | - (void)setSelected:(BOOL)selected animated:(BOOL)animated { 19 | [super setSelected:selected animated:animated]; 20 | 21 | // Configure the view for the selected state 22 | } 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /ScreenRuler/ViewControllers/Settings Flow/Cell/SRThemeTableViewCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // SRThemeTableViewCell.h 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import 10 | #import "HFColorButton.h" 11 | 12 | @interface SRThemeTableViewCell : UITableViewCell 13 | 14 | @property(nonatomic,strong) IBOutlet UILabel *labelTitle; 15 | @property(nonatomic,strong) IBOutlet UISegmentedControl *segmentControl; 16 | 17 | @property(nonatomic,strong) IBOutletCollection(HFColorButton) NSArray *themeColorButtons; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /ScreenRuler/ViewControllers/Settings Flow/Cell/SRThemeTableViewCell.m: -------------------------------------------------------------------------------- 1 | // 2 | // SRThemeTableViewCell.m 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import "SRThemeTableViewCell.h" 10 | 11 | @implementation SRThemeTableViewCell 12 | 13 | - (void)awakeFromNib { 14 | [super awakeFromNib]; 15 | 16 | self.labelTitle.text = NSLocalizedString(@"color_theme", nil); 17 | [self.segmentControl setTitle:NSLocalizedString(@"natural", nil) forSegmentAtIndex:0]; 18 | [self.segmentControl setTitle:NSLocalizedString(@"inverted", nil) forSegmentAtIndex:1]; 19 | } 20 | 21 | - (void)setSelected:(BOOL)selected animated:(BOOL)animated { 22 | [super setSelected:selected animated:animated]; 23 | 24 | // Configure the view for the selected state 25 | } 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /ScreenRuler/ViewControllers/Settings Flow/Cell/SRVersionTableViewCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // SRVersionTableViewCell.h 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import 10 | 11 | @interface SRVersionTableViewCell : UITableViewCell 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /ScreenRuler/ViewControllers/Settings Flow/Cell/SRVersionTableViewCell.m: -------------------------------------------------------------------------------- 1 | // 2 | // SRVersionTableViewCell.m 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import "SRVersionTableViewCell.h" 10 | 11 | @implementation SRVersionTableViewCell 12 | 13 | - (void)awakeFromNib { 14 | [super awakeFromNib]; 15 | // Initialization code 16 | } 17 | 18 | - (void)setSelected:(BOOL)selected animated:(BOOL)animated { 19 | [super setSelected:selected animated:animated]; 20 | 21 | // Configure the view for the selected state 22 | } 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /ScreenRuler/ViewControllers/Settings Flow/SRAcknowledgementTableViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // AcknowledgementTableViewController.h 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import 10 | 11 | @interface SRAcknowledgementTableViewController : UITableViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /ScreenRuler/ViewControllers/Settings Flow/SRDeveloperSettingsViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // SRDeveloperSettingsViewController.h 3 | // Screen Ruler 4 | // 5 | // Created by IEMacBook01 on 16/10/16. 6 | // Copyright © 2016 InfoEnum Software Systems. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface SRDeveloperSettingsViewController : UITableViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /ScreenRuler/ViewControllers/Settings Flow/SRDeveloperSettingsViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // SRDeveloperSettingsViewController.m 3 | // Screen Ruler 4 | // 5 | // Created by IEMacBook01 on 16/10/16. 6 | // Copyright © 2016 InfoEnum Software Systems. All rights reserved. 7 | // 8 | 9 | #import "SRDeveloperSettingsViewController.h" 10 | #import "AppDelegate.h" 11 | #import "SRDebugHelper.h" 12 | 13 | @interface SRDeveloperSettingsViewController () 14 | 15 | @property (strong, nonatomic) IBOutlet UILabel *labelShowTouches; 16 | @property (strong, nonatomic) IBOutlet UISwitch *switchShowTouch; 17 | 18 | @property (strong, nonatomic) IBOutlet UILabel *labelInUseMemory; 19 | @property (strong, nonatomic) IBOutlet UILabel *labelInUseMemoryBytes; 20 | 21 | @property (strong, nonatomic) IBOutlet UILabel *labelVirtualMemory; 22 | @property (strong, nonatomic) IBOutlet UILabel *labelVirtualMemoryBytes; 23 | 24 | @end 25 | 26 | @implementation SRDeveloperSettingsViewController 27 | 28 | - (void)viewDidLoad { 29 | [super viewDidLoad]; 30 | 31 | self.title = NSLocalizedString(@"developer_options", nil); 32 | self.labelShowTouches.text = NSLocalizedString(@"show_touches", nil); 33 | self.labelInUseMemory.text = NSLocalizedString(@"in_use_memory", nil); 34 | self.labelVirtualMemory.text = NSLocalizedString(@"virtual_memory", nil); 35 | 36 | AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; 37 | 38 | _switchShowTouch.on = appDelegate.shouldShowTouches; 39 | } 40 | 41 | -(void)viewWillAppear:(BOOL)animated 42 | { 43 | [super viewWillAppear:animated]; 44 | 45 | _labelInUseMemoryBytes.text = @"..."; 46 | _labelVirtualMemoryBytes.text = @"..."; 47 | [[NSOperationQueue new] addOperationWithBlock:^{ 48 | struct task_basic_info info = [SRDebugHelper memoryReport]; 49 | 50 | NSByteCountFormatter *formatter = [NSByteCountFormatter new]; 51 | 52 | [[NSOperationQueue mainQueue] addOperationWithBlock:^{ 53 | _labelInUseMemoryBytes.text = [formatter stringFromByteCount:info.resident_size]; 54 | _labelVirtualMemoryBytes.text = [formatter stringFromByteCount:info.virtual_size]; 55 | }]; 56 | }]; 57 | } 58 | 59 | - (IBAction)showTouchesAction:(UISwitch *)sender 60 | { 61 | AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; 62 | appDelegate.shouldShowTouches = _switchShowTouch.on; 63 | } 64 | 65 | -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 66 | { 67 | if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 68 | { 69 | return 70; 70 | } 71 | else 72 | { 73 | return 44; 74 | } 75 | } 76 | 77 | @end 78 | -------------------------------------------------------------------------------- /ScreenRuler/ViewControllers/Settings Flow/SRPrivacyPolicyViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // SRPrivacyPolicyViewController.h 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import 10 | 11 | @interface SRPrivacyPolicyViewController : UIViewController 12 | 13 | @property (strong, nonatomic) IBOutlet UIWebView *webView; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /ScreenRuler/ViewControllers/Settings Flow/SRPrivacyPolicyViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // SRPrivacyPolicyViewController.m 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import "SRPrivacyPolicyViewController.h" 10 | 11 | @interface SRPrivacyPolicyViewController () 12 | @property (strong, nonatomic) IBOutlet UIActivityIndicatorView *activityIndicator; 13 | @end 14 | 15 | @implementation SRPrivacyPolicyViewController 16 | 17 | - (void)viewDidLoad { 18 | [super viewDidLoad]; 19 | 20 | self.title = NSLocalizedString(@"terms_and_conditions", nil); 21 | 22 | NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"EULA" ofType:@"html"]; 23 | NSString* htmlString = [NSString stringWithContentsOfFile:htmlFile encoding:NSUTF8StringEncoding error:nil]; 24 | [self.webView loadHTMLString:htmlString baseURL:nil]; 25 | 26 | } 27 | 28 | -(UIStatusBarAnimation)preferredStatusBarUpdateAnimation 29 | { 30 | return UIStatusBarAnimationSlide; 31 | } 32 | 33 | - (IBAction)doneButton:(id)sender 34 | { 35 | [self dismissViewControllerAnimated:YES completion:nil]; 36 | } 37 | 38 | -(void)webViewDidStartLoad:(UIWebView *)webView 39 | { 40 | [self.activityIndicator startAnimating]; 41 | } 42 | 43 | -(void)webViewDidFinishLoad:(UIWebView *)webView 44 | { 45 | [self.activityIndicator stopAnimating]; 46 | } 47 | 48 | @end 49 | -------------------------------------------------------------------------------- /ScreenRuler/ViewControllers/Settings Flow/SRSettingTableViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // SRSettingTableViewController.h 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import 10 | 11 | @interface SRSettingTableViewController : UITableViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /ScreenRuler/ar.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleDisplayName" = "Screen Ruler"; 2 | "CFBundleName" = "Screen Ruler"; 3 | -------------------------------------------------------------------------------- /ScreenRuler/ar.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/ar.lproj/Localizable.strings -------------------------------------------------------------------------------- /ScreenRuler/ca.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleDisplayName" = "Screen Ruler"; 2 | "CFBundleName" = "Screen Ruler"; 3 | -------------------------------------------------------------------------------- /ScreenRuler/ca.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/ca.lproj/Localizable.strings -------------------------------------------------------------------------------- /ScreenRuler/da.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleDisplayName" = "Screen Ruler"; 2 | "CFBundleName" = "Screen Ruler"; 3 | -------------------------------------------------------------------------------- /ScreenRuler/da.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/da.lproj/Localizable.strings -------------------------------------------------------------------------------- /ScreenRuler/de.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleDisplayName" = "Screen Ruler"; 2 | "CFBundleName" = "Screen Ruler"; 3 | -------------------------------------------------------------------------------- /ScreenRuler/de.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/de.lproj/Localizable.strings -------------------------------------------------------------------------------- /ScreenRuler/el.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleDisplayName" = "Screen Ruler"; 2 | "CFBundleName" = "Screen Ruler"; 3 | -------------------------------------------------------------------------------- /ScreenRuler/el.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/el.lproj/Localizable.strings -------------------------------------------------------------------------------- /ScreenRuler/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/en.lproj/InfoPlist.strings -------------------------------------------------------------------------------- /ScreenRuler/en.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/en.lproj/Localizable.strings -------------------------------------------------------------------------------- /ScreenRuler/es-MX.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleDisplayName" = "Screen Ruler"; 2 | "CFBundleName" = "Screen Ruler"; 3 | -------------------------------------------------------------------------------- /ScreenRuler/es-MX.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/es-MX.lproj/Localizable.strings -------------------------------------------------------------------------------- /ScreenRuler/es.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/es.lproj/InfoPlist.strings -------------------------------------------------------------------------------- /ScreenRuler/fi.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleDisplayName" = "Screen Ruler"; 2 | "CFBundleName" = "Screen Ruler"; 3 | -------------------------------------------------------------------------------- /ScreenRuler/fi.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/fi.lproj/Localizable.strings -------------------------------------------------------------------------------- /ScreenRuler/fil-PH.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleDisplayName" = "Screen Ruler"; 2 | "CFBundleName" = "Screen Ruler"; 3 | -------------------------------------------------------------------------------- /ScreenRuler/fil-PH.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/fil-PH.lproj/Localizable.strings -------------------------------------------------------------------------------- /ScreenRuler/fil.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleDisplayName" = "Screen Ruler"; 2 | "CFBundleName" = "Screen Ruler"; 3 | -------------------------------------------------------------------------------- /ScreenRuler/fil.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/fil.lproj/Localizable.strings -------------------------------------------------------------------------------- /ScreenRuler/fr-CA.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleDisplayName" = "Screen Ruler"; 2 | "CFBundleName" = "Screen Ruler"; 3 | -------------------------------------------------------------------------------- /ScreenRuler/fr-CA.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/fr-CA.lproj/Localizable.strings -------------------------------------------------------------------------------- /ScreenRuler/fr.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleDisplayName" = "Screen Ruler"; 2 | "CFBundleName" = "Screen Ruler"; 3 | -------------------------------------------------------------------------------- /ScreenRuler/hi.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleDisplayName" = "स्क्रीनशॉट पैमाना"; 2 | "CFBundleName" = "स्क्रीनशॉट पैमाना"; 3 | -------------------------------------------------------------------------------- /ScreenRuler/id.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleDisplayName" = "Screen Ruler"; 2 | "CFBundleName" = "Screen Ruler"; 3 | -------------------------------------------------------------------------------- /ScreenRuler/id.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/id.lproj/Localizable.strings -------------------------------------------------------------------------------- /ScreenRuler/it.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleDisplayName" = "Screen Ruler"; 2 | "CFBundleName" = "Screen Ruler"; 3 | -------------------------------------------------------------------------------- /ScreenRuler/ja.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleDisplayName" = "Screen Ruler"; 2 | "CFBundleName" = "Screen Ruler"; 3 | -------------------------------------------------------------------------------- /ScreenRuler/ja.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/ja.lproj/Localizable.strings -------------------------------------------------------------------------------- /ScreenRuler/ko.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleDisplayName" = "Screen Ruler"; 2 | "CFBundleName" = "Screen Ruler"; 3 | -------------------------------------------------------------------------------- /ScreenRuler/ko.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/ko.lproj/Localizable.strings -------------------------------------------------------------------------------- /ScreenRuler/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // Screen Ruler 4 | // 5 | // Created by Mohd Iftekhar Qurashi 6 | // Copyright (c) 2016 InfoEum Software Systems. Licensed under the Apache License v2.0. 7 | // See COPYING or https://www.apache.org/licenses/LICENSE-2.0 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /ScreenRuler/ms.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleDisplayName" = "Screen Ruler"; 2 | "CFBundleName" = "Screen Ruler"; 3 | -------------------------------------------------------------------------------- /ScreenRuler/ms.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/ms.lproj/Localizable.strings -------------------------------------------------------------------------------- /ScreenRuler/nl.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleDisplayName" = "Screen Ruler"; 2 | "CFBundleName" = "Screen Ruler"; 3 | -------------------------------------------------------------------------------- /ScreenRuler/nl.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/nl.lproj/Localizable.strings -------------------------------------------------------------------------------- /ScreenRuler/pl.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleDisplayName" = "Linijka"; 2 | "CFBundleName" = "Linijka"; 3 | -------------------------------------------------------------------------------- /ScreenRuler/pl.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/pl.lproj/Localizable.strings -------------------------------------------------------------------------------- /ScreenRuler/pt-BR.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleDisplayName" = "Screen Ruler"; 2 | "CFBundleName" = "Screen Ruler"; 3 | -------------------------------------------------------------------------------- /ScreenRuler/pt-PT.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleDisplayName" = "Screen Ruler"; 2 | "CFBundleName" = "Screen Ruler"; 3 | -------------------------------------------------------------------------------- /ScreenRuler/pt-PT.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/pt-PT.lproj/Localizable.strings -------------------------------------------------------------------------------- /ScreenRuler/ro.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleDisplayName" = "Screen Ruler"; 2 | "CFBundleName" = "Screen Ruler"; 3 | -------------------------------------------------------------------------------- /ScreenRuler/ro.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/ro.lproj/Localizable.strings -------------------------------------------------------------------------------- /ScreenRuler/ru.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleDisplayName" = "Экранная Линейка"; 2 | "CFBundleName" = "Экранная Линейка"; 3 | -------------------------------------------------------------------------------- /ScreenRuler/sk.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleDisplayName" = "Screen Ruler"; 2 | "CFBundleName" = "Screen Ruler"; 3 | -------------------------------------------------------------------------------- /ScreenRuler/sk.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/sk.lproj/Localizable.strings -------------------------------------------------------------------------------- /ScreenRuler/sv.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleDisplayName" = "Screen Ruler"; 2 | "CFBundleName" = "Screen Ruler"; 3 | -------------------------------------------------------------------------------- /ScreenRuler/sv.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/sv.lproj/Localizable.strings -------------------------------------------------------------------------------- /ScreenRuler/ta-IN.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleDisplayName" = "Screen Ruler"; 2 | "CFBundleName" = "Screen Ruler"; 3 | -------------------------------------------------------------------------------- /ScreenRuler/ta-LK.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleDisplayName" = "Screen Ruler"; 2 | "CFBundleName" = "Screen Ruler"; 3 | -------------------------------------------------------------------------------- /ScreenRuler/ta-LK.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/ta-LK.lproj/Localizable.strings -------------------------------------------------------------------------------- /ScreenRuler/ta-MY.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleDisplayName" = "Screen Ruler"; 2 | "CFBundleName" = "Screen Ruler"; 3 | -------------------------------------------------------------------------------- /ScreenRuler/ta-MY.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/ta-MY.lproj/Localizable.strings -------------------------------------------------------------------------------- /ScreenRuler/ta-SG.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleDisplayName" = "Screen Ruler"; 2 | "CFBundleName" = "Screen Ruler"; 3 | -------------------------------------------------------------------------------- /ScreenRuler/ta-SG.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/ta-SG.lproj/Localizable.strings -------------------------------------------------------------------------------- /ScreenRuler/ta.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleDisplayName" = "Screen Ruler"; 2 | "CFBundleName" = "Screen Ruler"; 3 | -------------------------------------------------------------------------------- /ScreenRuler/ta.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/ta.lproj/Localizable.strings -------------------------------------------------------------------------------- /ScreenRuler/th.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleDisplayName" = "Screen Ruler"; 2 | "CFBundleName" = "Screen Ruler"; 3 | -------------------------------------------------------------------------------- /ScreenRuler/th.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/th.lproj/Localizable.strings -------------------------------------------------------------------------------- /ScreenRuler/tr.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleDisplayName" = "Screen Ruler"; 2 | "CFBundleName" = "Screen Ruler"; 3 | -------------------------------------------------------------------------------- /ScreenRuler/tr.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/tr.lproj/Localizable.strings -------------------------------------------------------------------------------- /ScreenRuler/uk.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleDisplayName" = "Screen Ruler"; 2 | "CFBundleName" = "Screen Ruler"; 3 | -------------------------------------------------------------------------------- /ScreenRuler/uk.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/uk.lproj/Localizable.strings -------------------------------------------------------------------------------- /ScreenRuler/vi.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleDisplayName" = "Screen Ruler"; 2 | "CFBundleName" = "Screen Ruler"; 3 | -------------------------------------------------------------------------------- /ScreenRuler/vi.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/vi.lproj/Localizable.strings -------------------------------------------------------------------------------- /ScreenRuler/zh-Hans.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleDisplayName" = "Screen Ruler"; 2 | "CFBundleName" = "Screen Ruler"; 3 | -------------------------------------------------------------------------------- /ScreenRuler/zh-Hans.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/zh-Hans.lproj/Localizable.strings -------------------------------------------------------------------------------- /ScreenRuler/zh-Hant.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleDisplayName" = "Screen Ruler"; 2 | "CFBundleName" = "Screen Ruler"; 3 | -------------------------------------------------------------------------------- /ScreenRuler/zh-Hant.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackiftekhar/IQScreenRuler/4bbdfb1e4ea5e3ba03ceab9e0f79b00b3cd58399/ScreenRuler/zh-Hant.lproj/Localizable.strings --------------------------------------------------------------------------------