mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 05:43:46 +03:00
Upload
This commit is contained in:
274
lua/derma/derma_utils.lua
Normal file
274
lua/derma/derma_utils.lua
Normal file
@@ -0,0 +1,274 @@
|
||||
--[[
|
||||
| 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 matBlurScreen = Material( "pp/blurscreen" )
|
||||
|
||||
--[[
|
||||
This is designed for Paint functions..
|
||||
--]]
|
||||
function Derma_DrawBackgroundBlur( panel, starttime )
|
||||
|
||||
local Fraction = 1
|
||||
|
||||
if ( starttime ) then
|
||||
Fraction = math.Clamp( ( SysTime() - starttime ) / 1, 0, 1 )
|
||||
end
|
||||
|
||||
local x, y = panel:LocalToScreen( 0, 0 )
|
||||
|
||||
local wasEnabled = DisableClipping( true )
|
||||
|
||||
-- Menu cannot do blur
|
||||
if ( !MENU_DLL ) then
|
||||
surface.SetMaterial( matBlurScreen )
|
||||
surface.SetDrawColor( 255, 255, 255, 255 )
|
||||
|
||||
for i = 0.33, 1, 0.33 do
|
||||
matBlurScreen:SetFloat( "$blur", Fraction * 5 * i )
|
||||
matBlurScreen:Recompute()
|
||||
if ( render ) then render.UpdateScreenEffectTexture() end -- Todo: Make this available to menu Lua
|
||||
surface.DrawTexturedRect( x * -1, y * -1, ScrW(), ScrH() )
|
||||
end
|
||||
end
|
||||
|
||||
surface.SetDrawColor( 10, 10, 10, 200 * Fraction )
|
||||
surface.DrawRect( x * -1, y * -1, ScrW(), ScrH() )
|
||||
|
||||
DisableClipping( wasEnabled )
|
||||
|
||||
end
|
||||
|
||||
--[[
|
||||
Display a simple message box.
|
||||
|
||||
Derma_Message( "Hey Some Text Here!!!", "Message Title (Optional)", "Button Text (Optional)" )
|
||||
--]]
|
||||
|
||||
function Derma_Message( strText, strTitle, strButtonText )
|
||||
|
||||
local Window = vgui.Create( "DFrame" )
|
||||
Window:SetTitle( strTitle or "Message" )
|
||||
Window:SetDraggable( false )
|
||||
Window:ShowCloseButton( false )
|
||||
Window:SetBackgroundBlur( true )
|
||||
Window:SetDrawOnTop( true )
|
||||
|
||||
local InnerPanel = vgui.Create( "Panel", Window )
|
||||
|
||||
local Text = vgui.Create( "DLabel", InnerPanel )
|
||||
Text:SetText( strText or "Message Text" )
|
||||
Text:SizeToContents()
|
||||
Text:SetContentAlignment( 5 )
|
||||
Text:SetTextColor( color_white )
|
||||
|
||||
local ButtonPanel = vgui.Create( "DPanel", Window )
|
||||
ButtonPanel:SetTall( 30 )
|
||||
ButtonPanel:SetPaintBackground( false )
|
||||
|
||||
local Button = vgui.Create( "DButton", ButtonPanel )
|
||||
Button:SetText( strButtonText or "OK" )
|
||||
Button:SizeToContents()
|
||||
Button:SetTall( 20 )
|
||||
Button:SetWide( Button:GetWide() + 20 )
|
||||
Button:SetPos( 5, 5 )
|
||||
Button.DoClick = function() Window:Close() end
|
||||
|
||||
ButtonPanel:SetWide( Button:GetWide() + 10 )
|
||||
|
||||
local w, h = Text:GetSize()
|
||||
|
||||
Window:SetSize( w + 50, h + 25 + 45 + 10 )
|
||||
Window:Center()
|
||||
|
||||
InnerPanel:StretchToParent( 5, 25, 5, 45 )
|
||||
|
||||
Text:StretchToParent( 5, 5, 5, 5 )
|
||||
|
||||
ButtonPanel:CenterHorizontal()
|
||||
ButtonPanel:AlignBottom( 8 )
|
||||
|
||||
Window:MakePopup()
|
||||
Window:DoModal()
|
||||
|
||||
return Window
|
||||
|
||||
end
|
||||
|
||||
--[[
|
||||
Ask a question with multiple answers..
|
||||
|
||||
Derma_Query( "Would you like me to punch you right in the face?", "Question!",
|
||||
"Yesss", function() MsgN( "Pressed YES!") end,
|
||||
"Nope!", function() MsgN( "Pressed Nope!") end,
|
||||
"Cancel", function() MsgN( "Cancelled!") end )
|
||||
|
||||
--]]
|
||||
|
||||
function Derma_Query( strText, strTitle, ... )
|
||||
|
||||
local Window = vgui.Create( "DFrame" )
|
||||
Window:SetTitle( strTitle or "Message Title (First Parameter)" )
|
||||
Window:SetDraggable( false )
|
||||
Window:ShowCloseButton( false )
|
||||
Window:SetBackgroundBlur( true )
|
||||
Window:SetDrawOnTop( true )
|
||||
|
||||
local InnerPanel = vgui.Create( "DPanel", Window )
|
||||
InnerPanel:SetPaintBackground( false )
|
||||
|
||||
local Text = vgui.Create( "DLabel", InnerPanel )
|
||||
Text:SetText( strText or "Message Text (Second Parameter)" )
|
||||
Text:SizeToContents()
|
||||
Text:SetContentAlignment( 5 )
|
||||
Text:SetTextColor( color_white )
|
||||
|
||||
local ButtonPanel = vgui.Create( "DPanel", Window )
|
||||
ButtonPanel:SetTall( 30 )
|
||||
ButtonPanel:SetPaintBackground( false )
|
||||
|
||||
-- Loop through all the options and create buttons for them.
|
||||
local NumOptions = 0
|
||||
local x = 5
|
||||
|
||||
for k = 1, 8, 2 do
|
||||
|
||||
local txt = select( k, ... )
|
||||
if ( txt == nil ) then break end
|
||||
|
||||
local Func = select( k + 1, ... ) or function() end
|
||||
|
||||
local Button = vgui.Create( "DButton", ButtonPanel )
|
||||
Button:SetText( txt )
|
||||
Button:SizeToContents()
|
||||
Button:SetTall( 20 )
|
||||
Button:SetWide( Button:GetWide() + 20 )
|
||||
Button.DoClick = function() Window:Close() Func() end
|
||||
Button:SetPos( x, 5 )
|
||||
|
||||
x = x + Button:GetWide() + 5
|
||||
|
||||
ButtonPanel:SetWide( x )
|
||||
NumOptions = NumOptions + 1
|
||||
|
||||
end
|
||||
|
||||
local w, h = Text:GetSize()
|
||||
|
||||
w = math.max( w, ButtonPanel:GetWide() )
|
||||
|
||||
Window:SetSize( w + 50, h + 25 + 45 + 10 )
|
||||
Window:Center()
|
||||
|
||||
InnerPanel:StretchToParent( 5, 25, 5, 45 )
|
||||
|
||||
Text:StretchToParent( 5, 5, 5, 5 )
|
||||
|
||||
ButtonPanel:CenterHorizontal()
|
||||
ButtonPanel:AlignBottom( 8 )
|
||||
|
||||
Window:MakePopup()
|
||||
Window:DoModal()
|
||||
|
||||
if ( NumOptions == 0 ) then
|
||||
|
||||
Window:Close()
|
||||
Error( "Derma_Query: Created Query with no Options!?" )
|
||||
return nil
|
||||
|
||||
end
|
||||
|
||||
return Window
|
||||
|
||||
end
|
||||
|
||||
--[[
|
||||
Request a string from the user
|
||||
|
||||
Derma_StringRequest( "Question",
|
||||
"What Is Your Favourite Color?",
|
||||
"Type your answer here!",
|
||||
function( strTextOut ) Derma_Message( "Your Favourite Color Is: " .. strTextOut ) end,
|
||||
function( strTextOut ) Derma_Message( "You pressed Cancel!" ) end,
|
||||
"Okey Dokey",
|
||||
"Cancel" )
|
||||
|
||||
--]]
|
||||
|
||||
function Derma_StringRequest( strTitle, strText, strDefaultText, fnEnter, fnCancel, strButtonText, strButtonCancelText )
|
||||
|
||||
local Window = vgui.Create( "DFrame" )
|
||||
Window:SetTitle( strTitle or "Message Title (First Parameter)" )
|
||||
Window:SetDraggable( false )
|
||||
Window:ShowCloseButton( false )
|
||||
Window:SetBackgroundBlur( true )
|
||||
Window:SetDrawOnTop( true )
|
||||
|
||||
local InnerPanel = vgui.Create( "DPanel", Window )
|
||||
InnerPanel:SetPaintBackground( false )
|
||||
|
||||
local Text = vgui.Create( "DLabel", InnerPanel )
|
||||
Text:SetText( strText or "Message Text (Second Parameter)" )
|
||||
Text:SizeToContents()
|
||||
Text:SetContentAlignment( 5 )
|
||||
Text:SetTextColor( color_white )
|
||||
|
||||
local TextEntry = vgui.Create( "DTextEntry", InnerPanel )
|
||||
TextEntry:SetText( strDefaultText or "" )
|
||||
TextEntry.OnEnter = function() Window:Close() fnEnter( TextEntry:GetValue() ) end
|
||||
|
||||
local ButtonPanel = vgui.Create( "DPanel", Window )
|
||||
ButtonPanel:SetTall( 30 )
|
||||
ButtonPanel:SetPaintBackground( false )
|
||||
|
||||
local Button = vgui.Create( "DButton", ButtonPanel )
|
||||
Button:SetText( strButtonText or "OK" )
|
||||
Button:SizeToContents()
|
||||
Button:SetTall( 20 )
|
||||
Button:SetWide( Button:GetWide() + 20 )
|
||||
Button:SetPos( 5, 5 )
|
||||
Button.DoClick = function() Window:Close() fnEnter( TextEntry:GetValue() ) end
|
||||
|
||||
local ButtonCancel = vgui.Create( "DButton", ButtonPanel )
|
||||
ButtonCancel:SetText( strButtonCancelText or "Cancel" )
|
||||
ButtonCancel:SizeToContents()
|
||||
ButtonCancel:SetTall( 20 )
|
||||
ButtonCancel:SetWide( Button:GetWide() + 20 )
|
||||
ButtonCancel:SetPos( 5, 5 )
|
||||
ButtonCancel.DoClick = function() Window:Close() if ( fnCancel ) then fnCancel( TextEntry:GetValue() ) end end
|
||||
ButtonCancel:MoveRightOf( Button, 5 )
|
||||
|
||||
ButtonPanel:SetWide( Button:GetWide() + 5 + ButtonCancel:GetWide() + 10 )
|
||||
|
||||
local w, h = Text:GetSize()
|
||||
w = math.max( w, 400 )
|
||||
|
||||
Window:SetSize( w + 50, h + 25 + 75 + 10 )
|
||||
Window:Center()
|
||||
|
||||
InnerPanel:StretchToParent( 5, 25, 5, 45 )
|
||||
|
||||
Text:StretchToParent( 5, 5, 5, 35 )
|
||||
|
||||
TextEntry:StretchToParent( 5, nil, 5, nil )
|
||||
TextEntry:AlignBottom( 5 )
|
||||
|
||||
TextEntry:RequestFocus()
|
||||
TextEntry:SelectAllText( true )
|
||||
|
||||
ButtonPanel:CenterHorizontal()
|
||||
ButtonPanel:AlignBottom( 8 )
|
||||
|
||||
Window:MakePopup()
|
||||
Window:DoModal()
|
||||
|
||||
return Window
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user