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

91 lines
3.0 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 PANEL = {}
local font = slib.createFont("Roboto", 13)
local textcolor, accentcolor, successcolor, failcolor = slib.getTheme("textcolor"), slib.getTheme("accentcolor"), slib.getTheme("successcolor"), slib.getTheme("failcolor")
function PANEL:Init()
self.font = font
self:SetText("")
self.bg = slib.getTheme("maincolor")
self.alignment = TEXT_ALIGN_CENTER
self.accentheight = 2
self.selCol = accentcolor
self.textcolor = textcolor
slib.wrapFunction(self, "Dock", nil, function() return self end, true)
slib.wrapFunction(self, "DockMargin", nil, function() return self end, true)
slib.wrapFunction(self, "DockPadding", nil, function() return self end, true)
slib.wrapFunction(self, "SetZPos", nil, function() return self end, true)
slib.wrapFunction(self, "SetTall", nil, function() return self end, true)
slib.wrapFunction(self, "SetWide", nil, function() return self end, true)
slib.wrapFunction(self, "SetSize", nil, function() return self end, true)
slib.wrapFunction(self, "SetPos", nil, function() return self end, true)
slib.wrapFunction(self, "SetVisible", nil, function() return self end, true)
end
function PANEL:setTitle(title, alignment, noresize)
if self.title == title then return end
self.title = title
if alignment then self.alignment = alignment end
if !noresize then
surface.SetFont(self.font)
local w = select(1, surface.GetTextSize(title))
self:SetWide(w + (slib.getTheme("margin") * 2))
end
return self
end
function PANEL:getTitle()
return self.title
end
function PANEL:SetLinePos(h)
self.linepos = h
return self
end
function PANEL:setToggleable(bool)
self.toggleable = bool
return self
end
function PANEL:Paint(w,h)
local wantedcolor = self.toggleable and (isfunction(self.toggleCheck) and self.toggleCheck() and istable(self.toggleCheck()) and self.toggleCheck() or self.toggleCheck() and successcolor or failcolor) or self.selCol
if !self.toggleable then
wantedcolor.a = (self:IsHovered() or self.forcehover) and 120 or 20
end
surface.SetDrawColor(self.bg)
surface.DrawRect(0, 0, w, h)
surface.SetDrawColor(slib.lerpColor(self, wantedcolor))
surface.DrawRect(0, self.linepos ~= nil and self.linepos or (h - self.accentheight), w, self.accentheight)
local x
if self.alignment == TEXT_ALIGN_CENTER then
x = w * .5
elseif self.alignment == TEXT_ALIGN_RIGHT then
x = w - slib.getTheme("margin")
elseif self.alignment == TEXT_ALIGN_LEFT then
x = slib.getTheme("margin")
end
draw.SimpleText(self.title, self.font, x, h * .5, self.textcolor, self.alignment, TEXT_ALIGN_CENTER)
end
vgui.Register("SButton", PANEL, "DButton")