141 lines
3.3 KiB
C++
141 lines
3.3 KiB
C++
|
/////////////////////////////////////////////////////////////////////
|
||
|
// Created by [Dennis Andersen] [2013]
|
||
|
/////////////////////////////////////////////////////////////////////
|
||
|
#include "..\..\Include\Win32\Win32Mouse.h"
|
||
|
|
||
|
using namespace Input;
|
||
|
using namespace Input::Enum;
|
||
|
using namespace Input::Struct;
|
||
|
using namespace Input::Typedefs;
|
||
|
|
||
|
|
||
|
Win32Mouse::Win32Mouse()
|
||
|
{
|
||
|
memset(&this->buttons[0], 0, sizeof(Buttons) * MAXBUTTONS);
|
||
|
}
|
||
|
Win32Mouse::~Win32Mouse()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
|
||
|
bool Win32Mouse::IsBtnUp(Enum::SAMI btn)
|
||
|
{
|
||
|
if(btn == SAMI_Unknown) return false;
|
||
|
|
||
|
return !this->buttons[btn].isDown;
|
||
|
}
|
||
|
bool Win32Mouse::IsBtnDown(Enum::SAMI btn)
|
||
|
{
|
||
|
if(btn == SAMI_Unknown) return false;
|
||
|
|
||
|
return this->buttons[btn].isDown;
|
||
|
}
|
||
|
int Win32Mouse::GetWheelDelta()
|
||
|
{
|
||
|
return this->wheelDelta;
|
||
|
}
|
||
|
Struct::SAIPoint2D Win32Mouse::GetPixelPosition(Struct::SAIPoint2D targetMem)
|
||
|
{
|
||
|
targetMem = this->pixelPos;
|
||
|
return targetMem;
|
||
|
}
|
||
|
|
||
|
void Win32Mouse::ProccessMouseData (bool isUp, Enum::SAMI btn, int delta, Struct::SAIPoint2D velocity, unsigned int makeCode)
|
||
|
{
|
||
|
if(velocity.Length() != 0)
|
||
|
{
|
||
|
this->pixelPos.x += velocity.x;
|
||
|
this->pixelPos.y += velocity.y;
|
||
|
|
||
|
for (unsigned int i = 0; i < this->mouseSubscribers.size(); i++)
|
||
|
{
|
||
|
if(this->mouseSubscribers[i])
|
||
|
this->mouseSubscribers[i]->OnMouseMove(this->pixelPos, this);
|
||
|
}
|
||
|
MouseCallbackList *w = this->callbackList;
|
||
|
while (w)
|
||
|
{
|
||
|
if(w->function)
|
||
|
if (w->type == MouseCallbackList::CallbackDataType_OnMove)
|
||
|
w->function.mouseMoveCallback(this->pixelPos, this);
|
||
|
w = w->next;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if(delta != 0)
|
||
|
{
|
||
|
for (unsigned int i = 0; i < this->mouseSubscribers.size(); i++)
|
||
|
{
|
||
|
if(this->mouseSubscribers[i])
|
||
|
this->mouseSubscribers[i]->OnMouseScroll(delta, this);
|
||
|
}
|
||
|
MouseCallbackList *w = this->callbackList;
|
||
|
while (w)
|
||
|
{
|
||
|
if(w->function)
|
||
|
if (w->type == MouseCallbackList::CallbackDataType_OnMove)
|
||
|
w->function.mouseScrollCallback(delta, this);
|
||
|
w = w->next;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
if(btn == SAMI_Unknown) return;
|
||
|
|
||
|
this->buttons[btn].isDown = !isUp;
|
||
|
this->buttons[btn].makeCode = makeCode;
|
||
|
|
||
|
//The btn is released.
|
||
|
if(isUp)
|
||
|
{
|
||
|
for (unsigned int i = 0; i < this->mouseSubscribers.size(); i++)
|
||
|
{
|
||
|
if(this->mouseSubscribers[i])
|
||
|
this->mouseSubscribers[i]->OnMouseRelease(btn, this);
|
||
|
}
|
||
|
MouseCallbackList *w = this->callbackList;
|
||
|
while (w)
|
||
|
{
|
||
|
if(w->function)
|
||
|
if (w->type == MouseCallbackList::CallbackDataType_OnRelease)
|
||
|
w->function.mouseReleaseCallback(btn, this);
|
||
|
w = w->next;
|
||
|
}
|
||
|
}
|
||
|
//The btn is pressed.
|
||
|
else
|
||
|
{
|
||
|
if(this->buttons[btn].isDown)
|
||
|
{
|
||
|
for (unsigned int i = 0; i < this->mouseSubscribers.size(); i++)
|
||
|
{
|
||
|
if(this->mouseSubscribers[i])
|
||
|
this->mouseSubscribers[i]->OnMouseDown(btn, this);
|
||
|
}
|
||
|
MouseCallbackList *w = this->callbackList;
|
||
|
while (w)
|
||
|
{
|
||
|
if(w->function)
|
||
|
if (w->type == MouseCallbackList::CallbackDataType_OnDown)
|
||
|
w->function.mouseDownCallback(btn, this);
|
||
|
w = w->next;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
for (unsigned int i = 0; i < this->mouseSubscribers.size(); i++)
|
||
|
{
|
||
|
if(this->mouseSubscribers[i])
|
||
|
this->mouseSubscribers[i]->OnMousePress(btn, this);
|
||
|
}
|
||
|
MouseCallbackList *w = this->callbackList;
|
||
|
while (w)
|
||
|
{
|
||
|
if(w->function)
|
||
|
if (w->type == MouseCallbackList::CallbackDataType_OnPress)
|
||
|
w->function.mousePressCallback(btn, this);
|
||
|
w = w->next;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|