Hi all.
In the avidemux program there is a horizontal trackbar like control which simulates a "roulette" to emulate physical classic video editors.
Is it easy and short to do that?
Looking for a control like the one in avidemux
- Psychophanta
- Addict
- Posts: 4975
- Joined: Wed Jun 11, 2003 9:33 pm
- Location: Lípetsk, Russian Federation
- Contact:
Looking for a control like the one in avidemux
http://www.zeitgeistmovie.com
While world=business:world+mafia:Wend
Will never leave this forum until the absolute bugfree PB
While world=business:world+mafia:Wend
Will never leave this forum until the absolute bugfree PB
Re: Looking for a control like the one in avidemux
A fast programmed version:
But this was more a 'Coding question'
Code: Select all
CompilerIf #PB_Compiler_IsMainFile
EnableExplicit
CompilerEndIf
Structure WheelGadgetStructure
window.i
gadget.i
x.i
y.i
width.i
height.i
min.i
max.i
flags.i
Pos.i
LeftButtonDown.i
LastXMouse.i
EndStructure
Procedure WheelGadgetDraw(*WheelGadget.WheelGadgetStructure)
Protected.i i, xStep, x
If StartDrawing(CanvasOutput(*WheelGadget\gadget))
DrawingMode(#PB_2DDrawing_Gradient)
BackColor($808080)
FrontColor($FFFFFF)
LinearGradient(0, 0, *WheelGadget\width / 2, 0)
Box(0, 0, *WheelGadget\width / 2, *WheelGadget\height)
BackColor($FFFFFF)
FrontColor($808080)
LinearGradient(*WheelGadget\width / 2, 0, *WheelGadget\width, 0)
Box(*WheelGadget\width / 2, 0, *WheelGadget\width / 2, *WheelGadget\height)
DrawingMode(#PB_2DDrawing_Default)
LineXY(*WheelGadget\Pos, 0, *WheelGadget\Pos, *WheelGadget\height, #Red)
xStep = *WheelGadget\width / 9
x = *WheelGadget\Pos - xStep
While x > 0
LineXY(x, 0, x, *WheelGadget\height, #Gray)
x - xStep
Wend
x = *WheelGadget\Pos + xStep
While x < *WheelGadget\width
LineXY(x, 0, x, *WheelGadget\height, #Gray)
x + xStep
Wend
If *WheelGadget\Flags & #PB_Text_Border
LineXY(0, 0, *WheelGadget\width, 0, 0)
LineXY(*WheelGadget\width - 1, 0, *WheelGadget\width - 1, *WheelGadget\height, 0)
LineXY(*WheelGadget\width - 1, *WheelGadget\height - 1, 0, *WheelGadget\height - 1, 0)
LineXY(0, *WheelGadget\height, 0, 0, 0)
EndIf
StopDrawing()
EndIf
EndProcedure
Procedure WheelGadgetCB()
Protected xMouse.i, Value.i, Offset.i
Protected *WheelGadget.WheelGadgetStructure
*WheelGadget = GetGadgetData(EventGadget())
If *WheelGadget
Select EventType()
Case #PB_EventType_LeftButtonDown
*WheelGadget\LeftButtonDown = #True
*WheelGadget\LastXMouse = GetGadgetAttribute(*WheelGadget\gadget, #PB_Canvas_MouseX)
Case #PB_EventType_LeftButtonUp
*WheelGadget\LeftButtonDown = #False
Case #PB_EventType_LeftClick
xMouse = GetGadgetAttribute(*WheelGadget\gadget, #PB_Canvas_MouseX)
If xMouse < 0
xMouse = 0
EndIf
If xMouse >= *WheelGadget\width
xMouse = *WheelGadget\width - 2
EndIf
If xMouse <= *WheelGadget\Pos
Offset = 0
Else
Offset = 2
EndIf
*WheelGadget\Pos = xMouse
Value = ((*WheelGadget\Pos + Offset) * 100 / *WheelGadget\width) * (*WheelGadget\max - *WheelGadget\Min) / 100 + *WheelGadget\Min
PostEvent(#PB_Event_Gadget, *WheelGadget\window, *WheelGadget\gadget, #PB_EventType_Change, Value)
WheelGadgetDraw(*WheelGadget)
Case #PB_EventType_MouseMove
If *WheelGadget\LeftButtonDown
xMouse = GetGadgetAttribute(*WheelGadget\gadget, #PB_Canvas_MouseX)
*WheelGadget\Pos - (*WheelGadget\LastXMouse - xMouse)
If *WheelGadget\Pos < 1
*WheelGadget\Pos = 1
EndIf
If *WheelGadget\Pos > *WheelGadget\width - 2
*WheelGadget\Pos = *WheelGadget\width - 2
EndIf
*WheelGadget\LastXMouse = xMouse
WheelGadgetDraw(*WheelGadget)
EndIf
EndSelect
EndIf
EndProcedure
Procedure.i WheelGadget(gadget.i, x.i, y.i, width.i, height.i, min.i=-1, max.i=-1, Flags.i=#PB_Text_Border)
Protected gadgetno.i, REsult.i
Protected *WheelGadget.WheelGadgetStructure
If gadget = #PB_Any
gadgetno = CanvasGadget(gadget, x, y, width, height)
Result = gadgetno
Else
gadgetno = gadget
Result = CanvasGadget(gadget, x, y, width, height)
EndIf
If Result
*WheelGadget = AllocateStructure(WheelGadgetStructure)
*WheelGadget\window = GetActiveWindow()
*WheelGadget\gadget = gadgetno
*WheelGadget\x = x
*WheelGadget\y = y
*WheelGadget\width = width
*WheelGadget\height = height
If min <> -1 And max > min
*WheelGadget\min = min
*WheelGadget\max = max
Else
*WheelGadget\min = 0
*WheelGadget\max = 100
EndIf
*WheelGadget\flags = flags
*WheelGadget\Pos = width / 2
SetGadgetData(gadgetno, *WheelGadget)
WheelGadgetDraw(*WheelGadget)
BindGadgetEvent(gadgetno, @WheelGadgetCB(), #PB_All)
EndIf
ProcedureReturn Result
EndProcedure
CompilerIf #PB_Compiler_IsMainFile
Define Event.i
If OpenWindow(0, 0, 0, 320, 80, "WheelGadget example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
WheelGadget(0, 10, 10, 300, 20)
WheelGadget(1, 10, 40, 200, 30, 100, 900)
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case 0
If EventType() = #PB_EventType_Change
Debug "0: " + Str(EventData()) + "%"
EndIf
Case 1
If EventType() = #PB_EventType_Change
Debug "1: " + Str(EventData())
EndIf
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
EndIf
CompilerEndIf
- Psychophanta
- Addict
- Posts: 4975
- Joined: Wed Jun 11, 2003 9:33 pm
- Location: Lípetsk, Russian Federation
- Contact:
Re: Looking for a control like the one in avidemux
WaW
You are my hero
I was looking around into its source, but not time enough for me to find it, so I decided to leave it at the moment and perform it in a native simple way using standard trackbargadget.
Now, this tip is more than enough to do the final control gadget
http://www.zeitgeistmovie.com
While world=business:world+mafia:Wend
Will never leave this forum until the absolute bugfree PB
While world=business:world+mafia:Wend
Will never leave this forum until the absolute bugfree PB
- Psychophanta
- Addict
- Posts: 4975
- Joined: Wed Jun 11, 2003 9:33 pm
- Location: Lípetsk, Russian Federation
- Contact:
Re: Looking for a control like the one in avidemux
Replacing this function in your tip, we can get the intention:
And in the draw function I have replaced:
by
Code: Select all
Procedure WheelGadgetCB()
Protected xMouse.i,*WheelGadget.WheelGadgetStructure
*WheelGadget=GetGadgetData(EventGadget())
If *WheelGadget
Select EventType()
Case #PB_EventType_LeftButtonDown
*WheelGadget\LeftButtonDown=1
*WheelGadget\LastXMouse=GetGadgetAttribute(*WheelGadget\gadget,#PB_Canvas_MouseX)
Case #PB_EventType_LeftButtonUp
If *WheelGadget\LastXMouse
*WheelGadget\LastXMouse=0
*WheelGadget\LeftButtonDown=0
xMouse=0
*WheelGadget\Pos=*WheelGadget\width/2
PostEvent(#PB_Event_Gadget, *WheelGadget\window, *WheelGadget\gadget, #PB_EventType_Change,0)
WheelGadgetDraw(*WheelGadget)
EndIf
Case #PB_EventType_MouseMove
If *WheelGadget\LeftButtonDown And *WheelGadget\LastXMouse>0 And *WheelGadget\LastXMouse<*WheelGadget\width
xMouse = GetGadgetAttribute(*WheelGadget\gadget, #PB_Canvas_MouseX)
*WheelGadget\Pos-*WheelGadget\LastXMouse+xMouse
*WheelGadget\LastXMouse=xMouse
If *WheelGadget\Pos<1:*WheelGadget\Pos=1:EndIf
If *WheelGadget\Pos>*WheelGadget\width:*WheelGadget\Pos=*WheelGadget\width:EndIf
PostEvent(#PB_Event_Gadget,*WheelGadget\window,*WheelGadget\gadget, #PB_EventType_Change,-100+(*WheelGadget\Pos-1)*(100+100)/(*WheelGadget\width-1))
WheelGadgetDraw(*WheelGadget)
EndIf
EndSelect
EndIf
EndProcedure
And in the draw function I have replaced:
Code: Select all
LineXY(*WheelGadget\Pos,0, *WheelGadget\Pos, *WheelGadget\height, #Red)
Code: Select all
Line(*WheelGadget\Pos-1,0,1,*WheelGadget\height, #Red)
Line(*WheelGadget\Pos,0,1, *WheelGadget\height, #Red)
Line(*WheelGadget\Pos+1,0,1, *WheelGadget\height, #Red)
http://www.zeitgeistmovie.com
While world=business:world+mafia:Wend
Will never leave this forum until the absolute bugfree PB
While world=business:world+mafia:Wend
Will never leave this forum until the absolute bugfree PB