Garry's Mod Wiki

Revision Difference

Panel_Customization#510760

<cat>Dev.UI</cat>⤶ Sometimes you may wish to create a custom VGUI Panel for an addon or gamemode.⤶ ⤶ # Create a Table ⤶ The first step in creating a custom VGUI Panel is to create a table.⤶ ⤶ ```⤶ local PANEL = {}⤶ ```⤶ ⤶ ⤶ # Then Add Functions ⤶ We can give our table a function so Garry's Mod knows what to do to it when it's initialized.⤶ ⤶ ```⤶ function PANEL:Init()⤶ self:SetSize( 100, 100 )⤶ self:Center()⤶ end⤶ ```⤶ ⤶ We use **`self:SetSize( 100, 100 )**` to set the size of our panel to 100 pixels wide and 100 pixels tall. **`self:Center()**` centers our panel in the middle of our parent (if no parent is given it will center the panel in the middle of the screen).⤶ ⤶ We can also give our table a function to tell Garry's Mod what we should do when we want to paint the panel on the screen.⤶ ⤶ ```⤶ function PANEL:Paint( w, h )⤶ draw.RoundedBox( 0, 0, 0, w, h, Color(0,0,0,255) )⤶ end⤶ ```⤶ ⤶ In this function we call **`draw.RoundedBox(..)**` to draw our panel with the dimensions defined in **`self:SetSize()**`. We start at 0,0 because this is the top-most-left-most point in our panel.⤶ ⤶ # Finally We Register ⤶ The final step in creating a custom VGUI Panel is to [register the table](/gmod/vgui/Register).⤶ ⤶ ```⤶ vgui.Register( "MyFirstPanel", PANEL, "Panel" )⤶ ```⤶ ⤶ Where;⤶ **`"MyFirstPanel"**` is the desired name of your panel to be used when you wish to create it. **`PANEL**` is the table we have created and **`"Panel"**` is the type of element you wish to use as a base. ⤶ ⤶ # Result⤶ ⤶ You can now create your custom panel by using⤶ ⤶ ⤶ ```⤶ local pnl = vgui.Create( "MyFirstPanel", parentpanel )⤶ ```⤶ ⤶ ⤶ or⤶ ⤶ ⤶ ```⤶ local pnl = parentpanel:Add( "MyFirstPanel" )⤶ ```⤶ ⤶ ⤶ # Complete Code ⤶ ⤶ ⤶ ```⤶ local PANEL = {}⤶ ⤶ function PANEL:Init()⤶ self:SetSize( 100, 100 )⤶ self:Center()⤶ end⤶ ⤶ function PANEL:Paint( w, h )⤶ draw.RoundedBox( 0, 0, 0, w, h, Color(0,0,0,255) )⤶ end⤶ ⤶ vgui.Register( "MyFirstPanel", PANEL, "Panel" )⤶ ```⤶ ⤶ ⤶ ⤶ ⤶