mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-03-23 07:40:14 +00:00
feat: add 40+ frame metatable methods to prevent addon nil-reference errors
Add commonly called frame methods as no-ops or with basic state tracking on the frame metatable, so any CreateFrame result supports them: Layout: SetFrameLevel/Get, SetFrameStrata/Get, SetScale/Get/GetEffective, ClearAllPoints, SetID/GetID, GetLeft/Right/Top/Bottom, GetNumPoints, GetPoint, SetHitRectInsets Behavior: EnableMouse, EnableMouseWheel, SetMovable, SetResizable, RegisterForDrag, SetClampedToScreen, SetToplevel, Raise, Lower, StartMoving, StopMovingOrSizing, RegisterForClicks, IsMouseOver Visual: SetBackdrop, SetBackdropColor, SetBackdropBorderColor Scripting: HookScript (chains with existing SetScript handlers), SetAttribute/GetAttribute, GetObjectType Sizing: SetMinResize, SetMaxResize These prevent the most common addon errors when addons call standard WoW frame methods on CreateFrame results.
This commit is contained in:
parent
b99bf7021b
commit
0d2fd02dca
1 changed files with 51 additions and 0 deletions
|
|
@ -2691,6 +2691,57 @@ void LuaEngine::registerCoreAPI() {
|
|||
}
|
||||
lua_setglobal(L_, "__WoweeFrameMT");
|
||||
|
||||
// Add commonly called no-op frame methods to prevent addon errors
|
||||
luaL_dostring(L_,
|
||||
"local mt = __WoweeFrameMT\n"
|
||||
"function mt:SetFrameLevel(level) self.__frameLevel = level end\n"
|
||||
"function mt:GetFrameLevel() return self.__frameLevel or 1 end\n"
|
||||
"function mt:SetFrameStrata(strata) self.__strata = strata end\n"
|
||||
"function mt:GetFrameStrata() return self.__strata or 'MEDIUM' end\n"
|
||||
"function mt:EnableMouse(enable) end\n"
|
||||
"function mt:EnableMouseWheel(enable) end\n"
|
||||
"function mt:SetMovable(movable) end\n"
|
||||
"function mt:SetResizable(resizable) end\n"
|
||||
"function mt:RegisterForDrag(...) end\n"
|
||||
"function mt:SetClampedToScreen(clamped) end\n"
|
||||
"function mt:SetBackdrop(backdrop) end\n"
|
||||
"function mt:SetBackdropColor(...) end\n"
|
||||
"function mt:SetBackdropBorderColor(...) end\n"
|
||||
"function mt:ClearAllPoints() end\n"
|
||||
"function mt:SetID(id) self.__id = id end\n"
|
||||
"function mt:GetID() return self.__id or 0 end\n"
|
||||
"function mt:SetScale(scale) self.__scale = scale end\n"
|
||||
"function mt:GetScale() return self.__scale or 1.0 end\n"
|
||||
"function mt:GetEffectiveScale() return self.__scale or 1.0 end\n"
|
||||
"function mt:SetToplevel(top) end\n"
|
||||
"function mt:Raise() end\n"
|
||||
"function mt:Lower() end\n"
|
||||
"function mt:GetLeft() return 0 end\n"
|
||||
"function mt:GetRight() return 0 end\n"
|
||||
"function mt:GetTop() return 0 end\n"
|
||||
"function mt:GetBottom() return 0 end\n"
|
||||
"function mt:GetNumPoints() return 0 end\n"
|
||||
"function mt:GetPoint(n) return 'CENTER', nil, 'CENTER', 0, 0 end\n"
|
||||
"function mt:SetHitRectInsets(...) end\n"
|
||||
"function mt:RegisterForClicks(...) end\n"
|
||||
"function mt:SetAttribute(name, value) self['attr_'..name] = value end\n"
|
||||
"function mt:GetAttribute(name) return self['attr_'..name] end\n"
|
||||
"function mt:HookScript(scriptType, fn)\n"
|
||||
" local orig = self.__scripts and self.__scripts[scriptType]\n"
|
||||
" if orig then\n"
|
||||
" self:SetScript(scriptType, function(...) orig(...); fn(...) end)\n"
|
||||
" else\n"
|
||||
" self:SetScript(scriptType, fn)\n"
|
||||
" end\n"
|
||||
"end\n"
|
||||
"function mt:SetMinResize(...) end\n"
|
||||
"function mt:SetMaxResize(...) end\n"
|
||||
"function mt:StartMoving() end\n"
|
||||
"function mt:StopMovingOrSizing() end\n"
|
||||
"function mt:IsMouseOver() return false end\n"
|
||||
"function mt:GetObjectType() return 'Frame' end\n"
|
||||
);
|
||||
|
||||
// CreateFrame function
|
||||
lua_pushcfunction(L_, lua_CreateFrame);
|
||||
lua_setglobal(L_, "CreateFrame");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue