Code archives/Miscellaneous/TVUmeter
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
| self-contained and eventhooked gadget (no globals and manual updating required) that shows user-triggered action in VUmeter fashion. Can be horizontal or vertical, colors can be changed, attack/decay-rates can be changed, and a peak-reminder can be shown. It's basically the meterbridge at a mixingconsole, but it could also be used to show incoming triggers such as MIDI signals, network activity etc. Includes an example which can as well be erased, deleted, wiped or sent to kingdom-come.. :) | |||||
'SuperStrict
'---------------------------------------------------------------------------
Type TVUmeter
Rem
.------------------------------.
| TVumeter v1.0 (BMaxGui 1.14) |
`------------------------------'
about: VUmeter gadget, displays triggers in VUmeter fashion at 60 FPS updates
by : CS_TBL
usage: Local MyVU:TVUmeter=CreateVUmeter(x,y,width,height,parent,canvasstyle,vustyle)
vustyle: 0: vertical
1: horizontal
2: vertical + peak
3: horizontal + peak
MyVU.trigger value#
value: 0..1
MyVU.SetBackcolor r,g,b
MyVU.SetFrontcolor r,g,b
MyVU.SetDecay value
value: in pixels
MyVU.SetAttack value
value: in pixels
EndRem
Field timer:TTimer
Field canvas:TGadget
Field backR:Byte=32
Field backG:Byte=32
Field backB:Byte=128
Field frontR:Byte=64
Field frontG:Byte=64
Field frontB:Byte=255
Field attack:Byte=32
Field decay:Byte=4
Field range:Short
Field vustyle:Byte=0
Field value:Int=0
Field newvalue:Int=0
Field move:Byte=0 ' 0: decay, 1:attack
Field peak:Byte=0 ' 0: no peak, 1: peak
Field showpeak:Byte
Field NewEvent:TEvent=New TEvent
Function eventhook:Object(id:Int,data:Object,context:Object)
If TVUmeter(context) TVUmeter(context).ev TEvent(data);Return data
EndFunction
Method New()
AddHook EmitEventHook,eventhook,Self
End Method
Method Free()
RemoveHook EmitEventHook,eventhook
timer=Null
canvas=Null
GCCollect()
End Method
Method ev(event:TEvent)
If Event.source=canvas
If Event.id=EVENT_GADGETPAINT update
EndIf
If Event.source=timer
If Event.id=EVENT_TIMERTICK
If move=0
value:-decay
If value<0
value=0
peak=0
EndIf
Else
value:+attack
If value>newvalue
value=newvalue
move=0
If showpeak peak=1
EndIf
EndIf
update
EndIf
EndIf
End Method
Method update()
SetGraphics CanvasGraphics(canvas)
SetClsColor backR,backG,backB;Cls
SetColor frontR,frontG,frontB
Select vustyle
Case 0 ' vertical
DrawRect 0,range-value,ClientWidth(canvas),value
If peak DrawLine 0,range-1-newvalue,ClientWidth(canvas),range-1-newvalue
Case 1 ' horizontal
DrawRect 0,0,value,ClientHeight(canvas)
If peak DrawLine newvalue,0,newvalue,ClientHeight(canvas)
End Select
Flip
End Method
Method Trigger(v:Float=1)
If v>1 v=1
newvalue=range*v-1
move=1
End Method
Method SetBackcolor(r:Byte,g:Byte,b:Byte)
backR=r
backG=g
backB=b
End Method
Method SetFrontcolor(r:Byte,g:Byte,b:Byte)
frontR=r
frontG=g
frontB=b
End Method
Method SetAttack(a:Byte)
attack=a
End Method
Method SetDecay(d:Byte)
decay=d
End Method
End Type
Function CreateVUmeter:TVUmeter(x:Int,y:Int,w:Int,h:Int,parent:TGadget,canvasstyle:Byte=0,vustyle:Byte=0)
Local a:TVUmeter=New TVUmeter
a.canvas=CreateCanvas(x,y,w,h,parent,canvasstyle)
If vustyle&1
a.vustyle=1 ' horizontal
a.range=ClientWidth(a.canvas)
Else
a.vustyle=0 ' vertical
a.range=ClientHeight(a.canvas)
EndIf
If vustyle&2
a.showpeak=1
Else
a.showpeak=0
EndIf
a.timer=CreateTimer(60)
Return a
End Function
'---------------------------------------------------------------------------
' example:
Local win:TGadget=CreateWindow("TVUmeter - CS_TBL",0,0,600,400)
Local but:TGadget=CreateButton("X",32,160,32,32,win)
Local vu:TVumeter=CreateVUmeter(32,2,16,128,win,1,0)
Local vu2:TVumeter=CreateVUmeter(128,2,256,8,win,1,3)
Local vu3:TVumeter=CreateVUmeter(128,24,16,8,win,1,3)
vu2.SetBackcolor 128,64,16
vu2.SetFrontcolor 255,128,32
vu2.SetAttack 64
vu3.SetBackcolor 16,128,64
vu3.SetFrontcolor 32,255,128
vu3.SetAttack 8
vu3.SetDecay 1
Local canvas:TGadget=CreateCanvas(32,228,100,16,win)
Repeat
WaitEvent()
If EventSource()=canvas And EventID()=EVENT_GADGETPAINT
SetGraphics CanvasGraphics(canvas);Cls;Flip
EndIf
If EventID()=EVENT_GADGETACTION
vu.trigger 1
vu2.trigger 1
vu3.trigger 1
EndIf
If EventID()=EVENT_MOUSEMOVE And EventSource()=canvas
vu.trigger EventX()/100.0
vu2.trigger EventX()/100.0
vu3.trigger EventX()/100.0
EndIf
If EventID()=EVENT_WINDOWCLOSE End
Forever |
Comments
| ||
| did you not got the wrong site. This is a Darkbasic program and not a Blitz program. |
| ||
| Darkbasic? lol. It's BlitzMax! :) |
| ||
| Lol @ Fernhout!! Cool :D |
Code Archives Forum