Nenue@54: -- Veneer Nenue@71: -- Base framework for making things draggable. Nenue@0: Nenue@59: local vn, print = LibStub("LibKraken").register(VeneerController) Nenue@54: Nenue@0: Nenue@59: local defaults = { Nenue@59: enableAll = true, Nenue@59: enableModule = { Nenue@59: BuffFrame = true, Nenue@59: }, Nenue@59: BuffFrame = { Nenue@59: width = 48, Nenue@59: height = 48, Nenue@59: } Nenue@59: } Nenue@71: local configMode Nenue@71: local veneers = {} Nenue@71: Nenue@71: do Nenue@71: local anonID = 0 Nenue@71: local AnonymousName = function() Nenue@71: anonID = anonID + 1 Nenue@71: return 'VN' .. anonID Nenue@71: end Nenue@71: end Nenue@71: Nenue@71: Nenue@71: local VeneerButton_Update = function(self) Nenue@71: if configMode then Nenue@71: self:SetScript('OnDragStart', self.StartMoving) Nenue@71: self:SetScript('OnDragStop', self.StopMovingOrSizing) Nenue@71: self:SetMovable(false) Nenue@71: self:EnableMouse(false) Nenue@71: self:RegisterForDrag('LeftButton') Nenue@71: Nenue@71: self.bg:SetColorTexture(0,1,0,0.5) Nenue@71: else Nenue@71: Nenue@71: self:SetScript('OnDragStart', self.StartMoving) Nenue@71: self:SetScript('OnDragStop', self.StopMovingOrSizing) Nenue@71: self:SetMovable(false) Nenue@71: self:EnableMouse(false) Nenue@71: Nenue@71: self.bg:SetColorTexture(0,1,0,0) Nenue@71: end Nenue@71: end Nenue@71: Nenue@71: local ToggleVeneerConfig = function() Nenue@71: if configMode then Nenue@71: configMode = false Nenue@71: vn:print('Config mode off.') Nenue@71: else Nenue@71: configMode = true Nenue@71: vn:print('Config mode on.') Nenue@71: end Nenue@71: Nenue@71: for frame, veneer in pairs(veneers) do Nenue@71: VeneerButton_Update(veneer) Nenue@71: end Nenue@71: end Nenue@71: Nenue@71: local VeneerButton_OnShow = function(self) Nenue@71: VeneerButton_Update(self) Nenue@71: end Nenue@71: Nenue@71: vn.GetVeneer = function(frame) Nenue@71: if not frame then Nenue@71: print('|cFFFF4400Unable to acquire frame...|r') Nenue@71: return Nenue@71: end Nenue@71: Nenue@71: Nenue@71: if veneers[frame] then Nenue@71: return veneers[frame] Nenue@71: end Nenue@71: Nenue@71: local veneer = CreateFrame('Frame', (frame:GetName() or AnonymousName())..'Veneer', UIParent) Nenue@71: Nenue@71: veneer:SetAllPoints(frame) Nenue@71: veneer:SetParent(frame) Nenue@71: veneer.bg = veneer:CreateTexture() Nenue@71: veneer.bg:SetColorTexture(1,1,1,0) Nenue@71: veneer.bg:SetAllPoints(veneer) Nenue@71: veneer.bg:Show() Nenue@71: veneer:Hide() Nenue@71: veneer:EnableMouse(false) Nenue@71: Nenue@71: veneer:SetScript('OnShow', VeneerButton_OnShow) Nenue@71: Nenue@71: -- find current X/Y Nenue@71: veneer.currentLeft = frame:GetLeft() Nenue@71: veneer.currentTop = frame:GetTop() Nenue@71: Nenue@71: veneers[frame] = veneer Nenue@71: return veneers[frame] Nenue@71: end Nenue@0: Nenue@59: vn.init = function() Nenue@59: if (not VeneerData) or (not VeneerData.version) then Nenue@59: VeneerData = defaults Nenue@0: end Nenue@59: vn.db = VeneerData Nenue@71: end Nenue@62: Nenue@71: Nenue@71: vn.wrap = function(module) Nenue@71: vn.modules = vn.modules or {} Nenue@71: tinsert(vn.modules, module) Nenue@71: end Nenue@71: Nenue@71: SLASH_VENEER1 = "/veneer" Nenue@71: SLASH_VENEER2 = "/vn" Nenue@71: Nenue@71: SlashCmdList.VENEER = function() Nenue@71: ToggleVeneerConfig() Nenue@59: end