You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

368 lines
13 KiB

local _, Cell = ...
local L = Cell.L
local F = Cell.funcs
local B = Cell.bFuncs
local U = Cell.uFuncs
local P = Cell.pixelPerfectFuncs
local LCG = LibStub("LibCustomGlow-1.0")
local glowOptionsTable
local glowOptionsFrame, previewButton
--------------------------------------------------
-- glow preview
--------------------------------------------------
local function CreatePreviewButton()
previewButton = CreateFrame("Button", "CellGlowsPreviewButton", glowOptionsFrame, "CellPreviewButtonTemplate")
-- previewButton.type = "main" -- layout setup
previewButton:SetPoint("BOTTOMLEFT", glowOptionsFrame, "TOPLEFT", 0, 5)
previewButton:UnregisterAllEvents()
previewButton:SetScript("OnEnter", nil)
previewButton:SetScript("OnLeave", nil)
previewButton:SetScript("OnShow", nil)
previewButton:SetScript("OnHide", nil)
previewButton:SetScript("OnUpdate", nil)
previewButton.widgets.healthBar:SetMinMaxValues(0, 1)
previewButton.widgets.healthBar:SetValue(1)
previewButton.widgets.powerBar:SetMinMaxValues(0, 1)
previewButton.widgets.powerBar:SetValue(1)
local previewButtonBG = Cell:CreateFrame("CellGlowsPreviewButtonBG", previewButton)
previewButtonBG:SetPoint("TOPLEFT", previewButton, 0, 20)
previewButtonBG:SetPoint("BOTTOMRIGHT", previewButton, "TOPRIGHT")
Cell:StylizeFrame(previewButtonBG, {0.1, 0.1, 0.1, 0.77}, {0, 0, 0, 0})
previewButtonBG:Show()
local previewText = previewButtonBG:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET_TITLE")
previewText:SetPoint("TOP", 0, -3)
previewText:SetText(Cell:GetAccentColorString()..L["Preview"])
Cell:Fire("CreatePreview", previewButton)
end
local function UpdatePreviewButton()
if not previewButton then
CreatePreviewButton()
end
local iTable = Cell.vars.currentLayoutTable["indicators"][1]
if iTable["enabled"] then
previewButton.indicators.nameText:Show()
previewButton.states.name = UnitName("player")
previewButton.indicators.nameText:UpdateName()
previewButton.indicators.nameText:UpdatePreviewColor(iTable["color"])
previewButton.indicators.nameText:UpdateTextWidth(iTable["textWidth"])
previewButton.indicators.nameText:SetFont(unpack(iTable["font"]))
previewButton.indicators.nameText:ClearAllPoints()
previewButton.indicators.nameText:SetPoint(unpack(iTable["position"]))
else
previewButton.indicators.nameText:Hide()
end
P:Size(previewButton, Cell.vars.currentLayoutTable["main"]["size"][1], Cell.vars.currentLayoutTable["main"]["size"][2])
B:SetOrientation(previewButton, Cell.vars.currentLayoutTable["barOrientation"][1], Cell.vars.currentLayoutTable["barOrientation"][2])
B:SetPowerSize(previewButton, Cell.vars.currentLayoutTable["main"]["powerSize"])
previewButton.widgets.healthBar:SetStatusBarTexture(Cell.vars.texture)
previewButton.widgets.powerBar:SetStatusBarTexture(Cell.vars.texture)
-- health color
local r, g, b = F:GetHealthBarColor(1, false, F:GetClassColor(Cell.vars.playerClass))
previewButton.widgets.healthBar:SetStatusBarColor(r, g, b, CellDB["appearance"]["barAlpha"])
-- power color
r, g, b = F:GetPowerBarColor("player", Cell.vars.playerClass)
previewButton.widgets.powerBar:SetStatusBarColor(r, g, b)
-- alpha
previewButton:SetBackdropColor(0, 0, 0, CellDB["appearance"]["bgAlpha"])
previewButton:Show()
Cell:Fire("UpdatePreview", previewButton)
end
-------------------------------------------------
-- glow options
-------------------------------------------------
local glowTypeDropdown, glowColor, glowLines, glowParticles, glowDuration, glowFrequency, glowLength, glowThickness, glowScale, glowOffsetX, glowOffsetY
local function UpdateGlowPreview(refresh)
local glowType, glowOptions = unpack(glowOptionsTable)
if glowType == "normal" then
LCG.PixelGlow_Stop(previewButton)
LCG.AutoCastGlow_Stop(previewButton)
LCG.ProcGlow_Stop(previewButton)
LCG.ButtonGlow_Start(previewButton, glowOptions[1])
elseif glowType == "pixel" then
LCG.ButtonGlow_Stop(previewButton)
LCG.AutoCastGlow_Stop(previewButton)
LCG.ProcGlow_Stop(previewButton)
-- color, N, frequency, length, thickness, x, y
LCG.PixelGlow_Start(previewButton, glowOptions[1], glowOptions[4], glowOptions[5], glowOptions[6], glowOptions[7], glowOptions[2], glowOptions[3])
elseif glowType == "shine" then
LCG.ButtonGlow_Stop(previewButton)
LCG.PixelGlow_Stop(previewButton)
LCG.ProcGlow_Stop(previewButton)
if refresh then LCG.AutoCastGlow_Stop(previewButton) end
-- color, N, frequency, scale, x, y
LCG.AutoCastGlow_Start(previewButton, glowOptions[1], glowOptions[4], glowOptions[5], glowOptions[6], glowOptions[2], glowOptions[3])
elseif glowType == "proc" then
LCG.ButtonGlow_Stop(previewButton)
LCG.PixelGlow_Stop(previewButton)
LCG.AutoCastGlow_Stop(previewButton)
-- color, duration
LCG.ProcGlow_Start(previewButton, {color=glowOptions[1], xOffset=glowOptions[2], yOffset=glowOptions[3], duration=glowOptions[4], startAnim=false})
end
end
local function LoadGlowOptions()
UpdateGlowPreview()
local glowType, glowOptions = unpack(glowOptionsTable)
glowTypeDropdown:SetSelectedValue(glowType)
glowColor:SetColor(glowOptions[1])
glowOffsetX:SetEnabled(glowType ~= "normal")
glowOffsetY:SetEnabled(glowType ~= "normal")
glowLines:SetEnabled(glowType ~= "normal")
glowFrequency:SetEnabled(glowType ~= "normal")
glowLength:SetEnabled(glowType ~= "normal")
glowThickness:SetEnabled(glowType ~= "normal")
if glowType == "normal" then
glowLines:Show()
glowFrequency:Show()
glowLength:Show()
glowThickness:Show()
glowParticles:Hide()
glowDuration:Hide()
glowScale:Hide()
elseif glowType == "pixel" then
glowLines:Show()
glowFrequency:Show()
glowLength:Show()
glowThickness:Show()
glowParticles:Hide()
glowDuration:Hide()
glowScale:Hide()
glowOffsetX:SetValue(glowOptions[2])
glowOffsetY:SetValue(glowOptions[3])
glowLines:SetValue(glowOptions[4])
glowFrequency:SetValue(glowOptions[5])
glowLength:SetValue(glowOptions[6])
glowThickness:SetValue(glowOptions[7])
elseif glowType == "shine" then
glowParticles:Show()
glowFrequency:Show()
glowScale:Show()
glowLines:Hide()
glowDuration:Hide()
glowLength:Hide()
glowThickness:Hide()
glowOffsetX:SetValue(glowOptions[2])
glowOffsetY:SetValue(glowOptions[3])
glowParticles:SetValue(glowOptions[4])
glowFrequency:SetValue(glowOptions[5])
glowScale:SetValue(glowOptions[6]*100)
elseif glowType == "proc" then
glowDuration:Show()
glowLines:Hide()
glowParticles:Hide()
glowFrequency:Hide()
glowLength:Hide()
glowThickness:Hide()
glowScale:Hide()
glowOffsetX:SetValue(glowOptions[2])
glowOffsetY:SetValue(glowOptions[3])
glowDuration:SetValue(glowOptions[4])
end
end
local function UpdateGlowType(glowType)
glowOptionsTable[1] = glowType
if glowType == "normal" then
glowOptionsTable[2] = {glowOptionsTable[2][1]}
elseif glowType == "pixel" then
glowOptionsTable[2] = {glowOptionsTable[2][1], 0, 0, 9, 0.25, 8, 2}
elseif glowType == "shine" then
glowOptionsTable[2] = {glowOptionsTable[2][1], 0, 0, 9, 0.5, 1}
elseif glowType == "proc" then
glowOptionsTable[2] = {glowOptionsTable[2][1], 0, 0, 1}
end
LoadGlowOptions()
end
local function SliderValueChanged(index, value, refresh)
-- update db
glowOptionsTable[2][index] = value
-- update preview
UpdateGlowPreview(refresh)
end
local function CreateGlowOptionsFrame()
glowOptionsFrame = Cell:CreateFrame("CellOptionsFrame_GlowOptions", Cell.frames.optionsFrame, 127, 371)
glowOptionsFrame:SetPoint("BOTTOMLEFT", Cell.frames.optionsFrame, "BOTTOMRIGHT", 5, 0)
local glowTypeText = glowOptionsFrame:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET")
glowTypeText:SetText(L["Glow Type"])
glowTypeText:SetPoint("TOPLEFT", 5, -5)
glowTypeDropdown = Cell:CreateDropdown(glowOptionsFrame, 117)
glowTypeDropdown:SetPoint("TOPLEFT", 5, -22)
glowTypeDropdown:SetItems({
{
["text"] = L["Normal"],
["value"] = "normal",
["onClick"] = function()
UpdateGlowType("normal")
end,
},
{
["text"] = L["Pixel"],
["value"] = "pixel",
["onClick"] = function()
UpdateGlowType("pixel")
end,
},
{
["text"] = L["Shine"],
["value"] = "shine",
["onClick"] = function()
UpdateGlowType("shine")
end,
},
{
["text"] = L["Proc"],
["value"] = "proc",
["onClick"] = function()
UpdateGlowType("proc")
end,
},
})
-- glowColor
glowColor = Cell:CreateColorPicker(glowOptionsFrame, L["Glow Color"], false, function(r, g, b)
-- update db
glowOptionsTable[2][1][1] = r
glowOptionsTable[2][1][2] = g
glowOptionsTable[2][1][3] = b
glowOptionsTable[2][1][4] = 1
-- update preview
UpdateGlowPreview()
end)
-- glowColor:SetPoint("TOPLEFT", glowOptionsFrame, 5, 0)
glowColor:SetPoint("TOPLEFT", glowTypeDropdown, "BOTTOMLEFT", 0, -10)
-- x
glowOffsetX = Cell:CreateSlider(L["X Offset"], glowOptionsFrame, -100, 100, 117, 1, function(value)
SliderValueChanged(2, value)
end)
glowOffsetX:SetPoint("TOPLEFT", glowColor, "BOTTOMLEFT", 0, -25)
-- y
glowOffsetY = Cell:CreateSlider(L["Y Offset"], glowOptionsFrame, -100, 100, 117, 1, function(value)
SliderValueChanged(3, value)
end)
glowOffsetY:SetPoint("TOPLEFT", glowOffsetX, "BOTTOMLEFT", 0, -40)
-- glowNumber
glowLines = Cell:CreateSlider(L["Lines"], glowOptionsFrame, 1, 30, 117, 1, function(value)
SliderValueChanged(4, value)
end)
glowLines:SetPoint("TOPLEFT", glowOffsetY, "BOTTOMLEFT", 0, -40)
glowParticles = Cell:CreateSlider(L["Particles"], glowOptionsFrame, 1, 30, 117, 1, function(value)
SliderValueChanged(4, value, true)
end)
glowParticles:SetPoint("TOPLEFT", glowOffsetY, "BOTTOMLEFT", 0, -40)
-- duration
glowDuration = Cell:CreateSlider(L["Duration"], glowOptionsFrame, 0.1, 3, 117, 0.1, function(value)
SliderValueChanged(4, value, true)
end)
glowDuration:SetPoint("TOPLEFT", glowOffsetY, "BOTTOMLEFT", 0, -40)
-- glowFrequency
glowFrequency = Cell:CreateSlider(L["Frequency"], glowOptionsFrame, -2, 2, 117, 0.01, function(value)
SliderValueChanged(5, value)
end)
glowFrequency:SetPoint("TOPLEFT", glowLines, "BOTTOMLEFT", 0, -40)
-- glowLength
glowLength = Cell:CreateSlider(L["Length"], glowOptionsFrame, 1, 20, 117, 1, function(value)
SliderValueChanged(6, value)
end)
glowLength:SetPoint("TOPLEFT", glowFrequency, "BOTTOMLEFT", 0, -40)
-- glowThickness
glowThickness = Cell:CreateSlider(L["Thickness"], glowOptionsFrame, 1, 20, 117, 1, function(value)
SliderValueChanged(7, value)
end)
glowThickness:SetPoint("TOPLEFT", glowLength, "BOTTOMLEFT", 0, -40)
-- glowScale
glowScale = Cell:CreateSlider(L["Scale"], glowOptionsFrame, 50, 500, 117, 1, function(value)
SliderValueChanged(6, value/100)
end, nil, true)
glowScale:SetPoint("TOPLEFT", glowFrequency, "BOTTOMLEFT", 0, -40)
glowOptionsFrame:SetScript("OnHide", function()
glowOptionsFrame:Hide()
end)
end
-------------------------------------------------
-- functions
-------------------------------------------------
function U:ShowGlowOptions(parent, t)
if not glowOptionsFrame then
CreateGlowOptionsFrame()
end
if glowOptionsFrame:IsShown() then
glowOptionsFrame:Hide()
else
glowOptionsFrame:SetParent(parent)
glowOptionsTable = t
UpdatePreviewButton()
LoadGlowOptions()
glowOptionsFrame:Show()
end
end
function U:HideGlowOptions()
if glowOptionsFrame then glowOptionsFrame:Hide() end
end
-------------------------------------------------
-- callbacks
-------------------------------------------------
local function UpdateLayout()
if previewButton then
UpdatePreviewButton()
end
end
Cell:RegisterCallback("UpdateLayout", "GlowOptions_UpdateLayout", UpdateLayout)
local function UpdateAppearance()
if previewButton then
UpdatePreviewButton()
end
end
Cell:RegisterCallback("UpdateAppearance", "GlowOptions_UpdateAppearance", UpdateAppearance)