diff -r aaeeca1f15af -r e8d784ac1a4b scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/inc/GifAnimationPlugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/inc/GifAnimationPlugin.h Wed Sep 01 12:30:40 2010 +0100 @@ -0,0 +1,434 @@ +/* +* 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 implementation header file +* +*/ + + + +#ifndef C_GIFANIMATIONPLUGIN_H +#define C_GIFANIMATIONPLUGIN_H + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + + +// FORWARD DECLARATIONS +class MIHLFileImage; +class MIHLBitmap; +class MIHLImageViewer; + +class CCoeControl; +class CGifAnimationPlugin; + +// CONSTANTS +/** implementation id GifAnim Ecom Plugin */ +const TInt KGifAnimationPluginImplementationValue = 0x102750B4; + +/****************************************** +* This class is specific to ECom Style Plugin. +* This is used for passing plugin specific initialization information +* to and from browser. +*******************************************/ + +class CGifAnimationPluginEcomMain : public CEcomBrowserPluginInterface + { + public: // Functions from base classes + + /** + * Instance factory + * @param aInitParam an optional parameter + */ + static CGifAnimationPluginEcomMain* NewL(TAny* aInitParam); + + /** + * Destructor. + */ + virtual ~CGifAnimationPluginEcomMain(); + + /** + * @return pointer to functions struct. + */ + NPNetscapeFuncs* Funcs() { return iNpf; } + + private: // Constructors + CGifAnimationPluginEcomMain( NPNetscapeFuncs* aNpf ); + void Construct( NPPluginFuncs* aPluginFuncs ); + private: // new functions + /** + * Sets pointers to interface functions + * @param aPpf structure to fill + */ + NPError InitializeFuncs( NPPluginFuncs* aPpf ); + + private: // Data + // pointer to plug-in function pointers struct + NPNetscapeFuncs* iNpf; + }; + +/**************************************** +Class CGifAnimationPluginControl +Class to Handle UI related actions +****************************************/ +class CGifAnimationPluginControl : public CCoeControl, + public MIHLViewerObserver + + { +public: // Constructor and Destructor + + /** + * Function: NewL + * + * Description: Get instance of a CGifAnimationPluginControl object. + * @param aParentControl a parent class to register to + * @param aPluginAdapter pointer to plugin adapter + */ + static CGifAnimationPluginControl* NewL( CCoeControl* aParentControl, + MPluginAdapter* aPluginAdapter); + + /** + * Destructor. + */ + ~CGifAnimationPluginControl(); + +public: // From MIHLViewerObserver + /** + * From MIHLViewerObserver Notifies client + * when viewer bitmap content is changed. + * Leave situation is handled in ViewerError() callback. + */ + void ViewerBitmapChangedL(); + + /** + * From MIHLViewerObserver Notifies client if error occurs in viewer. + * @param aError IN System wide error code. + */ + void ViewerError( TInt aError ); + +public: // new methods + /** + * Loads the image into display. + * @param aImageFileName image file name - expected to be valid image + */ + void LoadImageL( const TDesC& aImageFileName ); + + /** + * @return last error, if any + */ + TInt GetLastError() const; + + /** + * Start animation. + */ + void StartAnimationL(); + + /** + * Stop animation. + */ + void StopAnimation(); + + /** + * Checks that the file is a valid image file. + * Will leave otherwise + * + * @param aImageFileName image file name - expected to be valid image + */ + static void CheckFileIsValidL( const TDesC& aImageFileName ); + + +private: // new methods + + /** + * @return ETrue if loaded image is animation. + */ + TBool IsAnimation() const; + + /** + * Cancel animation. + */ + void CancelAnimation(); + + /** + * Performs image loading steps. + * Uses file name stored in LoadImageL() + */ + void DoImageLoadingL(); + + /** + * Frees resources allocated with LoadImageL() + */ + void DeleteAnimation(); + + /** + * If loading content fails, non-leaving HandleCallback + * must be call always that parent can update its state + * properly. + */ + void HandleCallback( TInt aError ); + + /** + * Informes that the plug-in wants to terminate + */ + void InformPluginFinished(); + + /** + * Informs that DRM rights should not be consumed + */ + void SetPreviewMode(); + +private: // from CCoeControl + void Draw(const TRect& aRect) const; + void SizeChanged(); + +private: // Constructor + /** + * Constructor. + */ + CGifAnimationPluginControl(); + + /** + * ConstructL + * + * 2nd phase constructor. + * @param aParentControl a parent class to register to + * @param aPluginAdapter pointer to plugin adapter + */ + void ConstructL( CCoeControl *aParentControl, + MPluginAdapter* aPluginAdapter ); + +private: // Data + + /** + * Possible animation states + */ + enum TAnimationState + { + EAnimationNotReady=1, // the file was not loaded yet or corrupt + EAnimationLoading=2, + EAnimationPlaying=3 + }; + + // Source image + MIHLFileImage* iSourceImage; + + // Destination bitmap + MIHLBitmap* iDrawingBitmap; + + // the bitmap is used for scaling our way, IHL will not do scaling + CFbsBitmap* iScalingBitmap; + + // the mask for scaled bitmap + CFbsBitmap* iScalingBitmapMask; + + // size of target bitmap + TSize iTargetSize; + + // new size of target bitmap + TSize iTargetNewSize; + + // Image viewer used as engine + MIHLImageViewer* iEngine; + + // Internal animation state. + TAnimationState iAnimationState; + + // path and name of file being loaded + TFileName iFileName; + + // code of last loading error occured + TInt iLastError; + + // pointer to adapter, we do not own the instance + MPluginAdapter* iPluginAdapter; + + // if true, no DRM rights are consumed + TBool isPreviewMode; + + // a flag to make sure the first ViewerBitmapChangedL is finished, + // then we could draw image on screen + TBool isViewerBitmapChangedL; + }; + + +/******************************************************* +Class CGifAnimationPlugin +********************************************************/ + +class CGifAnimationPlugin : public CBase + { +public: // Constructor and Destructor + /** + * Instance factory + */ + static CGifAnimationPlugin* NewL( NPP anInstance ); + /** + * Destructor + */ + ~CGifAnimationPlugin(); + + /** + * Notifies host that plug-in has finished. + */ + void PrepareToExitL(); + + /** + * @return ref of CGifAnimationPluginControl + */ + CGifAnimationPluginControl* Control(); + + /** + * @return pointer on NPP instance + */ + NPP Instance(); + + /** + * Sets the parent window to plug-in. If already set, only updates size. + * @param aWindow a parent window + * @param aRect a parent window rectangle + */ + void SetWindowL( const NPWindow *aWindow, const TRect& aRect ); + +private: + /** + * Construct. + * + * 2nd phase constructor. + * @param anInstance NPP structure + */ + void Construct( NPP anInstance ); + +private: + // pointer to adapter + MPluginAdapter* iPluginAdapter; + + // pointer to Container + CGifAnimationPluginControl* iControl; + + // structure with pointers + NPP iInstance; + }; + +/**************************************************************************** +* +* Plugin API methods +* +*/ + +/** + * Create a plugin. + */ +NPError GifAnimationPluginNewp( NPMIMEType pluginType, + NPP instance, + uint16 mode, + CDesCArray* argn, + CDesCArray* argv, + NPSavedData* saved ); + +/** + * Destroy a plugin. + */ +NPError GifAnimationPluginDestroy(NPP instance, NPSavedData** save); + +/** + * This is the parent window of a plugin. + */ +NPError GifAnimationPluginSetWindow(NPP instance, NPWindow* window); + +/** + * A new data stream has been created for sending data to the plugin. + */ +NPError GifAnimationPluginNewStream( NPP instance, + NPMIMEType type, + NPStream* stream, + NPBool seekable, + uint16* stype ); + +/** + * A data stream has been terminated. + */ +NPError GifAnimationPluginDestroyStream( NPP instance, + NPStream* stream, + NPReason reason ); + +/** + * A data stream has been fully saved to a file. + */ +void GifAnimationPluginAsFile( NPP instance, + NPStream* stream, + const TDesC& fname ); + +/** + * Return the maximum number of bytes this plugin can accept from the stream. + * @param instance - the plug-in instance + * @param stream - the stream to use + */ +int32 GifAnimationPluginWriteReady( NPP instance, NPStream* stream ); + +/** + * Receive more data - return number of bytes processed. + * + * @param instance - the plug-in instance + * @param stream - the stream to read from + * @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 GifAnimationPluginWrite( NPP instance, + NPStream* stream, + int32 offset, + int32 len, + void* buffer ); + +/** + * Generic hook to retrieve values/attributes from the plugin. + */ +NPError GifAnimationPluginGetValue( NPP instance, + NPPVariable variable, + void *ret_value ); + +/** + * Generic hook to set values/attributes within the plugin. + */ +NPError GifAnimationPluginSetValue( NPP instance, + NPNVariable variable, + void *ret_value ); + +/** + * Event + */ +int16 GifAnimationPluginEvent( NPP instance, void* event ); + +/** + * Notify + */ +void GifAnimationPluginURLNotify( NPP instance, + const TDesC& url, + NPReason reason, + void* notifyData ); + +/** + * Print + */ +void GifAnimationPluginPrint( NPP instance, NPPrint* platformPrint ); + +#endif // C_GIFANIMATIONPLUGIN_H