]> git.sesse.net Git - vlc/commitdiff
* wxwidgets: try to implement a go-where-you-click slider
authorYoann Peronneau <yoann@videolan.org>
Tue, 20 Jun 2006 18:57:13 +0000 (18:57 +0000)
committerYoann Peronneau <yoann@videolan.org>
Tue, 20 Jun 2006 18:57:13 +0000 (18:57 +0000)
  but I don't have a real video/audio file to test it...

modules/gui/wxwidgets/input_manager.cpp
modules/gui/wxwidgets/input_manager.hpp

index ed3021002e26b0a9ca50fbf4033e06ba7ea3042b..9491607888d35fb069485eacce3815d51d877144 100644 (file)
@@ -75,6 +75,10 @@ InputManager::InputManager( intf_thread_t *_p_intf, Interface *_p_main_intf,
 
     /* Create slider */
     slider = new wxSlider( this, SliderScroll_Event, 0, 0, SLIDER_MAX_POS );
+    /* Add mouse click on slider */
+    slider->Connect( wxEVT_LEFT_DOWN,
+                     wxMouseEventHandler( InputManager::OnSliderClick ),
+                     NULL, this );
 
     /* Create disc buttons */
     disc_frame = new wxPanel( this );
@@ -427,6 +431,22 @@ void InputManager::OnSliderUpdate( wxScrollEvent& event )
     vlc_mutex_unlock( &p_intf->change_lock );
 }
 
+void InputManager::OnSliderClick( wxMouseEvent& event )
+{
+    wxSlider* slider = wxStaticCast( event.GetEventObject(), wxSlider );
+    int min = slider->GetMin();
+    int max = slider->GetMax();
+    int pos = event.GetPosition().x;
+    int dim = slider->GetClientSize().x;
+
+    if( pos < 0 || pos >= dim ) return;
+
+    int val = ( pos * ( max - min + 1 ) ) / dim;
+    slider->SetValue( min + val );
+
+    event.Skip();
+}
+
 void InputManager::ShowSlider( bool show )
 {
     if( !!show == !!slider->IsShown() ) return;
index 3ccda08c0fdd204c6d7ef044a75f609a7f3182c2..abbd9213f3824444d6e796a25785e950bdb1b74f 100644 (file)
@@ -54,6 +54,7 @@ namespace wxvlc
         void ShowSlider( bool show = true );
 
         void OnSliderUpdate( wxScrollEvent& event );
+        void OnSliderClick( wxMouseEvent& event );
 
         void OnDiscMenu( wxCommandEvent& event );
         void OnDiscPrev( wxCommandEvent& event );