diff --git a/cocos2d/CCDirector.m b/cocos2d/CCDirector.m index 973989a662f..63a16963d8c 100644 --- a/cocos2d/CCDirector.m +++ b/cocos2d/CCDirector.m @@ -343,7 +343,7 @@ -(void) setView:(CCGLView*)view #ifdef __CC_PLATFORM_IOS CGFloat scale = __view.layer.contentsScale ?: 1.0; #else - //self.view.wantsBestResolutionOpenGLSurface = YES; + self.view.wantsBestResolutionOpenGLSurface = YES; CGFloat scale = self.view.window.backingScaleFactor; #endif diff --git a/cocos2d/CCResponder.h b/cocos2d/CCResponder.h index c2eafb70ec0..05e22ea8fce 100644 --- a/cocos2d/CCResponder.h +++ b/cocos2d/CCResponder.h @@ -203,6 +203,20 @@ */ - (void)scrollWheel:(NSEvent *)theEvent; +/** + * Called whan a key down. + * + * @param theEvent Current event information. + */ +- (void)keyDown:(NSEvent *)theEvent; + +/** + * Called whan a key up. + * + * @param theEvent Current event information. + */ +- (void)keyUp:(NSEvent *)theEvent; + #endif @end diff --git a/cocos2d/CCResponder.m b/cocos2d/CCResponder.m index d2d7b1601be..9500a9740ac 100644 --- a/cocos2d/CCResponder.m +++ b/cocos2d/CCResponder.m @@ -146,6 +146,16 @@ - (void)scrollWheel:(NSEvent *)theEvent [[CCDirector sharedDirector].responderManager discardCurrentEvent]; } +-(void)keyDown:(NSEvent *)theEvent +{ + [[CCDirector sharedDirector].responderManager discardCurrentEvent]; +} + +-(void)keyUp:(NSEvent *)theEvent +{ + [[CCDirector sharedDirector].responderManager discardCurrentEvent]; +} + #endif // ----------------------------------------------------------------- diff --git a/cocos2d/CCResponderManager.m b/cocos2d/CCResponderManager.m index 9bb2f7b1b69..e96b6ee4dc9 100644 --- a/cocos2d/CCResponderManager.m +++ b/cocos2d/CCResponderManager.m @@ -714,6 +714,41 @@ - (void)mouseExited:(NSEvent *)theEvent } +// ----------------------------------------------------------------- +#pragma mark - Mac keyboard handling - +// ----------------------------------------------------------------- + +- (void)keyDown:(NSEvent *)theEvent +{ + if (!_enabled) return; + [[CCDirector sharedDirector].view.window makeFirstResponder:[CCDirector sharedDirector].view]; + + if (_dirty) [self buildResponderList]; + + // scan backwards through mouse responders + for (int index = _responderListCount - 1; index >= 0; index --) + { + CCNode *node = _responderList[index]; + [node keyDown:theEvent]; + } +} + +- (void)keyUp:(NSEvent *)theEvent +{ + if (!_enabled) return; + [[CCDirector sharedDirector].view.window makeFirstResponder:[CCDirector sharedDirector].view]; + + if (_dirty) [self buildResponderList]; + + // scan backwards through mouse responders + for (int index = _responderListCount - 1; index >= 0; index --) + { + CCNode *node = _responderList[index]; + [node keyUp:theEvent]; + } +} + + // ----------------------------------------------------------------- #pragma mark - Mac helper functions // ----------------------------------------------------------------- diff --git a/cocos2d/Platforms/Mac/CCDirectorMac.m b/cocos2d/Platforms/Mac/CCDirectorMac.m index b3eaccfcd5a..b9663aa32a7 100644 --- a/cocos2d/Platforms/Mac/CCDirectorMac.m +++ b/cocos2d/Platforms/Mac/CCDirectorMac.m @@ -175,6 +175,8 @@ - (void) setFullScreen:(BOOL)fullscreen self.view.wantsBestResolutionOpenGLSurface = YES; } + // issue #681 + [openGLview keyDown:nil]; // issue #1189 [_windowGLView makeFirstResponder:openGLview]; diff --git a/cocos2d/Platforms/Mac/CCGLView.m b/cocos2d/Platforms/Mac/CCGLView.m index f512a0a9547..f4c5ed600c6 100644 --- a/cocos2d/Platforms/Mac/CCGLView.m +++ b/cocos2d/Platforms/Mac/CCGLView.m @@ -243,6 +243,16 @@ - (void)scrollWheel:(NSEvent *)theEvent [[CCDirector sharedDirector].responderManager scrollWheel:theEvent]; } +- (void) keyDown:(NSEvent *)theEvent { + // dispatch keyboard to responder manager + [[CCDirector sharedDirector].responderManager keyDown:theEvent]; +} + +- (void) keyUp:(NSEvent *)theEvent { + // dispatch keyboard to responder manager + [[CCDirector sharedDirector].responderManager keyUp:theEvent]; +} + @end #endif // __CC_PLATFORM_MAC