@@ -169,29 +169,33 @@ Scrollbar::Scrollbar( DOM_ARGS_T )
169
169
};
170
170
171
171
m_slider->m_on_mousedown = [ this , f_drag_handler ]( const input::Event& event ) {
172
- const auto & area = m_slider->GetGeometry ()->m_area ;
173
- switch ( m_scroll_type ) {
174
- case ST_VERTICAL: {
175
- m_slider_drag.initial_offset = event.data .mouse .y - area.top ;
176
- break ;
177
- }
178
- case ST_HORIZONTAL: {
179
- m_slider_drag.initial_offset = event.data .mouse .x - area.left ;
180
- break ;
172
+ if ( event.data .mouse .button == input::MB_LEFT ) {
173
+ const auto & area = m_slider->GetGeometry ()->m_area ;
174
+ switch ( m_scroll_type ) {
175
+ case ST_VERTICAL: {
176
+ m_slider_drag.initial_offset = event.data .mouse .y - area.top ;
177
+ break ;
178
+ }
179
+ case ST_HORIZONTAL: {
180
+ m_slider_drag.initial_offset = event.data .mouse .x - area.left ;
181
+ break ;
182
+ }
183
+ default :
184
+ ASSERT ( false , " Unknown scrollbar type: " + std::to_string ( m_scroll_type ) );
181
185
}
182
- default :
183
- ASSERT ( false , " Unknown scrollbar type: " + std::to_string ( m_scroll_type ) );
186
+ m_slider_drag. is_dragging = true ;
187
+ m_slider_drag. drag_handler_id = m_ui-> AddGlobalHandler ( f_drag_handler );
184
188
}
185
- m_slider_drag.is_dragging = true ;
186
- m_slider_drag.drag_handler_id = m_ui->AddGlobalHandler ( f_drag_handler );
187
189
return true ;
188
190
};
189
191
m_slider->m_on_mouseup = [ this ]( const input::Event& event ) {
190
- if ( m_slider_drag.is_dragging ) {
191
- ASSERT ( m_slider_drag.drag_handler_id , " drag handler id zero" );
192
- m_ui->RemoveGlobalHandler ( m_slider_drag.drag_handler_id );
193
- m_slider_drag.drag_handler_id = 0 ;
194
- m_slider_drag.is_dragging = false ;
192
+ if ( event.data .mouse .button == input::MB_LEFT ) {
193
+ if ( m_slider_drag.is_dragging ) {
194
+ ASSERT ( m_slider_drag.drag_handler_id , " drag handler id zero" );
195
+ m_ui->RemoveGlobalHandler ( m_slider_drag.drag_handler_id );
196
+ m_slider_drag.drag_handler_id = 0 ;
197
+ m_slider_drag.is_dragging = false ;
198
+ }
195
199
}
196
200
return false ;
197
201
};
@@ -228,6 +232,12 @@ const bool Scrollbar::ProcessEvent( GSE_CALLABLE, const input::Event& event ) {
228
232
void Scrollbar::SetMinRaw ( const float min ) {
229
233
if ( min != m_min ) {
230
234
m_min = min;
235
+ if ( m_value < m_min ) {
236
+ m_value = m_min;
237
+ if ( m_on_change ) {
238
+ m_on_change ( m_value );
239
+ }
240
+ }
231
241
RealignSlider ();
232
242
}
233
243
}
@@ -237,16 +247,25 @@ void Scrollbar::SetMin( GSE_CALLABLE, const float min ) {
237
247
if ( min >= m_max ) {
238
248
GSE_ERROR ( gse::EC.TYPE_ERROR , " Scrollbar min value ( " + std::to_string ( min ) + " ) must be smaller than it's max value ( " + std::to_string ( m_max ) + " )" );
239
249
}
240
- SetMinRaw ( min ) ;
250
+ m_min = min ;
241
251
if ( m_value < m_min ) {
242
252
SetValue ( GSE_CALL, m_min, true );
243
253
}
254
+ else {
255
+ RealignSlider ();
256
+ }
244
257
}
245
258
}
246
259
247
260
void Scrollbar::SetMaxRaw ( const float max ) {
248
261
if ( max != m_max ) {
249
262
m_max = max;
263
+ if ( m_value > m_max ) {
264
+ m_value = m_max;
265
+ if ( m_on_change ) {
266
+ m_on_change ( m_value );
267
+ }
268
+ }
250
269
RealignSlider ();
251
270
}
252
271
}
@@ -256,10 +275,13 @@ void Scrollbar::SetMax( GSE_CALLABLE, const float max ) {
256
275
if ( max <= m_min ) {
257
276
GSE_ERROR ( gse::EC.TYPE_ERROR , " Scrollbar max value ( " + std::to_string ( max ) + " ) must be larger than it's min value ( " + std::to_string ( m_min ) + " )" );
258
277
}
259
- SetMaxRaw ( max ) ;
278
+ m_max = max ;
260
279
if ( m_value > m_max ) {
261
280
SetValue ( GSE_CALL, m_max, true );
262
281
}
282
+ else {
283
+ RealignSlider ();
284
+ }
263
285
}
264
286
}
265
287
0 commit comments