diff --git a/modules/bubbles.lua b/modules/bubbles.lua new file mode 100644 index 0000000..61f9e99 --- /dev/null +++ b/modules/bubbles.lua @@ -0,0 +1,72 @@ +pfUI:RegisterModule("bubbles", "vanilla:tbc", function () + + local alpha = tonumber(C.chat.bubbles.alpha) + + pfUI.bubbles = CreateFrame("Frame", "pfChatBubbles", UIParent) + pfUI.bubbles:RegisterEvent("CHAT_MSG_SAY") + pfUI.bubbles:RegisterEvent("CHAT_MSG_YELL") + pfUI.bubbles:RegisterEvent("CHAT_MSG_PARTY") + pfUI.bubbles:RegisterEvent("CHAT_MSG_PARTY_LEADER") + pfUI.bubbles:RegisterEvent("CHAT_MSG_MONSTER_SAY") + pfUI.bubbles:RegisterEvent("CHAT_MSG_MONSTER_YELL") + pfUI.bubbles:RegisterEvent("CHAT_MSG_MONSTER_PARTY") + + pfUI.bubbles:SetScript("OnEvent", function() + pfUI.bubbles:SetScript("OnUpdate", pfUI.bubbles.ScanBubbles) + end) + + function pfUI.bubbles:IsBubble(f) + if f:GetName() then return end + if not f:GetRegions() then return end + return f:GetRegions().GetTexture and f:GetRegions():GetTexture() == "Interface\\Tooltips\\ChatBubble-Background" + end + + function pfUI.bubbles:ProcessBubble(f) + f.text:Hide() + f.text:SetFont(pfUI.font_default, tonumber(C.global.font_size) * UIParent:GetScale(), "OUTLINE") + local r,g,b,a = f.text:GetTextColor() + f.frame.text:SetText(f.text:GetText()) + f.frame.text:SetTextColor(r,g,b,a) + local border_alpha = C.chat.bubbles.borders == "1" and a or 0 + f.frame.backdrop:SetBackdropBorderColor(r,g,b,border_alpha) + end + + function pfUI.bubbles:ScanBubbles() + local childs = { WorldFrame:GetChildren() } + for _, f in pairs(childs) do + if not f.frame and pfUI.bubbles:IsBubble(f) then + local textures = {f:GetRegions()} + for _, object in pairs(textures) do + if object:GetObjectType() == "Texture" then + object:SetTexture('') + elseif object:GetObjectType() == 'FontString' then + f.text = object + end + end + + f.frame = CreateFrame("Frame", nil, f) + f.frame:SetScale(UIParent:GetScale()) + f.frame:SetAllPoints(f) + + f.frame.text = f.frame:CreateFontString(nil, "OVERLAY", "GameFontNormal") + f.frame.text:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE") + f.frame.text:SetJustifyH("CENTER") + f.frame.text:SetJustifyV("CENTER") + f.frame.text:SetAllPoints(f.frame) + + CreateBackdrop(f.frame, nil, nil, alpha) + CreateBackdropShadow(f.frame) + f.frame.backdrop:SetPoint("TOPLEFT", f, "TOPLEFT", -10, -10) + f.frame.backdrop:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", 10, 10) + + pfUI.bubbles:ProcessBubble(f) + + f:SetScript("OnShow", function() + pfUI.bubbles:ProcessBubble(this) + end) + end + end + + pfUI.bubbles:SetScript("OnUpdate", nil) + end +end)