Complete main menu without event bindings.
This commit is contained in:
@@ -0,0 +1,120 @@
|
||||
#ifndef GUI_SLIDER_H__
|
||||
#define GUI_SLIDER_H__
|
||||
|
||||
#include "GUI/TextureFrame.h"
|
||||
#include "GUI/Button.h"
|
||||
#include "GUI/EButtonPress.h"
|
||||
#include "GUI/EButtonRelease.h"
|
||||
#include "GUI/ESliderUpdate.h"
|
||||
#include "Core/EMouseMove.h"
|
||||
|
||||
namespace dd
|
||||
{
|
||||
namespace GUI
|
||||
{
|
||||
|
||||
class Slider : public TextureFrame
|
||||
{
|
||||
public:
|
||||
Slider(Frame* parent, std::string name)
|
||||
: TextureFrame(parent, name)
|
||||
{
|
||||
m_SliderButton = new GUI::Button(this, "SliderButton");
|
||||
m_SliderButton->DisableScissor();
|
||||
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EButtonPress, &Slider::OnButtonPress);
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EButtonRelease, &Slider::OnButtonRelease);
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EMouseMove, &Slider::OnMouseMove);
|
||||
}
|
||||
|
||||
float Percentage() const { return m_Percentage; }
|
||||
void SetPercentage(const float percentage) { m_Percentage = percentage; }
|
||||
|
||||
void SetTextureHover(std::string resourceName)
|
||||
{
|
||||
m_SliderButton->SetTextureHover(resourceName);
|
||||
}
|
||||
void SetTextureReleased(std::string resourceName)
|
||||
{
|
||||
m_SliderButton->SetTextureReleased(resourceName);
|
||||
}
|
||||
void SetTexturePressed(std::string resourceName)
|
||||
{
|
||||
m_SliderButton->SetTexturePressed(resourceName);
|
||||
}
|
||||
|
||||
void CenterSlider()
|
||||
{
|
||||
m_SliderButton->Y = (Height / 2) - (m_SliderButton->Height / 2);
|
||||
}
|
||||
|
||||
~Slider()
|
||||
{
|
||||
if (m_SliderButton != nullptr) {
|
||||
delete m_SliderButton;
|
||||
m_SliderButton = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
virtual void Update(double dt) override
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private:
|
||||
Button* m_SliderButton = nullptr;
|
||||
bool m_IsGrabbed = false;
|
||||
float m_Percentage = 0.f;
|
||||
|
||||
EventRelay<Frame, Events::ButtonPress> m_EButtonPress;
|
||||
EventRelay<Frame, Events::ButtonRelease> m_EButtonRelease;
|
||||
EventRelay<Frame, Events::MouseMove> m_EMouseMove;
|
||||
|
||||
virtual bool OnButtonPress(const Events::ButtonPress& event)
|
||||
{
|
||||
if (event.Button == m_SliderButton) {
|
||||
m_IsGrabbed = true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
virtual bool OnButtonRelease(const Events::ButtonRelease& event)
|
||||
{
|
||||
if (event.Button == m_SliderButton) {
|
||||
m_IsGrabbed = false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
virtual bool OnMouseMove(const Events::MouseMove& event)
|
||||
{
|
||||
if (m_IsGrabbed) {
|
||||
// Set horizontal position
|
||||
m_SliderButton->X += event.DeltaX;
|
||||
if (m_SliderButton->Left() < Left()) {
|
||||
m_SliderButton->SetLeft(Left());
|
||||
} else if (m_SliderButton->Right() > Right()) {
|
||||
m_SliderButton->SetRight(Right());
|
||||
}
|
||||
|
||||
// Update percentage
|
||||
float newPercentage = m_SliderButton->X / (float)(Width - m_SliderButton->Width);
|
||||
Events::SliderUpdate e;
|
||||
e.FrameName = Name();
|
||||
e.Slider = this;
|
||||
e.Percentage = newPercentage;
|
||||
e.DeltaPercentage = newPercentage - m_Percentage;
|
||||
EventBroker->Publish(e);
|
||||
m_Percentage = newPercentage;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user