103 lines
1.7 KiB
C++
103 lines
1.7 KiB
C++
/*
|
|
GWEN
|
|
Copyright (c) 2010 Facepunch Studios
|
|
See license in Gwen.h
|
|
*/
|
|
|
|
#include <math.h>
|
|
#include <cmath>
|
|
#include "Gwen/Controls/Slider.h"
|
|
|
|
using namespace Gwen;
|
|
using namespace Gwen::Controls;
|
|
using namespace Gwen::ControlsInternal;
|
|
|
|
GWEN_CONTROL_CONSTRUCTOR(SliderBar)
|
|
{
|
|
SetTarget(this);
|
|
RestrictToParent(true);
|
|
}
|
|
|
|
void SliderBar::Render(Skin::Base* skin)
|
|
{
|
|
skin->DrawButton(this, m_bDepressed, IsHovered());
|
|
}
|
|
|
|
Slider::Slider(Controls::Base* pParent) : BaseClass(pParent)
|
|
{
|
|
SetBounds(Gwen::Rect(0, 0, 32, 128));
|
|
|
|
m_SliderBar = new SliderBar(this);
|
|
m_SliderBar->onDragged.Add(this, &Slider::OnMoved);
|
|
|
|
m_fMin = 0.0f;
|
|
m_fMax = 1.0f;
|
|
|
|
m_bClampToNotches = false;
|
|
m_iNumNotches = 5;
|
|
m_fValue = 0.0f;
|
|
|
|
SetTabable(true);
|
|
}
|
|
|
|
void Slider::OnMoved(Controls::Base* /*control*/)
|
|
{
|
|
SetValueInternal(CalculateValue());
|
|
}
|
|
|
|
void Slider::Layout(Skin::Base* skin)
|
|
{
|
|
BaseClass::Layout(skin);
|
|
}
|
|
|
|
float Slider::CalculateValue()
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
void Slider::SetValue(float val, bool /*forceUpdate*/)
|
|
{
|
|
if (val < m_fMin) val = m_fMin;
|
|
if (val > m_fMax) val = m_fMax;
|
|
// Normalize Value
|
|
val = (val - m_fMin) / (m_fMax - m_fMin);
|
|
SetValueInternal(val);
|
|
Redraw();
|
|
}
|
|
|
|
void Slider::SetValueInternal(float val)
|
|
{
|
|
if (m_bClampToNotches)
|
|
{
|
|
val = std::floor((val * (float)m_iNumNotches) + 0.5f);
|
|
val /= (float)m_iNumNotches;
|
|
}
|
|
|
|
if (m_fValue != val)
|
|
{
|
|
m_fValue = val;
|
|
onValueChanged.Call(this);
|
|
}
|
|
|
|
UpdateBarFromValue();
|
|
}
|
|
|
|
float Slider::GetValue()
|
|
{
|
|
return m_fMin + (m_fValue * (m_fMax - m_fMin));
|
|
}
|
|
|
|
void Slider::SetRange(float fMin, float fMax)
|
|
{
|
|
m_fMin = fMin;
|
|
m_fMax = fMax;
|
|
}
|
|
|
|
void Slider::RenderFocus(Gwen::Skin::Base* skin)
|
|
{
|
|
if (Gwen::KeyboardFocus != this) return;
|
|
if (!IsTabable()) return;
|
|
|
|
skin->DrawKeyboardHighlight(this, GetRenderBounds(), 0);
|
|
}
|