@@ -42,8 +42,9 @@ void scroll_frame::fire_script(const std::string& script_name, const event_data&
42
42
if (!checker.is_alive ())
43
43
return ;
44
44
45
- if (script_name == " OnSizeChanged" )
45
+ if (script_name == " OnSizeChanged" ) {
46
46
rebuild_scroll_render_target_flag_ = true ;
47
+ }
47
48
}
48
49
49
50
void scroll_frame::copy_from (const region& obj) {
@@ -111,7 +112,6 @@ void scroll_frame::set_scroll_child(utils::owner_ptr<frame> obj) {
111
112
scroll_child_->set_point (point::top_left, get_name (), -scroll_);
112
113
113
114
update_scroll_range_ ();
114
- update_scroll_range_flag_ = false ;
115
115
}
116
116
117
117
redraw_scroll_render_target_flag_ = true ;
@@ -177,10 +177,7 @@ void scroll_frame::update(float delta) {
177
177
if (!checker.is_alive ())
178
178
return ;
179
179
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_ ();
184
181
185
182
if (is_visible ()) {
186
183
if (rebuild_scroll_render_target_flag_ && scroll_texture_) {
@@ -189,11 +186,6 @@ void scroll_frame::update(float delta) {
189
186
redraw_scroll_render_target_flag_ = true ;
190
187
}
191
188
192
- if (update_scroll_range_flag_) {
193
- update_scroll_range_ ();
194
- update_scroll_range_flag_ = false ;
195
- }
196
-
197
189
if (scroll_child_ && scroll_render_target_ && redraw_scroll_render_target_flag_) {
198
190
render_scroll_strata_list_ ();
199
191
redraw_scroll_render_target_flag_ = false ;
@@ -204,6 +196,7 @@ void scroll_frame::update(float delta) {
204
196
void scroll_frame::update_scroll_range_ () {
205
197
const vector2f apparent_size = get_apparent_dimensions ();
206
198
const vector2f child_apparent_size = scroll_child_->get_apparent_dimensions ();
199
+ const auto old_scroll_range = scroll_range_;
207
200
208
201
scroll_range_ = child_apparent_size - apparent_size;
209
202
@@ -212,7 +205,7 @@ void scroll_frame::update_scroll_range_() {
212
205
if (scroll_range_.y < 0 )
213
206
scroll_range_.y = 0 ;
214
207
215
- if (!is_virtual ()) {
208
+ if (!is_virtual () && scroll_range_ != old_scroll_range ) {
216
209
alive_checker checker (*this );
217
210
fire_script (" OnScrollRangeChanged" );
218
211
if (!checker.is_alive ())
@@ -239,7 +232,6 @@ void scroll_frame::rebuild_scroll_render_target_() {
239
232
if (scroll_render_target_) {
240
233
scroll_render_target_->set_dimensions (scaled_size);
241
234
scroll_texture_->set_tex_rect (std::array<float , 4 >{0 .0f , 0 .0f , 1 .0f , 1 .0f });
242
- update_scroll_range_flag_ = true ;
243
235
} else {
244
236
auto & renderer = get_manager ().get_renderer ();
245
237
scroll_render_target_ = renderer.create_render_target (scaled_size);
0 commit comments