scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/src/GifAnimationPluginDllApi.cpp
branchRCL_3
changeset 26 e8d784ac1a4b
parent 0 040fcad49f44
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/src/GifAnimationPluginDllApi.cpp	Wed Sep 01 12:30:40 2010 +0100
@@ -0,0 +1,278 @@
+/*
+* 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:     Screensaver GifAnimation plug-in API file
+*
+*/
+
+
+
+
+
+#include <IHLImageFactory.h>        // IHLImageFactory
+
+#include "GifAnimationPlugin.h"
+#include "NPNExtensions.h"
+#include "GifAnimationUtils.h"
+
+// ======== Ecom interface functions implementation ========
+
+NPError GifAnimationPluginNewp( NPMIMEType /*pluginType*/, 
+                                NPP instance, 
+                                uint16 /*mode*/, 
+                                CDesCArray* /*argn*/, 
+                                CDesCArray* /*argv*/, 
+                                NPSavedData* /*saved*/ )
+    {
+    DBG_TRACE_FN_BEGIN;        
+    CGifAnimationPlugin* lGifAnimationPlugin=NULL;
+    TRAPD(err,lGifAnimationPlugin=CGifAnimationPlugin::NewL( instance ) );
+
+    if ( err == KErrNoMemory )
+        {
+        DBG_TRACE_FN_END;
+        return NPERR_OUT_OF_MEMORY_ERROR;
+        }
+    if ( err != KErrNone )
+        {
+        DBG_TRACE_FN_END;
+        return NPERR_MODULE_LOAD_FAILED_ERROR;
+        }
+    instance->pdata = (void *) lGifAnimationPlugin;
+    DBG_TRACE_FN_END;
+    return NPERR_NO_ERROR;
+    }
+
+NPError GifAnimationPluginDestroy( NPP instance, NPSavedData** /*save*/ )
+    {
+    DBG_TRACE_FN_BEGIN;        
+    CGifAnimationPlugin* lGifAnimationPlugin = 
+                ( CGifAnimationPlugin * )instance->pdata;
+    if ( lGifAnimationPlugin )
+        {
+        TRAPD( err, lGifAnimationPlugin->PrepareToExitL() );
+        if ( err != KErrNone )
+            {
+            DBG_TRACE( 
+                "GifAnimationPluginDestroy Error when PrepareToExitL()" );
+            }
+        /**Ignoring the error*/
+        delete lGifAnimationPlugin;
+        lGifAnimationPlugin = NULL;
+        }
+    DBG_TRACE_FN_END;
+    return NPERR_NO_ERROR;
+    }
+
+NPError GifAnimationPluginSetWindow( NPP instance, NPWindow *window )
+    {
+    DBG_TRACE_FN_BEGIN;        
+    CGifAnimationPlugin* lGifAnimationPlugin = 
+                (CGifAnimationPlugin *) instance->pdata;
+    TUint lWidth = window->width;
+    TUint lHeight = window->height;
+    TRAPD( err, 
+          lGifAnimationPlugin->SetWindowL( window, 
+                                      TRect( TSize( lWidth, lHeight ) ) ) );
+
+    if ( err == KErrNoMemory )
+        {
+        DBG_TRACE_FN_END;
+        return NPERR_OUT_OF_MEMORY_ERROR;
+        }
+    if ( err != KErrNone )
+        {
+        DBG_TRACE_FN_END;
+        return NPERR_GENERIC_ERROR;
+        }
+    DBG_TRACE_FN_END;
+    return NPERR_NO_ERROR;
+    }
+
+NPError GifAnimationPluginNewStream( NPP /*instance*/, 
+                                     NPMIMEType /*type*/, 
+                                     NPStream* /*stream*/, 
+                                     NPBool /*seekable*/, 
+                                     uint16* stype )
+    {
+    DBG_TRACE_FN_BEGIN;        
+    *stype = NP_ASFILEONLY;
+    DBG_TRACE_FN_END;
+    return NPERR_NO_ERROR;
+    }
+
+NPError GifAnimationPluginDestroyStream( NPP /*instance*/, 
+                                         NPStream* /*stream*/, 
+                                         NPReason /*reason*/ )
+    {
+    DBG_TRACE_FN_BEGIN;        
+    //
+    DBG_TRACE_FN_END;
+    return NPERR_NO_ERROR;
+    }
+
+void GifAnimationPluginAsFile( NPP instance, 
+                               NPStream* /*stream*/, 
+                               const TDesC& fname )
+    {
+    DBG_TRACE_FN_BEGIN;        
+    CGifAnimationPlugin* lGifAnimationPlugin = 
+                ( CGifAnimationPlugin* )instance->pdata;
+    TRAP_IGNORE( lGifAnimationPlugin->Control()->LoadImageL( fname ) );
+    DBG_TRACE_FN_END;
+    }
+
+int32 GifAnimationPluginWriteReady( NPP /*instance*/, NPStream* /*stream*/ )
+    {
+    DBG_TRACE_FN_BEGIN;        
+    //
+    DBG_TRACE_FN_END;
+    return 65536;
+    }
+
+int32 GifAnimationPluginWrite( NPP /*instance*/, 
+                               NPStream* /*stream*/, 
+                               int32 /*offset*/, 
+                               int32 len, 
+                               void* /*buffer*/ )
+    {
+    DBG_TRACE_FN_BEGIN;        
+    //
+    DBG_TRACE_FN_END;
+    return len;
+    }
+
+int16 GifAnimationPluginEvent( NPP /*instance*/, void* /*event*/ )
+    {
+    DBG_TRACE_FN_BEGIN;        
+    //
+    DBG_TRACE_FN_END;
+    return 0;
+    }
+
+
+NPError GifAnimationPluginGetValue( NPP instance, 
+                                    NPPVariable variable, 
+                                    void* ret_value )
+    {
+    DBG_TRACE_FN_BEGIN;        
+    if ( variable == NPPCheckFileIsValid )
+        {
+        NPCheckFile* checkFile = (NPCheckFile*)ret_value;
+        TRAPD( err, 
+               CGifAnimationPluginControl::CheckFileIsValidL(
+                                             checkFile->fileName->Des() ) );
+
+        checkFile->fileValidityCheckError = err;
+        DBG_TRACE_FN_END;
+        return NPERR_NO_ERROR;
+        }
+        
+    if ( variable == NPPScreenSaverGetLastError )
+        {
+        DBG_TRACE( "GetLastError" );
+        TInt* retValue = (TInt*)ret_value;
+        CGifAnimationPlugin* lGifAnimationPlugin = 
+                    ( CGifAnimationPlugin* )instance->pdata;
+        *retValue = lGifAnimationPlugin->Control()->GetLastError();
+        DBG_TRACE_FN_END;
+        return NPERR_NO_ERROR;
+        }
+        
+    // new command, panic 
+    _LIT( KErrGetMsg, 
+          "CGifAnimationPluginDllApi::GifAnimationPluginGetValue" );
+    User::Panic( KErrGetMsg, KErrNotSupported );
+    return NPERR_GENERIC_ERROR;
+    }
+
+NPError GifAnimationPluginSetValue( NPP instance, 
+                                    NPNVariable variable, 
+                                    void* value )
+    {
+    DBG_TRACE_FN_BEGIN;        
+    CGifAnimationPlugin* lGifAnimationPlugin = 
+                ( CGifAnimationPlugin* )instance->pdata;
+
+    if ( variable == NPNScreenSaverAnimationEvent )
+        {
+        NPAnimationEvent* event = (NPAnimationEvent*)value;
+        switch ( *event )
+            {
+            case NPStartAnimation:
+                DBG_TRACE( "StartAnimationL" );
+                TRAPD( errStart, 
+                       lGifAnimationPlugin->Control()->StartAnimationL() ); 
+                if ( errStart != KErrNone )     
+                    {
+                    DBG_TRACE( "StartAnimation failed!" );
+                    return NPERR_GENERIC_ERROR;
+                    }
+                return NPERR_NO_ERROR;
+            case NPEndAnimation:
+                DBG_TRACE( "StopAnimation" );
+                TRAPD( errEnd, 
+                       lGifAnimationPlugin->Control()->StopAnimation() );
+                if (errEnd != KErrNone)     
+                    {
+                    DBG_TRACE( "StopAnimation failed!" );
+                    return NPERR_GENERIC_ERROR;
+                    }
+                DBG_TRACE_FN_END;
+                return NPERR_NO_ERROR;
+            default: 
+                // new command, panic 
+                _LIT( KErrSet1Msg, 
+                  "CGifAnimationPluginDllApi::GifAnimationPluginSetValue1" );
+                User::Panic( KErrSet1Msg, KErrNotSupported );
+                return NPERR_GENERIC_ERROR;
+            }
+        }
+
+    if ( variable == NPScreenSaverMode )
+        {
+        // we do not need the event
+        DBG_TRACE_FN_END;
+        return NPERR_NO_ERROR;
+        }
+
+    if ( variable == NPNInteractionMode )
+        {
+        // we do not need the event
+        DBG_TRACE_FN_END;
+        return NPERR_NO_ERROR;
+        }
+
+    // new command, panic 
+    _LIT( KErrSet2Msg, 
+          "CGifAnimationPluginDllApi::GifAnimationPluginSetValue2" );
+    User::Panic( KErrSet2Msg, KErrNotSupported );
+    return NPERR_GENERIC_ERROR;
+    }
+
+void GifAnimationPluginURLNotify( NPP /*instance*/, 
+                                  const TDesC& /*url*/, 
+                                  NPReason /*reason*/, 
+                                  void* /*notifyData*/ )
+    {
+    DBG_TRACE_FN_BEGIN;        
+    //
+    DBG_TRACE_FN_END;
+    }
+
+void GifAnimationPluginPrint( NPP /*instance*/, NPPrint* /*platformPrint*/ )
+    {
+    DBG_TRACE_FN_BEGIN;        
+    //
+    DBG_TRACE_FN_END;
+    }