Mercurial > wow > buffalo2
diff 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 |
line wrap: on
line diff
--- a/Veneer.lua Tue Aug 23 06:35:08 2016 -0400 +++ b/Veneer.lua Tue Aug 23 14:53:38 2016 -0400 @@ -25,16 +25,74 @@ end end +local anchor_coefficients = { + ['TOP'] = function(x, y) return x, y end, + ['BOTTOM'] = function(x, y) return x,y end, + ['LEFT'] = function(x, y) return x,y end, + ['RIGHT'] = function(x,y) return x,y end, +} + +local VeneerButton_OnDragStart = function(self) + self.startingLeft = self:GetLeft() + self.startingBottom = self:GetBottom() + self.anchors = self.anchors or {} + table.wipe(self.anchors) + + local frame = self:GetParent() + local n = frame:GetNumPoints() + for i = 1, n do + local anchor, parent, relative, x, y = frame:GetPoint(i) + self.anchors[i] = { + anchor = anchor, + parent = parent, + relative = relative, + x = x, + y = y + } + end + + print(self:GetName(), 'start moving', self.startingLeft, self.startingBottom) + self:StartMoving() +end + +local VeneerButton_OnDragStop = function(self) + self:StopMovingOrSizing() + if self.OnDragStop then + self.OnDragStop(self) + else + local frame = self:GetParent() + local dx = self:GetLeft() - self.startingLeft + local dy = self:GetBottom() - self.startingBottom + + frame:ClearAllPoints() + for i, point in ipairs(self.anchors) do + frame:SetPoint(point.anchor, point.parent, point.relative, point.x + dx, point.y + dy) + print('adjusting anchor', point.anchor, point.parent, point.relative, point.x + dx, point.y + dy) + end + end +end + +local Veneer_FixMovers = function() + for frame, veneer in pairs(veneers) do + if veneer:IsMoving() then + VeneerButton_OnDragStop(veneer) + end + end +end local VeneerButton_Update = function(self) if configMode then - self:SetScript('OnDragStart', self.StartMoving) - self:SetScript('OnDragStop', self.StopMovingOrSizing) - self:SetMovable(false) - self:EnableMouse(false) + self:SetScript('OnDragStart', VeneerButton_OnDragStart) + self:SetScript('OnDragStop', VeneerButton_OnDragStop) + self:SetMovable(true) + self:EnableMouse(true) self:RegisterForDrag('LeftButton') self.bg:SetColorTexture(0,1,0,0.5) + for i, region in ipairs(self.configLayers) do + region:Show() + end + self:Show() else self:SetScript('OnDragStart', self.StartMoving) @@ -43,6 +101,13 @@ self:EnableMouse(false) self.bg:SetColorTexture(0,1,0,0) + for i, region in ipairs(self.configLayers) do + region:Hide() + end + if self.isHidden then + self:Hide() + end + end end @@ -75,14 +140,14 @@ return veneers[frame] end - local veneer = CreateFrame('Frame', (frame:GetName() or AnonymousName())..'Veneer', UIParent) + local name = (frame:GetName() or AnonymousName())..'Veneer' + local veneer = CreateFrame('Frame', name, frame, 'VeneerTemplate') + print('+veneer', name) veneer:SetAllPoints(frame) veneer:SetParent(frame) - veneer.bg = veneer:CreateTexture() + veneer.label:SetText(name) veneer.bg:SetColorTexture(1,1,1,0) - veneer.bg:SetAllPoints(veneer) - veneer.bg:Show() veneer:Hide() veneer:EnableMouse(false) @@ -92,6 +157,7 @@ veneer.currentLeft = frame:GetLeft() veneer.currentTop = frame:GetTop() + veneers[frame] = veneer return veneers[frame] end