# Draw function only working on one panel at a time

http://img192.imageshack.us/img192/263/gmconstruct0025j.jpg

Why does it only work for one panel on the screen at a time?

[lua]

function draw.DrawStripyBox( x, y, w, h, numx, numy, col1, col2 )

``````local is_col1 = true

local xsp = w / numx
local ysp = h / numy

local firstcorner = { {}, {}, {} }

firstcorner[ 1 ][ "x" ] = x
firstcorner[ 1 ][ "y" ] = y

firstcorner[ 2 ][ "x" ] = x + xsp
firstcorner[ 2 ][ "y" ] = y

firstcorner[ 3 ][ "x" ] = x
firstcorner[ 3 ][ "y" ] = y + ysp

surface.SetDrawColor( col2 )
surface.DrawPoly( firstcorner )

for i = 1, numx - 1, 1 do

local vertexdata = { {}, {}, {}, {} }

vertexdata[ 1 ][ "x" ] = x + ( i * xsp )
vertexdata[ 1 ][ "y" ] = y

vertexdata[ 2 ][ "x" ] = x + ( ( i + 1 ) * xsp )
vertexdata[ 2 ][ "y" ] = y

vertexdata[ 3 ][ "x" ] = x
vertexdata[ 3 ][ "y" ] = y + ( ( i + 1 ) * ysp )

vertexdata[ 4 ][ "x" ] = x
vertexdata[ 4 ][ "y" ] = y + ( i * ysp )

surface.SetDrawColor( ( is_col1 and col1 ) or col2 )
surface.DrawPoly( vertexdata )

is_col1 = not is_col1

end

for i = 1, numy - 1, 1 do

local vertexdata = { {}, {}, {}, {} }

vertexdata[ 1 ][ "x" ] = ( x + w ) - i * xsp
vertexdata[ 1 ][ "y" ] = y + h

vertexdata[ 2 ][ "x" ] = ( x + w ) - ( i + 1 ) * xsp
vertexdata[ 2 ][ "y" ] = y + h

vertexdata[ 3 ][ "x" ] = x + w
vertexdata[ 3 ][ "y" ] = ( y + h ) - ( i + 1 ) * ysp

vertexdata[ 4 ][ "x" ] = x + w
vertexdata[ 4 ][ "y" ] = ( y + h ) - i * ysp

surface.SetDrawColor( ( is_col1 and col1 ) or col2 )
surface.DrawPoly( vertexdata )

is_col1 = not is_col1

end

local lastcorner = { {}, {}, {} }

lastcorner[ 1 ][ "x" ] = x + w
lastcorner[ 1 ][ "y" ] = y + h

lastcorner[ 2 ][ "x" ] = x + w - xsp
lastcorner[ 2 ][ "y" ] = y + h

lastcorner[ 3 ][ "x" ] = x + w
lastcorner[ 3 ][ "y" ] = y + h - ysp

surface.SetDrawColor( col1 )
surface.DrawPoly( lastcorner )
``````

end

function test( title, x, y )

``````local pnl = vgui.Create( "DFrame" )
pnl:SetTitle( title )
pnl:SetSize( x, y )
pnl:Center()
function pnl:Paint()

surface.SetDrawColor( Color( 0, 0, 0, 155 ) )
draw.DrawStripyBox( 0, 0, self:GetWide(), self:GetTall(), x/10, y/10, Color( 0, 0, 0, 200 ), Color( 51, 58, 51, 155 ) )
surface.DrawOutlinedRect( 0, 0, self:GetWide(), self:GetTall() )

end
``````

end
[/lua]

The problem was that only the DFrame that had focus drawed the pattern. From this I considered the option that a different function was called when the DFrame doesnâ€™t have focus.

With a bit of testing, I was right. This line fixed it:
[lua]pnl.PaintOver = pnl.Paint[/lua]

You should not use using polys for that, once DrawTexturedRectUV is fixed you should use a texture since this would be a way less resource intensive.