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.
135 lines
4.5 KiB
135 lines
4.5 KiB
local _, addon = ...
|
|
|
|
local API = addon.API;
|
|
local GetPixelForScale = API.GetPixelForScale;
|
|
local ThemeUtil = addon.ThemeUtil;
|
|
|
|
|
|
local TEXTURE_INFO = {
|
|
--Width, height, 4 margins
|
|
["HotkeyBackground.png"] = {32, 32, 8, 8, 8, 8},
|
|
};
|
|
|
|
|
|
PseudoSliceTextureMixin = {};
|
|
do -- Texture Slicing (Temp Fix for https://github.com/Stanzilla/WoWUIBugs/issues/547)
|
|
local InheritedMethods = {
|
|
"SetDrawLayer", "SetVertexColor", "SetBlendMode", "SetDesaturation", "SetDesaturated",
|
|
"SetSnapToPixelGrid", "SetTexelSnappingBias",
|
|
};
|
|
|
|
for _, method in ipairs(InheritedMethods) do
|
|
PseudoSliceTextureMixin[method] = function(self, ...)
|
|
for _, slice in ipairs(self.Slices) do
|
|
slice[method](slice, ...);
|
|
end
|
|
end
|
|
end
|
|
|
|
function PseudoSliceTextureMixin:SetBoundaryOffset(a)
|
|
--a < 0 shrink, a > 0 expand
|
|
a = a or 0;
|
|
self.Slice1:SetPoint("TOPLEFT", self, "TOPLEFT", -a, a);
|
|
self.Slice3:SetPoint("TOPRIGHT", self, "TOPRIGHT", a, a);
|
|
self.Slice7:SetPoint("BOTTOMLEFT", self, "BOTTOMLEFT", -a, -a);
|
|
self.Slice9:SetPoint("BOTTOMRIGHT", self, "BOTTOMRIGHT", a, -a);
|
|
end
|
|
|
|
function PseudoSliceTextureMixin:OnLoad()
|
|
for _, slice in ipairs(self.Slices) do
|
|
slice:ClearAllPoints();
|
|
slice:SetDrawLayer(self.drawLayer, self.textureSubLevel);
|
|
end
|
|
|
|
self.Slice2:SetPoint("TOPLEFT", self.Slice1, "TOPRIGHT", 0, 0);
|
|
self.Slice2:SetPoint("BOTTOMRIGHT", self.Slice3, "BOTTOMLEFT", 0, 0);
|
|
self.Slice4:SetPoint("TOPLEFT", self.Slice1, "BOTTOMLEFT", 0, 0);
|
|
self.Slice4:SetPoint("BOTTOMRIGHT", self.Slice7, "TOPRIGHT", 0, 0);
|
|
self.Slice6:SetPoint("TOPLEFT", self.Slice3, "BOTTOMLEFT", 0, 0);
|
|
self.Slice6:SetPoint("BOTTOMRIGHT", self.Slice9, "TOPRIGHT", 0, 0);
|
|
self.Slice8:SetPoint("TOPLEFT", self.Slice7, "TOPRIGHT", 0, 0);
|
|
self.Slice8:SetPoint("BOTTOMRIGHT", self.Slice9, "BOTTOMLEFT", 0, 0);
|
|
self.Slice5:SetPoint("TOPLEFT", self.Slice1, "BOTTOMRIGHT", 0, 0);
|
|
self.Slice5:SetPoint("BOTTOMRIGHT", self.Slice9, "TOPLEFT", 0, 0);
|
|
|
|
self:SetBoundaryOffset(0);
|
|
end
|
|
|
|
function PseudoSliceTextureMixin:SetTexture()
|
|
|
|
end
|
|
|
|
function PseudoSliceTextureMixin:SetAtlas(fileName)
|
|
local file = ThemeUtil:GetTextureFile(fileName);
|
|
|
|
for _, slice in ipairs(self.Slices) do
|
|
slice:SetTexture(file);
|
|
end
|
|
|
|
local p = TEXTURE_INFO[fileName];
|
|
self.textureInfo = p;
|
|
|
|
if p then
|
|
local x1 = p[3]/p[1];
|
|
local y1 = p[4]/p[2];
|
|
local x2 = 1 - p[5]/p[1];
|
|
local y2 = 1 - p[6]/p[2];
|
|
|
|
self.Slice1:SetTexCoord(0, x1, 0, y1);
|
|
self.Slice2:SetTexCoord(x1, x2, 0, y1);
|
|
self.Slice3:SetTexCoord(x2, 1, 0, y1);
|
|
self.Slice4:SetTexCoord(0, x1, y1, y2);
|
|
self.Slice5:SetTexCoord(x1, x2, y1, y2);
|
|
self.Slice6:SetTexCoord(x2, 1, y1, y2);
|
|
self.Slice7:SetTexCoord(0, x1, y2, 1);
|
|
self.Slice8:SetTexCoord(x1, x2, y2, 1);
|
|
self.Slice9:SetTexCoord(x2, 1, y2, 1);
|
|
|
|
self:UpdateSliceSize();
|
|
end
|
|
end
|
|
|
|
function PseudoSliceTextureMixin:UpdateSliceSize()
|
|
if not self.textureInfo then return end;
|
|
|
|
local scale = self:GetEffectiveScale();
|
|
local px = GetPixelForScale(scale, 1);
|
|
local p = self.textureInfo;
|
|
|
|
self.Slice1:SetSize(p[3] * px, p[4] * px);
|
|
self.Slice3:SetSize(p[5] * px, p[4] * px);
|
|
self.Slice7:SetSize(p[3] * px, p[6] * px);
|
|
self.Slice9:SetSize(p[5] * px, p[6] * px);
|
|
end
|
|
|
|
function PseudoSliceTextureMixin:SetTextureSliceMode(sliceMode)
|
|
|
|
end
|
|
|
|
function PseudoSliceTextureMixin:SetTextureSliceMargins(left, top, right, bottom)
|
|
|
|
end
|
|
end
|
|
|
|
do
|
|
local USE_PSEUDO_TEXTURE = true;
|
|
|
|
local CreateSliceTexture;
|
|
|
|
if USE_PSEUDO_TEXTURE then
|
|
function CreateSliceTexture(parent)
|
|
local f = CreateFrame("Frame", nil, parent, "DUIPseudoSliceTextureTemplate");
|
|
API.Mixin(f, PseudoSliceTextureMixin);
|
|
|
|
f:OnLoad();
|
|
|
|
return f
|
|
end
|
|
else
|
|
function CreateSliceTexture(parent, drawLayer, templateName, subLevel)
|
|
local texture = parent:CreateTexture(nil, drawLayer, templateName, subLevel);
|
|
return texture
|
|
end
|
|
end
|
|
addon.CreateSliceTexture = CreateSliceTexture;
|
|
end
|
|
|