00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include "Render/Render.h"
00012 #include "Render/Font.h"
00013 #include "Interface/Slider.h"
00014
00015
00016 KSlider::KSlider( KWin* pFather, KFPt& Pos, KFPt& Size, KInterface* pInterface,bool bHorizontal,KFPt& SizeSliderBar)
00017 :KWin( pFather, Pos, Size, pInterface, 0, "" )
00018 {
00019 m_bHorizontal = bHorizontal ;
00020 m_SizeSliderBar = SizeSliderBar ;
00021 m_bClicked = false;
00022 m_fPosSlider = 0.0f ;
00023 m_fAbsolutePosSlider = 0.0f ;
00024 SetRange(0.0f,100.0f,1.0f) ;
00025 }
00026
00027
00028 KSlider::~KSlider()
00029 {
00030 }
00031
00032
00033 void KSlider::Display()
00034 {
00035 u8 Fade = u8( 255.0f * GetFade() );
00036 DrawQuad( m_Pos.x, m_Pos.y, m_Size.x, m_Size.y, KSHADER_NO, KRGBA( 56, 91, 149, Fade ),KRGB_BLACK, KRM_MODULATE );
00037
00038 if(m_bHorizontal)
00039 {
00040 float fPosX = m_Pos.x + (m_Size.x * m_fPosSlider) ;
00041 if(fPosX > (m_Pos.x + m_Size.x - m_SizeSliderBar.x))
00042 fPosX = m_Pos.x + m_Size.x - m_SizeSliderBar.x ;
00043
00044 DrawQuad(fPosX , m_Pos.y - (m_SizeSliderBar.y - m_Size.y) / 2 , m_SizeSliderBar.x, m_SizeSliderBar.y, KSHADER_NO, KRGBA( 5, 134, 254, Fade ),KRGB_BLACK, KRM_MODULATE );
00045 }
00046 else
00047 {
00048 float fPosY = m_Pos.y + (m_Size.y * m_fPosSlider) ;
00049 if(fPosY > (m_Pos.y + m_Size.y - m_SizeSliderBar.y))
00050 fPosY = m_Pos.y + m_Size.y - m_SizeSliderBar.y ;
00051
00052 DrawQuad( m_Pos.x - (m_SizeSliderBar.x - m_Size.x) / 2 , fPosY , m_SizeSliderBar.x, m_SizeSliderBar.y, KSHADER_NO, KRGBA( 5, 134, 254, Fade ),KRGB_BLACK, KRM_MODULATE );
00053 }
00054 }
00055
00056
00057 void KSlider::Manage()
00058 {
00059 KFPt mousePos = GetMousePos() ;
00060 if((m_bHorizontal) && (m_bClicked))
00061 {
00062 m_fPosSlider = (mousePos.x - m_Pos.x) / m_Size.x ;
00063 }
00064 if((!m_bHorizontal) && (m_bClicked))
00065 {
00066 m_fPosSlider = (mousePos.y - m_Pos.y) / m_Size.y ;
00067 }
00068
00069 if(m_fStep > 0)
00070 {
00071 m_fAbsolutePosSlider = ((int)(((m_fRangeMax - m_fRangeMin) * m_fPosSlider) / m_fStep)) * m_fStep ;
00072 m_fPosSlider = m_fAbsolutePosSlider / (m_fRangeMax - m_fRangeMin) ;
00073 }
00074 else
00075 {
00076 m_fAbsolutePosSlider = 0.0f ;
00077 m_fPosSlider = m_fRangeMin ;
00078 }
00079 if(m_fPosSlider <= 0.01f)
00080 {
00081 m_fPosSlider = 0.0f ;
00082 m_fAbsolutePosSlider = m_fRangeMin ;
00083 }
00084 if(m_fPosSlider >= 0.99f)
00085 {
00086 m_fPosSlider = 1.0f ;
00087 m_fAbsolutePosSlider = m_fRangeMax ;
00088 }
00089 }
00090
00091
00092 bool KSlider::OnMouseEvent( KWMOUSEEVENT Event, u32 Param )
00093 {
00094 if( m_bEnabled )
00095 {
00096 if( IsInside( GetMousePos() ) )
00097 {
00098 if(( Event == KWME_LDOWN ) && (!m_bClicked))
00099 {
00100 m_bClicked = true;
00101 }
00102 }
00103 }
00104 if( Event == KWME_LUP )
00105 {
00106 m_bClicked = false;
00107 }
00108 return true ;
00109 }
00110
00111
00112 void KSlider::SetRange(float fRangeMin,float fRangeMax,float fStep)
00113 {
00114 if((fRangeMin > fRangeMax) || (fStep > (fRangeMax - fRangeMin)))
00115 return ;
00116
00117 if((fRangeMin == m_fRangeMin) && (fRangeMax == m_fRangeMax) && (fStep == m_fStep))
00118 return ;
00119
00120 if(fStep <= 0)
00121 fStep = 0.0f ;
00122
00123 m_fRangeMax = fRangeMax ;
00124 m_fRangeMin = fRangeMin ;
00125 m_fStep = fStep ;
00126
00127 m_fPosSlider = 0.0f ;
00128 m_fAbsolutePosSlider = m_fRangeMin ;
00129 }
00130
00131
00132 void KSlider::Load()
00133 {
00134
00135 }
00136
00137
00138 void KSlider::Unload()
00139 {
00140 m_bClicked = false;
00141 }