diff --git a/druid/base/scroll.lua b/druid/base/scroll.lua index 3da85f3..cf5d663 100644 --- a/druid/base/scroll.lua +++ b/druid/base/scroll.lua @@ -283,8 +283,8 @@ local function update_size(self) self.available_pos = get_border_vector(view_border - content_border) self.available_size = get_size_vector(self.available_pos) - self.drag.can_x = self.available_size.x > 0 - self.drag.can_y = self.available_size.y > 0 + self.drag.can_x = self.available_size.x > 0 and self._is_horizontal_scroll + self.drag.can_y = self.available_size.y > 0 and self._is_vertical_scroll -- Extra content size calculation -- We add extra size only if scroll is available @@ -371,6 +371,8 @@ function M.init(self, view_node, content_node) self.selected = nil self.is_animate = false + self._is_horizontal_scroll = true + self._is_vertical_scroll = true update_size(self) end @@ -547,4 +549,26 @@ function M.set_points(self, points) end +--- Lock or unlock horizontal scroll +-- @function scroll:set_horizontal_scroll +-- @tparam bool state True, if horizontal scroll is enabled +-- @treturn druid.scroll Current scroll instance +function M:set_horizontal_scroll(state) + self._is_horizontal_scroll = state + self.drag.can_x = self.available_size.x > 0 and state + return self +end + + +--- Lock or unlock vertical scroll +-- @function scroll:set_vertical_scroll +-- @tparam bool state True, if vertical scroll is enabled +-- @treturn druid.scroll Current scroll instance +function M:set_vertical_scroll(state) + self._is_vertical_scroll = state + self.drag.can_y = self.available_size.y > 0 and state + return self +end + + return M diff --git a/example/page/grid_page.lua b/example/page/grid_page.lua index 76c0372..794fc9f 100644 --- a/example/page/grid_page.lua +++ b/example/page/grid_page.lua @@ -10,6 +10,7 @@ local function remove_node(self, button) for i = 1, #self.grid_node_buttons do if self.grid_node_buttons[i] == button then table.remove(self.grid_node_buttons, i) + self.grid_static_scroll:set_size(self.grid_nodes:get_size()) break end end @@ -27,6 +28,8 @@ local function add_node(self, index) table.insert(self.grid_node_buttons, button) self.grid_nodes:add(cloned["grid_nodes_prefab"], index) + + self.grid_static_scroll:set_size(self.grid_nodes:get_size()) end @@ -79,20 +82,22 @@ local function init_dynamic_grid(self) self.prefab_dynamic = gui.get_node("grid_dynamic_prefab") gui.set_enabled(self.prefab_dynamic, false) - for i = 1, 15 do + for i = 1, 20 do add_node_dynamic(self, i) end - local area = gui.get_node("grid_area") - gui.set_size(area, self.dynamic_grid:get_size()) - gui.set_position(area, self.dynamic_grid:get_center_position()) - print(self.dynamic_grid:get_center_position()) + self.grid_dynamic_scroll:set_size(self.dynamic_grid:get_size()) end function M.setup_page(self) self.grid_page_scroll = self.druid:new_scroll("grid_page", "grid_page_content") + self.grid_static_scroll = self.druid:new_scroll("grid_nodes_view", "grid_nodes") + :set_horizontal_scroll(false) + self.grid_dynamic_scroll = self.druid:new_scroll("grid_dynamic_view", "grid_dynamic_nodes") + :set_horizontal_scroll(false) + init_static_grid(self) init_dynamic_grid(self) end