From b7108874dde4650fdcc225f18177b7ec80380a1a Mon Sep 17 00:00:00 2001 From: Edouard DUPIN Date: Thu, 28 Nov 2013 23:59:34 +0100 Subject: [PATCH] [DEV] Add some meta key event --- sources/ewol/renderer/MacOs/AppDelegate.mm | 2 + sources/ewol/renderer/MacOs/Context.cpp | 13 +++- sources/ewol/renderer/MacOs/Context.h | 1 + sources/ewol/renderer/MacOs/OpenglView.h | 1 + sources/ewol/renderer/MacOs/OpenglView.mm | 90 ++++++++++++++++++++++ 5 files changed, 106 insertions(+), 1 deletion(-) diff --git a/sources/ewol/renderer/MacOs/AppDelegate.mm b/sources/ewol/renderer/MacOs/AppDelegate.mm index 88427f89..cb6fb3f4 100644 --- a/sources/ewol/renderer/MacOs/AppDelegate.mm +++ b/sources/ewol/renderer/MacOs/AppDelegate.mm @@ -10,6 +10,8 @@ #import #import +#include + @implementation MacOsAppDelegate @synthesize window=_window; diff --git a/sources/ewol/renderer/MacOs/Context.cpp b/sources/ewol/renderer/MacOs/Context.cpp index 97d22bc6..e834b453 100644 --- a/sources/ewol/renderer/MacOs/Context.cpp +++ b/sources/ewol/renderer/MacOs/Context.cpp @@ -86,7 +86,7 @@ class MacOSInterface : public ewol::eContext { if (_unichar == etk::UChar::CarrierReturn) { _unichar = etk::UChar::Return; } - EWOL_DEBUG("key: " << _unichar << " up=" << !_isDown); + //EWOL_DEBUG("key: " << _unichar << " up=" << !_isDown); if (_unichar <= 4) { enum ewol::keyEvent::keyboard move; switch(_unichar) { @@ -108,6 +108,11 @@ class MacOSInterface : public ewol::eContext { OS_SetKeyboard(_keyboardMode, _unichar, !_isDown, _isAReapeateKey); } } + void MAC_SetKeyboardMove(ewol::SpecialKey& _special, + enum ewol::keyEvent::keyboard _move, + bool _isDown) { + OS_SetKeyboardMove(_special, _move, _isDown); + } }; @@ -151,6 +156,12 @@ void MacOs::setKeyboard(ewol::SpecialKey _keyboardMode, int32_t _unichar, bool _ interface->MAC_SetKeyboard(_keyboardMode, _unichar, _isDown, _isAReapeateKey); } +void MacOs::setKeyboardMove(ewol::SpecialKey& _keyboardMode, enum ewol::keyEvent::keyboard _move, bool _isDown) { + if (interface == NULL) { + return; + } + interface->MAC_SetKeyboardMove(_keyboardMode, _move, _isDown); +} /** diff --git a/sources/ewol/renderer/MacOs/Context.h b/sources/ewol/renderer/MacOs/Context.h index 9565b973..77e1a05d 100644 --- a/sources/ewol/renderer/MacOs/Context.h +++ b/sources/ewol/renderer/MacOs/Context.h @@ -22,6 +22,7 @@ namespace MacOs { void setMouseState(int32_t _id, bool _isDown, float _x, float _y); void setMouseMotion(int32_t _id, float _x, float _y); void setKeyboard(ewol::SpecialKey _keyboardMode, int32_t _unichar, bool _isDown, bool _isAReapeateKey); + void setKeyboardMove(ewol::SpecialKey& _keyboardMode, enum ewol::keyEvent::keyboard _move, bool _isDown); }; #endif \ No newline at end of file diff --git a/sources/ewol/renderer/MacOs/OpenglView.h b/sources/ewol/renderer/MacOs/OpenglView.h index fc538b99..476f570f 100644 --- a/sources/ewol/renderer/MacOs/OpenglView.h +++ b/sources/ewol/renderer/MacOs/OpenglView.h @@ -28,6 +28,7 @@ - (void)otherMouseUp:(NSEvent *)event; //- (void)sendEvent:(NSEvent *)event - (void)keyDown:(NSEvent *)theEvent; +- (void)flagsChanged:(NSEvent *)theEvent; @end diff --git a/sources/ewol/renderer/MacOs/OpenglView.mm b/sources/ewol/renderer/MacOs/OpenglView.mm index 3b9fd086..385c4606 100644 --- a/sources/ewol/renderer/MacOs/OpenglView.mm +++ b/sources/ewol/renderer/MacOs/OpenglView.mm @@ -199,6 +199,7 @@ static ewol::SpecialKey guiKeyBoardMode; } } /* +// https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSEvent_Class/Reference/Reference.html // http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/EventOverview/EventArchitecture/EventArchitecture.html -(void)sendEvent:(NSEvent *)event { NSPoint point = [event locationInWindow]; @@ -240,6 +241,95 @@ static ewol::SpecialKey guiKeyBoardMode; } } +- (void)flagsChanged:(NSEvent *)theEvent { + + if (([theEvent modifierFlags] & NSAlphaShiftKeyMask) != 0) { + EWOL_DEBUG("NSAlphaShiftKeyMask"); + if (guiKeyBoardMode.capLock == 0) { + guiKeyBoardMode.capLock = 1; + MacOs::setKeyboardMove(guiKeyBoardMode, ewol::keyEvent::keyboardCapLock, true); + } + } else { + if (guiKeyBoardMode.capLock == 1) { + guiKeyBoardMode.capLock = 0; + MacOs::setKeyboardMove(guiKeyBoardMode, ewol::keyEvent::keyboardCapLock, false); + } + } + + if (([theEvent modifierFlags] & NSShiftKeyMask) != 0) { + EWOL_DEBUG("NSShiftKeyMask"); + if (guiKeyBoardMode.shift == 0) { + guiKeyBoardMode.shift = 1; + MacOs::setKeyboardMove(guiKeyBoardMode, ewol::keyEvent::keyboardShiftLeft, true); + } + } else { + if (guiKeyBoardMode.shift == 1) { + guiKeyBoardMode.shift = 0; + MacOs::setKeyboardMove(guiKeyBoardMode, ewol::keyEvent::keyboardShiftLeft, false); + } + } + + if (([theEvent modifierFlags] & NSControlKeyMask) != 0) { + EWOL_DEBUG("NSControlKeyMask"); + if (guiKeyBoardMode.ctrl == 0) { + guiKeyBoardMode.ctrl = 1; + MacOs::setKeyboardMove(guiKeyBoardMode, ewol::keyEvent::keyboardCtrlLeft, true); + } + } else { + if (guiKeyBoardMode.ctrl == 1) { + guiKeyBoardMode.ctrl = 0; + MacOs::setKeyboardMove(guiKeyBoardMode, ewol::keyEvent::keyboardCtrlLeft, false); + } + } + + if (([theEvent modifierFlags] & NSAlternateKeyMask) != 0) { + EWOL_DEBUG("NSAlternateKeyMask"); + if (guiKeyBoardMode.alt == 0) { + guiKeyBoardMode.alt = 1; + MacOs::setKeyboardMove(guiKeyBoardMode, ewol::keyEvent::keyboardAlt, true); + } + } else { + if (guiKeyBoardMode.alt == 1) { + guiKeyBoardMode.alt = 0; + MacOs::setKeyboardMove(guiKeyBoardMode, ewol::keyEvent::keyboardAlt, false); + } + } + + if (([theEvent modifierFlags] & NSCommandKeyMask) != 0) { + EWOL_DEBUG("NSCommandKeyMask"); + if (guiKeyBoardMode.meta == 0) { + guiKeyBoardMode.meta = 1; + MacOs::setKeyboardMove(guiKeyBoardMode, ewol::keyEvent::keyboardMetaLeft, true); + } + } else { + if (guiKeyBoardMode.meta == 1) { + guiKeyBoardMode.meta = 0; + MacOs::setKeyboardMove(guiKeyBoardMode, ewol::keyEvent::keyboardMetaLeft, false); + } + } + + if (([theEvent modifierFlags] & NSNumericPadKeyMask) != 0) { + EWOL_DEBUG("NSNumericPadKeyMask"); + if (guiKeyBoardMode.numLock == 0) { + guiKeyBoardMode.numLock = 1; + MacOs::setKeyboardMove(guiKeyBoardMode, ewol::keyEvent::keyboardNumLock, true); + } + } else { + if (guiKeyBoardMode.numLock == 1) { + guiKeyBoardMode.numLock = 0; + MacOs::setKeyboardMove(guiKeyBoardMode, ewol::keyEvent::keyboardNumLock, false); + } + } + if (([theEvent modifierFlags] & NSHelpKeyMask) != 0) { + EWOL_DEBUG("NSHelpKeyMask"); + } + if (([theEvent modifierFlags] & NSFunctionKeyMask) != 0) { + EWOL_DEBUG("NSFunctionKeyMask"); + MacOs::setKeyboardMove(guiKeyBoardMode, ewol::keyEvent::keyboardContextMenu, true); + MacOs::setKeyboardMove(guiKeyBoardMode, ewol::keyEvent::keyboardContextMenu, false); + } +} + #define FRAME_INTERVAL (0.01) static NSTimer *timer = nil;