svgtopt/SVGTPlugin/src/Svgtplugindllapi.cpp
changeset 0 d46562c3d99d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtopt/SVGTPlugin/src/Svgtplugindllapi.cpp	Thu Jan 07 16:19:02 2010 +0200
@@ -0,0 +1,186 @@
+/*
+* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  SVGT Plugin Implementation source file
+ *
+*/
+
+
+/*
+************************************************************************************
+* Contents:           Example plugin implementation
+*                     Implementation of the API used by Opera to control the plugin
+************************************************************************************
+*/
+
+
+#include "Svgtplugin.h"
+
+/**
+  * Create a new instance of a SVG plugin.
+**/
+
+NPError SvgtPluginNewp(NPMIMEType pluginType, NPP instance, uint16 mode,
+    CDesCArray* argn, CDesCArray* argv, NPSavedData* saved)
+	{
+	CSvgtPlugin* lSvgtPlugin = NULL;
+    TRAPD(err,lSvgtPlugin = CSvgtPlugin::NewL(instance));
+
+	if (err == KErrNoMemory)
+        return NPERR_OUT_OF_MEMORY_ERROR;
+    if (err != KErrNone)
+        return NPERR_MODULE_LOAD_FAILED_ERROR;
+
+    instance->pdata = (void *) lSvgtPlugin;
+    NPError nerr = lSvgtPlugin->SvgPluginNew(pluginType, instance,
+        mode, argn, argv, saved);
+    return nerr;
+	}
+
+/**
+  * Destroy a plugin.
+**/
+NPError SvgtPluginDestroy(NPP instance, NPSavedData** /*save*/)
+	{
+	CSvgtPlugin* lSvgtPlugin = (CSvgtPlugin *)instance->pdata;
+	if ( lSvgtPlugin )
+		{
+		TRAPD(err,lSvgtPlugin->PrepareToExitL());
+        if (err != KErrNone)
+            {
+            #ifdef _DEBUG
+            RDebug::Printf("SvgtPluginDestroy Error when printing Warning.");
+            #endif //_DEBUG
+            }
+		/**Ignoring the error*/
+		delete lSvgtPlugin;
+		lSvgtPlugin = NULL;
+		}
+	return NPERR_NO_ERROR;
+	}
+
+/**
+  * This is the parent window of a plugin.
+  */
+NPError SvgtPluginSetWindow(NPP instance, NPWindow *window)
+	{
+    CSvgtPlugin* lSvgtPlugin = (CSvgtPlugin *) instance->pdata;
+	TUint lWidth = window->width;
+	TUint lHeight = window->height;
+	
+	TRAPD(err,lSvgtPlugin->SetWindowL(window,TRect(TSize(lWidth,lHeight))));
+
+    if (err == KErrNoMemory)
+        return NPERR_OUT_OF_MEMORY_ERROR;
+    if (err != KErrNone)
+        return NPERR_GENERIC_ERROR;
+    return NPERR_NO_ERROR;
+	}
+
+/**
+  * A new data stream has been created for sending data to the plugin.
+  * @param stream - A pointer to plugin specific data can be placed in stream->pdata
+  *
+  */
+
+NPError SvgtPluginNewStream(NPP /*instance*/, NPMIMEType /*type*/, NPStream* /*stream*/, NPBool /*seekable*/, uint16* stype)
+	{
+	*stype = NP_ASFILEONLY;
+	return NPERR_NO_ERROR;
+	}
+
+/**
+  * A data stream has been terminated.
+  */
+NPError SvgtPluginDestroyStream(NPP /*instance*/, NPStream* /*stream*/, NPReason /*reason*/)
+	{
+    return NPERR_NO_ERROR;
+	}
+
+/**
+  * A data stream has been fully saved to a file.
+  */
+void SvgtPluginAsFile(NPP instance, NPStream* stream, const TDesC& fname)
+	{
+	CSvgtPlugin* lSvgtPlugin = (CSvgtPlugin*)instance->pdata;
+	
+	if (lSvgtPlugin && lSvgtPlugin->Control())
+	  {	
+		lSvgtPlugin->Control()->AsFile(fname, stream );
+	  }
+	}
+
+/**
+  * Return the maximum number of bytes this plugin can accept from the stream.
+  */
+int32 SvgtPluginWriteReady(NPP /*instance*/, NPStream* /*stream*/)
+	{
+	return 65536;
+	}
+
+/**
+  * Receive more data
+  * @param buffer - contains the data.
+  * @param len    - the number of bytes in buffer.
+  * @param offset - the number of bytes already sent/processed.
+  * @return TInt number of bytes processed.
+  */
+int32 SvgtPluginWrite(NPP /*instance*/, NPStream* /*stream*/, int32 /*offset*/, int32 len, void* /*buffer*/)
+	{
+	return len;
+	}
+
+/**
+  * Event
+  */
+int16 SvgtPluginEvent(NPP /*instance*/, void* /*event*/)
+	{
+    return 0;
+	}
+
+
+/**
+  * Generic hook to set values/attributes within the plugin.
+  */
+NPError SvgtPluginSetValue(NPP /*instance*/, NPNVariable /*variable*/, void* /*ret_value*/)
+	{
+    return NPERR_NO_ERROR;
+	}
+
+/**
+  * Generic hook to get values/attributes from the plugin.
+  */
+NPError SvgtPluginGetValue(NPP instance, NPNVariable variable, void*
+*ret_value)
+	{
+    CSvgtPlugin* lSvgtPlugin = (CSvgtPlugin *)instance->pdata;
+    if(lSvgtPlugin)
+        {
+        // A response of false when enum passed is NPPVpluginInteractiveBool
+        // must be interpreted as "Plugin is interactive"
+        // Since operations such as panning, zooming can be performed
+        // on all svg contents plugin can be considered always interactive
+        if(variable==NPPVpluginInteractiveBool)
+    	    {
+    	    *(TBool*) ret_value=EFalse;
+    	    }
+        }
+    return NPERR_NO_ERROR;
+	}
+void SvgtPluginURLNotify(NPP /*instance*/, const TDesC& /*url*/, NPReason /*reason*/, void* /*notifyData*/)
+	{
+	}
+
+void SvgtPluginPrint(NPP /*instance*/, NPPrint* /*platformPrint*/)
+	{
+	}