* XPCOM implementation in mozilla plugin on MacOSX (Play, pause, stop

*  buttons. Fullscreen disabled ).
This commit is contained in:
Simon Latapie 2003-08-19 14:07:51 +00:00
parent 3d503fff25
commit 4edb3a5ffd
5 changed files with 39 additions and 4 deletions

View File

@ -2,7 +2,7 @@
* vout.h: MacOS X interface plugin
*****************************************************************************
* Copyright (C) 2001-2003 VideoLAN
* $Id: vout.h,v 1.12 2003/08/14 12:38:03 garf Exp $
* $Id: vout.h,v 1.13 2003/08/19 14:07:51 garf Exp $
*
* Authors: Colin Delacroix <colin@zoy.org>
* Florian G. Pflug <fgp@phlo.org>
@ -88,6 +88,7 @@ struct vout_sys_t
ImageDescriptionHandle h_img_descr;
Ptr p_fullscreen_state;
RgnHandle mask;
Rect rect;
int portx;
int porty;
int isplugin;

View File

@ -2,7 +2,7 @@
/* vout.m: MacOS X video output plugin
*****************************************************************************
* Copyright (C) 2001-2003 VideoLAN
* $Id: vout.m,v 1.51 2003/08/14 12:38:03 garf Exp $
* $Id: vout.m,v 1.52 2003/08/19 14:07:51 garf Exp $
*
* Authors: Colin Delacroix <colin@zoy.org>
* Florian G. Pflug <fgp@phlo.org>
@ -147,6 +147,11 @@ int E_(OpenVideo) ( vlc_object_t *p_this )
if( value_drawable.i_int != 0 )
{
p_vout->p_sys->mask = NewRgn();
p_vout->p_sys->rect.left = 0 ;
p_vout->p_sys->rect.right = 0 ;
p_vout->p_sys->rect.top = 0 ;
p_vout->p_sys->rect.bottom = 0 ;
p_vout->p_sys->isplugin = 1 ;
} else
@ -466,16 +471,23 @@ static void vout_Display( vout_thread_t *p_vout, picture_t *p_pic )
{
OSErr err;
CodecFlags flags;
Rect oldrect;
RgnHandle oldClip;
if( p_vout->p_sys->isplugin )
{
oldClip = NewRgn();
/* In mozilla plugin, mozilla browser also draws things in
* the windows. So we have to update the port/Origin for each
* picture. FIXME : the vout should lock something ! */
GetPort( &p_vout->p_sys->p_qdportold );
GetPortBounds( p_vout->p_sys->p_qdportold, &oldrect );
GetClip( oldClip );
SetPort( p_vout->p_sys->p_qdport );
SetOrigin( p_vout->p_sys->portx , p_vout->p_sys->porty );
ClipRect( &p_vout->p_sys->rect );
if( ( err = DecompressSequenceFrameS(
p_vout->p_sys->i_seq,
@ -490,6 +502,8 @@ static void vout_Display( vout_thread_t *p_vout, picture_t *p_pic )
QDFlushPortBuffer( p_vout->p_sys->p_qdport, nil );
}
SetOrigin( oldrect.left , oldrect.top );
SetClip( oldClip );
SetPort( p_vout->p_sys->p_qdportold );
}
else
@ -680,6 +694,10 @@ static void QTScaleMatrix( vout_thread_t *p_vout )
i_height = valh.i_int;
SetRectRgn( p_vout->p_sys->mask , 0 , 0 , valr.i_int - vall.i_int , valb.i_int - valt.i_int );
p_vout->p_sys->rect.top = 0;
p_vout->p_sys->rect.left = 0;
p_vout->p_sys->rect.bottom = valb.i_int - valt.i_int;
p_vout->p_sys->rect.right = valr.i_int - vall.i_int;
}
if( i_height * p_vout->output.i_aspect < i_width * VOUT_ASPECT_FACTOR )

View File

@ -386,6 +386,7 @@ void Private_Shutdown(void);
NPError Private_New(NPMIMEType pluginType, NPP instance, uint16 mode, int16 argc, char* argn[], char* argv[], NPSavedData* saved);
NPError Private_Destroy(NPP instance, NPSavedData** save);
NPError Private_SetWindow(NPP instance, NPWindow* window);
NPError Private_GetValue( NPP instance, NPPVariable variable, void *value );
NPError Private_NewStream(NPP instance, NPMIMEType type, NPStream* stream, NPBool seekable, uint16* stype);
NPError Private_DestroyStream(NPP instance, NPStream* stream, NPError reason);
int32 Private_WriteReady(NPP instance, NPStream* stream);
@ -450,6 +451,16 @@ NPError Private_SetWindow(NPP instance, NPWindow* window)
return err;
}
NPError Private_GetValue( NPP instance, NPPVariable variable, void *value )
{
NPError err;
EnterCodeResource();
PLUGINDEBUGSTR("\pGetValue;g;");
err = NPP_GetValue( instance, variable, value);
ExitCodeResource();
return err;
}
NPError Private_NewStream(NPP instance, NPMIMEType type, NPStream* stream, NPBool seekable, uint16* stype)
{
NPError err;
@ -746,6 +757,7 @@ DEFINE_API_C(NPError) main(NPNetscapeFuncs* nsTable, NPPluginFuncs* pluginFuncs,
pluginFuncs->write = NewNPP_WriteProc(PLUGIN_TO_HOST_GLUE(write, Private_Write));
pluginFuncs->print = NewNPP_PrintProc(PLUGIN_TO_HOST_GLUE(print, Private_Print));
pluginFuncs->event = NewNPP_HandleEventProc(PLUGIN_TO_HOST_GLUE(event, Private_HandleEvent));
pluginFuncs->getvalue = NewNPP_GetValueProc(PLUGIN_TO_HOST_GLUE(getvalue, Private_GetValue));
if( navMinorVers >= NPVERS_HAS_NOTIFICATION )
{
pluginFuncs->urlnotify = NewNPP_URLNotifyProc(PLUGIN_TO_HOST_GLUE(urlnotify, Private_URLNotify));

View File

@ -2,7 +2,7 @@
* vlcpeer.cpp: scriptable peer descriptor
*****************************************************************************
* Copyright (C) 2002 VideoLAN
* $Id: vlcpeer.cpp,v 1.6 2003/07/23 01:13:48 gbazin Exp $
* $Id: vlcpeer.cpp,v 1.7 2003/08/19 14:07:51 garf Exp $
*
* Authors: Samuel Hocevar <sam@zoy.org>
*
@ -104,7 +104,10 @@ NS_IMETHODIMP VlcPeer::Fullscreen()
{
if( p_plugin )
{
#ifdef XP_MACOSX
#else
VLC_FullScreen( p_plugin->i_vlc );
#endif
}
return NS_OK;
}

View File

@ -2,7 +2,7 @@
* vlcshell.cpp: a VLC plugin for Mozilla
*****************************************************************************
* Copyright (C) 2002 VideoLAN
* $Id: vlcshell.cpp,v 1.17 2003/08/14 13:32:12 garf Exp $
* $Id: vlcshell.cpp,v 1.18 2003/08/19 14:07:51 garf Exp $
*
* Authors: Samuel Hocevar <sam@zoy.org>
*
@ -130,6 +130,7 @@ char * NPP_GetMIMEDescription( void )
NPError NPP_GetValue( NPP instance, NPPVariable variable, void *value )
{
static nsIID nsid = VLCINTF_IID;
static char psz_desc[1000];