]> git.sesse.net Git - vlc/blobdiff - modules/gui/wxwindows/interface.cpp
* modules/gui/wxwindows: small cleanup + renamed wxwin-size-to-video into wxwin-autosize.
[vlc] / modules / gui / wxwindows / interface.cpp
index b5f6551fec60212ec85223e1e50dc60231cb4a3d..f95153b02e00a73fd94a8cb921dc8970e56d6a6d 100644 (file)
@@ -212,6 +212,7 @@ BEGIN_EVENT_TABLE(Interface, wxFrame)
     EVT_COMMAND(1, wxEVT_INTF, Interface::OnControlEvent)
 
     EVT_TIMER(ID_CONTROLS_TIMER, Interface::OnControlsTimer)
+    EVT_TIMER(ID_SLIDER_TIMER, Interface::OnSliderTimer)
 END_EVENT_TABLE()
 
 /*****************************************************************************
@@ -303,6 +304,7 @@ Interface::Interface( intf_thread_t *_p_intf, long style ):
     SetupHotkeys();
 
     m_controls_timer.SetOwner(this, ID_CONTROLS_TIMER);
+    m_slider_timer.SetOwner(this, ID_SLIDER_TIMER);
 
     /* Start timer */
     timer = new Timer( p_intf, this );
@@ -361,9 +363,7 @@ void Interface::OnControlEvent( wxCommandEvent& event )
     {
     case 0:
         {
-          int size_to_video = config_GetInt( p_intf, "wxwin-size-to-video" );
-
-          if (size_to_video)
+          if( p_intf->p_sys->b_video_autosize )
           {
         frame_sizer->Layout();
         frame_sizer->Fit(this);
@@ -677,30 +677,117 @@ void Interface::SetupHotkeys()
     delete [] p_entries;
 }
 
+void Interface::HideSlider(bool layout)
+{
+  ShowSlider(false, layout);
+}
+
+void Interface::ShowSlider(bool show, bool layout)
+{
+  if (show)
+  {
+    //prevent the hide timers from hiding it now
+    m_slider_timer.Stop();
+    m_controls_timer.Stop();
+
+    //prevent continuous layout
+    if (slider_frame->IsShown())
+    {
+      return;
+    }
+
+    slider_frame->Show();
+    frame_sizer->Show( slider_frame );
+  }
+  else
+  {
+
+    //prevent continuous layout
+    if (!slider_frame->IsShown())
+    {
+      return;
+    }
+
+    slider_frame->Hide();
+    frame_sizer->Hide( slider_frame );
+  }
+
+  if (layout)
+  {
+    frame_sizer->Layout();
+    if ( p_intf->p_sys->b_video_autosize )
+    {
+      frame_sizer->Fit( this );
+    }
+  }
+}
+
+void Interface::HideDiscFrame(bool layout)
+{
+  ShowDiscFrame(false, layout);
+}
+
+void Interface::ShowDiscFrame(bool show, bool layout)
+{
+  if (show)
+  {
+    //prevent the hide timer from hiding it now
+    m_controls_timer.Stop();
+
+    //prevent continuous layout
+    if (disc_frame->IsShown())
+    {
+      return;
+    }
+
+    disc_frame->Show();
+    slider_sizer->Show( disc_frame );
+  }
+  else
+  {
+
+    //prevent continuous layout
+    if (!disc_frame->IsShown())
+    {
+      return;
+    }
+
+    disc_frame->Hide();
+    slider_sizer->Hide( disc_frame );
+  }
+
+  if (layout)
+  {
+    slider_sizer->Layout();
+    if ( p_intf->p_sys->b_video_autosize )
+    {
+      slider_sizer->Fit( slider_frame );
+    }
+  }
+}
+
 /*****************************************************************************
  * Event Handlers.
  *****************************************************************************/
 
 void Interface::OnControlsTimer(wxTimerEvent& WXUNUSED(event))
 {
-  int size_to_video = config_GetInt( p_intf, "wxwin-size-to-video" );
-  
   /* Hide slider and Disc Buttons */
-  disc_frame->Hide();
-  slider_sizer->Hide( disc_frame );
+  //postpone layout, we'll do it ourselves
+  HideDiscFrame(false);
+  HideSlider(false);
+
   slider_sizer->Layout();
-  if (size_to_video)
+  if ( p_intf->p_sys->b_video_autosize )
   {
     slider_sizer->Fit( slider_frame );
+    frame_sizer->Fit( this );
   }
+}
 
-  slider_frame->Hide();
-  frame_sizer->Hide( slider_frame );
-  frame_sizer->Layout();
-  if (size_to_video)
+void Interface::OnSliderTimer(wxTimerEvent& WXUNUSED(event))
   {
-    frame_sizer->Fit( this );
-  }
+  HideSlider();
 }
 
 void Interface::OnMenuOpen(wxMenuEvent& event)