From bec114d53d32e7e9144fa3a17d72c99ce5d036c1 Mon Sep 17 00:00:00 2001 From: Edouard DUPIN Date: Tue, 12 May 2015 21:12:22 +0200 Subject: [PATCH] [DEV] better keyboard input --- ewol/context/MacOs/OpenglView.h | 34 ++++---- ewol/context/MacOs/OpenglView.mm | 134 ----------------------------- ewol/context/MacOs/Windows.mm | 143 +++++++++++++++++++++++++++++-- 3 files changed, 155 insertions(+), 156 deletions(-) diff --git a/ewol/context/MacOs/OpenglView.h b/ewol/context/MacOs/OpenglView.h index 0b6282e1..2e0b4ba8 100644 --- a/ewol/context/MacOs/OpenglView.h +++ b/ewol/context/MacOs/OpenglView.h @@ -14,21 +14,21 @@ @interface OpenGLView : NSOpenGLView { NSTimer* _refreshTimer; } -- ()prepareOpenGL; -- ()drawRect:(NSRect) bounds; -- ()mouseDown:(NSEvent *) event; -- ()mouseDragged:(NSEvent *) event; -- ()mouseUp:(NSEvent *)event; -- ()mouseMoved:(NSEvent *)event; -- ()mouseEntered:(NSEvent *)event; -- ()mouseExited:(NSEvent *)event; -- ()rightMouseDown:(NSEvent *)event; -- ()rightMouseDragged:(NSEvent *)event; -- ()rightMouseUp:(NSEvent *)event; -- ()otherMouseDown:(NSEvent *)event; -- ()otherMouseDragged:(NSEvent *)event; -- ()otherMouseUp:(NSEvent *)event; -//- ()sendEvent:(NSEvent *)event -- ()keyDown:(NSEvent *)theEvent; -- ()flagsChanged:(NSEvent *)theEvent; +- (void)prepareOpenGL; +- (void)drawRect:(NSRect) bounds; +- (void)mouseDown:(NSEvent *) event; +- (void)mouseDragged:(NSEvent *) event; +- (void)mouseUp:(NSEvent *)event; +- (void)mouseMoved:(NSEvent *)event; +- (void)mouseEntered:(NSEvent *)event; +- (void)mouseExited:(NSEvent *)event; +- (void)rightMouseDown:(NSEvent *)event; +- (void)rightMouseDragged:(NSEvent *)event; +- (void)rightMouseUp:(NSEvent *)event; +- (void)otherMouseDown:(NSEvent *)event; +- (void)otherMouseDragged:(NSEvent *)event; +- (void)otherMouseUp:(NSEvent *)event; +//- (void)sendEvent:(NSEvent *)event +- (void)keyDown:(NSEvent *)theEvent; +- (void)flagsChanged:(NSEvent *)theEvent; @end diff --git a/ewol/context/MacOs/OpenglView.mm b/ewol/context/MacOs/OpenglView.mm index 6389cd78..dbb3dee7 100644 --- a/ewol/context/MacOs/OpenglView.mm +++ b/ewol/context/MacOs/OpenglView.mm @@ -16,7 +16,6 @@ @implementation OpenGLView -static ewol::key::Special guiKeyBoardMode; - (void) prepareOpenGL { @@ -210,139 +209,6 @@ static ewol::key::Special guiKeyBoardMode; MacOs::setMouseState(idEvent, false, point.x, point.y); } } -/* -// 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]; - EWOL_INFO("sendEvent : " << (float)point.x << " " << (float)point.y); -} -*/ -/* -// this generate all the event entry availlable ==> like a big keep focus ... -- (BOOL)acceptsFirstResponder { - return YES; -} -- (BOOL)becomeFirstResponder { - return YES; -} -*/ -- (void)keyDown:(NSEvent *)theEvent { - bool thisIsAReapeateKey = false; - if ([theEvent isARepeat]) { - thisIsAReapeateKey = true; - } - NSString *str = [theEvent charactersIgnoringModifiers]; - // TODO : set if for every char in the string !!! - unichar c = [str characterAtIndex:0]; - //EWOL_DEBUG("KeyDown " << (char)c); - MacOs::setKeyboard(guiKeyBoardMode, (char)c, true, thisIsAReapeateKey); - if (true==thisIsAReapeateKey) { - MacOs::setKeyboard(guiKeyBoardMode, (char)c, false, thisIsAReapeateKey); - } -} - -- (void)keyUp:(NSEvent *)theEvent { - bool thisIsAReapeateKey = false; - if ([theEvent isARepeat]) { - thisIsAReapeateKey = true; - } - //EWOL_DEBUG("KeyUp "); - NSString *str = [theEvent charactersIgnoringModifiers]; - unichar c = [str characterAtIndex:0]; - MacOs::setKeyboard(guiKeyBoardMode, (char)c, false, thisIsAReapeateKey); - if (true==thisIsAReapeateKey) { - MacOs::setKeyboard(guiKeyBoardMode, (char)c, true, thisIsAReapeateKey); - } -} - -- (void)flagsChanged:(NSEvent *)theEvent { - if (([theEvent modifierFlags] & NSAlphaShiftKeyMask) != 0) { - EWOL_DEBUG("NSAlphaShiftKeyMask"); - if (guiKeyBoardMode.getCapsLock() == false) { - guiKeyBoardMode.setCapsLock(true); - MacOs::setKeyboardMove(guiKeyBoardMode, ewol::key::keyboardCapLock, true); - } - } else { - if (guiKeyBoardMode.getCapsLock() == true) { - guiKeyBoardMode.setCapsLock(false); - MacOs::setKeyboardMove(guiKeyBoardMode, ewol::key::keyboardCapLock, false); - } - } - - if (([theEvent modifierFlags] & NSShiftKeyMask) != 0) { - EWOL_DEBUG("NSShiftKeyMask"); - if (guiKeyBoardMode.getShift() == false) { - guiKeyBoardMode.setShift(true); - MacOs::setKeyboardMove(guiKeyBoardMode, ewol::key::keyboardShiftLeft, true); - } - } else { - if (guiKeyBoardMode.getShift() == true) { - guiKeyBoardMode.setShift(false); - MacOs::setKeyboardMove(guiKeyBoardMode, ewol::key::keyboardShiftLeft, false); - } - } - - if (([theEvent modifierFlags] & NSControlKeyMask) != 0) { - EWOL_DEBUG("NSControlKeyMask"); - if (guiKeyBoardMode.getCtrl() == false) { - guiKeyBoardMode.setCtrl(true); - MacOs::setKeyboardMove(guiKeyBoardMode, ewol::key::keyboardCtrlLeft, true); - } - } else { - if (guiKeyBoardMode.getCtrl() == true) { - guiKeyBoardMode.setCtrl(false); - MacOs::setKeyboardMove(guiKeyBoardMode, ewol::key::keyboardCtrlLeft, false); - } - } - - if (([theEvent modifierFlags] & NSAlternateKeyMask) != 0) { - EWOL_DEBUG("NSAlternateKeyMask"); - if (guiKeyBoardMode.getAlt() == false) { - guiKeyBoardMode.setAlt(true); - MacOs::setKeyboardMove(guiKeyBoardMode, ewol::key::keyboardAlt, true); - } - } else { - if (guiKeyBoardMode.getAlt() == true) { - guiKeyBoardMode.setAlt(false); - MacOs::setKeyboardMove(guiKeyBoardMode, ewol::key::keyboardAlt, false); - } - } - - if (([theEvent modifierFlags] & NSCommandKeyMask) != 0) { - EWOL_DEBUG("NSCommandKeyMask"); - if (guiKeyBoardMode.getMeta() == false) { - guiKeyBoardMode.setMeta(true); - MacOs::setKeyboardMove(guiKeyBoardMode, ewol::key::keyboardMetaLeft, true); - } - } else { - if (guiKeyBoardMode.getMeta() == true) { - guiKeyBoardMode.setMeta(false); - MacOs::setKeyboardMove(guiKeyBoardMode, ewol::key::keyboardMetaLeft, false); - } - } - - if (([theEvent modifierFlags] & NSNumericPadKeyMask) != 0) { - EWOL_DEBUG("NSNumericPadKeyMask"); - if (guiKeyBoardMode.getNumLock() == false) { - guiKeyBoardMode.setNumLock(true); - MacOs::setKeyboardMove(guiKeyBoardMode, ewol::key::keyboardNumLock, true); - } - } else { - if (guiKeyBoardMode.getNumLock() == true) { - guiKeyBoardMode.setNumLock(false); - MacOs::setKeyboardMove(guiKeyBoardMode, ewol::key::keyboardNumLock, false); - } - } - if (([theEvent modifierFlags] & NSHelpKeyMask) != 0) { - EWOL_DEBUG("NSHelpKeyMask"); - } - if (([theEvent modifierFlags] & NSFunctionKeyMask) != 0) { - EWOL_DEBUG("NSFunctionKeyMask"); - MacOs::setKeyboardMove(guiKeyBoardMode, ewol::key::keyboardContextMenu, true); - MacOs::setKeyboardMove(guiKeyBoardMode, ewol::key::keyboardContextMenu, false); - } -} #define FRAME_INTERVAL (0.01) diff --git a/ewol/context/MacOs/Windows.mm b/ewol/context/MacOs/Windows.mm index 0fb8a7a5..b7ab593f 100644 --- a/ewol/context/MacOs/Windows.mm +++ b/ewol/context/MacOs/Windows.mm @@ -10,6 +10,7 @@ #import #import #include +#include #include @@ -72,13 +73,145 @@ [super dealloc]; } -/* -- (void)sendEvent:(NSEvent *)event { - EWOL_WARNING(" EVENT ... "); -} -*/ +static ewol::key::Special guiKeyBoardMode; +static int32_t getUniChar(NSEvent* theEvent) { + NSString *str = [theEvent charactersIgnoringModifiers]; + // TODO : set if for every char in the string !!! + unichar c = [str characterAtIndex:0]; + if (guiKeyBoardMode.getAlt() == false) { + return int32_t(c); + } + switch(c) { + case '(': + return int32_t('{'); + case '5': + return int32_t('['); + case ')': + return int32_t('}'); + case U'°': + return int32_t(']'); + + } + return int32_t(c); +} + +- (void)keyDown:(NSEvent *)theEvent { + bool thisIsAReapeateKey = false; + if ([theEvent isARepeat]) { + thisIsAReapeateKey = true; + } + int32_t c = getUniChar(theEvent); + EWOL_WARNING("KeyDown " << char(c)); + MacOs::setKeyboard(guiKeyBoardMode, c, true, thisIsAReapeateKey); + if (true==thisIsAReapeateKey) { + MacOs::setKeyboard(guiKeyBoardMode, c, false, thisIsAReapeateKey); + } +} + +- (void)keyUp:(NSEvent *)theEvent { + bool thisIsAReapeateKey = false; + if ([theEvent isARepeat]) { + thisIsAReapeateKey = true; + } + int32_t c = getUniChar(theEvent); + EWOL_WARNING("KeyUp " << char(c)); + MacOs::setKeyboard(guiKeyBoardMode, c, false, thisIsAReapeateKey); + if (true==thisIsAReapeateKey) { + MacOs::setKeyboard(guiKeyBoardMode, c, true, thisIsAReapeateKey); + } +} + +- (void)flagsChanged:(NSEvent *)theEvent { + if (([theEvent modifierFlags] & NSAlphaShiftKeyMask) != 0) { + EWOL_WARNING("NSAlphaShiftKeyMask"); + if (guiKeyBoardMode.getCapsLock() == false) { + guiKeyBoardMode.setCapsLock(true); + MacOs::setKeyboardMove(guiKeyBoardMode, ewol::key::keyboardCapLock, true); + } + } else { + if (guiKeyBoardMode.getCapsLock() == true) { + guiKeyBoardMode.setCapsLock(false); + MacOs::setKeyboardMove(guiKeyBoardMode, ewol::key::keyboardCapLock, false); + } + } + + if (([theEvent modifierFlags] & NSShiftKeyMask) != 0) { + EWOL_WARNING("NSShiftKeyMask"); + if (guiKeyBoardMode.getShift() == false) { + guiKeyBoardMode.setShift(true); + MacOs::setKeyboardMove(guiKeyBoardMode, ewol::key::keyboardShiftLeft, true); + } + } else { + if (guiKeyBoardMode.getShift() == true) { + guiKeyBoardMode.setShift(false); + MacOs::setKeyboardMove(guiKeyBoardMode, ewol::key::keyboardShiftLeft, false); + } + } + + if (([theEvent modifierFlags] & NSControlKeyMask) != 0) { + EWOL_WARNING("NSControlKeyMask"); + if (guiKeyBoardMode.getCtrl() == false) { + guiKeyBoardMode.setCtrl(true); + MacOs::setKeyboardMove(guiKeyBoardMode, ewol::key::keyboardCtrlLeft, true); + } + } else { + if (guiKeyBoardMode.getCtrl() == true) { + guiKeyBoardMode.setCtrl(false); + MacOs::setKeyboardMove(guiKeyBoardMode, ewol::key::keyboardCtrlLeft, false); + } + } + + if (([theEvent modifierFlags] & NSAlternateKeyMask) != 0) { + EWOL_WARNING("NSAlternateKeyMask"); + if (guiKeyBoardMode.getAlt() == false) { + guiKeyBoardMode.setAlt(true); + MacOs::setKeyboardMove(guiKeyBoardMode, ewol::key::keyboardAlt, true); + } + } else { + if (guiKeyBoardMode.getAlt() == true) { + guiKeyBoardMode.setAlt(false); + MacOs::setKeyboardMove(guiKeyBoardMode, ewol::key::keyboardAlt, false); + } + } + + if (([theEvent modifierFlags] & NSCommandKeyMask) != 0) { + EWOL_WARNING("NSCommandKeyMask"); + if (guiKeyBoardMode.getMeta() == false) { + guiKeyBoardMode.setMeta(true); + MacOs::setKeyboardMove(guiKeyBoardMode, ewol::key::keyboardMetaLeft, true); + } + } else { + if (guiKeyBoardMode.getMeta() == true) { + guiKeyBoardMode.setMeta(false); + MacOs::setKeyboardMove(guiKeyBoardMode, ewol::key::keyboardMetaLeft, false); + } + } + + if (([theEvent modifierFlags] & NSNumericPadKeyMask) != 0) { + EWOL_WARNING("NSNumericPadKeyMask"); + if (guiKeyBoardMode.getNumLock() == false) { + guiKeyBoardMode.setNumLock(true); + MacOs::setKeyboardMove(guiKeyBoardMode, ewol::key::keyboardNumLock, true); + } + } else { + if (guiKeyBoardMode.getNumLock() == true) { + guiKeyBoardMode.setNumLock(false); + MacOs::setKeyboardMove(guiKeyBoardMode, ewol::key::keyboardNumLock, false); + } + } + if (([theEvent modifierFlags] & NSHelpKeyMask) != 0) { + EWOL_WARNING("NSHelpKeyMask"); + } + if (([theEvent modifierFlags] & NSFunctionKeyMask) != 0) { + EWOL_WARNING("NSFunctionKeyMask"); + MacOs::setKeyboardMove(guiKeyBoardMode, ewol::key::keyboardContextMenu, true); + MacOs::setKeyboardMove(guiKeyBoardMode, ewol::key::keyboardContextMenu, false); + } + EWOL_WARNING("EVENT : " << int32_t([theEvent modifierFlags])); +} + // this generate all the event entry availlable ==> like a big keep focus ... - (BOOL)acceptsFirstResponder { return YES;