mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
Upload
This commit is contained in:
91
lua/sui/vgui/sui_slider.lua
Normal file
91
lua/sui/vgui/sui_slider.lua
Normal file
@@ -0,0 +1,91 @@
|
||||
--[[
|
||||
| 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")
|
||||
Reference in New Issue
Block a user