Skip to content

Commit 72cfdd0

Browse files
committed
scrollview element removal fix
1 parent 5a2c1eb commit 72cfdd0

File tree

2 files changed

+50
-23
lines changed

2 files changed

+50
-23
lines changed

GLSMAC_data/default/uidemo.gls.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -750,7 +750,7 @@
750750
font: ':18',
751751
});
752752
const st = (left, top) => {
753-
scrollview.text({
753+
return scrollview.text({
754754
class: 'scrolltext',
755755
left: left,
756756
top: top,
@@ -762,7 +762,12 @@
762762
st(20, 142 );
763763
st(300, 30);
764764
st( 110, 50 );
765-
st( 30, 210 );
766-
st( 240, 140 );
765+
st( 240, 130 );
766+
const toremove = st( 30, 210 );
767+
768+
#async(1000, () => {
769+
#print('REMOVE');
770+
toremove.remove();
771+
});
767772

768773
});

src/ui/dom/Scrollbar.cpp

Lines changed: 42 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -169,29 +169,33 @@ Scrollbar::Scrollbar( DOM_ARGS_T )
169169
};
170170

171171
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 ) );
181185
}
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 );
184188
}
185-
m_slider_drag.is_dragging = true;
186-
m_slider_drag.drag_handler_id = m_ui->AddGlobalHandler( f_drag_handler );
187189
return true;
188190
};
189191
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+
}
195199
}
196200
return false;
197201
};
@@ -228,6 +232,12 @@ const bool Scrollbar::ProcessEvent( GSE_CALLABLE, const input::Event& event ) {
228232
void Scrollbar::SetMinRaw( const float min ) {
229233
if ( min != m_min ) {
230234
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+
}
231241
RealignSlider();
232242
}
233243
}
@@ -237,16 +247,25 @@ void Scrollbar::SetMin( GSE_CALLABLE, const float min ) {
237247
if ( min >= m_max ) {
238248
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 ) + " )" );
239249
}
240-
SetMinRaw( min );
250+
m_min = min;
241251
if ( m_value < m_min ) {
242252
SetValue( GSE_CALL, m_min, true );
243253
}
254+
else {
255+
RealignSlider();
256+
}
244257
}
245258
}
246259

247260
void Scrollbar::SetMaxRaw( const float max ) {
248261
if ( max != m_max ) {
249262
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+
}
250269
RealignSlider();
251270
}
252271
}
@@ -256,10 +275,13 @@ void Scrollbar::SetMax( GSE_CALLABLE, const float max ) {
256275
if ( max <= m_min ) {
257276
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 ) + " )" );
258277
}
259-
SetMaxRaw( max );
278+
m_max = max;
260279
if ( m_value > m_max ) {
261280
SetValue( GSE_CALL, m_max, true );
262281
}
282+
else {
283+
RealignSlider();
284+
}
263285
}
264286
}
265287

0 commit comments

Comments
 (0)