Revision Difference
Panel:GetHTMLMaterial#510528
<function name="GetHTMLMaterial" parent="Panel" type="classfunc">⤶
<description>Returns the panel's HTML material. Only works with <page>Awesomium</page>, <page>HTML</page> and <page>DHTML</page> panels that have been fully loaded.</description>⤶
<realm>Client</realm>⤶
<rets>⤶
<ret name="" type="IMaterial">The HTML material used by the panel. Typically starts with "__vgui_texture_" followed by an incremental number.</ret>⤶
</rets>⤶
</function>⤶
⤶
<example>⤶
<description>Defines a new entity which can display a web page on a TV screen.</description>⤶
<code>⤶
AddCSLuaFile()⤶
⤶
ENT.Type = "anim"⤶
ENT.Base = "base_entity"⤶
⤶
ENT.PrintName = "Web Screen"⤶
ENT.Author = "Microflash"⤶
ENT.Spawnable = true⤶
⤶
if ( CLIENT ) then⤶
ENT.Mat = nil⤶
ENT.Panel = nil⤶
end⤶
⤶
function ENT:Initialize()⤶
⤶
if ( SERVER ) then⤶
⤶
self:SetModel("models/props_phx/rt_screen.mdl")⤶
self:SetMoveType(MOVETYPE_VPHYSICS)⤶
self:SetSolid(SOLID_VPHYSICS)⤶
⤶
self:PhysicsInit(SOLID_VPHYSICS)⤶
⤶
self:Freeze()⤶
⤶
else⤶
⤶
-- Reset material and panel and load DHTML panel⤶
self.Mat = nil⤶
self.Panel = nil⤶
self:OpenPage()⤶
⤶
end⤶
⤶
end⤶
⤶
function ENT:Freeze()⤶
local phys = self:GetPhysicsObject()⤶
if (IsValid(phys)) then phys:EnableMotion(false) end⤶
end⤶
⤶
-- Load the DHTML reference panel⤶
function ENT:OpenPage()⤶
⤶
-- Iff for some reason a panel is already loaded, delete it⤶
if(self.Panel) then⤶
⤶
self.Panel:Remove()⤶
self.Panel = nil⤶
⤶
end⤶
⤶
-- Create a web page panel and fill the entire screen⤶
self.Panel = vgui.Create("DHTML")⤶
self.Panel:Dock(FILL)⤶
⤶
-- Wiki page URL⤶
local url = &lt;nowiki&gt;"/Category:Material"&lt;/nowiki&gt;⤶
⤶
-- Load the wiki page⤶
self.Panel:OpenURL(url)⤶
⤶
-- Hide the panel⤶
self.Panel:SetAlpha(0)⤶
self.Panel:SetMouseInputEnabled(false)⤶
⤶
-- Disable HTML messages⤶
function self.Panel:ConsoleMessage(msg) end⤶
⤶
end⤶
⤶
function ENT:Draw()⤶
⤶
-- Iff the material has already been grabbed from the panel⤶
if(self.Mat) then⤶
⤶
-- Apply it to the screen/model⤶
if(render.MaterialOverrideByIndex) then⤶
render.MaterialOverrideByIndex(1, self.Mat)⤶
else⤶
render.ModelMaterialOverride(self.Mat)⤶
end⤶
⤶
-- Otherwise, check that the panel is valid and the HTML material is finished loading⤶
elseif(self.Panel && self.Panel:GetHTMLMaterial()) then⤶
⤶
-- Get the html material⤶
local html_mat = self.Panel:GetHTMLMaterial()⤶
⤶
-- Used to make the material fit the model screen⤶
-- May need to be changed iff using a different model⤶
-- For the multiplication number it goes in segments of 512⤶
-- Based off the players screen resolution⤶
local scale_x, scale_y = ScrW()/2048, ScrH()/1024⤶
⤶
-- Create a new material with the proper scaling and shader⤶
local matdata =⤶
{⤶
["$basetexture"]=html_mat:GetName(),⤶
["$basetexturetransform"]="center 0 0 scale "..scale_x.." "..scale_y.." rotate 0 translate 0 0",⤶
["$model"]=1⤶
}⤶
-- Unique ID used for material name⤶
local uid = string.Replace(html_mat:GetName(), "__vgui_texture_", "")⤶
⤶
-- Create the model material⤶
self.Mat = CreateMaterial("WebMaterial_"..uid, "VertexLitGeneric", matdata)⤶
⤶
end⤶
⤶
-- Render the model⤶
self:DrawModel()⤶
⤶
-- Reset the material override or else everything will have a HTML material!⤶
render.ModelMaterialOverride(nil)⤶
⤶
end⤶
⤶
function ENT:OnRemove()⤶
-- Make sure the panel is removed too⤶
if(self.Panel) then self.Panel:Remove() end⤶
end⤶
</code>⤶
<output></output>⤶
⤶
</example>