diff options
author | 2013-01-08 16:17:50 +0000 | |
---|---|---|
committer | 2013-01-08 16:17:50 +0000 | |
commit | 4d5c26de0a24f86c37c1da8b0e30d11a550ea67b (patch) | |
tree | ae6412d266668e9f7ca91e9ef56d65ddb3b6e9ac /src/views/mac/SkNSView.mm | |
parent | 9aaf36de60c2a2e7a6b441bb7db9521a4fd59e08 (diff) |
pass modifier keys to click events (e.g. control | shift etc.)
Review URL: https://codereview.appspot.com/7062054
git-svn-id: http://skia.googlecode.com/svn/trunk@7082 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/views/mac/SkNSView.mm')
-rw-r--r-- | src/views/mac/SkNSView.mm | 41 |
1 files changed, 37 insertions, 4 deletions
diff --git a/src/views/mac/SkNSView.mm b/src/views/mac/SkNSView.mm index ffa9d7cd81..fc82ac4949 100644 --- a/src/views/mac/SkNSView.mm +++ b/src/views/mac/SkNSView.mm @@ -192,35 +192,68 @@ static SkKey raw2key(UInt32 raw) // unichar c = [[event characters] characterAtIndex:0]; } +static const struct { + unsigned fNSModifierMask; + unsigned fSkModifierMask; +} gModifierMasks[] = { + { NSAlphaShiftKeyMask, kShift_SkModifierKey }, + { NSShiftKeyMask, kShift_SkModifierKey }, + { NSControlKeyMask, kControl_SkModifierKey }, + { NSAlternateKeyMask, kOption_SkModifierKey }, + { NSCommandKeyMask, kCommand_SkModifierKey }, +}; + +static unsigned convertNSModifiersToSk(NSUInteger nsModi) { + unsigned skModi = 0; + for (size_t i = 0; i < SK_ARRAY_COUNT(gModifierMasks); ++i) { + if (nsModi & gModifierMasks[i].fNSModifierMask) { + skModi |= gModifierMasks[i].fSkModifierMask; + } + } + return skModi; +} + - (void)mouseDown:(NSEvent *)event { NSPoint p = [event locationInWindow]; + unsigned modi = convertNSModifiersToSk([event modifierFlags]); + if ([self mouse:p inRect:[self bounds]] && NULL != fWind) { NSPoint loc = [self convertPoint:p fromView:nil]; - fWind->handleClick((int) loc.x, (int) loc.y, SkView::Click::kDown_State, self); + fWind->handleClick((int) loc.x, (int) loc.y, + SkView::Click::kDown_State, self, modi); } } - (void)mouseDragged:(NSEvent *)event { NSPoint p = [event locationInWindow]; + unsigned modi = convertNSModifiersToSk([event modifierFlags]); + if ([self mouse:p inRect:[self bounds]] && NULL != fWind) { NSPoint loc = [self convertPoint:p fromView:nil]; - fWind->handleClick((int) loc.x, (int) loc.y, SkView::Click::kMoved_State, self); + fWind->handleClick((int) loc.x, (int) loc.y, + SkView::Click::kMoved_State, self, modi); } } - (void)mouseMoved:(NSEvent *)event { NSPoint p = [event locationInWindow]; + unsigned modi = convertNSModifiersToSk([event modifierFlags]); + if ([self mouse:p inRect:[self bounds]] && NULL != fWind) { NSPoint loc = [self convertPoint:p fromView:nil]; - fWind->handleClick((int) loc.x, (int) loc.y, SkView::Click::kMoved_State, self); + fWind->handleClick((int) loc.x, (int) loc.y, + SkView::Click::kMoved_State, self, modi); } } - (void)mouseUp:(NSEvent *)event { NSPoint p = [event locationInWindow]; + unsigned modi = convertNSModifiersToSk([event modifierFlags]); + if ([self mouse:p inRect:[self bounds]] && NULL != fWind) { NSPoint loc = [self convertPoint:p fromView:nil]; - fWind->handleClick((int) loc.x, (int) loc.y, SkView::Click::kUp_State, self); + fWind->handleClick((int) loc.x, (int) loc.y, + SkView::Click::kUp_State, self, modi); } } |