78 lines
1.2 KiB
Lua
78 lines
1.2 KiB
Lua
|
local PANEL = {}
|
||
|
|
||
|
function PANEL:PaintAt( x, y, dw, dh )
|
||
|
|
||
|
self:LoadMaterial()
|
||
|
|
||
|
if ( !self.m_Material ) then return true end
|
||
|
|
||
|
surface.SetMaterial( self.m_Material )
|
||
|
surface.SetDrawColor( self.m_Color.r, self.m_Color.g, self.m_Color.b, self.m_Color.a )
|
||
|
|
||
|
if ( self:GetKeepAspect() ) then
|
||
|
|
||
|
local w = self.ActualWidth
|
||
|
local h = self.ActualHeight
|
||
|
|
||
|
-- Image is bigger than panel, shrink to suitable size
|
||
|
if ( w > dw && h > dh ) then
|
||
|
|
||
|
if ( w > dw ) then
|
||
|
|
||
|
local diff = dw / w
|
||
|
w = w * diff
|
||
|
h = h * diff
|
||
|
|
||
|
end
|
||
|
|
||
|
if ( h > dh ) then
|
||
|
|
||
|
local diff = dh / h
|
||
|
w = w * diff
|
||
|
h = h * diff
|
||
|
|
||
|
end
|
||
|
|
||
|
end
|
||
|
|
||
|
if ( w < dw ) then
|
||
|
|
||
|
local diff = dw / w
|
||
|
w = w * diff
|
||
|
h = h * diff
|
||
|
|
||
|
end
|
||
|
|
||
|
if ( h < dh ) then
|
||
|
|
||
|
local diff = dh / h
|
||
|
w = w * diff
|
||
|
h = h * diff
|
||
|
|
||
|
end
|
||
|
|
||
|
local OffX = (dw - w) * 0.5
|
||
|
local OffY = (dh - h) * 0.5
|
||
|
|
||
|
surface.DrawTexturedRect( OffX+x, OffY+y, w, h )
|
||
|
|
||
|
return true
|
||
|
|
||
|
end
|
||
|
|
||
|
|
||
|
surface.DrawTexturedRectRotated( x + dw / 2, y + dh / 2, dw, dh, self:GetRotation() )
|
||
|
return true
|
||
|
|
||
|
end
|
||
|
|
||
|
function PANEL:SetRotation(m)
|
||
|
self.m_Rotation = m
|
||
|
end
|
||
|
|
||
|
function PANEL:GetRotation()
|
||
|
return self.m_Rotation or 0
|
||
|
end
|
||
|
|
||
|
vgui.Register("DEXRotatedImage", PANEL, "DImage")
|