diff Modules/TalkingHead.lua @ 90:6e2cb847c3c6

Implement a mixin template for the basic visual config widgets.
author Nenue
date Mon, 24 Oct 2016 18:28:40 -0400
parents
children caded2668701
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Modules/TalkingHead.lua	Mon Oct 24 18:28:40 2016 -0400
@@ -0,0 +1,84 @@
+-- Veneer
+-- TalkingHead.lua
+-- Created: 10/23/2016 5:18 AM
+-- %file-revision%
+--
+
+
+local print = DEVIAN_WORKSPACE and function(...) print('VnTalkingHead', ...) end or nop
+
+VeneerTalkingHeadMixin = {
+
+  anchorPoint = 'BOTTOMLEFT',
+  anchorFrom = 'TOPLEFT',
+  anchorX = -4,
+  anchorY = 24,
+  anchorFrame = 'ChatFrame1',
+  addonTrigger = 'Blizzard_TalkingHeadUI'
+
+}
+function VeneerTalkingHeadMixin:OnLoad()
+  Veneer:AddHandler(self, self.anchorPoint)
+end
+
+
+
+function VeneerTalkingHeadMixin:Setup()
+  print('|cFF00AAFF'..self:GetName()..'|r:Setup()', TalkingHeadFrame:IsShown(), self:IsShown())
+
+  self:SetSize(TalkingHeadFrame:GetSize())
+  self:SetParent(TalkingHeadFrame)
+  TalkingHeadFrame:ClearAllPoints()
+  TalkingHeadFrame:SetPoint('BOTTOM', self, 'BOTTOM')
+
+  hooksecurefunc(TalkingHeadFrame, 'SetPoint', function(...)
+    print('SetPoint', ...)
+    print(debugstack())
+  end)
+
+  self:SetShown(true)
+  self:ClearAnchor()
+end
+
+function VeneerTalkingHeadMixin:ClearAnchor()
+
+  UIPARENT_MANAGED_FRAME_POSITIONS["TalkingHeadFrame"] = nil
+  for i, alertSubSystem in pairs(AlertFrame.alertFrameSubSystems) do
+    if alertSubSystem.anchorFrame == TalkingHeadFrame then
+      tremove(AlertFrame.alertFrameSubSystems, i)
+      return
+    end
+  end
+end
+
+function VeneerTalkingHeadMixin:OnShow()
+  if TalkingHeadFrame then
+    print('|cFF00AAFF'..self:GetName()..'|r:OnShow()', TalkingHeadFrame:IsShown(), self:IsShown())
+    print(debugstack())
+    self:Update()
+  end
+end
+
+function VeneerTalkingHeadMixin:Reanchor()
+  self:ClearAllPoints()
+  self:SetPoint('BOTTOMLEFT', _G[self.anchorFrame], 'TOPLEFT', -4, 24)
+  self:SetPoint('RIGHT', _G[self.anchorFrame], 'RIGHT', 2, 0)
+  -- independent module,
+end
+
+function VeneerTalkingHeadMixin:OnHide()
+  if TalkingHeadFrame then
+    print('|cFF00AAFF'..self:GetName()..'|r:OnHide()', TalkingHeadFrame:IsShown(), self:IsShown())
+  end
+  Veneer:Reanchor()
+end
+
+function VeneerTalkingHeadMixin:Update()
+
+  print('|cFF00AAFF'..self:GetName()..'|r:OnShow()', TalkingHeadFrame:IsShown(), self:IsShown())
+  TalkingHeadFrame:ClearAllPoints()
+  TalkingHeadFrame:SetAllPoints(self)
+
+  Veneer:InternalReanchor(self)
+end
+