Small Scroll Bar Example

BlitzMax Forums/BlitzMax Programming/Small Scroll Bar Example

Ahhhhhhhhhhhhhhhhhhhhh!!! Help me! I'm slowly going mad. I'm trying to sort out line 35-ish. How do you translate the mouseY() into the value? Ahhh!! Banana crayon! I'm going insane!

Strict

Type TVScroll
	Field x , y , w , h
	
	Field swp# 		' How much percentage dose the scroll bar take up
	Field svp# 		' Scroll bars percantage value
	Field spi# = 1 	' Percentage increase
	
	Field totr#		' Total range
	Field mouseHitY#
	Field mouseHitSPV#
	
	Field view_x,view_y,view_w,view_h,viewPortEnabled=0
	
	Method Render()
				
		Local height=((swp/100.0)*(h))		
		SetColor 100, 100, 100
		DrawRect x , y , w , h+height
		SetColor 255 , 255 , 255				
		Local v=(((svp/100.0) * h))		
		DrawRect x,y+v,w,height
		
		If MouseDown(1)
			If mousehit1 And mouseHitY=0 And mousein(x,y+v,w,height)
				mouseHitY=MouseY()
				mouseHitSPV=svp
			EndIf
		Else
			mouseHitY=0
			mouseHitSPV=0
		EndIf
		If mouseHitY And MouseDown(1)
			mouseHitSPV = MouseY()-mouseHitY
			svp=mouseHitSPV 
			If svp < 0 Then svp=0
			If svp > 100 Then svp=100
		EndIf		
	End Method
	
	Method MoveUp()
		svp:+ spi
		If svp > 100 Then svp = 100 ' Simple range checks
	End Method
	
	Method MoveDown()
		svp:- spi
		If svp < 0 Then svp = 0
	End Method
	
	Method GetRangeValue#()
		Return (svp / 100.0) * totr ' Get the percentage value of a max range
	End Method
	
	Method SetRange(_range#)
		totr = _range
	End Method
	
	Method enableViewPort()
		SetViewport view_x,view_y,view_w,view_h
	End Method

	Method disableViewPort()
		SetViewport 0,0,GraphicsWidth(),GraphicsHeight()
	End Method	
			
	Method setScrollBarViewPort(x1,y1,w1,h1)
		view_x=x1
		view_y=y1
		view_w=w1
		view_h=h1
	End Method
	
	Method setCoords(x1,y1,w1,h1, swp1,totr1)
		x=x1;y=y1;w=w1;h=h1;totr=totr1
		swp=swp1
		If swp1=-1
			swp=(100.0/totr)
		EndIf
	End Method
	
	Method mouseIn(x1,y1,w1,h1)
		Local mx=MouseX()
		Local my=MouseY()	
		If mx>x1 And mx<x1+w1
			If my>y1 And my<y1+h1
				Return True
			EndIf
		EndIf	
		Return False
	End Method	
End Type



Graphics 800 , 600

Global mousehit1=0

Global sv:TVScroll = New TVScroll
	sv.setCoords(520,10,14,250,15,500)
	sv.setScrollBarViewPort(10,10,520,250)



While Not KeyDown(KEY_ESCAPE)	
	Cls
	mousehit1=MouseHit(1)
		
	sv.render()
	
	sv.enableViewPort()
	DrawText "Value: "+sv.GetRangeValue(), 10, 10-sv.GetRangeValue()
	DrawText "MouseHitY: "+sv.mouseHitY,10,20-sv.GetRangeValue()
	DrawText "MouseHitSPV: "+sv.mouseHitSPV,10,40-sv.GetRangeValue()
	DrawText "Calc: "+sv.svp,10,60-sv.GetRangeValue()
	For Local i=1 To 20
		DrawText "Information here",10,(60+(20*i))-sv.GetRangeValue()
	Next
	sv.disableViewPort()
	
	DrawText "HELLO",400,400
	
	If KeyDown(KEY_DOWN) Then sv.MoveUp()
	If KeyDown(KEY_UP) Then sv.MoveDown()
	
	Flip
	
Wend