mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
91 lines
2.1 KiB
Lua
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") |