Commit 7ebdc0ca authored by Cyril Mathé's avatar Cyril Mathé Committed by Rémi Denis-Courmont

Moz-Plugin: Marquee JS Bindings

- video.marquee.enable()        : enable marquee filter
 - video.marquee.disable()       : disable marquee filter
 - video.marquee.text("my_text") : display my_text on screen
 - video.marquee.color(i_val)    : change text color
 - video.marquee.opacity(i_val)  : change text opacity
 - video.marquee.position(i_val) : change text position (center, left...)
 - video.marquee.refresh(i_val)  : change refresh time
 - video.marquee.size(i_val)     : change text size
 - video.marquee.timeout(i_val)  : change timeout
 - video.marquee.x(i_val)        : change abscissa position
 - video.marquee.y(i_val)        : change ordinate position
Signed-off-by: Jean-Baptiste Kempf's avatarJean-Baptiste Kempf <jb@videolan.org>
parent 5edc5e63
...@@ -1267,7 +1267,8 @@ const NPUTF8 * const LibvlcVideoNPObject::propertyNames[] = ...@@ -1267,7 +1267,8 @@ const NPUTF8 * const LibvlcVideoNPObject::propertyNames[] =
"aspectRatio", "aspectRatio",
"subtitle", "subtitle",
"crop", "crop",
"teletext" "teletext",
"marquee"
}; };
enum LibvlcVideoNPObjectPropertyIds enum LibvlcVideoNPObjectPropertyIds
...@@ -1278,7 +1279,8 @@ enum LibvlcVideoNPObjectPropertyIds ...@@ -1278,7 +1279,8 @@ enum LibvlcVideoNPObjectPropertyIds
ID_video_aspectratio, ID_video_aspectratio,
ID_video_subtitle, ID_video_subtitle,
ID_video_crop, ID_video_crop,
ID_video_teletext ID_video_teletext,
ID_video_marquee
}; };
COUNTNAMES(LibvlcVideoNPObject,propertyCount,propertyNames); COUNTNAMES(LibvlcVideoNPObject,propertyCount,propertyNames);
...@@ -1352,6 +1354,14 @@ LibvlcVideoNPObject::getProperty(int index, NPVariant &result) ...@@ -1352,6 +1354,14 @@ LibvlcVideoNPObject::getProperty(int index, NPVariant &result)
INT32_TO_NPVARIANT(i_page, result); INT32_TO_NPVARIANT(i_page, result);
return INVOKERESULT_NO_ERROR; return INVOKERESULT_NO_ERROR;
} }
case ID_video_marquee:
{
if( ! marqueeObj )
marqueeObj = NPN_CreateObject(_instance,
RuntimeNPClass<LibvlcMarqueeNPObject>::getClass());
OBJECT_TO_NPVARIANT(NPN_RetainObject(marqueeObj), result);
return INVOKERESULT_NO_ERROR;
}
} }
} }
return INVOKERESULT_GENERIC_ERROR; return INVOKERESULT_GENERIC_ERROR;
...@@ -1540,3 +1550,267 @@ LibvlcVideoNPObject::invoke(int index, const NPVariant *args, ...@@ -1540,3 +1550,267 @@ LibvlcVideoNPObject::invoke(int index, const NPVariant *args,
} }
return INVOKERESULT_GENERIC_ERROR; return INVOKERESULT_GENERIC_ERROR;
} }
/*
** implementation of libvlc marquee object
*/
const NPUTF8 * const LibvlcMarqueeNPObject::propertyNames[] =
{
};
enum LibvlcMarqueeNPObjectPropertyIds
{
};
COUNTNAMES(LibvlcMarqueeNPObject,propertyCount,propertyNames);
RuntimeNPObject::InvokeResult
LibvlcMarqueeNPObject::getProperty(int index, NPVariant &result)
{
/* is plugin still running */
if( isPluginRunning() )
{
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 )
{
}
}
return INVOKERESULT_GENERIC_ERROR;
}
RuntimeNPObject::InvokeResult
LibvlcMarqueeNPObject::setProperty(int index, const NPVariant &value)
{
/* is plugin still running */
if( isPluginRunning() )
{
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 )
{
}
}
return INVOKERESULT_GENERIC_ERROR;
}
const NPUTF8 * const LibvlcMarqueeNPObject::methodNames[] =
{
"enable",
"disable",
"color",
"opacity",
"position",
"refresh",
"size",
"text",
"timeout",
"x",
"y"
};
COUNTNAMES(LibvlcMarqueeNPObject,methodCount,methodNames);
enum LibvlcMarqueeNPObjectMethodIds
{
ID_marquee_enable,
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
LibvlcMarqueeNPObject::invoke(int index, const NPVariant *args,
uint32_t argCount, NPVariant &result)
{
/* is plugin still running */
if( isPluginRunning() )
{
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 )
{
case ID_marquee_enable:
{
libvlc_video_set_marquee_option_as_int(p_md, libvlc_marquee_Enabled, true, &ex);
RETURN_ON_EXCEPTION(this,ex);
return INVOKERESULT_NO_ERROR;
}
case ID_marquee_disable:
{
libvlc_video_set_marquee_option_as_int(p_md, libvlc_marquee_Enabled, false, &ex);
RETURN_ON_EXCEPTION(this,ex);
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;
}
...@@ -177,7 +177,8 @@ protected: ...@@ -177,7 +177,8 @@ protected:
friend class RuntimeNPClass<LibvlcVideoNPObject>; friend class RuntimeNPClass<LibvlcVideoNPObject>;
LibvlcVideoNPObject(NPP instance, const NPClass *aClass) : LibvlcVideoNPObject(NPP instance, const NPClass *aClass) :
RuntimeNPObject(instance, aClass) {}; RuntimeNPObject(instance, aClass),
marqueeObj(NULL) {};
virtual ~LibvlcVideoNPObject() {}; virtual ~LibvlcVideoNPObject() {};
static const int propertyCount; static const int propertyCount;
...@@ -189,5 +190,29 @@ protected: ...@@ -189,5 +190,29 @@ protected:
static const int methodCount; static const int methodCount;
static const NPUTF8 * const methodNames[]; static const NPUTF8 * const methodNames[];
InvokeResult invoke(int index, const NPVariant *args, uint32_t argCount, NPVariant &result);
private:
NPObject *marqueeObj;
};
class LibvlcMarqueeNPObject: public RuntimeNPObject
{
protected:
friend class RuntimeNPClass<LibvlcMarqueeNPObject>;
LibvlcMarqueeNPObject(NPP instance, const NPClass *aClass) :
RuntimeNPObject(instance, aClass) {};
virtual ~LibvlcMarqueeNPObject() {};
static const int propertyCount;
static const NPUTF8 * const propertyNames[];
InvokeResult getProperty(int index, NPVariant &result);
InvokeResult setProperty(int index, const NPVariant &value);
static const int methodCount;
static const NPUTF8 * const methodNames[];
InvokeResult invoke(int index, const NPVariant *args, uint32_t argCount, NPVariant &result); InvokeResult invoke(int index, const NPVariant *args, uint32_t argCount, NPVariant &result);
}; };
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