]> git.sesse.net Git - vlc/commitdiff
skins2: use the vout window interface (untested)
authorRémi Denis-Courmont <rdenis@simphalempin.com>
Fri, 20 Jun 2008 17:48:30 +0000 (20:48 +0300)
committerRémi Denis-Courmont <rdenis@simphalempin.com>
Fri, 20 Jun 2008 17:48:30 +0000 (20:48 +0300)
modules/gui/skins2/src/skin_main.cpp
modules/gui/skins2/src/vlcproc.cpp
modules/gui/skins2/src/vlcproc.hpp

index cbc8a64b369020ac293122a1fc6308f875276256..a994c7a9c1ef3e2dce354a3fcc1790f141014675 100644 (file)
@@ -255,6 +255,35 @@ static void Run( intf_thread_t *p_intf )
 }
 
 
+// Callbacks for vout requests
+static int WindowOpen( vlc_object_t *p_this )
+{
+    vout_window_t *pWnd = (vout_window_t *)p_this;
+    intf_thread_t *pIntf = (intf_thread_t *)
+        vlc_object_find_name( p_this, "skins2", FIND_ANYWHERE );
+
+    if( p_intf == NULL )
+        return VLC_EGENERIC;
+
+    /* FIXME: most probably not thread-safe,
+     * albeit no worse than ever before */
+    pWind->handle = VlcProc::getWindow( pIntf, pWnd->vout,
+                                        &pWnd->pos_x, &pWnd->pos_y,
+                                        &pWnd->width, &pWnd->height );
+    pWnd->p_private = p_intf;
+    pWnd->control = &VlcProc::controlWindow
+    return VLC_SUCCESS;
+}
+
+
+static void WindowClose( vlc_object_t *p_this )
+{
+    vout_window_t *pWnd = (vout_window_t *)p_this;
+    intf_thread_t *pIntf = (intf_thread_t *)p_this->p_private;
+
+    VlCproc::releaseWindow( pIntf, pWnd->handle );
+}
+
 //---------------------------------------------------------------------------
 // DemuxOpen: initialize demux
 //---------------------------------------------------------------------------
@@ -442,6 +471,10 @@ vlc_module_begin();
     set_callbacks( Open, Close );
     add_shortcut( "skins" );
 
+    add_submodule();
+        set_capability( "vout window", 51 );
+        set_callbacks( WindowOpen, WindowClose );
+
     add_submodule();
         set_description( N_("Skins loader demux") );
         set_capability( "demux", 5 );
index b35a65c650f986a9b5da66cc83038361ce28b095..bf2ef4f681e69601a81dc9012274d82087ffc720 100644 (file)
@@ -30,6 +30,7 @@
 #include <vlc_aout.h>
 #include <vlc_vout.h>
 #include <vlc_playlist.h>
+#include <vlc_window.h>
 
 #include "vlcproc.hpp"
 #include "os_factory.hpp"
@@ -164,11 +165,6 @@ VlcProc::VlcProc( intf_thread_t *pIntf ): SkinObject( pIntf ),
     var_AddCallback( pIntf, "interaction", onInteraction, this );
     pIntf->b_interaction = true;
 
-    // Callbacks for vout requests
-/*    getIntf()->pf_request_window = &getWindow;
-    getIntf()->pf_release_window = &releaseWindow;
-    getIntf()->pf_control_window = &controlWindow;
-*/
     getIntf()->p_sys->p_input = NULL;
 }
 
@@ -182,11 +178,6 @@ VlcProc::~VlcProc()
         vlc_object_release( getIntf()->p_sys->p_input );
     }
 
-    // Callbacks for vout requests
-/*    getIntf()->pf_request_window = NULL;
-    getIntf()->pf_release_window = NULL;
-    getIntf()->pf_control_window = NULL;
-*/
     var_DelCallback( getIntf()->p_sys->p_playlist, "intf-change",
                      onIntfChange, this );
     var_DelCallback( getIntf()->p_sys->p_playlist, "item-append",
@@ -633,9 +624,10 @@ void VlcProc::releaseWindow( intf_thread_t *pIntf, void *pWindow )
 }
 
 
-int VlcProc::controlWindow( intf_thread_t *pIntf, void *pWindow,
+int VlcProc::controlWindow( struct vout_window_t *pWnd,
                             int query, va_list args )
 {
+    intf_thread_t *pIntf = (intf_thread_t *)pWnd->p_private;
     VlcProc *pThis = pIntf->p_sys->p_vlcProc;
 
     switch( query )
@@ -651,7 +643,7 @@ int VlcProc::controlWindow( intf_thread_t *pIntf, void *pWindow,
 
                 // Post a resize vout command
                 CmdResizeVout *pCmd =
-                    new CmdResizeVout( pThis->getIntf(), pWindow,
+                    new CmdResizeVout( pThis->getIntf(), pWnd->handle,
                                        i_width, i_height );
                 AsyncQueue *pQueue = AsyncQueue::instance( pThis->getIntf() );
                 pQueue->push( CmdGenericPtr( pCmd ) );
@@ -659,7 +651,7 @@ int VlcProc::controlWindow( intf_thread_t *pIntf, void *pWindow,
         }
 
         default:
-            msg_Dbg( pIntf, "control query not supported" );
+            msg_Dbg( pWnd, "control query not supported" );
             break;
     }
 
index 83185e5be3de726403b895e316b74bf55fc6c976..1e4fac2ffaca3a57a7234a3436a1472c568ae553 100644 (file)
@@ -38,6 +38,7 @@
 class OSTimer;
 class VarBool;
 struct aout_instance_t;
+struct vout_window_t;
 
 
 /// Singleton object handling VLC internal state and playlist
@@ -218,7 +219,7 @@ class VlcProc: public SkinObject
         static void releaseWindow( intf_thread_t *pIntf, void *pWindow );
 
         /// Callback to change a vout window
-        static int controlWindow( intf_thread_t *pIntf, void *pWindow,
+        static int controlWindow( struct vout_window_t *pWnd,
                                   int query, va_list args );
 
         /// Callback for equalizer-bands variable