vanilla-wow-addons – Rev 1
?pathlinks?
--[[
The movement/resizing code in here is largely borrowed from MoveAnything by Skrag
$Id:$
--]]
local CMMM_DEBUG = 0;
-- Print Debug info
local function Print_Debug(s)
if (CMMM_DEBUG == 1) then
DEFAULT_CHAT_FRAME:AddMessage(s, 1, 1, 0)
end
end
function CleanMinimapMover_SizingAnchor( button )
local s, e = string.find( button:GetName(), "Resize_" )
local anchorto = string.sub( this:GetName(), e + 1 );
local anchor;
if( anchorto == "LEFT" ) then anchor = "RIGHT";
elseif( anchorto == "RIGHT" ) then anchor = "LEFT";
elseif( anchorto == "TOP" ) then anchor = "BOTTOM";
elseif( anchorto == "BOTTOM" ) then anchor = "TOP";
end
return anchorto, anchor;
end
function CleanMinimapMover_UpdatePosition( moveFrame )
local x, y, parent;
x = nil;
y = nil;
parent = nil;
x, y = CleanMinimapMover_GetRelativeBottomLeft( moveFrame.tagged );
parent = CleanMinimapMover_GetParent( moveFrame.tagged );
return x, y, parent;
end
function CleanMinimapMover_GetParent( frame )
if( frame:GetParent() == nil ) then
return UIParent;
end
return frame:GetParent();
end
function CleanMinimapMover_GetScale( frame )
if( frame:GetScale() == nil ) then
return UIParent:GetScale();
end
return frame:GetScale();
end
function CleanMinimapMover_GetRelativeBottomLeft( tagFrame )
x = tagFrame:GetLeft();
if( x ) then
x = x - CleanMinimapMover_GetParent( tagFrame ):GetLeft() * CleanMinimapMover_GetScale( CleanMinimapMover_GetParent( tagFrame ) ) / CleanMinimapMover_GetScale( tagFrame );
end
y = tagFrame:GetBottom();
if( y ) then
y = y - CleanMinimapMover_GetParent( tagFrame ):GetBottom() * CleanMinimapMover_GetScale( CleanMinimapMover_GetParent( tagFrame ) ) / CleanMinimapMover_GetScale( tagFrame );
end
return x,y;
end
function CleanMinimapMover_Attach( moveFrame, tagFrame )
if( moveFrame.tagged ) then
CleanMinimapMover_Detach( moveFrame );
end
if( tagFrame.OnBeginMove ) then
if( not tagFrame:OnBeginMove() ) then
Print_Debug("aborting");
CleanMinimapMover_Detach( moveFrame );
return;
end
end
local x, y, w, h;
if( tagFrame:GetLeft() == nil ) then tagFrame:Show(); tagFrame:Hide(); end
x = tagFrame:GetLeft() * CleanMinimapMover_GetScale( tagFrame ) / UIParent:GetScale();
x = x - CleanMinimapMover_GetParent( tagFrame ):GetLeft() * CleanMinimapMover_GetScale( CleanMinimapMover_GetParent( tagFrame ) ) / UIParent:GetScale();
y = tagFrame:GetBottom() * CleanMinimapMover_GetScale( tagFrame ) / UIParent:GetScale();
y = y - CleanMinimapMover_GetParent( tagFrame ):GetBottom() * CleanMinimapMover_GetScale( CleanMinimapMover_GetParent( tagFrame ) ) / UIParent:GetScale();
w = tagFrame:GetWidth() * CleanMinimapMover_GetScale( tagFrame ) / UIParent:GetScale();
h = tagFrame:GetHeight() * CleanMinimapMover_GetScale( tagFrame ) / UIParent:GetScale();
moveFrame:ClearAllPoints();
moveFrame:SetPoint("BOTTOMLEFT", CleanMinimapMover_GetParent( tagFrame ):GetName(), "BOTTOMLEFT", x, y );
moveFrame:SetWidth(w);
moveFrame:SetHeight(h);
moveFrame:SetFrameLevel( tagFrame:GetFrameLevel() + 1 );
tagFrame:ClearAllPoints();
tagFrame:SetPoint( "BOTTOMLEFT", moveFrame:GetName(), "BOTTOMLEFT", 0, 0 );
moveFrame:Show();
moveFrame.tagged = tagFrame;
Print_Debug("Attached "..tagFrame:GetName().." to "..moveFrame:GetName().." x="..x.." y="..y.." w="..w.." h="..h);
end
function CleanMinimapMover_Detach( moveFrame )
if( moveFrame.tagged ) then
local x, y, parent = CleanMinimapMover_UpdatePosition( moveFrame );
moveFrame.tagged:ClearAllPoints();
moveFrame.tagged:SetPoint( "BOTTOMLEFT", parent:GetName(), "BOTTOMLEFT", x, y );
end
moveFrame:Hide();
moveFrame.tagged = nil;
end
function CleanMinimapMover_OnSizeChanged( this )
if( this.tagged ) then
local s, w, h;
if( this.SizingAnchor == "LEFT" or this.SizingAnchor == "RIGHT" ) then
w = this:GetWidth();
h = w * (this.tagged:GetHeight() / this.tagged:GetWidth());
if( h < 16 ) then
h = 16;
w = h * (this.tagged:GetWidth() / this.tagged:GetHeight());
end
else
h = this:GetHeight();
w = h * (this.tagged:GetWidth() / this.tagged:GetHeight());
if( w < 16 ) then
w = 16;
h = w * (this.tagged:GetHeight() / this.tagged:GetWidth());
end
end
s = this:GetWidth() / this.tagged:GetWidth();
s = s * UIParent:GetScale();
this.tagged:SetScale( s );
if( this.tagged.attachedChildren ) then
for i, v in this.tagged.attachedChildren do
v:SetScale( s );
end
end
this:SetWidth( w );
this:SetHeight( h );
Print_Debug("size changed: s="..s.." w="..w.." h="..h);
end
end
function CleanMinimapMover_StopMoving( frame )
if( frame) then
CleanMinimapMover_Detach( frame );
end
end
Generated by GNU Enscript 1.6.5.90.