local T, C, L = unpack(Tukui) local function AllPoints(obj, frame, inset) obj:ClearAllPoints() if not inset then inset = 0 end obj:SetPoint("TOPLEFT", frame, "TOPLEFT", inset, -inset) obj:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -inset, inset) end local function innerBorder(f) if f.innerborder then f.innerborder:Show() return end f.innerborder = CreateFrame("Frame", nil, f) f.innerborder:SetPoint("TOPLEFT", T.mult, -T.mult) f.innerborder:SetPoint("BOTTOMRIGHT", -T.mult, T.mult) f.innerborder:SetBackdrop({ edgeFile = C["media"].blank, edgeSize = T.mult, insets = { left = T.mult, right = T.mult, top = T.mult, bottom = T.mult } }) f.innerborder:SetBackdropBorderColor(0,0,0) end local function outerBorder(f) if f.outerborder then f.outerborder:Show() return end f.outerborder = CreateFrame("Frame", nil, f) f.outerborder:SetPoint("TOPLEFT", -T.mult, T.mult) f.outerborder:SetPoint("BOTTOMRIGHT", T.mult, -T.mult) f.outerborder:SetBackdrop({ edgeFile = C["media"].blank, edgeSize = T.mult, insets = { left = T.mult, right = T.mult, top = T.mult, bottom = T.mult } }) f.outerborder:SetBackdropBorderColor(0,0,0) end -- hooksecurefunc(f, "SetBackdrop", function(self, ...) -- if backdrop == nil then -- f.innerborder:Hide() -- else -- f.innerborder:Show() -- end -- end) -- hooksecurefunc(f, "SetBackdrop", function(self, ...) -- if backdrop == nil then -- f.outerborder:Hide() -- else -- f.outerborder:Show() -- end -- end) local function ThickBorder(f, force) if f.backdrop and not force then outerBorder(f.backdrop) innerBorder(f.backdrop) else outerBorder(f) innerBorder(f) end end local function AddText(parent, name, text, ...) local globalName = nil if parent:GetName() and name then globalName = (parent:GetName().."_"..name) end local fs = parent:CreateFontString(globalName, "OVERLAY") fs:SetFont(unpack(C.pFont)) if text then fs:SetText(text) end if ... then fs:SetPoint(...) end if not name then parent.text = fs else parent[name] = fs end return fs end --AddEditBox(self[, name], width, height[, point]) local function AddEditBox(self, ...) local vArgs = {...} local name = "editbox" local width, height, point if type(vArgs[1]) == "string" then name, width, height, point = ... else width, height, point = ... end local editbox = CreateFrame("EditBox", nil, self) editbox:SetSize(width, height) editbox:SetTemplate() editbox:ThickBorder() editbox:SetFont(unpack(C.pFont)) editbox:SetTextInsets(3, 0, 0, 1) editbox:SetJustifyH("CENTER") editbox:SetAutoFocus(false) editbox:ClearFocus() editbox:SetScript("OnEscapePressed", function(self) self:ClearFocus() end) editbox:SetScript("OnEditFocusGained", function(self) self:HighlightText() end) editbox:SetScript("OnEditFocusLost", function(self) self:HighlightText(0,0) end) if point then editbox:SetPoint(unpack(point)) end self[name] = editbox end ------------------------------------------------------------------ -- Unitframe Builders -------------------------------------------- ------------------------------------------------------------------ local function AddSpark(self) local sbTexture = self:GetStatusBarTexture() if sbTexture then local spark = self:CreateTexture(nil, "OVERLAY") spark:SetPoint("TOPLEFT", sbTexture, "TOPRIGHT", 0, 0) spark:SetPoint("BOTTOMLEFT", sbTexture, "BOTTOMRIGHT", 0, 0) spark:SetWidth(1) spark:SetTexture(0,0,0) self.spark = spark self:SetScript("OnValueChanged", function(self, value) local minVal, maxVal = self:GetMinMaxValues() if value < minVal+2 or value > maxVal-2 then self.spark:Hide() else self.spark:Show() end end) end end local function CreateFiller(self) if self.fill then return end self.fill = self:CreateTexture(nil, "BACKGROUND") self.fill:SetTexture(C.media.normTex) self.fill:SetVertexColor(1, 1, 1, C.unitframes.fillAlpha) self.fill:SetPoint("TOPLEFT", self:GetStatusBarTexture(), "TOPRIGHT", 0, 0) self.fill:SetPoint("BOTTOMLEFT", self:GetStatusBarTexture(), "BOTTOMLEFT", 0, 0) self.fill:SetPoint("RIGHT", self, 0, 0) end local function AddDetail(self, width, height, ...) local detail = CreateFrame("Frame", self:GetName().."_Detail", self) detail:SetHeight(height) detail:SetWidth(width) if ... then detail:SetPoint(...) end detail:SetTemplate("Transparent") detail:ThickBorder() self.Detail = detail tinsert(self.__elements, T.UpdateDetailColor) T.UpdateDetailColor(self) end local function CreateAltPowerBar(self, width, height, ...) if self.AltPowerBar then return end local varArgs = {...} local bar = CreateFrame("StatusBar", self:GetName() and self:GetName().."_AltPowerBar" or nil, self) bar:Height(4) bar:SetStatusBarTexture(barTex) bar:GetStatusBarTexture():SetHorizTile(false) bar:SetStatusBarColor(unpack(C.unitframes.statusbarcolor)) bar:CreateBackdrop() bar.backdrop:SetBackdropColor(0, 0, 0) bar.backdrop:ThickBorder() bar:CreateFiller() bar:AddSpark() if type(varArgs[1]) == "boolean" then bar:AddText("text", "", "CENTER", bar) tremove(varArgs, 1) end bar:SetPoint(unpack(varArgs)) self.AltPowerBar = bar end local function CreateCastBar(self, width, height, ...) if self.Castbar then return end local varArgs = {...} local castbar = CreateFrame("StatusBar", self:GetName() and self:GetName().."_CastBar" or nil, self) castbar:SetStatusBarTexture(barTex) castbar:CreateBackdrop() castbar.backdrop:SetBackdropColor(0, 0, 0, 0) castbar.backdrop:ThickBorder() castbar:SetHeight(height) castbar:SetWidth(width) castbar:AddSpark() castbar:CreateFiller() castbar:AddText("Time", "", "RIGHT", castbar, "RIGHT", -2, 0) castbar:AddText("Text", "", "LEFT", castbar, "LEFT", 2, 0) if type(varArgs[1]) == "boolean" then castbar.Reverse = varArgs[1] tremove(varArgs, 1) end castbar:SetPoint(unpack(varArgs)) castbar.CustomTimeText = T.CustomCastTimeText castbar.CustomDelayText = T.CustomCastDelayText castbar.PostCastStart = T.CheckCast castbar.PostChannelStart = T.CheckChannel self.Castbar = castbar end -- oUF_AuraTracker local function CreateAuraTracker(self, size, ...) local AuraTracker = CreateFrame("Frame", self:GetName().."_AuraTracker" or nil, self) AuraTracker:SetSize(size, size) AuraTracker:SetPoint(...) AuraTracker:SetTemplate() AuraTracker:ThickBorder() AuraTracker.icon = AuraTracker:CreateTexture(nil, "OVERLAY") AuraTracker.icon:SetAllPoints(AuraTracker) AuraTracker.icon:SetPoint("TOPLEFT", AuraTracker, 1, -1) AuraTracker.icon:SetPoint("BOTTOMRIGHT", AuraTracker, -1, 1) AuraTracker.icon:SetTexCoord(0.08,0.92,0.08,0.92) AuraTracker:AddText("Timer", "", "CENTER", 1, 0) AuraTracker:AddText("Count", "", "BOTTOMRIGHT", -1, 1) AuraTracker:Hide() self.AuraTracker = AuraTracker end local function addapi(object) local mt = getmetatable(object).__index if not object.AllPoints then mt.AllPoints = AllPoints end if not object.ThickBorder then mt.ThickBorder = ThickBorder end if not object.InnerBorder then mt.Innerborder = innerBorder end if not object.OuterBorder then mt.Outerborder = outerBorder end if not object.AddEditBox then mt.AddEditBox = AddEditBox end if not object.AddText then mt.AddText = AddText end if not object.AddSpark then mt.AddSpark = AddSpark end if not object.AddDetail then mt.AddDetail = AddDetail end if not object.CreateFiller then mt.CreateFiller = CreateFiller end if not object.CreateAltPowerBar then mt.CreateAltPowerBar = CreateAltPowerBar end if not object.CreateCastBar then mt.CreateCastBar = CreateCastBar end if not object.CreateAuraTracker then mt.CreateAuraTracker = CreateAuraTracker end end local handled = {["Frame"] = true} local object = CreateFrame("Frame") addapi(object) addapi(object:CreateTexture()) addapi(object:CreateFontString()) object = EnumerateFrames() while object do if not handled[object:GetObjectType()] then addapi(object) handled[object:GetObjectType()] = true end object = EnumerateFrames(object) end