Fix scroll_to_index in data_list

This commit is contained in:
Insality 2021-04-05 22:50:20 +03:00
parent 4f621274c1
commit c3f1b38a8a
3 changed files with 16 additions and 6 deletions

View File

@ -203,7 +203,10 @@ end
-- @usage scroll:scroll_to(vmath.vector3(0), true)
function Scroll.scroll_to(self, point, is_instant)
local b = self.available_pos
local target = vmath.vector3(-point.x, -point.y, 0)
local target = vmath.vector3(
self._is_horizontal_scroll and -point.x or self.target_position.x,
self._is_vertical_scroll and -point.y or self.target_position.y,
0)
target.x = helper.clamp(target.x, b.x, b.z)
target.y = helper.clamp(target.y, b.y, b.w)
@ -690,7 +693,10 @@ function Scroll._update_size(self)
self.available_pos_extra = get_border_vector(view_border - content_border_extra, self._offset)
self.available_size_extra = get_size_vector(self.available_pos_extra)
self:_update_params()
self:_set_scroll_position(self.position)
self.target_position.x = self.position.x
self.target_position.y = self.position.y
end

View File

@ -178,9 +178,13 @@ end
-- @tparam DataList self
-- @tparam number index
function DataList.scroll_to_index(self, index)
self.top_index = helper.clamp(index, 1, #self._data)
local target = helper.clamp(index, 1, #self._data)
self.top_index = target
self:_refresh()
self.scroll.on_scroll:trigger(self:get_context(), self)
if self._data_visual[target] then
self.scroll:scroll_to(gui.get_position(self._data_visual[target].node), true)
end
end
@ -241,8 +245,8 @@ function DataList._check_elements(self)
end
end
self:_check_elements_from(self.top_index + 1, 1)
self:_check_elements_from(self.top_index, -1)
self:_check_elements_from(self.top_index + 1, 1)
for index, data in pairs(self._data_visual) do
self.top_index = math.min(self.top_index or index, index)

View File

@ -34,7 +34,7 @@ function init(self)
-- Disable slider input, now we can not use slider with data list
self.slider_simple:set_input_enabled(false)
self.data_list_simple.on_scroll_progress_change:subscribe(function(_, progress)
self.slider_simple:set(progress)
self.slider_simple:set(progress, true)
end)
self.druid:new_button("button_simple_first/button", function()