123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- /*
- GWEN
- Copyright (c) 2010 Facepunch Studios
- See license in Gwen.h
- */
- #include <math.h>
- #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 = 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 );
- }
|