77 lines
1.2 KiB
Lua
77 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")
|