--[[ Author: Jarth Filename: SummonAssistant_Move.lua ]] -- ------------------------------------------------------------------------------------------------- -- VARIABLES -- ------------------------------------------------------------------------------------------------- local baseModule = SummonAssistant ------------------------------------------------------------------------------------------------- -- FUNCTIONS -- -- Move frame -- ------------------------------------------------------------------------------------------------- function baseModule:UpdateMoveFrame() local moveFrame = baseModule.MoveFrame local onMouseEnter, onMouseExit, onMouseDown, onMouseUp = nil, nil, nil, nil if baseModule.Global.IsMoveEnabled then moveFrame = baseModule:GetOrCreateMoveFrame() onMouseEnter = baseModule.MoveFrameOnEnter onMouseExit = baseModule.MoveFrameOnExit onMouseDown = baseModule.MoveFrameOnDown onMouseUp = baseModule.MoveFrameOnUp end if moveFrame then moveFrame:SetHandler("OnMouseEnter", onMouseEnter) moveFrame:SetHandler("OnMouseExit", onMouseExit) moveFrame:SetHandler("OnMouseDown", onMouseDown) moveFrame:SetHandler("OnMouseUp", onMouseUp) moveFrame:SetHidden(not baseModule.Global.IsMoveEnabled) moveFrame.overlay:SetHidden(not baseModule.Global.IsMoveEnabled) moveFrame.labelCenter:SetHidden(not baseModule.Global.IsMoveEnabled) moveFrame.labelTopLeft:SetHidden(not baseModule.Global.IsMoveEnabled) moveFrame.MoveFrameUpdateText(moveFrame) moveFrame.MoveFrameUpdateColor(moveFrame) moveFrame.MoveFrameAnchorToTarget(moveFrame, moveFrame.TargetFrame) end end ------------------------------------------------------------------------------------------------- -- FUNCTIONS -- -- Move handlers -- ------------------------------------------------------------------------------------------------- function baseModule:GetOrCreateMoveFrame(show) if baseModule.MoveFrame == nil then local newMoveFrame = baseModule.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"] = baseModule.MoveFrameAnchorToTarget newMoveFrame["MoveFrameGetSnapPosition"] = baseModule.MoveFrameGetSnapPosition newMoveFrame["MoveFrameUpdateText"] = baseModule.MoveFrameUpdateText newMoveFrame["MoveFrameUpdateColor"] = baseModule.MoveFrameUpdateColor newMoveFrame["MoveFrameOnUpdate"] = baseModule.MoveFrameOnUpdate newMoveFrame["MoveFrameStorePosition"] = baseModule.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 = baseModule.WM:CreateControl(nil, newMoveFrame, CT_BACKDROP) newMoveFrame.overlay:SetDrawLevel(2) newMoveFrame.overlay:SetAnchorFill(targetFrame) newMoveFrame.overlay:SetEdgeTexture("", 8, 1, 0) -- label newMoveFrame.labelCenter = baseModule.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 = baseModule.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) baseModule.MoveFrame = newMoveFrame end return baseModule.MoveFrame end function baseModule.MoveFrameOnEnter(frame) frame.MoveFrameUpdateText(frame, true) end function baseModule.MoveFrameOnExit(frame) frame.MoveFrameUpdateText(frame, false) end function baseModule.MoveFrameOnDown(frame) frame:SetHandler("OnUpdate", frame.MoveFrameOnUpdate) end function baseModule.MoveFrameOnUp(frame) frame.MoveFrameOnUpdate(frame) frame.MoveFrameUpdateText(frame, false) frame:SetHandler("OnUpdate", nil) frame.MoveFrameStorePosition(frame) end function baseModule.MoveFrameOnUpdate(frame) frame.TargetFrame:ClearAnchors() frame.TargetFrame:SetAnchor(TOPLeft, GuiRoot, TOPLeft, baseModule.MoveFrameGetSnapPosition(frame:GetLeft()), baseModule.MoveFrameGetSnapPosition(frame:GetTop())) frame.MoveFrameUpdateText(frame, true) end function baseModule.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 baseModule.MoveFrameGetSnapPosition(value) return (zo_round(value / baseModule.Saved.SnapSize) * baseModule.Saved.SnapSize) end function baseModule.MoveFrameStorePosition(frame) baseModule.Saved.Top = frame.MoveFrameGetSnapPosition(frame:GetTop()) baseModule.Saved.Left = frame.MoveFrameGetSnapPosition(frame:GetLeft()) end function baseModule.MoveFrameAnchorToTarget(frame, target) frame:ClearAnchors() frame:SetDimensions(target:GetWidth(), target:GetHeight()) frame:SetAnchor(TOPLeft, GuiRoot, TOPLeft, target:GetLeft(), target:GetTop()) end function baseModule.MoveFrameUpdateColor(frame) local centerColor = baseModule.Saved.CenterColor local edgeColor = baseModule.Saved.EdgeColor local fontColor = baseModule.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