Mercurial > wow > buffalo2
comparison Veneer.lua @ 72:d80db9a9b7e4
- created 'VeneerTemplate' xml
- implement drag drop parent re-anchoring
author | Nenue |
---|---|
date | Tue, 23 Aug 2016 14:53:38 -0400 |
parents | 6f8661094643 |
children | 95ed343c3a42 |
comparison
equal
deleted
inserted
replaced
71:6f8661094643 | 72:d80db9a9b7e4 |
---|---|
23 anonID = anonID + 1 | 23 anonID = anonID + 1 |
24 return 'VN' .. anonID | 24 return 'VN' .. anonID |
25 end | 25 end |
26 end | 26 end |
27 | 27 |
28 local anchor_coefficients = { | |
29 ['TOP'] = function(x, y) return x, y end, | |
30 ['BOTTOM'] = function(x, y) return x,y end, | |
31 ['LEFT'] = function(x, y) return x,y end, | |
32 ['RIGHT'] = function(x,y) return x,y end, | |
33 } | |
34 | |
35 local VeneerButton_OnDragStart = function(self) | |
36 self.startingLeft = self:GetLeft() | |
37 self.startingBottom = self:GetBottom() | |
38 self.anchors = self.anchors or {} | |
39 table.wipe(self.anchors) | |
40 | |
41 local frame = self:GetParent() | |
42 local n = frame:GetNumPoints() | |
43 for i = 1, n do | |
44 local anchor, parent, relative, x, y = frame:GetPoint(i) | |
45 self.anchors[i] = { | |
46 anchor = anchor, | |
47 parent = parent, | |
48 relative = relative, | |
49 x = x, | |
50 y = y | |
51 } | |
52 end | |
53 | |
54 print(self:GetName(), 'start moving', self.startingLeft, self.startingBottom) | |
55 self:StartMoving() | |
56 end | |
57 | |
58 local VeneerButton_OnDragStop = function(self) | |
59 self:StopMovingOrSizing() | |
60 if self.OnDragStop then | |
61 self.OnDragStop(self) | |
62 else | |
63 local frame = self:GetParent() | |
64 local dx = self:GetLeft() - self.startingLeft | |
65 local dy = self:GetBottom() - self.startingBottom | |
66 | |
67 frame:ClearAllPoints() | |
68 for i, point in ipairs(self.anchors) do | |
69 frame:SetPoint(point.anchor, point.parent, point.relative, point.x + dx, point.y + dy) | |
70 print('adjusting anchor', point.anchor, point.parent, point.relative, point.x + dx, point.y + dy) | |
71 end | |
72 end | |
73 end | |
74 | |
75 local Veneer_FixMovers = function() | |
76 for frame, veneer in pairs(veneers) do | |
77 if veneer:IsMoving() then | |
78 VeneerButton_OnDragStop(veneer) | |
79 end | |
80 end | |
81 end | |
28 | 82 |
29 local VeneerButton_Update = function(self) | 83 local VeneerButton_Update = function(self) |
30 if configMode then | 84 if configMode then |
31 self:SetScript('OnDragStart', self.StartMoving) | 85 self:SetScript('OnDragStart', VeneerButton_OnDragStart) |
32 self:SetScript('OnDragStop', self.StopMovingOrSizing) | 86 self:SetScript('OnDragStop', VeneerButton_OnDragStop) |
33 self:SetMovable(false) | 87 self:SetMovable(true) |
34 self:EnableMouse(false) | 88 self:EnableMouse(true) |
35 self:RegisterForDrag('LeftButton') | 89 self:RegisterForDrag('LeftButton') |
36 | 90 |
37 self.bg:SetColorTexture(0,1,0,0.5) | 91 self.bg:SetColorTexture(0,1,0,0.5) |
92 for i, region in ipairs(self.configLayers) do | |
93 region:Show() | |
94 end | |
95 self:Show() | |
38 else | 96 else |
39 | 97 |
40 self:SetScript('OnDragStart', self.StartMoving) | 98 self:SetScript('OnDragStart', self.StartMoving) |
41 self:SetScript('OnDragStop', self.StopMovingOrSizing) | 99 self:SetScript('OnDragStop', self.StopMovingOrSizing) |
42 self:SetMovable(false) | 100 self:SetMovable(false) |
43 self:EnableMouse(false) | 101 self:EnableMouse(false) |
44 | 102 |
45 self.bg:SetColorTexture(0,1,0,0) | 103 self.bg:SetColorTexture(0,1,0,0) |
104 for i, region in ipairs(self.configLayers) do | |
105 region:Hide() | |
106 end | |
107 if self.isHidden then | |
108 self:Hide() | |
109 end | |
110 | |
46 end | 111 end |
47 end | 112 end |
48 | 113 |
49 local ToggleVeneerConfig = function() | 114 local ToggleVeneerConfig = function() |
50 if configMode then | 115 if configMode then |
73 | 138 |
74 if veneers[frame] then | 139 if veneers[frame] then |
75 return veneers[frame] | 140 return veneers[frame] |
76 end | 141 end |
77 | 142 |
78 local veneer = CreateFrame('Frame', (frame:GetName() or AnonymousName())..'Veneer', UIParent) | 143 local name = (frame:GetName() or AnonymousName())..'Veneer' |
144 local veneer = CreateFrame('Frame', name, frame, 'VeneerTemplate') | |
145 print('+veneer', name) | |
79 | 146 |
80 veneer:SetAllPoints(frame) | 147 veneer:SetAllPoints(frame) |
81 veneer:SetParent(frame) | 148 veneer:SetParent(frame) |
82 veneer.bg = veneer:CreateTexture() | 149 veneer.label:SetText(name) |
83 veneer.bg:SetColorTexture(1,1,1,0) | 150 veneer.bg:SetColorTexture(1,1,1,0) |
84 veneer.bg:SetAllPoints(veneer) | |
85 veneer.bg:Show() | |
86 veneer:Hide() | 151 veneer:Hide() |
87 veneer:EnableMouse(false) | 152 veneer:EnableMouse(false) |
88 | 153 |
89 veneer:SetScript('OnShow', VeneerButton_OnShow) | 154 veneer:SetScript('OnShow', VeneerButton_OnShow) |
90 | 155 |
91 -- find current X/Y | 156 -- find current X/Y |
92 veneer.currentLeft = frame:GetLeft() | 157 veneer.currentLeft = frame:GetLeft() |
93 veneer.currentTop = frame:GetTop() | 158 veneer.currentTop = frame:GetTop() |
159 | |
94 | 160 |
95 veneers[frame] = veneer | 161 veneers[frame] = veneer |
96 return veneers[frame] | 162 return veneers[frame] |
97 end | 163 end |
98 | 164 |