[vlc-commits] npmac: set drawing model depending on run mode
Felix Paul Kühne
git at videolan.org
Tue Jan 1 12:42:40 CET 2013
npapi-vlc | branch: master | Felix Paul Kühne <fkuehne at videolan.org> | Tue Jan 1 12:41:54 2013 +0100| [e715626e13468a3042ab5268c8fc57d38f5f86cb] | committer: Felix Paul Kühne
npmac: set drawing model depending on run mode
For Windowless, use CoreGraphics. For Windowed, use (Invaldating)CoreAnimation instead.
> http://git.videolan.org/gitweb.cgi/npapi-vlc.git/?a=commit;h=e715626e13468a3042ab5268c8fc57d38f5f86cb
---
npapi/support/npmac.cpp | 74 ++++++++++++++++++++++++++++++++++++++---------
1 file changed, 60 insertions(+), 14 deletions(-)
diff --git a/npapi/support/npmac.cpp b/npapi/support/npmac.cpp
index 955c385..99bc0ac 100644
--- a/npapi/support/npmac.cpp
+++ b/npapi/support/npmac.cpp
@@ -2,7 +2,7 @@
* npmac.cpp: Safari/Mozilla/Firefox plugin for VLC
*****************************************************************************
* Copyright (C) 2009, Jean-Paul Saman <jpsaman at videolan.org>
- * Copyright (C) 2012, Felix Paul Kühne <fkuehne # videolan # org>
+ * Copyright (C) 2012-2013 Felix Paul Kühne <fkuehne # videolan # org>
* $Id:$
*
* Authors: Jean-Paul Saman <jpsaman at videolan.org>
@@ -410,25 +410,71 @@ void Private_Shutdown(void)
NPP_Shutdown();
}
+static bool boolValue(const char *value) {
+ return ( !strcmp(value, "1") ||
+ !strcasecmp(value, "true") ||
+ !strcasecmp(value, "yes") );
+}
+
NPError Private_New(NPMIMEType pluginType, NPP instance, uint16_t mode, int16_t argc, char* argn[], char* argv[], NPSavedData* saved)
{
PLUGINDEBUGSTR("\pNew;g;");
- /*
- * We should negotiate and setup uniform event & drawing models, so the 32- and 64-bit plugins behave
- * identically
- */
- NPBool supportsCoreGraphics = FALSE;
- NPError err = NPN_GetValue(instance, NPNVsupportsCoreGraphicsBool, &supportsCoreGraphics);
- if (err != NPERR_NO_ERROR || !supportsCoreGraphics) {
- PLUGINDEBUGSTR("\pNew: browser doesn't support CoreGraphics drawing model;g;");
- return NPERR_INCOMPATIBLE_VERSION_ERROR;
+ /* find out, if the plugin should run in windowless mode.
+ * if yes, choose the CoreGraphics drawing model */
+ bool windowless = false;
+ for( int i = 0; i < argc; i++ )
+ {
+ if( !strcmp( argn[i], "windowless" ) )
+ {
+ windowless = boolValue(argv[i]);
+ break;
+ }
}
- err = NPN_SetValue(instance, NPPVpluginDrawingModel, (void*)NPDrawingModelCoreGraphics);
- if (err != NPERR_NO_ERROR) {
- PLUGINDEBUGSTR("\pNew: couldn't activate CoreGraphics drawing model;g;");
- return NPERR_INCOMPATIBLE_VERSION_ERROR;
+ NPError err;
+ if (windowless) {
+ NPBool supportsCoreGraphics = FALSE;
+ err = NPN_GetValue(instance, NPNVsupportsCoreGraphicsBool, &supportsCoreGraphics);
+ if (err != NPERR_NO_ERROR || !supportsCoreGraphics) {
+ PLUGINDEBUGSTR("\pNew: browser doesn't support CoreGraphics drawing model;g;");
+ return NPERR_INCOMPATIBLE_VERSION_ERROR;
+ }
+
+ err = NPN_SetValue(instance, NPPVpluginDrawingModel, (void*)NPDrawingModelCoreGraphics);
+ if (err != NPERR_NO_ERROR) {
+ PLUGINDEBUGSTR("\pNew: couldn't activate CoreGraphics drawing model;g;");
+ return NPERR_INCOMPATIBLE_VERSION_ERROR;
+ }
+ } else {
+ NPBool supportsCoreAnimation = FALSE;
+ err = NPN_GetValue(instance, NPNVsupportsCoreAnimationBool, &supportsCoreAnimation);
+ if (err != NPERR_NO_ERROR || !supportsCoreAnimation) {
+ PLUGINDEBUGSTR("\pNew: browser doesn't support CoreAnimation drawing model;g;");
+ return NPERR_INCOMPATIBLE_VERSION_ERROR;
+ }
+
+ NPBool supportsInvalidatingCoreAnimation = FALSE;
+ err = NPN_GetValue(instance, NPNVsupportsInvalidatingCoreAnimationBool, &supportsInvalidatingCoreAnimation);
+ if (err != NPERR_NO_ERROR || !supportsInvalidatingCoreAnimation) {
+ PLUGINDEBUGSTR("\pNew: browser doesn't support the Invalidating CoreAnimation drawing model;g;");
+ return NPERR_INCOMPATIBLE_VERSION_ERROR;
+ }
+
+ if (supportsInvalidatingCoreAnimation) {
+ err = NPN_SetValue(instance, NPPVpluginDrawingModel, (void*)NPDrawingModelInvalidatingCoreAnimation);
+ if (err != NPERR_NO_ERROR) {
+ PLUGINDEBUGSTR("\pNew: couldn't activate Invalidating CoreAnimation drawing model;g;");
+ return NPERR_INCOMPATIBLE_VERSION_ERROR;
+ }
+ } else {
+ PLUGINDEBUGSTR("\pNew: falling back to non-invalidating CoreAnimation drawing, since invalidation is not supported;g;");
+ err = NPN_SetValue(instance, NPPVpluginDrawingModel, (void*)NPDrawingModelCoreAnimation);
+ if (err != NPERR_NO_ERROR) {
+ PLUGINDEBUGSTR("\pNew: couldn't activate CoreAnimation drawing model;g;");
+ return NPERR_INCOMPATIBLE_VERSION_ERROR;
+ }
+ }
}
NPBool supportsCocoaEvents = FALSE;
More information about the vlc-commits
mailing list