70 Commits

Author SHA1 Message Date
Alexander Zielenski 184f87b5d8 bump version, copyright 2024-07-16 23:13:03 -07:00
Alexander Zielenski 3d119373ac fix signature for CGSREgisterCursorImages
it worked by a freak accident of the x86 calling convention. I believe it is accurate now
2024-07-16 22:39:56 -07:00
Alexander Zielenski 891424b084 add new xcode file to gitignore 2024-07-13 20:29:38 -07:00
Alexander Zielenski 716e226c62 update project settings 2024-07-13 20:28:34 -07:00
Alexander Zielenski 91cfa93820 update sparkle 2024-07-13 20:21:54 -07:00
Allan Nyholm Nielsen 94c575f77e Update README.md
Added in a line about the Mousecape Wiki.
2020-06-20 05:44:11 +02:00
Alex Zielenski 7a885c7530 Update README.md 2020-06-18 18:30:30 -07:00
Alex Zielenski 29e2c935d3 Delete appcast_signed.xml 2020-06-13 16:36:30 -07:00
Alex Zielenski 1980330a46 Update appcast_signed.xml 2020-06-13 15:49:38 -07:00
Alexander Zielenski 832b1df415 use new appcast file to switch developer id 2020-06-13 15:44:26 -07:00
Alexander Zielenski bf411cd291 update version 2020-06-13 15:21:12 -07:00
Alexander Zielenski c946d78130 stop using PNGs for mousecape files since they ruin colorspace information 2020-06-13 15:08:21 -07:00
Alexander Zielenski d414d175a7 add new icon made by @MUI68K 2020-06-13 13:19:54 -07:00
Alexander Zielenski 6bf1080f82 finally got a handle on the colorspaces 2020-06-13 11:56:13 -07:00
Alexander Zielenski b96acc8353 fix allans name im sorry allan 2020-06-13 11:53:39 -07:00
Alexander Zielenski 487c9aa91d update xcode project 2020-06-13 11:03:05 -07:00
Alexander Zielenski 706e546a1a fix darkening images 2020-06-13 11:02:39 -07:00
Alexander Zielenski 77577c0fb9 better localization support 2020-06-13 11:02:23 -07:00
Alex Zielenski e136fd9b96 update sparkle feed 2019-10-14 20:42:53 -07:00
Alex Zielenski 2364dd5348 Update README.md
add screenshot to readme
2019-10-14 20:34:48 -07:00
Alex Zielenski 1859b11eb8 add screenshot 2019-10-14 20:33:37 -07:00
Alex Zielenski 3a180d52cf update build settings and change daemon plist to LSBackgroundOnly 2019-10-14 20:33:14 -07:00
Alex Zielenski 21626bfc19 fix pretty bad memory leak when applying capes 2019-10-13 14:00:46 -07:00
Alex Zielenski 35410babdf fix #103 2019-10-13 13:57:38 -07:00
Alex Zielenski c467ecee85 add icon 2019-10-13 12:17:10 -07:00
Alex Zielenski 9a38e4e877 Respect size values given on import 2018-12-31 08:51:53 -08:00
Alex Zielenski cdd2bba2cc Cursors no longer lazy load on osx, reinitialize after reset 2018-12-30 22:24:00 -08:00
Alex Zielenski f64cbde808 bump version 2018-12-30 22:05:42 -08:00
Alex Zielenski 88291b8bda Merge branch 'dev' of github.com:alexzielenski/Mousecape 2018-12-30 22:02:42 -08:00
Alex Zielenski 57e3af4583 apply default cape on startup 2018-12-30 21:51:00 -08:00
Alex Zielenski db26ffe28a ensure sRGB on every set 2018-12-30 21:33:46 -08:00
Alex Zielenski 1d33808cb9 fix edit detail image regression 2018-12-30 21:29:57 -08:00
Alex Zielenski b570903bce try to fix fading images?
OS X changed default colorspace settings for reading images it seems
2018-12-30 21:21:53 -08:00
Alex Zielenski 5411d094ff project updates 2018-12-30 21:01:49 -08:00
Alex Zielenski 1d534b1e07 Merge pull request #46 from BorisVerk/master
made instructions for installing helper tool more explicit
2014-11-23 18:56:08 -05:00
Boris Verkhovskiy ad75161d07 Update README.md 2014-11-23 16:10:18 -07:00
Boris Verkhovskiy 4dc5130995 made instructions for installing more explicit 2014-11-23 16:09:58 -07:00
Alex Zielenski d9f935e76f fix #40 2014-09-03 22:50:12 -04:00
Alex Zielenski 1d3eaf94b1 fix submodule 2014-09-03 22:50:02 -04:00
Alex Zielenski b2bf822f76 fix #39 2014-09-03 22:19:54 -04:00
Alex Zielenski 63adfdb342 Merge remote-tracking branch 'origin/dev' 2014-07-31 04:59:36 -04:00
Alex Zielenski fa0764e04b use correct build number 2014-07-31 04:59:26 -04:00
Alex Zielenski e0c342c291 Merge remote-tracking branch 'origin/dev' 2014-07-31 04:58:17 -04:00
Alex Zielenski 200c323225 use a short version string in appcast 2014-07-31 04:57:59 -04:00
Alex Zielenski dc5974b1e5 Merge branch 'dev' 2014-07-31 04:55:33 -04:00
Alex Zielenski e1268114a9 use correct bundle version 2014-07-31 04:55:03 -04:00
Alex Zielenski 835d860546 Merge remote-tracking branch 'origin/dev' 2014-07-31 04:53:06 -04:00
Alex Zielenski ca2a0134d1 sparkle 2014-07-31 04:51:37 -04:00
Alex Zielenski 1a5286d567 bump version 2014-07-29 12:20:32 -04:00
Alex Zielenski c78b363aed fix prefs saving on application 2014-07-26 15:18:43 -04:00
Alex Zielenski 830628bb70 Merge branch 'master' of github.com:alexzielenski/Mousecape 2014-07-26 02:41:29 -04:00
Alex Zielenski 2e7b01e5d7 fix observation leak 2014-07-26 02:41:05 -04:00
Alex Zielenski 46d8ce7c57 Update README.md 2014-07-26 02:38:41 -04:00
Alex Zielenski 2bae6bfa00 Merge pull request #37 from alexzielenski/dev
0.0.5
2014-07-26 02:27:25 -04:00
Alex Zielenski 3a6af2920d fix window not showing applied cape 2014-07-26 02:20:02 -04:00
Alex Zielenski cbb87fa0e0 add option for left-handed users to flip pointers 2014-07-26 02:19:50 -04:00
Alex Zielenski 52162699c3 update current version in read me 2014-07-22 14:33:47 -04:00
Alex Zielenski 746e1b02a5 sort cursors by name in main window to fix #34 2014-07-15 01:50:09 -04:00
Alex Zielenski 5b548b9507 change the way saving works to fix #35 2014-07-15 01:37:36 -04:00
Alex Zielenski a3fd1e3023 use constant 2014-07-15 01:18:53 -04:00
Alex Zielenski 3368d64376 make sure libraryWindowController is loaded before anything to fix #28 2014-07-15 01:18:45 -04:00
Alex Zielenski 1948bff0f5 use promises for dragging with alt key 2014-07-14 23:49:41 -04:00
Alex Zielenski e30572a7f1 allow dragging in multiple images to animate cursors to fix #36 2014-07-14 23:25:41 -04:00
Alex Zielenski 6ce1490fa9 have the first rep set determine image size to fix #31 2014-07-14 18:35:31 -04:00
Alex Zielenski 4aadd80fe8 make hotspot position more accurate to fix #33 2014-07-14 18:13:04 -04:00
Alex Zielenski aec4a42363 better identifier checking 2014-07-14 17:49:57 -04:00
Alex Zielenski a68912d9b2 remove logging 2014-07-14 17:43:21 -04:00
Alex Zielenski 2aa38d60cc add cursor dumping interface action to fix #32 2014-07-14 17:42:17 -04:00
Alex Zielenski e23797f70a allow dragging images out holding alt to fix #29 2014-07-14 16:40:11 -04:00
Alex Zielenski 7a9daedc0e Information about how to animate your cursors 2014-07-02 16:42:13 -04:00
103 changed files with 4607 additions and 872 deletions
+69
View File
@@ -1 +1,70 @@
WorkspaceSettings.xcsettings
# Xcode
#
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
## User settings
xcuserdata/
## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9)
*.xcscmblueprint
*.xccheckout
## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4)
build/
DerivedData/
*.moved-aside
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
## Obj-C/Swift specific
*.hmap
## App packaging
*.ipa
*.dSYM.zip
*.dSYM
# CocoaPods
#
# We recommend against adding the Pods directory to your .gitignore. However
# you should judge for yourself, the pros and cons are mentioned at:
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
#
# Pods/
#
# Add this line if you want to avoid checking in source code from the Xcode workspace
# *.xcworkspace
# Carthage
#
# Add this line if you want to avoid checking in source code from Carthage dependencies.
# Carthage/Checkouts
Carthage/Build/
# fastlane
#
# It is recommended to not store the screenshots in the git repo.
# Instead, use fastlane to re-generate the screenshots whenever they are needed.
# For more information about the recommended setup visit:
# https://docs.fastlane.tools/best-practices/source-control/#source-control
fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots/**/*.png
fastlane/test_output
# Code Injection
#
# After new code Injection tools there's a generated folder /iOSInjectionProject
# https://github.com/johnno1962/injectionforxcode
iOSInjectionProject/
xcshareddata
+3
View File
@@ -0,0 +1,3 @@
[submodule "Mousecape/Mousecape/external/Sparkle"]
path = Mousecape/Mousecape/external/Sparkle
url = https://github.com/sparkle-project/Sparkle.git
+395 -49
View File
@@ -3,15 +3,12 @@
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objectVersion = 54;
objects = {
/* Begin PBXBuildFile section */
FA04886C189F58B1001F3AB5 /* Edit.xib in Resources */ = {isa = PBXBuildFile; fileRef = FA048868189F58B1001F3AB5 /* Edit.xib */; };
FA04886D189F58B1001F3AB5 /* Library.xib in Resources */ = {isa = PBXBuildFile; fileRef = FA04886A189F58B1001F3AB5 /* Library.xib */; };
FA14DE8D18CE596B00A73BF4 /* RBLClipView.m in Sources */ = {isa = PBXBuildFile; fileRef = FA14DE8A18CE596B00A73BF4 /* RBLClipView.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
FA14DE8E18CE596B00A73BF4 /* RBLScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = FA14DE8C18CE596B00A73BF4 /* RBLScrollView.m */; };
FA14DE9118CE59A600A73BF4 /* NSColor+RBLCGColorAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = FA14DE9018CE59A600A73BF4 /* NSColor+RBLCGColorAdditions.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
FA1DC01919527A73009E879C /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA359844189DBA3800288163 /* SystemConfiguration.framework */; };
FA1DC01A19527A79009E879C /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA254779189D85890038E1D9 /* ApplicationServices.framework */; };
FA35983F189DA3BC00288163 /* MCPrefs.m in Sources */ = {isa = PBXBuildFile; fileRef = FA35983E189DA3BC00288163 /* MCPrefs.m */; };
@@ -24,20 +21,28 @@
FA5107E818A823BD00917185 /* MASPreferencesWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = FA5107E318A823BD00917185 /* MASPreferencesWindowController.m */; };
FA5107ED18A8253600917185 /* MCGeneralPreferencesController.m in Sources */ = {isa = PBXBuildFile; fileRef = FA5107EB18A8253600917185 /* MCGeneralPreferencesController.m */; };
FA5107EE18A8253600917185 /* GeneralPreferences.xib in Resources */ = {isa = PBXBuildFile; fileRef = FA5107EC18A8253600917185 /* GeneralPreferences.xib */; };
FA57339724954AB000103FCF /* RBLClipView.m in Sources */ = {isa = PBXBuildFile; fileRef = FA57339124954AB000103FCF /* RBLClipView.m */; };
FA57339824954AB000103FCF /* NSColor+RBLCGColorAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = FA57339224954AB000103FCF /* NSColor+RBLCGColorAdditions.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
FA57339924954AB000103FCF /* RBLScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = FA57339624954AB000103FCF /* RBLScrollView.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
FA7582B8193D377300CE223C /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA7582B7193D377300CE223C /* ApplicationServices.framework */; };
FA8FF76B189D664400750E51 /* restore.m in Sources */ = {isa = PBXBuildFile; fileRef = FA8FF76A189D664400750E51 /* restore.m */; };
FA8FF76E189D66CB00750E51 /* backup.m in Sources */ = {isa = PBXBuildFile; fileRef = FA8FF76D189D66CB00750E51 /* backup.m */; };
FA8FF771189D66D800750E51 /* apply.m in Sources */ = {isa = PBXBuildFile; fileRef = FA8FF770189D66D800750E51 /* apply.m */; };
FA8FF774189D67B100750E51 /* create.m in Sources */ = {isa = PBXBuildFile; fileRef = FA8FF773189D67B100750E51 /* create.m */; };
FA901D002C437ADD006983AA /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FADF013A198A2C7500006228 /* Sparkle.framework */; };
FA901D012C437ADD006983AA /* Sparkle.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FADF013A198A2C7500006228 /* Sparkle.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
FA9A48AB2353C6EF009CF05E /* NSBitmapImageRep+ColorSpace.m in Sources */ = {isa = PBXBuildFile; fileRef = FABA44D321D9D7D0009B10D9 /* NSBitmapImageRep+ColorSpace.m */; };
FAAEF8F4189EB32700145DF8 /* BTRClipView.m in Sources */ = {isa = PBXBuildFile; fileRef = FAAEF8F1189EB32700145DF8 /* BTRClipView.m */; };
FAAEF8F5189EB32700145DF8 /* BTRScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = FAAEF8F3189EB32700145DF8 /* BTRScrollView.m */; };
FAAEF8F7189EB34700145DF8 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FAAEF8F6189EB34700145DF8 /* QuartzCore.framework */; };
FAAEF94E189EFC9300145DF8 /* create.m in Sources */ = {isa = PBXBuildFile; fileRef = FA8FF773189D67B100750E51 /* create.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
FAAEF94F189EFC9600145DF8 /* backup.m in Sources */ = {isa = PBXBuildFile; fileRef = FA8FF76D189D66CB00750E51 /* backup.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
FAAEF950189EFC9800145DF8 /* apply.m in Sources */ = {isa = PBXBuildFile; fileRef = FA8FF770189D66D800750E51 /* apply.m */; };
FAAEF950189EFC9800145DF8 /* apply.m in Sources */ = {isa = PBXBuildFile; fileRef = FA8FF770189D66D800750E51 /* apply.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
FAAEF951189F0CC300145DF8 /* restore.m in Sources */ = {isa = PBXBuildFile; fileRef = FA8FF76A189D664400750E51 /* restore.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
FAAEF957189F4ED300145DF8 /* scale.m in Sources */ = {isa = PBXBuildFile; fileRef = FAAEF956189F4ED300145DF8 /* scale.m */; };
FAAEF958189F4F8200145DF8 /* scale.m in Sources */ = {isa = PBXBuildFile; fileRef = FAAEF956189F4ED300145DF8 /* scale.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
FABA44D421D9D7D0009B10D9 /* NSBitmapImageRep+ColorSpace.m in Sources */ = {isa = PBXBuildFile; fileRef = FABA44D321D9D7D0009B10D9 /* NSBitmapImageRep+ColorSpace.m */; };
FABA44D521D9D947009B10D9 /* NSBitmapImageRep+ColorSpace.m in Sources */ = {isa = PBXBuildFile; fileRef = FABA44D321D9D7D0009B10D9 /* NSBitmapImageRep+ColorSpace.m */; };
FAC69F65189D603C00BC829D /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FAC69F64189D603C00BC829D /* Cocoa.framework */; };
FAC69F6F189D603C00BC829D /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = FAC69F6D189D603C00BC829D /* InfoPlist.strings */; };
FAC69F71189D603C00BC829D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = FAC69F70189D603C00BC829D /* main.m */; };
@@ -46,7 +51,6 @@
FAC69F7B189D603C00BC829D /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = FAC69F79189D603C00BC829D /* MainMenu.xib */; };
FAC69F7D189D603C00BC829D /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FAC69F7C189D603C00BC829D /* Images.xcassets */; };
FAC69FB1189D608900BC829D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = FAC69FB0189D608900BC829D /* main.m */; };
FAC69FB5189D608900BC829D /* mousecloak.1 in CopyFiles */ = {isa = PBXBuildFile; fileRef = FAC69FB4189D608900BC829D /* mousecloak.1 */; };
FAC69FD4189D609B00BC829D /* GBCommandLineParser.m in Sources */ = {isa = PBXBuildFile; fileRef = FAC69FCF189D609B00BC829D /* GBCommandLineParser.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; };
FAC69FD5189D609B00BC829D /* GBOptionsHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = FAC69FD1189D609B00BC829D /* GBOptionsHelper.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; };
FAC69FD6189D609B00BC829D /* GBSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = FAC69FD3189D609B00BC829D /* GBSettings.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; };
@@ -90,16 +94,117 @@
remoteGlobalIDString = FAC69FAC189D608900BC829D;
remoteInfo = mousecloak;
};
FA901CF22C437914006983AA /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = FADF012E198A2C7400006228 /* Sparkle.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 726B2B5D1C645FC900388755;
remoteInfo = "UI Tests";
};
FA901CF42C437914006983AA /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = FADF012E198A2C7400006228 /* Sparkle.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 722954B41D04ADAF00ECF9CA;
remoteInfo = fileop;
};
FA901CF62C437914006983AA /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = FADF012E198A2C7400006228 /* Sparkle.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 5AE13FB31E0D9E07000D2C2C;
remoteInfo = generate_appcast;
};
FA901CF82C437914006983AA /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = FADF012E198A2C7400006228 /* Sparkle.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 5AB8F19F214DA72000A1187F;
remoteInfo = generate_keys;
};
FA901CFA2C437914006983AA /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = FADF012E198A2C7400006228 /* Sparkle.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 5A5ADED7214EDE4900DF0099;
remoteInfo = sign_update;
};
FA901CFC2C437914006983AA /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = FADF012E198A2C7400006228 /* Sparkle.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = EA4311EA229D651300A5503D;
remoteInfo = bsdiff;
};
FA901CFE2C437914006983AA /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = FADF012E198A2C7400006228 /* Sparkle.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = EA4311A0229D5FBC00A5503D;
remoteInfo = ed25519;
};
FADF0139198A2C7500006228 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = FADF012E198A2C7400006228 /* Sparkle.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 8DC2EF5B0486A6940098B216;
remoteInfo = Sparkle;
};
FADF013B198A2C7500006228 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = FADF012E198A2C7400006228 /* Sparkle.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 61B5F90209C4CEE200B25A18;
remoteInfo = "Sparkle Test App";
};
FADF013D198A2C7500006228 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = FADF012E198A2C7400006228 /* Sparkle.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 612279D90DB5470200AB99EA;
remoteInfo = "Sparkle Unit Tests";
};
FADF013F198A2C7500006228 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = FADF012E198A2C7400006228 /* Sparkle.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 5D06E8D00FD68C7C005AE3F6;
remoteInfo = BinaryDelta;
};
FADF0141198A2C7500006228 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = FADF012E198A2C7400006228 /* Sparkle.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 55C14BB7136EEF1500649790;
remoteInfo = Autoupdate;
};
FADF0144198A2CA100006228 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = FADF012E198A2C7400006228 /* Sparkle.xcodeproj */;
proxyType = 1;
remoteGlobalIDString = 8DC2EF4F0486A6940098B216;
remoteInfo = Sparkle;
};
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
FA901D022C437ADD006983AA /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
FA901D012C437ADD006983AA /* Sparkle.framework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
FAC69FAB189D608900BC829D /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = /usr/share/man/man1/;
dstSubfolderSpec = 0;
files = (
FAC69FB5189D608900BC829D /* mousecloak.1 in CopyFiles */,
);
runOnlyForDeploymentPostprocessing = 1;
};
@@ -130,12 +235,6 @@
/* Begin PBXFileReference section */
FA048869189F58B1001F3AB5 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/Edit.xib; sourceTree = "<group>"; };
FA04886B189F58B1001F3AB5 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/Library.xib; sourceTree = "<group>"; };
FA14DE8918CE596B00A73BF4 /* RBLClipView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RBLClipView.h; sourceTree = "<group>"; };
FA14DE8A18CE596B00A73BF4 /* RBLClipView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RBLClipView.m; sourceTree = "<group>"; };
FA14DE8B18CE596B00A73BF4 /* RBLScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RBLScrollView.h; sourceTree = "<group>"; };
FA14DE8C18CE596B00A73BF4 /* RBLScrollView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RBLScrollView.m; sourceTree = "<group>"; };
FA14DE8F18CE59A600A73BF4 /* NSColor+RBLCGColorAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSColor+RBLCGColorAdditions.h"; sourceTree = "<group>"; };
FA14DE9018CE59A600A73BF4 /* NSColor+RBLCGColorAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSColor+RBLCGColorAdditions.m"; sourceTree = "<group>"; };
FA1DC01719527A56009E879C /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
FA254779189D85890038E1D9 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = System/Library/Frameworks/ApplicationServices.framework; sourceTree = SDKROOT; };
FA35983D189DA3BC00288163 /* MCPrefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCPrefs.h; sourceTree = "<group>"; };
@@ -152,6 +251,16 @@
FA5107EA18A8253600917185 /* MCGeneralPreferencesController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MCGeneralPreferencesController.h; path = Preferences/MCGeneralPreferencesController.h; sourceTree = "<group>"; };
FA5107EB18A8253600917185 /* MCGeneralPreferencesController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MCGeneralPreferencesController.m; path = Preferences/MCGeneralPreferencesController.m; sourceTree = "<group>"; };
FA5107EC18A8253600917185 /* GeneralPreferences.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = GeneralPreferences.xib; path = Preferences/GeneralPreferences.xib; sourceTree = "<group>"; };
FA57338B2495473A00103FCF /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/MainMenu.strings; sourceTree = "<group>"; };
FA57338D2495474200103FCF /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Library.strings; sourceTree = "<group>"; };
FA57338F2495474800103FCF /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Edit.strings; sourceTree = "<group>"; };
FA57339124954AB000103FCF /* RBLClipView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RBLClipView.m; sourceTree = "<group>"; };
FA57339224954AB000103FCF /* NSColor+RBLCGColorAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSColor+RBLCGColorAdditions.m"; sourceTree = "<group>"; };
FA57339324954AB000103FCF /* RBLScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RBLScrollView.h; sourceTree = "<group>"; };
FA57339424954AB000103FCF /* RBLClipView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RBLClipView.h; sourceTree = "<group>"; };
FA57339524954AB000103FCF /* NSColor+RBLCGColorAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSColor+RBLCGColorAdditions.h"; sourceTree = "<group>"; };
FA57339624954AB000103FCF /* RBLScrollView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RBLScrollView.m; sourceTree = "<group>"; };
FA5733A32495667900103FCF /* Mousecape.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Mousecape.entitlements; sourceTree = "<group>"; };
FA7582B7193D377300CE223C /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = ../../../../../../../../../System/Library/Frameworks/ApplicationServices.framework; sourceTree = "<group>"; };
FA8FF769189D663B00750E51 /* restore.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = restore.h; sourceTree = "<group>"; };
FA8FF76A189D664400750E51 /* restore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = restore.m; sourceTree = "<group>"; };
@@ -168,6 +277,8 @@
FAAEF8F6189EB34700145DF8 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
FAAEF955189F4ECC00145DF8 /* scale.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = scale.h; sourceTree = "<group>"; };
FAAEF956189F4ED300145DF8 /* scale.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = scale.m; sourceTree = "<group>"; };
FABA44D221D9D7D0009B10D9 /* NSBitmapImageRep+ColorSpace.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSBitmapImageRep+ColorSpace.h"; sourceTree = "<group>"; };
FABA44D321D9D7D0009B10D9 /* NSBitmapImageRep+ColorSpace.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSBitmapImageRep+ColorSpace.m"; sourceTree = "<group>"; };
FAC69F61189D603C00BC829D /* Mousecape.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Mousecape.app; sourceTree = BUILT_PRODUCTS_DIR; };
FAC69F64189D603C00BC829D /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
FAC69F67189D603C00BC829D /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };
@@ -187,7 +298,6 @@
FAC69FAD189D608900BC829D /* mousecloak */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = mousecloak; sourceTree = BUILT_PRODUCTS_DIR; };
FAC69FB0189D608900BC829D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
FAC69FB3189D608900BC829D /* mousecloak-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "mousecloak-Prefix.pch"; sourceTree = "<group>"; };
FAC69FB4189D608900BC829D /* mousecloak.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = mousecloak.1; sourceTree = "<group>"; };
FAC69FBA189D609B00BC829D /* CarbonHelpers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CarbonHelpers.h; sourceTree = "<group>"; };
FAC69FBB189D609B00BC829D /* CGSAccessibility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CGSAccessibility.h; sourceTree = "<group>"; };
FAC69FBC189D609B00BC829D /* CGSCIFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CGSCIFilter.h; sourceTree = "<group>"; };
@@ -218,6 +328,7 @@
FADBC15018CE51C000B9510F /* DTScrollView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DTScrollView.m; sourceTree = "<group>"; };
FADBC15218CE535200B9510F /* MCCapePreviewItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCCapePreviewItem.h; sourceTree = "<group>"; };
FADBC15318CE535200B9510F /* MCCapePreviewItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MCCapePreviewItem.m; sourceTree = "<group>"; };
FADF012E198A2C7400006228 /* Sparkle.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Sparkle.xcodeproj; path = Sparkle/Sparkle.xcodeproj; sourceTree = "<group>"; };
FAE5D54919526F82007620DE /* com.alexzielenski.mousecloakhelper.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = com.alexzielenski.mousecloakhelper.app; sourceTree = BUILT_PRODUCTS_DIR; };
FAE5D54C19526F82007620DE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
FAE5D57519527245007620DE /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
@@ -260,6 +371,7 @@
files = (
FAAEF8F7189EB34700145DF8 /* QuartzCore.framework in Frameworks */,
FA35984D189DC55A00288163 /* ServiceManagement.framework in Frameworks */,
FA901D002C437ADD006983AA /* Sparkle.framework in Frameworks */,
FA359849189DC40100288163 /* Security.framework in Frameworks */,
FAC69F65189D603C00BC829D /* Cocoa.framework in Frameworks */,
);
@@ -287,19 +399,6 @@
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
FA14DE8818CE596B00A73BF4 /* Rebel */ = {
isa = PBXGroup;
children = (
FA14DE8918CE596B00A73BF4 /* RBLClipView.h */,
FA14DE8A18CE596B00A73BF4 /* RBLClipView.m */,
FA14DE8B18CE596B00A73BF4 /* RBLScrollView.h */,
FA14DE8C18CE596B00A73BF4 /* RBLScrollView.m */,
FA14DE8F18CE59A600A73BF4 /* NSColor+RBLCGColorAdditions.h */,
FA14DE9018CE59A600A73BF4 /* NSColor+RBLCGColorAdditions.m */,
);
path = Rebel;
sourceTree = "<group>";
};
FA5107DD18A823BD00917185 /* MASPreferences */ = {
isa = PBXGroup;
children = (
@@ -321,10 +420,24 @@
name = Preferences;
sourceTree = "<group>";
};
FA57339024954AB000103FCF /* Rebel */ = {
isa = PBXGroup;
children = (
FA57339124954AB000103FCF /* RBLClipView.m */,
FA57339224954AB000103FCF /* NSColor+RBLCGColorAdditions.m */,
FA57339324954AB000103FCF /* RBLScrollView.h */,
FA57339424954AB000103FCF /* RBLClipView.h */,
FA57339524954AB000103FCF /* NSColor+RBLCGColorAdditions.h */,
FA57339624954AB000103FCF /* RBLScrollView.m */,
);
path = Rebel;
sourceTree = "<group>";
};
FAAEF8EE189EB32700145DF8 /* external */ = {
isa = PBXGroup;
children = (
FA14DE8818CE596B00A73BF4 /* Rebel */,
FADF012E198A2C7400006228 /* Sparkle.xcodeproj */,
FA57339024954AB000103FCF /* Rebel */,
FADBC14E18CE51C000B9510F /* DTScrollView */,
FA5107DD18A823BD00917185 /* MASPreferences */,
FAAEF8EF189EB32700145DF8 /* BTRKit */,
@@ -395,6 +508,7 @@
FAC69F6A189D603C00BC829D /* Mousecape */ = {
isa = PBXGroup;
children = (
FA5733A32495667900103FCF /* Mousecape.entitlements */,
FAEE650818A047E8003AA182 /* categories */,
FAEE650D18A047E8003AA182 /* controllers */,
FAEE651C18A047E8003AA182 /* models */,
@@ -448,8 +562,9 @@
FAAEF955189F4ECC00145DF8 /* scale.h */,
FAAEF956189F4ED300145DF8 /* scale.m */,
FAC69FCB189D609B00BC829D /* NSCursor_Private.h */,
FAC69FB4189D608900BC829D /* mousecloak.1 */,
FAC69FB2189D608900BC829D /* Supporting Files */,
FABA44D221D9D7D0009B10D9 /* NSBitmapImageRep+ColorSpace.h */,
FABA44D321D9D7D0009B10D9 /* NSBitmapImageRep+ColorSpace.m */,
);
path = mousecloak;
sourceTree = "<group>";
@@ -515,6 +630,25 @@
path = DTScrollView;
sourceTree = "<group>";
};
FADF012F198A2C7400006228 /* Products */ = {
isa = PBXGroup;
children = (
FADF013A198A2C7500006228 /* Sparkle.framework */,
FADF013C198A2C7500006228 /* Sparkle Test App.app */,
FADF013E198A2C7500006228 /* Sparkle Unit Tests.xctest */,
FADF0140198A2C7500006228 /* BinaryDelta */,
FADF0142198A2C7500006228 /* Autoupdate.app */,
FA901CF32C437914006983AA /* UI Tests.xctest */,
FA901CF52C437914006983AA /* fileop */,
FA901CF72C437914006983AA /* generate_appcast */,
FA901CF92C437914006983AA /* generate_keys */,
FA901CFB2C437914006983AA /* sign_update */,
FA901CFD2C437914006983AA /* libbsdiff.a */,
FA901CFF2C437914006983AA /* libed25519.a */,
);
name = Products;
sourceTree = "<group>";
};
FAE5D54A19526F82007620DE /* mousecloakHelper */ = {
isa = PBXGroup;
children = (
@@ -618,10 +752,12 @@
FA359841189DAAF900288163 /* Build Number */,
FAE5D57D1952734F007620DE /* Copy Tool */,
FAE5D57F1952737F007620DE /* Copy Helper */,
FA901D022C437ADD006983AA /* Embed Frameworks */,
);
buildRules = (
);
dependencies = (
FADF0145198A2CA100006228 /* PBXTargetDependency */,
FA359847189DBEB700288163 /* PBXTargetDependency */,
);
name = Mousecape;
@@ -669,30 +805,44 @@
FAC69F59189D603C00BC829D /* Project object */ = {
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = YES;
CLASSPREFIX = MC;
LastUpgradeCheck = 0600;
LastUpgradeCheck = 1500;
ORGANIZATIONNAME = "Alex Zielenski";
TargetAttributes = {
FAC69F60189D603C00BC829D = {
DevelopmentTeam = 3GD8ABJ22W;
ProvisioningStyle = Automatic;
};
FAC69FAC189D608900BC829D = {
DevelopmentTeam = 3GD8ABJ22W;
ProvisioningStyle = Automatic;
};
FAE5D54819526F82007620DE = {
CreatedOnToolsVersion = 6.0;
DevelopmentTeam = 3GD8ABJ22W;
ProvisioningStyle = Automatic;
};
};
};
buildConfigurationList = FAC69F5C189D603C00BC829D /* Build configuration list for PBXProject "Mousecape" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
no,
);
mainGroup = FAC69F58189D603C00BC829D;
productRefGroup = FAC69F62189D603C00BC829D /* Products */;
projectDirPath = "";
projectReferences = (
{
ProductGroup = FADF012F198A2C7400006228 /* Products */;
ProjectRef = FADF012E198A2C7400006228 /* Sparkle.xcodeproj */;
},
);
projectRoot = "";
targets = (
FAC69F60189D603C00BC829D /* Mousecape */,
@@ -702,6 +852,93 @@
};
/* End PBXProject section */
/* Begin PBXReferenceProxy section */
FA901CF32C437914006983AA /* UI Tests.xctest */ = {
isa = PBXReferenceProxy;
fileType = wrapper.cfbundle;
path = "UI Tests.xctest";
remoteRef = FA901CF22C437914006983AA /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
FA901CF52C437914006983AA /* fileop */ = {
isa = PBXReferenceProxy;
fileType = "compiled.mach-o.executable";
path = fileop;
remoteRef = FA901CF42C437914006983AA /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
FA901CF72C437914006983AA /* generate_appcast */ = {
isa = PBXReferenceProxy;
fileType = "compiled.mach-o.executable";
path = generate_appcast;
remoteRef = FA901CF62C437914006983AA /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
FA901CF92C437914006983AA /* generate_keys */ = {
isa = PBXReferenceProxy;
fileType = "compiled.mach-o.executable";
path = generate_keys;
remoteRef = FA901CF82C437914006983AA /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
FA901CFB2C437914006983AA /* sign_update */ = {
isa = PBXReferenceProxy;
fileType = "compiled.mach-o.executable";
path = sign_update;
remoteRef = FA901CFA2C437914006983AA /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
FA901CFD2C437914006983AA /* libbsdiff.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libbsdiff.a;
remoteRef = FA901CFC2C437914006983AA /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
FA901CFF2C437914006983AA /* libed25519.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libed25519.a;
remoteRef = FA901CFE2C437914006983AA /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
FADF013A198A2C7500006228 /* Sparkle.framework */ = {
isa = PBXReferenceProxy;
fileType = wrapper.framework;
path = Sparkle.framework;
remoteRef = FADF0139198A2C7500006228 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
FADF013C198A2C7500006228 /* Sparkle Test App.app */ = {
isa = PBXReferenceProxy;
fileType = wrapper.application;
path = "Sparkle Test App.app";
remoteRef = FADF013B198A2C7500006228 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
FADF013E198A2C7500006228 /* Sparkle Unit Tests.xctest */ = {
isa = PBXReferenceProxy;
fileType = wrapper.cfbundle;
path = "Sparkle Unit Tests.xctest";
remoteRef = FADF013D198A2C7500006228 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
FADF0140198A2C7500006228 /* BinaryDelta */ = {
isa = PBXReferenceProxy;
fileType = "compiled.mach-o.executable";
path = BinaryDelta;
remoteRef = FADF013F198A2C7500006228 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
FADF0142198A2C7500006228 /* Autoupdate.app */ = {
isa = PBXReferenceProxy;
fileType = wrapper.application;
path = Autoupdate.app;
remoteRef = FADF0141198A2C7500006228 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
/* End PBXReferenceProxy section */
/* Begin PBXResourcesBuildPhase section */
FAC69F5F189D603C00BC829D /* Resources */ = {
isa = PBXResourcesBuildPhase;
@@ -730,7 +967,8 @@
/* Begin PBXShellScriptBuildPhase section */
FA359841189DAAF900288163 /* Build Number */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
alwaysOutOfDate = 1;
buildActionMask = 8;
files = (
);
inputPaths = (
@@ -738,9 +976,9 @@
name = "Build Number";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
runOnlyForDeploymentPostprocessing = 1;
shellPath = /bin/sh;
shellScript = "#!/bin/bash\n\nbuildPlist=${INFOPLIST_FILE}\nCFBundleVersion=$(/usr/libexec/PlistBuddy -c \"Print CFBundleVersion\" $buildPlist)\nBuildNumberINCR=$((CFBundleVersion + 1))\n\n/usr/libexec/PlistBuddy -c \"Set :CFBundleVersion $BuildNumberINCR\" $buildPlist\n";
shellScript = "#!/bin/bash\n\nbuildPlist=${INFOPLIST_FILE}\nCFBundleVersion=$(/usr/libexec/PlistBuddy -c \"Print CFBundleVersion\" $buildPlist)\nBuildNumberINCR=$((CFBundleVersion + 1))\n\n/usr/libexec/PlistBuddy -c \"Set :CFBundleVersion $BuildNumberINCR\" $buildPlist\n/usr/libexec/PlistBuddy -c \"Set :CFBundleShortVersionString $BuildNumberINCR\" $buildPlist\n\n";
};
/* End PBXShellScriptBuildPhase section */
@@ -749,6 +987,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
FABA44D521D9D947009B10D9 /* NSBitmapImageRep+ColorSpace.m in Sources */,
FAEE653018A047E8003AA182 /* MCLibraryViewController.m in Sources */,
FAEE653618A047E8003AA182 /* MMAnimatingImageView.m in Sources */,
FAEE653318A047E8003AA182 /* MCCursorLibrary.m in Sources */,
@@ -759,18 +998,18 @@
FAAEF94E189EFC9300145DF8 /* create.m in Sources */,
FAEE652C18A047E8003AA182 /* MCEditDetailController.m in Sources */,
FAAEF94F189EFC9600145DF8 /* backup.m in Sources */,
FA57339724954AB000103FCF /* RBLClipView.m in Sources */,
FA5107ED18A8253600917185 /* MCGeneralPreferencesController.m in Sources */,
FAAEF951189F0CC300145DF8 /* restore.m in Sources */,
FA57339824954AB000103FCF /* NSColor+RBLCGColorAdditions.m in Sources */,
FAAEF950189EFC9800145DF8 /* apply.m in Sources */,
FAEE652918A047E8003AA182 /* NSFileManager+DirectoryLocations.m in Sources */,
FA14DE9118CE59A600A73BF4 /* NSColor+RBLCGColorAdditions.m in Sources */,
FA5107E818A823BD00917185 /* MASPreferencesWindowController.m in Sources */,
FAEE652D18A047E8003AA182 /* MCEditListController.m in Sources */,
FAC69F71189D603C00BC829D /* main.m in Sources */,
FAEE653218A047E8003AA182 /* MCCursor.m in Sources */,
FAAEF958189F4F8200145DF8 /* scale.m in Sources */,
FAEE653418A047E8003AA182 /* MCFormatters.m in Sources */,
FA14DE8E18CE596B00A73BF4 /* RBLScrollView.m in Sources */,
FAAEF8F4189EB32700145DF8 /* BTRClipView.m in Sources */,
FAAEF8F5189EB32700145DF8 /* BTRScrollView.m in Sources */,
FAC69FDC189D636700BC829D /* MCDefs.m in Sources */,
@@ -778,9 +1017,9 @@
FA359840189DA3C100288163 /* MCPrefs.m in Sources */,
FAEE652B18A047E8003AA182 /* MCEditCapeController.m in Sources */,
FADBC15418CE535200B9510F /* MCCapePreviewItem.m in Sources */,
FA57339924954AB000103FCF /* RBLScrollView.m in Sources */,
FAEE652A18A047E8003AA182 /* NSOrderedSet+AZSortedInsert.m in Sources */,
FADBC15118CE51C000B9510F /* DTScrollView.m in Sources */,
FA14DE8D18CE596B00A73BF4 /* RBLClipView.m in Sources */,
FAEE653518A047E8003AA182 /* MCCapeCellView.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -801,6 +1040,7 @@
FAC69FDD189D636700BC829D /* MCDefs.m in Sources */,
FAC69FD4189D609B00BC829D /* GBCommandLineParser.m in Sources */,
FA8FF774189D67B100750E51 /* create.m in Sources */,
FABA44D421D9D7D0009B10D9 /* NSBitmapImageRep+ColorSpace.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -816,6 +1056,7 @@
FAE5D5701952700B007620DE /* apply.m in Sources */,
FAE5D5721952700B007620DE /* listen.m in Sources */,
FAE5D578195272DD007620DE /* scale.m in Sources */,
FA9A48AB2353C6EF009CF05E /* NSBitmapImageRep+ColorSpace.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -827,6 +1068,11 @@
target = FAC69FAC189D608900BC829D /* mousecloak */;
targetProxy = FA359846189DBEB700288163 /* PBXContainerItemProxy */;
};
FADF0145198A2CA100006228 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
name = Sparkle;
targetProxy = FADF0144198A2CA100006228 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
@@ -834,6 +1080,7 @@
isa = PBXVariantGroup;
children = (
FA048869189F58B1001F3AB5 /* Base */,
FA57338F2495474800103FCF /* en */,
);
name = Edit.xib;
sourceTree = "<group>";
@@ -842,6 +1089,7 @@
isa = PBXVariantGroup;
children = (
FA04886B189F58B1001F3AB5 /* Base */,
FA57338D2495474200103FCF /* en */,
);
name = Library.xib;
sourceTree = "<group>";
@@ -866,6 +1114,7 @@
isa = PBXVariantGroup;
children = (
FAC69F7A189D603C00BC829D /* Base */,
FA57338B2495473A00103FCF /* en */,
);
name = MainMenu.xib;
sourceTree = "<group>";
@@ -877,22 +1126,40 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_LOCALIZABILITY_EMPTY_CONTEXT = YES;
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "Developer ID Application";
CODE_SIGN_IDENTITY = "Apple Development";
COPY_PHASE_STRIP = NO;
DEAD_CODE_STRIPPING = YES;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"PROJECT_DIR=\\\"\"$(PROJECT_DIR)\"\\\"",
@@ -906,9 +1173,9 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.8;
MACOSX_DEPLOYMENT_TARGET = 10.13;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = macosx10.9;
SDKROOT = macosx;
};
name = Debug;
};
@@ -916,23 +1183,40 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_LOCALIZABILITY_EMPTY_CONTEXT = YES;
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "Developer ID Application";
CODE_SIGN_IDENTITY = "Apple Development";
COPY_PHASE_STRIP = NO;
DEAD_CODE_STRIPPING = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
GCC_NO_COMMON_BLOCKS = YES;
GCC_PREPROCESSOR_DEFINITIONS = "PROJECT_DIR=\\\"\"$(PROJECT_DIR)\"\\\"";
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
@@ -940,21 +1224,32 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.8;
SDKROOT = macosx10.9;
MACOSX_DEPLOYMENT_TARGET = 10.13;
SDKROOT = macosx;
};
name = Release;
};
FAC69F93189D603C00BC829D /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon2;
CODE_SIGN_ENTITLEMENTS = Mousecape/Mousecape.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_TEAM = 3GD8ABJ22W;
ENABLE_HARDENED_RUNTIME = YES;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "Mousecape/Mousecape-Prefix.pch";
INFOPLIST_FILE = "Mousecape/Mousecape-Info.plist";
MACOSX_DEPLOYMENT_TARGET = 10.9;
LD_RUNPATH_SEARCH_PATHS = (
"$(LD_RUNPATH_SEARCH_PATHS_$(IS_MACCATALYST))",
"@executable_path/../Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = "com.alexzielenski.${PRODUCT_NAME:rfc1034identifier}";
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
WRAPPER_EXTENSION = app;
};
name = Debug;
@@ -962,13 +1257,24 @@
FAC69F94189D603C00BC829D /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon2;
CODE_SIGN_ENTITLEMENTS = Mousecape/Mousecape.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_TEAM = 3GD8ABJ22W;
ENABLE_HARDENED_RUNTIME = YES;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "Mousecape/Mousecape-Prefix.pch";
INFOPLIST_FILE = "Mousecape/Mousecape-Info.plist";
MACOSX_DEPLOYMENT_TARGET = 10.9;
LD_RUNPATH_SEARCH_PATHS = (
"$(LD_RUNPATH_SEARCH_PATHS_$(IS_MACCATALYST))",
"@executable_path/../Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = "com.alexzielenski.${PRODUCT_NAME:rfc1034identifier}";
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
WRAPPER_EXTENSION = app;
};
name = Release;
@@ -977,6 +1283,12 @@
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_OBJC_ARC = NO;
CLANG_ENABLE_OBJC_WEAK = YES;
CODE_SIGN_IDENTITY = "Mac Developer";
CODE_SIGN_STYLE = Automatic;
DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_TEAM = 3GD8ABJ22W;
ENABLE_HARDENED_RUNTIME = YES;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "mousecloak/mousecloak-Prefix.pch";
GCC_PREPROCESSOR_DEFINITIONS = (
@@ -989,6 +1301,8 @@
"$(PROJECT_DIR)/mousecloak/vendor",
);
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
};
name = Debug;
};
@@ -996,6 +1310,12 @@
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_OBJC_ARC = NO;
CLANG_ENABLE_OBJC_WEAK = YES;
CODE_SIGN_IDENTITY = "Mac Developer";
CODE_SIGN_STYLE = Automatic;
DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_TEAM = 3GD8ABJ22W;
ENABLE_HARDENED_RUNTIME = YES;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "mousecloak/mousecloak-Prefix.pch";
HEADER_SEARCH_PATHS = (
@@ -1004,6 +1324,8 @@
"$(PROJECT_DIR)/mousecloak/vendor",
);
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
};
name = Release;
};
@@ -1013,8 +1335,14 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = NO;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_TEAM = 3GD8ABJ22W;
ENABLE_HARDENED_RUNTIME = YES;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "mousecloak/mousecloak-Prefix.pch";
@@ -1029,9 +1357,15 @@
"$(PROJECT_DIR)/mousecloak/vendor",
);
INFOPLIST_FILE = mousecloakHelper/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
);
METAL_ENABLE_DEBUG_INFO = YES;
PRODUCT_BUNDLE_IDENTIFIER = "${PRODUCT_NAME}";
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
};
name = Debug;
};
@@ -1041,9 +1375,15 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = NO;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Manual;
COMBINE_HIDPI_IMAGES = YES;
COPY_PHASE_STRIP = YES;
DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_TEAM = 3GD8ABJ22W;
ENABLE_HARDENED_RUNTIME = YES;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "mousecloak/mousecloak-Prefix.pch";
@@ -1054,9 +1394,15 @@
"$(PROJECT_DIR)/mousecloak/vendor",
);
INFOPLIST_FILE = mousecloakHelper/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
);
METAL_ENABLE_DEBUG_INFO = NO;
PRODUCT_BUNDLE_IDENTIFIER = "${PRODUCT_NAME}";
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
};
name = Release;
};
@@ -1,5 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Bucket
type = "1"
version = "2.0">
</Bucket>
@@ -1,96 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0500"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "FAC69F60189D603C00BC829D"
BuildableName = "Mousecape.app"
BlueprintName = "Mousecape"
ReferencedContainer = "container:Mousecape.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
buildConfiguration = "Debug">
<Testables>
<TestableReference
skipped = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "FAC69F81189D603C00BC829D"
BuildableName = "MousecapeTests.xctest"
BlueprintName = "MousecapeTests"
ReferencedContainer = "container:Mousecape.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "FAC69F60189D603C00BC829D"
BuildableName = "Mousecape.app"
BlueprintName = "Mousecape"
ReferencedContainer = "container:Mousecape.xcodeproj">
</BuildableReference>
</MacroExpansion>
</TestAction>
<LaunchAction
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
buildConfiguration = "Debug"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
allowLocationSimulation = "YES">
<BuildableProductRunnable>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "FAC69F60189D603C00BC829D"
BuildableName = "Mousecape.app"
BlueprintName = "Mousecape"
ReferencedContainer = "container:Mousecape.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
buildConfiguration = "Release"
debugDocumentVersioning = "YES">
<BuildableProductRunnable>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "FAC69F60189D603C00BC829D"
BuildableName = "Mousecape.app"
BlueprintName = "Mousecape"
ReferencedContainer = "container:Mousecape.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
@@ -1,86 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0500"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "FAC69FAC189D608900BC829D"
BuildableName = "mousecloak"
BlueprintName = "mousecloak"
ReferencedContainer = "container:Mousecape.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
buildConfiguration = "Debug">
<Testables>
</Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "FAC69FAC189D608900BC829D"
BuildableName = "mousecloak"
BlueprintName = "mousecloak"
ReferencedContainer = "container:Mousecape.xcodeproj">
</BuildableReference>
</MacroExpansion>
</TestAction>
<LaunchAction
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
buildConfiguration = "Debug"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
allowLocationSimulation = "YES">
<BuildableProductRunnable>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "FAC69FAC189D608900BC829D"
BuildableName = "mousecloak"
BlueprintName = "mousecloak"
ReferencedContainer = "container:Mousecape.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
buildConfiguration = "Release"
debugDocumentVersioning = "YES">
<BuildableProductRunnable>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "FAC69FAC189D608900BC829D"
BuildableName = "mousecloak"
BlueprintName = "mousecloak"
ReferencedContainer = "container:Mousecape.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
@@ -1,86 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0600"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "FAE5D54819526F82007620DE"
BuildableName = "com.alexzielenski.mousecloakhelper.app"
BlueprintName = "com.alexzielenski.mousecloakhelper"
ReferencedContainer = "container:Mousecape.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
buildConfiguration = "Debug">
<Testables>
</Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "FAE5D54819526F82007620DE"
BuildableName = "com.alexzielenski.mousecloakhelper.app"
BlueprintName = "com.alexzielenski.mousecloakhelper"
ReferencedContainer = "container:Mousecape.xcodeproj">
</BuildableReference>
</MacroExpansion>
</TestAction>
<LaunchAction
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
buildConfiguration = "Debug"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
allowLocationSimulation = "YES">
<BuildableProductRunnable>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "FAE5D54819526F82007620DE"
BuildableName = "com.alexzielenski.mousecloakhelper.app"
BlueprintName = "com.alexzielenski.mousecloakhelper"
ReferencedContainer = "container:Mousecape.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
buildConfiguration = "Release"
debugDocumentVersioning = "YES">
<BuildableProductRunnable>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "FAE5D54819526F82007620DE"
BuildableName = "com.alexzielenski.mousecloakhelper.app"
BlueprintName = "com.alexzielenski.mousecloakhelper"
ReferencedContainer = "container:Mousecape.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
@@ -1,57 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>SchemeUserState</key>
<dict>
<key>Mousecape.xcscheme</key>
<dict>
<key>orderHint</key>
<integer>0</integer>
</dict>
<key>mousecloak.xcscheme</key>
<dict>
<key>orderHint</key>
<integer>1</integer>
</dict>
<key>mousecloakHelper.xcscheme</key>
<dict>
<key>orderHint</key>
<integer>2</integer>
</dict>
</dict>
<key>SuppressBuildableAutocreation</key>
<dict>
<key>FAC69F60189D603C00BC829D</key>
<dict>
<key>primary</key>
<true/>
</dict>
<key>FAC69F81189D603C00BC829D</key>
<dict>
<key>primary</key>
<true/>
</dict>
<key>FAC69F9B189D605300BC829D</key>
<dict>
<key>primary</key>
<true/>
</dict>
<key>FAC69FAC189D608900BC829D</key>
<dict>
<key>primary</key>
<true/>
</dict>
<key>FAE5D54819526F82007620DE</key>
<dict>
<key>primary</key>
<true/>
</dict>
<key>FAE5D55A19526F82007620DE</key>
<dict>
<key>primary</key>
<true/>
</dict>
</dict>
</dict>
</plist>
+117 -101
View File
@@ -1,7 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="6154.21" systemVersion="13D65" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="16096" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="6154.21"/>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="16096"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="MCEditWindowController">
@@ -14,38 +16,38 @@
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application"/>
<window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" releasedWhenClosed="NO" animationBehavior="default" id="1" customClass="NSPanel">
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="1" customClass="NSPanel">
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
<rect key="contentRect" x="196" y="240" width="525" height="297"/>
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1418"/>
<value key="minSize" type="size" width="500" height="310"/>
<rect key="contentRect" x="196" y="240" width="525" height="296"/>
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
<value key="minSize" type="size" width="500" height="296"/>
<view key="contentView" id="2">
<rect key="frame" x="0.0" y="0.0" width="525" height="297"/>
<rect key="frame" x="0.0" y="0.0" width="525" height="296"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<splitView canDrawConcurrently="YES" dividerStyle="thin" vertical="YES" translatesAutoresizingMaskIntoConstraints="NO" id="3cj-R9-WKK">
<rect key="frame" x="0.0" y="0.0" width="525" height="297"/>
<rect key="frame" x="0.0" y="0.0" width="525" height="296"/>
<subviews>
<customView id="IHY-vi-Wpr">
<rect key="frame" x="0.0" y="0.0" width="135" height="297"/>
<autoresizingMask key="autoresizingMask"/>
<rect key="frame" x="0.0" y="0.0" width="135" height="296"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<scrollView canDrawConcurrently="YES" borderType="none" autohidesScrollers="YES" horizontalLineScroll="34" horizontalPageScroll="10" verticalLineScroll="34" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2UQ-R4-qJn">
<rect key="frame" x="0.0" y="22" width="135" height="275"/>
<rect key="frame" x="0.0" y="22" width="135" height="274"/>
<clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="ame-2S-JV7">
<rect key="frame" x="0.0" y="0.0" width="135" height="275"/>
<rect key="frame" x="0.0" y="0.0" width="135" height="274"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" columnReordering="NO" columnResizing="NO" multipleSelection="NO" emptySelection="NO" autosaveColumns="NO" typeSelect="NO" rowHeight="32" rowSizeStyle="automatic" viewBased="YES" id="MU4-Yh-0PJ">
<autoresizingMask key="autoresizingMask"/>
<rect key="frame" x="0.0" y="0.0" width="135" height="274"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<size key="intercellSpacing" width="3" height="2"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
<tableColumns>
<tableColumn editable="NO" width="132" minWidth="40" maxWidth="1000" id="B1d-Yp-OOR">
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" white="0.33333298560000002" alpha="1" colorSpace="calibratedWhite"/>
</tableHeaderCell>
@@ -61,7 +63,7 @@
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="tn7-kB-Fvu">
<rect key="frame" x="6" y="8" width="120" height="17"/>
<rect key="frame" x="6" y="8" width="120" height="16"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="8we-kW-bNk">
<font key="font" metaFont="systemBold"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -91,7 +93,7 @@
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="W6i-Uv-3TI">
<rect key="frame" x="6" y="0.0" width="120" height="17"/>
<rect key="frame" x="6" y="1" width="120" height="16"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="8bB-Ws-20v">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -124,10 +126,10 @@
</subviews>
<nil key="backgroundColor"/>
</clipView>
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="ARR-bd-5zK">
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="ARR-bd-5zK">
<autoresizingMask key="autoresizingMask"/>
</scroller>
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="NO" id="3rZ-7d-Mro">
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="3rZ-7d-Mro">
<autoresizingMask key="autoresizingMask"/>
</scroller>
</scrollView>
@@ -146,10 +148,10 @@
</connections>
</button>
<button translatesAutoresizingMaskIntoConstraints="NO" id="w4h-lB-jLi">
<rect key="frame" x="22" y="0.0" width="22" height="22"/>
<rect key="frame" x="22" y="0.0" width="22" height="20"/>
<constraints>
<constraint firstAttribute="width" constant="22" id="L21-Ci-myo"/>
<constraint firstAttribute="height" constant="22" id="M80-94-gpJ"/>
<constraint firstAttribute="height" constant="20" id="M80-94-gpJ"/>
</constraints>
<buttonCell key="cell" type="smallSquare" bezelStyle="smallSquare" image="NSRemoveTemplate" imagePosition="only" alignment="center" imageScaling="proportionallyDown" inset="2" id="HjH-hq-TxT">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
@@ -159,14 +161,11 @@
<action selector="removeAction:" target="oUs-Nv-PHw" id="JjR-lV-zwz"/>
</connections>
</button>
<box verticalHuggingPriority="750" title="Box" boxType="separator" titlePosition="noTitle" translatesAutoresizingMaskIntoConstraints="NO" id="UJO-Hw-fRK">
<box verticalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="UJO-Hw-fRK">
<rect key="frame" x="0.0" y="19" width="135" height="5"/>
<constraints>
<constraint firstAttribute="height" constant="1" id="NYz-xn-F0g"/>
</constraints>
<color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/>
<color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<font key="titleFont" metaFont="system"/>
</box>
</subviews>
<constraints>
@@ -181,13 +180,13 @@
<constraint firstItem="w4h-lB-jLi" firstAttribute="leading" secondItem="0ps-WH-ASN" secondAttribute="trailing" id="oqH-vB-hO8"/>
<constraint firstItem="0ps-WH-ASN" firstAttribute="bottom" secondItem="w4h-lB-jLi" secondAttribute="bottom" id="sWe-gf-GX0"/>
<constraint firstItem="2UQ-R4-qJn" firstAttribute="leading" secondItem="IHY-vi-Wpr" secondAttribute="leading" id="thB-tX-fKx"/>
<constraint firstItem="0ps-WH-ASN" firstAttribute="height" secondItem="w4h-lB-jLi" secondAttribute="height" id="uJj-nv-0fc"/>
<constraint firstItem="0ps-WH-ASN" firstAttribute="height" secondItem="w4h-lB-jLi" secondAttribute="height" constant="2" id="uJj-nv-0fc"/>
<constraint firstAttribute="bottom" secondItem="2UQ-R4-qJn" secondAttribute="bottom" constant="22" id="vLX-hs-yVP"/>
</constraints>
</customView>
<customView fixedFrame="YES" id="fzz-Li-KC6">
<rect key="frame" x="136" y="0.0" width="389" height="297"/>
<autoresizingMask key="autoresizingMask"/>
<rect key="frame" x="136" y="0.0" width="389" height="296"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
</customView>
</subviews>
<holdingPriorities>
@@ -210,7 +209,7 @@
<binding destination="oUs-Nv-PHw" name="title" keyPath="cursorLibrary.name" id="RKE-nQ-CzI"/>
<outlet property="delegate" destination="-2" id="4"/>
</connections>
<point key="canvasLocation" x="399.5" y="275.5"/>
<point key="canvasLocation" x="139.5" y="555.5"/>
</window>
<viewController title="List" id="oUs-Nv-PHw" customClass="MCEditListController">
<connections>
@@ -237,43 +236,43 @@
<rect key="frame" x="0.0" y="0.0" width="504" height="321"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="X2i-rg-HDg">
<rect key="frame" x="18" y="259" width="62" height="17"/>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="X2i-rg-HDg">
<rect key="frame" x="18" y="261" width="62" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Author:" id="Oyi-AW-60U">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="yyn-IO-TkO">
<rect key="frame" x="18" y="209" width="62" height="17"/>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="yyn-IO-TkO">
<rect key="frame" x="18" y="213" width="62" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Version:" id="98i-gH-tf4">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ELX-ej-rTb">
<rect key="frame" x="18" y="234" width="62" height="17"/>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ELX-ej-rTb">
<rect key="frame" x="18" y="237" width="62" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Identifier:" id="Xzj-Uq-4bW">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="CTE-6h-rbf">
<rect key="frame" x="18" y="284" width="62" height="17"/>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="CTE-6h-rbf">
<rect key="frame" x="18" y="285" width="62" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Name:" id="oMS-dL-nZj">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="bim-1a-xuh">
<rect key="frame" x="86" y="281" width="398" height="22"/>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="bim-1a-xuh">
<rect key="frame" x="86" y="282" width="398" height="21"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="07X-ce-vmv">
<font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
@@ -281,11 +280,11 @@
<outlet property="nextKeyView" destination="xy3-2B-C0h" id="kJW-OZ-1NO"/>
</connections>
</textField>
<textField verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="xy3-2B-C0h">
<rect key="frame" x="86" y="256" width="398" height="22"/>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="xy3-2B-C0h">
<rect key="frame" x="86" y="258" width="398" height="21"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="fmY-Bj-OnI">
<font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
@@ -293,11 +292,11 @@
<outlet property="nextKeyView" destination="XYx-UL-WbM" id="74w-oc-ff2"/>
</connections>
</textField>
<textField verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="XYx-UL-WbM">
<rect key="frame" x="86" y="231" width="398" height="22"/>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="XYx-UL-WbM">
<rect key="frame" x="86" y="234" width="398" height="21"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="sjK-hK-kfo">
<font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
@@ -309,11 +308,11 @@
<outlet property="nextKeyView" destination="car-it-RsL" id="uaw-jj-8AW"/>
</connections>
</textField>
<textField verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="car-it-RsL">
<rect key="frame" x="86" y="206" width="398" height="22"/>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="car-it-RsL">
<rect key="frame" x="86" y="210" width="398" height="21"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="qW0-CC-89l">
<font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
@@ -321,16 +320,16 @@
<outlet property="nextKeyView" destination="MJr-Jz-5Cq" id="sfZ-oa-g3c"/>
</connections>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="i5v-yD-weq">
<rect key="frame" x="18" y="184" width="62" height="17"/>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="i5v-yD-weq">
<rect key="frame" x="18" y="189" width="62" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Retina:" id="HFS-GR-guB">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="MJr-Jz-5Cq">
<rect key="frame" x="84" y="182" width="18" height="18"/>
<button translatesAutoresizingMaskIntoConstraints="NO" id="MJr-Jz-5Cq">
<rect key="frame" x="84" y="186" width="18" height="18"/>
<buttonCell key="cell" type="check" bezelStyle="regularSquare" imagePosition="overlaps" state="on" inset="2" id="Ma9-Ke-hYa">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
@@ -345,6 +344,7 @@
<constraint firstItem="car-it-RsL" firstAttribute="leading" secondItem="bim-1a-xuh" secondAttribute="leading" id="0xF-zq-ScD"/>
<constraint firstAttribute="trailing" secondItem="XYx-UL-WbM" secondAttribute="trailing" constant="20" id="2FH-UV-gN8"/>
<constraint firstItem="car-it-RsL" firstAttribute="width" secondItem="xy3-2B-C0h" secondAttribute="width" id="5Ga-DV-3Po"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="MJr-Jz-5Cq" secondAttribute="trailing" constant="20" symbolic="YES" id="6NT-lK-p2E"/>
<constraint firstItem="car-it-RsL" firstAttribute="width" secondItem="XYx-UL-WbM" secondAttribute="width" id="78w-Rp-5Kn"/>
<constraint firstItem="bim-1a-xuh" firstAttribute="top" secondItem="WMR-Vn-IHF" secondAttribute="top" constant="18" id="7md-u2-mQL"/>
<constraint firstAttribute="trailing" secondItem="car-it-RsL" secondAttribute="trailing" constant="20" id="8og-5G-f3t"/>
@@ -376,6 +376,7 @@
<constraint firstItem="car-it-RsL" firstAttribute="top" secondItem="XYx-UL-WbM" secondAttribute="bottom" constant="3" id="ol9-vF-CGP"/>
<constraint firstItem="MJr-Jz-5Cq" firstAttribute="top" secondItem="car-it-RsL" secondAttribute="bottom" constant="8" id="rTY-Fr-65b"/>
<constraint firstItem="CTE-6h-rbf" firstAttribute="width" secondItem="yyn-IO-TkO" secondAttribute="width" id="sb9-dg-qOh"/>
<constraint firstItem="i5v-yD-weq" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="WMR-Vn-IHF" secondAttribute="leading" constant="20" symbolic="YES" id="wYl-BB-jBi"/>
<constraint firstItem="car-it-RsL" firstAttribute="trailing" secondItem="xy3-2B-C0h" secondAttribute="trailing" id="wpN-fF-mXb"/>
<constraint firstItem="car-it-RsL" firstAttribute="trailing" secondItem="bim-1a-xuh" secondAttribute="trailing" id="wtJ-Bc-d9Z"/>
<constraint firstItem="car-it-RsL" firstAttribute="leading" secondItem="XYx-UL-WbM" secondAttribute="leading" id="yFH-4V-CiS"/>
@@ -383,48 +384,49 @@
<connections>
<outlet property="nextKeyView" destination="bim-1a-xuh" id="YxQ-sZ-TFh"/>
</connections>
<point key="canvasLocation" x="139" y="157"/>
</customView>
<customView id="o0X-1i-ZgL" userLabel="Detail">
<rect key="frame" x="0.0" y="0.0" width="509" height="321"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Dm8-Mj-s5f">
<rect key="frame" x="18" y="284" width="103" height="17"/>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Dm8-Mj-s5f">
<rect key="frame" x="18" y="285" width="102" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Type:" id="dy9-JM-4d7">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="D5V-CV-BuE">
<rect key="frame" x="18" y="259" width="103" height="17"/>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="D5V-CV-BuE">
<rect key="frame" x="18" y="261" width="102" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Frames:" id="G4c-OI-avP">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="zEj-zS-uzh">
<rect key="frame" x="18" y="234" width="103" height="17"/>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="zEj-zS-uzh">
<rect key="frame" x="18" y="237" width="102" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Frame Duration:" id="5Wb-pc-8jV">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="aso-MD-Alm">
<rect key="frame" x="18" y="209" width="103" height="17"/>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="aso-MD-Alm">
<rect key="frame" x="18" y="213" width="102" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Hot Spot:" id="dcq-3r-2DB">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<popUpButton verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="yz7-y5-TxE">
<rect key="frame" x="127" y="277" width="362" height="25"/>
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="yz7-y5-TxE">
<rect key="frame" x="126" y="278" width="363" height="23"/>
<popUpButtonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="gKl-8J-X0X">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<font key="font" metaFont="system"/>
<menu key="menu" title="OtherViews" id="j3S-Me-3x5"/>
</popUpButtonCell>
<connections>
@@ -440,84 +442,96 @@
<outlet property="nextKeyView" destination="rms-zC-s1M" id="yfu-3L-R4w"/>
</connections>
</popUpButton>
<textField verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="rms-zC-s1M">
<rect key="frame" x="127" y="254" width="362" height="22"/>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="rms-zC-s1M">
<rect key="frame" x="126" y="256" width="363" height="21"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="1" drawsBackground="YES" id="tKY-dX-ibT">
<numberFormatter key="formatter" formatterBehavior="default10_4" positiveFormat="#" negativeFormat="#" usesGroupingSeparator="NO" paddingCharacter="*" groupingSize="0" minimumIntegerDigits="0" maximumIntegerDigits="42" decimalSeparator="." groupingSeparator="," currencyDecimalSeparator="." plusSign="+" minusSign="-" notANumberSymbol="NaN" perMillSymbol="‰" percentSymbol="%" exponentSymbol="E" positivePrefix="" positiveSuffix="" negativePrefix="-" negativeSuffix="" id="JEt-qW-Py5">
<real key="minimum" value="1"/>
<real key="maximum" value="24"/>
</numberFormatter>
<font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="tMj-cQ-hK0" name="value" keyPath="cursor.frameCount" id="E0q-ga-ftR"/>
<binding destination="tMj-cQ-hK0" name="value" keyPath="cursor.frameCount" id="05V-RH-y2o">
<dictionary key="options">
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
</dictionary>
</binding>
<outlet property="nextKeyView" destination="VbK-WJ-M0L" id="y5I-kM-hNq"/>
</connections>
</textField>
<textField verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="VbK-WJ-M0L">
<rect key="frame" x="127" y="229" width="362" height="22"/>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="VbK-WJ-M0L">
<rect key="frame" x="126" y="232" width="363" height="21"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="0.0" drawsBackground="YES" id="pqX-MB-QME">
<numberFormatter key="formatter" formatterBehavior="custom10_4" positiveFormat="#.################" negativeFormat="#.################" usesGroupingSeparator="NO" paddingCharacter="*" groupingSize="0" minimumIntegerDigits="0" maximumIntegerDigits="42" maximumFractionDigits="16" decimalSeparator="." groupingSeparator="," currencyDecimalSeparator="." plusSign="+" minusSign="-" notANumberSymbol="NaN" perMillSymbol="‰" percentSymbol="%" exponentSymbol="E" positivePrefix="" positiveSuffix="" negativePrefix="-" negativeSuffix="" id="QTS-o7-aVO">
<real key="minimum" value="0.0"/>
</numberFormatter>
<font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="tMj-cQ-hK0" name="value" keyPath="cursor.frameDuration" id="I6z-BZ-xhp"/>
<binding destination="tMj-cQ-hK0" name="value" keyPath="cursor.frameDuration" id="pBC-y0-ehq">
<dictionary key="options">
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
</dictionary>
</binding>
<outlet property="nextKeyView" destination="Qcr-83-Tz0" id="gYj-Hj-Txi"/>
</connections>
</textField>
<textField verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Qcr-83-Tz0">
<rect key="frame" x="127" y="204" width="362" height="22"/>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Qcr-83-Tz0">
<rect key="frame" x="126" y="208" width="363" height="21"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="{0,0}" drawsBackground="YES" id="BWu-hw-sDX">
<customFormatter key="formatter" id="hAv-1z-0Jg" customClass="MCPointFormatter"/>
<font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="tMj-cQ-hK0" name="value" keyPath="cursor.hotSpot" id="aFb-fI-aHw"/>
<binding destination="tMj-cQ-hK0" name="value" keyPath="cursor.hotSpot" id="7E7-XS-E4D">
<dictionary key="options">
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
</dictionary>
</binding>
<outlet property="nextKeyView" destination="wdB-yr-r6Y" id="Smn-hK-iP2"/>
</connections>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="75v-aw-FbU">
<rect key="frame" x="140" y="98" width="23" height="17"/>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="75v-aw-FbU">
<rect key="frame" x="140" y="104" width="21" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="1x" id="FZ3-qB-kDI">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Hoi-Pr-5wz">
<rect key="frame" x="196" y="98" width="23" height="17"/>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Hoi-Pr-5wz">
<rect key="frame" x="195" y="104" width="23" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="2x" id="WI8-sV-4D6">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="CWo-oD-OZX">
<rect key="frame" x="253" y="98" width="23" height="17"/>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="CWo-oD-OZX">
<rect key="frame" x="251" y="104" width="23" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="5x" id="4fS-Q1-prn">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Ryz-mP-wNx">
<rect key="frame" x="306" y="98" width="31" height="17"/>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Ryz-mP-wNx">
<rect key="frame" x="304" y="104" width="29" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="10x" id="8fp-Ws-ruA">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<customView misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ggE-Pd-aWo" customClass="MMAnimatingImageView">
<rect key="frame" x="183" y="123" width="49" height="48"/>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="ggE-Pd-aWo" customClass="MMAnimatingImageView">
<rect key="frame" x="182" y="128" width="48" height="48"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="shouldShowHotSpot" value="YES"/>
<userDefinedRuntimeAttribute type="boolean" keyPath="shouldAllowDragging" value="YES"/>
@@ -526,8 +540,8 @@
<outlet property="delegate" destination="tMj-cQ-hK0" id="Q6h-vm-kaw"/>
</connections>
</customView>
<customView misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="G3t-wd-E5Y" customClass="MMAnimatingImageView">
<rect key="frame" x="240" y="123" width="49" height="48"/>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="G3t-wd-E5Y" customClass="MMAnimatingImageView">
<rect key="frame" x="238" y="128" width="48" height="48"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="shouldShowHotSpot" value="YES"/>
<userDefinedRuntimeAttribute type="boolean" keyPath="shouldAllowDragging" value="YES"/>
@@ -536,8 +550,8 @@
<outlet property="delegate" destination="tMj-cQ-hK0" id="VPL-GA-4fS"/>
</connections>
</customView>
<customView misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="4hN-Nm-B7Z" customClass="MMAnimatingImageView">
<rect key="frame" x="297" y="123" width="49" height="48"/>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="4hN-Nm-B7Z" customClass="MMAnimatingImageView">
<rect key="frame" x="294" y="128" width="48" height="48"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="shouldShowHotSpot" value="YES"/>
<userDefinedRuntimeAttribute type="boolean" keyPath="shouldAllowDragging" value="YES"/>
@@ -546,20 +560,20 @@
<outlet property="delegate" destination="tMj-cQ-hK0" id="fp1-eX-JUN"/>
</connections>
</customView>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="OAt-gN-EX5">
<rect key="frame" x="18" y="184" width="103" height="17"/>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="OAt-gN-EX5">
<rect key="frame" x="18" y="189" width="102" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Size:" id="FrC-7p-0Bq">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="wdB-yr-r6Y">
<rect key="frame" x="127" y="179" width="362" height="22"/>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="wdB-yr-r6Y">
<rect key="frame" x="126" y="184" width="363" height="21"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="{0,0}" drawsBackground="YES" id="OmM-g8-Kyd">
<customFormatter key="formatter" id="wEf-m3-oYM" customClass="MCSizeFormatter"/>
<font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
@@ -567,8 +581,8 @@
<outlet property="nextKeyView" destination="yz7-y5-TxE" id="9Cb-FK-ium"/>
</connections>
</textField>
<customView misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="j7v-U4-eMe" customClass="MMAnimatingImageView">
<rect key="frame" x="127" y="123" width="48" height="48"/>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="j7v-U4-eMe" customClass="MMAnimatingImageView">
<rect key="frame" x="126" y="128" width="48" height="48"/>
<constraints>
<constraint firstAttribute="width" constant="48" id="MeC-cf-abQ"/>
<constraint firstAttribute="height" constant="48" id="VAO-nl-ZmQ"/>
@@ -640,6 +654,7 @@
<connections>
<outlet property="nextKeyView" destination="yz7-y5-TxE" id="WHy-Vl-LGY"/>
</connections>
<point key="canvasLocation" x="715" y="459"/>
</customView>
<menu id="vy8-Pj-2Jg">
<items>
@@ -672,10 +687,11 @@
</connections>
</menuItem>
</items>
<point key="canvasLocation" x="139" y="286"/>
</menu>
</objects>
<resources>
<image name="NSAddTemplate" width="8" height="8"/>
<image name="NSRemoveTemplate" width="8" height="8"/>
<image name="NSAddTemplate" width="11" height="11"/>
<image name="NSRemoveTemplate" width="11" height="11"/>
</resources>
</document>
+85 -36
View File
@@ -1,42 +1,46 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="6154.21" systemVersion="13D65" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="16096" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="6154.21"/>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="16096"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="MCLibraryWindowController">
<connections>
<outlet property="appliedAccessory" destination="3Ui-b0-Yod" id="2Ik-Bo-djE"/>
<outlet property="libraryViewController" destination="zL4-Ay-t4Q" id="DE1-rb-MWQ"/>
<outlet property="progressBar" destination="F5l-qD-fvC" id="VNK-If-Tfi"/>
<outlet property="progressField" destination="Ui8-vk-7P8" id="Esy-lZ-9RN"/>
<outlet property="window" destination="1" id="3"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application"/>
<window title="Mousecape" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" frameAutosaveName="LibraryWindow" animationBehavior="default" id="1">
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<window title="Mousecape" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" frameAutosaveName="LibraryWindow" animationBehavior="default" id="1">
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
<rect key="contentRect" x="196" y="240" width="711" height="311"/>
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1418"/>
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
<value key="minSize" type="size" width="502" height="310"/>
<view key="contentView" id="2">
<rect key="frame" x="0.0" y="0.0" width="711" height="311"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<scrollView canDrawConcurrently="YES" borderType="none" autohidesScrollers="YES" horizontalLineScroll="84" horizontalPageScroll="10" verticalLineScroll="84" verticalPageScroll="10" translatesAutoresizingMaskIntoConstraints="NO" id="2Io-MC-n6O" customClass="BTRScrollView">
<scrollView wantsLayer="YES" canDrawConcurrently="YES" borderType="none" autohidesScrollers="YES" horizontalLineScroll="84" horizontalPageScroll="10" verticalLineScroll="84" verticalPageScroll="10" translatesAutoresizingMaskIntoConstraints="NO" id="2Io-MC-n6O" customClass="BTRScrollView">
<rect key="frame" x="0.0" y="0.0" width="711" height="311"/>
<clipView key="contentView" copiesOnScroll="NO" id="VhH-tn-4Sf" customClass="BTRClipView">
<clipView key="contentView" wantsLayer="YES" copiesOnScroll="NO" id="VhH-tn-4Sf" customClass="BTRClipView">
<rect key="frame" x="0.0" y="0.0" width="711" height="311"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" alternatingRowBackgroundColors="YES" columnReordering="NO" columnResizing="NO" multipleSelection="NO" emptySelection="NO" autosaveColumns="NO" typeSelect="NO" rowHeight="72" rowSizeStyle="automatic" viewBased="YES" id="dPn-85-uPK">
<autoresizingMask key="autoresizingMask"/>
<rect key="frame" x="0.0" y="0.0" width="711" height="311"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<size key="intercellSpacing" width="3" height="12"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
<tableColumns>
<tableColumn width="708" minWidth="40" maxWidth="9999" id="CBK-sD-upn">
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" white="0.33333298560000002" alpha="1" colorSpace="calibratedWhite"/>
</tableHeaderCell>
@@ -51,8 +55,8 @@
<rect key="frame" x="1" y="6" width="708" height="72"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Hfe-RO-hVE">
<rect key="frame" x="18" y="55" width="97" height="17"/>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="Hfe-RO-hVE">
<rect key="frame" x="18" y="56" width="96" height="16"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="0kt-g0-cQb">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@@ -62,17 +66,6 @@
<binding destination="syZ-Eq-Lt2" name="value" keyPath="objectValue.name" id="YHc-x9-wXk"/>
</connections>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="bEa-BS-ghQ">
<rect key="frame" x="115" y="55" width="48" height="14"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Subtitle" id="NXa-Ze-OX2">
<font key="font" metaFont="smallSystemBold"/>
<color key="textColor" name="headerColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="syZ-Eq-Lt2" name="value" keyPath="objectValue.author" id="D3x-S0-YIW"/>
</connections>
</textField>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="jdV-zx-iTs">
<rect key="frame" x="634" y="52" width="16" height="16"/>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="applied" id="bwh-k2-aAS"/>
@@ -88,9 +81,9 @@
</binding>
</connections>
</imageView>
<scrollView canDrawConcurrently="YES" autohidesScrollers="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasVerticalScroller="NO" verticalScrollElasticity="none" translatesAutoresizingMaskIntoConstraints="NO" id="odP-lr-hJH" customClass="DTScrollView">
<rect key="frame" x="20" y="3" width="668" height="44"/>
<clipView key="contentView" copiesOnScroll="NO" id="pc3-Zb-Oqk">
<scrollView wantsLayer="YES" canDrawConcurrently="YES" autohidesScrollers="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasVerticalScroller="NO" verticalScrollElasticity="none" translatesAutoresizingMaskIntoConstraints="NO" id="odP-lr-hJH" customClass="DTScrollView">
<rect key="frame" x="20" y="4" width="668" height="44"/>
<clipView key="contentView" wantsLayer="YES" copiesOnScroll="NO" id="pc3-Zb-Oqk" customClass="RBLClipView">
<rect key="frame" x="1" y="1" width="666" height="42"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
@@ -104,28 +97,51 @@
<constraints>
<constraint firstAttribute="height" constant="44" id="KzC-9x-FvO"/>
</constraints>
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="mwj-HT-8PV">
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="mwj-HT-8PV">
<rect key="frame" x="1" y="144" width="233" height="15"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="cCy-Hj-b5W">
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="cCy-Hj-b5W">
<rect key="frame" x="-100" y="-100" width="15" height="143"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
</scrollView>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="OUy-kz-p7o">
<rect key="frame" x="118" y="58" width="15" height="11"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="by" id="jWt-I0-CSL">
<font key="font" metaFont="label" size="9"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="bEa-BS-ghQ">
<rect key="frame" x="133" y="56" width="49" height="14"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Subtitle" id="NXa-Ze-OX2">
<font key="font" metaFont="smallSystemBold"/>
<color key="textColor" name="headerColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="syZ-Eq-Lt2" name="value" keyPath="objectValue.author" id="D3x-S0-YIW"/>
</connections>
</textField>
</subviews>
<constraints>
<constraint firstItem="jdV-zx-iTs" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="bEa-BS-ghQ" secondAttribute="trailing" constant="8" symbolic="YES" id="26b-X6-0Yk"/>
<constraint firstItem="Hfe-RO-hVE" firstAttribute="leading" secondItem="syZ-Eq-Lt2" secondAttribute="leading" constant="20" symbolic="YES" id="OHp-3c-ujO"/>
<constraint firstItem="QMa-EX-Son" firstAttribute="leading" secondItem="jdV-zx-iTs" secondAttribute="trailing" constant="8" symbolic="YES" id="QfE-A7-Oc8"/>
<constraint firstItem="bEa-BS-ghQ" firstAttribute="leading" secondItem="Hfe-RO-hVE" secondAttribute="trailing" constant="4" id="WVM-Wd-XXI"/>
<constraint firstItem="jdV-zx-iTs" firstAttribute="centerY" secondItem="QMa-EX-Son" secondAttribute="centerY" id="YLI-IS-v1N"/>
<constraint firstItem="bEa-BS-ghQ" firstAttribute="firstBaseline" secondItem="OUy-kz-p7o" secondAttribute="firstBaseline" id="Yif-mq-VLO"/>
<constraint firstItem="bEa-BS-ghQ" firstAttribute="baseline" secondItem="Hfe-RO-hVE" secondAttribute="baseline" id="bCc-gQ-FVG"/>
<constraint firstItem="bEa-BS-ghQ" firstAttribute="leading" secondItem="OUy-kz-p7o" secondAttribute="trailing" constant="4" id="eYj-8T-6Xr"/>
<constraint firstItem="OUy-kz-p7o" firstAttribute="leading" secondItem="Hfe-RO-hVE" secondAttribute="trailing" constant="8" id="eeG-7o-lDi"/>
<constraint firstAttribute="trailing" secondItem="odP-lr-hJH" secondAttribute="trailing" constant="20" symbolic="YES" id="fnI-G1-FZh"/>
<constraint firstItem="odP-lr-hJH" firstAttribute="leading" secondItem="syZ-Eq-Lt2" secondAttribute="leading" constant="20" symbolic="YES" id="joq-b0-pEr"/>
<constraint firstAttribute="trailing" secondItem="QMa-EX-Son" secondAttribute="trailing" constant="20" symbolic="YES" id="oL8-Zy-vvE"/>
<constraint firstItem="QMa-EX-Son" firstAttribute="top" secondItem="syZ-Eq-Lt2" secondAttribute="top" constant="3" id="oPR-SR-Gh8"/>
<constraint firstItem="odP-lr-hJH" firstAttribute="top" secondItem="Hfe-RO-hVE" secondAttribute="bottom" constant="8" symbolic="YES" id="r5F-n8-O3W"/>
<constraint firstItem="Hfe-RO-hVE" firstAttribute="top" secondItem="syZ-Eq-Lt2" secondAttribute="top" id="wWd-7q-n1a"/>
<constraint firstItem="OUy-kz-p7o" firstAttribute="firstBaseline" secondItem="Hfe-RO-hVE" secondAttribute="firstBaseline" id="yX1-CS-CfT"/>
</constraints>
<connections>
<outlet property="appliedImageView" destination="jdV-zx-iTs" id="4DM-pV-X1T"/>
@@ -146,12 +162,11 @@
</connections>
</tableView>
</subviews>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
</clipView>
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="uK0-YP-77b">
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="uK0-YP-77b">
<autoresizingMask key="autoresizingMask"/>
</scroller>
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="NO" id="q1a-eU-6AV">
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="q1a-eU-6AV">
<autoresizingMask key="autoresizingMask"/>
</scroller>
</scrollView>
@@ -166,7 +181,7 @@
<connections>
<outlet property="delegate" destination="-2" id="4"/>
</connections>
<point key="canvasLocation" x="591.5" y="159.5"/>
<point key="canvasLocation" x="-39" y="187"/>
</window>
<viewController title="Library" id="zL4-Ay-t4Q" customClass="MCLibraryViewController">
<connections>
@@ -211,15 +226,16 @@ CA
</connections>
</menuItem>
</items>
<point key="canvasLocation" x="9" y="-116"/>
</menu>
<customView id="3Ui-b0-Yod" userLabel="Accessory">
<rect key="frame" x="0.0" y="0.0" width="251" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="cSP-XN-7we">
<rect key="frame" x="-2" y="3" width="245" height="14"/>
<rect key="frame" x="-2" y="4" width="245" height="14"/>
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" alignment="right" title="Applied Cursor: None" usesSingleLineMode="YES" id="vZ3-2R-psO">
<font key="font" metaFont="smallSystem"/>
<font key="font" metaFont="message" size="11"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
<userDefinedRuntimeAttributes>
@@ -242,11 +258,44 @@ CA
<constraint firstItem="cSP-XN-7we" firstAttribute="centerY" secondItem="3Ui-b0-Yod" secondAttribute="centerY" id="U7A-WI-2JG"/>
<constraint firstItem="cSP-XN-7we" firstAttribute="leading" secondItem="3Ui-b0-Yod" secondAttribute="leading" id="eoA-bD-pz5"/>
</constraints>
<point key="canvasLocation" x="499" y="-594"/>
</customView>
<view id="smV-Cs-4aH">
<rect key="frame" x="0.0" y="0.0" width="100" height="100"/>
<autoresizingMask key="autoresizingMask"/>
<point key="canvasLocation" x="499" y="-311"/>
</view>
<window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" hidesOnDeactivate="YES" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="DeD-dq-yBF" customClass="NSPanel">
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES" utility="YES"/>
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
<rect key="contentRect" x="272" y="172" width="452" height="58"/>
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
<view key="contentView" id="me1-hA-pTT">
<rect key="frame" x="0.0" y="0.0" width="452" height="58"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<progressIndicator maxValue="100" indeterminate="YES" style="bar" translatesAutoresizingMaskIntoConstraints="NO" id="F5l-qD-fvC">
<rect key="frame" x="15" y="19" width="348" height="20"/>
</progressIndicator>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Ui8-vk-7P8">
<rect key="frame" x="369" y="22" width="70" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="000 of 129" id="sq0-HM-mp6">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</subviews>
<constraints>
<constraint firstItem="F5l-qD-fvC" firstAttribute="leading" secondItem="me1-hA-pTT" secondAttribute="leading" constant="15" id="1rr-uN-NwK"/>
<constraint firstItem="F5l-qD-fvC" firstAttribute="centerY" secondItem="Ui8-vk-7P8" secondAttribute="centerY" constant="0.5" id="FgD-90-fQk"/>
<constraint firstAttribute="trailing" secondItem="Ui8-vk-7P8" secondAttribute="trailing" constant="15" id="OgP-qZ-5ss"/>
<constraint firstItem="Ui8-vk-7P8" firstAttribute="leading" secondItem="F5l-qD-fvC" secondAttribute="trailing" constant="8" id="Q6O-6O-84O"/>
<constraint firstAttribute="centerY" secondItem="F5l-qD-fvC" secondAttribute="centerY" id="yZk-CB-OJj"/>
</constraints>
</view>
<point key="canvasLocation" x="499" y="-470"/>
</window>
</objects>
<resources>
<image name="HDTemplate" width="30" height="18"/>
+13 -3
View File
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="6154.21" systemVersion="13D65" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="6185.11" systemVersion="13E28" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="6154.21"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="6185.11"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="NSApplication">
@@ -10,7 +10,7 @@
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<menu title="AMainMenu" systemMenu="main" id="29">
<items>
<menuItem title="Mousecape" id="56">
@@ -32,6 +32,9 @@
</menuItem>
<menuItem title="Check for Updates..." id="igk-i0-oH0">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="checkForUpdates:" target="1HC-av-0d2" id="TKL-G4-NhR"/>
</connections>
</menuItem>
<menuItem title="Install Helper Tool" id="Ui2-VN-tbP">
<modifierMask key="keyEquivalentModifierMask"/>
@@ -370,6 +373,12 @@ CA
<action selector="restoreCape:" target="494" id="2ve-Ez-ktd"/>
</connections>
</menuItem>
<menuItem title="Dump Cursors…" id="CYY-iE-0bP">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="dumpCapeAction:" target="-1" id="B89-Hc-T1C"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
@@ -417,5 +426,6 @@ CA
</connections>
</customObject>
<customObject id="420" customClass="NSFontManager"/>
<customObject id="1HC-av-0d2" customClass="SUUpdater"/>
</objects>
</document>
@@ -1,53 +1,63 @@
{
"images" : [
{
"idiom" : "mac",
"size" : "16x16",
"idiom" : "mac",
"filename" : "Mousecape-10 (dragged).png",
"scale" : "1x"
},
{
"idiom" : "mac",
"size" : "16x16",
"idiom" : "mac",
"filename" : "Mousecape-9 (dragged).png",
"scale" : "2x"
},
{
"idiom" : "mac",
"size" : "32x32",
"idiom" : "mac",
"filename" : "Mousecape-8 (dragged).png",
"scale" : "1x"
},
{
"idiom" : "mac",
"size" : "32x32",
"idiom" : "mac",
"filename" : "Mousecape-7 (dragged).png",
"scale" : "2x"
},
{
"idiom" : "mac",
"size" : "128x128",
"idiom" : "mac",
"filename" : "Mousecape-6 (dragged).png",
"scale" : "1x"
},
{
"idiom" : "mac",
"size" : "128x128",
"idiom" : "mac",
"filename" : "Mousecape-5 (dragged).png",
"scale" : "2x"
},
{
"idiom" : "mac",
"size" : "256x256",
"idiom" : "mac",
"filename" : "Mousecape-4 (dragged).png",
"scale" : "1x"
},
{
"idiom" : "mac",
"size" : "256x256",
"idiom" : "mac",
"filename" : "Mousecape-3 (dragged).png",
"scale" : "2x"
},
{
"idiom" : "mac",
"size" : "512x512",
"idiom" : "mac",
"filename" : "Mousecape-2 (dragged).png",
"scale" : "1x"
},
{
"idiom" : "mac",
"size" : "512x512",
"idiom" : "mac",
"filename" : "Mousecape-1 (dragged).png",
"scale" : "2x"
}
],
Binary file not shown.

After

Width:  |  Height:  |  Size: 676 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 KiB

@@ -0,0 +1,68 @@
{
"images" : [
{
"filename" : "icon_16x16 copy.png",
"idiom" : "mac",
"scale" : "1x",
"size" : "16x16"
},
{
"filename" : "icon_16x16@2x.png",
"idiom" : "mac",
"scale" : "2x",
"size" : "16x16"
},
{
"filename" : "icon_32x32.png",
"idiom" : "mac",
"scale" : "1x",
"size" : "32x32"
},
{
"filename" : "icon_32x32@2x.png",
"idiom" : "mac",
"scale" : "2x",
"size" : "32x32"
},
{
"filename" : "icon_128.png",
"idiom" : "mac",
"scale" : "1x",
"size" : "128x128"
},
{
"filename" : "icon_128x128@2x.png",
"idiom" : "mac",
"scale" : "2x",
"size" : "128x128"
},
{
"filename" : "icon_256.png",
"idiom" : "mac",
"scale" : "1x",
"size" : "256x256"
},
{
"filename" : "256@2x.png",
"idiom" : "mac",
"scale" : "2x",
"size" : "256x256"
},
{
"filename" : "icon_512.png",
"idiom" : "mac",
"scale" : "1x",
"size" : "512x512"
},
{
"filename" : "icon_512@2x.png",
"idiom" : "mac",
"scale" : "2x",
"size" : "512x512"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 981 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 704 KiB

@@ -0,0 +1,6 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}
@@ -2,13 +2,17 @@
"images" : [
{
"idiom" : "universal",
"scale" : "1x",
"filename" : "HDTemplate.png"
"filename" : "HDTemplate.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x",
"filename" : "HDTemplate@2x.png"
"filename" : "HDTemplate@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
@@ -2,13 +2,17 @@
"images" : [
{
"idiom" : "universal",
"scale" : "1x",
"filename" : "SDTemplate.png"
"filename" : "SDTemplate.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x",
"filename" : "SDTemplate@2x.png"
"filename" : "SDTemplate@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
@@ -2,13 +2,17 @@
"images" : [
{
"idiom" : "universal",
"scale" : "1x",
"filename" : "applied.png"
"filename" : "applied.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x",
"filename" : "applied@2x.png"
"filename" : "applied@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
@@ -2,13 +2,17 @@
"images" : [
{
"idiom" : "universal",
"scale" : "1x",
"filename" : "dz.png"
"filename" : "dz.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x",
"filename" : "dz@2x.png"
"filename" : "dz@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
+36 -17
View File
@@ -24,10 +24,19 @@
@implementation MCAppDelegate
@dynamic preferencesWindowController;
- (void)applicationWillFinishLaunching:(NSNotification *)notification {
self.libraryWindowController = [[MCLibraryWindowController alloc] initWithWindowNibName:@"Library"];
[self.libraryWindowController loadWindow];
}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
[self configureHelperToolMenuItem];
self.libraryWindowController = [[MCLibraryWindowController alloc] initWithWindowNibName:@"Library"];
[self.libraryWindowController showWindow:self];
// Re-apply currently applied cape
if (self.libraryWindowController.libraryViewController.libraryController.appliedCape != NULL) {
[self.libraryWindowController.libraryViewController.libraryController applyCape:self.libraryWindowController.libraryViewController.libraryController.appliedCape];
}
}
- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender {
@@ -47,7 +56,9 @@
CFDictionaryRef dict = SMJobCopyDictionary(kSMDomainUserLaunchd, CFSTR("com.alexzielenski.mousecloakhelper"));
[self.toggleHelperItem setTag: dict ? 1 : 0];
[self.toggleHelperItem setTitle:self.toggleHelperItem.tag ? @"Uninstall Helper Tool" : @"Install Helper Tool"];
[self.toggleHelperItem setTitle:self.toggleHelperItem.tag ?
NSLocalizedString(@"Uninstall Helper Tool", "Uninstall Helper Tool Menu Item") :
NSLocalizedString(@"Install Helper Tool", "Install Helper Tool Menu Item")];
if (dict)
CFRelease(dict);
@@ -67,17 +78,25 @@
if (success && self.toggleHelperItem.tag == 0) {
// Successfully Installed
[self.toggleHelperItem setTag: 1];
[self.toggleHelperItem setTitle:@"Uninstall Helper Tool"];
[self.toggleHelperItem setTitle:NSLocalizedString(@"Uninstall Helper Tool", "Uninstall Helper Tool Menu Item")];
NSRunAlertPanel(@"Sucess", @"The Mousecape helper was successfully installed", @"Sweet", @"Thanks", nil);
NSRunAlertPanel(NSLocalizedString(@"Sucess", "Helper Tool Install Result Title Success"),
NSLocalizedString(@"The Mousecape helper was successfully installed", "Helper Tool Install Success Result useless description"),
NSLocalizedString(@"Sweet", "Helper Tool Install Result Gratitude 1"),
NSLocalizedString(@"Thanks", "Helper Tool Install Result Gratitude 2"), nil);
} else if (success) {
// Successfully Uninstalled
[self.toggleHelperItem setTag: 0];
[self.toggleHelperItem setTitle:@"Install Helper Tool"];
[self.toggleHelperItem setTitle:NSLocalizedString(@"Install Helper Tool", "Install Helper Tool Menu Item")];
NSRunAlertPanel(@"Sucess", @"The Mousecape helper was successfully uninstalled", @"Sweet", @"Thanks", nil);
NSRunAlertPanel(NSLocalizedString(@"Sucess", "Helper Tool Uninstall Result Title Success"),
NSLocalizedString(@"The Mousecape helper was successfully uninstalled", "Helper Tool Uninstall Success Result useless description"),
NSLocalizedString(@"Sweet", "Helper Tool Uninstall Result Gratitude 1"),
NSLocalizedString(@"Thanks", "Helper Tool Uninstall Result Gratitude 2"), nil);
} else {
NSRunAlertPanel(@"Failure", @"The action did not complete successfully", @"Fuck", nil, nil);
NSRunAlertPanel(NSLocalizedString(@"Failure", "Helper Tool Result Title Failure"),
NSLocalizedString(@"The action did not complete successfully", "Helper Tool Result Useless Failure Description"),
NSLocalizedString(@"Fuck", "Helper Tool Result Failure Expletive"), nil, nil);
}
}
@@ -86,7 +105,7 @@
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSViewController *general = [[MCGeneralPreferencesController alloc] init];
_preferencesWindowController = [[MASPreferencesWindowController alloc] initWithViewControllers:@[ general ] title:NSLocalizedString(@"Preferences", nil)];
_preferencesWindowController = [[MASPreferencesWindowController alloc] initWithViewControllers:@[ general ] title:NSLocalizedString(@"Preferences", "Preferences Window Title")];
});
return _preferencesWindowController;
@@ -100,16 +119,16 @@
- (IBAction)convertCape:(id)sender {
NSOpenPanel *panel = [NSOpenPanel openPanel];
panel.allowedFileTypes = @[ @"MightyMouse" ];
panel.title = @"Import";
panel.message = @"Choose a MightyMouse file to import";
panel.prompt = @"Import";
panel.allowedFileTypes = @[ @"MightyMouse" ];
panel.title = NSLocalizedString(@"Import", "MightyMouse Import Panel Title");
panel.message = NSLocalizedString(@"Choose a MightyMouse file to import", "MightyMouse Import Panel useless description");
panel.prompt = NSLocalizedString(@"Import", "MightyMouse Import Panel Prompt");
if ([panel runModal] == NSFileHandlingPanelOKButton) {
NSString *name = panel.URL.lastPathComponent.stringByDeletingPathExtension;
NSDictionary *metadata = @{
@"name": name,
@"version": @1.0,
@"author": @"Unknown",
@"author": NSLocalizedString(@"Unknown", "MightyMouse Import Default Author"),
@"identifier": [NSString stringWithFormat:@"local.import.%@.%f", name, [NSDate timeIntervalSinceReferenceDate]]
};
@@ -125,10 +144,10 @@
- (IBAction)openDocument:(id)sender {
NSOpenPanel *panel = [NSOpenPanel openPanel];
panel.allowedFileTypes = @[ @"cape" ];
panel.title = @"Import";
panel.message = @"Choose a Mousecape to import";
panel.prompt = @"Import";
panel.allowedFileTypes = @[ @"cape" ];
panel.title = NSLocalizedString(@"Import", "Mousecape Import Title");
panel.message = NSLocalizedString(@"Choose a Mousecape to import", "Mousecape Import useless description");
panel.prompt = NSLocalizedString(@"Import", "Mousecape Import Prompt");
if ([panel runModal] == NSFileHandlingPanelOKButton) {
[self.libraryWindowController.libraryViewController.libraryController importCapeAtURL:panel.URL];
}
+46 -6
View File
@@ -25,10 +25,8 @@
</array>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string>com.alexzielenski.${PRODUCT_NAME:rfc1034identifier}</string>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
@@ -36,21 +34,63 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>0.0.3</string>
<string>1820</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1329</string>
<string>1820</string>
<key>LSApplicationCategoryType</key>
<string>public.app-category.utilities</string>
<key>LSMinimumSystemVersion</key>
<string>${MACOSX_DEPLOYMENT_TARGET}</string>
<key>NSHumanReadableCopyright</key>
<string>Copyright © 2014 Alex Zielenski. All rights reserved.</string>
<string>Copyright © 2014-2024 Alex Zielenski. All rights reserved.</string>
<key>NSMainNibFile</key>
<string>MainMenu</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
<key>SUEnableAutomaticChecks</key>
<true/>
<key>SUFeedURL</key>
<string>https://raw.githubusercontent.com/alexzielenski/Mousecape/master/appcast_signed.xml</string>
<key>SUPublicEDKey</key>
<string>-----BEGIN PUBLIC KEY-----
MIIGSDCCBDoGByqGSM44BAEwggQtAoICAQDabiG7CQ9Dvx3JAsgDSEqBNuu5MGbl
kdX6h+aOQ6z9RJvf2m3sL+GGR/7uv/lE+KhSupdIt1kboGzpo4re8dWrf06wc1yH
jvupIdx/GnMDKZr3qm4j0w5VmyVSx7o8CBZ04O1AE1iC7fcThfh75mkiv8ljLjwr
Q/QTp7X4xje2qDBFeJSvC6VEw85+6AdueROi/6H8PmrK+/rC6S9y3s8sJGHrOA7l
hdpPabJWGGekq5jTaY10h8d7F02+WqV4P72BL5KjXoZySurHTr4ATf1uavj03pOP
Jh2TJemOjSibbu6fflvOnOVDHR/4djY9lXp9ZgkazywzWUksN7IvDLK+Niehp9lD
6HY37he1WdPqx7Jn32EjFpLnhgPxveYw4CnWXxnX4y6rwkQmJ0hTnmW/bgXcnO3+
Fl4XYZpxuZKj+rD+SLX0SdFeUr0UmQeWEF6g9h02rovJ9vsRTcaz9L2H2vBkMFML
xAfEG3HyrZBfw+e8+Hjv81qXN3Ey9OTJAyL4yJa4B4xvLfXtQ6vNjRHLvgavCG7y
Dc6Ifr5MMxdnObf8YUQe1eSwpM5X5u/AAjHA6zswwv1vI9w/lr+nOg0IyjPTK6jV
EvAzQLa5KqPWllHWsR7v6dZPLblWyFNWY+Z+Bq+rAQIr9gIrlxF+XKxanqZTBlg9
zS9lS/4Vr0RhMwIhAP+RpFYVPF3Z9d+WhcKjs1bNjErzomp8+IPCqd2onpanAoIC
AQDLhx28iJ+BHHmpD7wmLbRx9xRoZiSGFTK5r6q05aTxAG7So+Q1oXKISHuBGMg0
4WHS2d92Z4ZSSYMOeqxD2t+irhDDyBpH23D4CuV6aEsI4f4IW5Z3BFL+IpxH1DRn
bjvuk0MzUh6rQWbIDeNkmS9bR7i1EHzssSvqbJdBLwtDxFkI38I0THiCrEFy0yFz
OvzfKkqgOEkmLgntl6MoLL8SBT+YGF35FQ6wBpLAXs/TPGrFDjCjpppPHg+gcsdO
lYKttw273+L3WBCQ3SKwfFfhYi2Ox7I2bwPxNyaGJ11GZP/dS3nDJqA8LtFnd30Z
0O6j0HUucVUKzts5iPE8cDjK7a8CR+geuZ15ZiW14C7eMdOZNxqvrzYeilgGKTKr
BaNMERzsE3GuFYcWntk+0LjuocsKVtfICYpNEwfPsL2PTezd3NiBahJuYxwfTT1j
4sfdXAWGHLTmRkMFYoV8/+tPlClIsYU57rR2QfTab+QeWoFG/Ipmc7JfpI+KENR8
yRNHvzoQy7b0MVlMfeMPflNzfZoFPrgDQm3RKgzqckoKNhWlxX+4Tnt2kC4wv7f6
XREMcoukQz2qtLeGNV0Zc3ri4hVFsDNeeEOtpzY0/xbEuUD5YyZ5rHqpk6mOZJkj
4SZ8B+E7kGYtQv926kmUAnF150b9JECdpCY+nFDmRVdb3QOCAgYAAoICAQCCIC0h
6KOybuVCgWTV22CsZVUK+792104vg1+a1TgIaxwthsWK7KZbntyF1045nM9ELrOw
ZK+8T7G+fAClWO5uCqGpDB9pzmpAvFpLzrNCdtlvMrj/TvHLkOCZaNeOZBfkPUxi
vLCoA4eh/nEKCk1oDJ0Y0M2a/meAD1VZFJKpPGr+sQpbJ4LvMQyfzbiZe1UcOOoD
rIgfuMWk80oWJwnGBCXzqPHNCzAONhvATskmLEohH/H9Jw803JltSfMj5g0h5v8G
8yBUZ1rFxmMCul5pPrzWUvSFVDJLbfclzv+4umAwy4af7/X5j0XrR061kN6LyTTb
cBWvAsOeIJnuX8vqh/TovjZtxBy69TiyH/gbCi2tRQb+AklYLoMjtq7TjklWyyQk
pCO+vQNo6acchseqbnFQjJWPox2vfFfwWYUPZNmZXNzVrw4BZLY/RW0b/TN1axrH
JBvwYfzf+KfzIXnKfrSwN4QjqemoL5ZqmVGuztOcKwpQCQ4Qf17JA/wnUWusizah
+J/6J3kwKhiBZAuHwdGWCDDiHJs2bQsIYIjIS07S4MYQUyBqKE2KjzRvuFH4H2f/
ROaayrx/Zgk6sGQ8vImbEFDDBHEb1GBWVtjRFOLaQtajm5f/dZNct5jpfZS6PcTc
RZOH9X9yruIOFGUnkmBWrfTWnpHoaYlIJ2nlRw==
-----END PUBLIC KEY-----
</string>
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict/>
</plist>
@@ -0,0 +1,32 @@
{\rtf1\ansi\ansicpg1252\cocoartf1671\cocoasubrtf100
{\fonttbl\f0\fswiss\fcharset0 Helvetica-Bold;\f1\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
{\*\expandedcolortbl;;}
\vieww9600\viewh8400\viewkind0
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\partightenfactor0
\f0\b\fs24 \cf0 Engineering:
\f1\b0 \
Alex Zielenski\
{\field{\*\fldinst{HYPERLINK "http://alexzielenski.com"}}{\fldrslt http://alexzielenski.com}}\
\
\f0\b Icon:\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc\partightenfactor0
\f1\b0 \cf0 Allan Nyholm Nielson\
{\field{\*\fldinst{HYPERLINK "https://www.deviantart.com/allannyholm"}}{\fldrslt https://www.deviantart.com/allannyholm}}\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\partightenfactor0
\cf0 \
\f0\b Testing:
\f1\b0 \
Justin Ayles\
\
\f0\b With special thanks to:
\f1\b0 \
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\partightenfactor0
{\field{\*\fldinst{HYPERLINK "http://maxrudberg.com"}}{\fldrslt \cf0 Max Rudberg}}\
Mom & Dad\
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,695 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="16096" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="16096"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="MCEditWindowController">
<connections>
<outlet property="detailView" destination="fzz-Li-KC6" id="o4X-5d-9UA"/>
<outlet property="editCapeController" destination="Bu6-lg-x1j" id="K0b-fF-JHE"/>
<outlet property="editDetailController" destination="tMj-cQ-hK0" id="i1B-Pa-vlp"/>
<outlet property="editListController" destination="oUs-Nv-PHw" id="C2e-6f-Mpe"/>
<outlet property="window" destination="1" id="3"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="1" customClass="NSPanel">
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
<rect key="contentRect" x="196" y="240" width="525" height="296"/>
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
<value key="minSize" type="size" width="500" height="296"/>
<view key="contentView" id="2">
<rect key="frame" x="0.0" y="0.0" width="525" height="296"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<splitView canDrawConcurrently="YES" dividerStyle="thin" vertical="YES" translatesAutoresizingMaskIntoConstraints="NO" id="3cj-R9-WKK">
<rect key="frame" x="0.0" y="0.0" width="525" height="296"/>
<subviews>
<customView id="IHY-vi-Wpr">
<rect key="frame" x="0.0" y="0.0" width="135" height="296"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<scrollView canDrawConcurrently="YES" borderType="none" autohidesScrollers="YES" horizontalLineScroll="34" horizontalPageScroll="10" verticalLineScroll="34" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2UQ-R4-qJn">
<rect key="frame" x="0.0" y="22" width="135" height="274"/>
<clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="ame-2S-JV7">
<rect key="frame" x="0.0" y="0.0" width="135" height="274"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" columnReordering="NO" columnResizing="NO" multipleSelection="NO" emptySelection="NO" autosaveColumns="NO" typeSelect="NO" rowHeight="32" rowSizeStyle="automatic" viewBased="YES" id="MU4-Yh-0PJ">
<rect key="frame" x="0.0" y="0.0" width="135" height="274"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<size key="intercellSpacing" width="3" height="2"/>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
<tableColumns>
<tableColumn editable="NO" width="132" minWidth="40" maxWidth="1000" id="B1d-Yp-OOR">
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left">
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" white="0.33333298560000002" alpha="1" colorSpace="calibratedWhite"/>
</tableHeaderCell>
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" alignment="left" title="Text Cell" id="EOd-L3-If3">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES"/>
<prototypeCellViews>
<tableCellView identifier="MCCursorLibrary" id="ti0-Bq-1rU">
<rect key="frame" x="1" y="1" width="132" height="32"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="tn7-kB-Fvu">
<rect key="frame" x="6" y="8" width="120" height="16"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="8we-kW-bNk">
<font key="font" metaFont="systemBold"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="backgroundStyle">
<integer key="value" value="2"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</textFieldCell>
<connections>
<binding destination="ti0-Bq-1rU" name="value" keyPath="objectValue.name" id="t1G-Uv-n0y"/>
</connections>
</textField>
</subviews>
<constraints>
<constraint firstAttribute="trailing" secondItem="tn7-kB-Fvu" secondAttribute="trailing" constant="8" id="ilO-BE-fhh"/>
<constraint firstAttribute="centerY" secondItem="tn7-kB-Fvu" secondAttribute="centerY" id="xFa-kX-vgG"/>
<constraint firstItem="tn7-kB-Fvu" firstAttribute="leading" secondItem="ti0-Bq-1rU" secondAttribute="leading" constant="8" id="zRO-gF-Fjk"/>
</constraints>
<connections>
<outlet property="textField" destination="tn7-kB-Fvu" id="EIu-dF-vgX"/>
</connections>
</tableCellView>
<tableCellView identifier="MCCursor" id="ldl-Zk-KLa">
<rect key="frame" x="1" y="35" width="132" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="W6i-Uv-3TI">
<rect key="frame" x="6" y="1" width="120" height="16"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="8bB-Ws-20v">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="ldl-Zk-KLa" name="value" keyPath="objectValue.name" id="OuH-uQ-nFp"/>
</connections>
</textField>
</subviews>
<constraints>
<constraint firstAttribute="centerY" secondItem="W6i-Uv-3TI" secondAttribute="centerY" id="JPw-Qf-DNs"/>
<constraint firstItem="W6i-Uv-3TI" firstAttribute="leading" secondItem="ldl-Zk-KLa" secondAttribute="leading" constant="8" id="WvV-tP-TPf"/>
<constraint firstAttribute="trailing" secondItem="W6i-Uv-3TI" secondAttribute="trailing" constant="8" id="zV0-3Z-fAD"/>
</constraints>
<connections>
<outlet property="textField" destination="W6i-Uv-3TI" id="rCr-ZD-nty"/>
</connections>
</tableCellView>
</prototypeCellViews>
</tableColumn>
</tableColumns>
<connections>
<outlet property="dataSource" destination="oUs-Nv-PHw" id="ur0-Pm-oqJ"/>
<outlet property="delegate" destination="oUs-Nv-PHw" id="GMA-yd-uCn"/>
<outlet property="menu" destination="vy8-Pj-2Jg" id="4S4-YC-adi"/>
<outlet property="nextKeyView" destination="fzz-Li-KC6" id="Mg7-QD-IZj"/>
</connections>
</tableView>
</subviews>
<nil key="backgroundColor"/>
</clipView>
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="ARR-bd-5zK">
<autoresizingMask key="autoresizingMask"/>
</scroller>
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="3rZ-7d-Mro">
<autoresizingMask key="autoresizingMask"/>
</scroller>
</scrollView>
<button translatesAutoresizingMaskIntoConstraints="NO" id="0ps-WH-ASN">
<rect key="frame" x="0.0" y="0.0" width="22" height="22"/>
<constraints>
<constraint firstAttribute="width" constant="22" id="Fdb-xA-sn9"/>
<constraint firstAttribute="height" constant="22" id="iNY-lh-RsQ"/>
</constraints>
<buttonCell key="cell" type="smallSquare" bezelStyle="smallSquare" image="NSAddTemplate" imagePosition="only" alignment="center" imageScaling="proportionallyDown" inset="2" id="xv7-ZP-O2C">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="addAction:" target="oUs-Nv-PHw" id="QeK-Mq-YfI"/>
</connections>
</button>
<button translatesAutoresizingMaskIntoConstraints="NO" id="w4h-lB-jLi">
<rect key="frame" x="22" y="0.0" width="22" height="20"/>
<constraints>
<constraint firstAttribute="width" constant="22" id="L21-Ci-myo"/>
<constraint firstAttribute="height" constant="20" id="M80-94-gpJ"/>
</constraints>
<buttonCell key="cell" type="smallSquare" bezelStyle="smallSquare" image="NSRemoveTemplate" imagePosition="only" alignment="center" imageScaling="proportionallyDown" inset="2" id="HjH-hq-TxT">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="removeAction:" target="oUs-Nv-PHw" id="JjR-lV-zwz"/>
</connections>
</button>
<box verticalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="UJO-Hw-fRK">
<rect key="frame" x="0.0" y="19" width="135" height="5"/>
<constraints>
<constraint firstAttribute="height" constant="1" id="NYz-xn-F0g"/>
</constraints>
</box>
</subviews>
<constraints>
<constraint firstAttribute="trailing" secondItem="UJO-Hw-fRK" secondAttribute="trailing" id="1nr-pf-XFQ"/>
<constraint firstAttribute="bottom" secondItem="UJO-Hw-fRK" secondAttribute="bottom" constant="21" id="6Ak-tM-Cac"/>
<constraint firstItem="0ps-WH-ASN" firstAttribute="width" secondItem="w4h-lB-jLi" secondAttribute="width" id="97v-Rq-d09"/>
<constraint firstAttribute="bottom" secondItem="0ps-WH-ASN" secondAttribute="bottom" id="Afn-3d-zKF"/>
<constraint firstItem="UJO-Hw-fRK" firstAttribute="leading" secondItem="IHY-vi-Wpr" secondAttribute="leading" id="C8U-9e-Hyh"/>
<constraint firstAttribute="trailing" secondItem="2UQ-R4-qJn" secondAttribute="trailing" id="LC4-J4-2bn"/>
<constraint firstItem="2UQ-R4-qJn" firstAttribute="top" secondItem="IHY-vi-Wpr" secondAttribute="top" id="NyE-Z9-XCc"/>
<constraint firstItem="0ps-WH-ASN" firstAttribute="leading" secondItem="IHY-vi-Wpr" secondAttribute="leading" id="kvW-tW-AQF"/>
<constraint firstItem="w4h-lB-jLi" firstAttribute="leading" secondItem="0ps-WH-ASN" secondAttribute="trailing" id="oqH-vB-hO8"/>
<constraint firstItem="0ps-WH-ASN" firstAttribute="bottom" secondItem="w4h-lB-jLi" secondAttribute="bottom" id="sWe-gf-GX0"/>
<constraint firstItem="2UQ-R4-qJn" firstAttribute="leading" secondItem="IHY-vi-Wpr" secondAttribute="leading" id="thB-tX-fKx"/>
<constraint firstItem="0ps-WH-ASN" firstAttribute="height" secondItem="w4h-lB-jLi" secondAttribute="height" constant="2" id="uJj-nv-0fc"/>
<constraint firstAttribute="bottom" secondItem="2UQ-R4-qJn" secondAttribute="bottom" constant="22" id="vLX-hs-yVP"/>
</constraints>
</customView>
<customView fixedFrame="YES" id="fzz-Li-KC6">
<rect key="frame" x="136" y="0.0" width="389" height="296"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
</customView>
</subviews>
<holdingPriorities>
<real value="250"/>
<real value="250"/>
</holdingPriorities>
<connections>
<outlet property="delegate" destination="-2" id="lwv-X3-bDm"/>
</connections>
</splitView>
</subviews>
<constraints>
<constraint firstItem="3cj-R9-WKK" firstAttribute="leading" secondItem="2" secondAttribute="leading" id="4E6-iP-FpE"/>
<constraint firstItem="3cj-R9-WKK" firstAttribute="top" secondItem="2" secondAttribute="top" id="Eam-bF-EPz"/>
<constraint firstAttribute="trailing" secondItem="3cj-R9-WKK" secondAttribute="trailing" id="IT0-Rw-fmh"/>
<constraint firstAttribute="bottom" secondItem="3cj-R9-WKK" secondAttribute="bottom" id="znR-CB-aDB"/>
</constraints>
</view>
<connections>
<binding destination="oUs-Nv-PHw" name="title" keyPath="cursorLibrary.name" id="RKE-nQ-CzI"/>
<outlet property="delegate" destination="-2" id="4"/>
</connections>
<point key="canvasLocation" x="139.5" y="555.5"/>
</window>
<viewController title="List" id="oUs-Nv-PHw" customClass="MCEditListController">
<connections>
<outlet property="tableView" destination="MU4-Yh-0PJ" id="TRg-C6-MaW"/>
<outlet property="view" destination="MU4-Yh-0PJ" id="xHm-2x-mvT"/>
</connections>
</viewController>
<viewController title="Detail" id="tMj-cQ-hK0" customClass="MCEditDetailController">
<connections>
<outlet property="rep1000View" destination="4hN-Nm-B7Z" id="8iU-1v-yGH"/>
<outlet property="rep100View" destination="j7v-U4-eMe" id="X5D-KB-JVI"/>
<outlet property="rep200View" destination="ggE-Pd-aWo" id="oJ3-3i-3SZ"/>
<outlet property="rep500View" destination="G3t-wd-E5Y" id="u1Y-3n-iRc"/>
<outlet property="typePopUpButton" destination="yz7-y5-TxE" id="0Lj-Ty-Oea"/>
<outlet property="view" destination="o0X-1i-ZgL" id="fn8-Is-pBo"/>
</connections>
</viewController>
<viewController title="Cape" id="Bu6-lg-x1j" customClass="MCEditCapeController">
<connections>
<outlet property="view" destination="WMR-Vn-IHF" id="tlm-o5-run"/>
</connections>
</viewController>
<customView id="WMR-Vn-IHF" userLabel="Cape">
<rect key="frame" x="0.0" y="0.0" width="504" height="321"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="X2i-rg-HDg">
<rect key="frame" x="18" y="261" width="62" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Author:" id="Oyi-AW-60U">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="yyn-IO-TkO">
<rect key="frame" x="18" y="213" width="62" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Version:" id="98i-gH-tf4">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ELX-ej-rTb">
<rect key="frame" x="18" y="237" width="62" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Identifier:" id="Xzj-Uq-4bW">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="CTE-6h-rbf">
<rect key="frame" x="18" y="285" width="62" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Name:" id="oMS-dL-nZj">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="bim-1a-xuh">
<rect key="frame" x="86" y="282" width="398" height="21"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="07X-ce-vmv">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="Bu6-lg-x1j" name="value" keyPath="cursorLibrary.name" id="QlS-r9-svX"/>
<outlet property="nextKeyView" destination="xy3-2B-C0h" id="kJW-OZ-1NO"/>
</connections>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="xy3-2B-C0h">
<rect key="frame" x="86" y="258" width="398" height="21"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="fmY-Bj-OnI">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="Bu6-lg-x1j" name="value" keyPath="cursorLibrary.author" id="CfA-df-u6f"/>
<outlet property="nextKeyView" destination="XYx-UL-WbM" id="74w-oc-ff2"/>
</connections>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="XYx-UL-WbM">
<rect key="frame" x="86" y="234" width="398" height="21"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="sjK-hK-kfo">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="Bu6-lg-x1j" name="value" keyPath="cursorLibrary.identifier" id="Vdx-1W-Guz">
<dictionary key="options">
<bool key="NSValidatesImmediately" value="YES"/>
</dictionary>
</binding>
<outlet property="nextKeyView" destination="car-it-RsL" id="uaw-jj-8AW"/>
</connections>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="car-it-RsL">
<rect key="frame" x="86" y="210" width="398" height="21"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="qW0-CC-89l">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="oUs-Nv-PHw" name="value" keyPath="cursorLibrary.version" id="pHV-5a-ce5"/>
<outlet property="nextKeyView" destination="MJr-Jz-5Cq" id="sfZ-oa-g3c"/>
</connections>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="i5v-yD-weq">
<rect key="frame" x="18" y="189" width="62" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Retina:" id="HFS-GR-guB">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button translatesAutoresizingMaskIntoConstraints="NO" id="MJr-Jz-5Cq">
<rect key="frame" x="84" y="186" width="18" height="18"/>
<buttonCell key="cell" type="check" bezelStyle="regularSquare" imagePosition="overlaps" state="on" inset="2" id="Ma9-Ke-hYa">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<binding destination="Bu6-lg-x1j" name="value" keyPath="cursorLibrary.hiDPI" id="jnk-dy-w9m"/>
<outlet property="nextKeyView" destination="bim-1a-xuh" id="flN-6L-Vpz"/>
</connections>
</button>
</subviews>
<constraints>
<constraint firstItem="car-it-RsL" firstAttribute="leading" secondItem="bim-1a-xuh" secondAttribute="leading" id="0xF-zq-ScD"/>
<constraint firstAttribute="trailing" secondItem="XYx-UL-WbM" secondAttribute="trailing" constant="20" id="2FH-UV-gN8"/>
<constraint firstItem="car-it-RsL" firstAttribute="width" secondItem="xy3-2B-C0h" secondAttribute="width" id="5Ga-DV-3Po"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="MJr-Jz-5Cq" secondAttribute="trailing" constant="20" symbolic="YES" id="6NT-lK-p2E"/>
<constraint firstItem="car-it-RsL" firstAttribute="width" secondItem="XYx-UL-WbM" secondAttribute="width" id="78w-Rp-5Kn"/>
<constraint firstItem="bim-1a-xuh" firstAttribute="top" secondItem="WMR-Vn-IHF" secondAttribute="top" constant="18" id="7md-u2-mQL"/>
<constraint firstAttribute="trailing" secondItem="car-it-RsL" secondAttribute="trailing" constant="20" id="8og-5G-f3t"/>
<constraint firstItem="CTE-6h-rbf" firstAttribute="leading" secondItem="yyn-IO-TkO" secondAttribute="leading" id="A71-62-pAd"/>
<constraint firstItem="CTE-6h-rbf" firstAttribute="trailing" secondItem="X2i-rg-HDg" secondAttribute="trailing" id="B5V-w4-E4R"/>
<constraint firstItem="xy3-2B-C0h" firstAttribute="top" secondItem="bim-1a-xuh" secondAttribute="bottom" constant="3" id="Ba8-n2-AJY"/>
<constraint firstItem="CTE-6h-rbf" firstAttribute="trailing" secondItem="ELX-ej-rTb" secondAttribute="trailing" id="CUf-rI-rpu"/>
<constraint firstItem="CTE-6h-rbf" firstAttribute="width" secondItem="X2i-rg-HDg" secondAttribute="width" id="D9Z-q0-phl"/>
<constraint firstItem="ELX-ej-rTb" firstAttribute="top" secondItem="X2i-rg-HDg" secondAttribute="bottom" constant="8" id="DLd-62-Iep"/>
<constraint firstItem="CTE-6h-rbf" firstAttribute="width" secondItem="ELX-ej-rTb" secondAttribute="width" id="DNc-Oi-qtL"/>
<constraint firstItem="CTE-6h-rbf" firstAttribute="leading" secondItem="X2i-rg-HDg" secondAttribute="leading" id="Dzm-RT-QGr"/>
<constraint firstItem="CTE-6h-rbf" firstAttribute="leading" secondItem="ELX-ej-rTb" secondAttribute="leading" id="H6H-IO-OIS"/>
<constraint firstItem="CTE-6h-rbf" firstAttribute="trailing" secondItem="yyn-IO-TkO" secondAttribute="trailing" id="Iox-22-dSy"/>
<constraint firstItem="yyn-IO-TkO" firstAttribute="top" secondItem="ELX-ej-rTb" secondAttribute="bottom" constant="8" id="IxV-Aj-Agw"/>
<constraint firstItem="yyn-IO-TkO" firstAttribute="trailing" secondItem="i5v-yD-weq" secondAttribute="trailing" id="JJ3-CQ-MYe"/>
<constraint firstItem="CTE-6h-rbf" firstAttribute="top" secondItem="WMR-Vn-IHF" secondAttribute="top" constant="20" symbolic="YES" id="Nav-P8-ewc"/>
<constraint firstItem="car-it-RsL" firstAttribute="leading" secondItem="xy3-2B-C0h" secondAttribute="leading" id="Ofe-x8-Iz6"/>
<constraint firstItem="yyn-IO-TkO" firstAttribute="width" secondItem="i5v-yD-weq" secondAttribute="width" id="Pbq-09-PEz"/>
<constraint firstAttribute="trailing" secondItem="xy3-2B-C0h" secondAttribute="trailing" constant="20" id="QaY-Yd-7ki"/>
<constraint firstAttribute="trailing" secondItem="bim-1a-xuh" secondAttribute="trailing" constant="20" id="Qgd-dL-t4L"/>
<constraint firstItem="XYx-UL-WbM" firstAttribute="top" secondItem="xy3-2B-C0h" secondAttribute="bottom" constant="3" id="S7k-zO-aLb"/>
<constraint firstItem="car-it-RsL" firstAttribute="width" secondItem="bim-1a-xuh" secondAttribute="width" id="Scq-gg-9Mp"/>
<constraint firstItem="bim-1a-xuh" firstAttribute="leading" secondItem="CTE-6h-rbf" secondAttribute="trailing" constant="8" symbolic="YES" id="V76-cY-GEg"/>
<constraint firstItem="car-it-RsL" firstAttribute="trailing" secondItem="XYx-UL-WbM" secondAttribute="trailing" id="YTL-Eq-h2J"/>
<constraint firstItem="X2i-rg-HDg" firstAttribute="top" secondItem="CTE-6h-rbf" secondAttribute="bottom" constant="8" id="b3A-aW-7fb"/>
<constraint firstItem="i5v-yD-weq" firstAttribute="top" secondItem="yyn-IO-TkO" secondAttribute="bottom" constant="8" id="dGT-5B-B1c"/>
<constraint firstItem="car-it-RsL" firstAttribute="leading" secondItem="MJr-Jz-5Cq" secondAttribute="leading" id="e2s-Um-zcp"/>
<constraint firstItem="CTE-6h-rbf" firstAttribute="leading" secondItem="WMR-Vn-IHF" secondAttribute="leading" constant="20" symbolic="YES" id="g0a-i4-KIf"/>
<constraint firstItem="car-it-RsL" firstAttribute="top" secondItem="XYx-UL-WbM" secondAttribute="bottom" constant="3" id="ol9-vF-CGP"/>
<constraint firstItem="MJr-Jz-5Cq" firstAttribute="top" secondItem="car-it-RsL" secondAttribute="bottom" constant="8" id="rTY-Fr-65b"/>
<constraint firstItem="CTE-6h-rbf" firstAttribute="width" secondItem="yyn-IO-TkO" secondAttribute="width" id="sb9-dg-qOh"/>
<constraint firstItem="i5v-yD-weq" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="WMR-Vn-IHF" secondAttribute="leading" constant="20" symbolic="YES" id="wYl-BB-jBi"/>
<constraint firstItem="car-it-RsL" firstAttribute="trailing" secondItem="xy3-2B-C0h" secondAttribute="trailing" id="wpN-fF-mXb"/>
<constraint firstItem="car-it-RsL" firstAttribute="trailing" secondItem="bim-1a-xuh" secondAttribute="trailing" id="wtJ-Bc-d9Z"/>
<constraint firstItem="car-it-RsL" firstAttribute="leading" secondItem="XYx-UL-WbM" secondAttribute="leading" id="yFH-4V-CiS"/>
</constraints>
<connections>
<outlet property="nextKeyView" destination="bim-1a-xuh" id="YxQ-sZ-TFh"/>
</connections>
<point key="canvasLocation" x="139" y="157"/>
</customView>
<customView id="o0X-1i-ZgL" userLabel="Detail">
<rect key="frame" x="0.0" y="0.0" width="509" height="321"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Dm8-Mj-s5f">
<rect key="frame" x="18" y="285" width="102" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Type:" id="dy9-JM-4d7">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="D5V-CV-BuE">
<rect key="frame" x="18" y="261" width="102" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Frames:" id="G4c-OI-avP">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="zEj-zS-uzh">
<rect key="frame" x="18" y="237" width="102" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Frame Duration:" id="5Wb-pc-8jV">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="aso-MD-Alm">
<rect key="frame" x="18" y="213" width="102" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Hot Spot:" id="dcq-3r-2DB">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="yz7-y5-TxE">
<rect key="frame" x="126" y="278" width="363" height="23"/>
<popUpButtonCell key="cell" type="roundTextured" bezelStyle="texturedRounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="gKl-8J-X0X">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
<menu key="menu" title="OtherViews" id="j3S-Me-3x5"/>
</popUpButtonCell>
<connections>
<binding destination="tMj-cQ-hK0" name="selectedValue" keyPath="cursor.identifier" id="2aq-Lm-1Lm">
<dictionary key="options">
<string key="NSMultipleValuesPlaceholder">Unknown</string>
<string key="NSNoSelectionPlaceholder">Unknown</string>
<string key="NSNotApplicablePlaceholder">Unknown</string>
<string key="NSNullPlaceholder">Unknown</string>
<string key="NSValueTransformerName">MCCursorTypeValueTransformer</string>
</dictionary>
</binding>
<outlet property="nextKeyView" destination="rms-zC-s1M" id="yfu-3L-R4w"/>
</connections>
</popUpButton>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="rms-zC-s1M">
<rect key="frame" x="126" y="256" width="363" height="21"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="1" drawsBackground="YES" id="tKY-dX-ibT">
<numberFormatter key="formatter" formatterBehavior="default10_4" positiveFormat="#" negativeFormat="#" usesGroupingSeparator="NO" paddingCharacter="*" groupingSize="0" minimumIntegerDigits="0" maximumIntegerDigits="42" decimalSeparator="." groupingSeparator="," currencyDecimalSeparator="." plusSign="+" minusSign="-" notANumberSymbol="NaN" perMillSymbol="‰" percentSymbol="%" exponentSymbol="E" positivePrefix="" positiveSuffix="" negativePrefix="-" negativeSuffix="" id="JEt-qW-Py5">
<real key="minimum" value="1"/>
<real key="maximum" value="24"/>
</numberFormatter>
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="tMj-cQ-hK0" name="value" keyPath="cursor.frameCount" id="05V-RH-y2o">
<dictionary key="options">
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
</dictionary>
</binding>
<outlet property="nextKeyView" destination="VbK-WJ-M0L" id="y5I-kM-hNq"/>
</connections>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="VbK-WJ-M0L">
<rect key="frame" x="126" y="232" width="363" height="21"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="0.0" drawsBackground="YES" id="pqX-MB-QME">
<numberFormatter key="formatter" formatterBehavior="custom10_4" positiveFormat="#.################" negativeFormat="#.################" usesGroupingSeparator="NO" paddingCharacter="*" groupingSize="0" minimumIntegerDigits="0" maximumIntegerDigits="42" maximumFractionDigits="16" decimalSeparator="." groupingSeparator="," currencyDecimalSeparator="." plusSign="+" minusSign="-" notANumberSymbol="NaN" perMillSymbol="‰" percentSymbol="%" exponentSymbol="E" positivePrefix="" positiveSuffix="" negativePrefix="-" negativeSuffix="" id="QTS-o7-aVO">
<real key="minimum" value="0.0"/>
</numberFormatter>
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="tMj-cQ-hK0" name="value" keyPath="cursor.frameDuration" id="pBC-y0-ehq">
<dictionary key="options">
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
</dictionary>
</binding>
<outlet property="nextKeyView" destination="Qcr-83-Tz0" id="gYj-Hj-Txi"/>
</connections>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Qcr-83-Tz0">
<rect key="frame" x="126" y="208" width="363" height="21"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="{0,0}" drawsBackground="YES" id="BWu-hw-sDX">
<customFormatter key="formatter" id="hAv-1z-0Jg" customClass="MCPointFormatter"/>
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="tMj-cQ-hK0" name="value" keyPath="cursor.hotSpot" id="7E7-XS-E4D">
<dictionary key="options">
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
</dictionary>
</binding>
<outlet property="nextKeyView" destination="wdB-yr-r6Y" id="Smn-hK-iP2"/>
</connections>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="75v-aw-FbU">
<rect key="frame" x="140" y="104" width="21" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="1x" id="FZ3-qB-kDI">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Hoi-Pr-5wz">
<rect key="frame" x="195" y="104" width="23" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="2x" id="WI8-sV-4D6">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="CWo-oD-OZX">
<rect key="frame" x="251" y="104" width="23" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="5x" id="4fS-Q1-prn">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Ryz-mP-wNx">
<rect key="frame" x="304" y="104" width="29" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="10x" id="8fp-Ws-ruA">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="ggE-Pd-aWo" customClass="MMAnimatingImageView">
<rect key="frame" x="182" y="128" width="48" height="48"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="shouldShowHotSpot" value="YES"/>
<userDefinedRuntimeAttribute type="boolean" keyPath="shouldAllowDragging" value="YES"/>
</userDefinedRuntimeAttributes>
<connections>
<outlet property="delegate" destination="tMj-cQ-hK0" id="Q6h-vm-kaw"/>
</connections>
</customView>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="G3t-wd-E5Y" customClass="MMAnimatingImageView">
<rect key="frame" x="238" y="128" width="48" height="48"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="shouldShowHotSpot" value="YES"/>
<userDefinedRuntimeAttribute type="boolean" keyPath="shouldAllowDragging" value="YES"/>
</userDefinedRuntimeAttributes>
<connections>
<outlet property="delegate" destination="tMj-cQ-hK0" id="VPL-GA-4fS"/>
</connections>
</customView>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="4hN-Nm-B7Z" customClass="MMAnimatingImageView">
<rect key="frame" x="294" y="128" width="48" height="48"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="shouldShowHotSpot" value="YES"/>
<userDefinedRuntimeAttribute type="boolean" keyPath="shouldAllowDragging" value="YES"/>
</userDefinedRuntimeAttributes>
<connections>
<outlet property="delegate" destination="tMj-cQ-hK0" id="fp1-eX-JUN"/>
</connections>
</customView>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="OAt-gN-EX5">
<rect key="frame" x="18" y="189" width="102" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Size:" id="FrC-7p-0Bq">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="wdB-yr-r6Y">
<rect key="frame" x="126" y="184" width="363" height="21"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="{0,0}" drawsBackground="YES" id="OmM-g8-Kyd">
<customFormatter key="formatter" id="wEf-m3-oYM" customClass="MCSizeFormatter"/>
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="tMj-cQ-hK0" name="value" keyPath="cursor.size" id="dXp-5z-YR6"/>
<outlet property="nextKeyView" destination="yz7-y5-TxE" id="9Cb-FK-ium"/>
</connections>
</textField>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="j7v-U4-eMe" customClass="MMAnimatingImageView">
<rect key="frame" x="126" y="128" width="48" height="48"/>
<constraints>
<constraint firstAttribute="width" constant="48" id="MeC-cf-abQ"/>
<constraint firstAttribute="height" constant="48" id="VAO-nl-ZmQ"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="shouldShowHotSpot" value="YES"/>
<userDefinedRuntimeAttribute type="boolean" keyPath="shouldAllowDragging" value="YES"/>
</userDefinedRuntimeAttributes>
<connections>
<outlet property="delegate" destination="tMj-cQ-hK0" id="YBU-cQ-gUX"/>
</connections>
</customView>
</subviews>
<constraints>
<constraint firstItem="CWo-oD-OZX" firstAttribute="top" secondItem="G3t-wd-E5Y" secondAttribute="bottom" constant="8" id="3wX-8h-O6z"/>
<constraint firstItem="D5V-CV-BuE" firstAttribute="top" secondItem="rms-zC-s1M" secondAttribute="top" id="43J-XT-GHl"/>
<constraint firstItem="Dm8-Mj-s5f" firstAttribute="top" secondItem="yz7-y5-TxE" secondAttribute="top" id="4iw-ff-qi7"/>
<constraint firstItem="aso-MD-Alm" firstAttribute="top" secondItem="zEj-zS-uzh" secondAttribute="bottom" constant="8" symbolic="YES" id="5Wt-dl-pef"/>
<constraint firstItem="rms-zC-s1M" firstAttribute="leading" secondItem="VbK-WJ-M0L" secondAttribute="leading" id="5dM-sY-h4p"/>
<constraint firstItem="j7v-U4-eMe" firstAttribute="leading" secondItem="wdB-yr-r6Y" secondAttribute="leading" id="7xA-ei-9JR"/>
<constraint firstItem="zEj-zS-uzh" firstAttribute="leading" secondItem="D5V-CV-BuE" secondAttribute="leading" id="8Cv-6e-Tzx"/>
<constraint firstItem="G3t-wd-E5Y" firstAttribute="height" secondItem="4hN-Nm-B7Z" secondAttribute="height" id="8qD-iY-MRu"/>
<constraint firstItem="G3t-wd-E5Y" firstAttribute="width" secondItem="ggE-Pd-aWo" secondAttribute="width" id="ASq-Gp-wuC"/>
<constraint firstItem="OAt-gN-EX5" firstAttribute="top" secondItem="wdB-yr-r6Y" secondAttribute="top" id="Adr-uG-x9t"/>
<constraint firstItem="4hN-Nm-B7Z" firstAttribute="leading" secondItem="G3t-wd-E5Y" secondAttribute="trailing" constant="8" id="AlK-6b-Sni"/>
<constraint firstItem="j7v-U4-eMe" firstAttribute="top" secondItem="wdB-yr-r6Y" secondAttribute="bottom" constant="8" id="BW4-UU-kQB"/>
<constraint firstItem="75v-aw-FbU" firstAttribute="centerX" secondItem="j7v-U4-eMe" secondAttribute="centerX" id="ClP-It-NEr"/>
<constraint firstItem="D5V-CV-BuE" firstAttribute="top" secondItem="Dm8-Mj-s5f" secondAttribute="bottom" constant="8" symbolic="YES" id="EWh-4Q-i3w"/>
<constraint firstItem="rms-zC-s1M" firstAttribute="leading" secondItem="D5V-CV-BuE" secondAttribute="trailing" constant="8" symbolic="YES" id="JaG-3Y-FgQ"/>
<constraint firstItem="Hoi-Pr-5wz" firstAttribute="centerX" secondItem="ggE-Pd-aWo" secondAttribute="centerX" id="Lm2-Ms-dVL"/>
<constraint firstItem="rms-zC-s1M" firstAttribute="trailing" secondItem="yz7-y5-TxE" secondAttribute="trailing" id="MKf-wc-NLL"/>
<constraint firstItem="G3t-wd-E5Y" firstAttribute="top" secondItem="ggE-Pd-aWo" secondAttribute="top" id="NM5-rE-34J"/>
<constraint firstItem="Qcr-83-Tz0" firstAttribute="leading" secondItem="aso-MD-Alm" secondAttribute="trailing" constant="8" symbolic="YES" id="NO1-Yp-z3e"/>
<constraint firstItem="G3t-wd-E5Y" firstAttribute="width" secondItem="j7v-U4-eMe" secondAttribute="width" id="NvM-wM-1NF"/>
<constraint firstItem="OAt-gN-EX5" firstAttribute="width" secondItem="aso-MD-Alm" secondAttribute="width" id="PX5-Da-w21"/>
<constraint firstItem="Dm8-Mj-s5f" firstAttribute="top" secondItem="o0X-1i-ZgL" secondAttribute="top" constant="20" symbolic="YES" id="R6W-ih-OYh"/>
<constraint firstItem="zEj-zS-uzh" firstAttribute="leading" secondItem="aso-MD-Alm" secondAttribute="leading" id="RsR-Ul-Ou2"/>
<constraint firstItem="D5V-CV-BuE" firstAttribute="leading" secondItem="Dm8-Mj-s5f" secondAttribute="leading" id="S08-SQ-GJR"/>
<constraint firstItem="Qcr-83-Tz0" firstAttribute="top" secondItem="aso-MD-Alm" secondAttribute="top" id="SxH-Ps-hpM"/>
<constraint firstItem="VbK-WJ-M0L" firstAttribute="leading" secondItem="zEj-zS-uzh" secondAttribute="trailing" constant="8" symbolic="YES" id="UXO-ZW-ccB"/>
<constraint firstItem="ggE-Pd-aWo" firstAttribute="leading" secondItem="j7v-U4-eMe" secondAttribute="trailing" constant="8" id="VHK-Y8-lMy"/>
<constraint firstItem="VbK-WJ-M0L" firstAttribute="trailing" secondItem="rms-zC-s1M" secondAttribute="trailing" id="Vxm-cc-Nuz"/>
<constraint firstItem="wdB-yr-r6Y" firstAttribute="leading" secondItem="OAt-gN-EX5" secondAttribute="trailing" constant="8" symbolic="YES" id="WLf-wT-t5d"/>
<constraint firstItem="zEj-zS-uzh" firstAttribute="top" secondItem="D5V-CV-BuE" secondAttribute="bottom" constant="8" symbolic="YES" id="X0Y-Zf-ilJ"/>
<constraint firstItem="wdB-yr-r6Y" firstAttribute="trailing" secondItem="Qcr-83-Tz0" secondAttribute="trailing" id="Yac-TY-Rux"/>
<constraint firstItem="75v-aw-FbU" firstAttribute="top" secondItem="j7v-U4-eMe" secondAttribute="bottom" constant="8" id="Yah-L4-Jlp"/>
<constraint firstItem="Dm8-Mj-s5f" firstAttribute="leading" secondItem="o0X-1i-ZgL" secondAttribute="leading" constant="20" symbolic="YES" id="ZQi-nH-fRj"/>
<constraint firstItem="CWo-oD-OZX" firstAttribute="centerX" secondItem="G3t-wd-E5Y" secondAttribute="centerX" id="ZcC-5o-S4M"/>
<constraint firstItem="G3t-wd-E5Y" firstAttribute="width" secondItem="4hN-Nm-B7Z" secondAttribute="width" id="bMf-aA-2io"/>
<constraint firstItem="Qcr-83-Tz0" firstAttribute="trailing" secondItem="VbK-WJ-M0L" secondAttribute="trailing" id="e7u-an-cyO"/>
<constraint firstItem="Ryz-mP-wNx" firstAttribute="top" secondItem="4hN-Nm-B7Z" secondAttribute="bottom" constant="8" id="eDV-Li-crv"/>
<constraint firstItem="yz7-y5-TxE" firstAttribute="leading" secondItem="Dm8-Mj-s5f" secondAttribute="trailing" constant="8" symbolic="YES" id="etw-9O-zNS"/>
<constraint firstItem="VbK-WJ-M0L" firstAttribute="leading" secondItem="Qcr-83-Tz0" secondAttribute="leading" id="gnA-Qx-Vmj"/>
<constraint firstItem="G3t-wd-E5Y" firstAttribute="height" secondItem="ggE-Pd-aWo" secondAttribute="height" id="huK-Kq-0Iu"/>
<constraint firstItem="G3t-wd-E5Y" firstAttribute="leading" secondItem="ggE-Pd-aWo" secondAttribute="trailing" constant="8" id="i75-6i-VPd"/>
<constraint firstItem="OAt-gN-EX5" firstAttribute="top" secondItem="aso-MD-Alm" secondAttribute="bottom" constant="8" id="itU-V0-MaU"/>
<constraint firstItem="Ryz-mP-wNx" firstAttribute="centerX" secondItem="4hN-Nm-B7Z" secondAttribute="centerX" id="jGh-SC-Nxg"/>
<constraint firstItem="zEj-zS-uzh" firstAttribute="top" secondItem="VbK-WJ-M0L" secondAttribute="top" id="k7D-La-IeE"/>
<constraint firstItem="wdB-yr-r6Y" firstAttribute="top" secondItem="Qcr-83-Tz0" secondAttribute="bottom" constant="3" id="kIE-fx-9LE"/>
<constraint firstItem="G3t-wd-E5Y" firstAttribute="height" secondItem="j7v-U4-eMe" secondAttribute="height" id="kyf-78-kT0"/>
<constraint firstItem="G3t-wd-E5Y" firstAttribute="top" secondItem="j7v-U4-eMe" secondAttribute="top" id="lhV-oy-6Mm"/>
<constraint firstItem="OAt-gN-EX5" firstAttribute="leading" secondItem="aso-MD-Alm" secondAttribute="leading" id="lp9-nD-Nnz"/>
<constraint firstItem="wdB-yr-r6Y" firstAttribute="width" secondItem="Qcr-83-Tz0" secondAttribute="width" id="lyT-KO-eXf"/>
<constraint firstItem="yz7-y5-TxE" firstAttribute="leading" secondItem="rms-zC-s1M" secondAttribute="leading" id="thH-qo-cIr"/>
<constraint firstItem="G3t-wd-E5Y" firstAttribute="top" secondItem="4hN-Nm-B7Z" secondAttribute="top" id="tvs-VW-0YR"/>
<constraint firstAttribute="trailing" secondItem="yz7-y5-TxE" secondAttribute="trailing" constant="20" symbolic="YES" id="wma-6s-J2b"/>
<constraint firstItem="Hoi-Pr-5wz" firstAttribute="top" secondItem="ggE-Pd-aWo" secondAttribute="bottom" constant="8" id="wr2-0t-CVH"/>
</constraints>
<connections>
<outlet property="nextKeyView" destination="yz7-y5-TxE" id="WHy-Vl-LGY"/>
</connections>
</customView>
<menu id="vy8-Pj-2Jg">
<items>
<menuItem title="New Cursor" tag="-1" id="KQs-oD-CRg">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="addAction:" target="oUs-Nv-PHw" id="Vbo-8k-sGO"/>
</connections>
</menuItem>
<menuItem title="Remove Cursor" tag="-1" id="gnE-s8-eO8">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="removeAction:" target="oUs-Nv-PHw" id="QmX-eg-rb3"/>
<binding destination="oUs-Nv-PHw" name="enabled" keyPath="selectedObject" id="v5P-WH-Wea">
<dictionary key="options">
<string key="NSValueTransformerName">NSIsNotNil</string>
</dictionary>
</binding>
</connections>
</menuItem>
<menuItem title="Duplicate" tag="-1" id="swO-bv-qRE">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="duplicateAction:" target="oUs-Nv-PHw" id="z4d-84-N6g"/>
<binding destination="oUs-Nv-PHw" name="enabled" keyPath="selectedObject" id="Q5o-HW-cMv">
<dictionary key="options">
<string key="NSValueTransformerName">NSIsNotNil</string>
</dictionary>
</binding>
</connections>
</menuItem>
</items>
</menu>
</objects>
<resources>
<image name="NSAddTemplate" width="11" height="11"/>
<image name="NSRemoveTemplate" width="11" height="11"/>
</resources>
</document>
@@ -0,0 +1,303 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="16096" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="16096"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="MCLibraryWindowController">
<connections>
<outlet property="appliedAccessory" destination="3Ui-b0-Yod" id="2Ik-Bo-djE"/>
<outlet property="libraryViewController" destination="zL4-Ay-t4Q" id="DE1-rb-MWQ"/>
<outlet property="progressBar" destination="F5l-qD-fvC" id="VNK-If-Tfi"/>
<outlet property="progressField" destination="Ui8-vk-7P8" id="Esy-lZ-9RN"/>
<outlet property="window" destination="1" id="3"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<window title="Mousecape" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" frameAutosaveName="LibraryWindow" animationBehavior="default" id="1">
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
<rect key="contentRect" x="196" y="240" width="711" height="311"/>
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
<value key="minSize" type="size" width="502" height="310"/>
<view key="contentView" id="2">
<rect key="frame" x="0.0" y="0.0" width="711" height="311"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<scrollView canDrawConcurrently="YES" borderType="none" autohidesScrollers="YES" horizontalLineScroll="84" horizontalPageScroll="10" verticalLineScroll="84" verticalPageScroll="10" translatesAutoresizingMaskIntoConstraints="NO" id="2Io-MC-n6O" customClass="BTRScrollView">
<rect key="frame" x="0.0" y="0.0" width="711" height="311"/>
<clipView key="contentView" copiesOnScroll="NO" id="VhH-tn-4Sf" customClass="BTRClipView">
<rect key="frame" x="0.0" y="0.0" width="711" height="311"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" alternatingRowBackgroundColors="YES" columnReordering="NO" columnResizing="NO" multipleSelection="NO" emptySelection="NO" autosaveColumns="NO" typeSelect="NO" rowHeight="72" rowSizeStyle="automatic" viewBased="YES" id="dPn-85-uPK">
<rect key="frame" x="0.0" y="0.0" width="711" height="311"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<size key="intercellSpacing" width="3" height="12"/>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
<tableColumns>
<tableColumn width="708" minWidth="40" maxWidth="9999" id="CBK-sD-upn">
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left">
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" white="0.33333298560000002" alpha="1" colorSpace="calibratedWhite"/>
</tableHeaderCell>
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" alignment="left" title="Text Cell" id="bXC-ob-CUQ">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES"/>
<prototypeCellViews>
<tableCellView id="syZ-Eq-Lt2" customClass="MCCapeCellView">
<rect key="frame" x="1" y="6" width="708" height="72"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="Hfe-RO-hVE">
<rect key="frame" x="18" y="56" width="96" height="16"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="0kt-g0-cQb">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="syZ-Eq-Lt2" name="value" keyPath="objectValue.name" id="YHc-x9-wXk"/>
</connections>
</textField>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="jdV-zx-iTs">
<rect key="frame" x="634" y="52" width="16" height="16"/>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="applied" id="bwh-k2-aAS"/>
</imageView>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="QMa-EX-Son">
<rect key="frame" x="658" y="51" width="30" height="18"/>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="HDTemplate" id="LsJ-S8-jwy"/>
<connections>
<binding destination="syZ-Eq-Lt2" name="value" keyPath="objectValue.hiDPI" id="LcB-QZ-MhG">
<dictionary key="options">
<string key="NSValueTransformerName">MCHDValueTransformer</string>
</dictionary>
</binding>
</connections>
</imageView>
<scrollView canDrawConcurrently="YES" autohidesScrollers="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasVerticalScroller="NO" verticalScrollElasticity="none" translatesAutoresizingMaskIntoConstraints="NO" id="odP-lr-hJH" customClass="DTScrollView">
<rect key="frame" x="20" y="4" width="668" height="44"/>
<clipView key="contentView" copiesOnScroll="NO" id="pc3-Zb-Oqk">
<rect key="frame" x="1" y="1" width="666" height="42"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<collectionView id="dyM-T9-60O">
<rect key="frame" x="0.0" y="0.0" width="666" height="42"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="primaryBackgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
</collectionView>
</subviews>
</clipView>
<constraints>
<constraint firstAttribute="height" constant="44" id="KzC-9x-FvO"/>
</constraints>
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="mwj-HT-8PV">
<rect key="frame" x="1" y="144" width="233" height="15"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="cCy-Hj-b5W">
<rect key="frame" x="-100" y="-100" width="15" height="143"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
</scrollView>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="OUy-kz-p7o">
<rect key="frame" x="118" y="58" width="15" height="11"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="by" id="jWt-I0-CSL">
<font key="font" metaFont="label" size="9"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="bEa-BS-ghQ">
<rect key="frame" x="133" y="56" width="49" height="14"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Subtitle" id="NXa-Ze-OX2">
<font key="font" metaFont="smallSystemBold"/>
<color key="textColor" name="headerColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="syZ-Eq-Lt2" name="value" keyPath="objectValue.author" id="D3x-S0-YIW"/>
</connections>
</textField>
</subviews>
<constraints>
<constraint firstItem="Hfe-RO-hVE" firstAttribute="leading" secondItem="syZ-Eq-Lt2" secondAttribute="leading" constant="20" symbolic="YES" id="OHp-3c-ujO"/>
<constraint firstItem="QMa-EX-Son" firstAttribute="leading" secondItem="jdV-zx-iTs" secondAttribute="trailing" constant="8" symbolic="YES" id="QfE-A7-Oc8"/>
<constraint firstItem="jdV-zx-iTs" firstAttribute="centerY" secondItem="QMa-EX-Son" secondAttribute="centerY" id="YLI-IS-v1N"/>
<constraint firstItem="bEa-BS-ghQ" firstAttribute="firstBaseline" secondItem="OUy-kz-p7o" secondAttribute="firstBaseline" id="Yif-mq-VLO"/>
<constraint firstItem="bEa-BS-ghQ" firstAttribute="baseline" secondItem="Hfe-RO-hVE" secondAttribute="baseline" id="bCc-gQ-FVG"/>
<constraint firstItem="bEa-BS-ghQ" firstAttribute="leading" secondItem="OUy-kz-p7o" secondAttribute="trailing" constant="4" id="eYj-8T-6Xr"/>
<constraint firstItem="OUy-kz-p7o" firstAttribute="leading" secondItem="Hfe-RO-hVE" secondAttribute="trailing" constant="8" id="eeG-7o-lDi"/>
<constraint firstAttribute="trailing" secondItem="odP-lr-hJH" secondAttribute="trailing" constant="20" symbolic="YES" id="fnI-G1-FZh"/>
<constraint firstItem="odP-lr-hJH" firstAttribute="leading" secondItem="syZ-Eq-Lt2" secondAttribute="leading" constant="20" symbolic="YES" id="joq-b0-pEr"/>
<constraint firstAttribute="trailing" secondItem="QMa-EX-Son" secondAttribute="trailing" constant="20" symbolic="YES" id="oL8-Zy-vvE"/>
<constraint firstItem="QMa-EX-Son" firstAttribute="top" secondItem="syZ-Eq-Lt2" secondAttribute="top" constant="3" id="oPR-SR-Gh8"/>
<constraint firstItem="odP-lr-hJH" firstAttribute="top" secondItem="Hfe-RO-hVE" secondAttribute="bottom" constant="8" symbolic="YES" id="r5F-n8-O3W"/>
<constraint firstItem="Hfe-RO-hVE" firstAttribute="top" secondItem="syZ-Eq-Lt2" secondAttribute="top" id="wWd-7q-n1a"/>
<constraint firstItem="OUy-kz-p7o" firstAttribute="firstBaseline" secondItem="Hfe-RO-hVE" secondAttribute="firstBaseline" id="yX1-CS-CfT"/>
</constraints>
<connections>
<outlet property="appliedImageView" destination="jdV-zx-iTs" id="4DM-pV-X1T"/>
<outlet property="collectionView" destination="dyM-T9-60O" id="eOd-8D-OEK"/>
<outlet property="resolutionImageView" destination="QMa-EX-Son" id="Tr1-E9-rir"/>
<outlet property="subtitleField" destination="bEa-BS-ghQ" id="yeA-RV-Aoi"/>
<outlet property="textField" destination="Hfe-RO-hVE" id="LWw-Ls-hnr"/>
<outlet property="titleField" destination="Hfe-RO-hVE" id="y7O-VO-62y"/>
</connections>
</tableCellView>
</prototypeCellViews>
</tableColumn>
</tableColumns>
<connections>
<outlet property="dataSource" destination="zL4-Ay-t4Q" id="0iM-HK-P70"/>
<outlet property="delegate" destination="zL4-Ay-t4Q" id="riV-4x-e3X"/>
<outlet property="menu" destination="zpf-M9-Nd1" id="lfG-VA-TTS"/>
</connections>
</tableView>
</subviews>
</clipView>
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="uK0-YP-77b">
<autoresizingMask key="autoresizingMask"/>
</scroller>
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="q1a-eU-6AV">
<autoresizingMask key="autoresizingMask"/>
</scroller>
</scrollView>
</subviews>
<constraints>
<constraint firstAttribute="bottom" secondItem="2Io-MC-n6O" secondAttribute="bottom" id="Cbd-gK-nbr"/>
<constraint firstItem="2Io-MC-n6O" firstAttribute="top" secondItem="2" secondAttribute="top" id="GZN-yG-wKe"/>
<constraint firstAttribute="trailing" secondItem="2Io-MC-n6O" secondAttribute="trailing" id="Nej-8C-Hrd"/>
<constraint firstItem="2Io-MC-n6O" firstAttribute="leading" secondItem="2" secondAttribute="leading" id="chC-8B-nJc"/>
</constraints>
</view>
<connections>
<outlet property="delegate" destination="-2" id="4"/>
</connections>
<point key="canvasLocation" x="-39" y="187"/>
</window>
<viewController title="Library" id="zL4-Ay-t4Q" customClass="MCLibraryViewController">
<connections>
<outlet property="contextMenu" destination="zpf-M9-Nd1" id="jgh-ez-9dF"/>
<outlet property="tableView" destination="dPn-85-uPK" id="Gbg-WA-ju6"/>
<outlet property="view" destination="2" id="zf4-7d-uPj"/>
</connections>
</viewController>
<menu id="zpf-M9-Nd1">
<items>
<menuItem title="Apply" tag="-1" id="aI1-E0-bnW">
<string key="keyEquivalent" base64-UTF8="YES">
DQ
</string>
<connections>
<action selector="applyCapeAction:" target="-1" id="KHK-0n-gS3"/>
</connections>
</menuItem>
<menuItem title="Edit" tag="-1" keyEquivalent="e" id="HJc-SX-JjZ">
<connections>
<action selector="editCapeAction:" target="-1" id="xUA-Zj-ToX"/>
</connections>
</menuItem>
<menuItem title="Duplicate" tag="-1" keyEquivalent="S" id="PhG-Ll-nqz">
<connections>
<action selector="duplicateCapeAction:" target="-1" id="3xf-LP-P1p"/>
</connections>
</menuItem>
<menuItem title="Remove" tag="-1" id="Aig-wl-ivn">
<string key="keyEquivalent" base64-UTF8="YES">
CA
</string>
<connections>
<action selector="removeCapeAction:" target="-1" id="Psf-74-zsG"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="A7P-y0-FBc"/>
<menuItem title="Show in Finder" tag="-1" id="2WM-EN-kiI">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="showCapeAction:" target="-1" id="iF0-eu-Du4"/>
</connections>
</menuItem>
</items>
<point key="canvasLocation" x="9" y="-116"/>
</menu>
<customView id="3Ui-b0-Yod" userLabel="Accessory">
<rect key="frame" x="0.0" y="0.0" width="251" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="cSP-XN-7we">
<rect key="frame" x="-2" y="4" width="245" height="14"/>
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" alignment="right" title="Applied Cursor: None" usesSingleLineMode="YES" id="vZ3-2R-psO">
<font key="font" metaFont="message" size="11"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="backgroundStyle">
<integer key="value" value="2"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</textFieldCell>
<connections>
<binding destination="zL4-Ay-t4Q" name="value" keyPath="libraryController.appliedCape.name" id="tSr-qw-vw1">
<dictionary key="options">
<string key="NSValueTransformerName">MCAppliedCapeValueTransformer</string>
</dictionary>
</binding>
</connections>
</textField>
</subviews>
<constraints>
<constraint firstAttribute="trailing" secondItem="cSP-XN-7we" secondAttribute="trailing" constant="10" id="OsL-1s-qgU"/>
<constraint firstItem="cSP-XN-7we" firstAttribute="centerY" secondItem="3Ui-b0-Yod" secondAttribute="centerY" id="U7A-WI-2JG"/>
<constraint firstItem="cSP-XN-7we" firstAttribute="leading" secondItem="3Ui-b0-Yod" secondAttribute="leading" id="eoA-bD-pz5"/>
</constraints>
<point key="canvasLocation" x="499" y="-594"/>
</customView>
<view id="smV-Cs-4aH">
<rect key="frame" x="0.0" y="0.0" width="100" height="100"/>
<autoresizingMask key="autoresizingMask"/>
<point key="canvasLocation" x="499" y="-311"/>
</view>
<window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" hidesOnDeactivate="YES" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="DeD-dq-yBF" customClass="NSPanel">
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES" utility="YES"/>
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
<rect key="contentRect" x="272" y="172" width="452" height="58"/>
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
<view key="contentView" id="me1-hA-pTT">
<rect key="frame" x="0.0" y="0.0" width="452" height="58"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<progressIndicator maxValue="100" indeterminate="YES" style="bar" translatesAutoresizingMaskIntoConstraints="NO" id="F5l-qD-fvC">
<rect key="frame" x="15" y="19" width="348" height="20"/>
</progressIndicator>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Ui8-vk-7P8">
<rect key="frame" x="369" y="22" width="70" height="16"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="000 of 129" id="sq0-HM-mp6">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</subviews>
<constraints>
<constraint firstItem="F5l-qD-fvC" firstAttribute="leading" secondItem="me1-hA-pTT" secondAttribute="leading" constant="15" id="1rr-uN-NwK"/>
<constraint firstItem="F5l-qD-fvC" firstAttribute="centerY" secondItem="Ui8-vk-7P8" secondAttribute="centerY" constant="0.5" id="FgD-90-fQk"/>
<constraint firstAttribute="trailing" secondItem="Ui8-vk-7P8" secondAttribute="trailing" constant="15" id="OgP-qZ-5ss"/>
<constraint firstItem="Ui8-vk-7P8" firstAttribute="leading" secondItem="F5l-qD-fvC" secondAttribute="trailing" constant="8" id="Q6O-6O-84O"/>
<constraint firstAttribute="centerY" secondItem="F5l-qD-fvC" secondAttribute="centerY" id="yZk-CB-OJj"/>
</constraints>
</view>
<point key="canvasLocation" x="499" y="-470"/>
</window>
</objects>
<resources>
<image name="HDTemplate" width="30" height="18"/>
<image name="applied" width="16" height="16"/>
</resources>
</document>
@@ -0,0 +1,431 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="6185.11" systemVersion="13E28" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="6185.11"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="NSApplication">
<connections>
<outlet property="delegate" destination="494" id="495"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<menu title="AMainMenu" systemMenu="main" id="29">
<items>
<menuItem title="Mousecape" id="56">
<menu key="submenu" title="Mousecape" systemMenu="apple" id="57">
<items>
<menuItem title="About Mousecape" id="58">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="orderFrontStandardAboutPanel:" target="-2" id="142"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="236">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
<menuItem title="Preferences…" keyEquivalent="," id="129">
<connections>
<action selector="showPreferences:" target="-1" id="lNW-tH-IKS"/>
</connections>
</menuItem>
<menuItem title="Check for Updates..." id="igk-i0-oH0">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="checkForUpdates:" target="1HC-av-0d2" id="TKL-G4-NhR"/>
</connections>
</menuItem>
<menuItem title="Install Helper Tool" id="Ui2-VN-tbP">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleInstall:" target="-1" id="Ppc-Jw-bxU"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="143">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
<menuItem title="Services" id="131">
<menu key="submenu" title="Services" systemMenu="services" id="130"/>
</menuItem>
<menuItem isSeparatorItem="YES" id="144">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
<menuItem title="Hide Mousecape" keyEquivalent="h" id="134">
<connections>
<action selector="hide:" target="-1" id="367"/>
</connections>
</menuItem>
<menuItem title="Hide Others" keyEquivalent="h" id="145">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections>
<action selector="hideOtherApplications:" target="-1" id="368"/>
</connections>
</menuItem>
<menuItem title="Show All" id="150">
<connections>
<action selector="unhideAllApplications:" target="-1" id="370"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="149">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
<menuItem title="Quit Mousecape" keyEquivalent="q" id="136">
<connections>
<action selector="terminate:" target="-3" id="449"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="File" id="83">
<menu key="submenu" title="File" id="81">
<items>
<menuItem title="New Cape" keyEquivalent="n" id="82">
<connections>
<action selector="newDocument:" target="-1" id="I3c-Gd-Cqc"/>
</connections>
</menuItem>
<menuItem title="Import Cape" keyEquivalent="o" id="kdx-d9-Lek">
<connections>
<action selector="openDocument:" target="-1" id="2Qd-t2-zEv"/>
</connections>
</menuItem>
<menuItem title="Import MightyMouse" keyEquivalent="i" id="l3B-n8-21Z">
<connections>
<action selector="convertCape:" target="494" id="vs2-8F-92y"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="79">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
<menuItem title="Close" keyEquivalent="w" id="73">
<connections>
<action selector="performClose:" target="-1" id="193"/>
</connections>
</menuItem>
<menuItem title="Save…" keyEquivalent="s" id="75">
<connections>
<action selector="saveDocument:" target="-1" id="362"/>
</connections>
</menuItem>
<menuItem title="Revert to Saved" id="112">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="revertDocumentToSaved:" target="-1" id="364"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Edit" id="217">
<menu key="submenu" title="Edit" id="205">
<items>
<menuItem title="Undo" keyEquivalent="z" id="207">
<connections>
<action selector="undo:" target="-1" id="223"/>
</connections>
</menuItem>
<menuItem title="Redo" keyEquivalent="Z" id="215">
<modifierMask key="keyEquivalentModifierMask" shift="YES" command="YES"/>
<connections>
<action selector="redo:" target="-1" id="231"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="206">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
<menuItem title="Cut" keyEquivalent="x" id="199">
<connections>
<action selector="cut:" target="-1" id="228"/>
</connections>
</menuItem>
<menuItem title="Copy" keyEquivalent="c" id="197">
<connections>
<action selector="copy:" target="-1" id="224"/>
</connections>
</menuItem>
<menuItem title="Paste" keyEquivalent="v" id="203">
<connections>
<action selector="paste:" target="-1" id="226"/>
</connections>
</menuItem>
<menuItem title="Paste and Match Style" keyEquivalent="V" id="485">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections>
<action selector="pasteAsPlainText:" target="-1" id="486"/>
</connections>
</menuItem>
<menuItem title="Delete" id="202">
<connections>
<action selector="delete:" target="-1" id="235"/>
</connections>
</menuItem>
<menuItem title="Select All" keyEquivalent="a" id="198">
<connections>
<action selector="selectAll:" target="-1" id="232"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="214">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
<menuItem title="Find" id="218">
<menu key="submenu" title="Find" id="220">
<items>
<menuItem title="Find…" tag="1" keyEquivalent="f" id="209">
<connections>
<action selector="performFindPanelAction:" target="-1" id="241"/>
</connections>
</menuItem>
<menuItem title="Find and Replace…" tag="12" keyEquivalent="f" id="534">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections>
<action selector="performFindPanelAction:" target="-1" id="535"/>
</connections>
</menuItem>
<menuItem title="Find Next" tag="2" keyEquivalent="g" id="208">
<connections>
<action selector="performFindPanelAction:" target="-1" id="487"/>
</connections>
</menuItem>
<menuItem title="Find Previous" tag="3" keyEquivalent="G" id="213">
<modifierMask key="keyEquivalentModifierMask" shift="YES" command="YES"/>
<connections>
<action selector="performFindPanelAction:" target="-1" id="488"/>
</connections>
</menuItem>
<menuItem title="Use Selection for Find" tag="7" id="221">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="performFindPanelAction:" target="-1" id="489"/>
</connections>
</menuItem>
<menuItem title="Jump to Selection" keyEquivalent="j" id="210">
<connections>
<action selector="centerSelectionInVisibleArea:" target="-1" id="245"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Spelling and Grammar" id="216">
<menu key="submenu" title="Spelling and Grammar" id="200">
<items>
<menuItem title="Show Spelling and Grammar" keyEquivalent=":" id="204">
<connections>
<action selector="showGuessPanel:" target="-1" id="230"/>
</connections>
</menuItem>
<menuItem title="Check Document Now" keyEquivalent=";" id="201">
<connections>
<action selector="checkSpelling:" target="-1" id="225"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="453"/>
<menuItem title="Check Spelling While Typing" id="219">
<connections>
<action selector="toggleContinuousSpellChecking:" target="-1" id="222"/>
</connections>
</menuItem>
<menuItem title="Check Grammar With Spelling" id="346">
<connections>
<action selector="toggleGrammarChecking:" target="-1" id="347"/>
</connections>
</menuItem>
<menuItem title="Correct Spelling Automatically" id="454">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticSpellingCorrection:" target="-1" id="456"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Substitutions" id="348">
<menu key="submenu" title="Substitutions" id="349">
<items>
<menuItem title="Show Substitutions" id="457">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="orderFrontSubstitutionsPanel:" target="-1" id="458"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="459"/>
<menuItem title="Smart Copy/Paste" tag="1" keyEquivalent="f" id="350">
<connections>
<action selector="toggleSmartInsertDelete:" target="-1" id="355"/>
</connections>
</menuItem>
<menuItem title="Smart Quotes" tag="2" keyEquivalent="g" id="351">
<connections>
<action selector="toggleAutomaticQuoteSubstitution:" target="-1" id="356"/>
</connections>
</menuItem>
<menuItem title="Smart Dashes" id="460">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticDashSubstitution:" target="-1" id="461"/>
</connections>
</menuItem>
<menuItem title="Smart Links" tag="3" keyEquivalent="G" id="354">
<modifierMask key="keyEquivalentModifierMask" shift="YES" command="YES"/>
<connections>
<action selector="toggleAutomaticLinkDetection:" target="-1" id="357"/>
</connections>
</menuItem>
<menuItem title="Text Replacement" id="462">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticTextReplacement:" target="-1" id="463"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Transformations" id="450">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Transformations" id="451">
<items>
<menuItem title="Make Upper Case" id="452">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="uppercaseWord:" target="-1" id="464"/>
</connections>
</menuItem>
<menuItem title="Make Lower Case" id="465">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="lowercaseWord:" target="-1" id="468"/>
</connections>
</menuItem>
<menuItem title="Capitalize" id="466">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="capitalizeWord:" target="-1" id="467"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Speech" id="211">
<menu key="submenu" title="Speech" id="212">
<items>
<menuItem title="Start Speaking" id="196">
<connections>
<action selector="startSpeaking:" target="-1" id="233"/>
</connections>
</menuItem>
<menuItem title="Stop Speaking" id="195">
<connections>
<action selector="stopSpeaking:" target="-1" id="227"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Capes" id="g8O-f8-aKi">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Capes" id="ttR-pS-Pk1">
<items>
<menuItem title="Apply Cape" id="ieJ-T1-eH7">
<string key="keyEquivalent" base64-UTF8="YES">
DQ
</string>
<connections>
<action selector="applyCapeAction:" target="-1" id="RAI-pM-j7M"/>
</connections>
</menuItem>
<menuItem title="Edit Cape" keyEquivalent="e" id="5qb-Dw-38q">
<connections>
<action selector="editCapeAction:" target="-1" id="E2d-D2-Hj9"/>
</connections>
</menuItem>
<menuItem title="Remove Cape" id="LHh-1u-bK8">
<string key="keyEquivalent" base64-UTF8="YES">
CA
</string>
<connections>
<action selector="removeCapeAction:" target="-1" id="RE5-YE-iAt"/>
</connections>
</menuItem>
<menuItem title="Duplicate Cape" keyEquivalent="S" id="d9b-6w-ubr">
<connections>
<action selector="duplicateCapeAction:" target="-1" id="Nj7-Uf-gOO"/>
</connections>
</menuItem>
<menuItem title="Check for Updates" hidden="YES" keyEquivalent="u" id="XTi-86-ese">
<connections>
<action selector="checkCapeAction:" target="-1" id="q4O-FG-Rle"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="EOT-Rk-oU3"/>
<menuItem title="Show in Finder" id="PAd-kz-Eoi">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="showCapeAction:" target="-1" id="9mC-pd-eiq"/>
</connections>
</menuItem>
<menuItem title="Restore Defaults" keyEquivalent="r" id="uCE-YB-8VL">
<connections>
<action selector="restoreCape:" target="494" id="2ve-Ez-ktd"/>
</connections>
</menuItem>
<menuItem title="Dump Cursors…" id="CYY-iE-0bP">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="dumpCapeAction:" target="-1" id="B89-Hc-T1C"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Window" id="19">
<menu key="submenu" title="Window" systemMenu="window" id="24">
<items>
<menuItem title="Minimize" keyEquivalent="m" id="23">
<connections>
<action selector="performMiniaturize:" target="-1" id="37"/>
</connections>
</menuItem>
<menuItem title="Zoom" id="239">
<connections>
<action selector="performZoom:" target="-1" id="240"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="92">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
<menuItem title="Bring All to Front" id="5">
<connections>
<action selector="arrangeInFront:" target="-1" id="39"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Help" id="490">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Help" systemMenu="help" id="491">
<items>
<menuItem title="Mousecape Help" keyEquivalent="?" id="492">
<connections>
<action selector="showHelp:" target="-1" id="493"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
</items>
</menu>
<customObject id="494" customClass="MCAppDelegate">
<connections>
<outlet property="toggleHelperItem" destination="Ui2-VN-tbP" id="31d-Xd-wNX"/>
</connections>
</customObject>
<customObject id="420" customClass="NSFontManager"/>
<customObject id="1HC-av-0d2" customClass="SUUpdater"/>
</objects>
</document>
@@ -0,0 +1,32 @@
{\rtf1\ansi\ansicpg1252\cocoartf1671\cocoasubrtf100
{\fonttbl\f0\fswiss\fcharset0 Helvetica-Bold;\f1\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
{\*\expandedcolortbl;;}
\vieww9600\viewh8400\viewkind0
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\partightenfactor0
\f0\b\fs24 \cf0 Engineering:
\f1\b0 \
Alex Zielenski\
{\field{\*\fldinst{HYPERLINK "http://alexzielenski.com"}}{\fldrslt http://alexzielenski.com}}\
\
\f0\b Icon:\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc\partightenfactor0
\f1\b0 \cf0 Allan Nyholm Nielson\
{\field{\*\fldinst{HYPERLINK "https://www.deviantart.com/allannyholm"}}{\fldrslt https://www.deviantart.com/allannyholm}}\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\partightenfactor0
\cf0 \
\f0\b Testing:
\f1\b0 \
Justin Ayles\
\
\f0\b With special thanks to:
\f1\b0 \
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\partightenfactor0
{\field{\*\fldinst{HYPERLINK "http://maxrudberg.com"}}{\fldrslt \cf0 Max Rudberg}}\
Mom & Dad\
}
@@ -0,0 +1,2 @@
/* Localized versions of Info.plist keys */
@@ -0,0 +1,7 @@
/*
Localizable.strings
Mousecape
Created by Alexander Zielenski on 6/13/20.
Copyright © 2020 Alex Zielenski. All rights reserved.
*/
@@ -0,0 +1,4 @@
/* Bundle name */
"CFBundleName" = "com.alexzielenski.mousecloakhelper";
/* Copyright (human-readable) */
"NSHumanReadableCopyright" = "Copyright © 2014 Alex Zielenski. All rights reserved.";
@@ -0,0 +1,11 @@
{
"developmentRegion" : "en",
"targetLocale" : "en",
"toolInfo" : {
"toolBuildNumber" : "11E503a",
"toolID" : "com.apple.dt.xcode",
"toolName" : "Xcode",
"toolVersion" : "11.4.1"
},
"version" : "1.0"
}
+19 -9
View File
@@ -1,22 +1,32 @@
{\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf200
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\rtf1\ansi\ansicpg1252\cocoartf2512
\cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fswiss\fcharset0 Helvetica-Bold;\f1\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
{\*\expandedcolortbl;;}
\vieww9600\viewh8400\viewkind0
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\partightenfactor0
\f0\b\fs24 \cf0 Engineering:
\b0 \
\f1\b0 \
Alex Zielenski\
{\field{\*\fldinst{HYPERLINK "http://alexzielenski.com"}}{\fldrslt http://alexzielenski.com}}\
\
\b Testing:
\b0 \
\f0\b Icons and Testing:\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc\partightenfactor0
\f1\b0 \cf0 Allan Nyholm Nielsen\
{\field{\*\fldinst{HYPERLINK "https://www.deviantart.com/allannyholm"}}{\fldrslt https://www.deviantart.com/allannyholm}}\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\partightenfactor0
\cf0 \
\f0\b Testing:
\f1\b0 \
Justin Ayles\
\
\b With special thanks to:
\b0 \
{\field{\*\fldinst{HYPERLINK "http://maxrudberg.com"}}{\fldrslt Max Rudberg}}\
\f0\b With special thanks to:
\f1\b0 \
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\partightenfactor0
{\field{\*\fldinst{HYPERLINK "http://maxrudberg.com"}}{\fldrslt \cf0 Max Rudberg}}\
Mom & Dad\
}
+99
View File
@@ -0,0 +1,99 @@
/* Class = "NSWindow"; title = "Window"; ObjectID = "1"; */
"1.title" = "Window";
/* Class = "CocoaBindingsConnection"; ibShadowedIsNilPlaceholder = "Unknown"; ObjectID = "2aq-Lm-1Lm"; */
"2aq-Lm-1Lm.ibShadowedIsNilPlaceholder" = "Unknown";
/* Class = "CocoaBindingsConnection"; ibShadowedMultipleValuesPlaceholder = "Unknown"; ObjectID = "2aq-Lm-1Lm"; */
"2aq-Lm-1Lm.ibShadowedMultipleValuesPlaceholder" = "Unknown";
/* Class = "CocoaBindingsConnection"; ibShadowedNoSelectionPlaceholder = "Unknown"; ObjectID = "2aq-Lm-1Lm"; */
"2aq-Lm-1Lm.ibShadowedNoSelectionPlaceholder" = "Unknown";
/* Class = "CocoaBindingsConnection"; ibShadowedNotApplicablePlaceholder = "Unknown"; ObjectID = "2aq-Lm-1Lm"; */
"2aq-Lm-1Lm.ibShadowedNotApplicablePlaceholder" = "Unknown";
/* Class = "NSTextFieldCell"; title = "5x"; ObjectID = "4fS-Q1-prn"; */
"4fS-Q1-prn.title" = "5x";
/* Class = "NSTextFieldCell"; title = "Frame Duration:"; ObjectID = "5Wb-pc-8jV"; */
"5Wb-pc-8jV.title" = "Frame Duration:";
/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "8bB-Ws-20v"; */
"8bB-Ws-20v.title" = "Table View Cell";
/* Class = "NSTextFieldCell"; title = "10x"; ObjectID = "8fp-Ws-ruA"; */
"8fp-Ws-ruA.title" = "10x";
/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "8we-kW-bNk"; */
"8we-kW-bNk.title" = "Table View Cell";
/* Class = "NSTextFieldCell"; title = "Version:"; ObjectID = "98i-gH-tf4"; */
"98i-gH-tf4.title" = "Version:";
/* Class = "NSTextFieldCell"; placeholderString = "{0,0}"; ObjectID = "BWu-hw-sDX"; */
"BWu-hw-sDX.placeholderString" = "{0,0}";
/* Class = "NSViewController"; title = "Cape"; ObjectID = "Bu6-lg-x1j"; */
"Bu6-lg-x1j.title" = "Cape";
/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "EOd-L3-If3"; */
"EOd-L3-If3.title" = "Text Cell";
/* Class = "NSTextFieldCell"; title = "1x"; ObjectID = "FZ3-qB-kDI"; */
"FZ3-qB-kDI.title" = "1x";
/* Class = "NSTextFieldCell"; title = "Size:"; ObjectID = "FrC-7p-0Bq"; */
"FrC-7p-0Bq.title" = "Size:";
/* Class = "NSTextFieldCell"; title = "Frames:"; ObjectID = "G4c-OI-avP"; */
"G4c-OI-avP.title" = "Frames:";
/* Class = "NSTextFieldCell"; title = "Retina:"; ObjectID = "HFS-GR-guB"; */
"HFS-GR-guB.title" = "Retina:";
/* Class = "NSMenuItem"; title = "New Cursor"; ObjectID = "KQs-oD-CRg"; */
"KQs-oD-CRg.title" = "New Cursor";
/* Class = "NSTextFieldCell"; placeholderString = "{0,0}"; ObjectID = "OmM-g8-Kyd"; */
"OmM-g8-Kyd.placeholderString" = "{0,0}";
/* Class = "NSTextFieldCell"; title = "Author:"; ObjectID = "Oyi-AW-60U"; */
"Oyi-AW-60U.title" = "Author:";
/* Class = "NSTextFieldCell"; title = "2x"; ObjectID = "WI8-sV-4D6"; */
"WI8-sV-4D6.title" = "2x";
/* Class = "NSTextFieldCell"; title = "Identifier:"; ObjectID = "Xzj-Uq-4bW"; */
"Xzj-Uq-4bW.title" = "Identifier:";
/* Class = "NSTextFieldCell"; title = "Hot Spot:"; ObjectID = "dcq-3r-2DB"; */
"dcq-3r-2DB.title" = "Hot Spot:";
/* Class = "NSTextFieldCell"; title = "Type:"; ObjectID = "dy9-JM-4d7"; */
"dy9-JM-4d7.title" = "Type:";
/* Class = "NSMenuItem"; title = "Remove Cursor"; ObjectID = "gnE-s8-eO8"; */
"gnE-s8-eO8.title" = "Remove Cursor";
/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "j3S-Me-3x5"; */
"j3S-Me-3x5.title" = "OtherViews";
/* Class = "NSTextFieldCell"; title = "Name:"; ObjectID = "oMS-dL-nZj"; */
"oMS-dL-nZj.title" = "Name:";
/* Class = "NSViewController"; title = "List"; ObjectID = "oUs-Nv-PHw"; */
"oUs-Nv-PHw.title" = "List";
/* Class = "NSTextFieldCell"; placeholderString = "0.0"; ObjectID = "pqX-MB-QME"; */
"pqX-MB-QME.placeholderString" = "0.0";
/* Class = "NSMenuItem"; title = "Duplicate"; ObjectID = "swO-bv-qRE"; */
"swO-bv-qRE.title" = "Duplicate";
/* Class = "NSTextFieldCell"; placeholderString = "1"; ObjectID = "tKY-dX-ibT"; */
"tKY-dX-ibT.placeholderString" = "1";
/* Class = "NSViewController"; title = "Detail"; ObjectID = "tMj-cQ-hK0"; */
"tMj-cQ-hK0.title" = "Detail";
@@ -0,0 +1,42 @@
/* Class = "NSWindow"; title = "Mousecape"; ObjectID = "1"; */
"1.title" = "Mousecape";
/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "0kt-g0-cQb"; */
"0kt-g0-cQb.title" = "Table View Cell";
/* Class = "NSMenuItem"; title = "Show in Finder"; ObjectID = "2WM-EN-kiI"; */
"2WM-EN-kiI.title" = "Show in Finder";
/* Class = "NSMenuItem"; title = "Remove"; ObjectID = "Aig-wl-ivn"; */
"Aig-wl-ivn.title" = "Remove";
/* Class = "NSWindow"; title = "Window"; ObjectID = "DeD-dq-yBF"; */
"DeD-dq-yBF.title" = "Window";
/* Class = "NSMenuItem"; title = "Edit"; ObjectID = "HJc-SX-JjZ"; */
"HJc-SX-JjZ.title" = "Edit";
/* Class = "NSTextFieldCell"; title = "Subtitle"; ObjectID = "NXa-Ze-OX2"; */
"NXa-Ze-OX2.title" = "Subtitle";
/* Class = "NSMenuItem"; title = "Duplicate"; ObjectID = "PhG-Ll-nqz"; */
"PhG-Ll-nqz.title" = "Duplicate";
/* Class = "NSMenuItem"; title = "Apply"; ObjectID = "aI1-E0-bnW"; */
"aI1-E0-bnW.title" = "Apply";
/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "bXC-ob-CUQ"; */
"bXC-ob-CUQ.title" = "Text Cell";
/* Class = "NSTextFieldCell"; title = "by"; ObjectID = "jWt-I0-CSL"; */
"jWt-I0-CSL.title" = "by";
/* Class = "NSTextFieldCell"; title = "000 of 129"; ObjectID = "sq0-HM-mp6"; */
"sq0-HM-mp6.title" = "000 of 129";
/* Class = "NSTextFieldCell"; title = "Applied Cursor: None"; ObjectID = "vZ3-2R-psO"; */
"vZ3-2R-psO.title" = "Applied Cursor: None";
/* Class = "NSViewController"; title = "Library"; ObjectID = "zL4-Ay-t4Q"; */
"zL4-Ay-t4Q.title" = "Library";
@@ -0,0 +1,243 @@
/* Class = "NSMenuItem"; title = "Bring All to Front"; ObjectID = "5"; */
"5.title" = "Bring All to Front";
/* Class = "NSMenuItem"; title = "Window"; ObjectID = "19"; */
"19.title" = "Window";
/* Class = "NSMenuItem"; title = "Minimize"; ObjectID = "23"; */
"23.title" = "Minimize";
/* Class = "NSMenu"; title = "Window"; ObjectID = "24"; */
"24.title" = "Window";
/* Class = "NSMenu"; title = "AMainMenu"; ObjectID = "29"; */
"29.title" = "AMainMenu";
/* Class = "NSMenuItem"; title = "Mousecape"; ObjectID = "56"; */
"56.title" = "Mousecape";
/* Class = "NSMenu"; title = "Mousecape"; ObjectID = "57"; */
"57.title" = "Mousecape";
/* Class = "NSMenuItem"; title = "About Mousecape"; ObjectID = "58"; */
"58.title" = "About Mousecape";
/* Class = "NSMenuItem"; title = "Close"; ObjectID = "73"; */
"73.title" = "Close";
/* Class = "NSMenuItem"; title = "Save…"; ObjectID = "75"; */
"75.title" = "Save…";
/* Class = "NSMenu"; title = "File"; ObjectID = "81"; */
"81.title" = "File";
/* Class = "NSMenuItem"; title = "New Cape"; ObjectID = "82"; */
"82.title" = "New Cape";
/* Class = "NSMenuItem"; title = "File"; ObjectID = "83"; */
"83.title" = "File";
/* Class = "NSMenuItem"; title = "Revert to Saved"; ObjectID = "112"; */
"112.title" = "Revert to Saved";
/* Class = "NSMenuItem"; title = "Preferences…"; ObjectID = "129"; */
"129.title" = "Preferences…";
/* Class = "NSMenu"; title = "Services"; ObjectID = "130"; */
"130.title" = "Services";
/* Class = "NSMenuItem"; title = "Services"; ObjectID = "131"; */
"131.title" = "Services";
/* Class = "NSMenuItem"; title = "Hide Mousecape"; ObjectID = "134"; */
"134.title" = "Hide Mousecape";
/* Class = "NSMenuItem"; title = "Quit Mousecape"; ObjectID = "136"; */
"136.title" = "Quit Mousecape";
/* Class = "NSMenuItem"; title = "Hide Others"; ObjectID = "145"; */
"145.title" = "Hide Others";
/* Class = "NSMenuItem"; title = "Show All"; ObjectID = "150"; */
"150.title" = "Show All";
/* Class = "NSMenuItem"; title = "Stop Speaking"; ObjectID = "195"; */
"195.title" = "Stop Speaking";
/* Class = "NSMenuItem"; title = "Start Speaking"; ObjectID = "196"; */
"196.title" = "Start Speaking";
/* Class = "NSMenuItem"; title = "Copy"; ObjectID = "197"; */
"197.title" = "Copy";
/* Class = "NSMenuItem"; title = "Select All"; ObjectID = "198"; */
"198.title" = "Select All";
/* Class = "NSMenuItem"; title = "Cut"; ObjectID = "199"; */
"199.title" = "Cut";
/* Class = "NSMenu"; title = "Spelling and Grammar"; ObjectID = "200"; */
"200.title" = "Spelling and Grammar";
/* Class = "NSMenuItem"; title = "Check Document Now"; ObjectID = "201"; */
"201.title" = "Check Document Now";
/* Class = "NSMenuItem"; title = "Delete"; ObjectID = "202"; */
"202.title" = "Delete";
/* Class = "NSMenuItem"; title = "Paste"; ObjectID = "203"; */
"203.title" = "Paste";
/* Class = "NSMenuItem"; title = "Show Spelling and Grammar"; ObjectID = "204"; */
"204.title" = "Show Spelling and Grammar";
/* Class = "NSMenu"; title = "Edit"; ObjectID = "205"; */
"205.title" = "Edit";
/* Class = "NSMenuItem"; title = "Undo"; ObjectID = "207"; */
"207.title" = "Undo";
/* Class = "NSMenuItem"; title = "Find Next"; ObjectID = "208"; */
"208.title" = "Find Next";
/* Class = "NSMenuItem"; title = "Find…"; ObjectID = "209"; */
"209.title" = "Find…";
/* Class = "NSMenuItem"; title = "Jump to Selection"; ObjectID = "210"; */
"210.title" = "Jump to Selection";
/* Class = "NSMenuItem"; title = "Speech"; ObjectID = "211"; */
"211.title" = "Speech";
/* Class = "NSMenu"; title = "Speech"; ObjectID = "212"; */
"212.title" = "Speech";
/* Class = "NSMenuItem"; title = "Find Previous"; ObjectID = "213"; */
"213.title" = "Find Previous";
/* Class = "NSMenuItem"; title = "Redo"; ObjectID = "215"; */
"215.title" = "Redo";
/* Class = "NSMenuItem"; title = "Spelling and Grammar"; ObjectID = "216"; */
"216.title" = "Spelling and Grammar";
/* Class = "NSMenuItem"; title = "Edit"; ObjectID = "217"; */
"217.title" = "Edit";
/* Class = "NSMenuItem"; title = "Find"; ObjectID = "218"; */
"218.title" = "Find";
/* Class = "NSMenuItem"; title = "Check Spelling While Typing"; ObjectID = "219"; */
"219.title" = "Check Spelling While Typing";
/* Class = "NSMenu"; title = "Find"; ObjectID = "220"; */
"220.title" = "Find";
/* Class = "NSMenuItem"; title = "Use Selection for Find"; ObjectID = "221"; */
"221.title" = "Use Selection for Find";
/* Class = "NSMenuItem"; title = "Zoom"; ObjectID = "239"; */
"239.title" = "Zoom";
/* Class = "NSMenuItem"; title = "Check Grammar With Spelling"; ObjectID = "346"; */
"346.title" = "Check Grammar With Spelling";
/* Class = "NSMenuItem"; title = "Substitutions"; ObjectID = "348"; */
"348.title" = "Substitutions";
/* Class = "NSMenu"; title = "Substitutions"; ObjectID = "349"; */
"349.title" = "Substitutions";
/* Class = "NSMenuItem"; title = "Smart Copy/Paste"; ObjectID = "350"; */
"350.title" = "Smart Copy/Paste";
/* Class = "NSMenuItem"; title = "Smart Quotes"; ObjectID = "351"; */
"351.title" = "Smart Quotes";
/* Class = "NSMenuItem"; title = "Smart Links"; ObjectID = "354"; */
"354.title" = "Smart Links";
/* Class = "NSMenuItem"; title = "Transformations"; ObjectID = "450"; */
"450.title" = "Transformations";
/* Class = "NSMenu"; title = "Transformations"; ObjectID = "451"; */
"451.title" = "Transformations";
/* Class = "NSMenuItem"; title = "Make Upper Case"; ObjectID = "452"; */
"452.title" = "Make Upper Case";
/* Class = "NSMenuItem"; title = "Correct Spelling Automatically"; ObjectID = "454"; */
"454.title" = "Correct Spelling Automatically";
/* Class = "NSMenuItem"; title = "Show Substitutions"; ObjectID = "457"; */
"457.title" = "Show Substitutions";
/* Class = "NSMenuItem"; title = "Smart Dashes"; ObjectID = "460"; */
"460.title" = "Smart Dashes";
/* Class = "NSMenuItem"; title = "Text Replacement"; ObjectID = "462"; */
"462.title" = "Text Replacement";
/* Class = "NSMenuItem"; title = "Make Lower Case"; ObjectID = "465"; */
"465.title" = "Make Lower Case";
/* Class = "NSMenuItem"; title = "Capitalize"; ObjectID = "466"; */
"466.title" = "Capitalize";
/* Class = "NSMenuItem"; title = "Paste and Match Style"; ObjectID = "485"; */
"485.title" = "Paste and Match Style";
/* Class = "NSMenuItem"; title = "Help"; ObjectID = "490"; */
"490.title" = "Help";
/* Class = "NSMenu"; title = "Help"; ObjectID = "491"; */
"491.title" = "Help";
/* Class = "NSMenuItem"; title = "Mousecape Help"; ObjectID = "492"; */
"492.title" = "Mousecape Help";
/* Class = "NSMenuItem"; title = "Find and Replace…"; ObjectID = "534"; */
"534.title" = "Find and Replace…";
/* Class = "NSMenuItem"; title = "Edit Cape"; ObjectID = "5qb-Dw-38q"; */
"5qb-Dw-38q.title" = "Edit Cape";
/* Class = "NSMenuItem"; title = "Dump Cursors…"; ObjectID = "CYY-iE-0bP"; */
"CYY-iE-0bP.title" = "Dump Cursors…";
/* Class = "NSMenuItem"; title = "Remove Cape"; ObjectID = "LHh-1u-bK8"; */
"LHh-1u-bK8.title" = "Remove Cape";
/* Class = "NSMenuItem"; title = "Show in Finder"; ObjectID = "PAd-kz-Eoi"; */
"PAd-kz-Eoi.title" = "Show in Finder";
/* Class = "NSMenuItem"; title = "Install Helper Tool"; ObjectID = "Ui2-VN-tbP"; */
"Ui2-VN-tbP.title" = "Install Helper Tool";
/* Class = "NSMenuItem"; title = "Check for Updates"; ObjectID = "XTi-86-ese"; */
"XTi-86-ese.title" = "Check for Updates";
/* Class = "NSMenuItem"; title = "Duplicate Cape"; ObjectID = "d9b-6w-ubr"; */
"d9b-6w-ubr.title" = "Duplicate Cape";
/* Class = "NSMenuItem"; title = "Capes"; ObjectID = "g8O-f8-aKi"; */
"g8O-f8-aKi.title" = "Capes";
/* Class = "NSMenuItem"; title = "Apply Cape"; ObjectID = "ieJ-T1-eH7"; */
"ieJ-T1-eH7.title" = "Apply Cape";
/* Class = "NSMenuItem"; title = "Check for Updates..."; ObjectID = "igk-i0-oH0"; */
"igk-i0-oH0.title" = "Check for Updates...";
/* Class = "NSMenuItem"; title = "Import Cape"; ObjectID = "kdx-d9-Lek"; */
"kdx-d9-Lek.title" = "Import Cape";
/* Class = "NSMenuItem"; title = "Import MightyMouse"; ObjectID = "l3B-n8-21Z"; */
"l3B-n8-21Z.title" = "Import MightyMouse";
/* Class = "NSMenu"; title = "Capes"; ObjectID = "ttR-pS-Pk1"; */
"ttR-pS-Pk1.title" = "Capes";
/* Class = "NSMenuItem"; title = "Restore Defaults"; ObjectID = "uCE-YB-8VL"; */
"uCE-YB-8VL.title" = "Restore Defaults";
+1 -1
View File
@@ -17,7 +17,7 @@
@interface RBLClipView : NSClipView
// The backing layer for this view.
@property (nonatomic, strong) CAScrollLayer *layer;
@property (atomic, strong) CAScrollLayer *layer;
// Whether the content in this view is opaque.
//
@@ -14,10 +14,11 @@
- (NSUInteger)indexForInsertingObject:(id)anObject sortedUsingfunction:(NSInteger (*)(id, id, void *))compare context:(void *)context; {
NSUInteger index = 0;
NSUInteger topIndex = [self count];
IMP objectAtIndexImp = [self methodForSelector:@selector(objectAtIndex:)];
// IMP objectAtIndexImp = [self methodForSelector:@selector(objectAtIndex:)];
while (index < topIndex) {
NSUInteger midIndex = (index + topIndex) / 2;
id testObject = objectAtIndexImp(self, @selector(objectAtIndex:), midIndex);
id testObject = [self objectAtIndex:midIndex];
// id testObject = objectAtIndexImp(self, @selector(objectAtIndex:), midIndex);
if (compare(anObject, testObject, context) > 0) {
index = midIndex + 1;
} else {
@@ -28,7 +29,8 @@
}
static NSComparisonResult cw_SelectorCompare(id a, id b, void* aSelector) {
return (NSComparisonResult)objc_msgSend(a, (SEL)aSelector, b);
return (NSComparisonResult)[a performSelector:aSelector withObject:b];
// return (NSComparisonResult)objc_msgSend(a, (SEL)aSelector, b);
}
static NSComparisonResult az_comparatorCompare(id a, id b, NSComparator comparator) {
@@ -54,7 +56,8 @@ static IMP cw_ascendingImp = NULL;
static NSComparisonResult cw_DescriptorCompare(id a, id b, void* descriptors) {
NSComparisonResult result = NSOrderedSame;
for (NSSortDescriptor* sortDescriptor in (NSArray *)descriptors) {
result = (NSComparisonResult)cw_compareObjectToObjectImp(sortDescriptor, @selector(compareObject:toObject:), a, b);
result = [sortDescriptor compareObject:a toObject:b];
// result = (NSComparisonResult)cw_compareObjectToObjectImp(sortDescriptor, @selector(compareObject:toObject:), a, b);
if (result != NSOrderedSame) {
break;
}
@@ -26,7 +26,7 @@
if ([inKeyPath isEqualToString:@"cursorLibrary.identifier"]) {
BOOL valid = [self.cursorLibrary.library capesWithIdentifier:*ioValue].count == 0;
if (!valid) {
*outError = [NSError errorWithDomain:MCErrorDomain code:MCErrorMultipleCursorIdentifiersCode userInfo:@{ NSLocalizedDescriptionKey: @"A cape with this identifier already exists" }];
*outError = [NSError errorWithDomain:MCErrorDomain code:MCErrorMultipleCursorIdentifiersCode userInfo:@{ NSLocalizedDescriptionKey: NSLocalizedString(@"A cape with this identifier already exists", "Duplicate cape identifier error") }];
}
return valid;
}
@@ -64,8 +64,14 @@
}
- (void)imageView:(MMAnimatingImageView *)imageView didAcceptDroppedImages:(NSArray *)images {
CGFloat scale = imageView.scale;
[self.cursor setRepresentation:images.lastObject forScale:cursorScaleForScale(scale)];
MCCursorScale scale = cursorScaleForScale(imageView.scale);
if (NSEvent.modifierFlags == NSAlternateKeyMask) {
[self.cursor addFrame:[MCCursor composeRepresentationWithFrames:images] forScale:scale];
} else {
[self.cursor setRepresentation:[MCCursor composeRepresentationWithFrames:images] forScale:scale];
self.cursor.frameCount = images.count;
}
}
- (void)imageView:(MMAnimatingImageView *)imageView didDragOutImage:(NSImage *)image {
@@ -78,10 +78,10 @@ const char MCCursorNameContext;
NSUInteger index = [self.cursors indexForInsertingObject:lib sortedUsingComparator:self.class.sortComparator];
NSIndexSet *indices = [NSIndexSet indexSetWithIndex:index];
[self willChange:NSKeyValueChangeInsertion valuesAtIndexes:indices forKey:@"capes"];
[self willChange:NSKeyValueChangeInsertion valuesAtIndexes:indices forKey:@"cursors"];
[self.cursors insertObject:lib atIndex:index];
[self startObservingCursor:lib];
[self didChange:NSKeyValueChangeInsertion valuesAtIndexes:indices forKey:@"capes"];
[self didChange:NSKeyValueChangeInsertion valuesAtIndexes:indices forKey:@"cursors"];
[self.tableView insertRowsAtIndexes:[NSIndexSet indexSetWithIndex:index + 1] withAnimation:NSTableViewAnimationSlideUp];
}
} else if (kind == NSKeyValueChangeRemoval) {
@@ -90,10 +90,10 @@ const char MCCursorNameContext;
if (index != NSNotFound) {
NSIndexSet *indices = [NSIndexSet indexSetWithIndex:index];
[self willChange:NSKeyValueChangeRemoval valuesAtIndexes:indices forKey:@"capes"];
[self willChange:NSKeyValueChangeRemoval valuesAtIndexes:indices forKey:@"cursors"];
[self stopObservingCursor:lib];
[self.cursors removeObjectAtIndex:index];
[self didChange:NSKeyValueChangeRemoval valuesAtIndexes:indices forKey:@"capes"];
[self didChange:NSKeyValueChangeRemoval valuesAtIndexes:indices forKey:@"cursors"];
[self.tableView removeRowsAtIndexes:[NSIndexSet indexSetWithIndex:index + 1] withAnimation:NSTableViewAnimationSlideUp | NSTableViewAnimationEffectFade];
}
}
@@ -47,7 +47,17 @@
return NO;
}
NSBeginAlertSheet(@"Do you want to save your changes?", @"Save", @"Cancel", @"Discard Changes", self.window, self, NULL, @selector(sheetDidDismiss:returnCode:contextInfo:), (__bridge void *)nextLibrary, @"Your changes will be discarded if you don't save them.");
NSBeginAlertSheet(
NSLocalizedString(@"Do you want to save your changes?", "Save Prompt Title"),
NSLocalizedString(@"Save", "Save Prompt Button"),
NSLocalizedString(@"Cancel", "Save Prompt Button"),
NSLocalizedString(@"Discard Changes", "Save Prompt Button"),
self.window,
self,
NULL,
@selector(sheetDidDismiss:returnCode:contextInfo:),
(__bridge void *)nextLibrary,
NSLocalizedString(@"Your changes will be discarded if you don't save them.", "Save prompt threat"));
return YES;
}
@@ -28,6 +28,7 @@
- (NSURL *)URLForCape:(MCCursorLibrary *)cape;
- (NSSet *)capesWithIdentifier:(NSString *)identifier;
- (BOOL)dumpCursorsWithProgressBlock:(BOOL (^)(NSUInteger current, NSUInteger total))block;
@end
@@ -10,8 +10,7 @@
#import "NSOrderedSet+AZSortedInsert.h"
#import "apply.h"
#import "restore.h"
const char MCLibraryIdentifierContext;
#import "create.h"
@interface MCLibraryController ()
@property (nonatomic, readwrite, strong) NSUndoManager *undoManager;
@@ -19,18 +18,21 @@ const char MCLibraryIdentifierContext;
@property (readwrite, copy) NSURL *libraryURL;
@property (readwrite, weak) MCCursorLibrary *appliedCape;
- (void)loadLibrary;
- (void)willSaveNotification:(NSNotification *)note;
@end
@implementation MCLibraryController
- (NSURL *)URLForCape:(MCCursorLibrary *)cape {
return [NSURL fileURLWithPathComponents:@[ self.libraryURL.path, [cape.identifier stringByAppendingPathExtension:@"cape"] ]];
return [NSURL fileURLWithPathComponents:@[ self.libraryURL.path, [cape.identifier stringByAppendingPathExtension:@"cape"] ]];;
}
- (instancetype)initWithURL:(NSURL *)url {
if ((self = [self init])) {
self.libraryURL = url;
self.undoManager = [[NSUndoManager alloc] init];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willSaveNotification:) name:MCLibraryWillSaveNotificationName object:nil];
[self loadLibrary];
}
@@ -64,17 +66,14 @@ const char MCLibraryIdentifierContext;
}
- (void)importCapeAtURL:(NSURL *)url {
MCCursorLibrary *lib = [MCCursorLibrary cursorLibraryWithContentsOfURL:url];
NSURL *destinationURL = [self URLForCape:lib];
NSError *error = nil;
[[NSFileManager defaultManager] copyItemAtURL:lib.fileURL toURL:destinationURL error:&error];
if (!error) {
lib.fileURL = destinationURL;
[self addCape:lib];
}
[self importCape:[MCCursorLibrary cursorLibraryWithContentsOfURL:url]];
}
- (void)importCape:(MCCursorLibrary *)lib {
if ([[self.capes valueForKeyPath:@"identifier"] containsObject:lib.identifier]) {
lib.identifier = [lib.identifier stringByAppendingFormat:@".%@", UUID()];
}
lib.fileURL = [self URLForCape:lib];
[lib writeToFile:lib.fileURL.path atomically:NO];
@@ -83,7 +82,7 @@ const char MCLibraryIdentifierContext;
- (void)addCape:(MCCursorLibrary *)cape {
if ([self.capes containsObject:cape]) {
if ([self.capes containsObject:cape] || [[self.capes valueForKeyPath:@"identifier"] containsObject:cape.identifier]) {
NSLog(@"Not adding %@ to the library because an object with that identifier already exists", cape.identifier);
return;
}
@@ -95,18 +94,18 @@ const char MCLibraryIdentifierContext;
NSSet *change = [NSSet setWithObject:cape];
[self willChangeValueForKey:@"capes" withSetMutation:NSKeyValueUnionSetMutation usingObjects:change];
[cape addObserver:self forKeyPath:@"identifier" options:NSKeyValueObservingOptionOld context:(void *)&MCLibraryIdentifierContext];
cape.library = self;
[self.capes addObject:cape];
[[self.undoManager prepareWithInvocationTarget:self] removeCape:cape];
if (!self.undoManager.isUndoing) {
[self.undoManager setActionName:[@"Add " stringByAppendingString:cape.name]];
}
[self didChangeValueForKey:@"capes" withSetMutation:NSKeyValueUnionSetMutation usingObjects:change];
[cape.undoManager removeAllActions];
}
@@ -116,9 +115,7 @@ const char MCLibraryIdentifierContext;
[self willChangeValueForKey:@"capes" withSetMutation:NSKeyValueMinusSetMutation usingObjects:change];
if (cape == self.appliedCape)
[self restoreCape];
[cape removeObserver:self forKeyPath:@"identifier" context:(void *)&MCLibraryIdentifierContext];
if (cape.library == self)
cape.library = nil;
@@ -155,21 +152,33 @@ const char MCLibraryIdentifierContext;
return [self.capes filteredSetUsingPredicate:pred];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if (context == &MCLibraryIdentifierContext) {
// change the file url to reflect the new identifier
MCCursorLibrary *cape = object;
NSURL *oldURL = cape.fileURL;
[cape setFileURL:[self URLForCape:cape]];
NSError *error = nil;
[[NSFileManager defaultManager] moveItemAtURL:oldURL toURL:cape.fileURL error:&error];
if (error) {
NSLog(@"Failed to rename the identifier of the cape %@. Reverting to %@...", cape.identifier, change[NSKeyValueChangeOldKey]);
cape.identifier = change[NSKeyValueChangeOldKey];
cape.fileURL = [self URLForCape:cape];
}
- (void)willSaveNotification:(NSNotification *)note {
MCCursorLibrary *cape = note.object;
NSURL *oldURL = cape.fileURL;
[cape setFileURL:[self URLForCape:cape]];
NSError *error = nil;
[[NSFileManager defaultManager] removeItemAtURL:oldURL error:&error];
if (error) {
NSLog(@"error removing cape after rename: %@", error);
}
}
- (BOOL)dumpCursorsWithProgressBlock:(BOOL (^)(NSUInteger current, NSUInteger total))block {
NSString *path = [NSTemporaryDirectory() stringByAppendingPathComponent:
[NSString stringWithFormat: @"%@ (%f).cape",
NSLocalizedString(@"Mousecape Dump", @"Mousecape dump cursor file name"),
NSDate.date.timeIntervalSince1970]];
if (dumpCursorsToFile(path, block)) {
__weak MCLibraryController *weakSelf = self;
dispatch_async(dispatch_get_main_queue(), ^{
[weakSelf importCapeAtURL:[NSURL fileURLWithPath:path]];
});
return YES;
}
return NO;
}
@end
@@ -122,6 +122,11 @@ const char MCLibraryNameContext;
[self didChange:NSKeyValueChangeRemoval valuesAtIndexes:indices forKey:@"capes"];
[self.tableView removeRowsAtIndexes:indices withAnimation:NSTableViewAnimationSlideUp | NSTableViewAnimationEffectFade];
if (self.editWindowController.cursorLibrary == lib) {
self.editWindowController.cursorLibrary = nil;
[self.editWindowController close];
}
}
}
@@ -10,8 +10,10 @@
#import "MCLibraryViewController.h"
@interface MCLibraryWindowController : NSWindowController <NSWindowDelegate>
@property (assign) IBOutlet MCLibraryViewController *libraryViewController;
@property (assign) IBOutlet NSView *appliedAccessory;
@property (weak) IBOutlet MCLibraryViewController *libraryViewController;
@property (weak) IBOutlet NSView *appliedAccessory;
@property (weak) IBOutlet NSProgressIndicator *progressBar;
@property (weak) IBOutlet NSTextField *progressField;
@end
@interface MCAppliedCapeValueTransformer : NSValueTransformer
@@ -14,6 +14,10 @@
@implementation MCLibraryWindowController
- (void)awakeFromNib {
[self composeAccessory];
}
- (id)initWithWindow:(NSWindow *)window {
if ((self = [super initWithWindow:window])) {
@@ -22,9 +26,9 @@
}
- (void)windowDidLoad {
NSLog(@"window load");
[super windowDidLoad];
[self composeAccessory];
}
- (NSString *)windowNibName {
@@ -124,6 +128,30 @@
[[NSWorkspace sharedWorkspace] activateFileViewerSelectingURLs:@[ cape.fileURL ]];
}
- (IBAction)dumpCapeAction:(NSMenuItem *)sender {
[self.window beginSheet:self.progressBar.window completionHandler:nil];
__weak MCLibraryWindowController *weakSelf = self;
self.progressBar.doubleValue = 0.0;
[self.progressBar setIndeterminate:NO];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
[weakSelf.libraryViewController.libraryController dumpCursorsWithProgressBlock:^BOOL (NSUInteger current, NSUInteger total) {
dispatch_sync(dispatch_get_main_queue(), ^{
weakSelf.progressField.stringValue = [NSString stringWithFormat:@"%lu %@ %lu", (unsigned long)current, NSLocalizedString(@"of", @"Dump cursor progress separator (eg: 5 of 129)"), (unsigned long)total];
weakSelf.progressBar.minValue = 0;
weakSelf.progressBar.maxValue = total;
weakSelf.progressBar.doubleValue = current;
});
return YES;
}];
dispatch_sync(dispatch_get_main_queue(), ^{
[weakSelf.window endSheet:self.progressBar.window];
[[NSCursor arrowCursor] set];
});
});
}
@end
@implementation MCAppliedCapeValueTransformer
@@ -133,7 +161,9 @@
}
- (id)transformedValue:(id)value {
return [NSLocalizedString(@"Applied Cape: ", @"Accessory label for applied cape") stringByAppendingString:value ? value : NSLocalizedString(@"None", @"Accessory label for when no cape is applied")];
return [
NSLocalizedString(@"Applied Cape: ", @"Accessory label for applied cape")
stringByAppendingString:value ? value : NSLocalizedString(@"None", @"Window Titlebar Accessory label for when no cape is applied")];
}
@end
@end
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="6154.17" systemVersion="14A261i" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="6205" systemVersion="13E28" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment version="1070" identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="6154.17"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="6205"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="MCGeneralPreferencesController">
@@ -11,36 +11,64 @@
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customView id="1">
<rect key="frame" x="0.0" y="0.0" width="480" height="118"/>
<rect key="frame" x="0.0" y="0.0" width="480" height="143"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<slider verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="JRx-YT-ae7">
<rect key="frame" x="18" y="19" width="392" height="27"/>
<sliderCell key="cell" continuous="YES" state="on" alignment="left" minValue="1" maxValue="16" doubleValue="1" tickMarkPosition="below" numberOfTickMarks="16" sliderType="linear" id="osm-63-Q66"/>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Ndv-TL-Pur">
<rect key="frame" x="18" y="106" width="48" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="I am... " id="a3X-1e-eOG">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<segmentedControl verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="8pe-9P-fa1">
<rect key="frame" x="68" y="102" width="94" height="25"/>
<segmentedCell key="cell" borderStyle="border" alignment="left" style="texturedSquare" trackingMode="selectOne" id="Hdu-Yg-F0d">
<font key="font" metaFont="system"/>
<segments>
<segment label="right" selected="YES"/>
<segment label="left" tag="1"/>
</segments>
</segmentedCell>
<connections>
<binding destination="Dw0-Gt-5ak" name="selectedIndex" keyPath="values.MCHandedness" id="ZqA-zg-dh2">
<dictionary key="options">
<integer key="NSMultipleValuesPlaceholder" value="0"/>
<integer key="NSNoSelectionPlaceholder" value="0"/>
<integer key="NSNotApplicablePlaceholder" value="0"/>
<integer key="NSNullPlaceholder" value="0"/>
</dictionary>
</binding>
</connections>
</segmentedControl>
<slider verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="JRx-YT-ae7">
<rect key="frame" x="18" y="15" width="392" height="25"/>
<sliderCell key="cell" continuous="YES" state="on" alignment="left" minValue="0.5" maxValue="16" doubleValue="1" tickMarkPosition="below" numberOfTickMarks="16" sliderType="linear" id="osm-63-Q66"/>
<connections>
<binding destination="-2" name="value" keyPath="cursorScale" id="PlF-RW-V9z"/>
</connections>
</slider>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="hg4-8F-fVE">
<rect key="frame" x="20" y="52" width="82" height="17"/>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="hg4-8F-fVE">
<rect key="frame" x="20" y="48" width="82" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Cursor Scale" id="gxo-nh-UCg">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="yjb-oM-v3t">
<rect key="frame" x="18" y="81" width="265" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Double Clicks capes" id="mFs-6l-Guo">
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="yjb-oM-v3t">
<rect key="frame" x="18" y="77" width="90" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Double Clicks" id="mFs-6l-Guo">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<segmentedControl verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ZYi-xB-wBd">
<rect key="frame" x="119" y="75" width="111" height="25"/>
<segmentedControl verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ZYi-xB-wBd">
<rect key="frame" x="114" y="72" width="111" height="25"/>
<segmentedCell key="cell" borderStyle="border" alignment="left" style="texturedSquare" trackingMode="selectOne" id="oXj-Hj-PSJ">
<font key="font" metaFont="system"/>
<segments>
@@ -59,8 +87,11 @@
</binding>
</connections>
</segmentedControl>
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="QBy-dj-wZ4">
<rect key="frame" x="416" y="25" width="44" height="19"/>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="QBy-dj-wZ4">
<rect key="frame" x="416" y="21" width="44" height="19"/>
<constraints>
<constraint firstAttribute="width" constant="44" id="6CD-yu-I0l"/>
</constraints>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="nlB-rR-gpk">
<numberFormatter key="formatter" formatterBehavior="custom10_4" positiveFormat="#0.00" negativeFormat="#0.00" usesGroupingSeparator="NO" paddingCharacter="*" groupingSize="0" minimumIntegerDigits="1" maximumIntegerDigits="2" minimumFractionDigits="2" maximumFractionDigits="2" decimalSeparator="." groupingSeparator="," currencyDecimalSeparator="." plusSign="+" minusSign="-" notANumberSymbol="NaN" perMillSymbol="‰" percentSymbol="%" exponentSymbol="E" positivePrefix="" positiveSuffix="" negativePrefix="-" negativeSuffix="" id="ZjS-1g-txf">
<real key="minimum" value="0.5"/>
@@ -74,7 +105,46 @@
<binding destination="-2" name="value" keyPath="cursorScale" id="ffZ-zU-mYh"/>
</connections>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="BrD-CT-ISu">
<rect key="frame" x="168" y="106" width="51" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="handed" id="L0R-Jd-0pF">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Mx2-2f-xxz">
<rect key="frame" x="231" y="77" width="40" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="capes" id="PAA-Qd-rHg">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</subviews>
<constraints>
<constraint firstItem="ZYi-xB-wBd" firstAttribute="leading" secondItem="yjb-oM-v3t" secondAttribute="trailing" constant="8" id="75E-3R-Wci"/>
<constraint firstItem="yjb-oM-v3t" firstAttribute="top" secondItem="Ndv-TL-Pur" secondAttribute="bottom" constant="12" id="8sY-OX-BJr"/>
<constraint firstAttribute="trailing" secondItem="QBy-dj-wZ4" secondAttribute="trailing" constant="20" id="AzN-Bd-09M"/>
<constraint firstItem="yjb-oM-v3t" firstAttribute="leading" secondItem="Ndv-TL-Pur" secondAttribute="leading" id="BbZ-Ge-lTF"/>
<constraint firstItem="hg4-8F-fVE" firstAttribute="leading" secondItem="JRx-YT-ae7" secondAttribute="leading" constant="2" id="Fc0-NM-Trw"/>
<constraint firstItem="BrD-CT-ISu" firstAttribute="centerY" secondItem="8pe-9P-fa1" secondAttribute="centerY" id="Hg2-I1-obt"/>
<constraint firstItem="QBy-dj-wZ4" firstAttribute="leading" secondItem="JRx-YT-ae7" secondAttribute="trailing" constant="8" id="JVR-o1-2YY"/>
<constraint firstItem="Mx2-2f-xxz" firstAttribute="centerY" secondItem="ZYi-xB-wBd" secondAttribute="centerY" constant="-0.5" id="M1O-2Z-BQG"/>
<constraint firstItem="ZYi-xB-wBd" firstAttribute="top" secondItem="8pe-9P-fa1" secondAttribute="bottom" constant="8" symbolic="YES" id="MxX-Qk-iHu"/>
<constraint firstItem="Mx2-2f-xxz" firstAttribute="leading" secondItem="ZYi-xB-wBd" secondAttribute="trailing" constant="8" id="Ocg-tR-hZA"/>
<constraint firstItem="hg4-8F-fVE" firstAttribute="top" secondItem="yjb-oM-v3t" secondAttribute="bottom" constant="12" id="P7d-eI-p1C"/>
<constraint firstItem="BrD-CT-ISu" firstAttribute="leading" secondItem="8pe-9P-fa1" secondAttribute="trailing" constant="8" id="Rb5-Nu-xUh"/>
<constraint firstItem="8pe-9P-fa1" firstAttribute="leading" secondItem="Ndv-TL-Pur" secondAttribute="trailing" constant="4" id="UkQ-8L-CRg"/>
<constraint firstItem="Ndv-TL-Pur" firstAttribute="leading" secondItem="1" secondAttribute="leading" constant="20" id="Z9v-C6-xzG"/>
<constraint firstItem="Ndv-TL-Pur" firstAttribute="top" secondItem="1" secondAttribute="top" constant="20" id="c2R-ME-mbU"/>
<constraint firstItem="yjb-oM-v3t" firstAttribute="centerY" secondItem="ZYi-xB-wBd" secondAttribute="centerY" constant="-0.5" id="eQr-KJ-ljI"/>
<constraint firstAttribute="bottom" secondItem="JRx-YT-ae7" secondAttribute="bottom" constant="16" id="eeD-OM-YJ7"/>
<constraint firstItem="Ndv-TL-Pur" firstAttribute="centerY" secondItem="8pe-9P-fa1" secondAttribute="centerY" id="gJN-ub-C95"/>
<constraint firstItem="yjb-oM-v3t" firstAttribute="leading" secondItem="hg4-8F-fVE" secondAttribute="leading" constant="-2" id="jMe-as-UYa"/>
<constraint firstItem="QBy-dj-wZ4" firstAttribute="centerY" secondItem="JRx-YT-ae7" secondAttribute="centerY" constant="-3.5" id="mBD-l8-aHL"/>
</constraints>
<point key="canvasLocation" x="311" y="408.5"/>
</customView>
<userDefaultsController representsSharedInstance="YES" id="Dw0-Gt-5ak"/>
</objects>
@@ -33,11 +33,13 @@ extern MCCursorScale cursorScaleForScale(CGFloat scale);
- (void)setRepresentation:(NSImageRep *)imageRep forScale:(MCCursorScale)scale;
- (void)removeRepresentationForScale:(MCCursorScale)scale;
- (void)addFrame:(NSImageRep *)frame forScale:(MCCursorScale)scale;
- (NSImageRep *)representationForScale:(MCCursorScale)scale;
- (NSImageRep *)representationWithScale:(CGFloat)scale;
- (NSDictionary *)dictionaryRepresentation;
+ (NSImageRep *)composeRepresentationWithFrames:(NSArray *)frames;
// Derived Properties
- (NSImage *)imageWithAllReps;
+84 -9
View File
@@ -7,7 +7,7 @@
//
#import "MCCursor.h"
#import "NSBitmapImageRep+ColorSpace.h"
MCCursorScale cursorScaleForScale(CGFloat scale) {
if (scale < 0.0)
return MCCursorScaleNone;
@@ -16,7 +16,8 @@ MCCursorScale cursorScaleForScale(CGFloat scale) {
}
@interface MCCursor ()
@property (readwrite, strong) NSMutableDictionary *representations;
@property (readwrite, strong) NSMutableDictionary<NSString *, NSBitmapImageRep *> *representations;
- (NSInteger)framesForScale:(MCCursorScale)scale;
- (BOOL)_readFromDictionary:(NSDictionary *)dictionary ofVersion:(CGFloat)version;
@end
@@ -97,16 +98,18 @@ MCCursorScale cursorScaleForScale(CGFloat scale) {
self.frameCount = frameCount.unsignedIntegerValue;
self.frameDuration = frameDuration.doubleValue;
self.hotSpot = NSMakePoint(hotSpotX.doubleValue, hotSpotY.doubleValue);
self.size = NSMakeSize(pointsWide.doubleValue, pointsHigh.doubleValue);
// self.repeatCount = repeatCount.unsignedIntegerValue;
for (NSData *data in reps) {
// data in v2.0 documents are saved as PNGs
NSBitmapImageRep *rep = [[NSBitmapImageRep alloc] initWithData:data];
rep.size = NSMakeSize(self.size.width, self.size.height * self.frameCount);
[self setRepresentation:rep forScale:cursorScaleForScale(rep.pixelsWide / self.size.width)];
[self setRepresentation:rep.retaggedSRGBSpace forScale:cursorScaleForScale(rep.pixelsWide / pointsWide.doubleValue)];
}
self.size = NSMakeSize(pointsWide.doubleValue, pointsHigh.doubleValue);
return YES;
}
}
@@ -126,7 +129,7 @@ MCCursorScale cursorScaleForScale(CGFloat scale) {
NSMutableArray *pngs = [NSMutableArray array];
for (NSString *key in self.representations) {
NSBitmapImageRep *rep = self.representations[key];
pngs[pngs.count] = [rep representationUsingType:NSPNGFileType properties:nil];
pngs[pngs.count] = [rep.ensuredSRGBSpace TIFFRepresentationUsingCompression:NSTIFFCompressionLZW factor:1.0];
}
drep[MCCursorDictionaryRepresentationsKey] = pngs;
@@ -176,25 +179,97 @@ MCCursorScale cursorScaleForScale(CGFloat scale) {
[super setValue:value forUndefinedKey:key];
}
- (void)setRepresentation:(NSImageRep *)imageRep forScale:(MCCursorScale)scale {
- (void)setRepresentation:(NSBitmapImageRep *)imageRep forScale:(MCCursorScale)scale {
[self willChangeValueForKey:@"representations"];
NSString *key = [@"cursorRep" stringByAppendingFormat:@"%lu", scale];
[self willChangeValueForKey:key];
if (imageRep)
[self.representations setObject:imageRep forKey:@(scale)];
[self.representations setObject:imageRep forKey:[NSString stringWithFormat:@"%lu", (unsigned long)scale, nil]];
else
[self.representations removeObjectForKey:@(scale)];
[self.representations removeObjectForKey:[NSString stringWithFormat:@"%lu", (unsigned long)scale, nil]];
if (self.representations.count == 1) {
// This is the first object, set the image size to this
NSSize size = NSMakeSize((double)imageRep.pixelsWide / (scale / 100.0), (double)imageRep.pixelsHigh / self.frameCount / (scale / 100.0));
if (!NSEqualSizes(size, NSZeroSize)) {
self.size = size;
}
}
[self didChangeValueForKey:key];
[self didChangeValueForKey:@"representations"];
}
- (void)addFrame:(NSImageRep *)frame forScale:(MCCursorScale)scale {
NSImageRep *rep = [self representationForScale:scale];
NSImageRep *newRep = [self.class composeRepresentationWithFrames:@[ rep, frame ]];
NSInteger frames = newRep.pixelsHigh / self.size.height;
if (self.frameCount < frames) {
self.frameCount = frames;
}
[self setRepresentation:newRep forScale:scale];
}
+ (NSBitmapImageRep *)composeRepresentationWithFrames:(NSArray<NSBitmapImageRep *> *)frames {
if (frames.count == 0)
return nil;
if (frames.count == 1)
return frames.firstObject;
NSUInteger height = [[frames valueForKeyPath:@"@sum.pixelsHigh"] unsignedIntegerValue];
NSUInteger width = [(NSImageRep *)frames[0] pixelsWide];
NSBitmapImageRep *newRep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL
pixelsWide:width
pixelsHigh:height
bitsPerSample:8
samplesPerPixel:4
hasAlpha:YES
isPlanar:NO
colorSpaceName:NSCalibratedRGBColorSpace
bytesPerRow:4 * width
bitsPerPixel:32];
NSGraphicsContext *ctx = [NSGraphicsContext graphicsContextWithBitmapImageRep:newRep];
[NSGraphicsContext saveGraphicsState];
[NSGraphicsContext setCurrentContext:ctx];
NSUInteger currentY = 0;
for (NSInteger idx = frames.count - 1; idx >= 0; idx--) {
NSBitmapImageRep *rep = frames[idx];
if (rep.pixelsWide != width) {
NSLog(@"Can't create representation from images of different widths");
return nil;
}
[rep drawInRect:NSMakeRect(0, currentY, rep.pixelsWide, rep.pixelsHigh)
fromRect:NSZeroRect
operation:NSCompositingOperationSourceOver
fraction:1.0
respectFlipped:YES
hints:nil];
currentY += rep.pixelsHigh;
}
[NSGraphicsContext restoreGraphicsState];
return newRep;
}
- (NSInteger)framesForScale:(MCCursorScale)scale {
return [self representationForScale:scale].pixelsHigh / self.size.height;
}
- (void)removeRepresentationForScale:(MCCursorScale)scale {
[self setRepresentation:nil forScale:scale];
}
- (NSImageRep *)representationForScale:(MCCursorScale)scale {
return self.representations[@(scale)];
return self.representations[[NSString stringWithFormat:@"%lu", (unsigned long)scale, nil]];
}
- (NSImageRep *)representationWithScale:(CGFloat)scale {
@@ -9,6 +9,9 @@
#import <Foundation/Foundation.h>
#import "MCCursor.h"
extern NSString *const MCLibraryWillSaveNotificationName;
extern NSString *const MCLibraryDidSaveNotificationName;
@class MCLibraryController;
@interface MCCursorLibrary : NSObject <NSCopying>
@property (nonatomic, copy) NSString *name;
@@ -8,12 +8,16 @@
#import "MCCursorLibrary.h"
NSString *const MCLibraryWillSaveNotificationName = @"MCLibraryWillSave";
NSString *const MCLibraryDidSaveNotificationName = @"MCLibraryDidSave";
@interface MCCursorLibrary ()
@property (nonatomic, strong) NSUndoManager *undoManager;
@property (nonatomic, readwrite, strong) NSMutableSet *cursors;
@property (nonatomic, assign) NSUInteger changeCount;
@property (nonatomic, assign) NSUInteger lastChangeCount;
@property (nonatomic, strong) NSArray *observers;
@property (nonatomic, copy) NSString *oldIdentifier;
- (BOOL)_readFromDictionary:(NSDictionary *)dictionary;
- (void)addCursorsFromDictionary:(NSDictionary *)cursorDicts ofVersion:(CGFloat)doubleVersion;
@@ -24,19 +28,35 @@
- (void)startObservingCursor:(MCCursor *)cursor;
- (void)stopObservingCursor:(MCCursor *)cursor;
+ (NSArray *)cursorUndoProperties;
+ (NSArray *)undoProperties;
+ (NSDictionary<NSString *, NSString *> *)cursorUndoProperties;
+ (NSDictionary<NSString *, NSString *> *)undoProperties;
@end
@implementation MCCursorLibrary
@dynamic dirty;
+ (NSArray *)undoProperties {
return @[ @"identifier", @"name", @"author", @"hiDPI", @"version", @"inCloud" ];
+ (NSDictionary<NSString *, NSString *> *)undoProperties {
return @{
@"identifier": NSLocalizedString(@"identifier", @"Undo change cape identifier suffix"),
@"name": NSLocalizedString(@"name", @"Undo change cape name suffix"),
@"author": NSLocalizedString(@"author", @"Undo change cape author suffix"),
@"hiDPI": NSLocalizedString(@"hiDPI", @"Undo change cape hidpi suffix"),
@"version": NSLocalizedString(@"version", @"Undo change cape version suffix")
};
}
+ (NSArray *)cursorUndoProperties {
return @[ @"identifier", @"frameDuration", @"frameCount", @"size", @"hotSpot", @"cursorRep100", @"cursorRep200", @"cursorRep500", @"cursorRep1000" ];
+ (NSDictionary<NSString *, NSString *> *)cursorUndoProperties {
return @{
@"identifier" : NSLocalizedString(@"cursor type", @"Undo change cursor type suffix"),
@"frameDuration": NSLocalizedString(@"frame duration", @"Undo change cursor frame duraiton suffix"),
@"frameCount" : NSLocalizedString(@"frame count", @"Undo change cursor frame count suffix"),
@"size" : NSLocalizedString(@"dimensions", @"Undo change cursor image dimensions suffix"),
@"hotSpot" : NSLocalizedString(@"hotspot", @"Undo change cursor hotspot suffix"),
@"cursorRep100" : NSLocalizedString(@"1x Representation", @"Undo change cursor 1x rep suffix"),
@"cursorRep200" : NSLocalizedString(@"2x Rep", "Undo change cursor 2x rep suffix"),
@"cursorRep500" : NSLocalizedString(@"2x Rep", "Undo change cursor 5x rep suffix"),
@"cursorRep1000": NSLocalizedString(@"2x Rep", "Undo change cursor 10x rep suffix")
};
}
+ (MCCursorLibrary *)cursorLibraryWithContentsOfFile:(NSString *)path {
@@ -103,14 +123,14 @@
self.observers = @[ob1, ob2, ob3];
self.name = @"Unnamed";
self.author = NSUserName();
self.hiDPI = NO;
self.inCloud = NO;
self.identifier = [NSString stringWithFormat:@"local.%@.Unnamed.%f", self.author, [NSDate timeIntervalSinceReferenceDate]];
self.version = @1.0;
self.cursors = [NSMutableSet set];
self.changeCount = 0;
self.name = NSLocalizedString(@"Unnamed", "Default New Cape Name");
self.author = NSUserName();
self.hiDPI = NO;
self.inCloud = NO;
self.identifier = [NSString stringWithFormat:@"local.%@.Unnamed.%f", self.author, [NSDate timeIntervalSinceReferenceDate]];
self.version = @1.0;
self.cursors = [NSMutableSet set];
self.changeCount = 0;
self.lastChangeCount = 0;
[self startObservingProperties];
}
@@ -230,10 +250,12 @@ const char MCCursorPropertiesContext;
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if (context == &MCCursorLibraryPropertiesContext || context == &MCCursorPropertiesContext) {
NSString *decamelized = [keyPath stringByReplacingOccurrencesOfString:@"([a-z])([A-Z])"
withString:@"$1 $2"
options:NSRegularExpressionSearch
range:NSMakeRange(0, keyPath.length)];
NSString *decamelized = NULL;
if (context == &MCCursorLibraryPropertiesContext) {
decamelized = [self.class undoProperties][keyPath];
} else {
decamelized = [self.class cursorUndoProperties][keyPath];
}
id oldValue = change[NSKeyValueChangeOldKey];
if ([oldValue isKindOfClass:[NSNull class]])
@@ -242,7 +264,11 @@ const char MCCursorPropertiesContext;
[[self.undoManager prepareWithInvocationTarget: object] setValue:oldValue forKeyPath:keyPath];
if (!self.undoManager.isUndoing) {
[self.undoManager setActionName:[[@"Change " stringByAppendingString:decamelized] capitalizedString]];
[self.undoManager setActionName:[[NSLocalizedString(@"Change ", "Undo Change Prefix") stringByAppendingString:decamelized] capitalizedString]];
}
if ([keyPath isEqualToString:@"identifier"]) {
self.oldIdentifier = oldValue;
}
}
}
@@ -275,7 +301,7 @@ const char MCCursorPropertiesContext;
[[self.undoManager prepareWithInvocationTarget:self] removeCursor:cursor];
if (!self.undoManager.isUndoing) {
[self.undoManager setActionName:@"Add Cursor"];
[self.undoManager setActionName:NSLocalizedString(@"Add Cursor", "Add Cursor Undo Title")];
}
[self willChangeValueForKey:@"cursors" withSetMutation:NSKeyValueUnionSetMutation usingObjects:change];
@@ -289,7 +315,7 @@ const char MCCursorPropertiesContext;
[[self.undoManager prepareWithInvocationTarget:self] addCursor:cursor];
if (!self.undoManager.isUndoing) {
[self.undoManager setActionName:@"Remove Cursor"];
[self.undoManager setActionName:NSLocalizedString(@"Remove Cursor", @"Remove Cursor Undo Title")];
}
[self willChangeValueForKey:@"cursors" withSetMutation:NSKeyValueMinusSetMutation usingObjects:change];
@@ -345,19 +371,21 @@ const char MCCursorPropertiesContext;
if (duplicates.count > 0) {
return [NSError errorWithDomain:MCErrorDomain code:MCErrorMultipleCursorIdentifiersCode userInfo:@{
NSLocalizedDescriptionKey: NSLocalizedString(@"Save failed", nil),
NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:NSLocalizedString(@"Multiple cursors with the name(s): %@ exist.", nil), duplicates] }];
NSLocalizedDescriptionKey: NSLocalizedString(@"Save failed", @"New Cape Failure Title"),
NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:NSLocalizedString(@"Multiple cursors with the name(s): %@ exist.", @"New Cape Failure Duplicate cursor name error"), duplicates] }];
}
// [self.undoManager removeAllActions];
[[NSNotificationCenter defaultCenter] postNotificationName:MCLibraryWillSaveNotificationName object:self];
BOOL success = [self writeToFile:self.fileURL.path atomically:NO];
if (success) {
[self updateChangeCount:NSChangeCleared];
[[NSNotificationCenter defaultCenter] postNotificationName:MCLibraryDidSaveNotificationName object:self];
return nil;
}
return [NSError errorWithDomain:MCErrorDomain code:MCErrorWriteFailCode userInfo:@{
NSLocalizedDescriptionKey: NSLocalizedString(@"Save failed", nil),
NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"Error writing cape to disk.", nil) }];
NSLocalizedDescriptionKey: NSLocalizedString(@"Save failed", @"New Cape Failure Title"),
NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"Error writing cape to disk.", @"New Cape Filure Filesystem Error") }];
}
- (void)updateChangeCount:(NSDocumentChangeType)change {
+20 -2
View File
@@ -9,12 +9,18 @@
#import "MCCapeCellView.h"
#import "MCCapePreviewItem.h"
@interface MCCapeCellView ()
@end
@interface MCSortValueTransformer : NSValueTransformer
@end
@implementation MCCapeCellView
- (void)viewDidMoveToWindow {
self.collectionView.itemPrototype = [MCCapePreviewItem new];
[self.collectionView bind:NSContentBinding toObject:self withKeyPath:@"objectValue.cursors" options:nil];
[self.collectionView bind:NSContentBinding toObject:self withKeyPath:@"objectValue.cursors" options:@{ NSValueTransformerBindingOption: [MCSortValueTransformer new] }];
self.collectionView.minItemSize = self.collectionView.itemPrototype.view.frame.size;
self.collectionView.maxItemSize = self.collectionView.minItemSize;
}
@@ -25,6 +31,18 @@
@end
@implementation MCSortValueTransformer
+ (Class)transformedValueClass {
return [NSSet class];
}
- (NSArray *)transformedValue:(NSSet *)value {
return [value sortedArrayUsingDescriptors: @[ [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:)] ]];
}
@end
@implementation MCHDValueTransformer
+ (Class)transformedValueClass {
@@ -10,5 +10,5 @@
#import "MMAnimatingImageView.h"
@interface MCCapePreviewItem : NSCollectionViewItem
@property (nonatomic, assign) IBOutlet MMAnimatingImageView *animatingImageView;
@property (nonatomic, weak) IBOutlet MMAnimatingImageView *animatingImageView;
@end
@@ -26,13 +26,17 @@
[self.animatingImageView bind:@"image" toObject:self withKeyPath:@"representedObject.imageWithAllReps" options:nil];
[self.animatingImageView bind:@"frameCount" toObject:self withKeyPath:@"representedObject.frameCount" options:nil];
[self.animatingImageView bind:@"frameDuration" toObject:self withKeyPath:@"representedObject.frameDuration" options:nil];
[self.animatingImageView bind:@"shouldFlipHorizontally"
toObject:[NSUserDefaults standardUserDefaults]
withKeyPath:MCPreferencesHandednessKey
options:nil];
}
return self;
}
- (void)dealloc {
[self.animatingImageView unbind:@"shouldFlipHorizontally"];
[self.animatingImageView unbind:@"image"];
[self.animatingImageView unbind:@"frameCount"];
[self.animatingImageView unbind:@"frameDuration"];
@@ -33,6 +33,7 @@
@property (assign) NSInteger frameCount;
@property (assign) CGFloat scale; // set to 0.0 if you want to inherit window scale
@property (assign) NSPoint hotSpot;
@property (assign) BOOL shouldFlipHorizontally;
@property (weak) IBOutlet id <MMAnimatingImageViewDelegate> delegate;
@property (assign) BOOL shouldAnimate;
@property (assign) BOOL shouldShowHotSpot;
@@ -9,14 +9,17 @@
#import "MMAnimatingImageView.h"
#import "MCSpriteLayer.h"
#define SHOULDCOPY NSEvent.modifierFlags & NSEventModifierFlagOption
const char MCInvalidateContext;
@interface MMAnimatingImageView ()
@interface MMAnimatingImageView () <CALayerDelegate>
@property (weak) MCSpriteLayer *spriteLayer;
@property (weak) CALayer *hotSpotLayer;
- (void)_initialize;
- (void)_invalidateFrame;
- (void)_invalidateAnimation;
- (void)_resetTransform;
- (void)registerTypes;
- (void)_dragAnimationEnded:(id)sender;
@end
@@ -59,10 +62,10 @@ const char MCInvalidateContext;
self.layer.delegate = self;
CALayer *hotSpotLayer = [CALayer layer];
hotSpotLayer.bounds = CGRectMake(0, 0, 4, 4);
hotSpotLayer.bounds = CGRectMake(0, 0, 3, 3);
hotSpotLayer.backgroundColor = [[NSColor redColor] CGColor];
hotSpotLayer.autoresizingMask = kCALayerNotSizable;
hotSpotLayer.anchorPoint = CGPointMake(0, 0);
hotSpotLayer.anchorPoint = CGPointMake(0.5, 0.5);
hotSpotLayer.borderColor = [[NSColor blackColor] CGColor];
hotSpotLayer.borderWidth = 0.5;
[self.layer addSublayer:hotSpotLayer];
@@ -82,6 +85,7 @@ const char MCInvalidateContext;
[self addObserver:self forKeyPath:@"frameCount" options:0 context:(void *)&MCInvalidateContext];
[self addObserver:self forKeyPath:@"frameDuration" options:0 context:(void *)&MCInvalidateContext];
[self addObserver:self forKeyPath:@"shouldAnimate" options:0 context:NULL];
[self addObserver:self forKeyPath:@"shouldFlipHorizontally" options:0 context:NULL];
}
- (void)dealloc {
@@ -91,6 +95,7 @@ const char MCInvalidateContext;
[self removeObserver:self forKeyPath:@"frameCount"];
[self removeObserver:self forKeyPath:@"frameDuration"];
[self removeObserver:self forKeyPath:@"shouldAnimate"];
[self removeObserver:self forKeyPath:@"shouldFlipHorizontally"];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
@@ -102,6 +107,8 @@ const char MCInvalidateContext;
[self _invalidateAnimation];
} else if ([keyPath isEqualToString:@"shouldAnimate"]) {
[self _invalidateAnimation];
} else if ([keyPath isEqualToString:@"shouldFlipHorizontally"]) {
[self _resetTransform];
}
}
@@ -111,7 +118,7 @@ const char MCInvalidateContext;
// Tell OSX that our view can accept images to be dragged in
- (void)registerTypes {
[self registerForDraggedTypes:[NSArray arrayWithObjects:NSPasteboardTypeTIFF, NSPasteboardTypePNG, NSFilenamesPboardType, nil]];
[self registerForDraggedTypes:[NSArray arrayWithObjects:NSPasteboardTypeTIFF, NSFilenamesPboardType, nil]];
}
- (void)viewDidMoveToWindow {
@@ -132,6 +139,14 @@ const char MCInvalidateContext;
#pragma mark - Invalidators
- (void)_resetTransform {
if (self.shouldFlipHorizontally) {
self.layer.transform = CATransform3DMakeAffineTransform(CGAffineTransformMake(-1, 0, 0, 1, self.layer.bounds.size.width, 0));
} else {
self.layer.transform = CATransform3DIdentity;
}
}
- (void)_invalidateFrame {
CGFloat scale = self.scale;
if (!self.scale || !self.image) {
@@ -155,11 +170,13 @@ const char MCInvalidateContext;
CGSize effectiveSize = CGSizeMake(self.image.size.width, self.image.size.height / self.frameCount);
CGRect effectiveRect = CGRectIntegral(CGRectMake(self.layer.frame.size.width / 2.0 - effectiveSize.width / 2.0, self.layer.frame.size.height / 2.0 + effectiveSize.height / 2.0, effectiveSize.width, effectiveSize.height));
self.hotSpotLayer.position = CGPointMake(ceil(CGRectGetMinX(effectiveRect) + self.hotSpot.x - self.hotSpotLayer.frame.size.width / 2), ceil(CGRectGetMinY(effectiveRect) - self.hotSpot.y - self.hotSpotLayer.frame.size.height / 2));
self.hotSpotLayer.position = CGPointMake(CGRectGetMinX(effectiveRect) + self.hotSpot.x, CGRectGetMinY(effectiveRect) - self.hotSpot.y);
self.hotSpotLayer.opacity = 1.0;
} else {
self.hotSpotLayer.opacity = 0.0;
}
[self _resetTransform];
}
- (void)_invalidateAnimation {
@@ -187,34 +204,45 @@ const char MCInvalidateContext;
#pragma mark - NSDraggingSource
- (void)draggingSession:(NSDraggingSession *)session willBeginAtPoint:(NSPoint)screenPoint {
}
- (NSDragOperation)draggingSession:(NSDraggingSession *)session sourceOperationMaskForDraggingContext:(NSDraggingContext)context {
if (context == NSDraggingContextWithinApplication && self.shouldAllowDragging)
return NSDragOperationCopy;
if (self.shouldAllowDragging)
return NSDragOperationEvery;
return NSDragOperationNone;
}
- (void)draggingSession:(NSDraggingSession *)session endedAtPoint:(NSPoint)screenPoint operation:(NSDragOperation)operation {
if (self.delegate && [self.delegate respondsToSelector:@selector(imageView:didDragOutImage:)] && operation == NSDragOperationNone && !NSPointInRect(screenPoint, self.window.frame)) {
[[NSCursor currentCursor] pop];
NSShowAnimationEffect(NSAnimationEffectPoof, screenPoint, NSZeroSize, self, @selector(_dragAnimationEnded:), nil);
[self.delegate imageView:self didDragOutImage:self.image];
if (!NSPointInRect(screenPoint, self.window.frame)) {
if (SHOULDCOPY) {
[self _dragAnimationEnded:self];
} else if (self.delegate && [self.delegate respondsToSelector:@selector(imageView:didDragOutImage:)]) {
NSShowAnimationEffect(NSAnimationEffectPoof, screenPoint, NSZeroSize, self, @selector(_dragAnimationEnded:), nil);
[self.delegate imageView:self didDragOutImage:self.image];
}
}
}
- (void)_dragAnimationEnded:(id)sender {
[[NSCursor arrowCursor] push];
[[NSCursor arrowCursor] set];
}
- (void)draggingSession:(NSDraggingSession *)session movedToPoint:(NSPoint)screenPoint {
if (!NSPointInRect(screenPoint, self.window.frame)) {
[[NSCursor disappearingItemCursor] push];
if (SHOULDCOPY)
[[NSCursor dragCopyCursor] set];
else
[[NSCursor disappearingItemCursor] set];
} else if ([NSCursor currentCursor] == [NSCursor disappearingItemCursor]) {
[[NSCursor currentCursor] pop];
[self _dragAnimationEnded:self];
}
}
- (BOOL)ignoreModifierKeysForDraggingSession:(NSDraggingSession *)session {
return YES;
return NO;
}
- (BOOL)acceptsFirstMouse:(NSEvent *)theEvent {
@@ -226,7 +254,7 @@ const char MCInvalidateContext;
return;
NSPasteboardItem *pbItem = [NSPasteboardItem new];
[pbItem setDataProvider:self forTypes:@[ NSPasteboardTypePNG, NSPasteboardTypeTIFF, @"public.image" ]];
[pbItem setDataProvider:self forTypes:@[ NSPasteboardTypePNG, NSPasteboardTypeTIFF, @"public.image", (__bridge NSString *)kPasteboardTypeFileURLPromise ]];
NSDraggingItem *dragItem = [[NSDraggingItem alloc] initWithPasteboardWriter:pbItem];
@@ -249,12 +277,20 @@ const char MCInvalidateContext;
- (void)pasteboard:(NSPasteboard *)sender item:(NSPasteboardItem *)item provideDataForType:(NSString *)type {
if ([type compare: NSPasteboardTypeTIFF] == NSOrderedSame) {
[sender setData:[self.image TIFFRepresentation] forType:NSPasteboardTypeTIFF];
} else if ([type compare: NSPasteboardTypePNG] == NSOrderedSame) {
[sender setData:[self.image.representations.lastObject representationUsingType:NSPNGFileType properties:nil] forType:NSPasteboardTypePNG];
} else if ([type compare:@"public.image"] == NSOrderedSame) {
[sender writeObjects:@[ self.image ]];
} else if ([type compare:(__bridge NSString *)kPasteboardTypeFileURLPromise] == NSOrderedSame && SHOULDCOPY) {
NSURL *url = [[NSURL URLWithString:[item stringForType:@"com.apple.pastelocation"]] URLByAppendingPathComponent:[NSString stringWithFormat:@"Mousecape Image (%f).tiff", NSDate.date.timeIntervalSince1970]];
NSImageRep *rep =self.image.representations.firstObject;
if ([rep isKindOfClass:[NSBitmapImageRep class]]) {
NSBitmapImageRep* bitmap = (NSBitmapImageRep*)rep;
[[bitmap TIFFRepresentationUsingCompression:NSTIFFCompressionLZW factor:1.0] writeToFile:url.path atomically:NO];
} else {
abort();
}
}
}
#pragma mark - NSDragDestination
@@ -266,10 +302,10 @@ const char MCInvalidateContext;
// Only thing we have to do here is confirm that the dragged file is an image. We use NSImage's +canInitWithPasteboard: and we also check to see there is only one item being dragged
if ([self.delegate conformsToProtocol:@protocol(MMAnimatingImageViewDelegate)] && // No point in accepting the drop if the delegate doesn't support it/exist
[NSImage canInitWithPasteboard:sender.draggingPasteboard] && // Only Accept Images
sender.draggingPasteboard.pasteboardItems.count == 1 &&
self.shouldAllowDragging) { // Only accept one item
return [self.delegate imageView:self draggingEntered:sender];
self.shouldAllowDragging) {
return [self.delegate imageView:self draggingEntered:sender];
}
return NSDragOperationNone;
}
@@ -284,27 +320,28 @@ const char MCInvalidateContext;
- (BOOL)performDragOperation:(id<NSDraggingInfo>)sender {
if ([self.delegate conformsToProtocol:@protocol(MMAnimatingImageViewDelegate)] && // Only do the operation if a delegate exists to actually set the image.
[self.delegate imageView:self shouldPerformDragOperation:sender]) { // Only do the operation if a delegate wants us to do the operation.
// Get the image from the pasteboard
NSImage *im = [[NSImage alloc] initWithPasteboard:sender.draggingPasteboard];
// Make an array of the valid drops (NSBitmapImageRep)
NSMutableArray *acceptedDrops = [NSMutableArray arrayWithCapacity:im.representations.count];
for (NSImageRep *rep in im.representations) {
if (![rep isKindOfClass:[NSBitmapImageRep class]]) // We don't want PDFs
continue;
[acceptedDrops addObject:rep];
}
NSArray *imageArray = [sender.draggingPasteboard readObjectsForClasses:@[[NSImage class], [NSURL class]] options:nil];
NSMutableArray *acceptedDrops = [NSMutableArray arrayWithCapacity:imageArray.count];
for (NSInteger idx = 0; idx < imageArray.count; idx++) {
id obj = imageArray[idx];
if ([obj isKindOfClass:[NSImage class]]) {
[acceptedDrops addObject:[[obj representations] firstObject]];
} else {
// NSURL
[acceptedDrops addObject:[NSImageRep imageRepWithContentsOfURL:obj]];
}
}
if (acceptedDrops.count > 0) {
// We already confirmed that the delegate conforms to the protocol above. Now we can let the delegate
// decide what to do with the dropped images.
[self.delegate imageView:self didAcceptDroppedImages:acceptedDrops];
return YES;
}
return YES;
}
return NO;
+2 -2
View File
@@ -38,7 +38,7 @@ CG_EXTERN CGError CoreCursorCopyImages(CGSConnectionID cid, CGSCursorID cursorID
#pragma mark - Cursor APIs reversed by Alex Zielenski on Lion 10.7.3
#pragma mark -
CG_EXTERN CGError CGSIsCursorRegistered(CGSConnectionID cid, char *cursorName, bool *registered) __attribute__((weak_import));
//CG_EXTERN CGError CGSIsCursorRegistered(CGSConnectionID cid, char *cursorName, bool *registered) __attribute__((weak_import));
#if defined(MAC_OS_X_VERSION_10_8)
CG_EXTERN CGError CGSCopyRegisteredCursorImages(CGSConnectionID cid, char *cursorName, CGSize *imageSize, CGPoint *hotSpot, NSUInteger *frameCount, CGFloat *frameDuration, CFArrayRef *imageArray);
@@ -49,7 +49,7 @@ CG_EXTERN CGError CGSGetRegisteredCursorImages(CGSConnectionID cid, char *cursor
// Verified, stable
/*! Registers a cursor in the current CGSConnection or globally */
CG_EXTERN CGError CGSRegisterCursorWithImages(CGSConnectionID cid, char *cursorName, bool setGlobally, bool instantly, NSUInteger frameCount, CFArrayRef imageArray, CGSize cursorSize, CGPoint hotspot, int *seed, CGRect bounds, CGFloat frameDuration, NSInteger repeatCount);
CG_EXTERN CGError CGSRegisterCursorWithImages(CGSConnectionID cid, char *cursorName, bool setGlobally, bool instantly, CGSize cursorSize, CGPoint hotspot, NSUInteger frameCount, CGFloat frameDuration, CFArrayRef imageArray, int *seed);
CG_EXTERN CGError CGSSetSystemDefinedCursor(CGSConnectionID cid, CGSCursorID cursor);
+4 -4
View File
@@ -60,7 +60,7 @@ extern const NSString *MCCursorDictionaryPointsWideKey;
extern const NSString *MCCursorDictionaryPointsHighKey;
extern const NSString *MCCursorDictionaryRepresentationsKey;
extern NSDictionary *cursorMap();
extern NSDictionary *cursorMap(void);
extern NSString *nameForCursorIdentifier(NSString *identifier);
extern NSString *cursorIdentifierForName(NSString *name);
@@ -68,8 +68,8 @@ extern NSString *UUID(void);
extern NSDictionary *capeWithIdentifier(NSString *identifier);
extern void CGImageWriteToFile(CGImageRef image, CFStringRef path);
extern NSData *pngDataForImage(id image);
extern NSString *MMGet();
extern NSString *MMGet(NSString *prompt);
extern CGError MCIsCursorRegistered(CGSConnectionID cid, char *cursorName, bool *registered);
#endif
extern BOOL MCCursorIsPointer(NSString *identifier);
#endif
+17 -6
View File
@@ -85,7 +85,7 @@ void CGImageWriteToFile(CGImageRef image, CFStringRef path) {
NSData *pngDataForImage(id image) {
if ([image isKindOfClass:[NSBitmapImageRep class]]) {
return [(NSBitmapImageRep *)image representationUsingType:NSPNGFileType properties:nil];
return [(NSBitmapImageRep *)image TIFFRepresentationUsingCompression:NSTIFFCompressionLZW factor:1.0];
}
// CGImage
@@ -130,7 +130,7 @@ NSDictionary *capeWithIdentifier(NSString *identifier) {
return dict;
}
NSDictionary *cursorMap() {
extern NSDictionary *cursorMap() {
static NSDictionary *cursorNameMap = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
@@ -202,10 +202,10 @@ NSString *cursorIdentifierForName(NSString *name) {
return UUID();
}
extern CGError MCIsCursorRegistered(CGSConnectionID cid, char *cursorName, bool *registered) {
if (CGSIsCursorRegistered != NULL) {
return CGSIsCursorRegistered(cid, cursorName, registered);
}
CGError MCIsCursorRegistered(CGSConnectionID cid, char *cursorName, bool *registered) {
// if (CGSIsCursorRegistered != NULL) {
// return CGSIsCursorRegistered(cid, cursorName, registered);
// }
size_t size = 0;
CGError err = 0;
@@ -215,3 +215,14 @@ extern CGError MCIsCursorRegistered(CGSConnectionID cid, char *cursorName, bool
return err;
}
BOOL MCCursorIsPointer(NSString *identifier) {
static NSArray *pointers = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSDictionary *c = cursorMap();
pointers = [@[ [c allKeysForObject:@"Alias"][0], [c allKeysForObject:@"Arrow"][0], [c allKeysForObject:@"Busy"][0], [c allKeysForObject:@"Closed"][0], [c allKeysForObject:@"Copy Drag"][0], [c allKeysForObject:@"Counting Down"][0], [c allKeysForObject:@"Counting Up"][0], [c allKeysForObject:@"Counting Up/Down"][0], [c allKeysForObject:@"Ctx Menu"][0], [c allKeysForObject:@"Forbidden"][0], [c allKeysForObject:@"Link"][0], [c allKeysForObject:@"Move"][0], [c allKeysForObject:@"Open"][0], [c allKeysForObject:@"Pointing"][0], [c allKeysForObject:@"Poof"][0], [c allKeysForObject:@"Wait"][0], [c allKeysForObject:@"Zoom In"][0], [c allKeysForObject:@"Zoom Out"] ] retain];
});
return [pointers containsObject:identifier];
}
+2 -1
View File
@@ -15,10 +15,11 @@ extern NSString *MCPreferencesAppliedCursorKey;
extern NSString *MCPreferencesAppliedClickActionKey;
extern NSString *MCPreferencesCursorScaleKey;
extern NSString *MCPreferencesDoubleActionKey;
extern NSString *MCPreferencesHandednessKey;
extern NSString *MCSuppressDeleteLibraryConfirmationKey;
extern NSString *MCSuppressDeleteCursorConfirmationKey;
extern id MCDefaultFor(NSString *key, NSString *user, NSString *host);
#define MCDefault(key) MCDefaultFor(key, (__bridge NSString *)kCFPreferencesCurrentUser, (__bridge NSString *)kCFPreferencesCurrentHost)
extern id MCDefault(NSString *key);
#define MCFlag(key) [MCDefault(key) boolValue]
extern void MCSetDefaultFor(id value, NSString *key, NSString *user, NSString *host);
+8 -3
View File
@@ -12,6 +12,7 @@ NSString *MCPreferencesAppliedCursorKey = @"MCAppliedCursor";
NSString *MCPreferencesAppliedClickActionKey = @"MCLibraryClickAction";
NSString *MCPreferencesCursorScaleKey = @"MCCursorScale";
NSString *MCPreferencesDoubleActionKey = @"MCDoubleAction";
NSString *MCPreferencesHandednessKey = @"MCHandedness";
NSString *MCSuppressDeleteLibraryConfirmationKey = @"MCSuppressDeleteLibraryConfirmationKey";
NSString *MCSuppressDeleteCursorConfirmationKey = @"MCSuppressDeleteCursorConfirmationKey";
id MCDefaultFor(NSString *key, NSString *user, NSString *host) {
@@ -19,8 +20,12 @@ id MCDefaultFor(NSString *key, NSString *user, NSString *host) {
return [value autorelease];
}
void MCSetDefaultFor(id value, NSString *key, NSString *user, NSString *host) {
CFPreferencesSetValue((CFStringRef)key, (CFPropertyListRef)value, (CFStringRef)kMCDomain, (CFStringRef)user, (CFStringRef)host);
// CFPreferencesSynchronize((CFStringRef)kMCDomain, (CFStringRef)user, (CFStringRef)host);
id MCDefault(NSString *key) {
return [(id)CFPreferencesCopyAppValue((CFStringRef)key, (CFStringRef)kMCDomain) autorelease];
}
void MCSetDefaultFor(id value, NSString *key, NSString *user, NSString *host) {
CFPreferencesSetValue((CFStringRef)key, (CFPropertyListRef)value, (CFStringRef)kMCDomain, (CFStringRef)user, (CFStringRef)host);
// CFPreferencesSynchronize((CFStringRef)kMCDomain, (CFStringRef)user, (CFStringRef)host);
}
@@ -0,0 +1,20 @@
//
// NSBitmapImageRep+ColorSpace.h
// mousecloak
//
// Created by Alexander Zielenski on 12/30/18.
// Copyright © 2018 Alex Zielenski. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface NSBitmapImageRep (ColorSpace)
- (NSBitmapImageRep *)retaggedSRGBSpace;
- (NSBitmapImageRep *)ensuredSRGBSpace;
@end
NS_ASSUME_NONNULL_END
@@ -0,0 +1,36 @@
//
// NSBitmapImageRep+ColorSpace.m
// mousecloak
//
// Created by Alexander Zielenski on 12/30/18.
// Copyright © 2018 Alex Zielenski. All rights reserved.
//
#import "NSBitmapImageRep+ColorSpace.h"
@implementation NSBitmapImageRep (ColorSpace)
// Must be careful with this because the PNGFileType representationForType of NSBitmapImageRep
// does not encode the colorspace :(
- (NSBitmapImageRep *)ensuredSRGBSpace {
NSColorSpace *targetSpace = [NSColorSpace sRGBColorSpace];
if (self.colorSpace != NULL) {
if (self.colorSpace.numberOfColorComponents == 1) {
targetSpace = [NSColorSpace genericGamma22GrayColorSpace];
}
}
return [self bitmapImageRepByConvertingToColorSpace:targetSpace
renderingIntent:NSColorRenderingIntentDefault];
}
- (NSBitmapImageRep *)retaggedSRGBSpace {
NSColorSpace *targetSpace = [NSColorSpace sRGBColorSpace];
if (self.colorSpace != NULL) {
if (self.colorSpace.numberOfColorComponents == 1) {
targetSpace = [NSColorSpace genericGamma22GrayColorSpace];
}
}
return [self bitmapImageRepByRetaggingWithColorSpace:targetSpace];
}
@end
+1 -1
View File
@@ -10,7 +10,7 @@
#define Mousecape_apply_h
extern BOOL applyCursorForIdentifier(NSUInteger frameCount, CGFloat frameDuration, CGPoint hotSpot, CGSize size, NSArray *images, NSString *ident, NSUInteger repeatCount);
extern BOOL applyCapeForIdentifier(NSDictionary *cursor, NSString *identifier);
extern BOOL applyCapeForIdentifier(NSDictionary *cursor, NSString *identifier, BOOL restore);
extern BOOL applyCape(NSDictionary *dictionary);
extern BOOL applyCapeAtPath(NSString *path);
+62 -26
View File
@@ -10,6 +10,7 @@
#import "backup.h"
#import "restore.h"
#import "MCPrefs.h"
#import "NSBitmapImageRep+ColorSpace.h"
BOOL applyCursorForIdentifier(NSUInteger frameCount, CGFloat frameDuration, CGPoint hotSpot, CGSize size, NSArray *images, NSString *ident, NSUInteger repeatCount) {
if (frameCount > 24 || frameCount < 1) {
@@ -18,27 +19,29 @@ BOOL applyCursorForIdentifier(NSUInteger frameCount, CGFloat frameDuration, CGPo
}
char *idenfifier = (char *)ident.UTF8String;
int seed;
int seed = 0;
CGError err = CGSRegisterCursorWithImages(CGSMainConnectionID(),
idenfifier,
true,
true,
frameCount,
(__bridge CFArrayRef)images,
size,
hotSpot,
&seed,
CGRectMake(hotSpot.x, hotSpot.y, size.width, size.height),
frameCount,
frameDuration,
0);
(__bridge CFArrayRef)images,
&seed);
return (err == kCGErrorSuccess);
}
BOOL applyCapeForIdentifier(NSDictionary *cursor, NSString *identifier) {
if (!cursor)
BOOL applyCapeForIdentifier(NSDictionary *cursor, NSString *identifier, BOOL restore) {
if (!cursor || !identifier) {
NSLog(@"bad seed");
return NO;
}
BOOL lefty = MCFlag(MCPreferencesHandednessKey);
BOOL pointer = MCCursorIsPointer(identifier);
NSNumber *frameCount = cursor[MCCursorDictionaryFrameCountKey];
NSNumber *frameDuration = cursor[MCCursorDictionaryFrameDuratiomKey];
// NSNumber *repeatCount = cursor[MCCursorDictionaryRepeatCountKey];
@@ -48,27 +51,60 @@ BOOL applyCapeForIdentifier(NSDictionary *cursor, NSString *identifier) {
CGSize size = CGSizeMake([cursor[MCCursorDictionaryPointsWideKey] doubleValue],
[cursor[MCCursorDictionaryPointsHighKey] doubleValue]);
NSArray *reps = cursor[MCCursorDictionaryRepresentationsKey];
NSMutableArray *images = [NSMutableArray array];
if (lefty && !restore && pointer) {
MMLog("Lefty mode for %s", identifier.UTF8String);
hotSpot.x = size.width - hotSpot.x - 1;
}
for (id object in reps) {
CFTypeID type = CFGetTypeID((__bridge CFTypeRef)object);
// special case if array has a type of CGImage already there is no need to convert it
NSBitmapImageRep *rep;
if (type == CGImageGetTypeID()) {
images[images.count] = object;
continue;
rep = [[[NSBitmapImageRep alloc] initWithCGImage:(__bridge CGImageRef)object] autorelease];
} else {
rep = [[[NSBitmapImageRep alloc] initWithData:object] autorelease];
}
rep = rep.retaggedSRGBSpace;
if (!lefty || restore || !pointer) {
// special case if array has a type of CGImage already there is no need to convert it
if (type == CGImageGetTypeID()) {
images[images.count] = object;
continue;
}
images[images.count] = (__bridge id)[rep CGImage];
} else {
NSBitmapImageRep *newRep = [[[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL
pixelsWide:rep.pixelsWide
pixelsHigh:rep.pixelsHigh
bitsPerSample:8
samplesPerPixel:4
hasAlpha:YES
isPlanar:NO
colorSpaceName:NSCalibratedRGBColorSpace
bytesPerRow:4 * rep.pixelsWide
bitsPerPixel:32] autorelease];
NSGraphicsContext *ctx = [NSGraphicsContext graphicsContextWithBitmapImageRep:newRep];
[NSGraphicsContext saveGraphicsState];
[NSGraphicsContext setCurrentContext:ctx];
NSAffineTransform *transform = [NSAffineTransform transform];
[transform translateXBy:rep.pixelsWide yBy:0];
[transform scaleXBy:-1 yBy:1];
[transform concat];
[rep drawInRect:NSMakeRect(0, 0, rep.pixelsWide, rep.pixelsHigh)
fromRect:NSZeroRect
operation:NSCompositingOperationSourceOver
fraction:1.0
respectFlipped:NO
hints:nil];
[NSGraphicsContext restoreGraphicsState];
images[images.count] = (__bridge id)[newRep CGImage];
}
CFDataRef pngData = (__bridge CFDataRef)object;
CGDataProviderRef pngProvider = CGDataProviderCreateWithCFData(pngData);
CGImageRef rep = CGImageCreateWithPNGDataProvider(pngProvider, NULL, false, kCGRenderingIntentDefault);
CGDataProviderRelease(pngProvider);
images[images.count] = (__bridge id)rep;
CGImageRelease(rep);
}
return applyCursorForIdentifier(frameCount.unsignedIntegerValue, frameDuration.doubleValue, hotSpot, size, images, identifier, 0);
@@ -89,7 +125,7 @@ BOOL applyCape(NSDictionary *dictionary) {
NSDictionary *cape = cursors[key];
MMLog("Hooking for %s", key.UTF8String);
BOOL success = applyCapeForIdentifier(cape, key);
BOOL success = applyCapeForIdentifier(cape, key, NO);
if (!success) {
MMLog(BOLD RED "Failed to hook identifier %s for some unknown reason. Bailing out..." RESET, key.UTF8String);
return NO;
+1 -1
View File
@@ -11,6 +11,6 @@
extern NSString *backupStringForIdentifier(NSString *identifier);
extern void backupCursorForIdentifier(NSString *ident);
extern void backupAllCursors();
extern void backupAllCursors(void);
#endif
+1 -1
View File
@@ -29,7 +29,7 @@ void backupCursorForIdentifier(NSString *ident) {
return;
NSDictionary *cape = capeWithIdentifier(ident);
(void)applyCapeForIdentifier(cape, backupIdent);
(void)applyCapeForIdentifier(cape, backupIdent, YES);
}
+2 -2
View File
@@ -11,8 +11,8 @@
extern NSError *createCape(NSString *input, NSString *output, BOOL convert);
extern NSDictionary *processedCapeWithIdentifier(NSString *identifier);
extern void dumpCursorsToFile(NSString *path);
extern void dumpCursorsToFolder(NSString *path);
extern BOOL dumpCursorsToFile(NSString *path, BOOL (^progress)(NSUInteger current, NSUInteger total));
extern BOOL dumpCursorsToFolder(NSString *path, BOOL (^progress)(NSUInteger current, NSUInteger total));
extern NSDictionary *createCapeFromDirectory(NSString *path);
extern NSDictionary *createCapeFromMightyMouse(NSDictionary *mightyMouse, NSDictionary *metadata);
+58 -16
View File
@@ -8,6 +8,7 @@
#import "create.h"
#import "NSCursor_Private.h"
#import "NSBitmapImageRep+ColorSpace.h"
NSError *createCape(NSString *input, NSString *output, BOOL convert) {
NSDictionary *cape;
@@ -111,9 +112,8 @@ NSDictionary *createCapeFromDirectory(NSString *path) {
continue;
NSBitmapImageRep *image = [NSBitmapImageRep imageRepWithData:[NSData dataWithContentsOfFile:repPath]];
if (image) {
NSData *pngData = [image representationUsingType:NSPNGFileType properties:nil];
NSData *pngData = [image.ensuredSRGBSpace TIFFRepresentationUsingCompression:NSTIFFCompressionLZW factor:1.0];
[representations addObject:pngData];
}
@@ -186,12 +186,12 @@ NSDictionary *createCapeFromMightyMouse(NSDictionary *mightyMouse, NSDictionary
samplesPerPixel:spp.integerValue
hasAlpha:YES
isPlanar:NO
colorSpaceName:NSDeviceRGBColorSpace
colorSpaceName:NSCalibratedRGBColorSpace
bitmapFormat:NSAlphaFirstBitmapFormat | kCGBitmapByteOrder32Big
bytesPerRow:bpr.integerValue
bitsPerPixel:bpp.integerValue];
currentCursor[MCCursorDictionaryRepresentationsKey] = @[ [rep representationUsingType:NSPNGFileType properties:nil] ];
currentCursor[MCCursorDictionaryRepresentationsKey] = @[ [rep.ensuredSRGBSpace TIFFRepresentationUsingCompression:NSTIFFCompressionLZW factor:1.0] ];
currentCursor[MCCursorDictionaryPointsWideKey] = wide;
currentCursor[MCCursorDictionaryPointsHighKey] = high;
currentCursor[MCCursorDictionaryHotSpotXKey] = hotX;
@@ -246,14 +246,17 @@ NSDictionary *processedCapeWithIdentifier(NSString *identifier) {
NSMutableArray *reps = [NSMutableArray array];
for (id image in cursors) {
reps[reps.count] = pngDataForImage(image);
CGImageRef im = (__bridge CGImageRef)image;
NSBitmapImageRep *rep = [[NSBitmapImageRep alloc] initWithCGImage:im];
reps[reps.count] = pngDataForImage(rep.ensuredSRGBSpace);
}
dict[MCCursorDictionaryRepresentationsKey] = reps;
return dict;
}
void dumpCursorsToFile(NSString *path) {
BOOL dumpCursorsToFile(NSString *path, BOOL (^progress)(NSUInteger current, NSUInteger total)) {
MMLog("Dumping cursors...");
float originalScale;
@@ -261,17 +264,34 @@ void dumpCursorsToFile(NSString *path) {
CGSSetCursorScale(CGSMainConnectionID(), 16.0);
CGSHideCursor(CGSMainConnectionID());
NSInteger total = 9 + 45;
NSInteger current = 0;
NSMutableDictionary *cursors = [NSMutableDictionary dictionary];
NSUInteger i = 0;
NSString *key = nil;
while ((key = defaultCursors[i]) != nil) {
if (progress) {
current = i;
if (!progress(current, total)) {
return NO;
}
}
MMLog("Gathering data for %s", key.UTF8String);
cursors[key] = processedCapeWithIdentifier(key);
i++;
}
for (int x = 0x0; x < 0x100; x++) {
for (int x = 0; x < 45; x++) {
if (progress) {
current = i + x;
if (!progress(current, total)) {
return NO;
}
}
NSString *key = [@"com.apple.cursor." stringByAppendingFormat:@"%d", x];
CoreCursorSet(CGSMainConnectionID(), x);
@@ -283,7 +303,11 @@ void dumpCursorsToFile(NSString *path) {
cursors[key] = cape;
}
if (progress) {
progress(total, total);
}
NSMutableDictionary *cape = [NSMutableDictionary dictionary];
cape[MCCursorDictionaryAuthorKey] = @"Apple, Inc.";
cape[MCCursorDictionaryCapeNameKey] = @"Cursor Dump";
@@ -298,10 +322,10 @@ void dumpCursorsToFile(NSString *path) {
CGSSetCursorScale(CGSMainConnectionID(), originalScale);
CGSShowCursor(CGSMainConnectionID());
[cape writeToFile:path atomically:NO];
return [cape writeToFile:path atomically:NO];
}
extern void dumpCursorsToFolder(NSString *path) {
BOOL dumpCursorsToFolder(NSString *path, BOOL (^progress)(NSUInteger current, NSUInteger total)) {
[[NSFileManager defaultManager] createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];
MMLog("Dumping cursors...");
@@ -311,11 +335,19 @@ extern void dumpCursorsToFolder(NSString *path) {
CGSSetCursorScale(CGSMainConnectionID(), 16.0);
CGSHideCursor(CGSMainConnectionID());
NSInteger total = 9 + 45;
NSInteger current = 0;
NSUInteger i = 0;
NSString *key = nil;
while ((key = defaultCursors[i]) != nil) {
current = i;
if (progress) {
if (!progress(current, total)) {
return NO;
}
}
MMLog("Gathering data for %s", key.UTF8String);
NSDictionary *cape = processedCapeWithIdentifier(key);
@@ -323,7 +355,13 @@ extern void dumpCursorsToFolder(NSString *path) {
i++;
}
for (int x = 0x0; x < 0x100; x++) {
for (int x = 0; x < 45; x++) {
current = i + x;
if (progress) {
if (!progress(current, total)) {
return NO;
}
}
NSString *key = [@"com.apple.cursor." stringByAppendingFormat:@"%d", x];
CoreCursorSet(CGSMainConnectionID(), x);
@@ -336,10 +374,14 @@ extern void dumpCursorsToFolder(NSString *path) {
[[cape[MCCursorDictionaryRepresentationsKey] lastObject] writeToFile:[[path stringByAppendingPathComponent:key] stringByAppendingPathExtension:@"png"] atomically:NO];
}
if (progress) {
progress(total, total);
}
CGSSetCursorScale(CGSMainConnectionID(), originalScale);
CGSShowCursor(CGSMainConnectionID());
return YES;
}
extern void exportCape(NSDictionary *cape, NSString *destination) {
@@ -354,4 +396,4 @@ extern void exportCape(NSDictionary *cape, NSString *destination) {
[data writeToFile:[destination stringByAppendingPathComponent:[NSString stringWithFormat:@"%@_%lu.png", key, (unsigned long)idx]] atomically:NO];
}
}
}
}
+6 -3
View File
@@ -68,7 +68,7 @@ int main(int argc, char * argv[]) {
options.applicationVersion = ^{ return @"2.0"; };
options.applicationBuild = ^{ return @""; };
options.printHelpHeader = ^{ return @(BOLD WHITE "%APPNAME v%APPVERSION" RESET); };
options.printHelpFooter = ^{ return @(BOLD WHITE "Copyright © 2013-14 Alex Zielenski" RESET); };
options.printHelpFooter = ^{ return @(BOLD WHITE "Copyright © 2013-20 Alex Zielenski" RESET); };
GBCommandLineParser *parser = [[[GBCommandLineParser alloc] init] autorelease];
[options registerOptionsToCommandLineParser:parser];
@@ -81,7 +81,7 @@ int main(int argc, char * argv[]) {
MMLog(BOLD RED "Missing value for command line option %s, try --help!" RESET, option.UTF8String);
break;
case GBParseFlagArgument:
[settings addArgument:value];
[settings setObject:@YES forKey:value];
break;
case GBParseFlagOption:
[settings setObject:value forKey:option];
@@ -161,7 +161,10 @@ int main(int argc, char * argv[]) {
goto fin;
} else if (dump) {
dumpCursorsToFile([settings objectForKey:@"dump"]);
dumpCursorsToFile([settings objectForKey:@"dump"], ^BOOL (NSUInteger progress, NSUInteger total) {
MMLog("Dumped %lu of %lu", (unsigned long)progress, (unsigned long)total);
return YES;
});
} else if (scale) {
NSNumber *number = [settings objectForKey:@"scale"];
-79
View File
@@ -1,79 +0,0 @@
.\"Modified from man(1) of FreeBSD, the NetBSD mdoc.template, and mdoc.samples.
.\"See Also:
.\"man mdoc.samples for a complete listing of options
.\"man mdoc for the short list of editing options
.\"/usr/share/misc/mdoc.template
.Dd 2/1/14 \" DATE
.Dt mousecloak 1 \" Program name and manual section number
.Os Darwin
.Sh NAME \" Section Header - required - don't modify
.Nm mousecloak,
.\" The following lines are read in generating the apropos(man -k) database. Use only key
.\" words here as the database is built based on the words here and in the .ND line.
.Nm Other_name_for_same_program(),
.Nm Yet another name for the same program.
.\" Use .Nm macro to designate other names for the documented program.
.Nd This line parsed for whatis database.
.Sh SYNOPSIS \" Section Header - required - don't modify
.Nm
.Op Fl abcd \" [-abcd]
.Op Fl a Ar path \" [-a path]
.Op Ar file \" [file]
.Op Ar \" [file ...]
.Ar arg0 \" Underlined argument - use .Ar anywhere to underline
arg2 ... \" Arguments
.Sh DESCRIPTION \" Section Header - required - don't modify
Use the .Nm macro to refer to your program throughout the man page like such:
.Nm
Underlining is accomplished with the .Ar macro like this:
.Ar underlined text .
.Pp \" Inserts a space
A list of items with descriptions:
.Bl -tag -width -indent \" Begins a tagged list
.It item a \" Each item preceded by .It macro
Description of item a
.It item b
Description of item b
.El \" Ends the list
.Pp
A list of flags and their descriptions:
.Bl -tag -width -indent \" Differs from above in tag removed
.It Fl a \"-a flag as a list item
Description of -a flag
.It Fl b
Description of -b flag
.El \" Ends the list
.Pp
.\" .Sh ENVIRONMENT \" May not be needed
.\" .Bl -tag -width "ENV_VAR_1" -indent \" ENV_VAR_1 is width of the string ENV_VAR_1
.\" .It Ev ENV_VAR_1
.\" Description of ENV_VAR_1
.\" .It Ev ENV_VAR_2
.\" Description of ENV_VAR_2
.\" .El
.Sh FILES \" File used or created by the topic of the man page
.Bl -tag -width "/Users/joeuser/Library/really_long_file_name" -compact
.It Pa /usr/share/file_name
FILE_1 description
.It Pa /Users/joeuser/Library/really_long_file_name
FILE_2 description
.El \" Ends the list
.\" .Sh DIAGNOSTICS \" May not be needed
.\" .Bl -diag
.\" .It Diagnostic Tag
.\" Diagnostic informtion here.
.\" .It Diagnostic Tag
.\" Diagnostic informtion here.
.\" .El
.Sh SEE ALSO
.\" List links in ascending order by section, alphabetically within a section.
.\" Please do not reference files that do not exist without filing a bug report
.Xr a 1 ,
.Xr b 1 ,
.Xr c 1 ,
.Xr a 2 ,
.Xr b 2 ,
.Xr a 3 ,
.Xr b 3
.\" .Sh BUGS \" Document known, unremedied bugs
.\" .Sh HISTORY \" Document history if command behaves in a unique manner
+1 -1
View File
@@ -11,6 +11,6 @@
extern NSString *restoreStringForIdentifier(NSString *identifier);
extern void restoreCursorForIdentifier(NSString *ident);
extern void resetAllCursors();
extern void resetAllCursors(void);
#endif
+7 -2
View File
@@ -23,7 +23,7 @@ void restoreCursorForIdentifier(NSString *ident) {
MMLog("Restoring cursor %s from %s", restoreIdent.UTF8String, ident.UTF8String);
if (cape && registered) {
applyCapeForIdentifier(cape, restoreIdent);
applyCapeForIdentifier(cape, restoreIdent, YES);
}
CGSRemoveRegisteredCursor(CGSMainConnectionID(), (char *)ident.UTF8String, false);
@@ -44,7 +44,12 @@ void resetAllCursors() {
MMLog("Restoring core cursors...");
if (CoreCursorUnregisterAll(CGSMainConnectionID()) == 0) {
MCSetDefault(NULL, MCPreferencesAppliedCursorKey);
for (int x = 0; x < 45; x++) {
CoreCursorSet(CGSMainConnectionID(), x);
}
MMLog(BOLD GREEN "Successfully restored all cursors." RESET);
} else
MMLog(BOLD RED "Received an error while restoring core cursors." RESET);
}
}
+2 -2
View File
@@ -9,8 +9,8 @@
#ifndef Mousecape_scale_h
#define Mousecape_scale_h
extern float cursorScale();
extern float defaultCursorScale();
extern float cursorScale(void);
extern float defaultCursorScale(void);
extern BOOL setCursorScale(float scale);
#endif
+3 -3
View File
@@ -9,7 +9,7 @@
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string>${PRODUCT_NAME}</string>
<string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
@@ -22,10 +22,10 @@
<string>????</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSBackgroundOnly</key>
<true/>
<key>LSMinimumSystemVersion</key>
<string>${MACOSX_DEPLOYMENT_TARGET}</string>
<key>LSUIElement</key>
<true/>
<key>NSHumanReadableCopyright</key>
<string>Copyright © 2014 Alex Zielenski. All rights reserved.</string>
</dict>
+44
View File
@@ -0,0 +1,44 @@
Privacy Policy
Alexander S Zielenski built the Mousecape app as an Open Source app. This SERVICE is provided by Alexander S Zielenski at no cost and is intended for use as is.
This page is used to inform visitors regarding my policies with the collection, use, and disclosure of Personal Information if anyone decided to use my Service.
If you choose to use my Service, then you agree to the collection and use of information in relation to this policy. The Personal Information that I collect is used for providing and improving the Service. I will not use or share your information with anyone except as described in this Privacy Policy.
The entire distributed copy of Mousecape made available by Alexander Zielenski henceforth
shall be referred to as "the app".
Information Collection and Use
The app does not collect or share any information. If files produced by the app
with personal information are shared it is because a file was shared by the creator.
The app does not use third party services that may collect information used to identify you.
Log Data
The app collects no logs.
Service Providers
Mousecape has no third party affiliates.
Childrens Privacy
These Services do not address anyone under the age of 13. Parents and guardians
should make sure children do not share their "cape" files produced by the app
with personal information inside for safety.
Changes to This Privacy Policy
I may update our Privacy Policy from time to time. Thus, you are advised to review this page periodically for any changes.
Since I have no means of notifying you of updates it is incumbent upon you to visit when you download a new version of Mousecape.
This policy is effective as of 2020-06-13
Contact Us
If you have any questions or suggestions about my Privacy Policy, do not hesitate to contact me at support@alexzielenski.com.

Some files were not shown because too many files have changed in this diff Show More