WoWInterface SVN FluidFrames

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 8 to Rev 9
    Reverse comparison

Rev 8 → Rev 9

trunk/FluidFrames/DraggableFrame.lua
335,13 → 335,13
 
function FluidFrames.OnUpdate(self, delay)
if (self.frame and (self.isResizing or self.isMoving or self.isRescaling)) then
if (not this.count) then
if (not self.count) then
self.count = delay
elseif (this.count < .02) then
elseif (self.count < .02) then
self.count = self.count + delay
 
elseif (this.isRescaling) then
this.count = 0
elseif (self.isRescaling) then
self.count = 0
local frame = self.frame
 
local x, y = GetCursorPosition()
359,11 → 359,11
return
end
 
FluidFrames.RelativelyScaleFrame(this, scale)
FluidFrames.RelativelyScaleFrame(self, scale)
FluidFrames.RelativelyScaleFrame(frame, scale)
 
local xOffset = left/scale
local yOffset = top/scale - this:GetHeight()
local yOffset = top/scale - self:GetHeight()
 
frame:SetUserPlaced(nil)
frame:ClearAllPoints()
377,7 → 377,7
self.count = 0
local frame = self.frame
 
if (this.isResizing) then
if (self.isResizing) then
local wScale = self:GetWidth()/frame:GetWidth()
if (frame.MFwScale) then
frame.MFwScale = frame.MFwScale * wScale
trunk/FluidFrames/FrameTempDragging.lua
2,6 → 2,17
-- Temp Draggable Frames
----------------------------
 
FluidFrames.FramesToSkipInCombat = {
--[[
["SpellBookFrame"] = true,
["WorldMapFrame"] = true,
["FriendsFrame"] = true,
["KeyBindingFrame"] = true,
["TradeFrame"] = true,
["TradeSkillFrame"] = true
]]--
}
 
FluidFrames.FramesToDragByParent = {
"PaperDollFrame",
"ReputationFrame",
18,35 → 29,24
-- Make UIPanels temporarily draggable (position not saved)
for frameName,info in pairs(UIPanelWindows) do
if (info.area ~= "full") then
local frame = getglobal(frameName)
local frame = _G[frameName]
if (frame and frame.GetTitleRegion) then
local titleRegion = frame:GetTitleRegion()
if (not titleRegion) then
titleRegion = frame:CreateTitleRegion()
end
--titleRegion:SetAllPoints(frame)
frame:EnableMouse(1)
if FluidFrames.FramesToSkipInCombat[frameName] and InCombatLockdown() then
--
else
frame:EnableMouse(1)
end
end
end
end
 
--[[
for i,frameName in pairs(UIChildWindows) do
local frame = getglobal(frameName)
if (frame and frame.GetTitleRegion) then
local titleRegion = frame:GetTitleRegion()
if (not titleRegion) then
titleRegion = frame:CreateTitleRegion()
end
--titleRegion:SetAllPoints(frame)
frame:EnableMouse(1)
end
end
]]--
 
-- Disable the mouse on a few child frames so that the parent is draggable
for i,frameName in ipairs(FluidFrames.FramesToDragByParent) do
local frame = getglobal(frameName)
local frame = _G[frameName]
if (frame) then
frame:EnableMouse(nil)
end
61,7 → 61,7
function FluidFrames.ToggleTempDraggableFrames(value)
for frameName,info in pairs(UIPanelWindows) do
if (info.area ~= "full") then
local frame = getglobal(frameName)
local frame = _G[frameName]
if (frame and frame.GetTitleRegion) then
local titleRegion = frame:GetTitleRegion()
if (titleRegion) then
76,25 → 76,7
end
end
end
 
--[[
for i,frameName in pairs(UIChildWindows) do
local frame = getglobal(frameName)
if (frame and frame.GetTitleRegion) then
local titleRegion = frame:GetTitleRegion()
if (titleRegion) then
if (value) then
titleRegion:SetAllPoints(frame)
else
titleRegion:ClearAllPoints()
titleRegion:SetHeight(0)
titleRegion:SetWidth(0)
end
end
end
end
]]--
 
 
if (value and AchievementFrame) then
AchievementFrameHeader:EnableMouse(false)
end
trunk/FluidFrames/FluidImmobilize.lua
189,7 → 189,7
end
 
function FluidFrames.RestoreSetParent()
local newParent = getglobal(FluidFrames.NEW_PARENT)
local newParent = _G[FluidFrames.NEW_PARENT]
local outOfCombat = not InCombatLockdown()
for frameName, frame in pairs(FluidFrames.ReparentedFrames) do
if outOfCombat or not frame:IsProtected() then
trunk/FluidFrames/FluidFrames.toc
1,11 → 1,11
## Interface: 30100
## Interface: 40000
## Title: FluidFrames
## Notes: Move, Resize, Rescale!
## Author: AnduinLothar
## RequiredDeps: Portfolio
## OptionalDeps:
## SavedVariablesPerCharacter: FluidFramesModifiedFrames, FluidFrames_SavedVars
## Version: 2.3
## Version: 2.4
## X-Category: Frames
## X-Revision: $Rev: 5127 $
## X-Date: $Date: 2007-11-13 18:34:54 -0600 (Tue, 13 Nov 2007) $
trunk/FluidFrames/readme.rtf
1,156 → 1,85
{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf430
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;\red0\green127\blue15;\red0\green128\blue0;\red229\green229\blue229;
\red0\green0\blue0;}
{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid1}
{\list\listtemplateid2\listhybrid{\listlevel\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{decimal\}.}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid2}
{\list\listtemplateid3\listhybrid{\listlevel\levelnfc0\levelnfcn0\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{decimal\}.}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid3}
{\list\listtemplateid4\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid4}
{\list\listtemplateid5\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid5}
{\list\listtemplateid6\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid6}
{\list\listtemplateid7\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid7}
{\list\listtemplateid8\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid8}
{\list\listtemplateid9\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid9}
{\list\listtemplateid10\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid10}
{\list\listtemplateid11\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid11}
{\list\listtemplateid12\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid12}
{\list\listtemplateid13\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid13}}
{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}{\listoverride\listid5\listoverridecount0\ls5}{\listoverride\listid6\listoverridecount0\ls6}{\listoverride\listid7\listoverridecount0\ls7}{\listoverride\listid8\listoverridecount0\ls8}{\listoverride\listid9\listoverridecount0\ls9}{\listoverride\listid10\listoverridecount0\ls10}{\listoverride\listid11\listoverridecount0\ls11}{\listoverride\listid12\listoverridecount0\ls12}{\listoverride\listid13\listoverridecount0\ls13}}
\margl1440\margr1440\vieww12700\viewh20860\viewkind1
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
 
\f0\b\fs48 \cf2 FluidFrames
\b0\fs24 \cf0 \
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural
\cf0 \
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
\cf0 Move, hide, scale, and resize frames with independent x&y axes.\
http://www.wowinterface.com/downloads/info7080-FluidFrames.html\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural
\cf0 \
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural
 
\b\fs36 \cf2 Usage Instructions:
\b0\fs24 \cf0 \
\
 
\i\fs28 \cf2 Unsaved Movement
\i0\fs24 \cf0 \
\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\ql\qnatural\pardirnatural
\ls1\ilvl0\cf0 {\listtext \'95 }Drag almost any normal UI Panel (e.g. CharacterFrame, SpellbookFrame, TalentFrame, QuestLogFrame, FriendsFrame, etc.) from any open space on the frame. This movement is intended to be for temporary changes and does not store location in the FluidFrames database. \
{\listtext \'95 }However, this movement registers the frame as user placed. The position will be remembered by the WoW client and restored on subsequent login/reloadui if not overridden by placement code (e.g. CharacterFrame, Minimap). Most of these draggable frames reset if you hide and re-show them. \
{\listtext \'95 }Some frames will not reset automatically (e.g. GameMenuFrame, BattlefieldFrame). To reset these, highlight the frame, right click to reset and then reloadui/relog.\
{\listtext \'95 }The MinimapCluster is an added exception case and can be dragged by the top bar.\
{\listtext \'95 }Temporary dragging can be disabled using the checkbox in the Khoas options.\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural
\cf0 \
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural
 
\i\fs28 \cf2 Saved Movement\
\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\ql\qnatural\pardirnatural
\ls2\ilvl0
\i0\fs24 \cf0 {\listtext 1. }
\b Setup a Binding
\b0 - Assign a key-binding [Main Menu > Key Bindings > FluidFrames > Highlight Mouse Frame] to select, highlight and cycle through frames under the cursor. (The "Highlight All Mouse Frames" binding cycles through all frames under the cursor, including unnamed ones.)\
{\listtext 2. }
\b Highlight a Frame
\b0 - Put your cursor over the frame you want to move and use the key-binding. It will select the frame the furthest underneath. Consecutively using the key-binding will highlight frames closer to the front. Hold shift while using the key-binding to cycle backwards through the frames.\
{\listtext 3. }
\b Move
\b0 - Drag the highlighted frame to relocate it permanently. It will disable movement from other code sources and save across sessions.\
{\listtext 4. }
\b Resize
\b0 - Hold shift and drag from the sides or corners to resize.\
{\listtext 5. }
\b Re-scale
\b0 - Hold shift and drag the bottom right re-scale icon to re-scale.\
{\listtext 6. }
\b Reset
\b0 - Right-click to reset a moved/resized/rescaled frame once highlighted.\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural
\cf0 \
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural
 
\b\fs36 \cf2 Bindings:\
\pard\tx220\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\li720\fi-720\ql\qnatural\pardirnatural
\ls3\ilvl0
\b0\fs24 \cf0 {\listtext 1. }
\b Highlight Mouse Frame
\b0 - Cycle through highlighting frames under the cursor (hold shift to cycle backwards)\
{\listtext 2. }
\b Highlight All Mouse Frames
\b0 - Cycle through highlighting all frames under the cursor, including unnamed frames (hold shift to cycle backwards)\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural
\cf0 \
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural
 
\b\fs36 \cf2 Notes:
\b0\fs24 \cf0 \
\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\ql\qnatural\pardirnatural
\ls4\ilvl0\cf0 {\listtext \'95 }Dragging will also drag sibling frames. (Frames that have the same parent and are anchored to the frame you are dragging.)\
{\listtext \'95 }To drag some bars you have to drag the 1st button.\
\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\ql\qnatural\pardirnatural
\ls5\ilvl0\cf0 {\listtext \'95 }To move the primary action button bar drag ActionButton1.\
\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\ql\qnatural\pardirnatural
\ls6\ilvl0\cf0 {\listtext \'95 }To find the ShapeshiftBarFrame put your mouse over the left edge of the 1st button when using the key-binding.\
\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\ql\qnatural\pardirnatural
\ls7\ilvl0\cf0 {\listtext \'95 }To drag all the player buffs & debuffs make sure you drag the TemporaryEnchantFrame.\
\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\ql\qnatural\pardirnatural
\ls8\ilvl0\cf0 {\listtext \'95 }To move Chat Frames just unlock and use the default tabs.\
\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\ql\qnatural\pardirnatural
\ls9\ilvl0\cf0 {\listtext \'95 }To drag the TargetFrame make sure you don't drag the TargetFrameTextureFrame on accident.\
\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\ql\qnatural\pardirnatural
\ls10\ilvl0\cf0 {\listtext \'95 }To move the whole minimap drag the MinimapCluster.\
\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\ql\qnatural\pardirnatural
\ls11\ilvl0\cf0 {\listtext \'95 }Experiment with which frame to change. if it doesn't work the way you wanted just right-click to reset.\
\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\ql\qnatural\pardirnatural
\ls12\ilvl0\cf0 {\listtext \'95 }Some frames have complex sub frames that update their locations independent of parent size. If resizing doesn't work well try scaling.\
\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\ql\qnatural\pardirnatural
\ls13\ilvl0\cf0 {\listtext \'95 }If secure frames are moved by default blizzard code while in combat they cannot be moved back until after combat. Also, you will not be able to drag secure frames in combat.\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural
\cf0 \
\pard\pardeftab720\ql\qnatural
 
\b\fs32 \cf3 Feedback & Support
\b0\fs26 \cf4 \
\cf5 If you have bugs or feature requests please use the buttons on the WoWInterface page.\
For other feedback, use the comments. \
If you'd like to donate to show your support, that can be done through paypal with a paypal account or by credit card. Remember donations are much appreciated but non-contractual. Thank you!\
{\field{\*\fldinst{HYPERLINK "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=4165527"}}{\fldrslt https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=4165527}}\cf4 \
 
\fs24 \cf0 \
 
\b\fs32 \cf3 FAQ:
\b0\fs26 \cf4 \
\cf5 Q) How do I use the same settings for all my characters?\
A) Edit FluidFrames.toc and change "SavedVariablesPerCharacter" to "SavedVariables"\
\
Q) How do I control a Vehicle/MindControl when the MainMenuBar is hidden.\
A) Temporarily unhide the MainMenuBar, highlight it and drag it up off the bottom. Execute the script "/run BonusActionBarFrame:Show()". The BonusActionBarFrame should appear bellow the MainMenuBar. Highlight it and drag it where you'd like. Highlight the MainMenuBar, right click to reset it, then click the 'Hide' button above it and un-highlight it by using the binding again. Note that if you don't do this when hiding the MainMenuBar your primary action bar bindings may break when you leave a Vehicle/MindControl.\cf4 \
 
\fs24 \cf0 \
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural
 
\b\fs36 \cf2 Change Log:
\b0\fs24 \cf0 \
\
v2.3\
- Added out of combat delays to re-hide and re-position secure frames that were moved in combat.\
- Added dependent sibling frame detection to scale/resize/hide frames that had the same parent and whose position is exclusively dependent on the frame being scaled/resized/hidden or one of its other dependent sibling frames.\
- Delayed SetParent and Show hooks to undo on the next OnUpdate so as to also catch dependent siblings parented or shown at the same time.\
- Delayed SetPoint, SetParent and Show hooks to undo when you leave combat for secure frames.\
- Refactored code to a number of files to make updating easier.\
\
v2.2\
- Enabled SendMailFrame, TokenFrame, and the PetPaperDollFrameCompanionFrame for dragging their parent frame\
- Found a bug that was breaking UIChildWindows dragging, but then decided to just disable it by design, since those frames are all anchored to their parent frame, which are draggable.\
\
v2.1\
- Changed distribution to distribute FluidFrames with Portfolio unembedded.\
- Fixed bug that caused LoD UI Panels to not be temporarily draggable\
- TOC to 30000\
\
v2.0\
- Embedded Interface Config Option Panel (Using Portfolio instead of Khaos)\
- Added Re-show All option, to show all hidden frames without resetting position.\
- Fixed temporary dragging}
\ No newline at end of file +{\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fswiss\fcharset0 Helvetica;}} +{\colortbl ;\red0\green127\blue15;\red0\green0\blue255;\red0\green128\blue0;\red229\green229\blue229;\red0\green0\blue0;} +{\*\generator Msftedit 5.41.21.2509;}\viewkind4\uc1\pard\qc\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\cf1\lang9\b\f0\fs48 FluidFrames\cf0\b0\fs24\par +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\par +\pard\qc\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720 Move, hide, scale, and resize frames with independent x&y axes.\par +{\field{\*\fldinst{HYPERLINK "http://www.wowinterface.com/downloads/info7080-FluidFrames.html"}}{\fldrslt{\ul\cf2 http://www.wowinterface.com/downloads/info7080-FluidFrames.html}}}\f0\fs24\par +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\par +\cf1\b\fs36 Usage Instructions:\cf0\b0\fs24\par +\par +\cf1\i\fs28 Unsaved Movement\cf0\i0\fs24\par +\pard\fi-720\li720\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\tab\bullet\tab Drag almost any normal UI Panel (e.g. CharacterFrame, SpellbookFrame, TalentFrame, QuestLogFrame, FriendsFrame, etc.) from any open space on the frame. This movement is intended to be for temporary changes and does not store location in the FluidFrames database. \par +\tab\bullet\tab However, this movement registers the frame as user placed. The position will be remembered by the WoW client and restored on subsequent login/reloadui if not overridden by placement code (e.g. CharacterFrame, Minimap). Most of these draggable frames reset if you hide and re-show them. \par +\tab\bullet\tab Some frames will not reset automatically (e.g. GameMenuFrame, BattlefieldFrame). To reset these, highlight the frame, right click to reset and then reloadui/relog.\par +\tab\bullet\tab The MinimapCluster is an added exception case and can be dragged by the top bar.\par +\tab\bullet\tab Temporary dragging can be disabled using the checkbox in the Khoas options.\par +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\par +\cf1\i\fs28 Saved Movement\par +\pard\fi-720\li720\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\cf0\i0\fs24\tab 1.\tab\b Setup a Binding\b0 - Assign a key-binding [Main Menu > Key Bindings > FluidFrames > Highlight Mouse Frame] to select, highlight and cycle through frames under the cursor. (The "Highlight All Mouse Frames" binding cycles through all frames under the cursor, including unnamed ones.)\par +\tab 2.\tab\b Highlight a Frame\b0 - Put your cursor over the frame you want to move and use the key-binding. It will select the frame the furthest underneath. Consecutively using the key-binding will highlight frames closer to the front. Hold shift while using the key-binding to cycle backwards through the frames.\par +\tab 3.\tab\b Move\b0 - Drag the highlighted frame to relocate it permanently. It will disable movement from other code sources and save across sessions.\par +\tab 4.\tab\b Resize\b0 - Hold shift and drag from the sides or corners to resize.\par +\tab 5.\tab\b Re-scale\b0 - Hold shift and drag the bottom right re-scale icon to re-scale.\par +\tab 6.\tab\b Reset\b0 - Right-click to reset a moved/resized/rescaled frame once highlighted.\par +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\par +\cf1\b\fs36 Bindings:\par +\pard\fi-720\li720\tx220\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\cf0\b0\fs24\tab 1.\tab\b Highlight Mouse Frame\b0 - Cycle through highlighting frames under the cursor (hold shift to cycle backwards)\par +\tab 2.\tab\b Highlight All Mouse Frames\b0 - Cycle through highlighting all frames under the cursor, including unnamed frames (hold shift to cycle backwards)\par +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\par +\cf1\b\fs36 Notes:\cf0\b0\fs24\par +\pard\fi-720\li720\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\tab\bullet\tab Dragging will also drag sibling frames. (Frames that have the same parent and are anchored to the frame you are dragging.)\par +\tab\bullet\tab To drag some bars you have to drag the 1st button.\par +\tab\bullet\tab To move the primary action button bar drag ActionButton1.\par +\tab\bullet\tab To find the ShapeshiftBarFrame put your mouse over the left edge of the 1st button when using the key-binding.\par +\tab\bullet\tab To drag all the player buffs & debuffs make sure you drag the TemporaryEnchantFrame.\par +\tab\bullet\tab To move Chat Frames just unlock and use the default tabs.\par +\tab\bullet\tab To drag the TargetFrame make sure you don't drag the TargetFrameTextureFrame on accident.\par +\tab\bullet\tab To move the whole minimap drag the MinimapCluster.\par +\tab\bullet\tab Experiment with which frame to change. if it doesn't work the way you wanted just right-click to reset.\par +\tab\bullet\tab Some frames have complex sub frames that update their locations independent of parent size. If resizing doesn't work well try scaling.\par +\tab\bullet\tab If secure frames are moved by default blizzard code while in combat they cannot be moved back until after combat. Also, you will not be able to drag secure frames in combat.\par +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\par +\pard\cf3\b\fs32 Feedback & Support\cf4\b0\fs26\par +\cf5 If you have bugs or feature requests please use the buttons on the WoWInterface page.\par +For other feedback, use the comments. \par +If you'd like to donate to show your support, that can be done through paypal with a paypal account or by credit card. Remember donations are much appreciated but non-contractual. Thank you!\par +\cf0{\field{\*\fldinst{HYPERLINK "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=4165527"}}{\fldrslt{\ul\cf2 https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=4165527}}}\cf4\f0\fs26\par +\cf0\fs24\par +\cf3\b\fs32 FAQ:\cf4\b0\fs26\par +\cf5 Q) How do I use the same settings for all my characters?\par +A) Edit FluidFrames.toc and change "SavedVariablesPerCharacter" to "SavedVariables"\par +\par +Q) How do I control a Vehicle/MindControl when the MainMenuBar is hidden.\par +A) Temporarily unhide the MainMenuBar, highlight it and drag it up off the bottom. Execute the script "/run BonusActionBarFrame:Show()". The BonusActionBarFrame should appear bellow the MainMenuBar. Highlight it and drag it where you'd like. Highlight the MainMenuBar, right click to reset it, then click the 'Hide' button above it and un-highlight it by using the binding again. Note that if you don't do this when hiding the MainMenuBar your primary action bar bindings may break when you leave a Vehicle/MindControl.\cf4\par +\cf0\fs24\par +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\cf1\b\fs36 Change Log:\cf0\b0\fs24\par +\par +v2.4 (Dridzt)\par +- Replaced 'this' with 'self' '(this' is deprecated)\par +- Replaced getglobal() with direct _G lookups (getglobal is deprecated)\par +- Workaround for EnumerateFrames() bug (thanks to Tayedaen)\par +- Prevent taint when opening the spellbook and a couple other frames in combat.\par +- TOC to 40000\par +\par +v2.3\par +- Added out of combat delays to re-hide and re-position secure frames that were moved in combat.\par +- Added dependent sibling frame detection to scale/resize/hide frames that had the same parent and whose position is exclusively dependent on the frame being scaled/resized/hidden or one of its other dependent sibling frames.\par +- Delayed SetParent and Show hooks to undo on the next OnUpdate so as to also catch dependent siblings parented or shown at the same time.\par +- Delayed SetPoint, SetParent and Show hooks to undo when you leave combat for secure frames.\par +- Refactored code to a number of files to make updating easier.\par +\par +v2.2\par +- Enabled SendMailFrame, TokenFrame, and the PetPaperDollFrameCompanionFrame for dragging their parent frame\par +- Found a bug that was breaking UIChildWindows dragging, but then decided to just disable it by design, since those frames are all anchored to their parent frame, which are draggable.\par +\par +v2.1\par +- Changed distribution to distribute FluidFrames with Portfolio unembedded.\par +- Fixed bug that caused LoD UI Panels to not be temporarily draggable\par +- TOC to 30000\par +\par +v2.0\par +- Embedded Interface Config Option Panel (Using Portfolio instead of Khaos)\par +- Added Re-show All option, to show all hidden frames without resetting position.\par +\pard\sa200\sl276\slmult1 - Fixed temporary dragging\par +} + \ No newline at end of file
trunk/FluidFrames/PortfolioRegistration.lua
59,6 → 59,7
subtext:SetHeight(140)
end;
};
--[[
{
id = "ResetHeader";
text = "Modified Frames";
83,6 → 84,7
options = {
};
};
]]--
};
savedVarTable = "FluidFrames_SavedVars";
}
trunk/FluidFrames/FrameReparent.lua
34,7 → 34,7
function FluidFrames.FreeFrameFromParent(frame)
local oldParent = frame:GetParent()
if oldParent then
local newParent = getglobal(FluidFrames.NEW_PARENT)
local newParent = _G[FluidFrames.NEW_PARENT]
FluidFrames.ReparentAssociatedFrames(frame, oldParent, newParent)
end
end
trunk/FluidFrames/FrameReset.lua
63,7 → 63,7
FluidFrames.Mobilize(frame)
 
if (type(data.parent) == "string") then
local parent = getglobal(data.parent)
local parent = _G[data.parent]
if (parent) then
FluidFrames.ResetFrameParent(frame, parent)
end
105,7 → 105,7
function FluidFrames.ResetAll()
FluidFrames.DoNotUpdateGUI = true
for k,v in pairs(FluidFramesModifiedFrames) do
local frame = getglobal(k)
local frame = _G[k]
if (frame) then
FluidFrames.ResetFrame(frame)
else
122,7 → 122,7
function FluidFrames.ReshowAll()
FluidFrames.DoNotUpdateGUI = true
for k,v in pairs(FluidFramesModifiedFrames) do
local frame = getglobal(k)
local frame = _G[k]
if (frame and frame.FFHidden) then
FluidFrames.UnlockHiddenFrame(frame)
end
trunk/FluidFrames/FluidFrames.lua
83,7 → 83,7
end
end
 
local frame = getglobal(k)
local frame = _G[k]
if (not frame) then
FluidFrames.DebugPrint(format(FLUIDFRAMES_CANT_FIND_STORED, k))
-- Add to the Uninitialized list and check on subsequent ADDON_LOADED and PLAYER_REGEN_ENABLED events
160,7 → 160,7
 
-- Hide frames and establish ShowHook
for i,frameName in pairs(framesToHide) do
local frame = getglobal(frameName)
local frame = _G[frameName]
FluidFrames.LockHiddenFrame(frame)
end
end
trunk/FluidFrames/FrameHighlight.lua
1,172 → 1,216
----------------------------
-- Frame Stack Code
----------------------------
 
FluidFrames.FrameStack = {}
FluidFrames.ExcludedFrames = {
WorldFrame = true,
UIParent = true,
 
MainMenuBarArtFrame = true,
MainMenuBarOverlayFrame = true,
TargetFrameTextureFrame = true,
LFGWizardFrame = true,
FriendsListFrame = true,
}
for i=1, NUM_CONTAINER_FRAMES do
FluidFrames.ExcludedFrames["ContainerFrame"..i] = true
end
 
function FluidFrames.IsChildFrame(frame, child)
if (not frame or not child) then
return
end
while (child ~= frame) do
child = child:GetParent()
if (not child) then
return false
end
end
return true
end
 
function FluidFrames.BuildCursorFrameStack()
local stack = FluidFrames.FrameStack
 
--Empty Stack
local stackSize = #stack
while (stackSize > 0) do
tremove(stack, #stack)
stackSize = #stack
end
 
local frame = EnumerateFrames()
while (frame) do
local frameName = frame.GetName and frame:GetName()
if (frame:IsVisible()
and (not frameName or not FluidFrames.ExcludedFrames[frameName])
and MouseIsOver(frame)
and not FluidFrames.IsChildFrame(FluidFrames.DragFrame, frame)
) then
tinsert(stack, frame)
end
frame = EnumerateFrames(frame)
end
end
 
function FluidFrames.GetNextStackFrame(frame, showAll)
local stack = FluidFrames.FrameStack
 
local returnNext
 
if (not frame) then
if (#stack > 0) then
returnNext = true
else
return
end
end
 
for i, sFrame in ipairs(stack) do
if (showAll or sFrame:GetName()) then
if (returnNext) then
return sFrame
elseif (frame == sFrame) then
returnNext = true
end
end
end
end
 
 
function FluidFrames.GetPreviousStackFrame(frame)
local stack = FluidFrames.FrameStack
 
if (not frame) then
if (#stack > 0) then
return stack[#stack]
else
return
end
end
 
local prevFrame
for i, sFrame in ipairs(stack) do
if (frame == sFrame) then
return prevFrame
end
prevFrame = sFrame
end
end
 
----------------------------
-- Frame Highlight
----------------------------
 
function FluidFrames.HighlightMouseFrame(showAll)
 
local dragFrame = FluidFrames.DragFrame
 
if (dragFrame.isResizing) then
dragFrame:StopMovingOrSizing()
dragFrame.isResizing = nil
end
 
FluidFrames.BuildCursorFrameStack()
 
local newFrame
if (not dragFrame:IsVisible()) then
if (IsShiftKeyDown()) then
newFrame = FluidFrames.GetPreviousStackFrame()
else
newFrame = FluidFrames.GetNextStackFrame()
end
else
if (#FluidFrames.FrameStack > 0) then
if (IsShiftKeyDown()) then
newFrame = FluidFrames.GetPreviousStackFrame(dragFrame.frame)
else
newFrame = FluidFrames.GetNextStackFrame(dragFrame.frame)
end
if (not newFrame) then
dragFrame.frame = nil
dragFrame:Hide()
return
end
end
end
 
if (not newFrame) then
FluidFrames.Print(FLUIDFRAMES_NO_MOVABLE_FRAMES)
dragFrame.frame = nil
dragFrame:Hide()
return
end
 
 
local parent = newFrame:GetParent()
FluidFrames.Print(format(FLUIDFRAMES_HIGHLIGHT, FluidFrames.OrNil(newFrame:GetName()), FluidFrames.OrNil(parent and parent:GetName())))
 
dragFrame:SetWidth(newFrame:GetWidth())
dragFrame:SetHeight(newFrame:GetHeight())
local scale = newFrame:GetEffectiveScale()/UIParent:GetEffectiveScale()
dragFrame:SetScale(scale)
local left = newFrame:GetLeft()
local bottom = newFrame:GetBottom()
dragFrame:ClearAllPoints()
dragFrame:SetPoint("BOTTOMLEFT", left, bottom)
 
newFrame:SetMovable(1)
 
if (parent == UIParent or parent == nil) then
--[[
newFrame:SetUserPlaced(nil)
newFrame:ClearAllPoints()
newFrame:SetPoint("BOTTOMLEFT", UIParent, "BOTTOMLEFT", left, bottom)
newFrame:SetUserPlaced(1)
]]--
end
 
dragFrame.frame = newFrame
dragFrame:Show()
end
----------------------------
-- Frame Stack Code
----------------------------
 
FluidFrames.FrameStack = {}
FluidFrames.ExcludedFrames = {
WorldFrame = true,
UIParent = true,
 
MainMenuBarArtFrame = true,
MainMenuBarOverlayFrame = true,
TargetFrameTextureFrame = true,
LFGWizardFrame = true,
FriendsListFrame = true,
}
for i=1, NUM_CONTAINER_FRAMES do
FluidFrames.ExcludedFrames["ContainerFrame"..i] = true
end
 
function FluidFrames.Is_Allowed(testframe)
 
if not testframe then
return false
end
 
--Check 2 checks for excluded frames
local frameName = testframe:GetName() or "noFrameName"
if FluidFrames.ExcludedFrames[frameName] then
return false
end
 
--Check 3 checks if testframe is a child of FluidFrames.DragFrame
while (testframe) do
if (testframe == FluidFrames.DragFrame) then
return false
end
testframe = testframe:GetParent()
end
return true
end
 
function FluidFrames.IsUnique_and_Allowed(stack,testframe)
 
--Check 1 checks for duplicates
for i, frame in ipairs(stack) do
if frame == testframe then
return false
end
end
 
--Do the other two checks in a separate function
local allowed = FluidFrames.Is_Allowed(testframe)
 
return allowed
end
 
function FluidFrames.BuildCursorFrameStack()
 
local stack = FluidFrames.FrameStack
 
--Empty Stack
local stackSize = #stack
while (stackSize > 0) do
tremove(stack, #stack)
stackSize = #stack
end
 
--Build Stack Part 1:
-- This iterates though all frames, adding them to the stack IF the frame is underneath the mouse
local frame = EnumerateFrames()
while (frame) do
if (frame:IsVisible() and MouseIsOver(frame) and FluidFrames.Is_Allowed(frame)) then
tinsert(stack, frame)
end
frame = EnumerateFrames(frame)
end
 
--Build Stack Part 2:
-- gets the frame underneath the mouse with the method GetMouseFocus()
frame = GetMouseFocus()
if FluidFrames.IsUnique_and_Allowed(stack,frame) then
tinsert(stack, frame)
end
 
--Build Stack Part 3:
-- Iterate through all the parents of the found frames...
local tempstack = stack
for i, frame in ipairs(tempstack) do
local parent = frame:GetParent()
while (parent) do
if (frame:IsVisible() and MouseIsOver(parent)
and FluidFrames.IsUnique_and_Allowed(stack,parent)) then
tinsert(stack, parent)
end
parent = parent:GetParent()
end
end
end
 
 
function FluidFrames.GetNextStackFrame(frame, showAll)
local stack = FluidFrames.FrameStack
 
local returnNext
 
if (not frame) then
if (#stack > 0) then
returnNext = true
else
return
end
end
 
for i, sFrame in ipairs(stack) do
if (showAll or sFrame:GetName()) then
if (returnNext) then
return sFrame
elseif (frame == sFrame) then
returnNext = true
end
end
end
end
 
 
function FluidFrames.GetPreviousStackFrame(frame)
local stack = FluidFrames.FrameStack
 
if (not frame) then
if (#stack > 0) then
return stack[#stack]
else
return
end
end
 
local prevFrame
for i, sFrame in ipairs(stack) do
if (frame == sFrame) then
return prevFrame
end
prevFrame = sFrame
end
end
 
----------------------------
-- Frame Highlight
----------------------------
 
function FluidFrames.HighlightMouseFrame(showAll)
 
local dragFrame = FluidFrames.DragFrame
 
if (dragFrame.isResizing) then
dragFrame:StopMovingOrSizing()
dragFrame.isResizing = nil
end
 
FluidFrames.BuildCursorFrameStack()
 
local newFrame
if (not dragFrame:IsVisible()) then
if (IsShiftKeyDown()) then
newFrame = FluidFrames.GetPreviousStackFrame()
else
newFrame = FluidFrames.GetNextStackFrame()
end
else
if (#FluidFrames.FrameStack > 0) then
if (IsShiftKeyDown()) then
newFrame = FluidFrames.GetPreviousStackFrame(dragFrame.frame)
else
newFrame = FluidFrames.GetNextStackFrame(dragFrame.frame)
end
if (not newFrame) then
dragFrame.frame = nil
dragFrame:Hide()
return
end
end
end
 
if (not newFrame) then
FluidFrames.Print(FLUIDFRAMES_NO_MOVABLE_FRAMES)
dragFrame.frame = nil
dragFrame:Hide()
return
end
 
 
local parent = newFrame:GetParent()
FluidFrames.Print(format(FLUIDFRAMES_HIGHLIGHT, FluidFrames.OrNil(newFrame:GetName()), FluidFrames.OrNil(parent and parent:GetName())))
 
dragFrame:SetWidth(newFrame:GetWidth())
dragFrame:SetHeight(newFrame:GetHeight())
local scale = newFrame:GetEffectiveScale()/UIParent:GetEffectiveScale()
dragFrame:SetScale(scale)
local left = newFrame:GetLeft()
local bottom = newFrame:GetBottom()
dragFrame:ClearAllPoints()
dragFrame:SetPoint("BOTTOMLEFT", left, bottom)
 
newFrame:SetMovable(1)
 
--[[
if (parent == UIParent or parent == nil) then
newFrame:SetUserPlaced(nil)
newFrame:ClearAllPoints()
newFrame:SetPoint("BOTTOMLEFT", UIParent, "BOTTOMLEFT", left, bottom)
newFrame:SetUserPlaced(1)
end
]]--
 
dragFrame.frame = newFrame
dragFrame:Show()
end
\ No newline at end of file