X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=projects%2Fmozilla%2Fvlcshell.cpp;h=829ae7a5da3de60cb804dcad00420dbf83defa36;hb=0b47b18cb742ffe0affa2baea50fcd52f36eb8e7;hp=abf61eb5a94e6009d4c6d8bc9f9cf208d4ba723d;hpb=cb41eae4aff1878338a2e3f86d7bce289aecf022;p=vlc diff --git a/projects/mozilla/vlcshell.cpp b/projects/mozilla/vlcshell.cpp index abf61eb5a9..829ae7a5da 100644 --- a/projects/mozilla/vlcshell.cpp +++ b/projects/mozilla/vlcshell.cpp @@ -31,27 +31,16 @@ #include #include -/* Mozilla stuff */ -#ifdef HAVE_MOZILLA_CONFIG_H -# include -#endif - -/* This is from mozilla java, do we really need it? */ -#if 0 -#include -#endif - #include "vlcplugin.h" +#include "vlcshell.h" /* Enable/disable debugging printf's for X11 resizing */ #undef X11_RESIZE_DEBUG -#define WINDOW_TEXT "Waiting for video" - /***************************************************************************** * Unix-only declarations ******************************************************************************/ -#ifdef XP_UNIX +#if defined(XP_UNIX) static void Redraw( Widget w, XtPointer closure, XEvent *event ); static void ControlHandler( Widget w, XtPointer closure, XEvent *event ); @@ -79,19 +68,20 @@ static LRESULT CALLBACK Manage( HWND p_hwnd, UINT i_msg, WPARAM wpar, LPARAM lpa *****************************************************************************/ char * NPP_GetMIMEDescription( void ) { - return PLUGIN_MIMETYPES; + static char mimetype[] = PLUGIN_MIMETYPES; + return mimetype; } NPError NPP_GetValue( NPP instance, NPPVariable variable, void *value ) { - + static char psz_name[] = PLUGIN_NAME; static char psz_desc[1000]; /* plugin class variables */ switch( variable ) { case NPPVpluginNameString: - *((char **)value) = PLUGIN_NAME; + *((char **)value) = psz_name; return NPERR_NO_ERROR; case NPPVpluginDescriptionString: @@ -115,7 +105,7 @@ NPError NPP_GetValue( NPP instance, NPPVariable variable, void *value ) VlcPlugin* p_plugin = reinterpret_cast(instance->pdata); if( NULL == p_plugin ) { - // plugin has not been initialized yet ! + /* plugin has not been initialized yet ! */ return NPERR_INVALID_INSTANCE_ERROR; } @@ -154,24 +144,21 @@ NPError NPP_SetValue( NPP instance, NPNVariable variable, void *value ) * Mac-only API calls *****************************************************************************/ #ifdef XP_MACOSX -int16 NPP_HandleEvent( NPP instance, void * event ) +int16_t NPP_HandleEvent( NPP instance, void * event ) { static UInt32 lastMouseUp = 0; - libvlc_exception_t ex; - libvlc_exception_init(&ex); - if( instance == NULL ) { return false; } - VlcPlugin *p_plugin = (VlcPlugin*)instance->pdata; - + VlcPlugin* p_plugin = reinterpret_cast(instance->pdata); if( p_plugin == NULL ) { return false; } +#ifndef __x86_64__ EventRecord *myEvent = (EventRecord*)event; switch( myEvent->what ) @@ -183,8 +170,7 @@ int16 NPP_HandleEvent( NPP instance, void * event ) if( (myEvent->when - lastMouseUp) < GetDblTime() ) { /* double click */ - p_plugin->toggle_fullscreen(&ex); - libvlc_exception_clear(&ex); + p_plugin->toggle_fullscreen(); } return true; } @@ -200,11 +186,12 @@ int16 NPP_HandleEvent( NPP instance, void * event ) const NPWindow& npwindow = p_plugin->getWindow(); if( npwindow.window ) { - int hasVout = FALSE; + bool hasVout = false; - if( p_plugin->playlist_isplaying(&ex) ) + if( p_plugin->playlist_isplaying() ) { - hasVout = p_plugin->player_has_vout(NULL); + hasVout = p_plugin->player_has_vout(); +#if 0 if( hasVout ) { libvlc_rectangle_t area; @@ -212,15 +199,16 @@ int16 NPP_HandleEvent( NPP instance, void * event ) area.top = 0; area.right = npwindow.width; area.bottom = npwindow.height; - libvlc_video_redraw_rectangle(p_plugin->getMD(&ex), &area, NULL); + libvlc_video_redraw_rectangle(p_plugin->getMD(), &area, NULL); } +#else +#warning disabled code +#endif } - libvlc_exception_clear(&ex); if( ! hasVout ) { - /* draw the beautiful "No Picture" */ - + /* draw the text from p_plugin->psz_text */ ForeColor(blackColor); PenMode( patCopy ); @@ -238,7 +226,8 @@ int16 NPP_HandleEvent( NPP instance, void * event ) ForeColor(whiteColor); MoveTo( (npwindow.width-80)/ 2 , npwindow.height / 2 ); - DrawText( WINDOW_TEXT , 0 , strlen(WINDOW_TEXT) ); + if( p_plugin->psz_text ) + DrawText( p_plugin->psz_text, 0, strlen(p_plugin->psz_text) ); } } return true; @@ -261,6 +250,7 @@ int16 NPP_HandleEvent( NPP instance, void * event ) default: ; } +#endif // __x86_64__ return false; } #endif /* XP_MACOSX */ @@ -273,17 +263,24 @@ NPError NPP_Initialize( void ) return NPERR_NO_ERROR; } +#ifdef OJI jref NPP_GetJavaClass( void ) { return NULL; } +#endif void NPP_Shutdown( void ) { ; } -NPError NPP_New( NPMIMEType pluginType, NPP instance, uint16 mode, int16 argc, +NPError NPP_New( NPMIMEType pluginType, NPP instance, +#if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20) + uint16 mode, int16 argc, +#else + uint16_t mode, int16_t argc, +#endif char* argn[], char* argv[], NPSavedData* saved ) { NPError status; @@ -326,7 +323,7 @@ NPError NPP_Destroy( NPP instance, NPSavedData** save ) instance->pdata = NULL; -#if XP_WIN +#if defined(XP_WIN) HWND win = (HWND)p_plugin->getWindow().window; WNDPROC winproc = p_plugin->getWindowProc(); if( winproc ) @@ -336,6 +333,9 @@ NPError NPP_Destroy( NPP instance, NPSavedData** save ) } #endif + if( p_plugin->playlist_isplaying() ) + p_plugin->playlist_stop(); + delete p_plugin; return NPERR_NO_ERROR; @@ -343,7 +343,7 @@ NPError NPP_Destroy( NPP instance, NPSavedData** save ) NPError NPP_SetWindow( NPP instance, NPWindow* window ) { -#if defined(XP_UNIX) && !defined(__APPLE__) +#if defined(XP_UNIX) Window control; unsigned int i_control_height = 0, i_control_width = 0; #endif @@ -360,9 +360,11 @@ NPError NPP_SetWindow( NPP instance, NPWindow* window ) /* we should probably show a splash screen here */ return NPERR_NO_ERROR; } -#if defined(XP_UNIX) && !defined(__APPLE__) + +#if defined(XP_UNIX) control = p_plugin->getControlWindow(); #endif + libvlc_instance_t *p_vlc = p_plugin->getVLC(); /* @@ -381,11 +383,6 @@ NPError NPP_SetWindow( NPP instance, NPWindow* window ) { /* check if plugin has a new parent window */ CGrafPtr drawable = (((NP_Port*) (window->window))->port); - if( !curwin.window || drawable != (((NP_Port*) (curwin.window))->port) ) - { - /* set/change parent window */ - libvlc_video_set_parent(p_vlc, (libvlc_drawable_t)drawable, NULL); - } /* as MacOS X video output is windowless, set viewport */ libvlc_rectangle_t view, clip; @@ -399,21 +396,23 @@ NPError NPP_SetWindow( NPP instance, NPWindow* window ) view.left = ((NP_Port*) (window->window))->portx; view.bottom = window->height+view.top; view.right = window->width+view.left; + /* clipRect coordinates are also relative to GrafPort */ clip.top = window->clipRect.top; clip.left = window->clipRect.left; clip.bottom = window->clipRect.bottom; clip.right = window->clipRect.right; - - libvlc_video_set_viewport(p_vlc, &view, &clip, NULL); - +#ifdef NOT_WORKING + libvlc_video_set_viewport(p_vlc, p_plugin->getMD(), &view, &clip); +#else +#warning disabled code +#endif /* remember new window */ p_plugin->setWindow(*window); } else if( curwin.window ) { /* change/set parent */ - libvlc_video_set_parent(p_vlc, 0, NULL); curwin.window = NULL; } #endif /* XP_MACOSX */ @@ -446,9 +445,6 @@ NPError NPP_SetWindow( NPP instance, NPWindow* window ) style |= WS_CLIPCHILDREN|WS_CLIPSIBLINGS; SetWindowLong((HWND)drawable, GWL_STYLE, style); - /* change/set parent */ - libvlc_video_set_parent(p_vlc, (libvlc_drawable_t)drawable, NULL); - /* remember new window */ p_plugin->setWindow(*window); @@ -457,19 +453,18 @@ NPError NPP_SetWindow( NPP instance, NPWindow* window ) UpdateWindow( (HWND)drawable ); } } - else if ( curwin.window ) + else if( curwin.window ) { /* reset WNDPROC */ HWND oldwin = (HWND)curwin.window; SetWindowLong( oldwin, GWL_WNDPROC, (LONG)(p_plugin->getWindowProc()) ); p_plugin->setWindowProc(NULL); - /* change/set parent */ - libvlc_video_set_parent(p_vlc, 0, NULL); + curwin.window = NULL; } #endif /* XP_WIN */ -#ifdef XP_UNIX +#if defined(XP_UNIX) /* default to hidden toolbar, shown at the end of this method if asked * * developers note : getToolbarSize need to wait the end of this method */ @@ -514,25 +509,14 @@ NPError NPP_SetWindow( NPP instance, NPWindow* window ) XtAddEventHandler( w, ButtonReleaseMask, FALSE, (XtEventHandler)ControlHandler, p_plugin ); - /* callback */ -/* - libvlc_media_player_t *p_md; - - libvlc_exception_t ex; - libvlc_exception_init(& ex ); - p_md = p_plugin->getMD( &ex ); - libvlc_exception_clear( &ex ); - libvlc_event_attach( libvlc_media_player_event_manager( p_md, &ex ), - libvlc_MediaPlayerPositionChanged, Redraw, NULL, &ex ); -*/ - - /* set/change parent window */ - libvlc_video_set_parent( p_vlc, (libvlc_drawable_t) video, NULL ); - /* remember window */ p_plugin->setWindow( *window ); p_plugin->setVideoWindow( video ); - if( controls ) { p_plugin->setControlWindow( controls ); } + + if( controls ) + { + p_plugin->setControlWindow( controls ); + } Redraw( w, (XtPointer)p_plugin, NULL ); @@ -543,10 +527,8 @@ NPError NPP_SetWindow( NPP instance, NPWindow* window ) } } } - else if ( curwin.window ) + else if( curwin.window ) { - /* change/set parent */ - libvlc_video_set_parent(p_vlc, 0, NULL); curwin.window = NULL; } #endif /* XP_UNIX */ @@ -555,11 +537,11 @@ NPError NPP_SetWindow( NPP instance, NPWindow* window ) { if( p_plugin->psz_target ) { - if( p_plugin->playlist_add( p_plugin->psz_target, NULL ) != -1 ) + if( p_plugin->playlist_add( p_plugin->psz_target ) != -1 ) { if( p_plugin->b_autoplay ) { - p_plugin->playlist_play(NULL); + p_plugin->playlist_play(); } } p_plugin->b_stream = true; @@ -569,7 +551,11 @@ NPError NPP_SetWindow( NPP instance, NPWindow* window ) } NPError NPP_NewStream( NPP instance, NPMIMEType type, NPStream *stream, +#if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20) NPBool seekable, uint16 *stype ) +#else + NPBool seekable, uint16_t *stype ) +#endif { if( NULL == instance ) { @@ -598,21 +584,28 @@ NPError NPP_NewStream( NPP instance, NPMIMEType type, NPStream *stream, return NPERR_GENERIC_ERROR; } +#if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20) int32 NPP_WriteReady( NPP instance, NPStream *stream ) +#else +int32_t NPP_WriteReady( NPP instance, NPStream *stream ) +#endif { /* TODO */ return 8*1024; } - +#if (((NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR) < 20) int32 NPP_Write( NPP instance, NPStream *stream, int32 offset, int32 len, void *buffer ) +#else +int32_t NPP_Write( NPP instance, NPStream *stream, int32_t offset, + int32_t len, void *buffer ) +#endif { /* TODO */ return len; } - NPError NPP_DestroyStream( NPP instance, NPStream *stream, NPError reason ) { if( instance == NULL ) @@ -622,7 +615,6 @@ NPError NPP_DestroyStream( NPP instance, NPStream *stream, NPError reason ) return NPERR_NO_ERROR; } - void NPP_StreamAsFile( NPP instance, NPStream *stream, const char* fname ) { if( instance == NULL ) @@ -636,16 +628,15 @@ void NPP_StreamAsFile( NPP instance, NPStream *stream, const char* fname ) return; } - if( p_plugin->playlist_add( stream->url, NULL ) != -1 ) + if( p_plugin->playlist_add( stream->url ) != -1 ) { if( p_plugin->b_autoplay ) { - p_plugin->playlist_play(NULL); + p_plugin->playlist_play(); } } } - void NPP_URLNotify( NPP instance, const char* url, NPReason reason, void* notifyData ) { @@ -726,7 +717,7 @@ void NPP_Print( NPP instance, NPPrint* printInfo ) /****************************************************************************** * Windows-only methods *****************************************************************************/ -#if XP_WIN +#if defined(XP_WIN) static LRESULT CALLBACK Manage( HWND p_hwnd, UINT i_msg, WPARAM wpar, LPARAM lpar ) { VlcPlugin* p_plugin = reinterpret_cast(GetWindowLongPtr(p_hwnd, GWLP_USERDATA)); @@ -749,8 +740,9 @@ static LRESULT CALLBACK Manage( HWND p_hwnd, UINT i_msg, WPARAM wpar, LPARAM lpa FillRect( hdc, &rect, (HBRUSH)GetStockObject(BLACK_BRUSH) ); SetTextColor(hdc, RGB(255, 255, 255)); SetBkColor(hdc, RGB(0, 0, 0)); - DrawText( hdc, WINDOW_TEXT, strlen(WINDOW_TEXT), &rect, - DT_CENTER|DT_VCENTER|DT_SINGLELINE); + if( p_plugin->psz_text ) + DrawText( hdc, p_plugin->psz_text, strlen(p_plugin->psz_text), &rect, + DT_CENTER|DT_VCENTER|DT_SINGLELINE); EndPaint( p_hwnd, &paintstruct ); return 0L; @@ -766,7 +758,7 @@ static LRESULT CALLBACK Manage( HWND p_hwnd, UINT i_msg, WPARAM wpar, LPARAM lpa /****************************************************************************** * UNIX-only methods *****************************************************************************/ -#ifdef XP_UNIX +#if defined(XP_UNIX) static void Redraw( Widget w, XtPointer closure, XEvent *event ) { VlcPlugin* p_plugin = reinterpret_cast(closure); @@ -793,9 +785,10 @@ static void Redraw( Widget w, XtPointer closure, XEvent *event ) gcv.foreground = WhitePixel( p_display, 0 ); XChangeGC( p_display, gc, GCForeground, &gcv ); - XDrawString( p_display, video, gc, - window.width / 2 - 40, (window.height - i_control_height) / 2, - WINDOW_TEXT, strlen(WINDOW_TEXT) ); + if( p_plugin->psz_text ) + XDrawString( p_display, video, gc, + window.width / 2 - 40, (window.height - i_control_height) / 2, + p_plugin->psz_text, strlen(p_plugin->psz_text) ); XFreeGC( p_display, gc ); p_plugin->redrawToolbar(); @@ -814,18 +807,10 @@ static void ControlHandler( Widget w, XtPointer closure, XEvent *event ) if( p_plugin && p_plugin->b_toolbar ) { int i_playing; - libvlc_exception_t ex; - libvlc_exception_init( &ex ); - libvlc_media_player_t *p_md = p_plugin->getMD(&ex); - if( libvlc_exception_raised(&ex) ) - fprintf( stderr, "%s\n", libvlc_exception_get_message(&ex)); - libvlc_exception_clear( &ex ); + libvlc_media_player_t *p_md = p_plugin->getMD(); - i_playing = p_plugin->playlist_isplaying( &ex ); - if( libvlc_exception_raised(&ex) ) - fprintf( stderr, "%s\n", libvlc_exception_get_message(&ex)); - libvlc_exception_clear( &ex ); + i_playing = p_plugin->playlist_isplaying(); vlc_toolbar_clicked_t clicked; clicked = p_plugin->getToolbarButtonClicked( i_xPos, i_yPos ); @@ -835,41 +820,29 @@ static void ControlHandler( Widget w, XtPointer closure, XEvent *event ) case clicked_Pause: { if( i_playing == 1 ) - p_plugin->playlist_pause( &ex ); + p_plugin->playlist_pause(); else - p_plugin->playlist_play( &ex ); - - if( libvlc_exception_raised(&ex) ) - fprintf( stderr, "%s\n", libvlc_exception_get_message(&ex)); - libvlc_exception_clear( &ex ); + p_plugin->playlist_play(); } break; case clicked_Stop: { - p_plugin->playlist_stop(&ex); - if( libvlc_exception_raised(&ex) ) - fprintf( stderr, "%s\n", libvlc_exception_get_message(&ex)); - libvlc_exception_clear( &ex ); + p_plugin->playlist_stop(); } break; case clicked_Fullscreen: { - p_plugin->set_fullscreen( 1, &ex ); - if( libvlc_exception_raised(&ex) ) - fprintf( stderr, "%s\n", libvlc_exception_get_message(&ex)); - libvlc_exception_clear( &ex ); + p_plugin->set_fullscreen( 1 ); } break; case clicked_Mute: case clicked_Unmute: { - libvlc_audio_toggle_mute( p_plugin->getVLC(), &ex ); - if( libvlc_exception_raised(&ex) ) - fprintf( stderr, "%s\n", libvlc_exception_get_message(&ex)); - libvlc_exception_clear( &ex ); + if( p_md ) + libvlc_audio_toggle_mute( p_md ); } break; @@ -879,16 +852,12 @@ static void ControlHandler( Widget w, XtPointer closure, XEvent *event ) if( p_md ) { int64_t f_length; - f_length = libvlc_media_player_get_length( p_md, &ex ) / 100; - libvlc_exception_clear( &ex ); + f_length = libvlc_media_player_get_length( p_md ) / 100; f_length = (float)f_length * ( ((float)i_xPos-4.0 ) / ( ((float)i_width-8.0)/100) ); - libvlc_media_player_set_time( p_md, f_length, &ex ); - if( libvlc_exception_raised(&ex) ) - fprintf( stderr, "%s\n", libvlc_exception_get_message(&ex)); - libvlc_exception_clear( &ex ); + libvlc_media_player_set_time( p_md, f_length ); } } break;