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