mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 17:02:45 +00:00 
			
		
		
		
	SoundPlayer: Fix jump to slider behavior for playback slider
This was regressed at some point though I never saw it working. Basically, while jump to slider works correctly it doesn't even get actioned. While the user is clicking the slider it's very likely that a buffer finishes playing and the callback for that changes the slider value. This means that the user click just gets lost. There's some additional weird behavior where values are lost in even more cases, so an additional fix that is needed is to store the slider value in the AutoSlider while we're dragging and apply it on mouse up.
This commit is contained in:
		
							parent
							
								
									925c34cf43
								
							
						
					
					
						commit
						9cca9f5204
					
				
					 2 changed files with 7 additions and 1 deletions
				
			
		|  | @ -15,6 +15,7 @@ public: | |||
|     Function<void(int)> on_knob_released; | ||||
|     virtual void set_value(int value, GUI::AllowCallback allow_callback = GUI::AllowCallback::Yes) override | ||||
|     { | ||||
|         m_in_drag_value = value; | ||||
|         if (!knob_dragging() && !mouse_is_down()) | ||||
|             GUI::Slider::set_value(value, allow_callback); | ||||
|     } | ||||
|  | @ -36,6 +37,7 @@ private: | |||
|     virtual void mouseup_event(GUI::MouseEvent& event) override | ||||
|     { | ||||
|         m_mouse_is_down = false; | ||||
|         set_value(m_in_drag_value); | ||||
|         if (on_knob_released && is_enabled()) | ||||
|             on_knob_released(value()); | ||||
| 
 | ||||
|  | @ -43,4 +45,6 @@ private: | |||
|     } | ||||
| 
 | ||||
|     bool m_mouse_is_down { false }; | ||||
|     // Keeps track of the value while we're dragging
 | ||||
|     int m_in_drag_value { 0 }; | ||||
| }; | ||||
|  |  | |||
|  | @ -220,6 +220,8 @@ void SoundPlayerWidgetAdvancedView::sound_buffer_played(RefPtr<Audio::Buffer> bu | |||
| { | ||||
|     m_visualization->set_buffer(buffer); | ||||
|     m_visualization->set_samplerate(sample_rate); | ||||
|     // If the user is currently dragging the slider, don't interfere.
 | ||||
|     if (!m_playback_progress_slider->mouse_is_down()) | ||||
|         m_playback_progress_slider->set_value(samples_played); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 kleines Filmröllchen
						kleines Filmröllchen