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.

957 lines
30 KiB

local FadeFrame = NarciFadeUI.Fade;
local ActiveCharButton, ClassColorOption, MainContainer;
local LEVEL_CLASS_FORMAT = "|cffffffffLevel %d|r %s";
local expansionLogo = {
--Case-insensitive
[0] = "Classic",
[1] = "BC", --This one is somehow low-resolution
[2] = "Woltk",
[3] = "CC",
[4] = "MP",
[5] = "WOD",
[6] = "Legion",
[7] = "BattleforAzeroth",
[8] = "Shadowlands",
[9] = "Dragonflight",
[10] = "thewarwithin",
};
local expansionName = {
[0] = "Classic",
[1] = "The Burning Crusade",
[2] = "Wrath of the Lich King",
[3] = "Cataclysm",
[4] = "Mists of Pandaria",
[5] = "Warlords of Draenor",
[6] = "Legion",
[7] = "Battle for Azeroth",
[8] = "Shadowlands",
[9] = "Dragonflight",
[10] = "The War Within";
};
local classFiles = {
"WARRIOR", "PALADIN", "HUNTER", "ROGUE", "PRIEST", "DEATHKNIGHT", "SHAMAN", "MAGE", "WARLOCK", "MONK", "DRUID", "DEMONHUNTER", "EVOKER",
};
local InteractableWidgetSharedMixin = {}
function InteractableWidgetSharedMixin:ShowArea()
if not self.Area then
local tex = self:CreateTexture(nil, "BACKGROUND");
tex:SetColorTexture(0.5, 0.5, 1, 0.4);
tex:SetPoint("TOPLEFT", self, "TOPLEFT", 0, 0);
tex:SetPoint("BOTTOMRIGHT", self, "BOTTOMRIGHT", 0, 0);
self.Area = tex;
end
self.Area:Show();
end
function InteractableWidgetSharedMixin:HideArea()
if self.Area then
self.Area:Hide();
end
end
function InteractableWidgetSharedMixin:OnEnter()
self:ShowArea();
end
function InteractableWidgetSharedMixin:OnLeave()
self:HideArea();
end
NarciGlueCharSelectCharacterButtonMixin = CreateFromMixins(InteractableWidgetSharedMixin);
function NarciGlueCharSelectCharacterButtonMixin:OnClick()
self:GetParent().CharacterOptionFrame:SetParentObject(self);
end
function NarciGlueCharSelectCharacterButtonMixin:SetFactionEmblem(factionID)
factionID = factionID or 0;
self.factionID = factionID;
if factionID == 0 then
self.FactionEmblem:Hide();
elseif factionID == 1 then
self.FactionEmblem:SetAtlas("CharacterSelection_Horde_Icon", true);
self.FactionEmblem:Show();
elseif factionID == 2 then
self.FactionEmblem:SetAtlas("CharacterSelection_Alliance_Icon", true);
self.FactionEmblem:Show();
end
end
function NarciGlueCharSelectCharacterButtonMixin:SetUp(name, level, className, classFileName, location, faction)
self:SetName(name);
self:SetLocation(location);
self.className = className;
local colorMixin = C_ClassColor.GetClassColor(classFileName);
if colorMixin then
self:SetClassColor( colorMixin:GetRGB() );
end
self:SetLevelAndName(level, className);
local factionID;
if faction then
if faction == "Horde" then
factionID = 1;
elseif faction == "Alliance" then
factionID = 2;
end
else
factionID = 0;
end
self:SetFactionEmblem(factionID);
self:Show();
end
function NarciGlueCharSelectCharacterButtonMixin:SetUnit(unit)
local name = UnitName(unit);
local level = UnitLevel(unit);
local className, classFileName = UnitClass(unit);
local location = GetRealZoneText();
local englishFaction = UnitFactionGroup(unit);
self:SetUp(name, level, className, classFileName, location, englishFaction);
end
function NarciGlueCharSelectCharacterButtonMixin:SetName(name)
if not name or name == "" then
name = "Player";
end
self.CharacterName:SetText(name);
end
function NarciGlueCharSelectCharacterButtonMixin:SetLevel(level)
level = tonumber(level or 0);
self.Info:SetText(string.format(LEVEL_CLASS_FORMAT, level, (self.className or "") ));
self.level = level;
end
function NarciGlueCharSelectCharacterButtonMixin:SetClass(className)
if not className or className == "" then
className = UnitClass("player");
end
self.className = className;
self.Info:SetText(string.format(LEVEL_CLASS_FORMAT, (self.level or 0), self.className));
end
function NarciGlueCharSelectCharacterButtonMixin:SetLevelAndName(level, className)
level = tonumber(level or 0);
self.level = level;
self.className = className;
self.Info:SetText(string.format(LEVEL_CLASS_FORMAT, level, (className or "") ));
end
function NarciGlueCharSelectCharacterButtonMixin:SetClassColor(r, g, b)
self.Info:SetTextColor(r, g, b);
end
function NarciGlueCharSelectCharacterButtonMixin:SetLocation(location)
if not location or location == "" then
location = GetRealZoneText();
end
self.Location:SetText(location);
end
NarciStickerExpansionLogoMixin = CreateFromMixins(InteractableWidgetSharedMixin);
function NarciStickerExpansionLogoMixin:OnClick()
local option = self.OptionFrame;
if not self.isLoaded then
--Create Options
self.isLoaded = true;
local button;
local numExpansions = #expansionName;
local height = 16;
local width;
local maxWidth = 0;
for i = 0, numExpansions, 1 do
button = CreateFrame("Button", nil, option, "NarciExpansionSelectionButtonTemplate");
button:SetPoint("TOPLEFT", option, "TOPLEFT", 0, -height * i - height*0.25);
width = button:Init(i) + 16;
if width > maxWidth then
maxWidth = width;
end
end
for k, b in pairs(option.ExpansionButtons) do
b:SetWidth(maxWidth);
end
option:SetHeight(height *(numExpansions + 1.5));
option:SetWidth(maxWidth);
end
option:Toggle();
end
local function SetExpansionLogo(expansionLevel)
local f = MainContainer.LogoSelect;
if expansionLogo[expansionLevel] then
local prefix;
if expansionLevel == 1 then
prefix = "Interface\\AddOns\\Narcissus\\Art\\Stickers\\Glues-WoW-%sLogo";
else
prefix = "Interface\\GLUES\\COMMON\\Glues-WoW-%sLogo";
end
f.ExpansionLogo:SetTexture( string.format(prefix, expansionLogo[expansionLevel]) );
f.ExpansionLogoMask:SetTexture( string.format(prefix, expansionLogo[expansionLevel]) );
local buttons = f.OptionFrame.ExpansionButtons;
if buttons then
for k, button in pairs(buttons) do
if button.id == expansionLevel then
button:DisableButton();
else
button:EnableButton();
end
end
end
end
end
NarciExpansionSelectionButtonMixin = {};
function NarciExpansionSelectionButtonMixin:Init(id)
self.id = id;
self.Label:SetText(expansionName[id]);
self:EnableButton();
self.Background:SetColorTexture(0.8, 0.8, 0.8, 0.85);
return self.Label:GetWidth();
end
function NarciExpansionSelectionButtonMixin:OnEnter()
self.Label:SetTextColor(1, 1, 1);
end
function NarciExpansionSelectionButtonMixin:OnLeave()
self.Label:SetTextColor(0.72, 0.72, 0.72);
end
function NarciExpansionSelectionButtonMixin:EnableButton()
self:Enable();
self.Label:SetTextColor(0.72, 0.72, 0.72);
self.Background:Hide();
end
function NarciExpansionSelectionButtonMixin:DisableButton()
self:Disable();
self.Label:SetTextColor(0, 0, 0);
self.Background:Show();
end
function NarciExpansionSelectionButtonMixin:OnClick()
SetExpansionLogo(self.id);
end
local function UpdateCharacterName(self, isUserInput)
if isUserInput then
if ActiveCharButton then
ActiveCharButton:SetName(self:GetText());
end
end
end
local function CharacterSelect_Init(self)
self:SetScript("OnShow", nil);
--Player name
local unit = "player";
local name = UnitName(unit);
local CharacterNameBox = CreateFrame("EditBox", nil, self, "NarciStickerEditableTextTemplate");
self.CharacterName = CharacterNameBox;
CharacterNameBox:SetSize(240, 32);
CharacterNameBox:SetFontObject("SystemFont22_Shadow_Outline");
CharacterNameBox:SetJustifyH("CENTER");
CharacterNameBox:SetJustifyV("BOTTOM");
CharacterNameBox:SetTextColor(1, 0.78, 0);
CharacterNameBox:SetPoint("BOTTOM", 0, 94);
CharacterNameBox:SetMaxLetters(16);
CharacterNameBox:SetText(name);
CharacterNameBox:SetScript("OnTextChanged", UpdateCharacterName);
local button;
button = CreateFrame("Frame", nil, self, "NarciGlueButtonSmallTemplate");
button:SetPoint("BOTTOMRIGHT", -10, 10);
button:SetSize(100, 28);
button:SetText("Back");
local DeleteButton = CreateFrame("Frame", nil, self, "NarciGlueButtonSmallTemplate");
DeleteButton:SetPoint("RIGHT", button, "LEFT", -10, 0);
DeleteButton:SetSize(144, 28);
DeleteButton:SetText("Delete Character");
button = CreateFrame("Frame", nil, self, "NarciGlueButtonSmallTemplate");
button:SetPoint("BOTTOMLEFT", 10, 10);
button:SetText("Menu");
local button2 = CreateFrame("Frame", nil, self, "NarciGlueButtonSmallTemplate");
button2:SetPoint("BOTTOM", button, "TOP", 0, 4);
button2:SetText("AddOns");
local button3 = CreateFrame("Frame", nil, self, "NarciGlueButtonSmallTemplate");
button3:SetPoint("BOTTOM", button2, "TOP", 0, 4);
button3:SetText("Shop");
button3:SetButtonAtlas("128-GoldRedButton");
button3.ButtonText:ClearAllPoints();
button3.ButtonText:SetPoint("CENTER", button3, "CENTER", 10, 0);
local logo = button3:CreateTexture(nil, "OVERLAY");
logo:SetSize(16, 16);
logo:SetPoint("RIGHT", button3.ButtonText, "LEFT", -3, 0);
logo:SetAtlas("128-Store-Main");
----Character List----
local cf = self.SelectCharacterFrame;
--Character Buttons
if not cf.CharacterButtons then
button = CreateFrame("Button", nil, cf, "NarciGlueCharSelectCharacterButtonTemplate");
button:SetPoint("TOP", cf, "TOP", 0, -60);
end
local buttons = cf.CharacterButtons;
button = buttons[1];
ActiveCharButton = button;
button:SetUnit("player");
--Change Realm
local realmName = GetRealmName();
local EditBox = CreateFrame("EditBox", nil, cf, "NarciStickerEditableTextTemplate");
EditBox:SetHeight(24);
EditBox:SetPoint("TOP", 0, -5);
EditBox:SetPoint("LEFT", 8, 0);
EditBox:SetPoint("RIGHT", -8, 0);
EditBox:SetFontObject("Narci_SystemFont_Shadow_Outline_Large");
EditBox:SetJustifyH("CENTER");
EditBox:SetTextColor(0.5, 0.5, 0.5);
EditBox:SetMaxLetters(20);
EditBox:SetScript("OnEditFocusLost", function(f)
f:OnEditFocusLost();
if f:GetText() then
f:SetText(realmName);
end
end);
EditBox:SetText(realmName);
button = CreateFrame("Frame", nil, cf, "NarciGlueButtonSmallTemplate");
button:SetPoint("TOP", EditBox, "BOTTOM", 0, 2);
button:SetText("Change Realm");
--Undelete Button
local Undelete = CreateFrame("Button", nil, cf);
Undelete:SetSize(28, 28);
Undelete:SetPoint("BOTTOMRIGHT", -16, 16);
Undelete:Disable();
Undelete:SetDisabledAtlas("128-RedButton-Refresh");
--"Create" Button
button = CreateFrame("Frame", nil, cf, "NarciGlueButtonSmallTemplate");
button:SetPoint("BOTTOMLEFT", cf, "BOTTOMLEFT", 16, 16);
button:SetPoint("RIGHT", Undelete, "LEFT", -10, 0);
button:SetText("Create New Character");
local EnterWorldButton = CreateFrame("Frame", nil, self, "NarciGlueButtonTemplate");
EnterWorldButton:SetPoint("BOTTOM", 0, 46);
EnterWorldButton:SetSize(185, 40);
EnterWorldButton:SetText("Enter World");
for i = 1, 2 do
local RotateButton = CreateFrame("Frame", nil, self);
RotateButton:SetSize(50, 50);
local Background = RotateButton:CreateTexture(nil, "BACKGROUND");
Background:SetSize(36, 36);
Background:SetPoint("CENTER", 0, 0);
Background:SetAtlas("common-button-square-gray-up");
local Icon = RotateButton:CreateTexture(nil, "OVERLAY");
Icon:SetSize(16, 16);
Icon:SetPoint("CENTER", 0, 0);
if i == 1 then
Icon:SetAtlas("common-icon-rotateleft");
RotateButton:SetPoint("TOP", EnterWorldButton, "BOTTOM", -16, 6);
else
Icon:SetAtlas("common-icon-rotateright");
RotateButton:SetPoint("TOP", EnterWorldButton, "BOTTOM", 16, 6);
end
end
end
local function LoginScreen_Init(self)
self:SetScript("OnShow", nil);
local version, internalVersion, date, tocVersion = GetBuildInfo();
local VERSION_TEMPLATE = "Version %s (%s) (Release x64)\n%s";
local ClientVersion = self:CreateFontString(nil, "OVERLAY", "NarciGlueFontNormalSmall");
ClientVersion:SetJustifyH("LEFT");
ClientVersion:SetPoint("BOTTOMLEFT", self, "BOTTOMLEFT", 10, 10);
ClientVersion:SetText( string.format(VERSION_TEMPLATE, version, internalVersion, date) );
local year = date:sub(#date - 3, #date);
local BLIZZ_DISCLAIMER_FORMAT = "Copyright 2004-%s Blizzard Entertainment. All Rights Reserved.";
local Disclaimer = self:CreateFontString(nil, "OVERLAY", "NarciGlueFontNormalSmall");
Disclaimer:SetPoint("BOTTOM", self, "BOTTOM", 0, 10);
Disclaimer:SetText( string.format(BLIZZ_DISCLAIMER_FORMAT, year) );
local button, lastButton;
local leftButtons = {
"Community Site", "My Account", "Create Account"
};
for i = 1, #leftButtons do
button = CreateFrame("Frame", nil, self, "NarciGlueButtonSmallTemplate");
if i == 1 then
button:SetPoint("BOTTOMLEFT", self, "BOTTOMLEFT", 17, 89);
else
button:SetPoint("BOTTOM", lastButton, "TOP", 0, 10);
end
button:SetSize(138, 28);
button:SetText(leftButtons[i]);
lastButton = button;
end
local rightButtons = {
"Quit", "Credits", "Cinematics", "System"
};
for i = 1, #rightButtons do
button = CreateFrame("Frame", nil, self, "NarciGlueButtonSmallTemplate");
if i == 1 then
button:SetPoint("BOTTOMRIGHT", self, "BOTTOMRIGHT", -12, 34);
elseif i == 2 then
button:SetPoint("BOTTOM", lastButton, "TOP", 0, 87);
else
button:SetPoint("BOTTOM", lastButton, "TOP", 0, 10);
end
button:SetSize(138, 28);
button:SetText(rightButtons[i]);
lastButton = button;
end
button = CreateFrame("Frame", nil, self, "NarciGlueEditBoxTemplate");
button.Label:SetText("Email or Phone");
button:SetPoint("BOTTOM", self, "BOTTOM", 0, 345);
button = CreateFrame("Frame", nil, self, "NarciGlueEditBoxTemplate");
button.Label:SetText("Password");
button:SetPoint("BOTTOM", self, "BOTTOM", 0, 275);
button = CreateFrame("Frame", nil, self, "NarciGlueButtonTemplate");
button:SetText("Log In");
button:SetSize(200, 30);
button:SetPoint("BOTTOM", self, "BOTTOM", 0, 180);
local logo = self:CreateTexture(nil, "OVERLAY");
logo:SetSize(100, 100);
logo:SetTexture("Interface\\Glues\\Mainmenu\\Glues-BlizzardLogo");
logo:SetPoint("BOTTOM", self, "BOTTOM", 0, 8);
end
local function LogoSelect_Init(self)
self:SetScript("OnShow", nil);
local expansionLevel = GetExpansionLevel();
if not expansionLogo[expansionLevel] then
expansionLevel = 8;
end
SetExpansionLogo(expansionLevel);
end
NarciPhotoModeStickerContainerMixin = {};
function NarciPhotoModeStickerContainerMixin:OnLoad()
MainContainer = self;
self.CharacterSelectUI:SetScript("OnShow", CharacterSelect_Init);
self.LoginScreen:SetScript("OnShow", LoginScreen_Init);
self.LogoSelect:SetScript("OnShow", LogoSelect_Init);
self.OnLoad = nil;
end
function NarciPhotoModeStickerContainerMixin:ShowOverlay(id)
self.LoginScreen:SetShown(id == 1);
self.CharacterSelectUI:SetShown(id == 2);
self:SetShown(id);
self.LogoSelect:SetShown(id);
end
function NarciPhotoModeStickerContainerMixin:OnHide()
self:ShowOverlay();
end
--/run NarciShowCharacterSelectUI()
NarciStickerEditableTextMixin = CreateFromMixins(InteractableWidgetSharedMixin); --EditBox
function NarciStickerEditableTextMixin:QuitEdit()
self:ClearFocus();
end
function NarciStickerEditableTextMixin:OnEditFocusGained()
end
function NarciStickerEditableTextMixin:OnEditFocusLost()
self:HighlightText(0, 0);
self:HideArea();
end
function NarciStickerEditableTextMixin:OnEnterPressed()
self:QuitEdit();
end
function NarciStickerEditableTextMixin:OnEscapePressed()
self:QuitEdit();
end
function NarciStickerEditableTextMixin:OnHide()
self:QuitEdit();
self:HideArea();
end
function NarciStickerEditableTextMixin:OnEnter()
self:ShowArea();
end
function NarciStickerEditableTextMixin:OnLeave()
if not self:HasFocus() then
self:HideArea();
end
end
NarciStickerCharacterOptionMixin = CreateFromMixins(NarciAutoCloseFrameMixin);
function NarciStickerCharacterOptionMixin:OnLoad()
ClassColorOption = self;
local ColorToggle = self.ColorToggle;
ColorToggle:SetScript("OnEnter", function(f)
f.Background:Show();
end);
ColorToggle:SetScript("OnLeave", function(f)
f.Background:Hide();
end);
ColorToggle:SetScript("OnClick", function(f)
self:ToggleColorOption();
end);
local FactionSwitch = self.FactionSwitch;
FactionSwitch:SetScript("OnEnter", function(f)
f.Background:Show();
end);
FactionSwitch:SetScript("OnLeave", function(f)
f.Background:Hide();
end);
FactionSwitch:SetScript("OnClick", function(f, button)
if not f.id then
f.id = 0;
end
if button == "LeftButton" then
f.id = f.id + 1;
if f.id > 2 then
f.id = 0;
end
else
f.id = f.id - 1;
if f.id < 0 then
f.id = 2;
end
end
self:SetFaction(f.id);
end);
end
function NarciStickerCharacterOptionMixin:SetParentObject(charButton)
if charButton == self.parentObject then
self:Hide();
return
end
ActiveCharButton = charButton;
self.parentObject = charButton;
self:ClearAllPoints();
self:SetPoint("TOPRIGHT", charButton, "TOPLEFT", -16, 0);
--Update Text
self.CharacterName:SetText(charButton.CharacterName:GetText() or "");
self.Level:SetText(charButton.level);
self.Class:SetText(charButton.className);
self.Class:SetTextColor(charButton.Info:GetTextColor());
self.Location:SetText(charButton.Location:GetText() or "");
self.ColorToggle.ColorBlock:SetColorTexture(charButton.Info:GetTextColor());
self:SetFaction(charButton.factionID);
self:Show();
end
function NarciStickerCharacterOptionMixin:ToggleColorOption()
if not self.ColorOption then
local f = CreateFrame("Frame", nil, self.ColorToggle, "NarciAutoCloseFrameTemplate");
local numButtons = #classFiles;
local size = 16;
local numPerRow = 4;
local row, col = 1, 1;
f:SetPoint("TOPLEFT", self.ColorToggle, "TOPRIGHT", 4, size);
local button;
local colorMixin;
for i = 1, numButtons do
button = CreateFrame("Button", nil, f, "NarciStickerColorButtonTemplate");
col = i % numPerRow;
if col == 0 then
col = numPerRow;
end
row = math.ceil(i / numPerRow);
button:SetPoint("TOPLEFT", f, "TOPLEFT", size * (col - 1), -size * (row - 1));
colorMixin = C_ClassColor.GetClassColor(classFiles[i]);
if colorMixin then
button:SetColor( colorMixin:GetRGB() );
end
end
f:SetSize(size * numPerRow, size * row);
self.ColorOption = f;
end
self.ColorOption:Toggle();
end
function NarciStickerCharacterOptionMixin:SetClassColor(r, g, b)
if self.parentObject then
self.parentObject:SetClassColor(r, g, b);
self.ColorToggle.ColorBlock:SetColorTexture(r, g, b);
self.Class:SetTextColor(r, g, b);
end
end
function NarciStickerCharacterOptionMixin:SetFaction(factionID)
if self.parentObject then
if not factionID then
factionID = self.parentObject.factionID;
if not factionID then
factionID = 0;
end
factionID = factionID + 1;
if factionID > 1 then
factionID = 0;
end
end
self.parentObject:SetFactionEmblem(factionID);
local icon;
if factionID == 0 then
icon = 136243;
elseif factionID == 1 then
icon = 2565244;
elseif factionID == 2 then
icon = 2565243;
end
self.FactionSwitch.Icon:SetTexture(icon);
self.FactionSwitch.id = factionID;
end
end
NarciStickerColorButtonMixin = {};
function NarciStickerColorButtonMixin:OnEnter()
self.Background:SetColorTexture(0.50, 0.50, 0.50);
end
function NarciStickerColorButtonMixin:OnLeave()
self.Background:SetColorTexture(0, 0, 0);
end
function NarciStickerColorButtonMixin:OnClick()
local buttons = self:GetParent().ColorButtons;
for k, b in pairs(buttons) do
if b ~= self then
b:EnableButton();
else
b:DisableButton();
end
end
ClassColorOption:SetClassColor(self.r, self.g, self.b);
end
function NarciStickerColorButtonMixin:DisableButton()
self:Disable();
--self.Background:SetColorTexture(0.8, 0.8, 0.8);
self.Selection:Show();
end
function NarciStickerColorButtonMixin:EnableButton()
self:Enable();
--self.Background:SetColorTexture(0, 0, 0);
self.Selection:Hide();
end
function NarciStickerColorButtonMixin:SetColor(r, g, b)
self.r, self.g, self.b = r, g, b;
self.ColorBlock:SetColorTexture(r, g, b);
end
local DROPDOWN_PADDING = 4;
local function Init(self)
--Create DropDown
local BUTTON_HEIGHT = 20;
self.DropDown = CreateFrame("Frame", nil, self);
local d = self.DropDown;
d:Hide();
d:SetPoint("BOTTOMLEFT", self, "TOPLEFT", 0, 0);
NarciAPI.NineSliceUtil.SetUpBackdrop(d, "photoModePopup");
local StickOptions = {
{"Login Screen", 1},
{"Character Select", 2},
};
local function OptionButton_OnEnter(f)
FadeFrame(f.Highlight, 0.2, 1);
self.rootFrame:OnEnter();
end
local function OptionButton_OnLeave(f)
FadeFrame(f.Highlight, 0.2, 0);
self.rootFrame:OnLeave();
end
local function OptionButton_OnClick(f)
self:CloseDropDown();
MainContainer:ShowOverlay(f.id);
self:UpdateState();
end
local numButtons = #StickOptions;
local button, divider;
for i = 1, numButtons do
button = CreateFrame("Button", nil, d);
button:SetSize(120, BUTTON_HEIGHT);
button:SetPoint("TOPLEFT", d, "TOPLEFT", DROPDOWN_PADDING, -DROPDOWN_PADDING + (1 - i) * BUTTON_HEIGHT);
button.Label = button:CreateFontString(nil, "OVERLAY", "NarciPastelBrownFont");
button.Label:SetPoint("LEFT", button, "LEFT", 8, 0);
button.Label:SetText(StickOptions[i][1]);
button.id = StickOptions[i][2];
button.Highlight = button:CreateTexture(nil, "ARTWORK");
button.Highlight:SetPoint("TOPLEFT", button, "TOPLEFT", 1, -1);
button.Highlight:SetPoint("BOTTOMRIGHT", button, "BOTTOMRIGHT", -1, 1);
button.Highlight:SetColorTexture(1, 1, 1, 0.2);
button.Highlight:Hide();
button.Highlight:SetAlpha(0);
button:SetScript("OnEnter", OptionButton_OnEnter);
button:SetScript("OnLeave", OptionButton_OnLeave);
button:SetScript("OnClick", OptionButton_OnClick);
if i ~= numButtons then
divider = button:CreateTexture(nil, "OVERLAY");
divider:SetTexture("Interface\\AddOns\\Narcissus\\Art\\Widgets\\ActorPanel\\DividerH");
divider:SetHeight(4);
divider:SetPoint("LEFT", button, "BOTTOMLEFT", 0, 0);
divider:SetPoint("RIGHT", button, "BOTTOMRIGHT", 0, 0);
end
end
d:SetSize(120 + 2*DROPDOWN_PADDING, BUTTON_HEIGHT * numButtons + 2*DROPDOWN_PADDING);
end
NarciPhotoModeStickerToggleMixin = {};
function NarciPhotoModeStickerToggleMixin:OnLoad()
self.Icon:SetVertexColor(0.6, 0.6, 0.6);
self.rootFrame = Narci_ModelSettings;
Narci_ModelSettings:AddSubFrame(self, "StickerToggle");
self:ClearAllPoints();
self:SetPoint("LEFT", Narci_TextOverlay, "RIGHT", 4, 0);
self.Label:SetText(Narci.L["Photo Mode Frame"]);
end
function NarciPhotoModeStickerToggleMixin:OnEnter()
FadeFrame(self.Highlight, 0.12, 1);
if not self.isOn then
self.Arrow:Show();
self.Arrow.flyInDown:Play();
end
end
function NarciPhotoModeStickerToggleMixin:OnLeave()
if not self.isOn then
FadeFrame(self.Highlight, 0.25, 0);
end
self.Arrow:Hide();
end
function NarciPhotoModeStickerToggleMixin:OnClick(button)
if Init then
Init(self);
Init = nil;
end
if button == "RightButton" then
self:ShowDropDown();
else
if self.isOn then
MainContainer:Hide();
else
if self.DropDown:IsShown() then
self:CloseDropDown();
else
self:ShowDropDown();
end
end
end
self:UpdateState();
end
function NarciPhotoModeStickerToggleMixin:OnShow()
self:UpdateState();
end
function NarciPhotoModeStickerToggleMixin:OnHide()
self:CloseDropDown();
MainContainer:Hide();
end
function NarciPhotoModeStickerToggleMixin:UpdateState()
self.isOn = MainContainer:IsShown();
if self.isOn then
self.Highlight:Show();
self.Highlight:SetAlpha(1);
self.Label:SetTextColor(0.88, 0.88, 0.88);
self.Icon:SetVertexColor(1, 1, 1);
else
if not self:IsMouseOver() then
self.Highlight:Hide();
self.Highlight:SetAlpha(0);
end
self.Label:SetTextColor(0.65, 0.65, 0.65);
self.Icon:SetVertexColor(0.6, 0.6, 0.6);
end
end
function NarciPhotoModeStickerToggleMixin:ShowDropDown()
self.DropDown:Show();
self:RegisterEvent("GLOBAL_MOUSE_DOWN");
end
function NarciPhotoModeStickerToggleMixin:CloseDropDown()
if self.DropDown then
self.DropDown:Hide();
end
self:UnregisterEvent("GLOBAL_MOUSE_DOWN");
end
function NarciPhotoModeStickerToggleMixin:OnEvent(event)
if event == "GLOBAL_MOUSE_DOWN" then
if not self:IsFocused() then
self:CloseDropDown();
end
end
end
function NarciPhotoModeStickerToggleMixin:IsFocused()
return self:IsShown() and self:IsMouseOver() or ( self.DropDown and self.DropDown:IsShown() and self.DropDown:IsMouseOver(-DROPDOWN_PADDING, DROPDOWN_PADDING, DROPDOWN_PADDING, -DROPDOWN_PADDING) )
end
NarciPseudoRedButtonMixin = {};
function NarciPseudoRedButtonMixin:SetButtonAtlas(atlasName, atlasNamePostfix)
atlasName = atlasName or "128-RedButton";
atlasNamePostfix = atlasNamePostfix or ""; --Disabled, Pressed
self.Left:SetAtlas(atlasName.."-Left"..atlasNamePostfix, true);
self.Center:SetAtlas("_"..atlasName.."-Center"..atlasNamePostfix);
self.Right:SetAtlas(atlasName.."-Right"..atlasNamePostfix, true);
end
function NarciPseudoRedButtonMixin:OnLoad()
self:SetButtonAtlas(self.atlasName, self.atlasNamePostfix);
self:UpdateScale();
if self.fontName then
self:SetFont(self.fontName);
self.fontName = nil;
end
if self.buttonText then
self:SetText(self.buttonText);
self.buttonText = nil;
end
end
function NarciPseudoRedButtonMixin:SetFont(fontName)
self.ButtonText:SetFontObject(fontName);
end
function NarciPseudoRedButtonMixin:SetText(text)
self.ButtonText:SetText(text);
end
function NarciPseudoRedButtonMixin:UpdateScale()
--This is basically a copy of Blizzard code from SharedUIPanelTemplates.lua
local atlasName = self.atlasName or "128-RedButton";
local leftAtlasInfo = C_Texture.GetAtlasInfo(atlasName.."-Left");
local rightAtlasInfo = C_Texture.GetAtlasInfo(atlasName.."-Right");
if not (leftAtlasInfo and rightAtlasInfo) then
return
end
local buttonHeight = self:GetHeight();
local buttonWidth = self:GetWidth();
local scale = buttonHeight / leftAtlasInfo.height;
self.Left:SetScale(scale);
self.Right:SetScale(scale);
local leftWidth = leftAtlasInfo.width * scale;
local rightWidth = rightAtlasInfo.width * scale;
local leftAndRightWidth = leftWidth + rightWidth;
if leftAndRightWidth > buttonWidth then
local extraWidth = leftAndRightWidth - buttonWidth;
local newLeftWidth = leftWidth;
local newRightWidth = rightWidth;
if (leftWidth - extraWidth) > rightWidth then
newLeftWidth = leftWidth - extraWidth;
elseif (rightWidth - extraWidth) > leftWidth then
newRightWidth = rightWidth - extraWidth;
else
if leftWidth ~= rightWidth then
local unevenAmount = math.abs(leftWidth - rightWidth);
extraWidth = extraWidth - unevenAmount;
newLeftWidth = math.min(leftWidth, rightWidth);
newRightWidth = newLeftWidth;
end
local equallyDividedExtraWidth = extraWidth / 2;
newLeftWidth = newLeftWidth - equallyDividedExtraWidth;
newRightWidth = newRightWidth - equallyDividedExtraWidth;
end
local leftPercentage = newLeftWidth / leftWidth;
self.Left:SetTexCoord(0, leftPercentage, 0, 1);
self.Left:SetWidth(newLeftWidth / scale);
local rightPercentage = newRightWidth / rightWidth;
self.Right:SetTexCoord(1 - rightPercentage, 1, 0, 1);
self.Right:SetWidth(newRightWidth / scale);
else
self.Left:SetTexCoord(0, 1, 0, 1);
self.Left:SetWidth(leftAtlasInfo.width);
self.Right:SetTexCoord(0, 1, 0, 1);
self.Right:SetWidth(rightAtlasInfo.width);
end
leftAtlasInfo, rightAtlasInfo = nil, nil;
end