local E, L, V, P, G = unpack(select(2, ...)); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB local AB = E:GetModule("ActionBars") --Lua functions local _G = _G --WoW API / Variables local CreateFrame = CreateFrame local InCombatLockdown = InCombatLockdown local RegisterStateDriver = RegisterStateDriver local MICRO_BUTTONS = { "CharacterMicroButton", "SpellbookMicroButton", "TalentMicroButton", "AchievementMicroButton", "QuestLogMicroButton", "SocialsMicroButton", "PVPMicroButton", "LFDMicroButton", "ChallengesMicroButton", "MainMenuMicroButton", "HelpMicroButton" } local function onEnter(button) if AB.db.microbar.mouseover then E:UIFrameFadeIn(ElvUI_MicroBar, 0.2, ElvUI_MicroBar:GetAlpha(), AB.db.microbar.alpha) end if button and button ~= ElvUI_MicroBar and button.backdrop then button.backdrop:SetBackdropBorderColor(unpack(E.media.rgbvaluecolor)) end end local function onLeave(button) if AB.db.microbar.mouseover then E:UIFrameFadeOut(ElvUI_MicroBar, 0.2, ElvUI_MicroBar:GetAlpha(), 0) end if button and button ~= ElvUI_MicroBar and button.backdrop then button.backdrop:SetBackdropBorderColor(unpack(E.media.bordercolor)) end end function AB:HandleMicroButton(button) local pushed = button:GetPushedTexture() local normal = button:GetNormalTexture() local disabled = button:GetDisabledTexture() local f = CreateFrame("Frame", nil, button) f:SetFrameLevel(button:GetFrameLevel() - 1) f:SetTemplate("Default", true) f:SetOutside(button) button.backdrop = f button:SetParent(ElvUI_MicroBar) button:GetHighlightTexture():Kill() button:HookScript("OnEnter", onEnter) button:HookScript("OnLeave", onLeave) button:SetHitRectInsets(0, 0, 0, 0) button:Show() pushed:SetTexCoord(0.17, 0.87, 0.5, 0.908) pushed:SetInside(f) normal:SetTexCoord(0.17, 0.87, 0.5, 0.908) normal:SetInside(f) if disabled then disabled:SetTexCoord(0.17, 0.87, 0.5, 0.908) disabled:SetInside(f) end end function AB:UpdateMicroButtonsParent() if CharacterMicroButton:GetParent() == ElvUI_MicroBar then return end for i = 1, #MICRO_BUTTONS do _G[MICRO_BUTTONS[i]]:SetParent(ElvUI_MicroBar) end AB:UpdateMicroPositionDimensions() end function AB:UpdateMicroBarVisibility() if InCombatLockdown() then AB.NeedsUpdateMicroBarVisibility = true self:RegisterEvent("PLAYER_REGEN_ENABLED") return end local visibility = self.db.microbar.visibility if visibility and string.match(visibility, "[\n\r]") then visibility = string.gsub(visibility, "[\n\r]", "") end RegisterStateDriver(ElvUI_MicroBar.visibility, "visibility", (self.db.microbar.enabled and visibility) or "hide") end function AB:UpdateMicroPositionDimensions() if not ElvUI_MicroBar then return end local numRows = 1 local prevButton = ElvUI_MicroBar local offset = E:Scale(E.PixelMode and 1 or 3) local spacing = E:Scale(offset + self.db.microbar.buttonSpacing) for i = 1, #MICRO_BUTTONS do local button = _G[MICRO_BUTTONS[i]] local lastColumnButton = i - self.db.microbar.buttonsPerRow lastColumnButton = _G[MICRO_BUTTONS[lastColumnButton]] button:Size(self.db.microbar.buttonSize, self.db.microbar.buttonSize * 1.4) button:ClearAllPoints() if prevButton == ElvUI_MicroBar then button:Point("TOPLEFT", prevButton, "TOPLEFT", offset, -offset) elseif (i - 1) % self.db.microbar.buttonsPerRow == 0 then button:Point("TOP", lastColumnButton, "BOTTOM", 0, -spacing) numRows = numRows + 1 else button:Point("LEFT", prevButton, "RIGHT", spacing, 0) end prevButton = button end if AB.db.microbar.mouseover and not ElvUI_MicroBar:IsMouseOver() then ElvUI_MicroBar:SetAlpha(0) else ElvUI_MicroBar:SetAlpha(self.db.microbar.alpha) end AB.MicroWidth = (((CharacterMicroButton:GetWidth() + spacing) * self.db.microbar.buttonsPerRow) - spacing) + (offset * 2) AB.MicroHeight = (((CharacterMicroButton:GetHeight() + spacing) * numRows) - spacing) + (offset * 2) ElvUI_MicroBar:Size(AB.MicroWidth, AB.MicroHeight) if ElvUI_MicroBar.mover then if self.db.microbar.enabled then E:EnableMover(ElvUI_MicroBar.mover:GetName()) else E:DisableMover(ElvUI_MicroBar.mover:GetName()) end end self:UpdateMicroBarVisibility() end function AB:UpdateMicroButtons() -- PvP Micro Button PVPMicroButtonTexture:Point("TOPLEFT", PVPMicroButton, "TOPLEFT") PVPMicroButtonTexture:Point("BOTTOMRIGHT", PVPMicroButton, "BOTTOMRIGHT") PVPMicroButtonTexture:SetTexture("Interface\\AddOns\\ElvUI\\media\\textures\\PVP-Icons") if E.mylevel < PVPMicroButton.minLevel then PVPMicroButtonTexture:SetDesaturated(true) else PVPMicroButtonTexture:SetDesaturated(false) end self:UpdateMicroPositionDimensions() end function AB:SetupMicroBar() local microBar = CreateFrame("Frame", "ElvUI_MicroBar", E.UIParent) microBar:Point("TOPLEFT", E.UIParent, "TOPLEFT", 4, -4) microBar:SetFrameStrata("LOW") microBar:EnableMouse(true) microBar:SetScript("OnEnter", onEnter) microBar:SetScript("OnLeave", onLeave) microBar.visibility = CreateFrame("Frame", nil, E.UIParent, "SecureHandlerStateTemplate") microBar.visibility:SetScript("OnShow", function() microBar:Show() end) microBar.visibility:SetScript("OnHide", function() microBar:Hide() end) for i = 1, #MICRO_BUTTONS do self:HandleMicroButton(_G[MICRO_BUTTONS[i]]) end MicroButtonPortrait:SetInside(CharacterMicroButton.backdrop) if E.myfaction == "Alliance" then PVPMicroButtonTexture:SetTexCoord(0.545, 0.935, 0.070, 0.940) else PVPMicroButtonTexture:SetTexCoord(0.100, 0.475, 0.070, 0.940) end self:SecureHook("VehicleMenuBar_MoveMicroButtons", "UpdateMicroButtonsParent") self:SecureHook("UpdateMicroButtons") self:UpdateMicroPositionDimensions() MainMenuBarPerformanceBar:Kill() E:CreateMover(microBar, "MicrobarMover", L["Micro Bar"], nil, nil, nil, "ALL,ACTIONBARS", nil, "actionbar,microbar") end