forked from Bastion/Bastion
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.
126 lines
3.4 KiB
126 lines
3.4 KiB
--- @type StdUi
|
|
local StdUi = LibStub and LibStub('StdUi', true);
|
|
if not StdUi then
|
|
return
|
|
end
|
|
|
|
local module, version = 'Button', 6;
|
|
if not StdUi:UpgradeNeeded(module, version) then return end;
|
|
|
|
local SquareButtonCoords = {
|
|
UP = { 0.45312500, 0.64062500, 0.01562500, 0.20312500};
|
|
DOWN = { 0.45312500, 0.64062500, 0.20312500, 0.01562500};
|
|
LEFT = { 0.23437500, 0.42187500, 0.01562500, 0.20312500};
|
|
RIGHT = { 0.42187500, 0.23437500, 0.01562500, 0.20312500};
|
|
DELETE = { 0.01562500, 0.20312500, 0.01562500, 0.20312500};
|
|
};
|
|
|
|
local SquareButtonMethods = {
|
|
SetIconDisabled = function(self, texture, iconWidth, iconHeight)
|
|
self.iconDisabled = self.stdUi:Texture(self, iconWidth, iconHeight, texture);
|
|
self.iconDisabled:SetDesaturated(true);
|
|
self.iconDisabled:SetPoint('CENTER', 0, 0);
|
|
|
|
self:SetDisabledTexture(self.iconDisabled);
|
|
end,
|
|
|
|
SetIcon = function(self, texture, iconWidth, iconHeight, alsoDisabled)
|
|
self.icon = self.stdUi:Texture(self, iconWidth, iconHeight, texture);
|
|
self.icon:SetPoint('CENTER', 0, 0);
|
|
|
|
self:SetNormalTexture(self.icon);
|
|
|
|
if alsoDisabled then
|
|
self:SetIconDisabled(texture, iconWidth, iconHeight);
|
|
end
|
|
end
|
|
};
|
|
|
|
function StdUi:SquareButton(parent, width, height, icon, name)
|
|
local button = CreateFrame('Button', name, parent);
|
|
button.stdUi = self;
|
|
|
|
self:InitWidget(button);
|
|
self:SetObjSize(button, width, height);
|
|
|
|
self:ApplyBackdrop(button);
|
|
self:HookDisabledBackdrop(button);
|
|
self:HookHoverBorder(button);
|
|
|
|
for k, v in pairs(SquareButtonMethods) do
|
|
button[k] = v;
|
|
end
|
|
|
|
local coords = SquareButtonCoords[icon];
|
|
if coords then
|
|
button:SetIcon([[Interface\Buttons\SquareButtonTextures]], 16, 16, true);
|
|
button.icon:SetTexCoord(coords[1], coords[2], coords[3], coords[4]);
|
|
button.iconDisabled:SetTexCoord(coords[1], coords[2], coords[3], coords[4]);
|
|
end
|
|
|
|
return button;
|
|
end
|
|
|
|
function StdUi:ButtonLabel(parent, text)
|
|
local label = self:Label(parent, text);
|
|
label:SetJustifyH('CENTER');
|
|
self:GlueAcross(label, parent, 2, -2, -2, 2);
|
|
parent:SetFontString(label);
|
|
|
|
return label;
|
|
end
|
|
|
|
function StdUi:HighlightButtonTexture(button)
|
|
local hTex = self:Texture(button, nil, nil, nil);
|
|
hTex:SetColorTexture(
|
|
self.config.highlight.color.r,
|
|
self.config.highlight.color.g,
|
|
self.config.highlight.color.b,
|
|
self.config.highlight.color.a
|
|
);
|
|
hTex:SetAllPoints();
|
|
|
|
return hTex;
|
|
end
|
|
|
|
--- Creates a button with only a highlight
|
|
--- @return Button
|
|
function StdUi:HighlightButton(parent, width, height, text, inherit, name)
|
|
local button = CreateFrame('Button', name, parent, inherit);
|
|
self:InitWidget(button);
|
|
self:SetObjSize(button, width, height);
|
|
button.text = self:ButtonLabel(button, text);
|
|
|
|
function button:SetFontSize(newSize)
|
|
self.text:SetFontSize(newSize);
|
|
end
|
|
|
|
local hTex = self:HighlightButtonTexture(button);
|
|
hTex:SetBlendMode('ADD');
|
|
|
|
button:SetHighlightTexture(hTex);
|
|
button.highlightTexture = hTex;
|
|
|
|
return button;
|
|
end
|
|
|
|
--- @return Button
|
|
function StdUi:Button(parent, width, height, text, inherit, name)
|
|
local button = self:HighlightButton(parent, width, height, text, inherit, name)
|
|
button.stdUi = self;
|
|
|
|
button:SetHighlightTexture('');
|
|
|
|
self:ApplyBackdrop(button);
|
|
self:HookDisabledBackdrop(button);
|
|
self:HookHoverBorder(button);
|
|
|
|
return button;
|
|
end
|
|
|
|
function StdUi:ButtonAutoWidth(button, padding)
|
|
padding = padding or 5;
|
|
button:SetWidth(button.text:GetStringWidth() + padding * 2);
|
|
end
|
|
|
|
StdUi:RegisterModule(module, version); |