修复了所有回调函数不检测空引用就执行的bug;修复了EFont某些情况下崩溃的bug;修复了EButton没有获取启用和禁用状态的函数的bug;修复了EButton不显示禁用状态的bug;更新了EButton的监听方法;增加了EButtonToggle开关按钮类。
This commit is contained in:
parent
36b1d9ef50
commit
0aa057c8a7
|
|
@ -4,21 +4,31 @@ int main()
|
||||||
{
|
{
|
||||||
EApp app;
|
EApp app;
|
||||||
|
|
||||||
if (app.init(L"Easy2D Demo", 640, 640))
|
if (app.init(L"Easy2D Demo", 640, 480))
|
||||||
{
|
{
|
||||||
app.showConsole();
|
app.showConsole();
|
||||||
auto scene = new EScene();
|
auto scene = new EScene();
|
||||||
|
|
||||||
auto sprite = new ESprite(L"haha.png");
|
// 创建一个文本
|
||||||
// 获取窗口宽度
|
auto btnNormal = new EText(L"开");
|
||||||
float width = EApp::getWidth();
|
auto btnSelected = new EText(L"开");
|
||||||
// 获取窗口高度
|
btnSelected->movePosY(2);
|
||||||
float height = EApp::getHeight();
|
auto btnNormal2 = new EText(L"关");
|
||||||
// 移动精灵的位置
|
auto btnSelected2 = new EText(L"关");
|
||||||
sprite->setPos(width / 2 + sprite->getWidth(), height / 2);
|
btnSelected2->movePosY(2);
|
||||||
scene->add(sprite);
|
// 创建一个按钮
|
||||||
|
auto button = new EButtonToggle(btnNormal, btnNormal2, btnSelected, btnSelected2);
|
||||||
|
button->setCallback([=]() {
|
||||||
|
//button->setEnable(false);
|
||||||
|
});
|
||||||
|
button->toggle();
|
||||||
|
button->setPos(EApp::getWidth() / 2, EApp::getHeight() / 2);
|
||||||
|
scene->add(button);
|
||||||
|
|
||||||
scene->getRoot()->runAction(new EActionLoop(new EActionRotateBy(1, 60)));
|
// 创建按钮
|
||||||
|
auto button2 = new EButton(new EText(L"关闭"), [=]() { button->setEnable(!button->isEnable()); });
|
||||||
|
button2->setPos(40, 40);
|
||||||
|
scene->add(button2);
|
||||||
|
|
||||||
app.enterScene(scene);
|
app.enterScene(scene);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ e2d::EFont::EFont()
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::EFont::EFont(EString fontFamily, float fontSize /* = 22 */, UINT32 color /* = EColor::WHITE */, UINT32 fontWeight, bool italic /* = false */)
|
e2d::EFont::EFont(EString fontFamily, float fontSize /* = 22 */, UINT32 color /* = EColor::WHITE */, UINT32 fontWeight, bool italic /* = false */)
|
||||||
|
: EFont()
|
||||||
{
|
{
|
||||||
this->setFamily(fontFamily);
|
this->setFamily(fontFamily);
|
||||||
this->setSize(fontSize);
|
this->setSize(fontSize);
|
||||||
|
|
|
||||||
|
|
@ -235,6 +235,7 @@
|
||||||
<ClCompile Include="Manager\EPhysicsManager.cpp" />
|
<ClCompile Include="Manager\EPhysicsManager.cpp" />
|
||||||
<ClCompile Include="Manager\ETimerManager.cpp" />
|
<ClCompile Include="Manager\ETimerManager.cpp" />
|
||||||
<ClCompile Include="Node\EButton.cpp" />
|
<ClCompile Include="Node\EButton.cpp" />
|
||||||
|
<ClCompile Include="Node\EButtonToggle.cpp" />
|
||||||
<ClCompile Include="Node\ENode.cpp" />
|
<ClCompile Include="Node\ENode.cpp" />
|
||||||
<ClCompile Include="Node\ESprite.cpp" />
|
<ClCompile Include="Node\ESprite.cpp" />
|
||||||
<ClCompile Include="Node\ESpriteFrame.cpp" />
|
<ClCompile Include="Node\ESpriteFrame.cpp" />
|
||||||
|
|
|
||||||
|
|
@ -210,6 +210,9 @@
|
||||||
<ClCompile Include="Listener\EListenerPhysicsCollision.cpp">
|
<ClCompile Include="Listener\EListenerPhysicsCollision.cpp">
|
||||||
<Filter>Listener</Filter>
|
<Filter>Listener</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="Node\EButtonToggle.cpp">
|
||||||
|
<Filter>Node</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="Win\winbase.h">
|
<ClInclude Include="Win\winbase.h">
|
||||||
|
|
|
||||||
|
|
@ -3,29 +3,34 @@
|
||||||
|
|
||||||
e2d::EListenerKeyboard::EListenerKeyboard()
|
e2d::EListenerKeyboard::EListenerKeyboard()
|
||||||
: EListener()
|
: EListener()
|
||||||
|
, m_Callback(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::EListenerKeyboard::EListenerKeyboard(const EString & name)
|
e2d::EListenerKeyboard::EListenerKeyboard(const EString & name)
|
||||||
: EListener(name)
|
: EListener(name)
|
||||||
|
, m_Callback(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::EListenerKeyboard::EListenerKeyboard(const KEY_LISTENER_CALLBACK & callback)
|
e2d::EListenerKeyboard::EListenerKeyboard(const KEY_LISTENER_CALLBACK & callback)
|
||||||
: EListener()
|
: EListener()
|
||||||
|
, m_Callback(callback)
|
||||||
{
|
{
|
||||||
m_Callback = callback;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::EListenerKeyboard::EListenerKeyboard(const EString & name, const KEY_LISTENER_CALLBACK & callback)
|
e2d::EListenerKeyboard::EListenerKeyboard(const EString & name, const KEY_LISTENER_CALLBACK & callback)
|
||||||
: EListener(name)
|
: EListener(name)
|
||||||
|
, m_Callback(callback)
|
||||||
{
|
{
|
||||||
m_Callback = callback;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::EListenerKeyboard::_callOn()
|
void e2d::EListenerKeyboard::_callOn()
|
||||||
{
|
{
|
||||||
|
if (m_Callback)
|
||||||
|
{
|
||||||
m_Callback();
|
m_Callback();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::EListenerKeyboard::setCallback(const KEY_LISTENER_CALLBACK & callback)
|
void e2d::EListenerKeyboard::setCallback(const KEY_LISTENER_CALLBACK & callback)
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,10 @@ e2d::EListenerKeyboardPress::EListenerKeyboardPress(const EString & name, const
|
||||||
void e2d::EListenerKeyboardPress::_callOn()
|
void e2d::EListenerKeyboardPress::_callOn()
|
||||||
{
|
{
|
||||||
if (EKeyboardMsg::getMsg() == EKeyboardMsg::KEYBOARD_MSG::KEY_DOWN)
|
if (EKeyboardMsg::getMsg() == EKeyboardMsg::KEYBOARD_MSG::KEY_DOWN)
|
||||||
|
{
|
||||||
|
if (m_Callback)
|
||||||
{
|
{
|
||||||
m_Callback();
|
m_Callback();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,29 +3,34 @@
|
||||||
|
|
||||||
e2d::EListenerMouse::EListenerMouse()
|
e2d::EListenerMouse::EListenerMouse()
|
||||||
: EListener()
|
: EListener()
|
||||||
|
, m_Callback(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::EListenerMouse::EListenerMouse(const EString & name)
|
e2d::EListenerMouse::EListenerMouse(const EString & name)
|
||||||
: EListener(name)
|
: EListener(name)
|
||||||
|
, m_Callback(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::EListenerMouse::EListenerMouse(const MOUSE_LISTENER_CALLBACK & callback)
|
e2d::EListenerMouse::EListenerMouse(const MOUSE_LISTENER_CALLBACK & callback)
|
||||||
: EListener()
|
: EListener()
|
||||||
|
, m_Callback(callback)
|
||||||
{
|
{
|
||||||
m_Callback = callback;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::EListenerMouse::EListenerMouse(const EString & name, const MOUSE_LISTENER_CALLBACK & callback)
|
e2d::EListenerMouse::EListenerMouse(const EString & name, const MOUSE_LISTENER_CALLBACK & callback)
|
||||||
: EListener(name)
|
: EListener(name)
|
||||||
|
, m_Callback(callback)
|
||||||
{
|
{
|
||||||
m_Callback = callback;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::EListenerMouse::_callOn()
|
void e2d::EListenerMouse::_callOn()
|
||||||
{
|
{
|
||||||
|
if (m_Callback)
|
||||||
|
{
|
||||||
m_Callback();
|
m_Callback();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::EListenerMouse::setCallback(const MOUSE_LISTENER_CALLBACK & callback)
|
void e2d::EListenerMouse::setCallback(const MOUSE_LISTENER_CALLBACK & callback)
|
||||||
|
|
|
||||||
|
|
@ -3,12 +3,14 @@
|
||||||
e2d::EListenerMouseClick::EListenerMouseClick()
|
e2d::EListenerMouseClick::EListenerMouseClick()
|
||||||
: EListenerMouse()
|
: EListenerMouse()
|
||||||
, m_bPressed(false)
|
, m_bPressed(false)
|
||||||
|
, m_Callback(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::EListenerMouseClick::EListenerMouseClick(const EString & name)
|
e2d::EListenerMouseClick::EListenerMouseClick(const EString & name)
|
||||||
: EListenerMouse(name)
|
: EListenerMouse(name)
|
||||||
, m_bPressed(false)
|
, m_bPressed(false)
|
||||||
|
, m_Callback(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -34,8 +36,11 @@ void e2d::EListenerMouseClick::_callOn()
|
||||||
m_bPressed = true;
|
m_bPressed = true;
|
||||||
}
|
}
|
||||||
else if (m_bPressed && EMouseMsg::getMsg() == EMouseMsg::LBUTTON_UP)
|
else if (m_bPressed && EMouseMsg::getMsg() == EMouseMsg::LBUTTON_UP)
|
||||||
|
{
|
||||||
|
if (m_Callback)
|
||||||
{
|
{
|
||||||
m_Callback(EMouseMsg::getPos());
|
m_Callback(EMouseMsg::getPos());
|
||||||
|
}
|
||||||
m_bPressed = false;
|
m_bPressed = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,12 +3,14 @@
|
||||||
e2d::EListenerMouseDoubleClick::EListenerMouseDoubleClick()
|
e2d::EListenerMouseDoubleClick::EListenerMouseDoubleClick()
|
||||||
: EListenerMouse()
|
: EListenerMouse()
|
||||||
, m_bPressed(false)
|
, m_bPressed(false)
|
||||||
|
, m_Callback(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::EListenerMouseDoubleClick::EListenerMouseDoubleClick(const EString & name)
|
e2d::EListenerMouseDoubleClick::EListenerMouseDoubleClick(const EString & name)
|
||||||
: EListenerMouse(name)
|
: EListenerMouse(name)
|
||||||
, m_bPressed(false)
|
, m_bPressed(false)
|
||||||
|
, m_Callback(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -37,8 +39,11 @@ void e2d::EListenerMouseDoubleClick::_callOn()
|
||||||
m_bPressed = true;
|
m_bPressed = true;
|
||||||
}
|
}
|
||||||
else if (m_bPressed && EMouseMsg::getMsg() == EMouseMsg::LBUTTON_UP)
|
else if (m_bPressed && EMouseMsg::getMsg() == EMouseMsg::LBUTTON_UP)
|
||||||
|
{
|
||||||
|
if (m_Callback)
|
||||||
{
|
{
|
||||||
m_Callback(EMouseMsg::getPos());
|
m_Callback(EMouseMsg::getPos());
|
||||||
|
}
|
||||||
m_bPressed = false;
|
m_bPressed = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,11 +2,13 @@
|
||||||
|
|
||||||
e2d::EListenerMouseDrag::EListenerMouseDrag()
|
e2d::EListenerMouseDrag::EListenerMouseDrag()
|
||||||
: EListenerMouse()
|
: EListenerMouse()
|
||||||
|
, m_Callback(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::EListenerMouseDrag::EListenerMouseDrag(const EString & name)
|
e2d::EListenerMouseDrag::EListenerMouseDrag(const EString & name)
|
||||||
: EListenerMouse(name)
|
: EListenerMouse(name)
|
||||||
|
, m_Callback(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -30,9 +32,12 @@ void e2d::EListenerMouseDrag::_callOn()
|
||||||
m_Begin = EMouseMsg::getPos();
|
m_Begin = EMouseMsg::getPos();
|
||||||
}
|
}
|
||||||
else if (EMouseMsg::isLButtonDown() && EMouseMsg::getMsg() == EMouseMsg::MOVE)
|
else if (EMouseMsg::isLButtonDown() && EMouseMsg::getMsg() == EMouseMsg::MOVE)
|
||||||
|
{
|
||||||
|
if (m_Callback)
|
||||||
{
|
{
|
||||||
m_Callback(m_Begin, EMouseMsg::getPos());
|
m_Callback(m_Begin, EMouseMsg::getPos());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::EListenerMouseDrag::setCallback(const MOUSE_DRAG_LISTENER_CALLBACK & callback)
|
void e2d::EListenerMouseDrag::setCallback(const MOUSE_DRAG_LISTENER_CALLBACK & callback)
|
||||||
|
|
|
||||||
|
|
@ -2,11 +2,13 @@
|
||||||
|
|
||||||
e2d::EListenerMousePress::EListenerMousePress()
|
e2d::EListenerMousePress::EListenerMousePress()
|
||||||
: EListenerMouse()
|
: EListenerMouse()
|
||||||
|
, m_Callback(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::EListenerMousePress::EListenerMousePress(const EString & name)
|
e2d::EListenerMousePress::EListenerMousePress(const EString & name)
|
||||||
: EListenerMouse(name)
|
: EListenerMouse(name)
|
||||||
|
, m_Callback(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -26,9 +28,12 @@ void e2d::EListenerMousePress::_callOn()
|
||||||
{
|
{
|
||||||
if (EMouseMsg::getMsg() == EMouseMsg::LBUTTON_DOWN ||
|
if (EMouseMsg::getMsg() == EMouseMsg::LBUTTON_DOWN ||
|
||||||
EMouseMsg::getMsg() == EMouseMsg::LBUTTON_DBLCLK)
|
EMouseMsg::getMsg() == EMouseMsg::LBUTTON_DBLCLK)
|
||||||
|
{
|
||||||
|
if (m_Callback)
|
||||||
{
|
{
|
||||||
m_Callback(EMouseMsg::getPos());
|
m_Callback(EMouseMsg::getPos());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::EListenerMousePress::setCallback(const MOUSE_PRESS_LISTENER_CALLBACK & callback)
|
void e2d::EListenerMousePress::setCallback(const MOUSE_PRESS_LISTENER_CALLBACK & callback)
|
||||||
|
|
|
||||||
|
|
@ -4,33 +4,34 @@
|
||||||
|
|
||||||
e2d::EListenerPhysics::EListenerPhysics()
|
e2d::EListenerPhysics::EListenerPhysics()
|
||||||
: EListener()
|
: EListener()
|
||||||
|
, m_Callback(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::EListenerPhysics::EListenerPhysics(const EString & name)
|
e2d::EListenerPhysics::EListenerPhysics(const EString & name)
|
||||||
: EListener(name)
|
: EListener(name)
|
||||||
|
, m_Callback(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::EListenerPhysics::EListenerPhysics(const PHYSICS_LISTENER_CALLBACK & callback)
|
e2d::EListenerPhysics::EListenerPhysics(const PHYSICS_LISTENER_CALLBACK & callback)
|
||||||
: EListener()
|
: EListener()
|
||||||
|
, m_Callback(callback)
|
||||||
{
|
{
|
||||||
m_Callback = callback;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::EListenerPhysics::EListenerPhysics(const EString & name, const PHYSICS_LISTENER_CALLBACK & callback)
|
e2d::EListenerPhysics::EListenerPhysics(const EString & name, const PHYSICS_LISTENER_CALLBACK & callback)
|
||||||
: EListener(name)
|
: EListener(name)
|
||||||
|
, m_Callback(callback)
|
||||||
{
|
{
|
||||||
m_Callback = callback;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::EListenerPhysics::_callOn()
|
void e2d::EListenerPhysics::_callOn()
|
||||||
{
|
{
|
||||||
m_Callback(
|
if (m_Callback)
|
||||||
EPhysicsMsg::getActiveGeometry()->getParentNode(),
|
{
|
||||||
EPhysicsMsg::getPassiveGeometry()->getParentNode(),
|
m_Callback();
|
||||||
EPhysicsMsg::getMsg()
|
}
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::EListenerPhysics::setCallback(const PHYSICS_LISTENER_CALLBACK & callback)
|
void e2d::EListenerPhysics::setCallback(const PHYSICS_LISTENER_CALLBACK & callback)
|
||||||
|
|
|
||||||
|
|
@ -3,24 +3,26 @@
|
||||||
|
|
||||||
e2d::EListenerPhysicsCollision::EListenerPhysicsCollision()
|
e2d::EListenerPhysicsCollision::EListenerPhysicsCollision()
|
||||||
: EListenerPhysics()
|
: EListenerPhysics()
|
||||||
|
, m_Callback(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::EListenerPhysicsCollision::EListenerPhysicsCollision(const EString & name)
|
e2d::EListenerPhysicsCollision::EListenerPhysicsCollision(const EString & name)
|
||||||
: EListenerPhysics(name)
|
: EListenerPhysics(name)
|
||||||
|
, m_Callback(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::EListenerPhysicsCollision::EListenerPhysicsCollision(const COLLISION_LISTENER_CALLBACK & callback)
|
e2d::EListenerPhysicsCollision::EListenerPhysicsCollision(const COLLISION_LISTENER_CALLBACK & callback)
|
||||||
: EListenerPhysics()
|
: EListenerPhysics()
|
||||||
|
, m_Callback(callback)
|
||||||
{
|
{
|
||||||
this->m_Callback = callback;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::EListenerPhysicsCollision::EListenerPhysicsCollision(const EString & name, const COLLISION_LISTENER_CALLBACK & callback)
|
e2d::EListenerPhysicsCollision::EListenerPhysicsCollision(const EString & name, const COLLISION_LISTENER_CALLBACK & callback)
|
||||||
: EListenerPhysics(name)
|
: EListenerPhysics(name)
|
||||||
|
, m_Callback(callback)
|
||||||
{
|
{
|
||||||
this->m_Callback = callback;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::EListenerPhysicsCollision::_callOn()
|
void e2d::EListenerPhysicsCollision::_callOn()
|
||||||
|
|
@ -29,9 +31,9 @@ void e2d::EListenerPhysicsCollision::_callOn()
|
||||||
EPhysicsMsg::getMsg() == EPhysicsMsg::CONTAINS ||
|
EPhysicsMsg::getMsg() == EPhysicsMsg::CONTAINS ||
|
||||||
EPhysicsMsg::getMsg() == EPhysicsMsg::IS_CONTAINED)
|
EPhysicsMsg::getMsg() == EPhysicsMsg::IS_CONTAINED)
|
||||||
{
|
{
|
||||||
m_Callback(
|
if (m_Callback)
|
||||||
EPhysicsMsg::getActiveGeometry()->getParentNode(),
|
{
|
||||||
EPhysicsMsg::getPassiveGeometry()->getParentNode()
|
m_Callback();
|
||||||
);
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,15 +4,15 @@
|
||||||
#include "..\Win\winbase.h"
|
#include "..\Win\winbase.h"
|
||||||
|
|
||||||
e2d::EButton::EButton()
|
e2d::EButton::EButton()
|
||||||
: m_Callback([] {})
|
: m_Callback((const BUTTON_CLICK_CALLBACK &)nullptr)
|
||||||
, m_eStatus(STATUS::NORMAL)
|
, m_eStatus(STATUS::NORMAL)
|
||||||
, m_bIsDisable(false)
|
, m_bEnable(true)
|
||||||
, m_bIsSelected(false)
|
, m_bIsSelected(false)
|
||||||
, m_pNormal(nullptr)
|
, m_pNormal(nullptr)
|
||||||
, m_pMouseover(nullptr)
|
, m_pMouseover(nullptr)
|
||||||
, m_pSelected(nullptr)
|
, m_pSelected(nullptr)
|
||||||
, m_pDisabled(nullptr)
|
, m_pDisabled(nullptr)
|
||||||
, m_pDisplayed(nullptr)
|
, m_pListener(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -50,174 +50,206 @@ e2d::EButton::EButton(ENode * normal, ENode * mouseover, ENode * selected, ENode
|
||||||
this->setCallback(callback);
|
this->setCallback(callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool e2d::EButton::isEnable() const
|
||||||
|
{
|
||||||
|
return m_bEnable;
|
||||||
|
}
|
||||||
|
|
||||||
void e2d::EButton::setNormal(ENode * normal)
|
void e2d::EButton::setNormal(ENode * normal)
|
||||||
{
|
{
|
||||||
if (normal)
|
if (normal != m_pNormal)
|
||||||
{
|
{
|
||||||
|
// 移除旧的
|
||||||
if (m_pNormal)
|
if (m_pNormal)
|
||||||
{
|
{
|
||||||
this->removeChild(m_pNormal);
|
this->removeChild(m_pNormal);
|
||||||
}
|
}
|
||||||
|
// 添加新的
|
||||||
|
if (normal)
|
||||||
|
{
|
||||||
|
this->addChild(normal);
|
||||||
|
}
|
||||||
m_pNormal = normal;
|
m_pNormal = normal;
|
||||||
this->addChild(m_pNormal);
|
_updateVisiable();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::EButton::setMouseOver(ENode * mouseover)
|
void e2d::EButton::setMouseOver(ENode * mouseover)
|
||||||
{
|
{
|
||||||
if (mouseover)
|
if (mouseover != m_pNormal)
|
||||||
{
|
{
|
||||||
|
// 移除旧的
|
||||||
if (m_pMouseover)
|
if (m_pMouseover)
|
||||||
{
|
{
|
||||||
this->removeChild(m_pMouseover);
|
this->removeChild(m_pMouseover);
|
||||||
}
|
}
|
||||||
|
// 添加新的
|
||||||
|
if (mouseover)
|
||||||
|
{
|
||||||
|
this->addChild(mouseover);
|
||||||
|
}
|
||||||
m_pMouseover = mouseover;
|
m_pMouseover = mouseover;
|
||||||
this->addChild(m_pMouseover);
|
_updateVisiable();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::EButton::setSelected(ENode * selected)
|
void e2d::EButton::setSelected(ENode * selected)
|
||||||
{
|
{
|
||||||
if (selected)
|
if (selected != m_pNormal)
|
||||||
{
|
{
|
||||||
|
// 移除旧的
|
||||||
if (m_pSelected)
|
if (m_pSelected)
|
||||||
{
|
{
|
||||||
this->removeChild(m_pSelected);
|
this->removeChild(m_pSelected);
|
||||||
}
|
}
|
||||||
|
// 添加新的
|
||||||
|
if (selected)
|
||||||
|
{
|
||||||
|
this->addChild(selected);
|
||||||
|
}
|
||||||
m_pSelected = selected;
|
m_pSelected = selected;
|
||||||
this->addChild(m_pSelected);
|
_updateVisiable();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::EButton::setDisabled(ENode * disabled)
|
void e2d::EButton::setDisabled(ENode * disabled)
|
||||||
{
|
{
|
||||||
if (disabled)
|
if (disabled != m_pNormal)
|
||||||
{
|
{
|
||||||
|
// 移除旧的
|
||||||
if (m_pDisabled)
|
if (m_pDisabled)
|
||||||
{
|
{
|
||||||
this->removeChild(m_pDisabled);
|
this->removeChild(m_pDisabled);
|
||||||
}
|
}
|
||||||
|
// 添加新的
|
||||||
|
if (disabled)
|
||||||
|
{
|
||||||
|
this->addChild(disabled);
|
||||||
|
}
|
||||||
m_pDisabled = disabled;
|
m_pDisabled = disabled;
|
||||||
this->addChild(m_pDisabled);
|
_updateVisiable();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::EButton::setDisable(bool disable)
|
void e2d::EButton::setEnable(bool bEnable)
|
||||||
{
|
{
|
||||||
m_bIsDisable = disable;
|
if (m_bEnable != bEnable)
|
||||||
|
{
|
||||||
|
m_bEnable = bEnable;
|
||||||
|
_updateStatus();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::EButton::setCallback(const BUTTON_CLICK_CALLBACK & callback)
|
void e2d::EButton::setCallback(const BUTTON_CLICK_CALLBACK & callback)
|
||||||
{
|
{
|
||||||
|
WARN_IF(m_pNormal == nullptr, "EButton cannot work without something to show. Please set its normal displayed.");
|
||||||
|
|
||||||
m_Callback = callback;
|
m_Callback = callback;
|
||||||
|
|
||||||
// 停止其他监听器
|
if (m_pListener == nullptr)
|
||||||
EMsgManager::stopAllMouseListenersBindedWith(this);
|
{
|
||||||
// 新建一个监听器
|
m_pListener = new EListenerMouse(std::bind(&EButton::_updateStatus, this));
|
||||||
auto listener = new EListenerMouse(std::bind(&EButton::_listenerCallback, this));
|
m_pListener->setAlwaysWorking(true);
|
||||||
listener->setAlwaysWorking(true);
|
EMsgManager::bindListener(m_pListener, this);
|
||||||
EMsgManager::bindListener(listener, this);
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::EButton::_callOn()
|
void e2d::EButton::_setStatus(STATUS status)
|
||||||
{
|
{
|
||||||
if (!m_bVisiable)
|
if (m_eStatus != status)
|
||||||
{
|
{
|
||||||
return;
|
m_eStatus = status;
|
||||||
|
_updateVisiable();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (m_bTransformChildrenNeeded)
|
void e2d::EButton::_updateVisiable()
|
||||||
{
|
{
|
||||||
_updateTransform(this);
|
if (m_pNormal) m_pNormal->setVisiable(false);
|
||||||
}
|
if (m_pMouseover) m_pMouseover->setVisiable(false);
|
||||||
|
if (m_pSelected) m_pSelected->setVisiable(false);
|
||||||
|
if (m_pDisabled) m_pDisabled->setVisiable(false);
|
||||||
|
|
||||||
if (!m_vChildren.empty())
|
if (m_bEnable)
|
||||||
{
|
{
|
||||||
GetRenderTarget()->SetTransform(m_Matri);
|
if (m_eStatus == STATUS::SELECTED && m_pSelected)
|
||||||
|
|
||||||
if (m_eStatus == STATUS::DISABLED && m_pDisabled)
|
|
||||||
{
|
{
|
||||||
m_pDisabled->_callOn();
|
m_pSelected->setVisiable(true);
|
||||||
}
|
|
||||||
else if (m_eStatus == STATUS::SELECTED && m_pSelected)
|
|
||||||
{
|
|
||||||
m_pSelected->_callOn();
|
|
||||||
}
|
}
|
||||||
else if (m_eStatus == STATUS::MOUSEOVER && m_pMouseover)
|
else if (m_eStatus == STATUS::MOUSEOVER && m_pMouseover)
|
||||||
{
|
{
|
||||||
m_pMouseover->_callOn();
|
m_pMouseover->setVisiable(true);
|
||||||
}
|
}
|
||||||
else if (m_pNormal)
|
else
|
||||||
{
|
{
|
||||||
m_pNormal->_callOn();
|
if (m_pNormal) m_pNormal->setVisiable(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (m_pDisabled)
|
||||||
|
{
|
||||||
|
m_pDisabled->setVisiable(true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (m_pNormal) m_pNormal->setVisiable(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::EButton::_listenerCallback()
|
void e2d::EButton::_updateStatus()
|
||||||
{
|
{
|
||||||
if (!m_bIsDisable)
|
if (m_bEnable && m_pNormal)
|
||||||
{
|
{
|
||||||
if (!m_pDisplayed)
|
ENode * pMouseover = m_pMouseover ? m_pMouseover : m_pNormal;
|
||||||
{
|
ENode * pSelected = m_pSelected ? m_pSelected : m_pNormal;
|
||||||
m_pDisplayed = m_pNormal;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (EMouseMsg::getMsg() == EMouseMsg::LBUTTON_DOWN &&
|
if (EMouseMsg::getMsg() == EMouseMsg::LBUTTON_UP)
|
||||||
m_pDisplayed &&
|
|
||||||
m_pDisplayed->isPointIn(EMouseMsg::getPos()))
|
|
||||||
{
|
|
||||||
// 鼠标左键按下,且位于按钮内时,标记 m_bIsSelected 为 true
|
|
||||||
m_bIsSelected = true;
|
|
||||||
}
|
|
||||||
else if (EMouseMsg::getMsg() == EMouseMsg::LBUTTON_UP)
|
|
||||||
{
|
{
|
||||||
// 鼠标左键抬起时,判断鼠标坐标是否在按钮内部
|
// 鼠标左键抬起时,判断鼠标坐标是否在按钮内部
|
||||||
if (m_bIsSelected &&
|
if (m_bIsSelected &&
|
||||||
m_pDisplayed &&
|
pSelected->isPointIn(EMouseMsg::getPos()))
|
||||||
m_pDisplayed->isPointIn(EMouseMsg::getPos()))
|
|
||||||
{
|
{
|
||||||
m_Callback();
|
_runCallback();
|
||||||
m_eStatus = STATUS::NORMAL;
|
|
||||||
m_pDisplayed = m_pNormal;
|
|
||||||
}
|
}
|
||||||
// 标记 m_bIsSelected 为 false
|
// 标记 m_bIsSelected 为 false
|
||||||
m_bIsSelected = false;
|
m_bIsSelected = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (EMouseMsg::isLButtonDown() &&
|
if (EMouseMsg::getMsg() == EMouseMsg::LBUTTON_DOWN)
|
||||||
m_bIsSelected &&
|
|
||||||
m_pSelected &&
|
|
||||||
m_pSelected->isPointIn(EMouseMsg::getPos()))
|
|
||||||
{
|
{
|
||||||
// 鼠标左键按下,且按钮是被选中的状态,且鼠标
|
if (pMouseover->isPointIn(EMouseMsg::getPos()))
|
||||||
// 在按钮内时,按钮状态变为 SELECTED
|
|
||||||
m_eStatus = STATUS::SELECTED;
|
|
||||||
m_pDisplayed = m_pSelected;
|
|
||||||
}
|
|
||||||
else if (EMouseMsg::getMsg() == EMouseMsg::MOVE &&
|
|
||||||
m_pDisplayed &&
|
|
||||||
m_pDisplayed->isPointIn(EMouseMsg::getPos()) &&
|
|
||||||
m_pMouseover)
|
|
||||||
{
|
{
|
||||||
m_eStatus = STATUS::MOUSEOVER;
|
// 鼠标左键按下,且位于按钮内时,标记 m_bIsSelected 为 true
|
||||||
m_pDisplayed = m_pMouseover;
|
m_bIsSelected = true;
|
||||||
}
|
_setStatus(STATUS::SELECTED);
|
||||||
else
|
return;
|
||||||
{
|
|
||||||
m_eStatus = STATUS::NORMAL;
|
|
||||||
m_pDisplayed = m_pNormal;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
if (m_bIsSelected && EMouseMsg::isLButtonDown())
|
||||||
{
|
{
|
||||||
if (m_pDisplayed)
|
if (pSelected->isPointIn(EMouseMsg::getPos()))
|
||||||
{
|
{
|
||||||
m_eStatus = STATUS::DISABLED;
|
_setStatus(STATUS::SELECTED);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
m_eStatus = STATUS::NORMAL;
|
|
||||||
}
|
}
|
||||||
|
else if (m_pNormal->isPointIn(EMouseMsg::getPos()))
|
||||||
|
{
|
||||||
|
_setStatus(STATUS::MOUSEOVER);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_setStatus(STATUS::NORMAL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::EButton::_runCallback()
|
||||||
|
{
|
||||||
|
if (m_Callback)
|
||||||
|
{
|
||||||
|
m_Callback();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,290 @@
|
||||||
|
#include "..\enodes.h"
|
||||||
|
#include "..\elisteners.h"
|
||||||
|
#include "..\emanagers.h"
|
||||||
|
#include "..\Win\winbase.h"
|
||||||
|
|
||||||
|
e2d::EButtonToggle::EButtonToggle()
|
||||||
|
: EButton()
|
||||||
|
, m_bToggle(true)
|
||||||
|
, m_pNormalOn(nullptr)
|
||||||
|
, m_pMouseoverOn(nullptr)
|
||||||
|
, m_pSelectedOn(nullptr)
|
||||||
|
, m_pDisabledOn(nullptr)
|
||||||
|
, m_pNormalOff(nullptr)
|
||||||
|
, m_pMouseoverOff(nullptr)
|
||||||
|
, m_pSelectedOff(nullptr)
|
||||||
|
, m_pDisabledOff(nullptr)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::EButtonToggle::EButtonToggle(ENode * toggleOnNormal, ENode * toggleOffNormal, const BUTTON_CLICK_CALLBACK & callback)
|
||||||
|
: EButtonToggle()
|
||||||
|
{
|
||||||
|
this->setNormal(toggleOnNormal);
|
||||||
|
this->setNormalOff(toggleOffNormal);
|
||||||
|
this->setCallback(callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::EButtonToggle::EButtonToggle(ENode * toggleOnNormal, ENode * toggleOffNormal, ENode * toggleOnSelected, ENode * toggleOffSelected, const BUTTON_CLICK_CALLBACK & callback)
|
||||||
|
: EButtonToggle()
|
||||||
|
{
|
||||||
|
this->setNormal(toggleOnNormal);
|
||||||
|
this->setNormalOff(toggleOffNormal);
|
||||||
|
this->setSelected(toggleOnSelected);
|
||||||
|
this->setSelectedOff(toggleOffSelected);
|
||||||
|
this->setCallback(callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::EButtonToggle::EButtonToggle(ENode * toggleOnNormal, ENode * toggleOffNormal, ENode * toggleOnMouseOver, ENode * toggleOffMouseOver, ENode * toggleOnSelected, ENode * toggleOffSelected, const BUTTON_CLICK_CALLBACK & callback)
|
||||||
|
: EButtonToggle()
|
||||||
|
{
|
||||||
|
this->setNormal(toggleOnNormal);
|
||||||
|
this->setNormalOff(toggleOffNormal);
|
||||||
|
this->setMouseOver(toggleOnMouseOver);
|
||||||
|
this->setMouseOverOff(toggleOffMouseOver);
|
||||||
|
this->setSelected(toggleOnSelected);
|
||||||
|
this->setSelectedOff(toggleOffSelected);
|
||||||
|
this->setCallback(callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::EButtonToggle::EButtonToggle(ENode * toggleOnNormal, ENode * toggleOffNormal, ENode * toggleOnMouseOver, ENode * toggleOffMouseOver, ENode * toggleOnSelected, ENode * toggleOffSelected, ENode * toggleOnDisabled, ENode * toggleOffDisabled, const BUTTON_CLICK_CALLBACK & callback)
|
||||||
|
: EButtonToggle()
|
||||||
|
{
|
||||||
|
this->setNormal(toggleOnNormal);
|
||||||
|
this->setNormalOff(toggleOffNormal);
|
||||||
|
this->setMouseOver(toggleOnMouseOver);
|
||||||
|
this->setMouseOverOff(toggleOffMouseOver);
|
||||||
|
this->setSelected(toggleOnSelected);
|
||||||
|
this->setSelectedOff(toggleOffSelected);
|
||||||
|
this->setDisabled(toggleOnDisabled);
|
||||||
|
this->setDisabledOff(toggleOffDisabled);
|
||||||
|
this->setCallback(callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::EButtonToggle::toggle()
|
||||||
|
{
|
||||||
|
m_bToggle = !m_bToggle;
|
||||||
|
_updateToggle();
|
||||||
|
_updateVisiable();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool e2d::EButtonToggle::isToggleOn() const
|
||||||
|
{
|
||||||
|
return m_bToggle;
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::EButtonToggle::setToggle(bool toggle)
|
||||||
|
{
|
||||||
|
if (m_bToggle != toggle)
|
||||||
|
{
|
||||||
|
m_bToggle = toggle;
|
||||||
|
_updateToggle();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::EButtonToggle::setNormal(ENode * normal)
|
||||||
|
{
|
||||||
|
if (normal != m_pNormalOn)
|
||||||
|
{
|
||||||
|
// 移除旧的
|
||||||
|
if (m_pNormalOn)
|
||||||
|
{
|
||||||
|
this->removeChild(m_pNormalOn);
|
||||||
|
}
|
||||||
|
// 添加新的
|
||||||
|
if (normal)
|
||||||
|
{
|
||||||
|
this->addChild(normal);
|
||||||
|
}
|
||||||
|
m_pNormalOn = normal;
|
||||||
|
|
||||||
|
_updateToggle();
|
||||||
|
_updateVisiable();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::EButtonToggle::setMouseOver(ENode * mouseover)
|
||||||
|
{
|
||||||
|
if (mouseover != m_pMouseoverOn)
|
||||||
|
{
|
||||||
|
// 移除旧的
|
||||||
|
if (m_pMouseoverOn)
|
||||||
|
{
|
||||||
|
this->removeChild(m_pMouseoverOn);
|
||||||
|
}
|
||||||
|
// 添加新的
|
||||||
|
if (mouseover)
|
||||||
|
{
|
||||||
|
this->addChild(mouseover);
|
||||||
|
}
|
||||||
|
m_pMouseoverOn = mouseover;
|
||||||
|
|
||||||
|
_updateToggle();
|
||||||
|
_updateVisiable();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::EButtonToggle::setSelected(ENode * selected)
|
||||||
|
{
|
||||||
|
if (selected != m_pSelectedOn)
|
||||||
|
{
|
||||||
|
// 移除旧的
|
||||||
|
if (m_pSelectedOn)
|
||||||
|
{
|
||||||
|
this->removeChild(m_pSelectedOn);
|
||||||
|
}
|
||||||
|
// 添加新的
|
||||||
|
if (selected)
|
||||||
|
{
|
||||||
|
this->addChild(selected);
|
||||||
|
}
|
||||||
|
m_pSelectedOn = selected;
|
||||||
|
|
||||||
|
_updateToggle();
|
||||||
|
_updateVisiable();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::EButtonToggle::setDisabled(ENode * disabled)
|
||||||
|
{
|
||||||
|
if (disabled != m_pDisabledOn)
|
||||||
|
{
|
||||||
|
// 移除旧的
|
||||||
|
if (m_pDisabledOn)
|
||||||
|
{
|
||||||
|
this->removeChild(m_pDisabledOn);
|
||||||
|
}
|
||||||
|
// 添加新的
|
||||||
|
if (disabled)
|
||||||
|
{
|
||||||
|
this->addChild(disabled);
|
||||||
|
}
|
||||||
|
m_pDisabledOn = disabled;
|
||||||
|
|
||||||
|
_updateToggle();
|
||||||
|
_updateVisiable();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::EButtonToggle::setNormalOff(ENode * normal)
|
||||||
|
{
|
||||||
|
if (normal != m_pNormalOff)
|
||||||
|
{
|
||||||
|
// 移除旧的
|
||||||
|
if (m_pNormalOff)
|
||||||
|
{
|
||||||
|
this->removeChild(m_pNormalOff);
|
||||||
|
}
|
||||||
|
// 添加新的
|
||||||
|
if (normal)
|
||||||
|
{
|
||||||
|
this->addChild(normal);
|
||||||
|
}
|
||||||
|
m_pNormalOff = normal;
|
||||||
|
|
||||||
|
_updateToggle();
|
||||||
|
_updateVisiable();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::EButtonToggle::setMouseOverOff(ENode * mouseover)
|
||||||
|
{
|
||||||
|
if (mouseover != m_pMouseoverOff)
|
||||||
|
{
|
||||||
|
// 移除旧的
|
||||||
|
if (m_pMouseoverOff)
|
||||||
|
{
|
||||||
|
this->removeChild(m_pMouseoverOff);
|
||||||
|
}
|
||||||
|
// 添加新的
|
||||||
|
if (mouseover)
|
||||||
|
{
|
||||||
|
this->addChild(mouseover);
|
||||||
|
}
|
||||||
|
m_pMouseoverOff = mouseover;
|
||||||
|
|
||||||
|
_updateToggle();
|
||||||
|
_updateVisiable();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::EButtonToggle::setSelectedOff(ENode * selected)
|
||||||
|
{
|
||||||
|
if (selected != m_pSelectedOff)
|
||||||
|
{
|
||||||
|
// 移除旧的
|
||||||
|
if (m_pSelectedOff)
|
||||||
|
{
|
||||||
|
this->removeChild(m_pSelectedOff);
|
||||||
|
}
|
||||||
|
// 添加新的
|
||||||
|
if (selected)
|
||||||
|
{
|
||||||
|
this->addChild(selected);
|
||||||
|
}
|
||||||
|
m_pSelectedOff = selected;
|
||||||
|
|
||||||
|
_updateToggle();
|
||||||
|
_updateVisiable();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::EButtonToggle::setDisabledOff(ENode * disabled)
|
||||||
|
{
|
||||||
|
if (disabled != m_pDisabledOff)
|
||||||
|
{
|
||||||
|
// 移除旧的
|
||||||
|
if (m_pDisabledOff)
|
||||||
|
{
|
||||||
|
this->removeChild(m_pDisabledOff);
|
||||||
|
}
|
||||||
|
// 添加新的
|
||||||
|
if (disabled)
|
||||||
|
{
|
||||||
|
this->addChild(disabled);
|
||||||
|
}
|
||||||
|
m_pDisabledOff = disabled;
|
||||||
|
|
||||||
|
_updateToggle();
|
||||||
|
_updateVisiable();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::EButtonToggle::_updateToggle()
|
||||||
|
{
|
||||||
|
if (m_bToggle)
|
||||||
|
{
|
||||||
|
m_pNormal = m_pNormalOn;
|
||||||
|
m_pMouseover = m_pMouseoverOn;
|
||||||
|
m_pSelected = m_pSelectedOn;
|
||||||
|
m_pDisabled = m_pDisabledOn;
|
||||||
|
|
||||||
|
if (m_pNormalOff) m_pNormalOff->setVisiable(false);
|
||||||
|
if (m_pMouseoverOff) m_pMouseoverOff->setVisiable(false);
|
||||||
|
if (m_pSelectedOff) m_pSelectedOff->setVisiable(false);
|
||||||
|
if (m_pDisabledOff) m_pDisabledOff->setVisiable(false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_pNormal = m_pNormalOff;
|
||||||
|
m_pMouseover = m_pMouseoverOff;
|
||||||
|
m_pSelected = m_pSelectedOff;
|
||||||
|
m_pDisabled = m_pDisabledOff;
|
||||||
|
|
||||||
|
if (m_pNormalOn) m_pNormalOn->setVisiable(false);
|
||||||
|
if (m_pMouseoverOn) m_pMouseoverOn->setVisiable(false);
|
||||||
|
if (m_pSelectedOn) m_pSelectedOn->setVisiable(false);
|
||||||
|
if (m_pDisabledOn) m_pDisabledOn->setVisiable(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::EButtonToggle::_runCallback()
|
||||||
|
{
|
||||||
|
m_bToggle = !m_bToggle;
|
||||||
|
_updateToggle();
|
||||||
|
|
||||||
|
if (m_Callback)
|
||||||
|
{
|
||||||
|
m_Callback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -6,7 +6,7 @@ e2d::ETimer::ETimer()
|
||||||
: m_bRunning(false)
|
: m_bRunning(false)
|
||||||
, m_nRunTimes(0)
|
, m_nRunTimes(0)
|
||||||
, m_pParentNode(nullptr)
|
, m_pParentNode(nullptr)
|
||||||
, m_Callback([](int) {})
|
, m_Callback(nullptr)
|
||||||
, m_nInterval(0)
|
, m_nInterval(0)
|
||||||
, m_nRepeatTimes(0)
|
, m_nRepeatTimes(0)
|
||||||
, m_bAtOnce(false)
|
, m_bAtOnce(false)
|
||||||
|
|
@ -96,7 +96,10 @@ void e2d::ETimer::_callOn()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_Callback)
|
||||||
|
{
|
||||||
m_Callback(m_nRunTimes);
|
m_Callback(m_nRunTimes);
|
||||||
|
}
|
||||||
m_nRunTimes++;
|
m_nRunTimes++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
190
Easy2D/enodes.h
190
Easy2D/enodes.h
|
|
@ -8,6 +8,7 @@ class EText;
|
||||||
class ESprite;
|
class ESprite;
|
||||||
class EAction;
|
class EAction;
|
||||||
class EButton;
|
class EButton;
|
||||||
|
class EButtonToggle;
|
||||||
class EGeometry;
|
class EGeometry;
|
||||||
|
|
||||||
class ENode :
|
class ENode :
|
||||||
|
|
@ -15,6 +16,7 @@ class ENode :
|
||||||
{
|
{
|
||||||
friend EScene;
|
friend EScene;
|
||||||
friend EButton;
|
friend EButton;
|
||||||
|
friend EButtonToggle;
|
||||||
friend EGeometry;
|
friend EGeometry;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
@ -661,82 +663,210 @@ public:
|
||||||
|
|
||||||
// 创建按钮
|
// 创建按钮
|
||||||
EButton(
|
EButton(
|
||||||
ENode * normal,
|
ENode * normal, /* 普通状态 */
|
||||||
const BUTTON_CLICK_CALLBACK & callback
|
const BUTTON_CLICK_CALLBACK & callback = nullptr
|
||||||
);
|
);
|
||||||
|
|
||||||
// 创建按钮
|
// 创建按钮
|
||||||
EButton(
|
EButton(
|
||||||
ENode * normal,
|
ENode * normal, /* 普通状态 */
|
||||||
ENode * selected,
|
ENode * selected, /* 鼠标按下状态 */
|
||||||
const BUTTON_CLICK_CALLBACK & callback
|
const BUTTON_CLICK_CALLBACK & callback = nullptr
|
||||||
);
|
);
|
||||||
|
|
||||||
// 创建按钮
|
// 创建按钮
|
||||||
EButton(
|
EButton(
|
||||||
ENode * normal,
|
ENode * normal, /* 普通状态 */
|
||||||
ENode * mouseover,
|
ENode * mouseover, /* 鼠标移入状态 */
|
||||||
ENode * selected,
|
ENode * selected, /* 鼠标按下状态 */
|
||||||
const BUTTON_CLICK_CALLBACK & callback
|
const BUTTON_CLICK_CALLBACK & callback = nullptr
|
||||||
);
|
);
|
||||||
|
|
||||||
// 创建按钮
|
// 创建按钮
|
||||||
EButton(
|
EButton(
|
||||||
ENode * normal,
|
ENode * normal, /* 普通状态 */
|
||||||
ENode * mouseover,
|
ENode * mouseover, /* 鼠标移入状态 */
|
||||||
ENode * selected,
|
ENode * selected, /* 鼠标移入状态 */
|
||||||
ENode * disabled,
|
ENode * disabled, /* 按钮禁用状态 */
|
||||||
const BUTTON_CLICK_CALLBACK & callback
|
const BUTTON_CLICK_CALLBACK & callback = nullptr
|
||||||
|
);
|
||||||
|
|
||||||
|
// 获取按钮状态是启用还是禁用
|
||||||
|
bool isEnable() const;
|
||||||
|
|
||||||
|
// 设置按钮启用或禁用
|
||||||
|
void setEnable(
|
||||||
|
bool bEnable
|
||||||
);
|
);
|
||||||
|
|
||||||
// 设置一般情况下显示的按钮
|
// 设置一般情况下显示的按钮
|
||||||
void setNormal(
|
virtual void setNormal(
|
||||||
ENode * normal
|
ENode * normal
|
||||||
);
|
);
|
||||||
|
|
||||||
// 设置鼠标移入按钮时显示的按钮
|
// 设置鼠标移入按钮时显示的按钮
|
||||||
void setMouseOver(
|
virtual void setMouseOver(
|
||||||
ENode * mouseover
|
ENode * mouseover
|
||||||
);
|
);
|
||||||
|
|
||||||
// 设置鼠标选中按钮时显示的按钮
|
// 设置鼠标选中按钮时显示的按钮
|
||||||
void setSelected(
|
virtual void setSelected(
|
||||||
ENode * selected
|
ENode * selected
|
||||||
);
|
);
|
||||||
|
|
||||||
// 设置按钮被禁用时显示的按钮
|
// 设置按钮被禁用时显示的按钮
|
||||||
void setDisabled(
|
virtual void setDisabled(
|
||||||
ENode * disabled
|
ENode * disabled
|
||||||
);
|
);
|
||||||
|
|
||||||
// 设置按钮禁用
|
|
||||||
void setDisable(
|
|
||||||
bool disable
|
|
||||||
);
|
|
||||||
|
|
||||||
// 设置回调函数
|
// 设置回调函数
|
||||||
void setCallback(
|
void setCallback(
|
||||||
const BUTTON_CLICK_CALLBACK & callback
|
const BUTTON_CLICK_CALLBACK & callback
|
||||||
);
|
);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// 渲染按钮
|
enum STATUS { NORMAL, MOUSEOVER, SELECTED };
|
||||||
virtual void _callOn() override;
|
|
||||||
|
|
||||||
// 鼠标消息监听
|
// 设置按钮状态
|
||||||
void _listenerCallback();
|
virtual void _setStatus(STATUS status);
|
||||||
|
|
||||||
|
// 刷新按钮显示
|
||||||
|
virtual void _updateVisiable();
|
||||||
|
|
||||||
|
// 刷新按钮状态
|
||||||
|
virtual void _updateStatus();
|
||||||
|
|
||||||
|
// 执行按钮回调函数
|
||||||
|
virtual void _runCallback();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
enum STATUS { NORMAL, MOUSEOVER, SELECTED, DISABLED };
|
|
||||||
STATUS m_eStatus;
|
STATUS m_eStatus;
|
||||||
ENode * m_pNormal;
|
ENode * m_pNormal;
|
||||||
ENode * m_pMouseover;
|
ENode * m_pMouseover;
|
||||||
ENode * m_pSelected;
|
ENode * m_pSelected;
|
||||||
ENode * m_pDisabled;
|
ENode * m_pDisabled;
|
||||||
ENode * m_pDisplayed;
|
bool m_bEnable;
|
||||||
bool m_bIsDisable;
|
|
||||||
bool m_bIsSelected;
|
bool m_bIsSelected;
|
||||||
|
EListenerMouse * m_pListener;
|
||||||
BUTTON_CLICK_CALLBACK m_Callback;
|
BUTTON_CLICK_CALLBACK m_Callback;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class EButtonToggle :
|
||||||
|
public EButton
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// 创建一个空的开关按钮
|
||||||
|
EButtonToggle();
|
||||||
|
|
||||||
|
// 创建开关按钮
|
||||||
|
EButtonToggle(
|
||||||
|
ENode * toggleOnNormal,
|
||||||
|
ENode * toggleOffNormal,
|
||||||
|
const BUTTON_CLICK_CALLBACK & callback = nullptr
|
||||||
|
);
|
||||||
|
|
||||||
|
// 创建开关按钮
|
||||||
|
EButtonToggle(
|
||||||
|
ENode * toggleOnNormal,
|
||||||
|
ENode * toggleOffNormal,
|
||||||
|
ENode * toggleOnSelected,
|
||||||
|
ENode * toggleOffSelected,
|
||||||
|
const BUTTON_CLICK_CALLBACK & callback = nullptr
|
||||||
|
);
|
||||||
|
|
||||||
|
// 创建开关按钮
|
||||||
|
EButtonToggle(
|
||||||
|
ENode * toggleOnNormal,
|
||||||
|
ENode * toggleOffNormal,
|
||||||
|
ENode * toggleOnMouseOver,
|
||||||
|
ENode * toggleOffMouseOver,
|
||||||
|
ENode * toggleOnSelected,
|
||||||
|
ENode * toggleOffSelected,
|
||||||
|
const BUTTON_CLICK_CALLBACK & callback = nullptr
|
||||||
|
);
|
||||||
|
|
||||||
|
// 创建开关按钮
|
||||||
|
EButtonToggle(
|
||||||
|
ENode * toggleOnNormal,
|
||||||
|
ENode * toggleOffNormal,
|
||||||
|
ENode * toggleOnMouseOver,
|
||||||
|
ENode * toggleOffMouseOver,
|
||||||
|
ENode * toggleOnSelected,
|
||||||
|
ENode * toggleOffSelected,
|
||||||
|
ENode * toggleOnDisabled,
|
||||||
|
ENode * toggleOffDisabled,
|
||||||
|
const BUTTON_CLICK_CALLBACK & callback = nullptr
|
||||||
|
);
|
||||||
|
|
||||||
|
// 切换开关状态
|
||||||
|
void toggle();
|
||||||
|
|
||||||
|
// 获取开关状态
|
||||||
|
bool isToggleOn() const;
|
||||||
|
|
||||||
|
// 打开或关闭开关
|
||||||
|
void setToggle(
|
||||||
|
bool toggle
|
||||||
|
);
|
||||||
|
|
||||||
|
// 设置按钮打开状态下显示的按钮
|
||||||
|
virtual void setNormal(
|
||||||
|
ENode * normal
|
||||||
|
) override;
|
||||||
|
|
||||||
|
// 设置按钮打开状态下,鼠标移入按钮时显示的按钮
|
||||||
|
virtual void setMouseOver(
|
||||||
|
ENode * mouseover
|
||||||
|
) override;
|
||||||
|
|
||||||
|
// 设置按钮打开状态下,鼠标选中按钮时显示的按钮
|
||||||
|
virtual void setSelected(
|
||||||
|
ENode * selected
|
||||||
|
) override;
|
||||||
|
|
||||||
|
// 设置按钮打开状态下,被禁用时显示的按钮
|
||||||
|
virtual void setDisabled(
|
||||||
|
ENode * disabled
|
||||||
|
) override;
|
||||||
|
|
||||||
|
// 设置按钮关闭状态下显示的按钮
|
||||||
|
void setNormalOff(
|
||||||
|
ENode * normal
|
||||||
|
);
|
||||||
|
|
||||||
|
// 设置按钮关闭状态下,鼠标移入按钮时显示的按钮
|
||||||
|
void setMouseOverOff(
|
||||||
|
ENode * mouseover
|
||||||
|
);
|
||||||
|
|
||||||
|
// 设置按钮关闭状态下,鼠标选中按钮时显示的按钮
|
||||||
|
void setSelectedOff(
|
||||||
|
ENode * selected
|
||||||
|
);
|
||||||
|
|
||||||
|
// 设置按钮关闭状态下,按钮被禁用时显示的按钮
|
||||||
|
void setDisabledOff(
|
||||||
|
ENode * disabled
|
||||||
|
);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// 刷新按钮开关
|
||||||
|
virtual void _updateToggle();
|
||||||
|
|
||||||
|
// 执行按钮回调函数
|
||||||
|
virtual void _runCallback() override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
ENode * m_pNormalOn;
|
||||||
|
ENode * m_pNormalOff;
|
||||||
|
ENode * m_pMouseoverOn;
|
||||||
|
ENode * m_pMouseoverOff;
|
||||||
|
ENode * m_pSelectedOn;
|
||||||
|
ENode * m_pSelectedOff;
|
||||||
|
ENode * m_pDisabledOn;
|
||||||
|
ENode * m_pDisabledOff;
|
||||||
|
bool m_bToggle;
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -140,10 +140,10 @@ typedef MOUSE_CLICK_LISTENER_CALLBACK MOUSE_DBLCLK_LISTENER_CALLBACK;
|
||||||
// 鼠标拖动消息监听回调函数(参数为拖动前位置和拖动后位置)
|
// 鼠标拖动消息监听回调函数(参数为拖动前位置和拖动后位置)
|
||||||
typedef std::function<void(EPoint begin, EPoint end)> MOUSE_DRAG_LISTENER_CALLBACK;
|
typedef std::function<void(EPoint begin, EPoint end)> MOUSE_DRAG_LISTENER_CALLBACK;
|
||||||
|
|
||||||
// 物理世界消息监听器回调函数(参数:主动方、被动方、两方关系)
|
// 物理世界消息监听器回调函数
|
||||||
typedef std::function<void(ENode *active, ENode *passive, int relation)> PHYSICS_LISTENER_CALLBACK;
|
typedef std::function<void()> PHYSICS_LISTENER_CALLBACK;
|
||||||
|
|
||||||
// 碰撞消息监听器回调函数(参数:主动方、被动方)
|
// 碰撞消息监听器回调函数
|
||||||
typedef std::function<void(ENode *active, ENode *passive)> COLLISION_LISTENER_CALLBACK;
|
typedef PHYSICS_LISTENER_CALLBACK COLLISION_LISTENER_CALLBACK;
|
||||||
|
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue