diff --git a/druid/base/scroll.lua b/druid/base/scroll.lua index e8c437a..415d834 100644 --- a/druid/base/scroll.lua +++ b/druid/base/scroll.lua @@ -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 diff --git a/druid/extended/data_list.lua b/druid/extended/data_list.lua index f69ca9d..d49f531 100644 --- a/druid/extended/data_list.lua +++ b/druid/extended/data_list.lua @@ -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) diff --git a/example/examples/data_list/navigate/navigate.gui_script b/example/examples/data_list/navigate/navigate.gui_script index c1d3bd9..81a649a 100644 --- a/example/examples/data_list/navigate/navigate.gui_script +++ b/example/examples/data_list/navigate/navigate.gui_script @@ -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()