ButtonForge-classic/UILibClickMask.lua

111 lignes
3.0 KiB
Lua

--[[
Author: Alternator (Massiner of Nathrezim)
Copyright 2010
Notes:
]]
local UILib = BFUILib;
--[[
This is a little (hack) utility to allow clicking a button/bar without actually triggering the buttons secure action, it is expected that whenever the mouse moves over a button
that we need to click without triggering, this function will be called to position itself over the button to intercept the click
--]]
local ClickButtonMask = CreateFrame("BUTTON", nil, BFConfigureLayer);
ClickButtonMask:Hide();
ClickButtonMask:RegisterForClicks("LeftButtonUp", "RightButtonUp");
ClickButtonMask.HLTexture = ClickButtonMask:CreateTexture();
ClickButtonMask.HLTexture:SetPoint("TOPLEFT", ClickButtonMask, "TOPLEFT");
ClickButtonMask.HLTexture:SetPoint("BOTTOMRIGHT", ClickButtonMask, "BOTTOMRIGHT");
ClickButtonMask.Locked = false;
ClickButtonMask.Inside = false;
--Note that If a Right click function is not set, the primary callbackfunc will be called if right is clicked
function UILib.SetMask(Ref, CallBackFunc, CallBackFuncRight, Widget, Cursor, HighlightTexture, TexCoords)
if (Ref) then
if (ClickButtonMask.Locked) then
return;
end
ClickButtonMask.Ref = Ref;
ClickButtonMask.CallBackFunc = CallBackFunc;
ClickButtonMask.CallBackFuncRight = CallBackFuncRight;
ClickButtonMask.Cursor = Cursor;
ClickButtonMask:SetParent(Widget); --I believe by setting the parent the strata and level are auto set
ClickButtonMask:ClearAllPoints();
ClickButtonMask:SetPoint("TOPLEFT", Widget, "TOPLEFT");
ClickButtonMask:SetPoint("BOTTOMRIGHT", Widget, "BOTTOMRIGHT");
ClickButtonMask:SetFrameLevel(Widget:GetFrameLevel() + 1);
ClickButtonMask.HLTexture:SetTexture(HighlightTexture, true);
ClickButtonMask.HLTexture:SetTexCoord(unpack(TexCoords));
ClickButtonMask:Show();
else
if (ClickButtonMask.Locked) then
UILib.UnlockMask();
end
ClickButtonMask.Ref = nil;
ClickButtonMask.CallBackFunc = nil;
ClickButtonMask.CallBackFuncRight = nil;
ClickButtonMask.Cursor = nil;
ClickButtonMask:SetParent(BFConfigureLayer);
ClickButtonMask:ClearAllPoints();
ClickButtonMask:Hide();
end
end
function UILib.LockMask()
ClickButtonMask.Locked = true;
end
function UILib.UnlockMask()
if (not ClickButtonMask.Inside) then
ClickButtonMask.HLTexture:Hide();
end
ClickButtonMask.Locked = false;
end
function ClickButtonMask:OnClick(Button)
if (Button == "RightButton") then
if (self.CallBackFuncRight) then
self.CallBackFuncRight(self.Ref);
return;
end
end
if (self.CallBackFunc) then
self.CallBackFunc(self.Ref);
end
end
function ClickButtonMask:OnEnter()
self.HLTexture:Show();
self.Inside = true;
if (self.Cursor) then
SetCursor(self.Cursor);
else
SetCursor(nil);
end
end
function ClickButtonMask:OnLeave()
self.Inside = false;
if (not self.Locked) then
self.HLTexture:Hide();
end
SetCursor(nil);
end
ClickButtonMask:SetScript("OnEnter", ClickButtonMask.OnEnter);
ClickButtonMask:SetScript("OnLeave", ClickButtonMask.OnLeave);
ClickButtonMask:SetScript("OnClick", ClickButtonMask.OnClick);