This commit is contained in:
lifestorm
2024-08-04 22:55:00 +03:00
parent 8064ba84d8
commit 73479cff9e
7338 changed files with 1718883 additions and 14 deletions

View File

@@ -0,0 +1,88 @@
--[[
| 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/
--]]
--- why can't the default label scroll? welcome to gmod
PANEL = {}
function PANEL:Init()
self.Label = vgui.Create("DLabel", self)
self.Label:SetPos(0, 0)
self.Scroll = vgui.Create("DVScrollBar", self)
end
function PANEL:GetLabel() return self.Label end
function PANEL:OnMouseWheeled(dlta)
if not self.Scroll then return end
self.Scroll:AddScroll(dlta * -2)
self:InvalidateLayout()
end
function PANEL:SetScrollEnabled(st) self.Scroll:SetEnabled(st) end
-- enable/disable scrollbar depending on content size
function PANEL:UpdateScrollState()
if not self.Scroll then return end
self.Scroll:SetScroll(0)
self:SetScrollEnabled(false)
self.Label:SetSize(self:GetWide(), self:GetTall())
self.Label:SizeToContentsY()
self:SetScrollEnabled(self.Label:GetTall() > self:GetTall())
self.Label:InvalidateLayout(true)
self:InvalidateLayout(true)
end
function PANEL:SetText(txt)
if not self.Label then return end
self.Label:SetText(txt)
self:UpdateScrollState()
-- I give up. VGUI, you have won. Here is your ugly hack to make the label
-- resize to the proper height, after you have completely mangled it the
-- first time I call SizeToContents. I don't know how or what happens to the
-- Label's internal state that makes it work when resizing a second time a
-- tick later (it certainly isn't any variant of PerformLayout I can find),
-- but it does.
local pnl = self.Panel
timer.Simple(0, function()
if IsValid(pnl) then
pnl:UpdateScrollState()
end
end)
end
function PANEL:PerformLayout()
if not self.Scroll then return end
self.Label:SetVisible(self:IsVisible())
self.Scroll:SetPos(self:GetWide() - 16, 0)
self.Scroll:SetSize(16, self:GetTall())
local was_on = self.Scroll.Enabled
self.Scroll:SetUp(self:GetTall(), self.Label:GetTall())
self.Scroll:SetEnabled(was_on) -- setup mangles enabled state
self.Label:SetPos( 0, self.Scroll:GetOffset() )
self.Label:SetSize( self:GetWide() - (self.Scroll.Enabled and 16 or 0), self.Label:GetTall() )
end
vgui.Register("ScrollLabel", PANEL, "Panel")