diff -r e52958d06c29 -r 5fd161fa28b6 svgtviewer/SvgtViewerPlugin/ScreenSaverPluginSrc/Svgtplugindllapi.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgtviewer/SvgtViewerPlugin/ScreenSaverPluginSrc/Svgtplugindllapi.cpp Thu Sep 09 11:17:40 2010 +0300 @@ -0,0 +1,282 @@ +/* +* Copyright (c) 2005 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 + * +*/ + + + +#include +#include + +#include "Svgtplugin.h" +#include "SvgRenderFrameControl.h" +#include "SvgScreenSaver.h" + +// ----------------------------------------------------------------------------- +// SvgtPluginNewp +// Creates the plugin. +// ----------------------------------------------------------------------------- +// +NPError SvgtPluginNewp(NPMIMEType /*pluginType*/, + NPP aInstance, + uint16 /*mode*/, + CDesCArray* /*argn*/, + CDesCArray* /*argv*/, + NPSavedData* /*saved*/) + { + CSvgtPlugin* lSvgtPlugin=NULL; + TRAPD(err,lSvgtPlugin=CSvgtPlugin::NewL(aInstance)); + + if (err == KErrNoMemory) + { + return NPERR_OUT_OF_MEMORY_ERROR; + } + if (err != KErrNone) + { + return NPERR_MODULE_LOAD_FAILED_ERROR; + } + if ( aInstance ) + { + aInstance->pdata = (void *) lSvgtPlugin; + } + else + { + return NPERR_INVALID_INSTANCE_ERROR; + } + return NPERR_NO_ERROR; + } + + +// ----------------------------------------------------------------------------- +// SvgtPluginDestroy +// Destroy a plugin. +// ----------------------------------------------------------------------------- +// +NPError SvgtPluginDestroy(NPP aInstance, NPSavedData** /*save*/) + { + if ( !aInstance ) + { + return NPERR_GENERIC_ERROR; + } + CSvgtPlugin* lSvgtPlugin = (CSvgtPlugin *)aInstance->pdata; + if ( lSvgtPlugin ) + { + TRAPD(err,lSvgtPlugin->PrepareToExitL()); + if (err != KErrNone) + { + #ifdef _DEBUG + RDebug::Print(_L("SvgtPluginDestroy Error when printing Warning")); + #endif //_DEBUG + } + /**Ignoring the error*/ + delete lSvgtPlugin; + lSvgtPlugin = NULL; + } + return NPERR_NO_ERROR; + } + +// ----------------------------------------------------------------------------- +// SvgtPluginSetWindow +// This sets the parent window of a plugin. +// ----------------------------------------------------------------------------- +// +NPError SvgtPluginSetWindow(NPP aInstance, NPWindow* aWindow) + { + if ( !aInstance ) + { + return NPERR_INVALID_INSTANCE_ERROR; + } + if ( !aWindow ) + { + return NPERR_GENERIC_ERROR; + } + CSvgtPlugin* lSvgtPlugin = (CSvgtPlugin *) aInstance->pdata; + TUint lWidth = aWindow->width; + TUint lHeight = aWindow->height; + + TRAPD(err,lSvgtPlugin->SetWindowL(aWindow,TRect(TSize(lWidth,lHeight)))); + if (err == KErrNoMemory) + { + return NPERR_OUT_OF_MEMORY_ERROR; + } + + if (err != KErrNone) + { + return NPERR_GENERIC_ERROR; + } + + return NPERR_NO_ERROR; + } + +// ----------------------------------------------------------------------------- +// SvgtPluginAsFile +// The name of the SVG file is set by AsFile +// ----------------------------------------------------------------------------- +// +void SvgtPluginAsFile(NPP aInstance, NPStream* /*stream*/, const TDesC& aFname) + { + CSvgtPlugin* lSvgtPlugin = (CSvgtPlugin*)aInstance->pdata; + TInt err = lSvgtPlugin->Control()->AsFile(aFname); + if ( err != KErrNone ) + { + // Destroy myself + SvgtPluginDestroy( aInstance, NULL ); + } + } + + + + +// ----------------------------------------------------------------------------- +// SvgtPluginGetValue +// Generic hook to retrieve values/attributes from the plugin. +// ----------------------------------------------------------------------------- +// +NPError SvgtPluginGetValue(NPP aInstance, + NPPVariable aVariable, + void* aRetvalue) + { + TInt ret = NPERR_NO_ERROR; + if ( !aInstance ) + { + ret = NPERR_INVALID_INSTANCE_ERROR; + } + CSvgtPlugin* lSvgtPlugin = (CSvgtPlugin *)aInstance->pdata; + if ( lSvgtPlugin && aRetvalue ) + { + if ( aVariable == NPPCheckFileIsValid ) + { + NPCheckFile* checkFile = (NPCheckFile*)aRetvalue; + checkFile->fileValidityCheckError = KErrNone; + TRAPD(err, SvgtPluginCheckFileL( aRetvalue ) ); + if ( err != KErrNone ) + { + ret= NPERR_GENERIC_ERROR; + } + ret = NPERR_NO_ERROR; + } + if ( aVariable == NPPScreenSaverGetLastError ) + { + TInt* error = (TInt*)aRetvalue; + *error = lSvgtPlugin->Control()->GetLastError(); + ret = NPERR_NO_ERROR; + } + } + else + { + ret = NPERR_GENERIC_ERROR; + } + return ret; + } + +// ----------------------------------------------------------------------------- +// SvgtPluginCheckFileL +// Helper function used to check the file's validity +// ----------------------------------------------------------------------------- +// +void SvgtPluginCheckFileL( void* aRetvalue ) + { + if ( !aRetvalue ) + { + User::Leave( KErrArgument ); + } + NPCheckFile* checkFile = (NPCheckFile*)aRetvalue; + TFileName fileName = checkFile->fileName->Des(); + RFile fileHandle; + TInt err = fileHandle.Open( CEikonEnv::Static()->FsSession(), + fileName, + EFileShareAny ); + User::LeaveIfError( err ); + + CleanupClosePushL( fileHandle ); + CSvgRenderFrameControl* control = new ( ELeave ) + CSvgRenderFrameControl( fileHandle ); + + CleanupStack::PushL( control ); + TRAP( err, control->InitializeEngineL( ETrue, control ) ); /* CheckFile Mode */ + checkFile->fileValidityCheckError = err; + CleanupStack::PopAndDestroy( control ); + CleanupStack::PopAndDestroy(&fileHandle); + } + + +// ----------------------------------------------------------------------------- +// SvgtPluginSetValue +// Generic hook to set values/attributes within the plugin. +// ----------------------------------------------------------------------------- +// +NPError SvgtPluginSetValue(NPP aInstance, + NPNVariable aVariable, + void* aRetvalue) + { + TInt ret = NPERR_NO_ERROR; + if ( !aInstance ) + { + ret = NPERR_INVALID_INSTANCE_ERROR; + } + CSvgtPlugin* lSvgtPlugin = (CSvgtPlugin *)aInstance->pdata; + + if ( lSvgtPlugin ) + { + switch( aVariable ) + { + case NPNInteractionMode: + // do nothing + break; + case NPNScreenSaverAnimationEvent: + { + NPAnimationEvent animEvent = ( NPAnimationEvent ) + (*(NPAnimationEvent*)aRetvalue); + + if ( animEvent == NPStartAnimation ) + { + // Make the control Visible + lSvgtPlugin->Control()->MakeVisible( ETrue ); + TRAPD(err, lSvgtPlugin->Control()-> + SendCommandL(ESvgtDlgLoopOnCommand)); + if ( err != KErrNone ) + { + ret = NPERR_GENERIC_ERROR; + } + // Start the animation + TRAP( err, lSvgtPlugin->Control()-> + SendCommandL( ESvgtDlgPlayCommand ) ); + if ( err != KErrNone ) + { + ret = NPERR_GENERIC_ERROR; + } + } + if ( animEvent == NPEndAnimation ) + { + // Make the control invisible + lSvgtPlugin->Control()->MakeVisible( EFalse ); + // Stop the animation + TRAPD( err, lSvgtPlugin->Control()-> + SendCommandL( ESvgtDlgPauseCommand ) ); + if ( err != KErrNone ) + { + ret= NPERR_GENERIC_ERROR; + } + } + } + break; + } + } + return ret; + } + + + +// End of File