--[[ Author: Jarth Filename: SummonAssistant_Move.lua ]] -- ------------------------------------------------------------------------------------------------- -- VARIABLES -- ------------------------------------------------------------------------------------------------- local SummonAssistant = SummonAssistant ------------------------------------------------------------------------------------------------- -- FUNCTIONS -- -- Move frame -- ------------------------------------------------------------------------------------------------- function SummonAssistant:UpdateMoveFrame() local moveFrame = SummonAssistant.MoveFrame local onMouseEnter, onMouseExit, onMouseDown, onMouseUp = nil, nil, nil, nil if SummonAssistant.Global.IsMoveEnabled then moveFrame = SummonAssistant:GetOrCreateMoveFrame() onMouseEnter = SummonAssistant.MoveFrameOnEnter onMouseExit = SummonAssistant.MoveFrameOnExit onMouseDown = SummonAssistant.MoveFrameOnDown onMouseUp = SummonAssistant.MoveFrameOnUp end if moveFrame then moveFrame:SetHandler("OnMouseEnter", onMouseEnter) moveFrame:SetHandler("OnMouseExit", onMouseExit) moveFrame:SetHandler("OnMouseDown", onMouseDown) moveFrame:SetHandler("OnMouseUp", onMouseUp) moveFrame:SetHidden(not SummonAssistant.Global.IsMoveEnabled) moveFrame.overlay:SetHidden(not SummonAssistant.Global.IsMoveEnabled) moveFrame.labelCenter:SetHidden(not SummonAssistant.Global.IsMoveEnabled) moveFrame.labelTopLeft:SetHidden(not SummonAssistant.Global.IsMoveEnabled) moveFrame.MoveFrameUpdateText(moveFrame) moveFrame.MoveFrameUpdateColor(moveFrame) moveFrame.MoveFrameAnchorToTarget(moveFrame, moveFrame.TargetFrame) end end ------------------------------------------------------------------------------------------------- -- FUNCTIONS -- -- Move handlers -- ------------------------------------------------------------------------------------------------- function SummonAssistant:GetOrCreateMoveFrame(show) if SummonAssistant.MoveFrame == nil then local newMoveFrame = SummonAssistant.WM:CreateControlFromVirtual(nil, GuiRoot, "SummonAssistant_MoveFrame") local targetFrame = SummonAssistant_Frame --Variable is used to define what savedVariable the Frame refers to. newMoveFrame.TargetFrame = targetFrame newMoveFrame["MoveFrameAnchorToTarget"] = SummonAssistant.MoveFrameAnchorToTarget newMoveFrame["MoveFrameGetSnapPosition"] = SummonAssistant.MoveFrameGetSnapPosition newMoveFrame["MoveFrameUpdateText"] = SummonAssistant.MoveFrameUpdateText newMoveFrame["MoveFrameUpdateColor"] = SummonAssistant.MoveFrameUpdateColor newMoveFrame["MoveFrameOnUpdate"] = SummonAssistant.MoveFrameOnUpdate newMoveFrame["MoveFrameStorePosition"] = SummonAssistant.MoveFrameStorePosition newMoveFrame:SetDimensions(targetFrame:GetWidth(), targetFrame:GetHeight()) newMoveFrame:SetDrawLayer(4) newMoveFrame:SetParent(GuiRoot) newMoveFrame:SetMouseEnabled(true) newMoveFrame:SetMovable(true) newMoveFrame:SetClampedToScreen(true) -- overlay newMoveFrame.overlay = SummonAssistant.WM:CreateControl(nil, newMoveFrame, CT_BACKDROP) newMoveFrame.overlay:SetDrawLevel(2) newMoveFrame.overlay:SetAnchorFill(targetFrame) newMoveFrame.overlay:SetEdgeTexture("", 8, 1, 0) -- label newMoveFrame.labelCenter = SummonAssistant.WM:CreateControl(nil, newMoveFrame, CT_LABEL) newMoveFrame.labelCenter:SetDrawLevel(3) newMoveFrame.labelCenter:SetAnchorFill(targetFrame) newMoveFrame.labelCenter:SetFont("ZoFontWinH5") newMoveFrame.labelCenter:SetHorizontalAlignment(1) newMoveFrame.labelCenter:SetVerticalAlignment(1) newMoveFrame.labelTopLeft = SummonAssistant.WM:CreateControl(nil, newMoveFrame, CT_LABEL) newMoveFrame.labelTopLeft:SetDrawLevel(3) newMoveFrame.labelTopLeft:SetAnchorFill(targetFrame) newMoveFrame.labelTopLeft:SetFont("ZoFontWinH5") newMoveFrame.labelTopLeft:SetHorizontalAlignment(0) newMoveFrame.labelTopLeft:SetVerticalAlignment(0) SummonAssistant.MoveFrame = newMoveFrame end return SummonAssistant.MoveFrame end function SummonAssistant.MoveFrameOnEnter(frame) frame.MoveFrameUpdateText(frame, true) end function SummonAssistant.MoveFrameOnExit(frame) frame.MoveFrameUpdateText(frame, false) end function SummonAssistant.MoveFrameOnDown(frame) frame:SetHandler("OnUpdate", frame.MoveFrameOnUpdate) end function SummonAssistant.MoveFrameOnUp(frame) frame.MoveFrameOnUpdate(frame) frame.MoveFrameUpdateText(frame, false) frame:SetHandler("OnUpdate", nil) frame.MoveFrameStorePosition(frame) end function SummonAssistant.MoveFrameOnUpdate(frame) frame.TargetFrame:ClearAnchors() frame.TargetFrame:SetAnchor(TOPLeft, GuiRoot, TOPLeft, SummonAssistant.MoveFrameGetSnapPosition(frame:GetLeft()), SummonAssistant.MoveFrameGetSnapPosition(frame:GetTop())) frame.MoveFrameUpdateText(frame, true) end function SummonAssistant.MoveFrameUpdateText(frame, position) local labelTextTopLeft = "" frame.labelCenter:SetText(string.format("%s,%s", frame:GetWidth(), frame:GetHeight())) if (position) then labelTextTopLeft = string.format("%s,%s", frame.TargetFrame:GetLeft(), frame.TargetFrame:GetTop()) end frame.labelTopLeft:SetText(labelTextTopLeft) end function SummonAssistant.MoveFrameGetSnapPosition(value) return (zo_round(value / SummonAssistant.Saved.SnapSize) * SummonAssistant.Saved.SnapSize) end function SummonAssistant.MoveFrameStorePosition(frame) SummonAssistant.Saved.Top = frame.MoveFrameGetSnapPosition(frame:GetTop()) SummonAssistant.Saved.Left = frame.MoveFrameGetSnapPosition(frame:GetLeft()) end function SummonAssistant.MoveFrameAnchorToTarget(frame, target) frame:ClearAnchors() frame:SetDimensions(target:GetWidth(), target:GetHeight()) frame:SetAnchor(TOPLeft, GuiRoot, TOPLeft, target:GetLeft(), target:GetTop()) end function SummonAssistant.MoveFrameUpdateColor(frame) local centerColor = SummonAssistant.Saved.CenterColor local edgeColor = SummonAssistant.Saved.EdgeColor local fontColor = SummonAssistant.Saved.FontColor frame.overlay:SetCenterColor(centerColor.r, centerColor.g, centerColor.b, centerColor.a) frame.overlay:SetEdgeColor(edgeColor.r, edgeColor.g, edgeColor.b, edgeColor.a) frame.labelCenter:SetColor(fontColor.r, fontColor.g, fontColor.b, fontColor.a) frame.labelTopLeft:SetColor(fontColor.r, fontColor.g, fontColor.b, fontColor.a) end