Complete main menu without event bindings.

This commit is contained in:
2015-09-25 01:26:47 +02:00
parent b83de44715
commit 5f1963b8bc
40 changed files with 627 additions and 496 deletions
+62 -17
View File
@@ -2,6 +2,10 @@
#define GUI_BUTTON_H__
#include "GUI/TextureFrame.h"
#include "GUI/EButtonEnter.h"
#include "GUI/EButtonLeave.h"
#include "GUI/EButtonPress.h"
#include "GUI/EButtonRelease.h"
#include "Core/EMouseMove.h"
#include "Core/EMousePress.h"
#include "Core/EMouseRelease.h"
@@ -22,19 +26,34 @@ public:
EVENT_SUBSCRIBE_MEMBER(m_EMouseRelease, &Button::OnMouseRelease);
}
std::string TextureHover;
std::string TexturePressed;
std::string TextureReleased;
void SetTextureHover(std::string resourceName)
{
m_TextureHover = resourceName;
}
void SetTextureReleased(std::string resourceName)
{
m_TextureReleased = resourceName;
SetTexture(resourceName);
}
void SetTexturePressed(std::string resourceName)
{
m_TexturePressed = resourceName;
}
void Draw(RenderQueueCollection& rq) override
{
if (m_Texture == nullptr && !TextureReleased.empty()) {
SetTexture(TextureReleased);
if (m_Texture == nullptr && !m_TextureReleased.empty()) {
SetTexture(m_TextureReleased);
}
TextureFrame::Draw(rq);
}
virtual void OnEnter() { }
virtual void OnLeave() { }
virtual void OnPress() { }
virtual void OnRelease() { }
protected:
bool m_MouseIsOver = false;
bool m_IsDown = false;
@@ -43,15 +62,25 @@ protected:
{
bool isOver = Rectangle::Intersects(AbsoluteRectangle(), Rectangle(event.X, event.Y, 1, 1));
if (isOver && !m_MouseIsOver) { // Enter
LOG_INFO("%s mouse enter", m_Name.c_str());
if (!m_IsDown) {
SetTexture(TextureHover);
if (!m_TextureHover.empty()) {
SetTexture(m_TextureHover);
}
}
OnEnter();
Events::ButtonEnter e;
e.FrameName = m_Name;
EventBroker->Publish(e);
} else if (!isOver && m_MouseIsOver) { // Leave
LOG_INFO("%s mouse left", m_Name.c_str());
if (!m_IsDown) {
SetTexture(TextureReleased);
if (!m_TextureReleased.empty()) {
SetTexture(m_TextureReleased);
}
}
OnLeave();
Events::ButtonLeave e;
e.FrameName = m_Name;
EventBroker->Publish(e);
}
m_MouseIsOver = isOver;
@@ -63,13 +92,16 @@ protected:
return false;
}
if (!TexturePressed.empty()) {
SetTexture(TexturePressed);
if (!m_TexturePressed.empty()) {
SetTexture(m_TexturePressed);
}
LOG_INFO("%s mouse pressed", m_Name.c_str());
m_IsDown = true;
OnPress();
Events::ButtonPress e;
e.FrameName = m_Name;
e.Button = this;
EventBroker->Publish(e);
return true;
}
@@ -80,13 +112,22 @@ protected:
return false;
}
if (!TextureReleased.empty()) {
SetTexture(TextureReleased);
if (m_MouseIsOver) {
if (!m_TextureHover.empty()) {
SetTexture(m_TextureHover);
}
} else {
if (!m_TextureReleased.empty()) {
SetTexture(m_TextureReleased);
}
}
LOG_INFO("%s mouse released", m_Name.c_str());
m_IsDown = false;
OnRelease();
Events::ButtonRelease e;
e.FrameName = m_Name;
e.Button = this;
EventBroker->Publish(e);
return true;
}
@@ -95,6 +136,10 @@ private:
EventRelay<Frame, Events::MouseMove> m_EMouseMove;
EventRelay<Frame, Events::MousePress> m_EMousePress;
EventRelay<Frame, Events::MouseRelease> m_EMouseRelease;
std::string m_TextureHover;
std::string m_TexturePressed;
std::string m_TextureReleased;
};
}