2017-09-10 23:56:52 +08:00
|
|
|
|
#include "..\easy2d.h"
|
|
|
|
|
|
#include "..\EasyX\easyx.h"
|
|
|
|
|
|
|
2017-09-16 23:09:11 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
static std::vector<MouseMsg*> s_vMouseMsg;
|
|
|
|
|
|
|
2017-09-10 23:56:52 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
2017-09-20 14:52:50 +08:00
|
|
|
|
static MOUSEMSG s_mouseMsg;
|
2017-09-10 23:56:52 +08:00
|
|
|
|
|
2017-09-16 23:09:11 +08:00
|
|
|
|
void MouseMsg::__exec()
|
2017-09-10 23:56:52 +08:00
|
|
|
|
{
|
|
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|
|
|
|
|
while (MouseHit())
|
|
|
|
|
|
{
|
2017-09-20 14:52:50 +08:00
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|
|
|
|
|
s_mouseMsg = GetMouseMsg();
|
2017-09-10 23:56:52 +08:00
|
|
|
|
// ִ<>г<EFBFBD><D0B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2017-09-12 12:53:34 +08:00
|
|
|
|
App::get()->getCurrentScene()->_exec();
|
2017-09-16 23:09:11 +08:00
|
|
|
|
// ִ<><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
2017-09-20 14:52:50 +08:00
|
|
|
|
for (auto m : s_vMouseMsg) // ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2017-09-16 23:09:11 +08:00
|
|
|
|
{
|
2017-09-20 14:52:50 +08:00
|
|
|
|
m->onMouseMsg(); // ִ<>лص<D0BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
2017-09-16 23:09:11 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-10-06 02:32:33 +08:00
|
|
|
|
MouseMsg::MouseMsg() :
|
|
|
|
|
|
m_callback([]() {}),
|
|
|
|
|
|
m_pParentScene(nullptr)
|
2017-09-16 23:09:11 +08:00
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-10-06 02:32:33 +08:00
|
|
|
|
MouseMsg::MouseMsg(TString name, const MOUSE_CALLBACK & callback) :
|
|
|
|
|
|
m_sName(name),
|
|
|
|
|
|
m_callback(callback),
|
|
|
|
|
|
m_pParentScene(nullptr)
|
2017-09-16 23:09:11 +08:00
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
MouseMsg::~MouseMsg()
|
|
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-09-20 14:52:50 +08:00
|
|
|
|
void MouseMsg::onMouseMsg()
|
2017-09-16 23:09:11 +08:00
|
|
|
|
{
|
2017-09-20 14:52:50 +08:00
|
|
|
|
m_callback();
|
2017-09-16 23:09:11 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2017-10-05 00:53:03 +08:00
|
|
|
|
void MouseMsg::addListener(TString name, const MOUSE_CALLBACK & callback)
|
2017-09-16 23:09:11 +08:00
|
|
|
|
{
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>µļ<C2B5><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
auto mouse = new MouseMsg(name, callback);
|
2017-10-06 02:32:33 +08:00
|
|
|
|
mouse->m_pParentScene = App::getCurrentScene();
|
2017-09-16 23:09:11 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>µİ<C2B5><C4B0><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
s_vMouseMsg.push_back(mouse);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-10-05 00:53:03 +08:00
|
|
|
|
bool MouseMsg::delListener(TString name)
|
2017-09-16 23:09:11 +08:00
|
|
|
|
{
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
std::vector<MouseMsg*>::iterator iter;
|
|
|
|
|
|
// ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (iter = s_vMouseMsg.begin(); iter != s_vMouseMsg.end(); iter++)
|
|
|
|
|
|
{
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD>Ƶļ<C6B5><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
if ((*iter)->m_sName == name)
|
|
|
|
|
|
{
|
|
|
|
|
|
// ɾ<><C9BE><EFBFBD>ö<EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
|
delete (*iter);
|
|
|
|
|
|
s_vMouseMsg.erase(iter);
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20><>δ<EFBFBD>ҵ<EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD>Ƶļ<C6B5><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> false
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-10-06 02:32:33 +08:00
|
|
|
|
void MouseMsg::bindListenersWithScene(Scene * scene)
|
|
|
|
|
|
{
|
|
|
|
|
|
for (auto m : s_vMouseMsg)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (!m->m_pParentScene)
|
|
|
|
|
|
{
|
|
|
|
|
|
m->m_pParentScene = App::getCurrentScene();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MouseMsg::clearAllSceneListeners(Scene * scene)
|
|
|
|
|
|
{
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
std::vector<MouseMsg*>::iterator iter;
|
|
|
|
|
|
// ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (iter = s_vMouseMsg.begin(); iter != s_vMouseMsg.end(); iter++)
|
|
|
|
|
|
{
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD>Ƶļ<C6B5><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
if ((*iter)->m_pParentScene == scene)
|
|
|
|
|
|
{
|
|
|
|
|
|
// ɾ<><C9BE><EFBFBD>ö<EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
|
delete (*iter);
|
|
|
|
|
|
s_vMouseMsg.erase(iter);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-09-20 14:52:50 +08:00
|
|
|
|
void MouseMsg::clearAllListeners()
|
2017-09-16 23:09:11 +08:00
|
|
|
|
{
|
|
|
|
|
|
// ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (auto m : s_vMouseMsg)
|
|
|
|
|
|
{
|
|
|
|
|
|
delete m;
|
2017-09-10 23:56:52 +08:00
|
|
|
|
}
|
2017-09-16 23:09:11 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
s_vMouseMsg.clear();
|
2017-09-10 23:56:52 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2017-09-12 12:53:34 +08:00
|
|
|
|
bool MouseMsg::isLButtonDown()
|
2017-09-10 23:56:52 +08:00
|
|
|
|
{
|
|
|
|
|
|
return s_mouseMsg.mkLButton;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-09-12 12:53:34 +08:00
|
|
|
|
bool MouseMsg::isRButtonDown()
|
2017-09-10 23:56:52 +08:00
|
|
|
|
{
|
|
|
|
|
|
return s_mouseMsg.mkRButton;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-09-12 12:53:34 +08:00
|
|
|
|
bool MouseMsg::isMButtonDown()
|
2017-09-10 23:56:52 +08:00
|
|
|
|
{
|
|
|
|
|
|
return s_mouseMsg.mkMButton;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-09-20 14:52:50 +08:00
|
|
|
|
int MouseMsg::getX()
|
2017-09-10 23:56:52 +08:00
|
|
|
|
{
|
|
|
|
|
|
return s_mouseMsg.x;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-09-20 14:52:50 +08:00
|
|
|
|
int MouseMsg::getY()
|
2017-09-10 23:56:52 +08:00
|
|
|
|
{
|
|
|
|
|
|
return s_mouseMsg.y;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-09-27 17:56:28 +08:00
|
|
|
|
CPoint MouseMsg::getPos()
|
|
|
|
|
|
{
|
|
|
|
|
|
return CPoint(s_mouseMsg.x, s_mouseMsg.y);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-09-20 14:52:50 +08:00
|
|
|
|
int MouseMsg::getWheel()
|
2017-09-10 23:56:52 +08:00
|
|
|
|
{
|
|
|
|
|
|
return s_mouseMsg.wheel;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-09-12 12:53:34 +08:00
|
|
|
|
bool MouseMsg::isOnMouseMoved()
|
2017-09-10 23:56:52 +08:00
|
|
|
|
{
|
|
|
|
|
|
return s_mouseMsg.uMsg == WM_MOUSEMOVE;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-09-12 12:53:34 +08:00
|
|
|
|
bool MouseMsg::isOnLButtonDBClicked()
|
2017-09-10 23:56:52 +08:00
|
|
|
|
{
|
|
|
|
|
|
return s_mouseMsg.uMsg == WM_LBUTTONDBLCLK;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-09-12 12:53:34 +08:00
|
|
|
|
bool MouseMsg::isOnLButtonDown()
|
2017-09-10 23:56:52 +08:00
|
|
|
|
{
|
|
|
|
|
|
return s_mouseMsg.uMsg == WM_LBUTTONDOWN;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-09-12 12:53:34 +08:00
|
|
|
|
bool MouseMsg::isOnLButtonUp()
|
2017-09-10 23:56:52 +08:00
|
|
|
|
{
|
|
|
|
|
|
return s_mouseMsg.uMsg == WM_LBUTTONUP;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-09-12 12:53:34 +08:00
|
|
|
|
bool MouseMsg::isOnRButtonDBClicked()
|
2017-09-10 23:56:52 +08:00
|
|
|
|
{
|
|
|
|
|
|
return s_mouseMsg.uMsg == WM_RBUTTONDBLCLK;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-09-12 12:53:34 +08:00
|
|
|
|
bool MouseMsg::isOnRButtonDown()
|
2017-09-10 23:56:52 +08:00
|
|
|
|
{
|
|
|
|
|
|
return s_mouseMsg.uMsg == WM_RBUTTONDOWN;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-09-12 12:53:34 +08:00
|
|
|
|
bool MouseMsg::isOnRButtonUp()
|
2017-09-10 23:56:52 +08:00
|
|
|
|
{
|
|
|
|
|
|
return s_mouseMsg.uMsg == WM_LBUTTONUP;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-09-12 12:53:34 +08:00
|
|
|
|
bool MouseMsg::isOnMButtonDBClicked()
|
2017-09-10 23:56:52 +08:00
|
|
|
|
{
|
|
|
|
|
|
return s_mouseMsg.uMsg == WM_MBUTTONDBLCLK;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-09-12 12:53:34 +08:00
|
|
|
|
bool MouseMsg::isOnMButtonDown()
|
2017-09-10 23:56:52 +08:00
|
|
|
|
{
|
|
|
|
|
|
return s_mouseMsg.uMsg == WM_MBUTTONDOWN;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-09-12 12:53:34 +08:00
|
|
|
|
bool MouseMsg::isOnMButtonUp()
|
2017-09-10 23:56:52 +08:00
|
|
|
|
{
|
|
|
|
|
|
return s_mouseMsg.uMsg == WM_MBUTTONUP;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-09-12 12:53:34 +08:00
|
|
|
|
bool MouseMsg::isOnWheel()
|
2017-09-10 23:56:52 +08:00
|
|
|
|
{
|
|
|
|
|
|
return s_mouseMsg.uMsg == WM_MOUSEWHEEL;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MouseMsg::resetMouseMsg()
|
|
|
|
|
|
{
|
|
|
|
|
|
s_mouseMsg.uMsg = 0;
|
|
|
|
|
|
}
|