]> git.sesse.net Git - vlc/commitdiff
* all: Post a CmdResizeVout command when the vout size changes
authorCyril Deguet <asmax@videolan.org>
Mon, 24 Oct 2005 19:59:51 +0000 (19:59 +0000)
committerCyril Deguet <asmax@videolan.org>
Mon, 24 Oct 2005 19:59:51 +0000 (19:59 +0000)
(this command does nothing at the moment ;)

modules/gui/skins2/commands/cmd_resize.cpp
modules/gui/skins2/commands/cmd_resize.hpp
modules/gui/skins2/src/vlcproc.cpp

index 3e73065533e2e2e6bae05a138022806cc6c53691..b9dbe483004c650d8fa8a050616e15814f127c42 100644 (file)
@@ -39,3 +39,20 @@ void CmdResize::execute()
     // Resize the layout
     m_rLayout.resize( m_width, m_height );
 }
+
+
+CmdResizeVout::CmdResizeVout( intf_thread_t *pIntf, void *pWindow, int width,
+                              int height ):
+    CmdGeneric( pIntf ), m_pWindow( pWindow ), m_width( width ),
+    m_height( height )
+{
+}
+
+
+void CmdResizeVout::execute()
+{
+    // TODO
+    msg_Dbg( getIntf(), "New vout size requested: %d x %d", m_width,
+             m_height );
+}
+
index bcce212c4e8358f2b937cb45033c5fe7f449b2fb..8686f50725a76ad60f44c20ec2689c2dfc683045 100644 (file)
@@ -50,4 +50,26 @@ class CmdResize: public CmdGeneric
         int m_width, m_height;
 };
 
+
+/// Command to resize the vout window
+class CmdResizeVout: public CmdGeneric
+{
+    public:
+        /// Resize the given layout
+        CmdResizeVout( intf_thread_t *pIntf, void *pWindow, int width,
+                       int height );
+        virtual ~CmdResizeVout() {}
+
+        /// This method does the real job of the command
+        virtual void execute();
+
+        /// Return the type of the command
+        virtual string getType() const { return "resize vout"; }
+
+    private:
+        void *m_pWindow;
+        int m_width, m_height;
+};
+
+
 #endif
index 8d532e5a94ca7320b18d22480527c1c19a194b68..e3b0fce601d7404936fdf801063d78b59cd1e9c0 100644 (file)
@@ -35,6 +35,7 @@
 #include "../commands/cmd_change_skin.hpp"
 #include "../commands/cmd_show_window.hpp"
 #include "../commands/cmd_quit.hpp"
+#include "../commands/cmd_resize.hpp"
 #include "../commands/cmd_vars.hpp"
 #include "../utils/var_bool.hpp"
 
@@ -454,7 +455,15 @@ void *VlcProc::getWindow( intf_thread_t *pIntf, vout_thread_t *pVout,
     }
     else
     {
-        return *pThis->m_handleSet.begin();
+        // Get the window handle
+        void *pWindow = *pThis->m_handleSet.begin();
+        // Post a resize vout command
+        CmdResizeVout *pCmd = new CmdResizeVout( pThis->getIntf(), pWindow,
+                                                 *pWidthHint, *pHeightHint );
+        AsyncQueue *pQueue = AsyncQueue::instance( pThis->getIntf() );
+        pQueue->remove( "resize vout" );
+        pQueue->push( CmdGenericPtr( pCmd ) );
+        return pWindow;
     }
 }
 
@@ -469,6 +478,35 @@ void VlcProc::releaseWindow( intf_thread_t *pIntf, void *pWindow )
 int VlcProc::controlWindow( intf_thread_t *pIntf, void *pWindow,
                             int query, va_list args )
 {
+    VlcProc *pThis = pIntf->p_sys->p_vlcProc;
+
+    switch( query )
+    {
+        case VOUT_SET_ZOOM:
+        {
+            double fArg = va_arg( args, double );
+
+            if( pThis->m_pVout )
+            {
+                // Compute requested vout dimensions
+                int width = (int)( pThis->m_pVout->i_window_width * fArg );
+                int height = (int)( pThis->m_pVout->i_window_height * fArg );
+
+                // Post a resize vout command
+                CmdResizeVout *pCmd =
+                    new CmdResizeVout( pThis->getIntf(), pWindow,
+                                       width, height );
+                AsyncQueue *pQueue = AsyncQueue::instance( pThis->getIntf() );
+                pQueue->remove( "resize vout" );
+                pQueue->push( CmdGenericPtr( pCmd ) );
+            }
+        }
+
+        default:
+            msg_Dbg( pIntf, "control query not supported" );
+            break;
+    }
+
     return VLC_SUCCESS;
 }