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