mirror of
https://github.com/Insality/druid.git
synced 2025-09-27 18:12:19 +02:00
#131 Add dynamic_poses for static grid
This commit is contained in:
@@ -63,6 +63,17 @@ local function _extend_border(border, pos, size, pivot)
|
||||
end
|
||||
|
||||
|
||||
--- Component style params.
|
||||
-- You can override this component styles params in druid styles table
|
||||
-- or create your own style
|
||||
-- @table style
|
||||
-- @tfield[opt=false] bool IS_DYNAMIC_NODE_POSES If true, always center grid content as grid pivot sets
|
||||
function StaticGrid.on_style_change(self, style)
|
||||
self.style = {}
|
||||
self.style.IS_DYNAMIC_NODE_POSES = style.IS_DYNAMIC_NODE_POSES or false
|
||||
end
|
||||
|
||||
|
||||
--- Component init function
|
||||
-- @tparam StaticGrid self
|
||||
-- @tparam node parent The gui node parent, where items will be placed
|
||||
@@ -191,7 +202,7 @@ function StaticGrid.add(self, item, index, shift_policy)
|
||||
self:_update_indexes()
|
||||
self:_update_borders()
|
||||
|
||||
gui.set_position(item, self:get_pos(index))
|
||||
gui.set_position(item, self:get_pos(index) + self:_get_zero_offset())
|
||||
|
||||
self:_update_pos()
|
||||
|
||||
@@ -385,8 +396,12 @@ end
|
||||
-- @tparam bool is_instant If true, node position update instantly, otherwise with set_position_function callback
|
||||
-- @local
|
||||
function StaticGrid._update_pos(self, is_instant)
|
||||
local zero_offset = self:_get_zero_offset()
|
||||
|
||||
for i, node in pairs(self.nodes) do
|
||||
local pos = self:get_pos(i)
|
||||
pos.x = pos.x + zero_offset.x
|
||||
pos.y = pos.y + zero_offset.y
|
||||
|
||||
if is_instant then
|
||||
gui.set_position(node, pos)
|
||||
@@ -399,4 +414,23 @@ function StaticGrid._update_pos(self, is_instant)
|
||||
end
|
||||
|
||||
|
||||
--- Return elements offset for correct posing nodes. Correct posing at
|
||||
-- parent pivot node (0:0) with adjusting of node sizes and anchoring
|
||||
-- @function static_grid:_get_zero_offset
|
||||
-- @treturn vector3 The offset vector
|
||||
-- @local
|
||||
function StaticGrid:_get_zero_offset()
|
||||
if not self.style.IS_DYNAMIC_NODE_POSES then
|
||||
return const.VECTOR_ZERO
|
||||
end
|
||||
|
||||
-- zero offset: center pos - border size * anchor
|
||||
return vmath.vector3(
|
||||
-((self.border.x + self.border.z)/2 + (self.border.z - self.border.x) * self.pivot.x),
|
||||
-((self.border.y + self.border.w)/2 + (self.border.y - self.border.w) * self.pivot.y),
|
||||
0
|
||||
)
|
||||
end
|
||||
|
||||
|
||||
return StaticGrid
|
||||
|
@@ -54,7 +54,8 @@ M.PIVOTS = {
|
||||
[gui.PIVOT_NW] = vmath.vector3(-0.5, 0.5, 0),
|
||||
}
|
||||
|
||||
|
||||
M.VECTOR_ZERO = vmath.vector3(0)
|
||||
M.VECTOR_ONE = vmath.vector3(1)
|
||||
M.SYS_INFO = sys.get_sys_info()
|
||||
M.CURRENT_SYSTEM_NAME = M.SYS_INFO.system_name
|
||||
|
||||
|
@@ -56,6 +56,11 @@ M["drag"] = {
|
||||
}
|
||||
|
||||
|
||||
M["static_grid"] = {
|
||||
IS_DYNAMIC_NODE_POSES = false, -- Always align by content size with node anchor
|
||||
}
|
||||
|
||||
|
||||
M["scroll"] = {
|
||||
ANIM_SPEED = 0.2, -- gui.animation speed to point
|
||||
BACK_SPEED = 0.35, -- Lerp speed of return to soft position
|
||||
|
Reference in New Issue
Block a user