local A, L = ... L.HiddenFrame = CreateFrame('Frame') L.HiddenFrame:Hide() --CreateBackdrop local function CreateBackdrop(self, relativeTo, anotherBackdrop) local backdrop = anotherBackdrop or L.C.backdrop local parent = self.IsObjectType and self:IsObjectType('Texture') and self:GetParent() or self local bd = CreateFrame("Frame", nil, parent, BackdropTemplateMixin and "BackdropTemplate") if (parent:GetFrameLevel() - 1) >= 0 then bd:SetFrameLevel(parent:GetFrameLevel() - 1) else bd:SetFrameLevel(0) end bd:SetPoint("TOPLEFT", relativeTo or self, "TOPLEFT", -backdrop.inset, backdrop.inset) bd:SetPoint("BOTTOMRIGHT", relativeTo or self, "BOTTOMRIGHT", backdrop.inset, -backdrop.inset) bd:SetBackdrop(backdrop) bd:SetBackdropColor(unpack(backdrop.bgColor)) bd:SetBackdropBorderColor(unpack(backdrop.edgeColor)) return bd end L.CreateBackdrop = CreateBackdrop --From http://wow.gamepedia.com/UI_coordinates local function FramesOverlap(frameA, frameB) if not frameA or not frameB then return end local sA, sB = frameA:GetEffectiveScale(), frameB:GetEffectiveScale() if not sA or not sB then return end local frameALeft, frameARight, frameABottom, frameATop = frameA:GetLeft(), frameA:GetRight(), frameA:GetBottom(), frameA:GetTop() local frameBLeft, frameBRight, frameBBottom, frameBTop = frameB:GetLeft(), frameB:GetRight(), frameB:GetBottom(), frameB:GetTop() if not (frameALeft and frameARight and frameABottom and frameATop) then return end if not (frameBLeft and frameBRight and frameBBottom and frameBTop) then return end return ((frameALeft*sA) < (frameBRight*sB)) and ((frameBLeft*sB) < (frameARight*sA)) and ((frameABottom*sA) < (frameBTop*sB)) and ((frameBBottom*sB) < (frameATop*sA)) end L.FramesOverlap = FramesOverlap local function Kill(object) if object.UnregisterAllEvents then object:UnregisterAllEvents() object:SetParent(L.HiddenFrame) else object.Show = object.Hide end object:Hide() end L.Kill = Kill --SetPoint local function SetPoint(self,relativeTo,point) --adjut the setpoint function to make it possible to reference a relativeTo object that is set on runtime and it not available on config init local a,b,c,d,e = unpack(point) if not b then self:SetPoint(a) elseif b and type(b) == "string" and not _G[b] then self:SetPoint(a,relativeTo,b,c,d) else self:SetPoint(a,b,c,d,e) end end L.SetPoint = SetPoint --CreateIcon local function CreateIcon(self,layer) local icon = self:CreateTexture(nil,layer) icon:SetAllPoints() return icon end L.CreateIcon = CreateIcon local function StripTextures(self, kill) for i = 1, self:GetNumRegions() do local Region = select(i, self:GetRegions()) if (Region and Region:GetObjectType() == "Texture") then if (kill and type(kill) == "boolean") then L.Kill(Region) elseif (Region:GetDrawLayer() == kill) then Region:SetTexture(nil) elseif (kill and type(kill) == "string" and Region:GetTexture() ~= kill) then Region:SetTexture(nil) else Region:SetTexture(nil) end end end end L.StripTextures = StripTextures --RGB to Hex local function RGBToHex(r, g, b, header, ending) r = r <= 1 and r >= 0 and r or 1 g = g <= 1 and g >= 0 and g or 1 b = b <= 1 and b >= 0 and b or 1 return format('%s%02x%02x%02x%s', header or '|cff', r*255, g*255, b*255, ending or '') end L.RGBToHex = RGBToHex