diff options
author | Campbell Barton <ideasman42@gmail.com> | 2014-01-23 07:58:04 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2014-01-23 07:58:04 +0400 |
commit | 3b71cab420c642df30d9f9addee166444ce5b85b (patch) | |
tree | 50b3a4dfc9fcbb9473e65d5ab7d78b67c38c423c /source/gameengine/BlenderRoutines | |
parent | c02c2dfdd911fd1c92236e810f26da13f79cf8a5 (diff) |
Fix T38110: GameEngine keyboard sensor ignores unicode characters
Diffstat (limited to 'source/gameengine/BlenderRoutines')
6 files changed, 11 insertions, 9 deletions
diff --git a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp index 2b1c8a10cce..d136131e82f 100644 --- a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp +++ b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp @@ -151,8 +151,9 @@ static int BL_KetsjiNextFrame(KX_KetsjiEngine *ketsjiengine, bContext *C, wmWind while (wmEvent *event= (wmEvent *)win->queue.first) { short val = 0; //unsigned short event = 0; //XXX extern_qread(&val); + unsigned int unicode = event->utf8_buf[0] ? BLI_str_utf8_as_unicode(event->utf8_buf) : event->ascii; - if (keyboarddevice->ConvertBlenderEvent(event->type,event->val)) + if (keyboarddevice->ConvertBlenderEvent(event->type, event->val, unicode)) exitrequested = KX_EXIT_REQUEST_BLENDER_ESC; /* Coordinate conversion... where @@ -161,13 +162,13 @@ static int BL_KetsjiNextFrame(KX_KetsjiEngine *ketsjiengine, bContext *C, wmWind if (event->type == MOUSEMOVE) { /* Note, not nice! XXX 2.5 event hack */ val = event->x - ar->winrct.xmin; - mousedevice->ConvertBlenderEvent(MOUSEX, val); + mousedevice->ConvertBlenderEvent(MOUSEX, val, 0); val = ar->winy - (event->y - ar->winrct.ymin) - 1; - mousedevice->ConvertBlenderEvent(MOUSEY, val); + mousedevice->ConvertBlenderEvent(MOUSEY, val, 0); } else { - mousedevice->ConvertBlenderEvent(event->type,event->val); + mousedevice->ConvertBlenderEvent(event->type, event->val, 0); } BLI_remlink(&win->queue, event); diff --git a/source/gameengine/BlenderRoutines/KX_BlenderInputDevice.h b/source/gameengine/BlenderRoutines/KX_BlenderInputDevice.h index 0ce479cad6f..a936f328545 100644 --- a/source/gameengine/BlenderRoutines/KX_BlenderInputDevice.h +++ b/source/gameengine/BlenderRoutines/KX_BlenderInputDevice.h @@ -69,7 +69,7 @@ public: virtual bool IsPressed(SCA_IInputDevice::KX_EnumInputs inputcode)=0; // virtual const SCA_InputEvent& GetEventValue(SCA_IInputDevice::KX_EnumInputs inputcode)=0; - virtual bool ConvertBlenderEvent(unsigned short incode,short val)=0; + virtual bool ConvertBlenderEvent(unsigned short incode, short val, unsigned int unicode)=0; #ifdef WITH_CXX_GUARDEDALLOC diff --git a/source/gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.cpp b/source/gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.cpp index 5917ce40440..ea78d2d389e 100644 --- a/source/gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.cpp +++ b/source/gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.cpp @@ -91,7 +91,7 @@ void KX_BlenderKeyboardDevice::NextFrame() * ConvertBlenderEvent translates blender keyboard events into ketsji kbd events * extra event information is stored, like ramp-mode (just released/pressed) */ -bool KX_BlenderKeyboardDevice::ConvertBlenderEvent(unsigned short incode, short val) +bool KX_BlenderKeyboardDevice::ConvertBlenderEvent(unsigned short incode, short val, unsigned int unicode) { bool result = false; @@ -112,6 +112,7 @@ bool KX_BlenderKeyboardDevice::ConvertBlenderEvent(unsigned short incode, short // todo: convert val ?? m_eventStatusTables[m_currentTable][kxevent].m_eventval = val ; //??? + m_eventStatusTables[m_currentTable][kxevent].m_unicode = unicode; switch (m_eventStatusTables[previousTable][kxevent].m_status) { diff --git a/source/gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.h b/source/gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.h index dec70203ecb..10a5b00937d 100644 --- a/source/gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.h +++ b/source/gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.h @@ -47,7 +47,7 @@ public: virtual bool IsPressed(SCA_IInputDevice::KX_EnumInputs inputcode); // virtual const SCA_InputEvent& GetEventValue(SCA_IInputDevice::KX_EnumInputs inputcode); - virtual bool ConvertBlenderEvent(unsigned short incode,short val); + virtual bool ConvertBlenderEvent(unsigned short incode, short val, unsigned int unicode); virtual void NextFrame(); virtual void HookEscape(); private: diff --git a/source/gameengine/BlenderRoutines/KX_BlenderMouseDevice.cpp b/source/gameengine/BlenderRoutines/KX_BlenderMouseDevice.cpp index 0cdc10264a5..9df06e83b92 100644 --- a/source/gameengine/BlenderRoutines/KX_BlenderMouseDevice.cpp +++ b/source/gameengine/BlenderRoutines/KX_BlenderMouseDevice.cpp @@ -108,7 +108,7 @@ void KX_BlenderMouseDevice::NextFrame() * ConvertBlenderEvent translates blender mouse events into ketsji kbd events * extra event information is stored, like ramp-mode (just released/pressed) */ -bool KX_BlenderMouseDevice::ConvertBlenderEvent(unsigned short incode, short val) +bool KX_BlenderMouseDevice::ConvertBlenderEvent(unsigned short incode, short val, unsigned int unicode) { bool result = false; diff --git a/source/gameengine/BlenderRoutines/KX_BlenderMouseDevice.h b/source/gameengine/BlenderRoutines/KX_BlenderMouseDevice.h index 8746da83a81..04b78aff05c 100644 --- a/source/gameengine/BlenderRoutines/KX_BlenderMouseDevice.h +++ b/source/gameengine/BlenderRoutines/KX_BlenderMouseDevice.h @@ -46,7 +46,7 @@ public: virtual bool IsPressed(SCA_IInputDevice::KX_EnumInputs inputcode); // virtual const SCA_InputEvent& GetEventValue(SCA_IInputDevice::KX_EnumInputs inputcode); - virtual bool ConvertBlenderEvent(unsigned short incode,short val); + virtual bool ConvertBlenderEvent(unsigned short incode, short val, unsigned int unicode); virtual void NextFrame(); |