mirror of
https://github.com/Insality/druid
synced 2025-09-27 18:12:21 +02:00
Add shift policy to grids
This commit is contained in:
@@ -136,18 +136,19 @@ end
|
||||
-- @tparam DynamicGrid self
|
||||
-- @tparam node node Gui node
|
||||
-- @tparam[opt] number index The node position. By default add as last node
|
||||
-- @tparam[opt=false] bool is_shift_left If true, shift all nodes to the left, otherwise shift nodes to the right
|
||||
function DynamicGrid.add(self, node, index, is_shift_left)
|
||||
local delta = is_shift_left and -1 or 1
|
||||
-- @tparam[opt=SHIFT.RIGHT] number shift_policy How shift nodes, if required. See const.SHIFT
|
||||
function DynamicGrid.add(self, node, index, shift_policy)
|
||||
shift_policy = shift_policy or const.SHIFT.RIGHT
|
||||
local delta = shift_policy -- -1 or 1 or 0
|
||||
|
||||
-- By default add node at end
|
||||
index = index or ((self.last_index or 0) + 1)
|
||||
|
||||
-- If node exist at index place, shifting them
|
||||
local is_shift = self.nodes[index]
|
||||
local is_shift = self.nodes[index] and shift_policy ~= const.SHIFT.NO_SHIFT
|
||||
if is_shift then
|
||||
-- We need to iterate from index to start or end grid, depends of shift side
|
||||
local start_index = is_shift_left and self.first_index or self.last_index
|
||||
local start_index = shift_policy == const.SHIFT.LEFT and self.first_index or self.last_index
|
||||
for i = start_index, index, -delta do
|
||||
self.nodes[i + delta] = self.nodes[i]
|
||||
end
|
||||
@@ -158,14 +159,13 @@ function DynamicGrid.add(self, node, index, is_shift_left)
|
||||
-- After shifting we should recalc node poses
|
||||
if is_shift then
|
||||
-- We need to iterate from placed node to start or end grid, depends of shift side
|
||||
local target_index = is_shift_left and self.first_index or self.last_index
|
||||
local target_index = shift_policy == const.SHIFT.LEFT and self.first_index or self.last_index
|
||||
for i = index + delta, target_index + delta, delta do
|
||||
local move_node = self.nodes[i]
|
||||
move_node.pos = self:get_pos(i, move_node.node, i - delta)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- Sync grid data
|
||||
self:_update()
|
||||
|
||||
@@ -178,9 +178,11 @@ end
|
||||
-- @tparam DynamicGrid self
|
||||
-- @tparam number index The grid node index to remove
|
||||
-- @tparam[opt=false] bool is_shift_left If true, shift all nodes to the left, otherwise shift nodes to the right
|
||||
-- @tparam[opt=SHIFT.RIGHT] number shift_policy How shift nodes, if required. See const.SHIFT
|
||||
-- @treturn Node The deleted gui node from grid
|
||||
function DynamicGrid.remove(self, index, is_shift_left)
|
||||
local delta = is_shift_left and -1 or 1
|
||||
function DynamicGrid.remove(self, index, shift_policy)
|
||||
shift_policy = shift_policy or const.SHIFT.RIGHT
|
||||
local delta = shift_policy -- -1 or 1 or 0
|
||||
|
||||
assert(self.nodes[index], "No grid item at given index " .. index)
|
||||
|
||||
@@ -189,11 +191,13 @@ function DynamicGrid.remove(self, index, is_shift_left)
|
||||
self.nodes[index] = nil
|
||||
|
||||
-- After delete node, we should shift nodes and recalc their poses, depends from is_shift_left
|
||||
local target_index = is_shift_left and self.first_index or self.last_index
|
||||
for i = index, target_index, delta do
|
||||
self.nodes[i] = self.nodes[i + delta]
|
||||
if self.nodes[i] then
|
||||
self.nodes[i].pos = self:get_pos(i, self.nodes[i].node, i - delta)
|
||||
if shift_policy ~= const.SHIFT.NO_SHIFT then
|
||||
local target_index = shift_policy == const.SHIFT.LEFT and self.first_index or self.last_index
|
||||
for i = index, target_index, delta do
|
||||
self.nodes[i] = self.nodes[i + delta]
|
||||
if self.nodes[i] then
|
||||
self.nodes[i].pos = self:get_pos(i, self.nodes[i].node, i - delta)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -407,7 +411,6 @@ function DynamicGrid:get_offset()
|
||||
local offset = vmath.vector3(
|
||||
(borders.z + borders.x)/2 + size.x * self.pivot.x,
|
||||
(borders.y + borders.w)/2 + size.y * self.pivot.y,
|
||||
0,
|
||||
0)
|
||||
|
||||
return offset
|
||||
|
Reference in New Issue
Block a user