From f2ef091b2c7f9fc65734bc489f2aec464944f82c Mon Sep 17 00:00:00 2001 From: Yee Cheng Chin Date: Mon, 28 Oct 2019 01:01:25 -0700 Subject: [PATCH] Use a custom I-beam mouse cursor for pre-Mojave OS versions Prevoiusly, #859 removed the custom high-contrast I-beam mouse cursor in favor of using the system-default I-beam cursor. However, it mostly worked well on 10.14 Mojave or above, as the cursor is designed with dark mode in mind and works well on both bright and dark backgrounds. Since this doesn't work well on older macOS versions, add back the custom cursor and only enable it on those older macOS versions. Fix #910. --- src/MacVim/MMTextViewHelper.m | 34 +++++++++++++++++++- src/MacVim/MacVim.h | 3 ++ src/MacVim/MacVim.xcodeproj/project.pbxproj | 4 +++ src/MacVim/ibeam.png | Bin 0 -> 193 bytes 4 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 src/MacVim/ibeam.png diff --git a/src/MacVim/MMTextViewHelper.m b/src/MacVim/MMTextViewHelper.m index 1fdf1cece7..43b718522d 100644 --- a/src/MacVim/MMTextViewHelper.m +++ b/src/MacVim/MMTextViewHelper.m @@ -1028,6 +1028,38 @@ KeyboardInputSourcesEqual(TISInputSourceRef a, TISInputSourceRef b) - (void)setCursor { + static NSCursor *ibeamCursor = nil; + + if (!ibeamCursor) { + if (floor(NSAppKitVersionNumber) >= NSAppKitVersionNumber10_14) + { + // macOS 10.14 (Mojave) introduced dark mode, and seems to have + // added a thick white border around the system I-beam cursor, + // which makes it legible across bright and dark background. Just + // use it. + ibeamCursor = [NSCursor IBeamCursor]; + } + else + { + // Pre-Mojave versions the I-beam cursors doesn't have the strong + // white background and is hard to read on dark background. Use a + // custom I-beam cursor that has better contrast against dark + // backgrounds. + NSImage *ibeamImage = [NSImage imageNamed:@"ibeam"]; + if (ibeamImage) { + NSSize size = [ibeamImage size]; + NSPoint hotSpot = { size.width*.5f, size.height*.5f }; + + ibeamCursor = [[NSCursor alloc] + initWithImage:ibeamImage hotSpot:hotSpot]; + } + if (!ibeamCursor) { + ASLogWarn(@"Failed to load custom Ibeam cursor"); + ibeamCursor = [NSCursor IBeamCursor]; + } + } + } + // This switch should match mshape_names[] in misc2.c. // // We don't fill every shape here. Only the ones that make sense and have @@ -1037,7 +1069,7 @@ KeyboardInputSourcesEqual(TISInputSourceRef a, TISInputSourceRef b) [[NSCursor arrowCursor] set]; break; //case 1: // blank case 2: // beam - [[NSCursor IBeamCursor] set]; break; + [ibeamCursor set]; break; case 3: // updown case 4: // udsizing [[NSCursor resizeUpDownCursor] set]; break; diff --git a/src/MacVim/MacVim.h b/src/MacVim/MacVim.h index 080f3031b0..d11f58013e 100644 --- a/src/MacVim/MacVim.h +++ b/src/MacVim/MacVim.h @@ -48,6 +48,9 @@ #ifndef NSAppKitVersionNumber10_13 # define NSAppKitVersionNumber10_13 1561 #endif +#ifndef NSAppKitVersionNumber10_14 +# define NSAppKitVersionNumber10_14 1671 +#endif #if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_12 // Deprecated constants in 10.12 SDK diff --git a/src/MacVim/MacVim.xcodeproj/project.pbxproj b/src/MacVim/MacVim.xcodeproj/project.pbxproj index 292751011d..a6bd3c99aa 100644 --- a/src/MacVim/MacVim.xcodeproj/project.pbxproj +++ b/src/MacVim/MacVim.xcodeproj/project.pbxproj @@ -53,6 +53,7 @@ 1DCD00D30E50B2B700460166 /* Undo.png in Resources */ = {isa = PBXBuildFile; fileRef = 1DCD00BE0E50B2B700460166 /* Undo.png */; }; 1DD04DEC0C529C5E006CDC2B /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 1DD04DEB0C529C5E006CDC2B /* Credits.rtf */; }; 1DD0C20C0C60FFB4008CD84A /* gvimrc in Copy Vim Runtime Files */ = {isa = PBXBuildFile; fileRef = 1DD0C20A0C60FF9A008CD84A /* gvimrc */; }; + 1DD3D51E0D82D4C9006E4320 /* ibeam.png in Resources */ = {isa = PBXBuildFile; fileRef = 1DD3D51D0D82D4C9006E4320 /* ibeam.png */; }; 1DD66ECE0C803D3600EBDAB3 /* MMApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DD66ECC0C803D3600EBDAB3 /* MMApplication.m */; }; 1DD9F5E50C85D60500E8D5A5 /* SystemColors.plist in Resources */ = {isa = PBXBuildFile; fileRef = 1DD9F5E40C85D60500E8D5A5 /* SystemColors.plist */; }; 1DE3F8E70D50F80500052B9E /* Preferences.nib in Resources */ = {isa = PBXBuildFile; fileRef = 1DE3F8E50D50F80500052B9E /* Preferences.nib */; }; @@ -228,6 +229,7 @@ 1DCD00BE0E50B2B700460166 /* Undo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Undo.png; path = Toolbar/Undo.png; sourceTree = ""; }; 1DD04DEB0C529C5E006CDC2B /* Credits.rtf */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; path = Credits.rtf; sourceTree = ""; }; 1DD0C20A0C60FF9A008CD84A /* gvimrc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = gvimrc; sourceTree = ""; }; + 1DD3D51D0D82D4C9006E4320 /* ibeam.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ibeam.png; sourceTree = ""; }; 1DD66ECB0C803D3600EBDAB3 /* MMApplication.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MMApplication.h; sourceTree = ""; }; 1DD66ECC0C803D3600EBDAB3 /* MMApplication.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = MMApplication.m; sourceTree = ""; }; 1DD9F5E40C85D60500E8D5A5 /* SystemColors.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = SystemColors.plist; sourceTree = ""; }; @@ -554,6 +556,7 @@ 1D8BEA73104992290069B072 /* FindAndReplace.nib */, 0395A8A90D72D88B00881434 /* General.png */, 1D22374A0E45DF4800E6FFFF /* Advanced.png */, + 1DD3D51D0D82D4C9006E4320 /* ibeam.png */, 1D0F11480D58C77800D5DA09 /* Font */, 1DE9726C0C48050600F96A9F /* Toolbar */, 1DD9F5E40C85D60500E8D5A5 /* SystemColors.plist */, @@ -842,6 +845,7 @@ 1DD9F5E50C85D60500E8D5A5 /* SystemColors.plist in Resources */, 1DE3F8E70D50F80500052B9E /* Preferences.nib in Resources */, 0395A8AA0D72D88B00881434 /* General.png in Resources */, + 1DD3D51E0D82D4C9006E4320 /* ibeam.png in Resources */, 1D22374B0E45DF4800E6FFFF /* Advanced.png in Resources */, 1DCD00BF0E50B2B700460166 /* Attention.png in Resources */, 1DCD00C00E50B2B700460166 /* Copy.png in Resources */, diff --git a/src/MacVim/ibeam.png b/src/MacVim/ibeam.png new file mode 100644 index 0000000000000000000000000000000000000000..724aae51b59d86922f402e81a7081361dad000a2 GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^oIotZ!VDy<*S)L;QjEnx?oJHr&dIz4a`*#$LR>$8 z{`~*{e<1JEr%xY0evGl(&<#>o666=m;PC858j!M5lTo95n|dTDIqG!G0Dl{Da#cH fpXOOSn^+mvwlbSvJLXsm)W+cH>gTe~DWM4f80j|i literal 0 HcmV?d00001