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

147 lines
3.6 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 draw = draw
local render = render
local TDLib = sui.TDLib
local SUI, NAME = CURRENT_SUI, CURRENT_SUI.name
local lerp_color = sui.lerp_color
local contrast_color = sui.contrast_color
local BUTTON_FONT = SUI.CreateFont("Button", "Roboto Medium", 16)
local color_white = color_white
local color_transparent = Color(0, 0, 0, 0)
local PANEL = {}
AccessorFunc(PANEL, "m_Background", "Background")
AccessorFunc(PANEL, "m_bContained", "Contained", FORCE_BOOL)
sui.TDLib.Install(PANEL)
sui.scaling_functions(PANEL)
PANEL:ClearPaint()
PANEL:SetContained(true)
local Panel = FindMetaTable("Panel")
local SetMouseInputEnabled = Panel.SetMouseInputEnabled
local IsMouseInputEnabled = Panel.IsMouseInputEnabled
local SetCursor = Panel.SetCursor
local SetContentAlignment = Panel.SetContentAlignment
function PANEL:Init()
self:ScaleInit()
self.vertices, self.vertices_2 = {}, {}
SetMouseInputEnabled(self, true)
SetCursor(self, "hand")
SetContentAlignment(self, 5)
self:SetSize(90, 30)
self:SetFont(BUTTON_FONT)
self:CircleClick(nil, 7)
self.OldPaint, self.Paint = self.Paint, self.Paint2
self.cur_col = Color(0, 0, 0, 0)
end
function PANEL:SetEnabled(b)
SetMouseInputEnabled(self, b)
end
function PANEL:IsEnabled()
return IsMouseInputEnabled(self)
end
function PANEL:ContainedPaint(w, h)
local enabled = self:IsEnabled()
local col
if enabled then
col = self:GetBackground() or SUI.GetColor("button")
self:SetTextColor(SUI.GetColor("button_text"))
else
col = SUI.GetColor("button_disabled")
self:SetTextColor(SUI.GetColor("button_disabled_text"))
end
self:RoundedBox("Background", 4, 0, 0, w, h, col)
if not enabled then return end
self.circle_click_color = SUI.GetColor("button_click")
if self.Hovered or self.Selected then
self:RoundedBox("Hover", 4, 0, 0, w, h, SUI.GetColor("button_hover"))
end
end
function PANEL:SetColors(hover_color, text_color)
self.hover = hover_color
self.text_color = text_color
end
function PANEL:Paint2(w, h)
if self:GetContained() then
self:ContainedPaint(w, h)
self:OldPaint(w, h)
return
end
render.ClearStencil()
render.SetStencilEnable(true)
render.SetStencilWriteMask(1)
render.SetStencilTestMask(1)
render.SetStencilFailOperation(STENCILOPERATION_REPLACE)
render.SetStencilPassOperation(STENCILOPERATION_ZERO)
render.SetStencilZFailOperation(STENCILOPERATION_ZERO)
render.SetStencilCompareFunction(STENCILCOMPARISONFUNCTION_NEVER)
render.SetStencilReferenceValue(1)
TDLib.RoundedBox(self.vertices, 4, 0, 0, w, h, color_white)
render.SetStencilFailOperation(STENCILOPERATION_ZERO)
render.SetStencilPassOperation(STENCILOPERATION_REPLACE)
render.SetStencilZFailOperation(STENCILOPERATION_ZERO)
render.SetStencilCompareFunction(STENCILCOMPARISONFUNCTION_EQUAL)
render.SetStencilReferenceValue(1)
local cur_col = self.cur_col
if self.Selected then
lerp_color(cur_col, SUI.GetColor("button2_selected"))
elseif self.Hovered then
lerp_color(cur_col, self.hover or SUI.GetColor("button2_hover"))
else
lerp_color(cur_col, color_transparent)
end
TDLib.RoundedBox(self.vertices_2, 4, 0, 0, w, h, cur_col)
if self.text_color then
self.circle_click_color = self.text_color
self:SetTextColor(self.text_color)
else
local col = contrast_color(cur_col)
self.circle_click_color = col
self:SetTextColor(col)
end
self:OldPaint(w, h)
render.SetStencilEnable(false)
render.ClearStencil()
end
sui.register("Button", PANEL, NAME .. ".Label")