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