--[[ Layouts test mode ]] -- local Grid2 = Grid2 local Grid2Layout = Grid2:GetModule("Grid2Layout") local Grid2Frame = Grid2:GetModule("Grid2Frame") local texture local colCount local rowCount local colColors local frameLayout local frames local layoutName local savedScale local LSM function Grid2Layout:ShowFrames(enabled) for type, headers in pairs(self.groups) do for i = 1, self.indexes[type] do local g = headers[i] if enabled then g:Show() else g:Hide() end end end end local function LayoutGetTestFrame(i) local f if frames then f = frames[i] else frames = {} end if not f then f = CreateFrame("Frame", nil, frameLayout) frames[i] = f end f:SetBackdrop({ bgFile = texture, edgeFile = "Interface\\Addons\\Grid2\\media\\white16x16", tile = false, tileSize = 0, edgeSize = 1, insets = {left = 1, right = 1, top = 1, bottom = 1} }) return f end local LayoutGetVectors do local vectors = { ["TOPLEFT"] = {1, 0, 0, 1, 0, 0}, ["TOPRIGHT"] = {-1, 0, 0, 1, 1, 0}, ["BOTTOMLEFT"] = {1, 0, 0, -1, 0, 1}, ["BOTTOMRIGHT"] = {-1, 0, 0, -1, 1, 1} } LayoutGetVectors = function(anchor, horizontal, ox, oy, w, h, cols, rows) local ux, uy, vx, vy, px, py = unpack(vectors[anchor]) if horizontal then return vx * w, vy * h, ux * w, uy * h, px * (rows - 1) * w + ox, py * (cols - 1) * h + oy, rows, cols else return ux * w, uy * h, vx * w, vy * h, px * (cols - 1) * w + ox, py * (rows - 1) * h + oy, cols, rows end end end local function LayoutHide(restoreRealLayout) if layoutName then local framesCount = colCount * rowCount for i = 1, framesCount do frames[i]:Hide() end if savedScale then Grid2Layout:SavePosition() Grid2Layout.frame:SetScale(savedScale) Grid2Layout:RestorePosition() savedScale = nil end if restoreRealLayout then layoutName = nil Grid2Layout:ShowFrames(true) Grid2Layout:UpdateSize() end end end local LayoutLoad do local colorsTable = { ["partypet"] = {r = 0, g = 1, b = 0, a = 0.35}, ["raidpet"] = {r = 0, g = 1, b = 0, a = 0.35}, ["spacer"] = {r = 0, g = 0, b = 0, a = 0} } LayoutLoad = function(name) if layoutName then LayoutHide(false) end if not texture then LSM = LSM or LibStub("LibSharedMedia-3.0", true) texture = LSM:Fetch("statusbar", Grid2Frame.db.profile.frameTexture) or "Interface\\Addons\\Grid2\\media\\gradient32x32" end if not frameLayout then frameLayout = Grid2Layout.frame end savedScale = frameLayout:GetScale() Grid2Layout:SavePosition() frameLayout:SetScale(Grid2Layout.db.profile.ScaleSize * (Grid2Layout.db.profile.layoutScales[name] or 1)) Grid2Layout:RestorePosition() colColors = {} local layout = Grid2Layout.layoutSettings[name] if layout then local defaults = layout.defaults or {} colCount = 0 rowCount = 0 local col = 1 for i, l in ipairs(layout) do local unitPerColumn = l.unitsPerColumn or defaults.unitPerColumn or 5 local maxColumns = l.maxColumns or defaults.maxColumns or 1 colCount = colCount + maxColumns rowCount = max(rowCount, unitPerColumn) local c = l.type and colorsTable[l.type] or RAID_CLASS_COLORS[CLASS_SORT_ORDER[((i - 1) % #CLASS_SORT_ORDER) + 1]] for j = 1, maxColumns do colColors[col] = {c.r * 0.5, c.g * 0.5, c.b * 0.5, c.a or 0.75} col = col + 1 end end layoutName = name return true end end end local function LayoutRefresh() if not layoutName then return end Grid2Layout:ShowFrames(false) local settings = Grid2Layout.db.profile local width, height = Grid2Frame:GetFrameSize() local inset = Grid2Frame.db.profile.frameBorder local frameLevel = frameLayout:GetFrameLevel() + 1 local Spacing = settings.Spacing local Padding = settings.Padding local w = width - inset * 2 local h = height - inset * 2 local ux, uy, vx, vy, px, py, realCols, realRows = LayoutGetVectors(settings.groupAnchor, settings.horizontal, Spacing, Spacing, width + Padding, height + Padding, colCount, rowCount) px = px + inset py = py + inset local i = 1 for nx = 0, colCount - 1 do local r, g, b, a = unpack(colColors[nx + 1]) for ny = 0, rowCount - 1 do local x = nx * ux + ny * vx + px local y = nx * uy + ny * vy + py local frame = LayoutGetTestFrame(i) frame:ClearAllPoints() frame:SetPoint("TOPLEFT", frameLayout, "TOPLEFT", x, -y) frame:SetSize(w, h) frame:SetBackdropColor(r, g, b, a) frame:SetBackdropBorderColor(0, 0, 0, 1) frame:SetFrameLevel(frameLevel) frame:Show() r, g, b = r * 0.7, g * 0.7, b * 0.7 i = i + 1 end end frameLayout:SetSize(Spacing * 2 + realCols * (width + Padding) - Padding, Spacing * 2 + realRows * (height + Padding) - Padding) end local function LayoutEnable(self, name) if name and name ~= layoutName then if LayoutLoad(name) then LayoutRefresh() return true end else LayoutHide(true) return false end end Grid2Options.LayoutTestEnable = LayoutEnable Grid2Options.LayoutTestRefresh = LayoutRefresh