Skip to content

Commit 20487b0

Browse files
committed
Only trigger OnScrollRangeChanged if actually changed
1 parent cdbd503 commit 20487b0

File tree

2 files changed

+5
-14
lines changed

2 files changed

+5
-14
lines changed

include/lxgui/gui_scroll_frame.hpp

-1
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,6 @@ class scroll_frame : public frame, public frame_renderer {
187187

188188
bool rebuild_scroll_render_target_flag_ = false;
189189
bool redraw_scroll_render_target_flag_ = false;
190-
bool update_scroll_range_flag_ = false;
191190
std::shared_ptr<render_target> scroll_render_target_;
192191

193192
utils::observer_ptr<texture> scroll_texture_ = nullptr;

src/gui_scroll_frame.cpp

+5-13
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,9 @@ void scroll_frame::fire_script(const std::string& script_name, const event_data&
4242
if (!checker.is_alive())
4343
return;
4444

45-
if (script_name == "OnSizeChanged")
45+
if (script_name == "OnSizeChanged") {
4646
rebuild_scroll_render_target_flag_ = true;
47+
}
4748
}
4849

4950
void scroll_frame::copy_from(const region& obj) {
@@ -111,7 +112,6 @@ void scroll_frame::set_scroll_child(utils::owner_ptr<frame> obj) {
111112
scroll_child_->set_point(point::top_left, get_name(), -scroll_);
112113

113114
update_scroll_range_();
114-
update_scroll_range_flag_ = false;
115115
}
116116

117117
redraw_scroll_render_target_flag_ = true;
@@ -177,10 +177,7 @@ void scroll_frame::update(float delta) {
177177
if (!checker.is_alive())
178178
return;
179179

180-
if (scroll_child_ && old_child_size != scroll_child_->get_apparent_dimensions()) {
181-
update_scroll_range_flag_ = true;
182-
redraw_scroll_render_target_flag_ = true;
183-
}
180+
update_scroll_range_();
184181

185182
if (is_visible()) {
186183
if (rebuild_scroll_render_target_flag_ && scroll_texture_) {
@@ -189,11 +186,6 @@ void scroll_frame::update(float delta) {
189186
redraw_scroll_render_target_flag_ = true;
190187
}
191188

192-
if (update_scroll_range_flag_) {
193-
update_scroll_range_();
194-
update_scroll_range_flag_ = false;
195-
}
196-
197189
if (scroll_child_ && scroll_render_target_ && redraw_scroll_render_target_flag_) {
198190
render_scroll_strata_list_();
199191
redraw_scroll_render_target_flag_ = false;
@@ -204,6 +196,7 @@ void scroll_frame::update(float delta) {
204196
void scroll_frame::update_scroll_range_() {
205197
const vector2f apparent_size = get_apparent_dimensions();
206198
const vector2f child_apparent_size = scroll_child_->get_apparent_dimensions();
199+
const auto old_scroll_range = scroll_range_;
207200

208201
scroll_range_ = child_apparent_size - apparent_size;
209202

@@ -212,7 +205,7 @@ void scroll_frame::update_scroll_range_() {
212205
if (scroll_range_.y < 0)
213206
scroll_range_.y = 0;
214207

215-
if (!is_virtual()) {
208+
if (!is_virtual() && scroll_range_ != old_scroll_range) {
216209
alive_checker checker(*this);
217210
fire_script("OnScrollRangeChanged");
218211
if (!checker.is_alive())
@@ -239,7 +232,6 @@ void scroll_frame::rebuild_scroll_render_target_() {
239232
if (scroll_render_target_) {
240233
scroll_render_target_->set_dimensions(scaled_size);
241234
scroll_texture_->set_tex_rect(std::array<float, 4>{0.0f, 0.0f, 1.0f, 1.0f});
242-
update_scroll_range_flag_ = true;
243235
} else {
244236
auto& renderer = get_manager().get_renderer();
245237
scroll_render_target_ = renderer.create_render_target(scaled_size);

0 commit comments

Comments
 (0)