|
|
|
-- __ _ _______ _ __
|
|
|
|
-- / / /\ | | |__ __| | | \ \
|
|
|
|
-- / / / \ | |_ __ ___ | | ___ ___| |__ \ \
|
|
|
|
-- < < / /\ \ | | '_ ` _ \| |/ _ \/ __| '_ \ > >
|
|
|
|
-- \ \ / ____ \| | | | | | | | __/ (__| | | | / /
|
|
|
|
-- \_\ /_/ \_\_|_| |_| |_|_|\___|\___|_| |_| /_/
|
|
|
|
|
|
|
|
local theme ={}
|
|
|
|
local scale = Quantum.Client.ResolutionScale
|
|
|
|
local padding = math.Round( 10 * scale )
|
|
|
|
local padding_s = math.Round( 4 * scale )
|
|
|
|
|
|
|
|
|
|
|
|
local blur = Material("pp/blurscreen")
|
|
|
|
|
|
|
|
function theme.renderblur( p, a, d )
|
|
|
|
local x, y = p:LocalToScreen( 0, 0 )
|
|
|
|
surface.SetDrawColor( 255, 255, 255 )
|
|
|
|
surface.SetMaterial( blur )
|
|
|
|
|
|
|
|
for i = 1, d do
|
|
|
|
blur:SetFloat( "$blur", (i / d) * a )
|
|
|
|
blur:Recompute()
|
|
|
|
render.UpdateScreenEffectTexture()
|
|
|
|
surface.DrawTexturedRect( x * -1, y * -1, ScrW(), ScrH() )
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
function theme.borderpanel( p, color )
|
|
|
|
local w, h = p:GetSize()
|
|
|
|
local clr = color || Color( 20, 20, 20, 100 )
|
|
|
|
|
|
|
|
surface.SetDrawColor( clr )
|
|
|
|
surface.DrawOutlinedRect( 0, 0, w, h )
|
|
|
|
end
|
|
|
|
|
|
|
|
function theme.panel( p, color )
|
|
|
|
local w, h = p:GetSize()
|
|
|
|
local clr = color || Color( 0, 0, 0, 200 )
|
|
|
|
local bclr = Color( 50, 50, 50, 105 )
|
|
|
|
|
|
|
|
draw.RoundedBox( 6, 0, 0, w, h, bclr ) -- border
|
|
|
|
draw.RoundedBox( 4, padding_s/2, padding_s/2, w - padding_s, h - padding_s, clr ) -- inner
|
|
|
|
end
|
|
|
|
|
|
|
|
function theme.blurpanel( p, color )
|
|
|
|
local w, h = p:GetSize()
|
|
|
|
local clr = color || Color( 0, 0, 0, 200 )
|
|
|
|
theme.renderblur( p, 2, 7 )
|
|
|
|
|
|
|
|
surface.SetDrawColor( clr )
|
|
|
|
surface.DrawRect( 0, 0, w, h )
|
|
|
|
end
|
|
|
|
|
|
|
|
function theme.sharpblurpanel( p, color )
|
|
|
|
local w, h = p:GetSize()
|
|
|
|
local clr = color || Color( 0, 0, 0, 200 )
|
|
|
|
surface.SetDrawColor( clr )
|
|
|
|
surface.DrawRect( 0, 0, w, h )
|
|
|
|
theme.renderblur( p, 2, 7 )
|
|
|
|
theme.borderpanel( p, Color( 255, 255, 255, 255 ) )
|
|
|
|
end
|
|
|
|
|
|
|
|
function theme.button( b, color )
|
|
|
|
local w, h = b:GetSize()
|
|
|
|
local clr = color || Color( 235, 64, 52, 255 )
|
|
|
|
local bclr = Color( 50, 50, 50, 255 )
|
|
|
|
|
|
|
|
if( b:IsHovered() ) then
|
|
|
|
bclr = Color( 205, 205, 205, 255 )
|
|
|
|
else
|
|
|
|
bclr = Color( 50, 50, 50, 255 )
|
|
|
|
end
|
|
|
|
draw.RoundedBox( 6, 0, 0, w, h, bclr ) -- border
|
|
|
|
draw.RoundedBox( 4, padding_s/2, padding_s/2, w - padding_s, h - padding_s, clr ) -- inner
|
|
|
|
end
|
|
|
|
|
|
|
|
function theme.sharpbutton( b, inClr, borderAlpha, hoverBorderAlpha )
|
|
|
|
borderAlpha = borderAlpha || 255
|
|
|
|
hoverBorderAlpha = hoverBorderAlpha || borderAlpha
|
|
|
|
local w, h = b:GetSize()
|
|
|
|
inClr = inClr || Color( 235, 64, 52, 255 )
|
|
|
|
|
|
|
|
if( !b:IsHovered() ) then
|
|
|
|
surface.SetDrawColor( 205, 205, 205, borderAlpha )
|
|
|
|
else
|
|
|
|
surface.SetDrawColor( 116, 185, 255, hoverBorderAlpha )
|
|
|
|
end
|
|
|
|
|
|
|
|
surface.DrawOutlinedRect( 0, 0, w, h )
|
|
|
|
|
|
|
|
surface.SetDrawColor( inClr )
|
|
|
|
surface.DrawRect( padding_s/2, padding_s/2, w - padding_s, h - padding_s )
|
|
|
|
end
|
|
|
|
|
|
|
|
function theme.sharpblurrbutton( b, inClr )
|
|
|
|
local w, h = b:GetSize()
|
|
|
|
inClr = inClr || Color( 80, 80, 80, 100 )
|
|
|
|
|
|
|
|
surface.SetDrawColor( inClr )
|
|
|
|
surface.DrawRect( 0, 0, w, h )
|
|
|
|
|
|
|
|
theme.renderblur( b, 4, 8 )
|
|
|
|
|
|
|
|
if( !b:IsHovered() ) then
|
|
|
|
surface.SetDrawColor( 205, 205, 205, 255 )
|
|
|
|
else
|
|
|
|
surface.SetDrawColor( 116, 185, 255, 255 )
|
|
|
|
end
|
|
|
|
surface.DrawOutlinedRect( 0, 0, w, h )
|
|
|
|
end
|
|
|
|
|
|
|
|
function theme.skipbutton( b, inClr )
|
|
|
|
local w, h = b:GetSize()
|
|
|
|
inClr = inClr || Color( 0, 0, 0, 0 )
|
|
|
|
|
|
|
|
if( !b:IsHovered() ) then
|
|
|
|
surface.SetDrawColor( 205, 205, 205, 2 )
|
|
|
|
b:SetTextColor( Color( 255, 255, 255, 2 ) )
|
|
|
|
else
|
|
|
|
surface.SetDrawColor( 120, 120, 120, 255 )
|
|
|
|
b:SetTextColor( Color( 255, 255, 255, 255 ) )
|
|
|
|
end
|
|
|
|
|
|
|
|
surface.DrawOutlinedRect( 0, 0, w, h )
|
|
|
|
|
|
|
|
surface.SetDrawColor( inClr )
|
|
|
|
surface.DrawRect( padding_s/2, padding_s/2, w - padding_s, h - padding_s )
|
|
|
|
end
|
|
|
|
|
|
|
|
function theme.pagetext( p, clr )
|
|
|
|
local w, h = p:GetSize()
|
|
|
|
clr = clr || Color( 205, 205, 205, 255 )
|
|
|
|
|
|
|
|
p:SetTextColor( clr )
|
|
|
|
|
|
|
|
surface.SetDrawColor( Color( 0, 0, 0, 0 ) )
|
|
|
|
surface.DrawRect( 0, 0, w, h )
|
|
|
|
end
|
|
|
|
|
|
|
|
function theme.itempanel( p, rarecolor, disableHover )
|
|
|
|
local w, h = p:GetSize()
|
|
|
|
local icon
|
|
|
|
if( p.icon == nil || !p.icon:IsValid() || !p.icon:IsVisible() ) then
|
|
|
|
icon = p
|
|
|
|
else
|
|
|
|
icon = p.icon
|
|
|
|
end
|
|
|
|
|
|
|
|
surface.SetDrawColor( theme.color.setalpha( rarecolor || Color( 0, 0, 0, 120 ), 150 ) )
|
|
|
|
surface.DrawRect( 0, 0, w, h )
|
|
|
|
|
|
|
|
if( icon:IsHovered() && !disableHover ) then
|
|
|
|
theme.borderpanel( p, Color( 116, 185, 255, 90 ) )
|
|
|
|
else
|
|
|
|
theme.borderpanel( p, Color( 255, 255, 255, 200 ) )
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
function theme.iteminfopanel( p )
|
|
|
|
local w, h = p:GetSize()
|
|
|
|
|
|
|
|
theme.renderblur( p, 4, 5 )
|
|
|
|
|
|
|
|
surface.SetDrawColor( Color( 20, 20, 20, 220 ) )
|
|
|
|
surface.DrawRect( 0, 0, w, h )
|
|
|
|
|
|
|
|
theme.borderpanel( p, Color( 205, 205, 205, 200 ) )
|
|
|
|
end
|
|
|
|
|
|
|
|
function theme.iteminfobutton( b, txtClr )
|
|
|
|
local w, h = b:GetSize()
|
|
|
|
txtClr = txtClr || Color( 255, 255, 255, 255 )
|
|
|
|
|
|
|
|
if( !b:IsHovered() ) then
|
|
|
|
b:SetTextColor( txtClr )
|
|
|
|
else
|
|
|
|
b:SetTextColor( Color( 116, 185, 255, 255 ) )
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
function theme.titleframe( p )
|
|
|
|
local w, h = p:GetSize()
|
|
|
|
theme.renderblur( p, 25, 10 )
|
|
|
|
theme.blurpanel( p, Color( 0, 0, 0, 100 ) )
|
|
|
|
surface.SetDrawColor( 0, 0, 0, 100 )
|
|
|
|
surface.DrawOutlinedRect( -scale*2, 0, w + 4 * scale, h )
|
|
|
|
end
|
|
|
|
|
|
|
|
function theme.fadepanel( p, dir, color, startalpha, intervall )
|
|
|
|
local w, h = p:GetSize()
|
|
|
|
color = color || Color( 0, 0, 0 )
|
|
|
|
local alpha = startalpha || 200
|
|
|
|
dir = dir || 1
|
|
|
|
intervall = intervall || 2
|
|
|
|
|
|
|
|
surface.SetDrawColor( color )
|
|
|
|
surface.SetAlphaMultiplier( 1 )
|
|
|
|
|
|
|
|
if( dir == 1 ) then
|
|
|
|
for iw=1, w, intervall do
|
|
|
|
surface.SetDrawColor( Color( color.r, color.g, color.b, alpha * math.Clamp( (w-(iw-1)) / w, 0, 1 ) ) )
|
|
|
|
surface.DrawRect( iw - 1, 0, intervall, h )
|
|
|
|
end
|
|
|
|
elseif( dir == 2 ) then
|
|
|
|
for iw=1, w, intervall do
|
|
|
|
surface.SetDrawColor( Color( color.r, color.g, color.b, alpha * math.Clamp( (w-(iw-1)) / w, 0, 1 ) ) )
|
|
|
|
surface.DrawRect( w - (iw - 1), 0, intervall, h )
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
function theme.fadepanelborder( p, dir, color, color2, startalpha, intervall )
|
|
|
|
local w, h = p:GetSize()
|
|
|
|
color = color || Color( 0, 0, 0 )
|
|
|
|
color2 = color2 || Color( 0, 0, 0 )
|
|
|
|
local alpha = startalpha || 200
|
|
|
|
dir = dir || 1
|
|
|
|
intervall = intervall || 1
|
|
|
|
|
|
|
|
local ih = 2*scale
|
|
|
|
|
|
|
|
theme.fadepanel( p, dir, color, startalpha, intervall )
|
|
|
|
|
|
|
|
-- border
|
|
|
|
if( dir == 1 ) then
|
|
|
|
for iw=1, w, intervall do
|
|
|
|
surface.SetDrawColor( Color( color2.r, color2.g, color2.b, alpha * math.Clamp( (w-(iw-1)) / w, 0, 1 ) ) )
|
|
|
|
|
|
|
|
surface.DrawRect( iw - 1, 0, intervall, ih )
|
|
|
|
surface.DrawRect( iw - 1, h - ih/2, intervall, ih )
|
|
|
|
end
|
|
|
|
elseif( dir == 2 ) then
|
|
|
|
for iw=1, w, intervall do ------------------- NOT DONE
|
|
|
|
surface.SetDrawColor( Color( color2.r, color2.g, color2.b, alpha * math.Clamp( (w-(iw-1)) / w, 0, 1 ) ) )
|
|
|
|
surface.DrawRect( w - (iw - 1), 0, intervall, 2 )
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
function theme.fadebutton( b, dir, inColor, font, txtColor )
|
|
|
|
local w, h = b:GetSize()
|
|
|
|
local brdColor = Color( 0, 0, 0 )
|
|
|
|
inColor = inColor || Color( 0, 0, 0, 100 )
|
|
|
|
|
|
|
|
if( !b:IsHovered() ) then
|
|
|
|
brdColor = Color( 0, 0, 0 )
|
|
|
|
else
|
|
|
|
brdColor = Color( 116, 185, 255 )
|
|
|
|
end
|
|
|
|
theme.fadepanelborder( b, dir, Color( brdColor.r * 0.4, brdColor.g * 0.4, brdColor.b * 0.4 ) , brdColor )
|
|
|
|
|
|
|
|
-- render the text
|
|
|
|
local txt = b.txt || "ERROR txt=nil"
|
|
|
|
surface.SetFont( font || "Default" )
|
|
|
|
surface.SetTextColor( txtColor || Color( 255, 255, 255, 255 ) )
|
|
|
|
local tw, th = surface.GetTextSize( txt )
|
|
|
|
surface.SetTextPos( w/8, h/2 - th/2 )
|
|
|
|
surface.DrawText( txt )
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
function theme.dialogueBox( p )
|
|
|
|
local w, h = p:GetSize()
|
|
|
|
-- background blur
|
|
|
|
theme.renderblur( p, 2, 7 )
|
|
|
|
|
|
|
|
-- background
|
|
|
|
surface.SetDrawColor( 20, 20, 20, 220 )
|
|
|
|
surface.DrawRect( 0, 0, w, h )
|
|
|
|
|
|
|
|
-- outline
|
|
|
|
surface.SetDrawColor( 220, 220, 220, 60)
|
|
|
|
surface.DrawOutlinedRect( 0, 0, w, h )
|
|
|
|
end
|
|
|
|
|
|
|
|
---- Color Manipulation ----
|
|
|
|
theme.color = {}
|
|
|
|
|
|
|
|
function theme.color.setalpha( color, alpha )
|
|
|
|
return Color( color.r, color.g, color.b, alpha )
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
return theme
|