Commit 4de9a2e2 authored by Erwan Tulou's avatar Erwan Tulou

skins2: improve resizing when multiple layers are used and solve zoom misfunctioning in this case

parent 811af572
...@@ -46,9 +46,9 @@ void CmdResize::execute() ...@@ -46,9 +46,9 @@ void CmdResize::execute()
} }
CmdResizeVout::CmdResizeVout( intf_thread_t *pIntf, void *pWindow, int width, CmdResizeVout::CmdResizeVout( intf_thread_t *pIntf, VoutWindow *pVoutWindow,
int height ): int width, int height ):
CmdGeneric( pIntf ), m_pWindow( pWindow ), m_width( width ), CmdGeneric( pIntf ), m_pVoutWindow( pVoutWindow ), m_width( width ),
m_height( height ) m_height( height )
{ {
} }
...@@ -56,8 +56,17 @@ CmdResizeVout::CmdResizeVout( intf_thread_t *pIntf, void *pWindow, int width, ...@@ -56,8 +56,17 @@ CmdResizeVout::CmdResizeVout( intf_thread_t *pIntf, void *pWindow, int width,
void CmdResizeVout::execute() void CmdResizeVout::execute()
{ {
VarBox &rVoutSize = VlcProc::instance( getIntf() )->getVoutSizeVar(); if( m_pVoutWindow )
rVoutSize.setSize( m_width, m_height ); {
m_pVoutWindow->setOriginalWidth( m_width );
m_pVoutWindow->setOriginalHeight( m_height );
CtrlVideo* pCtrlVideo = m_pVoutWindow->getCtrlVideo();
if( pCtrlVideo )
{
pCtrlVideo->resizeControl( m_width, m_height );
}
}
} }
......
...@@ -61,8 +61,8 @@ class CmdResizeVout: public CmdGeneric ...@@ -61,8 +61,8 @@ class CmdResizeVout: public CmdGeneric
{ {
public: public:
/// Resize the given layout /// Resize the given layout
CmdResizeVout( intf_thread_t *pIntf, void *pWindow, int width, CmdResizeVout( intf_thread_t *pIntf, VoutWindow *pVoutWindow,
int height ); int width, int height );
virtual ~CmdResizeVout() {} virtual ~CmdResizeVout() {}
/// This method does the real job of the command /// This method does the real job of the command
...@@ -72,7 +72,7 @@ class CmdResizeVout: public CmdGeneric ...@@ -72,7 +72,7 @@ class CmdResizeVout: public CmdGeneric
virtual string getType() const { return "resize vout"; } virtual string getType() const { return "resize vout"; }
private: private:
void *m_pWindow; VoutWindow *m_pVoutWindow;
int m_width, m_height; int m_width, m_height;
}; };
......
...@@ -187,10 +187,10 @@ void CtrlVideo::onUpdate( Subject<VarBool> &rVariable, void *arg ) ...@@ -187,10 +187,10 @@ void CtrlVideo::onUpdate( Subject<VarBool> &rVariable, void *arg )
} }
} }
void CtrlVideo::attachVoutWindow( VoutWindow* pVoutWindow ) void CtrlVideo::attachVoutWindow( VoutWindow* pVoutWindow, int width, int height )
{ {
int width = pVoutWindow->getOriginalWidth(); width = ( width < 0 ) ? pVoutWindow->getOriginalWidth() : width;
int height = pVoutWindow->getOriginalHeight(); height = ( height < 0 ) ? pVoutWindow->getOriginalHeight() : height;
WindowManager &rWindowManager = WindowManager &rWindowManager =
getIntf()->p_sys->p_theme->getWindowManager(); getIntf()->p_sys->p_theme->getWindowManager();
......
...@@ -63,7 +63,8 @@ class CtrlVideo: public CtrlGeneric, public Observer<VarBox> ...@@ -63,7 +63,8 @@ class CtrlVideo: public CtrlGeneric, public Observer<VarBox>
virtual void onUpdate( Subject<VarBool> &rVariable , void* ); virtual void onUpdate( Subject<VarBool> &rVariable , void* );
// Attach a voutWindow to a Video Control // Attach a voutWindow to a Video Control
void attachVoutWindow( VoutWindow* pVoutWindow ); void attachVoutWindow( VoutWindow* pVoutWindow,
int width = -1, int height = -1 );
// Detach a voutWindow from a Video Control // Detach a voutWindow from a Video Control
void detachVoutWindow( ); void detachVoutWindow( );
......
...@@ -154,7 +154,8 @@ void VoutManager::requestVout( CtrlVideo* pCtrlVideo ) ...@@ -154,7 +154,8 @@ void VoutManager::requestVout( CtrlVideo* pCtrlVideo )
{ {
if( (*it).pCtrlVideo == NULL ) if( (*it).pCtrlVideo == NULL )
{ {
pCtrlVideo->attachVoutWindow( (*it).pVoutWindow ); pCtrlVideo->attachVoutWindow( (*it).pVoutWindow,
(*it).width, (*it).height );
(*it).pCtrlVideo = pCtrlVideo; (*it).pCtrlVideo = pCtrlVideo;
break; break;
} }
...@@ -274,6 +275,7 @@ int VoutManager::controlWindow( struct vout_window_t *pWnd, ...@@ -274,6 +275,7 @@ int VoutManager::controlWindow( struct vout_window_t *pWnd,
{ {
intf_thread_t *pIntf = (intf_thread_t *)pWnd->p_private; intf_thread_t *pIntf = (intf_thread_t *)pWnd->p_private;
VoutManager *pThis = pIntf->p_sys->p_voutManager; VoutManager *pThis = pIntf->p_sys->p_voutManager;
vout_thread_t* pVout = pWnd->vout;
switch( query ) switch( query )
{ {
...@@ -284,12 +286,27 @@ int VoutManager::controlWindow( struct vout_window_t *pWnd, ...@@ -284,12 +286,27 @@ int VoutManager::controlWindow( struct vout_window_t *pWnd,
if( i_width && i_height ) if( i_width && i_height )
{ {
// Post a resize vout command pThis->lockVout();
CmdResizeVout *pCmd =
new CmdResizeVout( pThis->getIntf(), pWnd->handle.hwnd, vector<SavedVout>::iterator it;
i_width, i_height ); for( it = pThis->m_SavedVoutVec.begin();
AsyncQueue *pQueue = AsyncQueue::instance( pThis->getIntf() ); it != pThis->m_SavedVoutVec.end(); it++ )
pQueue->push( CmdGenericPtr( pCmd ) ); {
if( (*it).pVout == pVout )
{
// Post a vout resize command
CmdResizeVout *pCmd =
new CmdResizeVout( pThis->getIntf(),
(*it).pVoutWindow,
(int)i_width, (int)i_height );
AsyncQueue *pQueue =
AsyncQueue::instance( pThis->getIntf() );
pQueue->push( CmdGenericPtr( pCmd ) );
break;
}
}
pThis->unlockVout();
} }
} }
......
...@@ -59,13 +59,18 @@ class VoutWindow: private GenericWindow ...@@ -59,13 +59,18 @@ class VoutWindow: private GenericWindow
/// Refresh an area of the window /// Refresh an area of the window
virtual void refresh( int left, int top, int width, int height ); virtual void refresh( int left, int top, int width, int height );
/// set Video Control for VoutWindow /// set and get Video Control for VoutWindow
virtual void setCtrlVideo( CtrlVideo* pCtrlVideo ); virtual void setCtrlVideo( CtrlVideo* pCtrlVideo );
virtual CtrlVideo* getCtrlVideo( ) { return m_pCtrlVideo; }
/// get original size of vout /// get original size of vout
virtual int getOriginalWidth( ) { return original_width; } virtual int getOriginalWidth( ) { return original_width; }
virtual int getOriginalHeight( ) { return original_height; } virtual int getOriginalHeight( ) { return original_height; }
/// set original size of vout
virtual void setOriginalWidth( int width ) { original_width = width; }
virtual void setOriginalHeight( int height ) { original_height = height; }
virtual string getType() const { return "Vout"; } virtual string getType() const { return "Vout"; }
private: private:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment