Commit c34b5ca5 authored by JP Dinger's avatar JP Dinger

mozilla plugin: Bring marquee interface in line with logo.

parent 2f05ac6c
...@@ -36,6 +36,8 @@ ...@@ -36,6 +36,8 @@
#include "vlcplugin.h" #include "vlcplugin.h"
#include "npolibvlc.h" #include "npolibvlc.h"
#include "position.h"
/* /*
** Local helper macros and function ** Local helper macros and function
*/ */
...@@ -1562,29 +1564,90 @@ LibvlcVideoNPObject::invoke(int index, const NPVariant *args, ...@@ -1562,29 +1564,90 @@ LibvlcVideoNPObject::invoke(int index, const NPVariant *args,
const NPUTF8 * const LibvlcMarqueeNPObject::propertyNames[] = const NPUTF8 * const LibvlcMarqueeNPObject::propertyNames[] =
{ {
"color",
"opacity",
"position",
"refresh",
"size",
"text",
"timeout",
"x",
"y",
}; };
enum LibvlcMarqueeNPObjectPropertyIds enum LibvlcMarqueeNPObjectPropertyIds
{ {
ID_marquee_color,
ID_marquee_opacity,
ID_marquee_position,
ID_marquee_refresh,
ID_marquee_size,
ID_marquee_text,
ID_marquee_timeout,
ID_marquee_x,
ID_marquee_y,
}; };
COUNTNAMES(LibvlcMarqueeNPObject,propertyCount,propertyNames); COUNTNAMES(LibvlcMarqueeNPObject,propertyCount,propertyNames);
static const unsigned char marquee_idx[] = {
libvlc_marquee_Color,
libvlc_marquee_Opacity,
libvlc_marquee_Position,
libvlc_marquee_Refresh,
libvlc_marquee_Size,
0,
libvlc_marquee_Timeout,
libvlc_marquee_X,
libvlc_marquee_Y,
};
RuntimeNPObject::InvokeResult RuntimeNPObject::InvokeResult
LibvlcMarqueeNPObject::getProperty(int index, NPVariant &result) LibvlcMarqueeNPObject::getProperty(int index, NPVariant &result)
{ {
/* is plugin still running */ char *psz;
if( isPluginRunning() )
if( !isPluginRunning() )
return INVOKERESULT_GENERIC_ERROR;
VlcPlugin* p_plugin = getPrivate<VlcPlugin>();
libvlc_exception_t ex;
libvlc_exception_init(&ex);
libvlc_media_player_t *p_md = p_plugin->getMD(&ex);
RETURN_ON_EXCEPTION(this,ex);
switch( index )
{ {
VlcPlugin* p_plugin = getPrivate<VlcPlugin>(); case ID_marquee_color:
libvlc_exception_t ex; case ID_marquee_opacity:
libvlc_exception_init(&ex); case ID_marquee_refresh:
case ID_marquee_timeout:
case ID_marquee_size:
case ID_marquee_x:
case ID_marquee_y:
INT32_TO_NPVARIANT(
libvlc_video_get_marquee_int(p_md, marquee_idx[index], &ex),
result );
RETURN_ON_EXCEPTION(this,ex);
return INVOKERESULT_NO_ERROR;
case ID_marquee_position:
STRINGZ_TO_NPVARIANT( position_bynumber(
libvlc_video_get_marquee_int(p_md, libvlc_marquee_Position, &ex) ),
result );
libvlc_media_player_t *p_md = p_plugin->getMD(&ex);
RETURN_ON_EXCEPTION(this,ex); RETURN_ON_EXCEPTION(this,ex);
break;
switch( index ) case ID_marquee_text:
psz = libvlc_video_get_marquee_string(p_md, libvlc_marquee_Text, &ex);
if( psz )
{ {
STRINGZ_TO_NPVARIANT(psz, result);
return INVOKERESULT_NO_ERROR;
} }
break;
} }
return INVOKERESULT_GENERIC_ERROR; return INVOKERESULT_GENERIC_ERROR;
} }
...@@ -1592,36 +1655,62 @@ LibvlcMarqueeNPObject::getProperty(int index, NPVariant &result) ...@@ -1592,36 +1655,62 @@ LibvlcMarqueeNPObject::getProperty(int index, NPVariant &result)
RuntimeNPObject::InvokeResult RuntimeNPObject::InvokeResult
LibvlcMarqueeNPObject::setProperty(int index, const NPVariant &value) LibvlcMarqueeNPObject::setProperty(int index, const NPVariant &value)
{ {
/* is plugin still running */ size_t i;
if( isPluginRunning() )
if( !isPluginRunning() )
return INVOKERESULT_GENERIC_ERROR;
VlcPlugin* p_plugin = getPrivate<VlcPlugin>();
libvlc_exception_t ex;
libvlc_exception_init(&ex);
libvlc_media_player_t *p_md = p_plugin->getMD(&ex);
RETURN_ON_EXCEPTION(this,ex);
switch( index )
{ {
VlcPlugin* p_plugin = getPrivate<VlcPlugin>(); case ID_marquee_color:
libvlc_exception_t ex; case ID_marquee_opacity:
libvlc_exception_init(&ex); case ID_marquee_refresh:
case ID_marquee_timeout:
case ID_marquee_x:
case ID_marquee_y:
if( NPVARIANT_IS_INT32( value ) )
{
libvlc_video_set_marquee_int(p_md, marquee_idx[index],
NPVARIANT_TO_INT32( value ), &ex);
RETURN_ON_EXCEPTION(this,ex);
return INVOKERESULT_NO_ERROR;
}
break;
libvlc_media_player_t *p_md = p_plugin->getMD(&ex); case ID_marquee_position:
if( !NPVARIANT_IS_STRING(value) ||
!position_byname( NPVARIANT_TO_STRING(value).utf8characters, i ) )
return INVOKERESULT_INVALID_VALUE;
libvlc_video_set_marquee_int(p_md, libvlc_marquee_Position, i, &ex);
RETURN_ON_EXCEPTION(this,ex); RETURN_ON_EXCEPTION(this,ex);
return INVOKERESULT_NO_ERROR;
switch( index ) case ID_marquee_text:
if( NPVARIANT_IS_STRING( value ) )
{ {
char *psz_text = stringValue( NPVARIANT_TO_STRING( value ) );
libvlc_video_set_marquee_string(p_md, libvlc_marquee_Text,
psz_text, &ex);
free(psz_text);
RETURN_ON_EXCEPTION(this,ex);
return INVOKERESULT_NO_ERROR;
} }
break;
} }
return INVOKERESULT_GENERIC_ERROR; return INVOKERESULT_NO_SUCH_METHOD;
} }
const NPUTF8 * const LibvlcMarqueeNPObject::methodNames[] = const NPUTF8 * const LibvlcMarqueeNPObject::methodNames[] =
{ {
"enable", "enable",
"disable", "disable",
"color",
"opacity",
"position",
"refresh",
"size",
"text",
"timeout",
"x",
"y"
}; };
COUNTNAMES(LibvlcMarqueeNPObject,methodCount,methodNames); COUNTNAMES(LibvlcMarqueeNPObject,methodCount,methodNames);
...@@ -1629,195 +1718,33 @@ enum LibvlcMarqueeNPObjectMethodIds ...@@ -1629,195 +1718,33 @@ enum LibvlcMarqueeNPObjectMethodIds
{ {
ID_marquee_enable, ID_marquee_enable,
ID_marquee_disable, ID_marquee_disable,
ID_marquee_color,
ID_marquee_opacity,
ID_marquee_position,
ID_marquee_refresh,
ID_marquee_size,
ID_marquee_text,
ID_marquee_timeout,
ID_marquee_x,
ID_marquee_y
}; };
RuntimeNPObject::InvokeResult RuntimeNPObject::InvokeResult
LibvlcMarqueeNPObject::invoke(int index, const NPVariant *args, LibvlcMarqueeNPObject::invoke(int index, const NPVariant *args,
uint32_t argCount, NPVariant &result) uint32_t argCount, NPVariant &result)
{ {
/* is plugin still running */ if( !isPluginRunning() )
if( isPluginRunning() ) return INVOKERESULT_GENERIC_ERROR;
{
VlcPlugin* p_plugin = getPrivate<VlcPlugin>();
libvlc_exception_t ex;
libvlc_exception_init(&ex);
libvlc_media_player_t *p_md = p_plugin->getMD(&ex); VlcPlugin* p_plugin = getPrivate<VlcPlugin>();
RETURN_ON_EXCEPTION(this,ex); libvlc_exception_t ex;
libvlc_exception_init(&ex);
switch( index ) libvlc_media_player_t *p_md = p_plugin->getMD(&ex);
{ RETURN_ON_EXCEPTION(this,ex);
case ID_marquee_enable:
{ switch( index )
libvlc_video_set_marquee_option_as_int(p_md, libvlc_marquee_Enabled, true, &ex); {
RETURN_ON_EXCEPTION(this,ex); case ID_marquee_enable:
return INVOKERESULT_NO_ERROR; case ID_marquee_disable:
} libvlc_video_set_marquee_int(p_md, libvlc_marquee_Enable,
case ID_marquee_disable: index!=ID_marquee_disable, &ex);
{ RETURN_ON_EXCEPTION(this,ex);
libvlc_video_set_marquee_option_as_int(p_md, libvlc_marquee_Enabled, false, &ex); VOID_TO_NPVARIANT(result);
RETURN_ON_EXCEPTION(this,ex); return INVOKERESULT_NO_ERROR;
return INVOKERESULT_NO_ERROR;
}
case ID_marquee_color:
{
if( argCount == 1)
{
if( NPVARIANT_IS_INT32( args[0] ) )
{
int i_color = NPVARIANT_TO_INT32( args[0] );
libvlc_video_set_marquee_option_as_int(p_md, libvlc_marquee_Color, i_color, &ex);
RETURN_ON_EXCEPTION(this,ex);
return INVOKERESULT_NO_ERROR;
}
else
return INVOKERESULT_GENERIC_ERROR;
}
return INVOKERESULT_NO_SUCH_METHOD;
}
case ID_marquee_opacity:
{
if( argCount == 1)
{
if( NPVARIANT_IS_INT32( args[0] ) )
{
int i_opacity = NPVARIANT_TO_INT32( args[0] );
libvlc_video_set_marquee_option_as_int(p_md, libvlc_marquee_Opacity, i_opacity, &ex);
RETURN_ON_EXCEPTION(this,ex);
return INVOKERESULT_NO_ERROR;
}
else
return INVOKERESULT_GENERIC_ERROR;
}
return INVOKERESULT_NO_SUCH_METHOD;
}
case ID_marquee_position:
{
if( argCount == 1)
{
if( NPVARIANT_IS_INT32( args[0] ) )
{
int i_position = NPVARIANT_TO_INT32( args[0] );
libvlc_video_set_marquee_option_as_int(p_md, libvlc_marquee_Position, i_position, &ex);
RETURN_ON_EXCEPTION(this,ex);
return INVOKERESULT_NO_ERROR;
}
else
return INVOKERESULT_GENERIC_ERROR;
}
return INVOKERESULT_NO_SUCH_METHOD;
}
case ID_marquee_refresh:
{
if( argCount == 1)
{
if( NPVARIANT_IS_INT32( args[0] ) )
{
int i_refresh = NPVARIANT_TO_INT32( args[0] );
libvlc_video_set_marquee_option_as_int(p_md, libvlc_marquee_Refresh, i_refresh, &ex);
RETURN_ON_EXCEPTION(this,ex);
return INVOKERESULT_NO_ERROR;
}
else
return INVOKERESULT_GENERIC_ERROR;
}
return INVOKERESULT_NO_SUCH_METHOD;
}
case ID_marquee_size:
{
if( argCount == 1)
{
if( NPVARIANT_IS_INT32( args[0] ) )
{
int i_size = NPVARIANT_TO_INT32( args[0] );
libvlc_video_set_marquee_option_as_int(p_md, libvlc_marquee_Size, i_size, &ex);
RETURN_ON_EXCEPTION(this,ex);
return INVOKERESULT_NO_ERROR;
}
else
return INVOKERESULT_GENERIC_ERROR;
}
return INVOKERESULT_NO_SUCH_METHOD;
}
case ID_marquee_text:
{
if( argCount == 1)
{
if( NPVARIANT_IS_STRING( args[0] ) )
{
char *psz_text = stringValue( NPVARIANT_TO_STRING( args[0] ) );
libvlc_video_set_marquee_option_as_string(p_md, libvlc_marquee_Text, psz_text, &ex);
RETURN_ON_EXCEPTION(this,ex);
free(psz_text);
return INVOKERESULT_NO_ERROR;
}
else
return INVOKERESULT_GENERIC_ERROR;
}
return INVOKERESULT_NO_SUCH_METHOD;
}
case ID_marquee_timeout:
{
if( argCount == 1)
{
if( NPVARIANT_IS_INT32( args[0] ) )
{
int i_timeout = NPVARIANT_TO_INT32( args[0] );
libvlc_video_set_marquee_option_as_int(p_md, libvlc_marquee_Timeout, i_timeout, &ex);
RETURN_ON_EXCEPTION(this,ex);
return INVOKERESULT_NO_ERROR;
}
else
return INVOKERESULT_GENERIC_ERROR;
}
return INVOKERESULT_NO_SUCH_METHOD;
}
case ID_marquee_x:
{
if( argCount == 1)
{
if( NPVARIANT_IS_INT32( args[0] ) )
{
int i_x = NPVARIANT_TO_INT32( args[0] );
libvlc_video_set_marquee_option_as_int(p_md, libvlc_marquee_X, i_x, &ex);
RETURN_ON_EXCEPTION(this,ex);
return INVOKERESULT_NO_ERROR;
}
else
return INVOKERESULT_GENERIC_ERROR;
}
return INVOKERESULT_NO_SUCH_METHOD;
}
case ID_marquee_y:
{
if( argCount == 1)
{
if( NPVARIANT_IS_INT32( args[0] ) )
{
int i_y = NPVARIANT_TO_INT32( args[0] );
libvlc_video_set_marquee_option_as_int(p_md, libvlc_marquee_Y, i_y, &ex);
RETURN_ON_EXCEPTION(this,ex);
return INVOKERESULT_NO_ERROR;
}
else
return INVOKERESULT_GENERIC_ERROR;
}
return INVOKERESULT_NO_SUCH_METHOD;
}
default:
return INVOKERESULT_NO_SUCH_METHOD;
}
} }
return INVOKERESULT_GENERIC_ERROR; return INVOKERESULT_NO_SUCH_METHOD;
} }
const NPUTF8 * const LibvlcLogoNPObject::propertyNames[] = { const NPUTF8 * const LibvlcLogoNPObject::propertyNames[] = {
...@@ -1846,36 +1773,6 @@ static const unsigned char logo_idx[] = { ...@@ -1846,36 +1773,6 @@ static const unsigned char logo_idx[] = {
libvlc_logo_y, libvlc_logo_y,
}; };
struct posidx_s { const char *n; size_t i; };
static const posidx_s posidx[] = {
{ "center", 0 },
{ "left", 1 },
{ "right", 2 },
{ "top", 4 },
{ "bottom", 8 },
{ "top-left", 5 },
{ "top-right", 6 },
{ "bottom-left", 9 },
{ "bottom-right", 10 },
};
enum { num_posidx = sizeof(posidx)/sizeof(*posidx) };
static inline const char *logo_numtopos( size_t i )
{
for( const posidx_s *h=posidx; h<posidx+num_posidx; ++h )
if( h->i == i )
return h->n;
return "undefined";
}
static inline bool logo_postonum( const char *n, size_t &i )
{
for( const posidx_s *h=posidx; h<posidx+num_posidx; ++h )
if( !strcasecmp( n, h->n ) )
{ i=h->i; return true; }
return false;
}
RuntimeNPObject::InvokeResult RuntimeNPObject::InvokeResult
LibvlcLogoNPObject::getProperty(int index, NPVariant &result) LibvlcLogoNPObject::getProperty(int index, NPVariant &result)
{ {
...@@ -1903,7 +1800,7 @@ LibvlcLogoNPObject::getProperty(int index, NPVariant &result) ...@@ -1903,7 +1800,7 @@ LibvlcLogoNPObject::getProperty(int index, NPVariant &result)
break; break;
case ID_logo_position: case ID_logo_position:
STRINGZ_TO_NPVARIANT( logo_numtopos( STRINGZ_TO_NPVARIANT( position_bynumber(
libvlc_video_get_logo_int(p_md, libvlc_logo_position, &ex) ), libvlc_video_get_logo_int(p_md, libvlc_logo_position, &ex) ),
result ); result );
...@@ -1948,7 +1845,7 @@ LibvlcLogoNPObject::setProperty(int index, const NPVariant &value) ...@@ -1948,7 +1845,7 @@ LibvlcLogoNPObject::setProperty(int index, const NPVariant &value)
case ID_logo_position: case ID_logo_position:
if( !NPVARIANT_IS_STRING(value) || if( !NPVARIANT_IS_STRING(value) ||
!logo_postonum( NPVARIANT_TO_STRING(value).utf8characters, i ) ) !position_byname( NPVARIANT_TO_STRING(value).utf8characters, i ) )
return INVOKERESULT_INVALID_VALUE; return INVOKERESULT_INVALID_VALUE;
libvlc_video_set_logo_int(p_md, libvlc_logo_position, i, &ex); libvlc_video_set_logo_int(p_md, libvlc_logo_position, i, &ex);
......
/*****************************************************************************
* position.h: Support routines for logo and marquee plugin objects
*****************************************************************************
* Copyright (C) 2010 M2X BV
*
* Authors: JP Dinger <jpd (at) videolan (dot) org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#ifndef POSITION_H
#define POSITION_H
struct posidx_s { const char *n; size_t i; };
static const posidx_s posidx[] = {
{ "center", 0 },
{ "left", 1 },
{ "right", 2 },
{ "top", 4 },
{ "bottom", 8 },
{ "top-left", 5 },
{ "top-right", 6 },
{ "bottom-left", 9 },
{ "bottom-right", 10 },
};
enum { num_posidx = sizeof(posidx)/sizeof(*posidx) };
static inline const char *position_bynumber( size_t i )
{
for( const posidx_s *h=posidx; h<posidx+num_posidx; ++h )
if( h->i == i )
return h->n;
return "undefined";
}
static inline bool position_byname( const char *n, size_t &i )
{
for( const posidx_s *h=posidx; h<posidx+num_posidx; ++h )
if( !strcasecmp( n, h->n ) )
{ i=h->i; return true; }
return false;
}
#endif
...@@ -761,23 +761,23 @@ function doMarqueeOption(option, value) ...@@ -761,23 +761,23 @@ function doMarqueeOption(option, value)
if( vlc ) if( vlc )
{ {
if (option == 1) if (option == 1)
vlc.video.marquee.color(val); vlc.video.marquee.color = val;
if (option == 2) if (option == 2)
vlc.video.marquee.opacity(val); vlc.video.marquee.opacity = val;
if (option == 3) if (option == 3)
vlc.video.marquee.position(val); vlc.video.marquee.position = value;
if (option == 4) if (option == 4)
vlc.video.marquee.refresh(val); vlc.video.marquee.refresh = val;
if (option == 5) if (option == 5)
vlc.video.marquee.size(val); vlc.video.marquee.size = val;
if (option == 6) if (option == 6)
vlc.video.marquee.text(value); vlc.video.marquee.text = value;
if (option == 7) if (option == 7)
vlc.video.marquee.timeout(val); vlc.video.marquee.timeout = val;
if (option == 8) if (option == 8)
vlc.video.marquee.x(val); vlc.video.marquee.x = val;
if (option == 9) if (option == 9)
vlc.video.marquee.y(val); vlc.video.marquee.y = val;
} }
} }
......
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