local PANEL = {}
/*---------------------------------------------------------
Name: Init
---------------------------------------------------------*/
function PANEL:Init()
self:SetScroll( 0 )
self:SetBarScale( 4 )
self.Velocity = 0
self.HasChanged = true
end
/*---------------------------------------------------------
Name: SetEnabled
---------------------------------------------------------*/
self.Enabled = b
if ( !b ) then
self:SetScroll( 0 )
self.HasChanged = true
end
end
/*---------------------------------------------------------
Name: SetScroll
---------------------------------------------------------*/
function PANEL:SetScroll( _float_ )
end
/*---------------------------------------------------------
Name: Value
---------------------------------------------------------*/
function PANEL:Value()
return self.Pos
end
/*---------------------------------------------------------
Name: SetPos
---------------------------------------------------------*/
function PANEL:SetBarScale( _scale_ )
self.BarScale = _scale_
end
/*---------------------------------------------------------
Name: Rebuild
---------------------------------------------------------*/
function PANEL:Rebuild( item )
local Offset = 0
if ( self.Horizontal ) then
local x, y = 0, 0;
for k, panel
in pairs( self.Items
) do
x = 0
y = y + h + self.Spacing
end
x = x + w + self.Spacing
Offset = y + h + self.Spacing
end
else
for k, panel
in pairs( self.Items
) do
Offset
= Offset + panel:
GetTall() + self.Spacing
end
end
self:GetCanvas
():
SetSize( self:GetCanvas
():
GetWide(), Offset + self.Padding
* 2 - self.Spacing
)
end
/*---------------------------------------------------------
Name: OnMouseWheeled
---------------------------------------------------------*/
function PANEL:OnMouseWheeled( dlta )
if ( !self.Enabled ) then return end
return true
end
/*---------------------------------------------------------
Name: AddVelocity
---------------------------------------------------------*/
self.Velocity = self.Velocity + vel * -2
end
/*---------------------------------------------------------
Name: Changed
---------------------------------------------------------*/
function PANEL:Changed()
if ( self.HasChanged ) then
self.HasChanged = nil
return true
end
return false
end
/*---------------------------------------------------------
Name: Changed
---------------------------------------------------------*/
function PANEL:ScrollbarSize()
return self:
GetTall() / self.BarScale
end
/*---------------------------------------------------------
Name: Think
---------------------------------------------------------*/
function PANEL:Think()
if ( self.Dragging ) then
// Accumulate Velocity
local PixelDiff
= (gui.MouseY() - self.StartDraggingPos
) * self.DragDirection
self.Velocity = (self.Velocity + PixelDiff ) / 2
// Scroll
local Span
= self:
GetTall() - self:ScrollbarSize
()
self.Pos = self.Pos * Span + PixelDiff
self:SetScroll( self.Pos / Span )
self.HasChanged = true
self.Dragging = 2
return
end
if ( self.Velocity != 0 ) then
self.HasChanged = true
self.Pos
= self.Pos +
( self.Velocity
/ self.BarScale
) * FrameTime()
if ( self.Pos < 0 || self.Pos > 1 ) then
//self.Velocity = self.Velocity * -0.5
self.Velocity = 0
end
end
end
/*---------------------------------------------------------
Name: Paint
---------------------------------------------------------*/
function PANEL:Paint()
if ( !self.Enabled || self.BarScale <= 0 ) then return true end
local Pos
= ( self:
GetTall() - self:ScrollbarSize
() ) * self.Pos
return true
end
/*---------------------------------------------------------
Name: Think
---------------------------------------------------------*/
function PANEL:OnMousePressed()
self:Grip( 1 )
end
/*---------------------------------------------------------
Name: Changed
---------------------------------------------------------*/
function PANEL:Grip( direction )
if ( !self.Enabled ) then return end
self.DragDirection = direction or ( -1 / self.BarScale )
self.Dragging = 1
self.Velocity = 0
end
/*---------------------------------------------------------
Name: Think
---------------------------------------------------------*/
function PANEL:OnMouseReleased()
self.Dragging = nil
end