mirror of
https://github.com/Bluewhale1337/ElvUIModernized.git
synced 2026-07-27 08:24:44 +00:00
update
This commit is contained in:
+107
-94
@@ -4,17 +4,23 @@ local Sticky = LibStub("LibSimpleSticky-1.0");
|
||||
--Cache global variables
|
||||
--Lua functions
|
||||
local _G = _G
|
||||
local type, unpack, pairs = type, unpack, pairs
|
||||
local type, unpack, pairs, error = type, unpack, pairs, error
|
||||
local format, split, find = string.format, string.split, string.find
|
||||
local tinsert = table.insert
|
||||
local getn = table.getn
|
||||
--WoW API / Variables
|
||||
local CreateFrame = CreateFrame
|
||||
local IsControlKeyDown = IsControlKeyDown
|
||||
local IsShiftKeyDown = IsShiftKeyDown
|
||||
|
||||
E.CreatedMovers = {}
|
||||
E.DisabledMovers = {}
|
||||
|
||||
local function SizeChanged(self)
|
||||
E:Size(self.mover, self.dirtyWidth and self.dirtyWidth or self:GetWidth(), self.dirtyHeight and self.dirtyHeight or self:GetHeight())
|
||||
local function SizeChanged(frame)
|
||||
if frame.dirtyWidth and frame.dirtyHeight then
|
||||
E:Size(frame.mover, frame.dirtyWidth, frame.dirtyHeight)
|
||||
else
|
||||
E:Size(frame.mover, frame:GetWidth(), frame:GetHeight())
|
||||
end
|
||||
end
|
||||
|
||||
local function GetPoint(obj)
|
||||
@@ -46,6 +52,7 @@ local function CreateMover(parent, name, text, overlay, snapOffset, postdrag, sh
|
||||
if overlay == nil then overlay = true end
|
||||
local point, anchor, secondaryPoint, x, y = split(",", GetPoint(parent))
|
||||
|
||||
--Use dirtyWidth / dirtyHeight to set initial size if possible
|
||||
local width = parent.dirtyWidth or parent:GetWidth()
|
||||
local height = parent.dirtyHeight or parent:GetHeight()
|
||||
|
||||
@@ -65,6 +72,7 @@ local function CreateMover(parent, name, text, overlay, snapOffset, postdrag, sh
|
||||
f.overlay = overlay
|
||||
f.snapOffset = snapOffset or -2
|
||||
f.shouldDisable = shouldDisable
|
||||
f.configString = configString
|
||||
|
||||
f:SetFrameLevel(parent:GetFrameLevel() + 1)
|
||||
if overlay == true then
|
||||
@@ -74,44 +82,47 @@ local function CreateMover(parent, name, text, overlay, snapOffset, postdrag, sh
|
||||
end
|
||||
|
||||
E.CreatedMovers[name].mover = f
|
||||
tinsert(E["snapBars"], f)
|
||||
E.snapBars[getn(E.snapBars) + 1] = f
|
||||
|
||||
local fs = f:CreateFontString(nil, "OVERLAY")
|
||||
E:FontTemplate(fs)
|
||||
fs:SetJustifyH("CENTER")
|
||||
fs:SetPoint("CENTER", f)
|
||||
E:Point(fs, "CENTER", 0)
|
||||
fs:SetText(text or name)
|
||||
fs:SetTextColor(unpack(E["media"].rgbvaluecolor))
|
||||
fs:SetTextColor(unpack(E.media.rgbvaluecolor))
|
||||
f:SetFontString(fs)
|
||||
f.text = fs
|
||||
|
||||
if E.db["movers"] and E.db["movers"][name] then
|
||||
if type(E.db["movers"][name]) == "table" then
|
||||
E:Point(f, E.db["movers"][name]["p"], E.UIParent, E.db["movers"][name]["p2"], E.db["movers"][name]["p3"], E.db["movers"][name]["p4"])
|
||||
E.db["movers"][name] = GetPoint(f)
|
||||
if E.db.movers and E.db.movers[name] then
|
||||
if type(E.db.movers[name]) == "table" then
|
||||
E:Point(f, E.db.movers[name].p, E.UIParent, E.db.movers[name].p2, E.db.movers[name].p3, E.db.movers[name].p4)
|
||||
E.db.movers[name] = GetPoint(f)
|
||||
f:ClearAllPoints()
|
||||
end
|
||||
|
||||
--Backward compatibility
|
||||
local delim
|
||||
local anchorString = E.db["movers"][name]
|
||||
local anchorString = E.db.movers[name]
|
||||
if find(anchorString, "\031") then
|
||||
delim = "\031"
|
||||
elseif find(anchorString, ",") then
|
||||
delim = ","
|
||||
end
|
||||
local point, anchor, secondaryPoint, x, y = split(delim, anchorString)
|
||||
E:Point(f, point, anchor, secondaryPoint, x, y)
|
||||
else
|
||||
|
||||
local point1, anchor1, secondaryPoint1, x1, y1 = split(delim, anchorString)
|
||||
E:Point(f, point1, anchor1, secondaryPoint1, x1, y1)
|
||||
f.anchor = anchor
|
||||
else
|
||||
E:Point(f, point, anchor, secondaryPoint, x, y)
|
||||
end
|
||||
|
||||
local function OnDragStart(self)
|
||||
if E.db["general"].stickyFrames then
|
||||
Sticky:StartMoving(self, E["snapBars"], f.snapOffset, f.snapOffset, f.snapOffset, f.snapOffset)
|
||||
if E.db.general.stickyFrames then
|
||||
Sticky:StartMoving(self, E.snapBars, f.snapOffset, f.snapOffset, f.snapOffset, f.snapOffset)
|
||||
else
|
||||
self:StartMoving()
|
||||
end
|
||||
|
||||
coordFrame.child = self
|
||||
coordFrame:Show()
|
||||
isDragging = true
|
||||
@@ -119,24 +130,24 @@ local function CreateMover(parent, name, text, overlay, snapOffset, postdrag, sh
|
||||
|
||||
local function OnDragStop(self)
|
||||
isDragging = false
|
||||
if E.db["general"].stickyFrames then
|
||||
if E.db.general.stickyFrames then
|
||||
Sticky:StopMoving(self)
|
||||
else
|
||||
self:StopMovingOrSizing()
|
||||
end
|
||||
|
||||
local x, y, point = E:CalculateMoverPoints(self)
|
||||
local x2, y2, point2 = E:CalculateMoverPoints(self)
|
||||
self:ClearAllPoints()
|
||||
local overridePoint
|
||||
if self.positionOverride then
|
||||
if (self.positionOverride == "BOTTOM" or self.positionOverride == "TOP") then
|
||||
if self.positionOverride == "BOTTOM" or self.positionOverride == "TOP" then
|
||||
overridePoint = "BOTTOM"
|
||||
else
|
||||
overridePoint = "BOTTOMLEFT"
|
||||
end
|
||||
end
|
||||
|
||||
E:Point(self, self.positionOverride or point, E.UIParent, overridePoint and overridePoint or point, x, y)
|
||||
E:Point(self, self.positionOverride or point2, E.UIParent, overridePoint and overridePoint or point2, x2, y2)
|
||||
if self.positionOverride then
|
||||
self.parent:ClearAllPoints()
|
||||
E:Point(self.parent, self.positionOverride, self, self.positionOverride)
|
||||
@@ -151,7 +162,7 @@ local function CreateMover(parent, name, text, overlay, snapOffset, postdrag, sh
|
||||
coordFrame.child = nil
|
||||
coordFrame:Hide()
|
||||
|
||||
if postdrag ~= nil and type(postdrag) == "function" then
|
||||
if postdrag ~= nil and (type(postdrag) == "function") then
|
||||
postdrag(self, E:GetScreenQuadrant(self))
|
||||
end
|
||||
|
||||
@@ -164,37 +175,40 @@ local function CreateMover(parent, name, text, overlay, snapOffset, postdrag, sh
|
||||
ElvUIMoverNudgeWindow:Show()
|
||||
E.AssignFrameToNudge(this)
|
||||
coordFrame.child = this
|
||||
UpdateCoords(coordFrame)
|
||||
coordFrame:GetScript("OnUpdate")(coordFrame)
|
||||
end
|
||||
|
||||
local function OnMouseDown(button)
|
||||
if button == "RightButton" then
|
||||
isDragging = false
|
||||
if E.db["general"].stickyFrames then
|
||||
if E.db.general.stickyFrames then
|
||||
Sticky:StopMoving(this)
|
||||
else
|
||||
this:StopMovingOrSizing()
|
||||
end
|
||||
|
||||
--Allow resetting of anchor by Ctrl+RightClick
|
||||
if IsControlKeyDown() and this.textString then
|
||||
E:ResetMovers(this.textString)
|
||||
elseif IsShiftKeyDown() then
|
||||
elseif IsShiftKeyDown() then --Allow hiding a mover temporarily
|
||||
this:Hide()
|
||||
elseif this.configString then --OpenConfig
|
||||
E:ToggleConfig(this.configString)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function OnLeave(self)
|
||||
if isDragging then return end
|
||||
this.text:SetTextColor(unpack(E["media"].rgbvaluecolor))
|
||||
this.text:SetTextColor(unpack(E.media.rgbvaluecolor))
|
||||
end
|
||||
|
||||
local function OnShow(self)
|
||||
this:SetBackdropBorderColor(unpack(E["media"].rgbvaluecolor))
|
||||
this:SetBackdropBorderColor(unpack(E.media.rgbvaluecolor))
|
||||
end
|
||||
|
||||
local function OnMouseWheel(_, delta)
|
||||
if(IsShiftKeyDown()) then
|
||||
if IsShiftKeyDown() then
|
||||
E:NudgeMover(delta)
|
||||
else
|
||||
E:NudgeMover(nil, delta)
|
||||
@@ -214,7 +228,7 @@ local function CreateMover(parent, name, text, overlay, snapOffset, postdrag, sh
|
||||
parent.mover = f
|
||||
|
||||
parent:ClearAllPoints()
|
||||
parent:SetPoint(point, f)
|
||||
E:Point(parent, point, f, 0, 0)
|
||||
|
||||
if postdrag ~= nil and type(postdrag) == "function" then
|
||||
f:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||
@@ -236,7 +250,7 @@ function E:CalculateMoverPoints(mover, nudgeX, nudgeY)
|
||||
local TOP = screenHeight / 2
|
||||
local point, nudgePoint, nudgeInversePoint
|
||||
|
||||
if(y >= TOP) then
|
||||
if y >= TOP then
|
||||
point = "TOP"
|
||||
nudgePoint = "TOP"
|
||||
nudgeInversePoint = "BOTTOM"
|
||||
@@ -248,12 +262,12 @@ function E:CalculateMoverPoints(mover, nudgeX, nudgeY)
|
||||
y = mover:GetBottom()
|
||||
end
|
||||
|
||||
if(x >= RIGHT) then
|
||||
if x >= RIGHT then
|
||||
point = point.."RIGHT"
|
||||
nudgePoint = "RIGHT"
|
||||
nudgeInversePoint = "LEFT"
|
||||
x = mover:GetRight() - screenWidth
|
||||
elseif(x <= LEFT) then
|
||||
elseif x <= LEFT then
|
||||
point = point.."LEFT"
|
||||
nudgePoint = "LEFT"
|
||||
nudgeInversePoint = "RIGHT"
|
||||
@@ -262,28 +276,29 @@ function E:CalculateMoverPoints(mover, nudgeX, nudgeY)
|
||||
x = x - screenCenter
|
||||
end
|
||||
|
||||
if(mover.positionOverride) then
|
||||
if(mover.positionOverride == "TOPLEFT") then
|
||||
if mover.positionOverride then
|
||||
if mover.positionOverride == "TOPLEFT" then
|
||||
x = mover:GetLeft() - E.diffGetLeft
|
||||
y = mover:GetTop() - E.diffGetTop
|
||||
elseif(mover.positionOverride == "TOPRIGHT") then
|
||||
elseif mover.positionOverride == "TOPRIGHT" then
|
||||
x = mover:GetRight() - E.diffGetRight
|
||||
y = mover:GetTop() - E.diffGetTop
|
||||
elseif(mover.positionOverride == "BOTTOMLEFT") then
|
||||
elseif mover.positionOverride == "BOTTOMLEFT" then
|
||||
x = mover:GetLeft() - E.diffGetLeft
|
||||
y = mover:GetBottom() - E.diffGetBottom
|
||||
elseif(mover.positionOverride == "BOTTOMRIGHT") then
|
||||
elseif mover.positionOverride == "BOTTOMRIGHT" then
|
||||
x = mover:GetRight() - E.diffGetRight
|
||||
y = mover:GetBottom() - E.diffGetBottom
|
||||
elseif(mover.positionOverride == "BOTTOM") then
|
||||
elseif mover.positionOverride == "BOTTOM" then
|
||||
x = mover:GetCenter() - screenCenter
|
||||
y = mover:GetBottom() - E.diffGetBottom
|
||||
elseif(mover.positionOverride == "TOP") then
|
||||
elseif mover.positionOverride == "TOP" then
|
||||
x = mover:GetCenter() - screenCenter
|
||||
y = mover:GetTop() - E.diffGetTop
|
||||
end
|
||||
end
|
||||
|
||||
--Update coordinates if nudged
|
||||
x = x + (nudgeX or 0)
|
||||
y = y + (nudgeY or 0)
|
||||
|
||||
@@ -297,7 +312,7 @@ function E:UpdatePositionOverride(name)
|
||||
end
|
||||
|
||||
function E:HasMoverBeenMoved(name)
|
||||
if E.db["movers"] and E.db["movers"][name] then
|
||||
if E.db.movers and E.db.movers[name] then
|
||||
return true
|
||||
else
|
||||
return false
|
||||
@@ -308,42 +323,49 @@ function E:SaveMoverPosition(name)
|
||||
if not _G[name] then return end
|
||||
if not E.db.movers then E.db.movers = {} end
|
||||
|
||||
E.db.movers[name] = GetPoint(_G[name])
|
||||
local mover = _G[name]
|
||||
local _, anchor = mover:GetPoint()
|
||||
mover.anchor = anchor:GetName()
|
||||
|
||||
E.db.movers[name] = GetPoint(mover)
|
||||
end
|
||||
|
||||
function E:SetMoverSnapOffset(name, offset)
|
||||
if not _G[name] or not E.CreatedMovers[name] then return end
|
||||
E.CreatedMovers[name].mover.snapOffset = offset or -2
|
||||
E.CreatedMovers[name]["snapoffset"] = offset or -2
|
||||
E.CreatedMovers[name].snapoffset = offset or -2
|
||||
end
|
||||
|
||||
function E:SaveMoverDefaultPosition(name)
|
||||
if not _G[name] then return end
|
||||
|
||||
E.CreatedMovers[name]["point"] = GetPoint(_G[name])
|
||||
E.CreatedMovers[name]["postdrag"](_G[name], E:GetScreenQuadrant(_G[name]))
|
||||
E.CreatedMovers[name].point = GetPoint(_G[name])
|
||||
E.CreatedMovers[name].postdrag(_G[name], E:GetScreenQuadrant(_G[name]))
|
||||
end
|
||||
|
||||
function E:CreateMover(parent, name, text, overlay, snapoffset, postdrag, moverTypes, shouldDisable)
|
||||
function E:CreateMover(parent, name, text, overlay, snapoffset, postdrag, moverTypes, shouldDisable, configString)
|
||||
if not moverTypes then moverTypes = "ALL,GENERAL" end
|
||||
|
||||
if E.CreatedMovers[name] == nil then
|
||||
E.CreatedMovers[name] = {}
|
||||
E.CreatedMovers[name]["parent"] = parent
|
||||
E.CreatedMovers[name]["text"] = text
|
||||
E.CreatedMovers[name]["overlay"] = overlay
|
||||
E.CreatedMovers[name]["postdrag"] = postdrag
|
||||
E.CreatedMovers[name]["snapoffset"] = snapoffset
|
||||
E.CreatedMovers[name]["point"] = GetPoint(parent)
|
||||
E.CreatedMovers[name]["shouldDisable"] = shouldDisable
|
||||
E.CreatedMovers[name].parent = parent
|
||||
E.CreatedMovers[name].text = text
|
||||
E.CreatedMovers[name].overlay = overlay
|
||||
E.CreatedMovers[name].postdrag = postdrag
|
||||
E.CreatedMovers[name].snapoffset = snapoffset
|
||||
E.CreatedMovers[name].point = GetPoint(parent)
|
||||
E.CreatedMovers[name].shouldDisable = shouldDisable
|
||||
E.CreatedMovers[name].configString = configString
|
||||
|
||||
E.CreatedMovers[name]["type"] = {}
|
||||
for _, moverType in {split(",", moverTypes)} do
|
||||
E.CreatedMovers[name]["type"][moverType] = true
|
||||
E.CreatedMovers[name].type = {}
|
||||
local types = {split(",", moverTypes)}
|
||||
for i = 1, getn(types) do
|
||||
local moverType = types[i]
|
||||
E.CreatedMovers[name].type[moverType] = true
|
||||
end
|
||||
end
|
||||
|
||||
CreateMover(parent, name, text, overlay, snapoffset, postdrag, shouldDisable)
|
||||
CreateMover(parent, name, text, overlay, snapoffset, postdrag, shouldDisable, configString)
|
||||
end
|
||||
|
||||
function E:ToggleMovers(show, moverType)
|
||||
@@ -353,7 +375,7 @@ function E:ToggleMovers(show, moverType)
|
||||
if not show then
|
||||
_G[name]:Hide()
|
||||
else
|
||||
if E.CreatedMovers[name]["type"][moverType] then
|
||||
if E.CreatedMovers[name].type[moverType] then
|
||||
_G[name]:Show()
|
||||
else
|
||||
_G[name]:Hide()
|
||||
@@ -363,8 +385,9 @@ function E:ToggleMovers(show, moverType)
|
||||
end
|
||||
|
||||
function E:DisableMover(name)
|
||||
if(self.DisabledMovers[name]) then return end
|
||||
if(not self.CreatedMovers[name]) then
|
||||
if self.DisabledMovers[name] then return end
|
||||
|
||||
if not self.CreatedMovers[name] then
|
||||
error("mover doesn't exist")
|
||||
end
|
||||
|
||||
@@ -373,7 +396,7 @@ function E:DisableMover(name)
|
||||
self.DisabledMovers[name][x] = y
|
||||
end
|
||||
|
||||
if(self.configMode) then
|
||||
if self.configMode then
|
||||
_G[name]:Hide()
|
||||
end
|
||||
|
||||
@@ -381,8 +404,9 @@ function E:DisableMover(name)
|
||||
end
|
||||
|
||||
function E:EnableMover(name)
|
||||
if(self.CreatedMovers[name]) then return end
|
||||
if(not self.DisabledMovers[name]) then
|
||||
if self.CreatedMovers[name] then return end
|
||||
|
||||
if not self.DisabledMovers[name] then
|
||||
error("mover doesn't exist")
|
||||
end
|
||||
|
||||
@@ -391,14 +415,13 @@ function E:EnableMover(name)
|
||||
self.CreatedMovers[name][x] = y
|
||||
end
|
||||
|
||||
--Make sure we add anchor information from a potential profile switch
|
||||
--Commented out, as it created an issue with trying to reset a mover after having used EnableMover on it. Not sure if this code is even needed anymore.
|
||||
--[[
|
||||
if(E.db["movers"] and E.db["movers"][name] and type(E.db["movers"][name]) == "string") then
|
||||
self.CreatedMovers[name]["point"] = E.db["movers"][name]
|
||||
end
|
||||
]]
|
||||
-- if E.db.movers and E.db.movers[name] and type(E.db.movers[name]) == 'string' then
|
||||
-- self.CreatedMovers[name].point = E.db.movers[name]
|
||||
-- end
|
||||
|
||||
if(self.configMode) then
|
||||
if self.configMode then
|
||||
_G[name]:Show()
|
||||
end
|
||||
|
||||
@@ -409,7 +432,7 @@ function E:ResetMovers(arg)
|
||||
if arg == "" or arg == nil then
|
||||
for name, _ in pairs(E.CreatedMovers) do
|
||||
local f = _G[name]
|
||||
local point, anchor, secondaryPoint, x, y = split(",", E.CreatedMovers[name]["point"])
|
||||
local point, anchor, secondaryPoint, x, y = split(",", E.CreatedMovers[name].point)
|
||||
f:ClearAllPoints()
|
||||
E:Point(f, point, anchor, secondaryPoint, x, y)
|
||||
|
||||
@@ -426,7 +449,7 @@ function E:ResetMovers(arg)
|
||||
if key == "text" then
|
||||
if arg == value then
|
||||
local f = _G[name]
|
||||
local point, anchor, secondaryPoint, x, y = split(",", E.CreatedMovers[name]["point"])
|
||||
local point, anchor, secondaryPoint, x, y = split(",", E.CreatedMovers[name].point)
|
||||
f:ClearAllPoints()
|
||||
E:Point(f, point, anchor, secondaryPoint, x, y)
|
||||
|
||||
@@ -434,8 +457,8 @@ function E:ResetMovers(arg)
|
||||
self.db.movers[name] = nil
|
||||
end
|
||||
|
||||
if E.CreatedMovers[name]["postdrag"] ~= nil and type(E.CreatedMovers[name]["postdrag"]) == "function" then
|
||||
E.CreatedMovers[name]["postdrag"](f, E:GetScreenQuadrant(f))
|
||||
if E.CreatedMovers[name].postdrag ~= nil and type(E.CreatedMovers[name].postdrag) == "function" then
|
||||
E.CreatedMovers[name].postdrag(f, E:GetScreenQuadrant(f))
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -446,8 +469,11 @@ end
|
||||
|
||||
--Profile Change
|
||||
function E:SetMoversPositions()
|
||||
--E:SetMoversPositions() is the first function called in E:UpdateAll().
|
||||
--Because of that, we can allow ourselves to re-enable all disabled movers here,
|
||||
--as the subsequent updates to these elements will disable them again if needed.
|
||||
for name in pairs(E.DisabledMovers) do
|
||||
local shouldDisable = ((E.DisabledMovers[name].shouldDisable and E.DisabledMovers[name]["shouldDisable"]()) or false)
|
||||
local shouldDisable = ((E.DisabledMovers[name].shouldDisable and E.DisabledMovers[name].shouldDisable()) or false)
|
||||
if not shouldDisable then
|
||||
E:EnableMover(name)
|
||||
end
|
||||
@@ -456,19 +482,20 @@ function E:SetMoversPositions()
|
||||
for name, _ in pairs(E.CreatedMovers) do
|
||||
local f = _G[name]
|
||||
local point, anchor, secondaryPoint, x, y
|
||||
if E.db["movers"] and E.db["movers"][name] and type(E.db["movers"][name]) == "string" then
|
||||
if E.db.movers and E.db.movers[name] and type(E.db.movers[name]) == "string" then
|
||||
--Backward compatibility
|
||||
local delim
|
||||
local anchorString = E.db["movers"][name]
|
||||
if(find(anchorString, "\031")) then
|
||||
local anchorString = E.db.movers[name]
|
||||
if find(anchorString, "\031") then
|
||||
delim = "\031"
|
||||
elseif(find(anchorString, ",")) then
|
||||
elseif find(anchorString, ",") then
|
||||
delim = ","
|
||||
end
|
||||
point, anchor, secondaryPoint, x, y = split(delim, anchorString)
|
||||
f:ClearAllPoints()
|
||||
E:Point(f, point, anchor, secondaryPoint, x, y)
|
||||
elseif f then
|
||||
point, anchor, secondaryPoint, x, y = split(",", E.CreatedMovers[name]["point"])
|
||||
point, anchor, secondaryPoint, x, y = split(",", E.CreatedMovers[name].point)
|
||||
f:ClearAllPoints()
|
||||
E:Point(f, point, anchor, secondaryPoint, x, y)
|
||||
end
|
||||
@@ -477,21 +504,7 @@ end
|
||||
|
||||
--Called from core.lua
|
||||
function E:LoadMovers()
|
||||
for n, _ in pairs(E.CreatedMovers) do
|
||||
local p, t, o, so, pd
|
||||
for key, value in pairs(E.CreatedMovers[n]) do
|
||||
if key == "parent" then
|
||||
p = value
|
||||
elseif key == "text" then
|
||||
t = value
|
||||
elseif key == "overlay" then
|
||||
o = value
|
||||
elseif key == "snapoffset" then
|
||||
so = value
|
||||
elseif key == "postdrag" then
|
||||
pd = value
|
||||
end
|
||||
end
|
||||
CreateMover(p, n, t, o, so, pd)
|
||||
for n, t in pairs(E.CreatedMovers) do
|
||||
CreateMover(t.parent, n, t.overlay, t.snapoffset, t.postdrag, t.shouldDisable, t.configString)
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user