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.
154 lines
3.6 KiB
154 lines
3.6 KiB
local PIECE_SIZE = 16;
|
|
|
|
local nineSlices = {
|
|
"TopLeftCorner", "TopEdge", "TopRightCorner",
|
|
"LeftEdge", "Center", "RightEdge",
|
|
"BottomLeftCorner", "BottomEdge", "BottomRightCorner",
|
|
};
|
|
|
|
local BACKDROP_FILLET_R8 = {
|
|
edgeFile = "Interface\\AddOns\\Narcissus\\Art\\Frames\\WhiteBorderR8",
|
|
tile = true,
|
|
tileEdge = true,
|
|
tileSize = PIECE_SIZE,
|
|
edgeSize = PIECE_SIZE,
|
|
};
|
|
|
|
local BACKDROP_FILLET_R4 = {
|
|
edgeFile = "Interface\\AddOns\\Narcissus\\Art\\Frames\\WhiteBorderR4",
|
|
tile = true,
|
|
tileEdge = true,
|
|
tileSize = PIECE_SIZE,
|
|
edgeSize = PIECE_SIZE,
|
|
};
|
|
|
|
local BACKDROP_FILLET_R4_GLOW = {
|
|
green = {
|
|
edgeFile = "Interface\\AddOns\\Narcissus\\Art\\Frames\\WhiteBorderR4-Glow-Green",
|
|
tile = true,
|
|
tileEdge = true,
|
|
tileSize = PIECE_SIZE,
|
|
edgeSize = PIECE_SIZE,
|
|
}
|
|
};
|
|
|
|
local function SetBorderBlendMode(frame, mode)
|
|
local region;
|
|
for i, pieceName in pairs(nineSlices) do
|
|
region = frame[pieceName];
|
|
if region then
|
|
region:SetBlendMode(mode);
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
NarciFrameBorderMixin = CreateFromMixins(BackdropTemplateMixin);
|
|
|
|
function NarciFrameBorderMixin:OnLoad()
|
|
local backdropInfo;
|
|
|
|
if self.cornerRadius then
|
|
if self.cornerRadius == 4 then
|
|
backdropInfo = BACKDROP_FILLET_R4;
|
|
else
|
|
backdropInfo = BACKDROP_FILLET_R8;
|
|
end
|
|
else
|
|
backdropInfo = BACKDROP_FILLET_R4;
|
|
end
|
|
|
|
if self.isSubFrame then
|
|
self.Background:Hide();
|
|
self.CloseButton:Hide();
|
|
end
|
|
|
|
self:SetBackdrop(backdropInfo);
|
|
self:SetBorderBrightness(0.25);
|
|
|
|
self.BorderGlow:SetBackdrop(BACKDROP_FILLET_R4_GLOW);
|
|
self:SetGlowColor("green");
|
|
end
|
|
|
|
function NarciFrameBorderMixin:SetBorderColor(r, g, b)
|
|
self:SetBackdropBorderColor(r, g, b, 1);
|
|
self.borderColor = {r, g, b};
|
|
end
|
|
|
|
function NarciFrameBorderMixin:SetGlowColor(colorName)
|
|
if BACKDROP_FILLET_R4_GLOW[colorName] then
|
|
self.BorderGlow:SetBackdrop(BACKDROP_FILLET_R4_GLOW[colorName]);
|
|
SetBorderBlendMode(self.BorderGlow, "ADD");
|
|
end
|
|
end
|
|
|
|
function NarciFrameBorderMixin:Glow()
|
|
self.BorderGlow:Show();
|
|
self.BorderGlow.Glow:Stop();
|
|
self.BorderGlow.Glow:Play();
|
|
end
|
|
|
|
function NarciFrameBorderMixin:SetBorderBrightness(v)
|
|
self:SetBorderColor(v, v, v);
|
|
end
|
|
|
|
function NarciFrameBorderMixin:LockHighlight(state)
|
|
self.isHighlightLocked = state;
|
|
|
|
if state then
|
|
self:SetBackdropBorderColor(0.8, 0.8, 0.8, 1);
|
|
else
|
|
self:SetBorderColor(unpack(self.borderColor));
|
|
end
|
|
end
|
|
|
|
function NarciFrameBorderMixin:IsHighlightLocked()
|
|
return self.isHighlightLocked;
|
|
end
|
|
|
|
function NarciFrameBorderMixin:OnEnter()
|
|
if not self:IsHighlightLocked() then
|
|
self:SetBackdropBorderColor(0.5, 0.5, 0.5, 1);
|
|
end
|
|
end
|
|
|
|
function NarciFrameBorderMixin:OnLeave()
|
|
if not self:IsHighlightLocked() then
|
|
self:SetBorderColor(unpack(self.borderColor));
|
|
end
|
|
end
|
|
|
|
|
|
NarciFrameCloseButtonMixin = {};
|
|
|
|
function NarciFrameCloseButtonMixin:ResetColor()
|
|
self.Cross:SetVertexColor(0.25, 0.25, 0.25);
|
|
end
|
|
|
|
function NarciFrameCloseButtonMixin:OnEnter()
|
|
self.Cross:SetVertexColor(0.93, 0.11, 0.14);
|
|
end
|
|
|
|
function NarciFrameCloseButtonMixin:OnLeave()
|
|
self:ResetColor();
|
|
end
|
|
|
|
function NarciFrameCloseButtonMixin:OnLoad()
|
|
self:ResetColor();
|
|
|
|
self:SetScript("OnLoad", nil);
|
|
self.OnLoad = nil;
|
|
end
|
|
|
|
function NarciFrameCloseButtonMixin:OnHide()
|
|
self:ResetColor();
|
|
end
|
|
|
|
function NarciFrameCloseButtonMixin:OnClick()
|
|
local parentName = self:GetParent();
|
|
if parentName.Close then
|
|
parentName:Close();
|
|
else
|
|
parentName:Hide();
|
|
end
|
|
end
|