175 lines
2.8 KiB
C++
175 lines
2.8 KiB
C++
|
|
#include "..\easy2d.h"
|
|||
|
|
|
|||
|
|
|
|||
|
|
MouseNode::MouseNode() :
|
|||
|
|
m_bBlock(true),
|
|||
|
|
m_bTarget(false),
|
|||
|
|
m_ClickCallback([]() {}),
|
|||
|
|
m_OnMouseInCallback([]() {}),
|
|||
|
|
m_OnMouseOutCallback([]() {}),
|
|||
|
|
m_OnSelectCallback([]() {}),
|
|||
|
|
m_OnUnselectCallback([]() {})
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
MouseNode::~MouseNode()
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool MouseNode::_exec(bool active)
|
|||
|
|
{
|
|||
|
|
// <20><> display <20><><EFBFBD><EFBFBD>Ϊ false<73><65><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (!m_bDisplay)
|
|||
|
|
{
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>ý<EFBFBD><C3BD>㣬<EFBFBD><E3A3AC><EFBFBD>ð<EFBFBD>ť<EFBFBD><C5A5><EFBFBD>Բ<EFBFBD><D4B2>˳<EFBFBD>
|
|||
|
|
if (!active)
|
|||
|
|
{
|
|||
|
|
reset();
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
// <20>жϽڵ㵱ǰ<E3B5B1><C7B0>״̬
|
|||
|
|
// <20><><EFBFBD>ڵ<EFBFBD>δȡ<CEB4>ý<EFBFBD><C3BD>㣬<EFBFBD><E3A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϽڵ<CFBD>״̬
|
|||
|
|
if (!m_bTarget)
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>ڽڵ<DABD><DAB5><EFBFBD><EFBFBD>ڵľ<DAB5><C4BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (_isMouseIn())
|
|||
|
|
{
|
|||
|
|
// ״̬<D7B4><CCAC>Ϊ MOUSEIN
|
|||
|
|
_setStatus(MOUSEIN);
|
|||
|
|
// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (MouseMsg::getMsg() == MouseMsg::LBUTTON_DOWN)
|
|||
|
|
{
|
|||
|
|
m_bTarget = true; // ȡ<>ý<EFBFBD><C3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
_setStatus(SELECTED); // ״̬<D7B4><CCAC>Ϊ SELECTED
|
|||
|
|
}
|
|||
|
|
// <20><><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>ȡ<EFBFBD>û<EFBFBD><C3BB>潹<EFBFBD><E6BDB9>
|
|||
|
|
if (m_bBlock) return true;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
reset(); // <20>ָ<EFBFBD>Ĭ<EFBFBD><C4AC>״̬
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
// <20>ڵ<EFBFBD>ȡ<EFBFBD>ý<EFBFBD><C3BD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̧<EFBFBD><CCA7>
|
|||
|
|
if (MouseMsg::getMsg() == MouseMsg::LBUTTON_UP)
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̧<EFBFBD><CCA7>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڽڵ<DABD><DAB5><EFBFBD>
|
|||
|
|
if (_isMouseIn())
|
|||
|
|
{
|
|||
|
|
m_ClickCallback(); // ִ<>лص<D0BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
}
|
|||
|
|
reset(); // <20>ָ<EFBFBD>Ĭ<EFBFBD><C4AC>״̬
|
|||
|
|
}
|
|||
|
|
// <20><><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>ȡ<EFBFBD>û<EFBFBD><C3BB>潹<EFBFBD><E6BDB9>
|
|||
|
|
if (m_bBlock) return true;
|
|||
|
|
}
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void MouseNode::_onDraw()
|
|||
|
|
{
|
|||
|
|
// <20>ڵ<EFBFBD><DAB5>Ƿ<EFBFBD><C7B7><EFBFBD>ʾ
|
|||
|
|
if (!m_bDisplay)
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
// <20>ڵ<EFBFBD><DAB5>Ƿ<EFBFBD><C7B7><EFBFBD>ѡ<EFBFBD><D1A1>
|
|||
|
|
if (m_eStatus == SELECTED)
|
|||
|
|
{
|
|||
|
|
_onSelected();
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>ڽڵ<DABD><DAB5><EFBFBD>
|
|||
|
|
if (m_eStatus == MOUSEIN)
|
|||
|
|
{
|
|||
|
|
_onMouseIn();
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
_onNormal();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool MouseNode::_isMouseIn()
|
|||
|
|
{
|
|||
|
|
return isPointIn(MouseMsg::getPos());
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void MouseNode::_setStatus(Status status)
|
|||
|
|
{
|
|||
|
|
if (m_eStatus != status)
|
|||
|
|
{
|
|||
|
|
// <20>˳<EFBFBD>ij<EFBFBD><C4B3>״̬<D7B4>Ļص<C4BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (m_eStatus == MOUSEIN)
|
|||
|
|
{
|
|||
|
|
m_OnMouseOutCallback();
|
|||
|
|
}
|
|||
|
|
else if (m_eStatus == SELECTED)
|
|||
|
|
{
|
|||
|
|
m_OnUnselectCallback();
|
|||
|
|
}
|
|||
|
|
// <20><><EFBFBD><EFBFBD>ij<EFBFBD><C4B3>״̬<D7B4>Ļص<C4BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (status == MOUSEIN)
|
|||
|
|
{
|
|||
|
|
m_OnMouseInCallback();
|
|||
|
|
}
|
|||
|
|
else if (status == SELECTED)
|
|||
|
|
{
|
|||
|
|
m_OnSelectCallback();
|
|||
|
|
}
|
|||
|
|
m_eStatus = status;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool MouseNode::isMouseIn()
|
|||
|
|
{
|
|||
|
|
return m_eStatus == MOUSEIN || m_eStatus == SELECTED;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool MouseNode::isSelected()
|
|||
|
|
{
|
|||
|
|
return m_eStatus == SELECTED;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void MouseNode::setClickedCallback(const CLICK_CALLBACK & callback)
|
|||
|
|
{
|
|||
|
|
m_ClickCallback = callback;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void MouseNode::setMouseInCallback(const CLICK_CALLBACK & callback)
|
|||
|
|
{
|
|||
|
|
m_OnMouseInCallback = callback;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void MouseNode::setMouseOutCallback(const CLICK_CALLBACK & callback)
|
|||
|
|
{
|
|||
|
|
m_OnMouseOutCallback = callback;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void MouseNode::setSelectCallback(const CLICK_CALLBACK & callback)
|
|||
|
|
{
|
|||
|
|
m_OnSelectCallback = callback;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void MouseNode::setUnselectCallback(const CLICK_CALLBACK & callback)
|
|||
|
|
{
|
|||
|
|
m_OnUnselectCallback = callback;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void MouseNode::reset()
|
|||
|
|
{
|
|||
|
|
m_bTarget = false; // ʧȥ<CAA7><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
_setStatus(NORMAL); // <20>ָ<EFBFBD>Ĭ<EFBFBD><C4AC>״̬
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void MouseNode::setBlock(bool block)
|
|||
|
|
{
|
|||
|
|
m_bBlock = block;
|
|||
|
|
}
|