-- Mouse down: start potential drag-to-reorder
ReorderContainers_Mod.onMouseDown = function(self, x, y)
-- 'self' is the container BUTTON
local panel = self.parent
local page = panel and panel.parent or nil
-- Call original (bound in ReorderContainers_InventoryPage.lua)
self.pre_reorder_onMouseDown(self, x, y)
self.reorderStartMouseY = getMouseY()
self.reorderStartY = self:getY()
-- Can we drag? (needs the real page)
self.canDragToReorder = page
and not ReorderContainers_Mod.isLocked(page)
and ReorderContainers_Mod.canReorderBackpacks(page) or false
end
-- Mouse move: do the drag inside the PANEL, compare thresholds using PAGE buttonSize
ReorderContainers_Mod.onMouseMove = function(self, dx, dy, skipOgMouseMove)
if not skipOgMouseMove then
self.pre_reorder_onMouseMove(self, dx, dy)
end
if not (self.pressed and self.canDragToReorder) then return end
local panel = self.parent
local page = panel and panel.parent or nil
if not (panel and page) then return end
if math.abs(self.reorderStartMouseY - getMouseY()) > (page.buttonSize / 2) then
self.draggingToReorder = true
end
if self.draggingToReorder then
local x = getMouseX()
local y = getMouseY()
-- Position within the PANEL (buttons are children of the panel now)
local panelAbsY = panel:getAbsoluteY()
local newY = y - panelAbsY - (self:getHeight() / 2)
-- Clamp to panel area (0..panel:getHeight()-button)
newY = math.max(0, newY)
self:setY(newY)
self:bringToTop()
end
end
-- Mouse move outside: keep existing behavior, re-use our onMouseMove
ReorderContainers_Mod.onMouseMoveOutside = function(self, dx, dy)
self.pre_reorder_onMouseMoveOutside(self, dx, dy)
ReorderContainers_Mod.onMouseMove(self, dx, dy, true)
if self.draggingToReorder and not isMouseButtonDown(0) then
ReorderContainers_Mod.onMouseUp(self, 0, 0)
end
end
-- Mouse up: apply new order on the PAGE
ReorderContainers_Mod.onMouseUp = function(self, x, y)
local panel = self.parent
local page = panel and panel.parent or nil
if self.draggingToReorder and page then
self.pressed = false
self.draggingToReorder = false
page:reorderContainerButtons(self)
page:refreshBackpacks()
else
self.pre_reorder_onMouseUp(self, x, y)
end
end