Post by Danilo on Sept 5, 2019 12:25:11 GMT
Small test for making a Slider view:
Run this example ONLINE
Run this example ONLINE
#import "<std>"
#import "<mojo>"
#import "<mojox>"
Using std..
Using mojo..
Using mojox..
Class MyWindow Extends Window
Method New()
Super.New( "Slider Demo",900,450,WindowFlags.Resizable )
Local label1:=New Label( "R: 50" )
Local slider1:=New Slider( 0, 255 )
slider1.Value = 50
slider1.Style.BackgroundColor = Color.Red
slider1.ValueChanged = Lambda( value:Int )
label1.Text = "R: "+String( value )
End
Local label2:=New Label( "G: 100" )
Local slider2:=New Slider( 0, 255 )
slider2.Value = 100
slider2.Style.BackgroundColor = Color.Green
slider2.ValueChanged = Lambda( value:Int )
label2.Text = "G: "+String( value )
End
Local label3:=New Label( "B: 150" )
Local slider3:=New Slider( 0, 255 )
slider3.Value = 150
slider3.Style.BackgroundColor = Color.Blue
slider3.ValueChanged = Lambda( value:Int )
label3.Text = "B: "+String( value )
End
Local label4:=New Label( "Vol:~n20" )
label4.TextGravity = New Vec2f(0.5,0.5)
Local slider4:=New Slider( 0, 100, Axis.Y )
slider4.Value = 100-20
slider4.ValueChanged = Lambda( value:Int )
label4.Text = "Vol:~n"+String( 100-value )
End
Local mainView:=New DockingView( )
Local combo1:=CombineViews(slider1,label1,"right",70)
Local combo2:=CombineViews(slider2,label2,"right",70)
Local combo3:=CombineViews(slider3,label3,"right",70)
mainView.AddView(combo1,"top")
mainView.AddView(combo2,"top")
mainView.AddView(combo3,"top")
mainView.AddView(New Spacer(5),"top")
mainView.AddView(New Slider( 0,100),"top")
mainView.AddView(New Spacer(5),"top")
Local combo4:=CombineViews(slider4,label4,"bottom",50)
mainView.ContentView = New Label()
mainView.AddView(combo4,"left")
For Local i := 0 To 6
Local _slider:=New Slider( 0, 1000, Axis.Y )
_slider.Value = Rnd( 1000 )
_slider.SizeMultiplicator = 4.0
Local _label:=New Label( String(1000-_slider.Value) )
_label.TextGravity = New Vec2f(0.5,0.5)
_slider.ValueChanged = Lambda( value:Int )
_label.Text = String( 1000-value )
End
mainView.AddView( CombineViews(_slider,_label,"bottom",50), "right" )
mainView.AddView( New Spacer(3), "right" )
Next
mainView.AddView( New Spacer(40), "left")
For Local i := 0 To 5
mainView.AddView( New Spacer(3), "left")
Local _slider := New Slider(0,255,Axis.Y)
_slider.Value = Rnd(255)
_slider.SizeMultiplicator = 1+i
mainView.AddView( _slider, "left")
Next
ContentView=mainView
End
Method CombineViews:DockingView( mainView:View, dockView:View, side:String="right", size:String="50%", resizable:Bool=False )
Local dock:=New DockingView()
dock.ContentView = mainView
dock.AddView(dockView,side,size,resizable)
Return dock
End
End
Class Slider Extends ScrollBar
Method New( axis:Axis = std.geom.Axis.X )
Self.New( 0, 100, axis )
End
Method New( minValue:Int=0, maxValue:Int=100, axis:Axis=std.geom.Axis.X )
Super.New( axis )
Self.Minimum = minValue
Self.Maximum = maxValue
Self.Value = minValue
_sizeMultiplicator = 1.0
Local _style:Style = New Style("Slider",GetStyle("ScrollBar"))
Style = _style.Copy()
End
Protected
Method OnMeasure:Vec2i() Override
Return _knobStyle.Bounds.Size * New Vec2i(_sizeMultiplicator,_sizeMultiplicator)
End
Method OnLayout() Override
Local range:=_maximum-_minimum+1
Select _axis
Case Axis.X
Local sz:=range ? Max( Width/range,14 ) Else Width
Local pos:=_maximum>_minimum ? (_value-_minimum)*(Width-sz)/(_maximum-_minimum) Else 0
_knobRect=New Recti( pos+2,0,pos+12,Height )
Case Axis.Y
Local sz:=range ? Max( Height/range,14 ) Else Height
Local pos:=_maximum>_minimum ? (_value-_minimum)*(Height-sz)/(_maximum-_minimum) Else 0
_knobRect=New Recti( 0,pos+2,Width,pos+12 )
End
End
Property SizeMultiplicator:Float()
Return _sizeMultiplicator
Setter ( value:Float )
_sizeMultiplicator = value
RequestRender()
End
Private
Field _sizeMultiplicator:Float
End
Class Spacer Extends View
Method New( spaceXY:Int=1 )
Self.New(spaceXY,spaceXY)
End
Method New( spaceX:Int, spaceY:Int )
Super.New()
_spaceX = spaceX
_spaceY = spaceY
End
Method OnMeasure:Vec2i() Override
Return New Vec2i(_spaceX,_spaceY)
End
Private
Field _spaceX:Int
Field _spaceY:Int
End
Function Main()
New AppInstance
New MyWindow
App.Run()
End