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