139 lines
3.5 KiB
C++
139 lines
3.5 KiB
C++
/////////////////////////////////////////////////////////////////////
|
|
// Created by [Dennis Andersen] [2013]
|
|
/////////////////////////////////////////////////////////////////////
|
|
#include "..\..\Include\Win32\Win32Keyboard.h"
|
|
|
|
#pragma warning ( disable : 4172 )
|
|
using namespace Input;
|
|
using namespace Input::Enum;
|
|
|
|
Win32Keyboard::Win32Keyboard()
|
|
{
|
|
memset(&this->keys[0], 0, sizeof(Win32Keyboard::Keys) * MAXKEYS);
|
|
}
|
|
Win32Keyboard::~Win32Keyboard()
|
|
{
|
|
|
|
}
|
|
|
|
bool Win32Keyboard::IsKeyUp (SAKI key)
|
|
{
|
|
return !this->keys[key].isDown;
|
|
}
|
|
bool Win32Keyboard::IsKeyDown (SAKI key)
|
|
{
|
|
return this->keys[key].isDown;
|
|
}
|
|
const wchar_t* Win32Keyboard::GetAsText(Enum::SAKI key)
|
|
{
|
|
if(Enum::SAKI_Unknown == key) return 0;
|
|
|
|
// getting a human-readable string
|
|
UINT temp = (this->keys[key].makecode << 16) | (this->keys[key].isE0 << 24);
|
|
wchar_t buff[56] = {0};
|
|
GetKeyNameTextW((LONG)temp, buff, 64);
|
|
return buff;
|
|
}
|
|
void Win32Keyboard::ProccessKeyboardData (bool isUp, SAKI key, unsigned int makeCode, bool isE0)
|
|
{
|
|
if(key == SAKI_Unknown) return;
|
|
//The key is released.
|
|
if(isUp)/*(k.Flags == RI_KEY_BREAK || k.Flags == (RI_KEY_BREAK | RI_KEY_E0) || k.Flags == (RI_KEY_BREAK | RI_KEY_E1))*/
|
|
{
|
|
if(key == SAKI_LeftAlt)
|
|
{ }
|
|
else if(key == SAKI_LeftCtrl)
|
|
{}
|
|
else if(key == SAKI_LeftShift)
|
|
{}
|
|
else if(key == SAKI_RightAlt)
|
|
{}
|
|
else if(key == SAKI_RightCtrl)
|
|
{}
|
|
else if(key == SAKI_RightShift)
|
|
{}
|
|
else
|
|
{
|
|
this->keys[key].isDown = false;
|
|
this->keys[key].isE0 = isE0;
|
|
this->keys[key].makecode = makeCode;
|
|
for (unsigned int i = 0; i < this->keyEventSubscrivers.size(); i++)
|
|
{
|
|
if(this->keyEventSubscrivers[i])
|
|
{
|
|
this->keyEventSubscrivers[i]->OnKeyRelease(key, GetAsText(key), this);
|
|
}
|
|
}
|
|
KeyboardCallbackList *w = this->callbackList;
|
|
while (w)
|
|
{
|
|
if(w->function)
|
|
if (w->type == KeyboardCallbackList::CallbackDataType_OnRelease)
|
|
w->function.keyReleaseCallback(key, GetAsText(key), this);
|
|
w = w->next;
|
|
}
|
|
}
|
|
|
|
//this->_procCollection.kd.key = (RIK)k.VKey;
|
|
//this->_procCollection.kd.released = true;
|
|
}
|
|
//The key is pressed.
|
|
else /*if (k.Flags == RI_KEY_MAKE || k.Flags == (RI_KEY_MAKE | RI_KEY_E0) || k.Flags == (RI_KEY_MAKE | RI_KEY_E1))*/
|
|
{
|
|
if(key == SAKI_LeftAlt)
|
|
{}
|
|
else if(key == SAKI_LeftCtrl)
|
|
{}
|
|
else if(key == SAKI_LeftShift)
|
|
{}
|
|
else if(key == SAKI_RightAlt)
|
|
{}
|
|
else if(key == SAKI_RightCtrl)
|
|
{}
|
|
else if(key == SAKI_RightShift)
|
|
{}
|
|
else
|
|
{
|
|
if(this->keys[key].isDown)
|
|
{
|
|
for (unsigned int i = 0; i < this->keyEventSubscrivers.size(); i++)
|
|
{
|
|
if(this->keyEventSubscrivers[i])
|
|
{
|
|
this->keyEventSubscrivers[i]->OnKeyDown(key, GetAsText(key), this);
|
|
}
|
|
}
|
|
KeyboardCallbackList *w = this->callbackList;
|
|
while (w)
|
|
{
|
|
if(w->function)
|
|
if (w->type == KeyboardCallbackList::CallbackDataType_OnDown)
|
|
w->function.keyDownCallback(key, GetAsText(key), this);
|
|
w = w->next;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
this->keys[key].isDown = true;
|
|
this->keys[key].isE0 = isE0;
|
|
this->keys[key].makecode = makeCode;
|
|
for (unsigned int i = 0; i < this->keyEventSubscrivers.size(); i++)
|
|
{
|
|
if(this->keyEventSubscrivers[i])
|
|
{
|
|
this->keyEventSubscrivers[i]->OnKeyPress(key, GetAsText(key), this);
|
|
}
|
|
}
|
|
KeyboardCallbackList *w = this->callbackList;
|
|
while (w)
|
|
{
|
|
if(w->function)
|
|
if (w->type == KeyboardCallbackList::CallbackDataType_OnPress)
|
|
w->function.keyPressCallback(key, GetAsText(key), this);
|
|
w = w->next;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|