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 |
