feat: blizz new UI
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 4.0 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 16 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 8.0 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
+150
-22
@@ -43,11 +43,8 @@ local themes = {
|
|||||||
showHeaderButtonBg = false,
|
showHeaderButtonBg = false,
|
||||||
},
|
},
|
||||||
blizzard = {
|
blizzard = {
|
||||||
-- Custom bank parchment texture bundled with the addon.
|
bgTexture = "Interface\\AddOns\\Guda\\Assets\\UI-Background-Marble",
|
||||||
-- Blizzard's MPQ textures (UI-DialogBox-Background) don't render
|
bgColor = { r = 0.4, g = 0.4, b = 0.4 },
|
||||||
-- when set via Lua SetBackdrop() in TurtleWoW 1.12.
|
|
||||||
bgTexture = "Interface\\AddOns\\Guda\\Assets\\Bank-Background",
|
|
||||||
bgColor = { r = 1, g = 1, b = 1 },
|
|
||||||
bgTile = true,
|
bgTile = true,
|
||||||
bgTileSize = 256,
|
bgTileSize = 256,
|
||||||
border = {
|
border = {
|
||||||
@@ -60,6 +57,13 @@ local themes = {
|
|||||||
edgeSize = 2,
|
edgeSize = 2,
|
||||||
insets = { left = 0, right = 0, top = 0, bottom = 0 }
|
insets = { left = 0, right = 0, top = 0, bottom = 0 }
|
||||||
},
|
},
|
||||||
|
nineSlice = {
|
||||||
|
corner = "Interface\\AddOns\\Guda\\Assets\\NineSlice-Corner",
|
||||||
|
edgeH = "Interface\\AddOns\\Guda\\Assets\\NineSlice-EdgeH",
|
||||||
|
edgeV = "Interface\\AddOns\\Guda\\Assets\\NineSlice-EdgeV",
|
||||||
|
cornerSize = 32,
|
||||||
|
edgeThickness = 16,
|
||||||
|
},
|
||||||
titleColor = { r = 1, g = 0.82, b = 0 },
|
titleColor = { r = 1, g = 0.82, b = 0 },
|
||||||
slotBgAlpha = { empty = 1, filled = 1 },
|
slotBgAlpha = { empty = 1, filled = 1 },
|
||||||
footerButtonBg = { 0.5, 0.06, 0.06, 0.6 },
|
footerButtonBg = { 0.5, 0.06, 0.06, 0.6 },
|
||||||
@@ -113,6 +117,112 @@ local function GetBorderConfig(t)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Hide NineSlice textures
|
||||||
|
local function HideNineSlice(frame)
|
||||||
|
if not frame._gudaNineSlice then return end
|
||||||
|
for i = 1, 8 do
|
||||||
|
frame._gudaNineSlice[i]:Hide()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Apply NineSlice metal border using separate texture files
|
||||||
|
-- Uses 3 TGA source files: Corner, EdgeH, EdgeV
|
||||||
|
-- Corners are flipped via SetTexCoord (0/1 swaps only)
|
||||||
|
local function ApplyNineSlice(frame, cfg)
|
||||||
|
local cs = cfg.cornerSize -- 32
|
||||||
|
local et = cfg.edgeThickness -- 16
|
||||||
|
|
||||||
|
-- Create or reuse 8 textures: BL, TL, TR, BR, Bottom, Top, Left, Right
|
||||||
|
if not frame._gudaNineSlice then
|
||||||
|
frame._gudaNineSlice = {}
|
||||||
|
for i = 1, 8 do
|
||||||
|
frame._gudaNineSlice[i] = frame:CreateTexture(nil, "OVERLAY")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local ns = frame._gudaNineSlice
|
||||||
|
|
||||||
|
-- 1: Bottom-Left corner (as-is)
|
||||||
|
local bl = ns[1]
|
||||||
|
bl:ClearAllPoints()
|
||||||
|
bl:SetTexture(cfg.corner)
|
||||||
|
bl:SetWidth(cs)
|
||||||
|
bl:SetHeight(cs)
|
||||||
|
bl:SetPoint("BOTTOMLEFT", frame, "BOTTOMLEFT", 0, 0)
|
||||||
|
bl:SetTexCoord(0, 1, 0, 1)
|
||||||
|
bl:Show()
|
||||||
|
|
||||||
|
-- 2: Top-Left corner (flip vertically)
|
||||||
|
local tl = ns[2]
|
||||||
|
tl:ClearAllPoints()
|
||||||
|
tl:SetTexture(cfg.corner)
|
||||||
|
tl:SetWidth(cs)
|
||||||
|
tl:SetHeight(cs)
|
||||||
|
tl:SetPoint("TOPLEFT", frame, "TOPLEFT", 0, 0)
|
||||||
|
tl:SetTexCoord(0, 1, 1, 0)
|
||||||
|
tl:Show()
|
||||||
|
|
||||||
|
-- 3: Top-Right corner (flip both)
|
||||||
|
local tr = ns[3]
|
||||||
|
tr:ClearAllPoints()
|
||||||
|
tr:SetTexture(cfg.corner)
|
||||||
|
tr:SetWidth(cs)
|
||||||
|
tr:SetHeight(cs)
|
||||||
|
tr:SetPoint("TOPRIGHT", frame, "TOPRIGHT", 0, 0)
|
||||||
|
tr:SetTexCoord(1, 0, 1, 0)
|
||||||
|
tr:Show()
|
||||||
|
|
||||||
|
-- 4: Bottom-Right corner (flip horizontally)
|
||||||
|
local br = ns[4]
|
||||||
|
br:ClearAllPoints()
|
||||||
|
br:SetTexture(cfg.corner)
|
||||||
|
br:SetWidth(cs)
|
||||||
|
br:SetHeight(cs)
|
||||||
|
br:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", 0, 0)
|
||||||
|
br:SetTexCoord(1, 0, 0, 1)
|
||||||
|
br:Show()
|
||||||
|
|
||||||
|
-- 5: Bottom edge (stretches between BL and BR corners)
|
||||||
|
local bottom = ns[5]
|
||||||
|
bottom:ClearAllPoints()
|
||||||
|
bottom:SetTexture(cfg.edgeH)
|
||||||
|
bottom:SetHeight(et)
|
||||||
|
bottom:SetPoint("BOTTOMLEFT", frame, "BOTTOMLEFT", cs, 0)
|
||||||
|
bottom:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -cs, 0)
|
||||||
|
bottom:SetTexCoord(0, 1, 0, 1)
|
||||||
|
bottom:Show()
|
||||||
|
|
||||||
|
-- 6: Top edge (flip vertically)
|
||||||
|
local top = ns[6]
|
||||||
|
top:ClearAllPoints()
|
||||||
|
top:SetTexture(cfg.edgeH)
|
||||||
|
top:SetHeight(et)
|
||||||
|
top:SetPoint("TOPLEFT", frame, "TOPLEFT", cs, 0)
|
||||||
|
top:SetPoint("TOPRIGHT", frame, "TOPRIGHT", -cs, 0)
|
||||||
|
top:SetTexCoord(0, 1, 1, 0)
|
||||||
|
top:Show()
|
||||||
|
|
||||||
|
-- 7: Left edge (stretches between TL and BL corners)
|
||||||
|
local left = ns[7]
|
||||||
|
left:ClearAllPoints()
|
||||||
|
left:SetTexture(cfg.edgeV)
|
||||||
|
left:SetWidth(et)
|
||||||
|
left:SetPoint("TOPLEFT", frame, "TOPLEFT", 0, -cs)
|
||||||
|
left:SetPoint("BOTTOMLEFT", frame, "BOTTOMLEFT", 0, cs)
|
||||||
|
left:SetTexCoord(0, 1, 0, 1)
|
||||||
|
left:Show()
|
||||||
|
|
||||||
|
-- 8: Right edge (flip horizontally)
|
||||||
|
local right = ns[8]
|
||||||
|
right:ClearAllPoints()
|
||||||
|
right:SetTexture(cfg.edgeV)
|
||||||
|
right:SetWidth(et)
|
||||||
|
right:SetPoint("TOPRIGHT", frame, "TOPRIGHT", 0, -cs)
|
||||||
|
right:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", 0, cs)
|
||||||
|
right:SetTexCoord(1, 0, 0, 1)
|
||||||
|
right:Show()
|
||||||
|
end
|
||||||
|
|
||||||
-- Apply theme to a single frame
|
-- Apply theme to a single frame
|
||||||
function Theme:ApplyToFrame(frame)
|
function Theme:ApplyToFrame(frame)
|
||||||
if not frame then
|
if not frame then
|
||||||
@@ -129,24 +239,42 @@ function Theme:ApplyToFrame(frame)
|
|||||||
ThemeDebug(" theme=%s minimal=%s", tostring(cachedThemeName), tostring(isMinimal))
|
ThemeDebug(" theme=%s minimal=%s", tostring(cachedThemeName), tostring(isMinimal))
|
||||||
ThemeDebug(" bgTexture=%s tileSize=%s", tostring(t.bgTexture), tostring(t.bgTileSize))
|
ThemeDebug(" bgTexture=%s tileSize=%s", tostring(t.bgTexture), tostring(t.bgTileSize))
|
||||||
|
|
||||||
-- Full backdrop: bgFile + border in a single SetBackdrop call.
|
-- Determine if NineSlice should be used (full border mode + theme has nineSlice config)
|
||||||
local backdrop = {
|
local useNineSlice = t.nineSlice and not isMinimal
|
||||||
bgFile = t.bgTexture,
|
|
||||||
edgeFile = borderCfg.edgeFile,
|
|
||||||
tile = true,
|
|
||||||
tileSize = t.bgTileSize,
|
|
||||||
edgeSize = borderCfg.edgeSize,
|
|
||||||
insets = {
|
|
||||||
left = borderCfg.insets.left,
|
|
||||||
right = borderCfg.insets.right,
|
|
||||||
top = borderCfg.insets.top,
|
|
||||||
bottom = borderCfg.insets.bottom,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
frame:SetBackdrop(nil)
|
if useNineSlice then
|
||||||
frame:SetBackdrop(backdrop)
|
-- Background only (no edgeFile), NineSlice handles the border
|
||||||
ThemeDebug(" SetBackdrop done (bgFile + border)")
|
local backdrop = {
|
||||||
|
bgFile = t.bgTexture,
|
||||||
|
tile = true,
|
||||||
|
tileSize = t.bgTileSize,
|
||||||
|
edgeSize = 0,
|
||||||
|
insets = { left = 4, right = 4, top = 4, bottom = 4 }
|
||||||
|
}
|
||||||
|
frame:SetBackdrop(nil)
|
||||||
|
frame:SetBackdrop(backdrop)
|
||||||
|
ApplyNineSlice(frame, t.nineSlice)
|
||||||
|
ThemeDebug(" SetBackdrop done (bgFile + NineSlice border)")
|
||||||
|
else
|
||||||
|
-- Standard backdrop with edgeFile border
|
||||||
|
local backdrop = {
|
||||||
|
bgFile = t.bgTexture,
|
||||||
|
edgeFile = borderCfg.edgeFile,
|
||||||
|
tile = true,
|
||||||
|
tileSize = t.bgTileSize,
|
||||||
|
edgeSize = borderCfg.edgeSize,
|
||||||
|
insets = {
|
||||||
|
left = borderCfg.insets.left,
|
||||||
|
right = borderCfg.insets.right,
|
||||||
|
top = borderCfg.insets.top,
|
||||||
|
bottom = borderCfg.insets.bottom,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
frame:SetBackdrop(nil)
|
||||||
|
frame:SetBackdrop(backdrop)
|
||||||
|
HideNineSlice(frame)
|
||||||
|
ThemeDebug(" SetBackdrop done (bgFile + edgeFile border)")
|
||||||
|
end
|
||||||
|
|
||||||
if isMinimal then
|
if isMinimal then
|
||||||
frame:SetBackdropBorderColor(1, 1, 1, 1)
|
frame:SetBackdropBorderColor(1, 1, 1, 1)
|
||||||
|
|||||||
Reference in New Issue
Block a user