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.

91 lines
4.0 KiB

-- Map Canvas extention to prevent taint issues, LibMapPinHandler[WorldMapFrame]:AddDataProvider(...)
if LibMapPinHandler then
return
end
local function CanvasCallback(canvas, callback)
return function (self, ...)
return canvas[callback](canvas, ...)
end
end
local LibMapPinHandlerMixin = {}
-- MapCanvasMixin Has a lot more than we need so we just copy the bits we need instead of the entire mixin
LibMapPinHandlerMixin.OnShow = MapCanvasMixin.OnShow
LibMapPinHandlerMixin.OnHide = MapCanvasMixin.OnHide
LibMapPinHandlerMixin.RefreshAllDataProviders = MapCanvasMixin.RefreshAllDataProviders
LibMapPinHandlerMixin.CallMethodOnPinsAndDataProviders = MapCanvasMixin.CallMethodOnPinsAndDataProviders
LibMapPinHandlerMixin.ReapplyPinFrameLevels = MapCanvasMixin.ReapplyPinFrameLevels
LibMapPinHandlerMixin.SetGlobalPinScale = MapCanvasMixin.SetGlobalPinScale
LibMapPinHandlerMixin.OnMapChanged = MapCanvasMixin.OnMapChanged
LibMapPinHandlerMixin.AddDataProvider = MapCanvasMixin.AddDataProvider
LibMapPinHandlerMixin.SetPinTemplateType = MapCanvasMixin.SetPinTemplateType
LibMapPinHandlerMixin.EnumeratePinsByTemplate = MapCanvasMixin.EnumeratePinsByTemplate
LibMapPinHandlerMixin.RemoveAllPinsByTemplate = MapCanvasMixin.RemoveAllPinsByTemplate
LibMapPinHandlerMixin.EnumerateAllPins = MapCanvasMixin.EnumerateAllPins
LibMapPinHandlerMixin.AcquirePin = MapCanvasMixin.AcquirePin
LibMapPinHandlerMixin.RemovePin = MapCanvasMixin.RemovePin
LibMapPinHandlerMixin.SetPinPosition = MapCanvasMixin.SetPinPosition
LibMapPinHandlerMixin.GetCanvasScale = MapCanvasMixin.GetCanvasScale
LibMapPinHandlerMixin.GetCanvasZoomPercent = MapCanvasMixin.GetCanvasZoomPercent
LibMapPinHandlerMixin.ApplyPinPosition = MapCanvasMixin.ApplyPinPosition
LibMapPinHandlerMixin.GetGlobalPinScale = MapCanvasMixin.GetGlobalPinScale
LibMapPinHandlerMixin.ExecuteOnAllPins = MapCanvasMixin.ExecuteOnAllPins
function LibMapPinHandlerMixin:OnLoad(ownerMap)
self.ownerMap = ownerMap
local base = CallbackRegistryMixin or CallbackRegistryBaseMixin
base.OnLoad(self)
self.dataProviders = {};
self.dataProviderEventsCount = {};
self.pinPools = {};
self.pinTemplateTypes = {};
self.ScrollContainer = ownerMap.ScrollContainer
hooksecurefunc(ownerMap, "OnShow", CanvasCallback(self, "OnShow"))
hooksecurefunc(ownerMap, "OnHide", CanvasCallback(self, "OnHide"))
hooksecurefunc(ownerMap, "RefreshAllDataProviders", CanvasCallback(self, "RefreshAllDataProviders"))
hooksecurefunc(ownerMap, "CallMethodOnPinsAndDataProviders", CanvasCallback(self, "CallMethodOnPinsAndDataProviders"))
hooksecurefunc(ownerMap, "ReapplyPinFrameLevels", CanvasCallback(self, "ReapplyPinFrameLevels"))
hooksecurefunc(ownerMap, "SetGlobalPinScale", CanvasCallback(self, "SetGlobalPinScale"))
hooksecurefunc(ownerMap, "OnMapChanged", CanvasCallback(self, "OnMapChanged"))
end
function LibMapPinHandlerMixin:GetOwner()
return self.ownerMap
end
function LibMapPinHandlerMixin:GetCanvas()
return self:GetOwner():GetCanvas()
end
function LibMapPinHandlerMixin:GetCanvasContainer()
return self:GetOwner():GetCanvasContainer()
end
function LibMapPinHandlerMixin:GetMapID()
return self:GetOwner():GetMapID()
end
function LibMapPinHandlerMixin:EvaluateLockReasons()
end
function LibMapPinHandlerMixin:GetPinFrameLevelsManager()
return self:GetOwner().pinFrameLevelsManager;
end
function LibMapPinHandlerMixin:ProcessGlobalPinMouseActionHandlers(...)
return self:GetOwner():ProcessGlobalPinMouseActionHandlers(...)
end
local function CreateCanvas(frame)
local result = CreateFromMixins(LibMapPinHandlerMixin)
result:OnLoad(frame)
return result
end
LibMapPinHandler = {}
setmetatable(LibMapPinHandler, {
__index = function (self, frame)
if frame and type(frame) == "table" and frame.GetObjectType then
local result = CreateCanvas(frame)
rawset(self, frame, result)
return result
end
end,
__newindex = function ()
end,
})