Files
wnsrc/lua/sui/vgui/sui_slider.lua
lifestorm 94063e4369 Upload
2024-08-04 22:55:00 +03:00

91 lines
2.1 KiB
Lua

--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
local SUI, NAME = CURRENT_SUI, CURRENT_SUI.name
local TDLib = sui.TDLib
local Panel = {}
sui.scaling_functions(Panel)
AccessorFunc(Panel, "m_bValue", "Value", FORCE_NUMBER)
AccessorFunc(Panel, "m_bMin", "Min", FORCE_NUMBER)
AccessorFunc(Panel, "m_bMax", "Max", FORCE_NUMBER)
AccessorFunc(Panel, "m_bDecimals", "Decimals", FORCE_NUMBER)
function Panel:Init()
self:ScaleInit()
self:SetMin(0)
self:SetMax(10)
self:SetValue(1)
self:SetDecimals(1)
self:SetSize(100, 12)
self.rounded_box = {}
self.Knob.circle = {}
self.Knob.Paint = self.KnobPaint
self:SetTrapInside(true)
end
function Panel:SetMinMax(min, max)
self:SetMin(min)
self:SetMax(max)
end
function Panel:TranslateValues(x, y)
self:SetValue(self:GetMin() + (x * self:GetRange()))
return self:GetFraction(), y
end
function Panel:GetFraction()
return (self:GetValue() - self:GetMin()) / self:GetRange()
end
function Panel:SetValue(val)
val = math.Clamp(val, self:GetMin(), self:GetMax())
val = math.Round(val, self:GetDecimals())
self.m_bValue = val
self:SetSlideX((val - self:GetMin()) / self:GetRange())
self:OnValueChanged(val)
end
function Panel:OnValueChanged(val)
end
function Panel:GetRange()
return self:GetMax() - self:GetMin()
end
function Panel:Paint(w, h)
local _h = SUI.Scale(2)
TDLib.RoundedBox(self.rounded_box, 3, 0, h / 2 - _h / 2, w, _h, SUI.GetColor("slider_track"))
end
function Panel:KnobPaint(w, h)
if self.Depressed then
TDLib.DrawCircle(self.circle, w / 2, h / 2, h / 1.1, SUI.GetColor("slider_pressed"))
elseif self.Hovered then
TDLib.DrawCircle(self.circle, w / 2, h / 2, h / 1.1, SUI.GetColor("slider_hover"))
end
TDLib.DrawCircle(self.circle, w / 2, h / 2, h / 2, SUI.GetColor("slider_knob"))
end
function Panel:PerformLayout(w, h)
self.Knob:SetSize(SUI.Scale(12), SUI.Scale(12))
DSlider.PerformLayout(self, w, h)
end
sui.register("Slider", Panel, "DSlider")