Changeset View
Changeset View
Standalone View
Standalone View
source/gui/ObjectTypes/CSlider.cpp
Show All 21 Lines | |||||
#include "gui/CGUI.h" | #include "gui/CGUI.h" | ||||
#include "maths/MathUtil.h" | #include "maths/MathUtil.h" | ||||
const CStr CSlider::EventNameValueChange = "ValueChange"; | const CStr CSlider::EventNameValueChange = "ValueChange"; | ||||
CSlider::CSlider(CGUI& pGUI) | CSlider::CSlider(CGUI& pGUI) | ||||
: IGUIObject(pGUI), | : IGUIObject(pGUI), | ||||
IGUIButtonBehavior(*static_cast<IGUIObject*>(this)), | IGUIButtonBehavior(*static_cast<IGUIObject*>(this)), | ||||
m_ButtonSide(), | m_ButtonSide(this, "button_width"), | ||||
m_MaxValue(), | m_MaxValue(this, "max_value"), | ||||
m_MinValue(), | m_MinValue(this, "min_value"), | ||||
m_Sprite(), | m_Sprite(this, "sprite"), | ||||
m_SpriteBar(), | m_SpriteBar(this, "sprite_bar"), | ||||
m_Value() | m_Value(this, "value") | ||||
{ | { | ||||
RegisterSetting("button_width", m_ButtonSide); | m_Value.Set(Clamp<float>(m_Value, m_MinValue, m_MaxValue), false); | ||||
RegisterSetting("max_value", m_MaxValue); | |||||
RegisterSetting("min_value", m_MinValue); | |||||
RegisterSetting("sprite", m_Sprite); | |||||
RegisterSetting("sprite_bar", m_SpriteBar); | |||||
RegisterSetting("value", m_Value); | |||||
m_Value = Clamp(m_Value, m_MinValue, m_MaxValue); | |||||
} | } | ||||
CSlider::~CSlider() | CSlider::~CSlider() | ||||
{ | { | ||||
} | } | ||||
void CSlider::ResetStates() | void CSlider::ResetStates() | ||||
{ | { | ||||
IGUIObject::ResetStates(); | IGUIObject::ResetStates(); | ||||
IGUIButtonBehavior::ResetStates(); | IGUIButtonBehavior::ResetStates(); | ||||
} | } | ||||
float CSlider::GetSliderRatio() const | float CSlider::GetSliderRatio() const | ||||
{ | { | ||||
return (m_MaxValue - m_MinValue) / (m_CachedActualSize.GetWidth() - m_ButtonSide); | return (m_MaxValue - m_MinValue) / (m_CachedActualSize.GetWidth() - m_ButtonSide); | ||||
} | } | ||||
void CSlider::IncrementallyChangeValue(const float difference) | void CSlider::IncrementallyChangeValue(const float difference) | ||||
{ | { | ||||
m_Value = Clamp(m_Value + difference, m_MinValue, m_MaxValue); | m_Value.Set(Clamp<float>(m_Value + difference, m_MinValue, m_MaxValue), true); | ||||
UpdateValue(); | UpdateValue(); | ||||
} | } | ||||
void CSlider::HandleMessage(SGUIMessage& Message) | void CSlider::HandleMessage(SGUIMessage& Message) | ||||
{ | { | ||||
IGUIObject::HandleMessage(Message); | IGUIObject::HandleMessage(Message); | ||||
IGUIButtonBehavior::HandleMessage(Message); | IGUIButtonBehavior::HandleMessage(Message); | ||||
switch (Message.type) | switch (Message.type) | ||||
{ | { | ||||
/* | |||||
case GUIM_SETTINGS_UPDATED: | case GUIM_SETTINGS_UPDATED: | ||||
{ | { | ||||
m_Value = Clamp(m_Value, m_MinValue, m_MaxValue); | m_Value.Set(Clamp<float>(m_Value, m_MinValue, m_MaxValue), true); | ||||
break; | break; | ||||
} | } | ||||
*/ | |||||
case GUIM_MOUSE_WHEEL_DOWN: | case GUIM_MOUSE_WHEEL_DOWN: | ||||
{ | { | ||||
if (m_Pressed) | if (m_Pressed) | ||||
break; | break; | ||||
IncrementallyChangeValue(-0.01f); | IncrementallyChangeValue(-0.01f); | ||||
break; | break; | ||||
} | } | ||||
case GUIM_MOUSE_WHEEL_UP: | case GUIM_MOUSE_WHEEL_UP: | ||||
Show All 26 Lines | void CSlider::Draw() | ||||
slider_line.right -= m_ButtonSide / 2.0f; | slider_line.right -= m_ButtonSide / 2.0f; | ||||
float bz = GetBufferedZ(); | float bz = GetBufferedZ(); | ||||
m_pGUI.DrawSprite(m_SpriteBar, bz, slider_line); | m_pGUI.DrawSprite(m_SpriteBar, bz, slider_line); | ||||
m_pGUI.DrawSprite(m_Sprite, bz, GetButtonRect()); | m_pGUI.DrawSprite(m_Sprite, bz, GetButtonRect()); | ||||
} | } | ||||
void CSlider::UpdateValue() | void CSlider::UpdateValue() | ||||
{ | { | ||||
SetSetting<float>("value", m_Value, true); | |||||
ScriptEvent(EventNameValueChange); | ScriptEvent(EventNameValueChange); | ||||
} | } | ||||
CRect CSlider::GetButtonRect() const | CRect CSlider::GetButtonRect() const | ||||
{ | { | ||||
float ratio = m_MaxValue > m_MinValue ? (m_Value - m_MinValue) / (m_MaxValue - m_MinValue) : 0.0f; | float ratio = m_MaxValue > m_MinValue ? (m_Value - m_MinValue) / (m_MaxValue - m_MinValue) : 0.0f; | ||||
float x = m_CachedActualSize.left + ratio * (m_CachedActualSize.GetWidth() - m_ButtonSide); | float x = m_CachedActualSize.left + ratio * (m_CachedActualSize.GetWidth() - m_ButtonSide); | ||||
float y = m_CachedActualSize.top + (m_CachedActualSize.GetHeight() - m_ButtonSide) / 2.0; | float y = m_CachedActualSize.top + (m_CachedActualSize.GetHeight() - m_ButtonSide) / 2.0; | ||||
return CRect(x, y, x + m_ButtonSide, y + m_ButtonSide); | return CRect(x, y, x + m_ButtonSide, y + m_ButtonSide); | ||||
} | } |
Wildfire Games · Phabricator