Commit e947989f authored by Cyril Deguet's avatar Cyril Deguet

* src/vlcproc.*: added the callbacks for vout requests. The vout window

    handle is now stored in VlcProc.
  * x11/x11_window.cpp, win32/win32_window.cpp: set the vout window in 
    VlcProc instead of the old "drawable" trick
  * all: renamed "Time" into "StreamTime" because of a name conflict with 
   X11 (did i hear "namespace" ? ;)
parent 8db09e71
...@@ -80,7 +80,7 @@ void ExprEvaluator::parse( const string &rExpr ) ...@@ -80,7 +80,7 @@ void ExprEvaluator::parse( const string &rExpr )
// TODO compare to a set of operators // TODO compare to a set of operators
if( token == "not" || token == "or" || token == "and" ) if( token == "not" || token == "or" || token == "and" )
{ {
// Pop the operator stock while the operator has a higher // Pop the operator stack while the operator has a higher
// precedence than the top of the stack // precedence than the top of the stack
while( !opStack.empty() && while( !opStack.empty() &&
hasPrecedency( token, opStack.back() ) ) hasPrecedency( token, opStack.back() ) )
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
*****************************************************************************/ *****************************************************************************/
#include <vlc/aout.h> #include <vlc/aout.h>
#include <vlc/vout.h>
#include "vlcproc.hpp" #include "vlcproc.hpp"
#include "os_factory.hpp" #include "os_factory.hpp"
...@@ -55,7 +56,8 @@ void VlcProc::destroy( intf_thread_t *pIntf ) ...@@ -55,7 +56,8 @@ void VlcProc::destroy( intf_thread_t *pIntf )
} }
VlcProc::VlcProc( intf_thread_t *pIntf ): SkinObject( pIntf ) VlcProc::VlcProc( intf_thread_t *pIntf ): SkinObject( pIntf ), m_pVoutWindow( NULL ),
m_pVout( NULL )
{ {
// Create a timer to poll the status of the vlc // Create a timer to poll the status of the vlc
OSFactory *pOsFactory = OSFactory::instance( pIntf ); OSFactory *pOsFactory = OSFactory::instance( pIntf );
...@@ -73,7 +75,7 @@ VlcProc::VlcProc( intf_thread_t *pIntf ): SkinObject( pIntf ) ...@@ -73,7 +75,7 @@ VlcProc::VlcProc( intf_thread_t *pIntf ): SkinObject( pIntf )
"playlist.slider" ); "playlist.slider" );
REGISTER_VAR( m_cVarRandom, VarBoolImpl, "playlist.isRandom" ) REGISTER_VAR( m_cVarRandom, VarBoolImpl, "playlist.isRandom" )
REGISTER_VAR( m_cVarLoop, VarBoolImpl, "playlist.isLoop" ) REGISTER_VAR( m_cVarLoop, VarBoolImpl, "playlist.isLoop" )
REGISTER_VAR( m_cVarTime, Time, "time" ) REGISTER_VAR( m_cVarTime, StreamTime, "time" )
REGISTER_VAR( m_cVarVolume, Volume, "volume" ) REGISTER_VAR( m_cVarVolume, Volume, "volume" )
REGISTER_VAR( m_cVarStream, Stream, "stream" ) REGISTER_VAR( m_cVarStream, Stream, "stream" )
REGISTER_VAR( m_cVarMute, VarBoolImpl, "vlc.isMute" ) // XXX broken REGISTER_VAR( m_cVarMute, VarBoolImpl, "vlc.isMute" ) // XXX broken
...@@ -98,6 +100,11 @@ VlcProc::VlcProc( intf_thread_t *pIntf ): SkinObject( pIntf ) ...@@ -98,6 +100,11 @@ VlcProc::VlcProc( intf_thread_t *pIntf ): SkinObject( pIntf )
var_AddCallback( pIntf->p_sys->p_playlist, "item-change", var_AddCallback( pIntf->p_sys->p_playlist, "item-change",
onItemChange, this ); onItemChange, this );
// 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; getIntf()->p_sys->p_input = NULL;
} }
...@@ -113,6 +120,18 @@ VlcProc::~VlcProc() ...@@ -113,6 +120,18 @@ VlcProc::~VlcProc()
} }
void VlcProc::setVoutWindow( void *pVoutWindow )
{
m_pVoutWindow = pVoutWindow;
// Reparent the vout window
if( m_pVout )
{
if( vout_Control( m_pVout, VOUT_REPARENT ) != VLC_SUCCESS )
vout_Control( m_pVout, VOUT_CLOSE );
}
}
void VlcProc::manage() void VlcProc::manage()
{ {
// Did the user requested to quit vlc ? // Did the user requested to quit vlc ?
...@@ -124,7 +143,7 @@ void VlcProc::manage() ...@@ -124,7 +143,7 @@ void VlcProc::manage()
} }
// Get the VLC variables // Get the VLC variables
Time *pTime = (Time*)m_cVarTime.get(); StreamTime *pTime = (StreamTime*)m_cVarTime.get();
Volume *pVolume = (Volume*)m_cVarVolume.get(); Volume *pVolume = (Volume*)m_cVarVolume.get();
VarBoolImpl *pVarPlaying = (VarBoolImpl*)m_cVarPlaying.get(); VarBoolImpl *pVarPlaying = (VarBoolImpl*)m_cVarPlaying.get();
VarBoolImpl *pVarStopped = (VarBoolImpl*)m_cVarStopped.get(); VarBoolImpl *pVarStopped = (VarBoolImpl*)m_cVarStopped.get();
...@@ -277,3 +296,28 @@ int VlcProc::onPlaylistChange( vlc_object_t *pObj, const char *pVariable, ...@@ -277,3 +296,28 @@ int VlcProc::onPlaylistChange( vlc_object_t *pObj, const char *pVariable,
return VLC_SUCCESS; return VLC_SUCCESS;
} }
void *VlcProc::getWindow( intf_thread_t *pIntf, vout_thread_t *pVout,
int *pXHint, int *pYHint,
unsigned int *pWidthHint,
unsigned int *pHeightHint )
{
VlcProc *pThis = pIntf->p_sys->p_vlcProc;
pThis->m_pVout = pVout;
return pThis->m_pVoutWindow;
}
void VlcProc::releaseWindow( intf_thread_t *pIntf, void *pWindow )
{
VlcProc *pThis = pIntf->p_sys->p_vlcProc;
pThis->m_pVout = NULL;
}
int VlcProc::controlWindow( intf_thread_t *pIntf, void *pWindow,
int query, va_list args )
{
return VLC_SUCCESS;
}
...@@ -49,7 +49,7 @@ class VlcProc: public SkinObject ...@@ -49,7 +49,7 @@ class VlcProc: public SkinObject
Playlist &getPlaylistVar() { return *((Playlist*)m_cPlaylist.get()); } Playlist &getPlaylistVar() { return *((Playlist*)m_cPlaylist.get()); }
/// Getter for the time variable /// Getter for the time variable
Time &getTimeVar() { return *((Time*)(m_cVarTime.get())); } StreamTime &getTimeVar() { return *((StreamTime*)(m_cVarTime.get())); }
/// Getter for the volume variable /// Getter for the volume variable
Volume &getVolumeVar() { return *((Volume*)(m_cVarVolume.get())); } Volume &getVolumeVar() { return *((Volume*)(m_cVarVolume.get())); }
...@@ -72,6 +72,9 @@ class VlcProc: public SkinObject ...@@ -72,6 +72,9 @@ class VlcProc: public SkinObject
/// Getter for the seekable variable /// Getter for the seekable variable
VarBool &getIsSeekableVar() { return *((VarBool*)(m_cVarSeekable.get())); } VarBool &getIsSeekableVar() { return *((VarBool*)(m_cVarSeekable.get())); }
/// Set the vout window handle
void setVoutWindow( void *pVoutWindow );
protected: protected:
// Protected because it is a singleton // Protected because it is a singleton
VlcProc( intf_thread_t *pIntf ); VlcProc( intf_thread_t *pIntf );
...@@ -97,6 +100,10 @@ class VlcProc: public SkinObject ...@@ -97,6 +100,10 @@ class VlcProc: public SkinObject
VariablePtr m_cVarStopped; VariablePtr m_cVarStopped;
VariablePtr m_cVarPaused; VariablePtr m_cVarPaused;
VariablePtr m_cVarSeekable; VariablePtr m_cVarSeekable;
/// Vout window hanlde
void *m_pVoutWindow;
/// Vout thread
vout_thread_t *m_pVout;
/// Poll VLC internals to update the status (volume, current time in /// Poll VLC internals to update the status (volume, current time in
/// the stream, current filename, play/pause/stop status, ...) /// the stream, current filename, play/pause/stop status, ...)
...@@ -123,6 +130,19 @@ class VlcProc: public SkinObject ...@@ -123,6 +130,19 @@ class VlcProc: public SkinObject
static int onPlaylistChange( vlc_object_t *pObj, const char *pVariable, static int onPlaylistChange( vlc_object_t *pObj, const char *pVariable,
vlc_value_t oldVal, vlc_value_t newVal, vlc_value_t oldVal, vlc_value_t newVal,
void *pParam ); void *pParam );
/// Callback to request a vout window
static void *getWindow( intf_thread_t *pIntf, vout_thread_t *pVout,
int *pXHint, int *pYHint,
unsigned int *pWidthHint,
unsigned int *pHeightHint );
/// Callback to release a vout window
static void releaseWindow( intf_thread_t *pIntf, void *pWindow );
/// Callback to change a vout window
static int controlWindow( intf_thread_t *pIntf, void *pWindow,
int query, va_list args );
}; };
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
#include <vlc/input.h> #include <vlc/input.h>
void Time::set( float percentage, bool updateVLC ) void StreamTime::set( float percentage, bool updateVLC )
{ {
VarPercent::set( percentage ); VarPercent::set( percentage );
...@@ -43,7 +43,7 @@ void Time::set( float percentage, bool updateVLC ) ...@@ -43,7 +43,7 @@ void Time::set( float percentage, bool updateVLC )
} }
const string Time::getAsStringPercent() const const string StreamTime::getAsStringPercent() const
{ {
int value = (int)(100. * get()); int value = (int)(100. * get());
// 0 <= value <= 100, so we need 4 chars // 0 <= value <= 100, so we need 4 chars
...@@ -56,7 +56,7 @@ const string Time::getAsStringPercent() const ...@@ -56,7 +56,7 @@ const string Time::getAsStringPercent() const
} }
const string Time::getAsStringCurrTime() const const string StreamTime::getAsStringCurrTime() const
{ {
if( getIntf()->p_sys->p_input == NULL || if( getIntf()->p_sys->p_input == NULL ||
!getIntf()->p_sys->p_input->stream.b_seekable ) !getIntf()->p_sys->p_input->stream.b_seekable )
...@@ -71,7 +71,7 @@ const string Time::getAsStringCurrTime() const ...@@ -71,7 +71,7 @@ const string Time::getAsStringCurrTime() const
} }
const string Time::getAsStringTimeLeft() const const string StreamTime::getAsStringTimeLeft() const
{ {
if( getIntf()->p_sys->p_input == NULL || if( getIntf()->p_sys->p_input == NULL ||
!getIntf()->p_sys->p_input->stream.b_seekable ) !getIntf()->p_sys->p_input->stream.b_seekable )
...@@ -87,7 +87,7 @@ const string Time::getAsStringTimeLeft() const ...@@ -87,7 +87,7 @@ const string Time::getAsStringTimeLeft() const
} }
const string Time::getAsStringDuration() const const string StreamTime::getAsStringDuration() const
{ {
if( getIntf()->p_sys->p_input == NULL || if( getIntf()->p_sys->p_input == NULL ||
!getIntf()->p_sys->p_input->stream.b_seekable ) !getIntf()->p_sys->p_input->stream.b_seekable )
...@@ -102,7 +102,7 @@ const string Time::getAsStringDuration() const ...@@ -102,7 +102,7 @@ const string Time::getAsStringDuration() const
} }
const string Time::formatTime( int seconds ) const const string StreamTime::formatTime( int seconds ) const
{ {
char *psz_time = new char[MSTRTIME_MAX_SIZE]; char *psz_time = new char[MSTRTIME_MAX_SIZE];
snprintf( psz_time, MSTRTIME_MAX_SIZE, "%d:%02d:%02d", snprintf( psz_time, MSTRTIME_MAX_SIZE, "%d:%02d:%02d",
......
...@@ -28,12 +28,12 @@ ...@@ -28,12 +28,12 @@
#include "../utils/var_percent.hpp" #include "../utils/var_percent.hpp"
#include <string> #include <string>
/// Variable for VLC volume /// Variable for VLC strem time
class Time: public VarPercent class StreamTime: public VarPercent
{ {
public: public:
Time( intf_thread_t *pIntf ): VarPercent( pIntf ) {} StreamTime( intf_thread_t *pIntf ): VarPercent( pIntf ) {}
virtual ~Time() {} virtual ~StreamTime() {}
virtual void set( float percentage, bool updateVLC ); virtual void set( float percentage, bool updateVLC );
......
...@@ -90,7 +90,6 @@ class Win32Factory: public OSFactory ...@@ -90,7 +90,6 @@ class Win32Factory: public OSFactory
/// Map to find the GenericWindow associated with a Win32Window /// Map to find the GenericWindow associated with a Win32Window
map<HWND, GenericWindow*> m_windowMap; map<HWND, GenericWindow*> m_windowMap;
/// Functions dynamically loaded from the dll, because they don't exist /// Functions dynamically loaded from the dll, because they don't exist
/// on Win9x/NT4 /// on Win9x/NT4
// We dynamically load msimg32.dll to get a pointer to TransparentBlt() // We dynamically load msimg32.dll to get a pointer to TransparentBlt()
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#ifdef WIN32_SKINS #ifdef WIN32_SKINS
#include "../src/generic_window.hpp" #include "../src/generic_window.hpp"
#include "../src/vlcproc.hpp"
#include "win32_window.hpp" #include "win32_window.hpp"
#include "win32_dragdrop.hpp" #include "win32_dragdrop.hpp"
#include "win32_factory.hpp" #include "win32_factory.hpp"
...@@ -78,12 +79,11 @@ Win32Window::Win32Window( intf_thread_t *pIntf, GenericWindow &rWindow, ...@@ -78,12 +79,11 @@ Win32Window::Win32Window( intf_thread_t *pIntf, GenericWindow &rWindow,
// Register the window as a drop target // Register the window as a drop target
RegisterDragDrop( m_hWnd, m_pDropTarget ); RegisterDragDrop( m_hWnd, m_pDropTarget );
} }
// XXX: Kludge to tell VLC that this window is the vout
// XXX Set this window as the vout
if( pParentWindow ) if( pParentWindow )
{ {
vlc_value_t value; VlcProc::instance( getIntf() )->setVoutWindow( (void*)m_hWnd );
value.i_int = (int) (ptrdiff_t) (void *) m_hWnd;
var_Set( getIntf()->p_vlc, "drawable", value );
} }
} }
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include <X11/Xatom.h> #include <X11/Xatom.h>
#include "../src/generic_window.hpp" #include "../src/generic_window.hpp"
#include "../src/vlcproc.hpp"
#include "x11_window.hpp" #include "x11_window.hpp"
#include "x11_display.hpp" #include "x11_display.hpp"
#include "x11_graphics.hpp" #include "x11_graphics.hpp"
...@@ -108,24 +109,21 @@ X11Window::X11Window( intf_thread_t *pIntf, GenericWindow &rWindow, ...@@ -108,24 +109,21 @@ X11Window::X11Window( intf_thread_t *pIntf, GenericWindow &rWindow,
// Associate the window to the main "parent" window // Associate the window to the main "parent" window
XSetTransientForHint( XDISPLAY, m_wnd, m_rDisplay.getMainWindow() ); XSetTransientForHint( XDISPLAY, m_wnd, m_rDisplay.getMainWindow() );
// XXX Kludge to tell VLC that this window is the vout // XXX Set this window as the vout
if( m_pParent ) if( m_pParent )
{ {
vlc_value_t value; VlcProc::instance( getIntf() )->setVoutWindow( (void*)m_wnd );
value.i_int = (int) (ptrdiff_t) (void *) m_wnd;
var_Set( getIntf()->p_vlc, "drawable", value );
} }
} }
X11Window::~X11Window() X11Window::~X11Window()
{ {
// XXX Kludge to tell VLC that this window is no more the vout // XXX This window is no more the vout
if( m_pParent ) if( m_pParent )
{ {
vlc_value_t value; VlcProc::instance( getIntf() )->setVoutWindow( NULL );
value.i_int = 0;
var_Set( getIntf()->p_vlc, "drawable", value );
} }
X11Factory *pFactory = (X11Factory*)X11Factory::instance( getIntf() ); X11Factory *pFactory = (X11Factory*)X11Factory::instance( getIntf() );
......
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