mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
Upload
This commit is contained in:
158
lua/vgui/dtooltip.lua
Normal file
158
lua/vgui/dtooltip.lua
Normal file
@@ -0,0 +1,158 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
|
||||
--
|
||||
-- The delay before a tooltip appears
|
||||
-- Can be overridden with PANEL:SetTooltipDelay
|
||||
--
|
||||
local tooltip_delay = CreateConVar( "tooltip_delay", "0.5", FCVAR_ARCHIVE + FCVAR_DONTRECORD, "Delay between hovering over a panel, and a tooltip appearing, if it has one." )
|
||||
|
||||
local PANEL = {}
|
||||
|
||||
function PANEL:Init()
|
||||
|
||||
self:SetDrawOnTop( true )
|
||||
self.DeleteContentsOnClose = false
|
||||
self:SetText( "" )
|
||||
self:SetFont( "Default" )
|
||||
|
||||
end
|
||||
|
||||
function PANEL:UpdateColours( skin )
|
||||
|
||||
return self:SetTextStyleColor( skin.Colours.TooltipText )
|
||||
|
||||
end
|
||||
|
||||
function PANEL:SetContents( panel, bDelete )
|
||||
|
||||
panel:SetParent( self )
|
||||
|
||||
self.Contents = panel
|
||||
self.DeleteContentsOnClose = bDelete or false
|
||||
self.Contents:SizeToContents()
|
||||
self:InvalidateLayout( true )
|
||||
|
||||
self.Contents:SetVisible( false )
|
||||
|
||||
end
|
||||
|
||||
function PANEL:PerformLayout()
|
||||
|
||||
if ( IsValid( self.Contents ) ) then
|
||||
|
||||
self:SetWide( self.Contents:GetWide() + 8 )
|
||||
self:SetTall( self.Contents:GetTall() + 8 )
|
||||
self.Contents:SetPos( 4, 4 )
|
||||
self.Contents:SetVisible( true )
|
||||
|
||||
else
|
||||
|
||||
local w, h = self:GetContentSize()
|
||||
self:SetSize( w + 8, h + 6 )
|
||||
self:SetContentAlignment( 5 )
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
local Mat = Material( "vgui/arrow" )
|
||||
|
||||
function PANEL:DrawArrow( x, y )
|
||||
|
||||
self.Contents:SetVisible( true )
|
||||
|
||||
surface.SetMaterial( Mat )
|
||||
surface.DrawTexturedRect( self.ArrowPosX + x, self.ArrowPosY + y, self.ArrowWide, self.ArrowTall )
|
||||
|
||||
end
|
||||
|
||||
function PANEL:PositionTooltip()
|
||||
|
||||
if ( !IsValid( self.TargetPanel ) ) then
|
||||
self:Close()
|
||||
return
|
||||
end
|
||||
|
||||
self:InvalidateLayout( true )
|
||||
|
||||
local x, y = input.GetCursorPos()
|
||||
local w, h = self:GetSize()
|
||||
|
||||
local lx, ly = self.TargetPanel:LocalToScreen( 0, 0 )
|
||||
|
||||
y = y - 50
|
||||
|
||||
y = math.min( y, ly - h - 10 )
|
||||
if ( y < 2 ) then y = 2 end
|
||||
|
||||
-- Fixes being able to be drawn off screen
|
||||
self:SetPos( math.Clamp( x - w * 0.5, 0, ScrW() - self:GetWide() ), math.Clamp( y, 0, ScrH() - self:GetTall() ) )
|
||||
|
||||
end
|
||||
|
||||
function PANEL:Paint( w, h )
|
||||
|
||||
self:PositionTooltip()
|
||||
derma.SkinHook( "Paint", "Tooltip", self, w, h )
|
||||
|
||||
end
|
||||
|
||||
function PANEL:OpenForPanel( panel )
|
||||
|
||||
self.TargetPanel = panel
|
||||
self.OpenDelay = isnumber( panel.numTooltipDelay ) and panel.numTooltipDelay or tooltip_delay:GetFloat()
|
||||
self:PositionTooltip()
|
||||
|
||||
-- Use the parent panel's skin
|
||||
self:SetSkin( panel:GetSkin().Name )
|
||||
|
||||
if ( self.OpenDelay > 0 ) then
|
||||
|
||||
self:SetVisible( false )
|
||||
timer.Simple( self.OpenDelay, function()
|
||||
|
||||
if ( !IsValid( self ) ) then return end
|
||||
if ( !IsValid( panel ) ) then return end
|
||||
|
||||
self:PositionTooltip()
|
||||
self:SetVisible( true )
|
||||
|
||||
end )
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function PANEL:Close()
|
||||
|
||||
if ( !self.DeleteContentsOnClose and IsValid( self.Contents ) ) then
|
||||
|
||||
self.Contents:SetVisible( false )
|
||||
self.Contents:SetParent( nil )
|
||||
|
||||
end
|
||||
|
||||
self:Remove()
|
||||
|
||||
end
|
||||
|
||||
function PANEL:GenerateExample( ClassName, PropertySheet, Width, Height )
|
||||
|
||||
local ctrl = vgui.Create( "DButton" )
|
||||
ctrl:SetText( "Hover me" )
|
||||
ctrl:SetWide( 200 )
|
||||
ctrl:SetTooltip( "This is a tooltip" )
|
||||
|
||||
PropertySheet:AddSheet( ClassName, ctrl, nil, true, true )
|
||||
|
||||
end
|
||||
|
||||
derma.DefineControl( "DTooltip", "", PANEL, "DLabel" )
|
||||
Reference in New Issue
Block a user