mirror of
https://github.com/Bluewhale1337/ElvUIModernized.git
synced 2026-07-27 08:24:44 +00:00
386 lines
11 KiB
Lua
386 lines
11 KiB
Lua
local E, L, V, P, G = unpack(ElvUI); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
|
|
local LSM = LibStub("LibSharedMedia-3.0");
|
|
|
|
--Cache global variables
|
|
--Lua functions
|
|
local _G = _G
|
|
local unpack, type, select, getmetatable = unpack, type, select, getmetatable
|
|
--WoW API / Variables
|
|
local CreateFrame = CreateFrame
|
|
local RAID_CLASS_COLORS = RAID_CLASS_COLORS
|
|
|
|
--Preload shit..
|
|
E.mult = 1
|
|
local backdropr, backdropg, backdropb, backdropa, borderr, borderg, borderb = 0, 0, 0, 1, 0, 0, 0
|
|
|
|
local function GetTemplate(t, isUnitFrameElement)
|
|
backdropa = 1
|
|
if t == "ClassColor" then
|
|
if CUSTOM_CLASS_COLORS then
|
|
borderr, borderg, borderb = CUSTOM_CLASS_COLORS[E.myclass].r, CUSTOM_CLASS_COLORS[E.myclass].g, CUSTOM_CLASS_COLORS[E.myclass].b
|
|
else
|
|
borderr, borderg, borderb = RAID_CLASS_COLORS[E.myclass].r, RAID_CLASS_COLORS[E.myclass].g, RAID_CLASS_COLORS[E.myclass].b
|
|
end
|
|
|
|
if t ~= "Transparent" then
|
|
backdropr, backdropg, backdropb = unpack(E["media"].backdropcolor)
|
|
else
|
|
backdropr, backdropg, backdropb, backdropa = unpack(E["media"].backdropfadecolor)
|
|
end
|
|
elseif t == "Transparent" then
|
|
if isUnitFrameElement then
|
|
borderr, borderg, borderb = unpack(E["media"].unitframeBorderColor)
|
|
else
|
|
borderr, borderg, borderb = unpack(E["media"].bordercolor)
|
|
end
|
|
backdropr, backdropg, backdropb, backdropa = unpack(E["media"].backdropfadecolor)
|
|
else
|
|
if isUnitFrameElement then
|
|
borderr, borderg, borderb = unpack(E["media"].unitframeBorderColor)
|
|
else
|
|
borderr, borderg, borderb = unpack(E["media"].bordercolor)
|
|
end
|
|
backdropr, backdropg, backdropb = unpack(E["media"].backdropcolor)
|
|
end
|
|
end
|
|
|
|
function E:Size(frame, width, height)
|
|
assert(width)
|
|
frame:SetWidth(E:Scale(width))
|
|
frame:SetHeight(E:Scale(height or width))
|
|
end
|
|
|
|
function E:Width(frame, width)
|
|
assert(width)
|
|
frame:SetWidth(E:Scale(width))
|
|
end
|
|
|
|
function E:Height(frame, height)
|
|
assert(height)
|
|
frame:SetHeight(E:Scale(height))
|
|
end
|
|
|
|
function E:Point(obj, arg1, arg2, arg3, arg4, arg5)
|
|
if arg2 == nil then arg2 = obj:GetParent() end
|
|
|
|
if type(arg2)=="number" then arg2 = E:Scale(arg2) end
|
|
if type(arg3)=="number" then arg3 = E:Scale(arg3) end
|
|
if type(arg4)=="number" then arg4 = E:Scale(arg4) end
|
|
if type(arg5)=="number" then arg5 = E:Scale(arg5) end
|
|
|
|
obj:SetPoint(arg1, arg2, arg3, arg4, arg5)
|
|
end
|
|
|
|
function E:SetOutside(obj, anchor, xOffset, yOffset, anchor2)
|
|
xOffset = xOffset or E.Border
|
|
yOffset = yOffset or E.Border
|
|
anchor = anchor or obj:GetParent()
|
|
|
|
assert(anchor)
|
|
if obj:GetPoint() then
|
|
obj:ClearAllPoints()
|
|
end
|
|
|
|
obj:SetPoint("TOPLEFT", anchor, "TOPLEFT", -xOffset, yOffset)
|
|
obj:SetPoint("BOTTOMRIGHT", anchor2 or anchor, "BOTTOMRIGHT", xOffset, -yOffset)
|
|
end
|
|
|
|
function E:SetInside(obj, anchor, xOffset, yOffset, anchor2)
|
|
xOffset = xOffset or E.Border
|
|
yOffset = yOffset or E.Border
|
|
anchor = anchor or obj:GetParent()
|
|
|
|
assert(anchor)
|
|
if obj:GetPoint() then
|
|
obj:ClearAllPoints()
|
|
end
|
|
|
|
obj:SetPoint("TOPLEFT", anchor, "TOPLEFT", xOffset, -yOffset)
|
|
obj:SetPoint("BOTTOMRIGHT", anchor2 or anchor, "BOTTOMRIGHT", -xOffset, yOffset)
|
|
end
|
|
|
|
function E:SetTemplate(f, t, glossTex, ignoreUpdates, forcePixelMode, isUnitFrameElement)
|
|
GetTemplate(t, isUnitFrameElement)
|
|
|
|
if t then
|
|
f.template = t
|
|
end
|
|
|
|
if glossTex then
|
|
f.glossTex = glossTex
|
|
end
|
|
|
|
if ignoreUpdates then
|
|
f.ignoreUpdates = ignoreUpdates
|
|
end
|
|
|
|
if forcePixelMode then
|
|
f.forcePixelMode = forcePixelMode
|
|
end
|
|
|
|
local bgFile = E.media.blankTex
|
|
if glossTex then
|
|
bgFile = E.media.glossTex
|
|
end
|
|
|
|
if isUnitFrameElement then
|
|
f.isUnitFrameElement = isUnitFrameElement
|
|
end
|
|
|
|
if t ~= "NoBackdrop" then
|
|
if E.private.general.pixelPerfect or f.forcePixelMode then
|
|
f:SetBackdrop({
|
|
bgFile = bgFile,
|
|
edgeFile = E["media"].blankTex,
|
|
tile = false, tileSize = 0, edgeSize = E.mult,
|
|
insets = {left = 0, right = 0, top = 0, bottom = 0}
|
|
})
|
|
else
|
|
f:SetBackdrop({
|
|
bgFile = bgFile,
|
|
edgeFile = E["media"].blankTex,
|
|
tile = false, tileSize = 0, edgeSize = E.mult,
|
|
insets = {left = -E.mult, right = -E.mult, top = -E.mult, bottom = -E.mult}
|
|
})
|
|
end
|
|
|
|
if not f.oborder and not f.iborder and not E.private.general.pixelPerfect and not f.forcePixelMode then
|
|
local border = CreateFrame("Frame", nil, f)
|
|
E:SetInside(border, f, E.mult, E.mult)
|
|
border:SetBackdrop({
|
|
edgeFile = E["media"].blankTex,
|
|
edgeSize = E.mult,
|
|
insets = {left = E.mult, right = E.mult, top = E.mult, bottom = E.mult}
|
|
})
|
|
border:SetBackdropBorderColor(0, 0, 0, 1)
|
|
f.iborder = border
|
|
|
|
if f.oborder then return end
|
|
border = CreateFrame("Frame", nil, f)
|
|
E:SetOutside(border, f, E.mult, E.mult)
|
|
border:SetFrameLevel(f:GetFrameLevel() + 1)
|
|
border:SetBackdrop({
|
|
edgeFile = E["media"].blankTex,
|
|
edgeSize = E.mult,
|
|
insets = {left = E.mult, right = E.mult, top = E.mult, bottom = E.mult}
|
|
})
|
|
border:SetBackdropBorderColor(0, 0, 0, 1)
|
|
f.oborder = border
|
|
end
|
|
else
|
|
f:SetBackdrop(nil)
|
|
end
|
|
|
|
f:SetBackdropColor(backdropr, backdropg, backdropb, backdropa)
|
|
f:SetBackdropBorderColor(borderr, borderg, borderb)
|
|
|
|
if not f.ignoreUpdates then
|
|
if f.isUnitFrameElement then
|
|
E["unitFrameElements"][f] = true
|
|
else
|
|
E["frames"][f] = true
|
|
end
|
|
end
|
|
end
|
|
|
|
function E:CreateBackdrop(f, t, tex, ignoreUpdates, forcePixelMode, isUnitFrameElement)
|
|
if not t then t = "Default" end
|
|
|
|
local parent = f.IsObjectType and f:IsObjectType("Texture") and f:GetParent() or f
|
|
|
|
local b = CreateFrame("Frame", nil, parent)
|
|
if f.forcePixelMode or forcePixelMode then
|
|
E:SetOutside(b, nil, E.mult, E.mult)
|
|
else
|
|
E:SetOutside(b)
|
|
end
|
|
E:SetTemplate(b, t, tex, ignoreUpdates, forcePixelMode, isUnitFrameElement)
|
|
|
|
local frameLevel = parent.GetFrameLevel and parent:GetFrameLevel()
|
|
local frameLevelMinusOne = frameLevel and (frameLevel - 1)
|
|
if frameLevelMinusOne and (frameLevelMinusOne >= 0) then
|
|
b:SetFrameLevel(frameLevelMinusOne)
|
|
else
|
|
b:SetFrameLevel(0)
|
|
end
|
|
|
|
f.backdrop = b
|
|
end
|
|
|
|
function E:CreateShadow(f)
|
|
if f.shadow then return end
|
|
|
|
borderr, borderg, borderb = 0, 0, 0
|
|
backdropr, backdropg, backdropb = 0, 0, 0
|
|
|
|
local shadow = CreateFrame("Frame", nil, f)
|
|
shadow:SetFrameLevel(1)
|
|
shadow:SetFrameStrata(f:GetFrameStrata())
|
|
E:SetOutside(shadow, f, 3, 3)
|
|
shadow:SetBackdrop({edgeFile = LSM:Fetch("border", "ElvUI GlowBorder"), edgeSize = E:Scale(3)})
|
|
shadow:SetBackdropColor(backdropr, backdropg, backdropb, 0)
|
|
shadow:SetBackdropBorderColor(borderr, borderg, borderb, 0.9)
|
|
f.shadow = shadow
|
|
end
|
|
|
|
function E:Kill(object)
|
|
if object.UnregisterAllEvents then
|
|
object:UnregisterAllEvents()
|
|
object:SetParent(E.HiddenFrame)
|
|
else
|
|
object.Show = object.Hide
|
|
end
|
|
|
|
object:Hide()
|
|
end
|
|
|
|
function E:StripTextures(object, kill, alpha)
|
|
if object:IsObjectType("Texture") then
|
|
if kill then
|
|
E:Kill(object)
|
|
elseif alpha then
|
|
object:SetAlpha(0)
|
|
else
|
|
object:SetTexture(nil)
|
|
end
|
|
else
|
|
if object.GetNumRegions then
|
|
for i = 1, object:GetNumRegions() do
|
|
local region = select(i, object:GetRegions())
|
|
if region and region.IsObjectType and region:IsObjectType("Texture") then
|
|
if kill then
|
|
E:Kill(region)
|
|
elseif alpha then
|
|
region:SetAlpha(0)
|
|
else
|
|
region:SetTexture(nil)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function E:FontTemplate(fs, font, fontSize, fontStyle)
|
|
fs.font = font
|
|
fs.fontSize = fontSize
|
|
fs.fontStyle = fontStyle
|
|
|
|
font = font or LSM:Fetch("font", E.db["general"].font)
|
|
fontSize = fontSize or E.db.general.fontSize
|
|
|
|
if fontStyle == "OUTLINE" and (E.db.general.font == "Homespun") then
|
|
if fontSize > 10 and not fs.fontSize then
|
|
fontStyle = "MONOCHROMEOUTLINE"
|
|
fontSize = 10
|
|
end
|
|
end
|
|
|
|
fs:SetFont(font, fontSize, fontStyle)
|
|
if fontStyle and (fontStyle ~= "NONE") then
|
|
fs:SetShadowColor(0, 0, 0, 0.2)
|
|
else
|
|
fs:SetShadowColor(0, 0, 0, 1)
|
|
end
|
|
fs:SetShadowOffset((E.mult or 1), -(E.mult or 1))
|
|
|
|
E["texts"][fs] = true
|
|
end
|
|
|
|
function E:StyleButton(button, noHover, noPushed, noChecked)
|
|
|
|
if not button then return end
|
|
if button.SetHighlightTexture and not button.hover and not noHover then
|
|
local hover = button:CreateTexture()
|
|
hover:SetTexture(1, 1, 1, 0.3)
|
|
E:SetInside(hover)
|
|
button.hover = hover
|
|
button:SetHighlightTexture(hover)
|
|
end
|
|
|
|
if button.SetPushedTexture and not button.pushed and not noPushed then
|
|
local pushed = button:CreateTexture()
|
|
pushed:SetTexture(0.9, 0.8, 0.1, 0.3)
|
|
E:SetInside(pushed)
|
|
button.pushed = pushed
|
|
button:SetPushedTexture(pushed)
|
|
end
|
|
|
|
if button.SetCheckedTexture and not button.checked and not noChecked then
|
|
local checked = button:CreateTexture()
|
|
checked:SetTexture(1, 1, 1)
|
|
E:SetInside(checked)
|
|
checked:SetAlpha(0.3)
|
|
button.checked = checked
|
|
button:SetCheckedTexture(checked)
|
|
end
|
|
|
|
local cooldown = button:GetName() and _G[button:GetName().."Cooldown"]
|
|
if cooldown then
|
|
cooldown:ClearAllPoints()
|
|
E:SetInside(cooldown)
|
|
end
|
|
end
|
|
|
|
function E:CreateCloseButton(frame, size, offset, texture, backdrop)
|
|
size = (size or 16)
|
|
offset = (offset or -6)
|
|
texture = (texture or "Interface\\AddOns\\ElvUI\\media\\textures\\close.tga")
|
|
|
|
local CloseButton = CreateFrame("Button", nil, frame)
|
|
E:Size(CloseButton, size)
|
|
E:Point(CloseButton, "TOPRIGHT", offset, offset)
|
|
if backdrop then
|
|
E:CreateBackdrop(CloseButton, "Default", true)
|
|
end
|
|
|
|
CloseButton.Texture = CloseButton:CreateTexture(nil, "OVERLAY")
|
|
CloseButton.Texture:SetAllPoints()
|
|
CloseButton.Texture:SetTexture(texture)
|
|
|
|
CloseButton:SetScript("OnClick", function()
|
|
this:GetParent():Hide()
|
|
end)
|
|
CloseButton:SetScript("OnEnter", function()
|
|
this.Texture:SetVertexColor(unpack(E["media"].rgbvaluecolor))
|
|
end)
|
|
CloseButton:SetScript("OnLeave", function()
|
|
this.Texture:SetVertexColor(1, 1, 1)
|
|
end)
|
|
|
|
frame.CloseButton = CloseButton
|
|
end
|
|
|
|
--[[local function addapi(object)
|
|
local mt = getmetatable(object).__index
|
|
if not object.Size then mt.Size = Size end
|
|
if not object.Point then mt.Point = Point end
|
|
if not object.SetOutside then mt.SetOutside = SetOutside end
|
|
if not object.SetInside then mt.SetInside = SetInside end
|
|
if not object.SetTemplate then mt.SetTemplate = SetTemplate end
|
|
if not object.CreateBackdrop then mt.CreateBackdrop = CreateBackdrop end
|
|
if not object.CreateShadow then mt.CreateShadow = CreateShadow end
|
|
if not object.Kill then mt.Kill = Kill end
|
|
if not object.Width then mt.Width = Width end
|
|
if not object.Height then mt.Height = Height end
|
|
if not object.FontTemplate then mt.FontTemplate = FontTemplate end
|
|
if not object.StripTextures then mt.StripTextures = StripTextures end
|
|
if not object.StyleButton then mt.StyleButton = StyleButton end
|
|
if not object.CreateCloseButton then mt.CreateCloseButton = CreateCloseButton 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--]] |