diff options
| author | Tomáš Znamenáček | 2014-08-05 15:34:46 +0200 | 
|---|---|---|
| committer | Tomáš Znamenáček | 2015-01-07 15:05:12 +0100 | 
| commit | 1c801726d35e56d3bbf4a33279213bc60935c244 (patch) | |
| tree | fad9932f1542e10daa6a1d27c1e34fe8157577a4 /Framework | |
| parent | 88392d1a6963cca5009b9b0c20b054ad9e911b6c (diff) | |
| download | MASShortcut-1c801726d35e56d3bbf4a33279213bc60935c244.tar.bz2 | |
Converted keycode macros to plain functions.
Plain functions are less prone to bugs, the compiler understands
them better and can offer better error messages, and plain functions
can be refactored more easily.
Diffstat (limited to 'Framework')
| -rw-r--r-- | Framework/MASKeyCodes.h | 19 | ||||
| -rw-r--r-- | Framework/MASShortcut.h | 10 | ||||
| -rw-r--r-- | Framework/MASShortcut.m | 82 | ||||
| -rw-r--r-- | Framework/MASShortcutView.h | 2 | ||||
| -rw-r--r-- | Framework/MASShortcutView.m | 4 | ||||
| -rw-r--r-- | Framework/Prefix.pch | 1 | 
6 files changed, 63 insertions, 55 deletions
| diff --git a/Framework/MASKeyCodes.h b/Framework/MASKeyCodes.h index 69b2a97..9fb5b02 100644 --- a/Framework/MASKeyCodes.h +++ b/Framework/MASKeyCodes.h @@ -21,3 +21,22 @@ enum {  	kMASShortcutGlyphNorthwestArrow = 0x2196,  	kMASShortcutGlyphSoutheastArrow = 0x2198,  } MASShortcutGlyph; + +NS_INLINE NSString* NSStringFromMASKeyCode(unsigned short ch) +{ +    return [NSString stringWithFormat:@"%C", ch]; +} + +NS_INLINE NSUInteger MASPickCocoaModifiers(NSUInteger flags) +{ +    return (flags & (NSControlKeyMask | NSShiftKeyMask | NSAlternateKeyMask | NSCommandKeyMask)); +} + +NS_INLINE UInt32 MASCarbonModifiersFromCocoaModifiers(NSUInteger cocoaFlags) +{ +    return +          (cocoaFlags & NSCommandKeyMask ? cmdKey : 0) +        | (cocoaFlags & NSAlternateKeyMask ? optionKey : 0) +        | (cocoaFlags & NSControlKeyMask ? controlKey : 0) +        | (cocoaFlags & NSShiftKeyMask ? shiftKey : 0); +} diff --git a/Framework/MASShortcut.h b/Framework/MASShortcut.h index f1e489c..b7ed55c 100644 --- a/Framework/MASShortcut.h +++ b/Framework/MASShortcut.h @@ -1,14 +1,4 @@  #import "MASKeyCodes.h" -#import <AppKit/AppKit.h> - -#define MASShortcutChar(char) [NSString stringWithFormat:@"%C", (unsigned short)(char)] -#define MASShortcutClear(flags) (flags & (NSControlKeyMask | NSShiftKeyMask | NSAlternateKeyMask | NSCommandKeyMask)) -#define MASShortcutCarbonFlags(cocoaFlags) (\ -    (cocoaFlags & NSCommandKeyMask ? cmdKey : 0) | \ -    (cocoaFlags & NSAlternateKeyMask ? optionKey : 0) | \ -    (cocoaFlags & NSControlKeyMask ? controlKey : 0) | \ -    (cocoaFlags & NSShiftKeyMask ? shiftKey : 0)) -  @interface MASShortcut : NSObject <NSSecureCoding> diff --git a/Framework/MASShortcut.m b/Framework/MASShortcut.m index ccc2035..3e1e498 100644 --- a/Framework/MASShortcut.m +++ b/Framework/MASShortcut.m @@ -40,7 +40,7 @@ NSString *const MASShortcutModifierFlags = @"ModifierFlags";      self = [super init];      if (self) {          _keyCode = code; -        _modifierFlags = MASShortcutClear(flags); +        _modifierFlags = MASPickCocoaModifiers(flags);      }      return self;  } @@ -70,7 +70,7 @@ NSString *const MASShortcutModifierFlags = @"ModifierFlags";  - (void)setModifierFlags:(NSUInteger)value  { -    _modifierFlags = MASShortcutClear(value); +    _modifierFlags = MASPickCocoaModifiers(value);  }  - (UInt32)carbonKeyCode @@ -80,7 +80,7 @@ NSString *const MASShortcutModifierFlags = @"ModifierFlags";  - (UInt32)carbonFlags  { -    return MASShortcutCarbonFlags(self.modifierFlags); +    return MASCarbonModifiersFromCocoaModifiers(self.modifierFlags);  }  - (NSString *)description @@ -93,27 +93,27 @@ NSString *const MASShortcutModifierFlags = @"ModifierFlags";      NSString *keyCodeString = self.keyCodeString;      if (keyCodeString.length > 1) {          switch (self.keyCode) { -            case kVK_F1: return MASShortcutChar(0xF704); -            case kVK_F2: return MASShortcutChar(0xF705); -            case kVK_F3: return MASShortcutChar(0xF706); -            case kVK_F4: return MASShortcutChar(0xF707); -            case kVK_F5: return MASShortcutChar(0xF708); -            case kVK_F6: return MASShortcutChar(0xF709); -            case kVK_F7: return MASShortcutChar(0xF70a); -            case kVK_F8: return MASShortcutChar(0xF70b); -            case kVK_F9: return MASShortcutChar(0xF70c); -            case kVK_F10: return MASShortcutChar(0xF70d); -            case kVK_F11: return MASShortcutChar(0xF70e); -            case kVK_F12: return MASShortcutChar(0xF70f); +            case kVK_F1: return NSStringFromMASKeyCode(0xF704); +            case kVK_F2: return NSStringFromMASKeyCode(0xF705); +            case kVK_F3: return NSStringFromMASKeyCode(0xF706); +            case kVK_F4: return NSStringFromMASKeyCode(0xF707); +            case kVK_F5: return NSStringFromMASKeyCode(0xF708); +            case kVK_F6: return NSStringFromMASKeyCode(0xF709); +            case kVK_F7: return NSStringFromMASKeyCode(0xF70a); +            case kVK_F8: return NSStringFromMASKeyCode(0xF70b); +            case kVK_F9: return NSStringFromMASKeyCode(0xF70c); +            case kVK_F10: return NSStringFromMASKeyCode(0xF70d); +            case kVK_F11: return NSStringFromMASKeyCode(0xF70e); +            case kVK_F12: return NSStringFromMASKeyCode(0xF70f);              // From this point down I am guessing F13 etc come sequentially, I don't have a keyboard to test. -            case kVK_F13: return MASShortcutChar(0xF710); -            case kVK_F14: return MASShortcutChar(0xF711); -            case kVK_F15: return MASShortcutChar(0xF712); -            case kVK_F16: return MASShortcutChar(0xF713); -            case kVK_F17: return MASShortcutChar(0xF714); -            case kVK_F18: return MASShortcutChar(0xF715); -            case kVK_F19: return MASShortcutChar(0xF716); -            case kVK_Space: return MASShortcutChar(0x20); +            case kVK_F13: return NSStringFromMASKeyCode(0xF710); +            case kVK_F14: return NSStringFromMASKeyCode(0xF711); +            case kVK_F15: return NSStringFromMASKeyCode(0xF712); +            case kVK_F16: return NSStringFromMASKeyCode(0xF713); +            case kVK_F17: return NSStringFromMASKeyCode(0xF714); +            case kVK_F18: return NSStringFromMASKeyCode(0xF715); +            case kVK_F19: return NSStringFromMASKeyCode(0xF716); +            case kVK_Space: return NSStringFromMASKeyCode(0x20);              default: return @"";          }      } @@ -145,18 +145,18 @@ NSString *const MASShortcutModifierFlags = @"ModifierFlags";          case kVK_F18: return @"F18";          case kVK_F19: return @"F19";          case kVK_Space: return NSLocalizedString(@"Space", @"Shortcut glyph name for SPACE key"); -        case kVK_Escape: return MASShortcutChar(kMASShortcutGlyphEscape); -        case kVK_Delete: return MASShortcutChar(kMASShortcutGlyphDeleteLeft); -        case kVK_ForwardDelete: return MASShortcutChar(kMASShortcutGlyphDeleteRight); -        case kVK_LeftArrow: return MASShortcutChar(kMASShortcutGlyphLeftArrow); -        case kVK_RightArrow: return MASShortcutChar(kMASShortcutGlyphRightArrow); -        case kVK_UpArrow: return MASShortcutChar(kMASShortcutGlyphUpArrow); -        case kVK_DownArrow: return MASShortcutChar(kMASShortcutGlyphDownArrow); -        case kVK_Help: return MASShortcutChar(kMASShortcutGlyphHelp); -        case kVK_PageUp: return MASShortcutChar(kMASShortcutGlyphPageUp); -        case kVK_PageDown: return MASShortcutChar(kMASShortcutGlyphPageDown); -        case kVK_Tab: return MASShortcutChar(kMASShortcutGlyphTabRight); -        case kVK_Return: return MASShortcutChar(kMASShortcutGlyphReturnR2L); +        case kVK_Escape: return NSStringFromMASKeyCode(kMASShortcutGlyphEscape); +        case kVK_Delete: return NSStringFromMASKeyCode(kMASShortcutGlyphDeleteLeft); +        case kVK_ForwardDelete: return NSStringFromMASKeyCode(kMASShortcutGlyphDeleteRight); +        case kVK_LeftArrow: return NSStringFromMASKeyCode(kMASShortcutGlyphLeftArrow); +        case kVK_RightArrow: return NSStringFromMASKeyCode(kMASShortcutGlyphRightArrow); +        case kVK_UpArrow: return NSStringFromMASKeyCode(kMASShortcutGlyphUpArrow); +        case kVK_DownArrow: return NSStringFromMASKeyCode(kMASShortcutGlyphDownArrow); +        case kVK_Help: return NSStringFromMASKeyCode(kMASShortcutGlyphHelp); +        case kVK_PageUp: return NSStringFromMASKeyCode(kMASShortcutGlyphPageUp); +        case kVK_PageDown: return NSStringFromMASKeyCode(kMASShortcutGlyphPageDown); +        case kVK_Tab: return NSStringFromMASKeyCode(kMASShortcutGlyphTabRight); +        case kVK_Return: return NSStringFromMASKeyCode(kMASShortcutGlyphReturnR2L);          // Keypad          case kVK_ANSI_Keypad0: return @"0"; @@ -172,15 +172,15 @@ NSString *const MASShortcutModifierFlags = @"ModifierFlags";          case kVK_ANSI_KeypadDecimal: return @".";          case kVK_ANSI_KeypadMultiply: return @"*";          case kVK_ANSI_KeypadPlus: return @"+"; -        case kVK_ANSI_KeypadClear: return MASShortcutChar(kMASShortcutGlyphPadClear); +        case kVK_ANSI_KeypadClear: return NSStringFromMASKeyCode(kMASShortcutGlyphPadClear);          case kVK_ANSI_KeypadDivide: return @"/"; -        case kVK_ANSI_KeypadEnter: return MASShortcutChar(kMASShortcutGlyphReturn); +        case kVK_ANSI_KeypadEnter: return NSStringFromMASKeyCode(kMASShortcutGlyphReturn);          case kVK_ANSI_KeypadMinus: return @"–";          case kVK_ANSI_KeypadEquals: return @"=";          // Hardcode -        case 119: return MASShortcutChar(kMASShortcutGlyphSoutheastArrow); -        case 115: return MASShortcutChar(kMASShortcutGlyphNorthwestArrow); +        case 119: return NSStringFromMASKeyCode(kMASShortcutGlyphSoutheastArrow); +        case 115: return NSStringFromMASKeyCode(kMASShortcutGlyphNorthwestArrow);      }      // Everything else should be printable so look it up in the current keyboard @@ -294,13 +294,13 @@ BOOL MASShortcutAllowsAnyHotkeyWithOptionModifier = NO;      for (NSMenuItem *menuItem in menu.itemArray) {          if (menuItem.hasSubmenu && [self isKeyEquivalent:keyEquivalent flags:flags takenInMenu:menuItem.submenu error:outError]) return YES; -        BOOL equalFlags = (MASShortcutClear(menuItem.keyEquivalentModifierMask) == flags); +        BOOL equalFlags = (MASPickCocoaModifiers(menuItem.keyEquivalentModifierMask) == flags);          BOOL equalHotkeyLowercase = [menuItem.keyEquivalent.lowercaseString isEqualToString:keyEquivalent];          // Check if the cases are different, we know ours is lower and that shift is included in our modifiers          // If theirs is capitol, we need to add shift to their modifiers          if (equalHotkeyLowercase && ![menuItem.keyEquivalent isEqualToString:keyEquivalent]) { -            equalFlags = (MASShortcutClear(menuItem.keyEquivalentModifierMask | NSShiftKeyMask) == flags); +            equalFlags = (MASPickCocoaModifiers(menuItem.keyEquivalentModifierMask | NSShiftKeyMask) == flags);          }          if (equalFlags && equalHotkeyLowercase) { diff --git a/Framework/MASShortcutView.h b/Framework/MASShortcutView.h index c8a46bb..9f94bf5 100644 --- a/Framework/MASShortcutView.h +++ b/Framework/MASShortcutView.h @@ -1,5 +1,3 @@ -#import <AppKit/AppKit.h> -  @class MASShortcut;  typedef enum { diff --git a/Framework/MASShortcutView.m b/Framework/MASShortcutView.m index dd75729..0212271 100644 --- a/Framework/MASShortcutView.m +++ b/Framework/MASShortcutView.m @@ -192,7 +192,7 @@  - (void)drawRect:(CGRect)dirtyRect  {      if (self.shortcutValue) { -        [self drawInRect:self.bounds withTitle:MASShortcutChar(self.recording ? kMASShortcutGlyphEscape : kMASShortcutGlyphDeleteLeft) +        [self drawInRect:self.bounds withTitle:NSStringFromMASKeyCode(self.recording ? kMASShortcutGlyphEscape : kMASShortcutGlyphDeleteLeft)                 alignment:NSRightTextAlignment state:NSOffState];          CGRect shortcutRect; @@ -209,7 +209,7 @@      else {          if (self.recording)          { -            [self drawInRect:self.bounds withTitle:MASShortcutChar(kMASShortcutGlyphEscape) alignment:NSRightTextAlignment state:NSOffState]; +            [self drawInRect:self.bounds withTitle:NSStringFromMASKeyCode(kMASShortcutGlyphEscape) alignment:NSRightTextAlignment state:NSOffState];              CGRect shortcutRect;              [self getShortcutRect:&shortcutRect hintRect:NULL]; diff --git a/Framework/Prefix.pch b/Framework/Prefix.pch new file mode 100644 index 0000000..7f2c544 --- /dev/null +++ b/Framework/Prefix.pch @@ -0,0 +1 @@ +#import <AppKit/AppKit.h> | 
