Quantcast
--[[
##########################################################
S V U I   By: Failcoder
##########################################################
LOCALIZED LUA FUNCTIONS
##########################################################
]]--
--[[ GLOBALS ]]--
local _G = _G;
local unpack 	= _G.unpack;
local select 	= _G.select;
local pairs 	= _G.pairs;
local ipairs 	= _G.ipairs;
local type 		= _G.type;
--[[
##########################################################
GET ADDON DATA
##########################################################
]]--
local SV = _G['SVUI']
local L = SV.L;
local MOD = SV.Chat;
--[[
##########################################################
CHAT BUBBLES
##########################################################
]]--
function MOD:LoadChatBubbles()
	if(SV.db.Chat.bubbles == true) then
		local ChatBubbleHandler = CreateFrame("Frame", nil, UIParent)

		local function _style(frame)
			if(frame:GetName() or (not frame:GetRegions())) then return end
			local backdrop = frame:GetBackdrop()
			if((not backdrop) or (not backdrop.bgFile) or (not backdrop.bgFile:find('ChatBubble'))) then return end
			local needsUpdate = true;
			for i = 1, frame:GetNumRegions() do
				local region = select(i, frame:GetRegions())
				if region:GetObjectType() == "Texture" then
					if(region:GetTexture() == [[Interface\Tooltips\ChatBubble-Background]]) then
						region:SetTexture([[Interface\AddOns\SVUI_Chat\assets\CHATBUBBLE-BG]])
						needsUpdate = false
					elseif(region:GetTexture() == [[Interface\Tooltips\ChatBubble-Backdrop]]) then
						region:SetTexture([[Interface\AddOns\SVUI_Chat\assets\CHATBUBBLE-BACKDROP]])
						needsUpdate = false
					elseif(region:GetTexture() == [[Interface\Tooltips\ChatBubble-Tail]]) then
						region:SetTexture([[Interface\AddOns\SVUI_Chat\assets\CHATBUBBLE-TAIL]])
						needsUpdate = false
					else
						region:SetTexture("")
					end
				elseif(region:GetObjectType() == "FontString" and not frame.text) then
					frame.text = region
				end
			end
			if needsUpdate then
				frame:SetBackdrop(nil);
				frame:SetClampedToScreen(false)
				frame:SetFrameStrata("BACKGROUND")
			end
			if(frame.text) then
				frame.text:SetFontObject(SVUI_Font_Default)
				frame.text:SetShadowColor(0,0,0,1)
				frame.text:SetShadowOffset(1,-1)
			end
		end

		local timer,total = 0,0;
		ChatBubbleHandler:SetScript("OnUpdate", function(self, elapsed)
			timer = timer + elapsed
			if timer > 0.1 then
				timer = 0
				local current = WorldFrame:GetNumChildren();
				if current ~= total then
					for i = total + 1, current do _style(select(i, WorldFrame:GetChildren())) end
					total = current
				end
			end
		end)
	end
end