diff --git a/WeakAuras/Compatibility.lua b/WeakAuras/Compatibility.lua index 2cb1782..e69de29 100644 --- a/WeakAuras/Compatibility.lua +++ b/WeakAuras/Compatibility.lua @@ -1,9 +0,0 @@ --- Fix FrameStrata of ChatFrame -for i = 1, NUM_CHAT_WINDOWS do - local chatFrame = _G["ChatFrame" .. i] - if chatFrame and type(chatFrame.GetFrameStrata) == "function" and type(chatFrame.SetFrameStrata) == "function" then - if chatFrame:GetFrameStrata() == "BACKGROUND" then - chatFrame:SetFrameStrata("MEDIUM") - end - end -end diff --git a/WeakAuras/RegionTypes/DynamicGroup.lua b/WeakAuras/RegionTypes/DynamicGroup.lua index f6b705e..1814c8e 100644 --- a/WeakAuras/RegionTypes/DynamicGroup.lua +++ b/WeakAuras/RegionTypes/DynamicGroup.lua @@ -41,7 +41,8 @@ local default = { centerType = "LR", gridWidth = 5, rowSpace = 1, - columnSpace = 1 + columnSpace = 1, + sharedFrameLevel = true, -- true to ensure identical behavior on newer clients } Private.regionPrototype.AddAlphaToDefault(default); diff --git a/WeakAuras/RegionTypes/Group.lua b/WeakAuras/RegionTypes/Group.lua index fabf603..4cf9d63 100644 --- a/WeakAuras/RegionTypes/Group.lua +++ b/WeakAuras/RegionTypes/Group.lua @@ -21,6 +21,7 @@ local default = { borderSize = 2, borderBackdrop = "Blizzard Tooltip", scale = 1, + sharedFrameLevel = true, -- true to ensure identical behavior on newer clients }; Private.regionPrototype.AddAlphaToDefault(default); diff --git a/WeakAuras/WeakAuras.lua b/WeakAuras/WeakAuras.lua index d436ed1..3cbc877 100644 --- a/WeakAuras/WeakAuras.lua +++ b/WeakAuras/WeakAuras.lua @@ -1244,7 +1244,7 @@ end local WeakAurasFrame = CreateFrame("Frame", "WeakAurasFrame", UIParent); Private.frames["WeakAuras Main Frame"] = WeakAurasFrame; WeakAurasFrame:SetAllPoints(UIParent); -WeakAurasFrame:SetFrameStrata("BACKGROUND"); +WeakAurasFrame:SetFrameLevel(0) local loadedFrame = CreateFrame("Frame"); Private.frames["Addon Initialization Handler"] = loadedFrame; @@ -4159,56 +4159,55 @@ function Private.ValueToPath(data, path, value) end end -Private.frameLevels = {}; +Private.frameLevels = {} local function SetFrameLevel(id, frameLevel) frameLevel = math.min(120, frameLevel) - if (Private.frameLevels[id] == frameLevel) then - return; + if Private.frameLevels[id] == frameLevel then + return end - if (Private.regions[id] and Private.regions[id].region) then + if Private.regions[id] and Private.regions[id].region then Private.ApplyFrameLevel(Private.regions[id].region, frameLevel) end - if (clones[id]) then - for i,v in pairs(clones[id]) do + if clones[id] then + for _, v in pairs(clones[id]) do Private.ApplyFrameLevel(v, frameLevel) end end - Private.frameLevels[id] = frameLevel; + Private.frameLevels[id] = frameLevel end -local function FixGroupChildrenOrderImpl(data, frameLevel) +-- DepthBasedFrameLevels: +-- Root Group (0) +-- ├─ Aura (4) +-- ├─ Child Group (4) +-- │ ├─ Aura (8) +-- │ └─ Aura (8) +-- Root Aura (0) +local function ApplyDepthBasedFrameLevels(data, depth) + local frameLevel = depth * 4 SetFrameLevel(data.id, frameLevel) - local offset - if data.sharedFrameLevel then - offset = 0 - else - offset = 4 + + if not data.controlledChildren then + return end + for _, childId in ipairs(data.controlledChildren) do local childData = WeakAuras.GetData(childId) - if childData.regionType ~= "group" and childData.regionType ~= "dynamicgroup" then - frameLevel = frameLevel + offset - SetFrameLevel(childId, frameLevel) - else - frameLevel = frameLevel + offset - local endFrameLevel = FixGroupChildrenOrderImpl(childData, frameLevel) - if not data.sharedFrameLevel then - frameLevel = endFrameLevel - end + if childData then + ApplyDepthBasedFrameLevels(childData, depth + 1) end end - return frameLevel end function Private.FixGroupChildrenOrderForGroup(data) if data.parent then return end - FixGroupChildrenOrderImpl(data, 0) + ApplyDepthBasedFrameLevels(data, 0) end local function GetFrameLevelFor(id) - return Private.frameLevels[id] or 5; + return Private.frameLevels[id] or 5 end function Private.ApplyFrameLevel(region, frameLevel) diff --git a/WeakAurasOptions/RegionOptions/DynamicGroup.lua b/WeakAurasOptions/RegionOptions/DynamicGroup.lua index bc440ba..fe4771f 100644 --- a/WeakAurasOptions/RegionOptions/DynamicGroup.lua +++ b/WeakAurasOptions/RegionOptions/DynamicGroup.lua @@ -561,12 +561,11 @@ local function createOptions(id, data) name = L["Flat Framelevels"], desc = L["The group and all direct children will share the same base frame level."], order = 30, - set = function(info, v) - data.sharedFrameLevel = v - WeakAuras.Add(data) - for parent in OptionsPrivate.Private.TraverseParents(data) do - WeakAuras.Add(parent) - end + get = function() + return true + end, + set = function() + -- Frame levels are flattened by default and cannot be changed on this version end }, endHeader = { diff --git a/WeakAurasOptions/RegionOptions/Group.lua b/WeakAurasOptions/RegionOptions/Group.lua index 0a388c1..22bf1be 100644 --- a/WeakAurasOptions/RegionOptions/Group.lua +++ b/WeakAurasOptions/RegionOptions/Group.lua @@ -603,12 +603,11 @@ local function createOptions(id, data) name = L["Flat Framelevels"], desc = L["The group and all direct children will share the same base frame level."], order = 47, - set = function(info, v) - data.sharedFrameLevel = v - WeakAuras.Add(data) - for parent in OptionsPrivate.Private.TraverseParents(data) do - WeakAuras.Add(parent) - end + get = function() + return true + end, + set = function() + -- Frame levels are flattened by default and cannot be changed on this version end }, endHeader = {