diff -r 608f67c22514 -r 896e9dbc5f19 internetradio2.0/uicontrolsinc/irimageconverterimpl.h --- a/internetradio2.0/uicontrolsinc/irimageconverterimpl.h Tue Jul 06 14:07:20 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,416 +0,0 @@ -/* -* Copyright (c) 2008-2008 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: Internal image converter implementation -* -*/ - - -#ifndef C_IRIMAGECONVERTERIMPL_H -#define C_IRIMAGECONVERTERIMPL_H - -#include -#include - -class CBitmapScaler; -class CFbsBitmap; -class CGulIcon; -class CImageDecoder; -class CSvgEngineInterfaceImpl; -class MIRImageConverterObserver; - -/** - * Internal image converter implementation. - * - * This class and some of its methods are document in more detail in irimageconverter.h, - * as indicated by the @see tags. - * - * @see CIRImageConverter - */ -NONSHARABLE_CLASS( CIRImageConverterImpl ) : public CActive, public MSvgRequestObserver - { - -public: - - /** - * @see CIRImageConverter::NewL() - */ - static CIRImageConverterImpl* NewL(); - - /** - * @see CIRImageConverter::~CIRImageConverter() - */ - ~CIRImageConverterImpl(); - - /** - * @see CIRImageConverter::SetDataL( const TDesC8& aData ) - */ - void SetDataL( const TDesC8& aData ); - - /** - * @see CIRImageConverter::SetObserver( MIRImageConverterObserver* aObserver ) - */ - void SetObserver( MIRImageConverterObserver* aObserver ); - - /** - * @see CIRImageConverter::EnableAnimations( TBool aEnable ) - */ - void EnableAnimations( TBool aEnable ); - - /** - * @see CIRImageConverter::IsAnimated() const - */ - TBool IsAnimated() const; - - /** - * @see CIRImageConverter::MaintainAspectRatio( TBool aMaintain ) - */ - void MaintainAspectRatio( TBool aMaintain ); - - /** - * @see CIRImageConverter::StartL( const TSize& aTarget, TInt aId ) - */ - void StartL( const TSize& aTarget, TInt aId ); - - /** - * @see CIRImageConverter::Stop() - */ - void Stop(); - - /** - * @see CIRImageConverter::Bitmap() const - */ - const CFbsBitmap* Bitmap() const; - - /** - * @see CIRImageConverter::Mask() const - */ - const CFbsBitmap* Mask() const; - - /** - * @see CIRImageConverter::TransferBitmapOwnership( CFbsBitmap*& aBitmap, CFbsBitmap*& aMask ) - */ - void TransferBitmapOwnership( CFbsBitmap*& aBitmap, CFbsBitmap*& aMask ); - -// from base class CActive - - void DoCancel(); - void RunL(); - TInt RunError( TInt aError ); - -// from base class MSvgRequestObserver - - void UpdateScreen(); - TBool ScriptCall( const TDesC& aScript, CSvgElementImpl* aCallerElement ); - TInt FetchImage( const TDesC& aUri, RFs& aSession, RFile& aFileHandle ); - TInt FetchFont( const TDesC& aUri, RFs& aSession, RFile& aFileHandle ); - void UpdatePresentation( const TInt32& aNoOfAnimation ); - -private: - - /** - * Constructor. - */ - CIRImageConverterImpl(); - - /** - * Second-phase constructor. - */ - void ConstructL(); - - /** - * Performs cleanup on the converter object. - * - * Thorough cleanup must not be used if the converter should remain usable without having - * to call SetDataL afterwards. - * - * Should thorough cleanup be specified, everything, including the ICL image decoder and - * the SVG-T engine are destroyed. - * - * @param aThorough Flag to indicate if thorough cleanup should be used. - */ - void Cleanup( TBool aThorough = EFalse ); - - /** - * Creates the proper handler for the raw image data. - * - * The handler must be created whenever the raw image data is changed, even if - * the same type of handler would be used. - */ - void CreateDataHandlerL(); - - /** - * Creates new bitmaps of the given size. - * - * Performs deletion on the supplied bitmaps before assigning the created bitmaps - * on them, so calling this with bitmaps that already exists is acceptable. - * - * Should creation of either of the new bitmaps fail, the supplied bitmaps are not modified. - * - * @param aSize Size in pixels that the bitmaps are created to. - * @param aBitmap On return, contains the created bitmap. - * Ownership is transferred to the caller. - * @param aMask On return, contains the created mask. - * Ownership is transferred to the caller. - */ - void CreateBitmapL( const TSize& aSize, CFbsBitmap*& aBitmap, CFbsBitmap*& aMask ); - - /** - * Creates exact copies of the supplied bitmaps. - * - * Performs deletion on the supplied bitmaps before assigning the created bitmaps - * on them, so calling this with bitmaps that already exists is acceptable. - * - * Should creation of either of the new bitmaps fail, the supplied bitmaps are not modified. - * - * @param aSourceBitmap The bitmap to copy data from. - * @param aSourceMask The mask to copy data from. - * @param aBitmap On return, contains the copied bitmap. - * Ownership is transferred to the caller. - * @param aMask On return, contains the copied mask. - * Ownership is transferred to the caller. - */ - void CreateBitmapCopyL( const CFbsBitmap& aSourceBitmap, const CFbsBitmap& aSourceMask, - CFbsBitmap*& aBitmap, CFbsBitmap*& aMask ); - - /** - * Starts the bitmap animation. - * - * Requires that all the bitmap animation frames are prerendered successfully. - */ - void StartBitmapAnimationL(); - - /** - * Renders the current bitmap animation frame. - * - * @param aFirstTime Flag to indicate if this is the very first frame of the animation - * to be rendered, ever. - */ - void RenderBitmapAnimationFrameL( TBool aFirstTime = EFalse ); - - /** - * Notifies the observer either synchronously or asynchronously. - * - * @param aError Error code to notify the observer with. - * @param aSynchronous Flag to indicate if the notification should be synchronous or asynchronous. - */ - void NotifyObserver( TInt aError, TBool aSynchronous = ETrue ); - - /** - * Call back for notifying the observer. - * - * @param aSelf The object that made the request. - * @return KErrNone. - */ - static TInt StaticNotifyObserverCallBack( TAny* aSelf ); - - /** - * Call back for advancing to the next frame when bitmap animations are used. - * - * @param aSelf The object that made the request. - * @return KErrNone. - */ - static TInt StaticNextFrameCallBack( TAny* aSelf ); - -private: - - /** - * Possible converter internal states. - */ - enum TIRImageConverterState - { - - /** - * Converter is idle; it cannot be used until SetDataL has been successfully called on it. - */ - EIRStateIdle, - - /** - * Converter has been initialized and it is using the SVG-T engine for rendering the raw image data. - */ - EIRStateSvgEngineInitialized, - - /** - * Converter has been initialized and it is using ICL for rendering the raw image data. - */ - EIRStateBitmapDecoderInitialized, - - /** - * Converter is currently converting the raw image data with the SVG-T engine. - */ - EIRStateConvertingSvg, - - /** - * Converter is currently converting the raw image data with ICL. - */ - EIRStateConvertingBitmap, - - /** - * Converter is currently scaling the decoded bitmap. - */ - EIRStateScalingBitmap, - - /** - * Converter is currently scaling the decoded bitmap's mask. - */ - EIRStateScalingBitmapMask, - - /** - * Converter is currently waiting for the next bitmap animation frame to be rendered. - */ - EIRStateBetweenBitmapAnimationFrames - - }; - -private: - - /** - * ICL image decoder that is used to convert all bitmap raw image data formats. - * Owned. - */ - CImageDecoder* iDecoder; - - /** - * Scaler that is used to scale the converter bitmap and its mask when using the ICL image decoder. - * Owned. - */ - CBitmapScaler* iScaler; - - /** - * SVG-T engine that is used to convert SVG image data. - * Owned. - */ - CSvgEngineInterfaceImpl* iSvgEngine; - - /** - * The actual resulting bitmap from the last successful conversion. - * - * Note that the user of the class may take ownership of this object via the - * TransferBitmapOwnership method. - * - * Owned. - */ - CFbsBitmap* iProcessedBitmap; - - /** - * The actual resulting mask from the last successful conversion. - * - * Note that the user of the class may take ownership of this object via the - * TransferBitmapOwnership method. - * - * Owned. - */ - CFbsBitmap* iProcessedMask; - - /** - * Bitmap that is being currently worked on. - * Owned. - */ - CFbsBitmap* iBitmap; - - /** - * Mask that is being currently worked on. - * Owned. - */ - CFbsBitmap* iMask; - - /** - * Bitmap of the last frame's state when using bitmap animations. - * Owned. - */ - CFbsBitmap* iLastFrameBitmap; - - /** - * Mask of the last frame's state when using bitmap animations. - * Owned. - */ - CFbsBitmap* iLastFrameMask; - - /** - * Original converted bitmap animation frames. - * - * These are the, in most cases partial, bitmap animation frames that - * have been converted via ICL. These are not of the required target size, - * but rather the size that has been defined for the frame in the bitmap - * animation data. The bitmaps in this array must not be scaled. - * - * Owned. - */ - RPointerArray iFrames; - - /** - * Asynchronous call back to notify the observer. - * Owned. - */ - CAsyncCallBack* iNotifyObserverCallBack; - - /** - * Periodic timer used to display bitmap animations. - * Owned. - */ - CPeriodic* iFrameTimer; - - /** - * Observer that is notified of conversion events. - * Not owned. - */ - MIRImageConverterObserver* iObserver; - - /** - * Flag used to indicate whether animations are enabled. - */ - TBool iEnableAnimations; - - /** - * Flag to indicate whether aspect ratio should be maintained when scaling. - */ - TBool iMaintainAspectRatio; - - /** - * Descriptor pointer to the raw image data supplied by the user. - */ - TPtrC8 iData; - - /** - * Conversion identifier that is used when notifying the observer. - */ - TInt iId; - - /** - * Target size of the converted bitmap in pixels. - */ - TSize iTargetSize; - - /** - * Flag to indicate whether the raw image data is animated. - */ - TBool iIsAnimated; - - /** - * Current frame index when processing bitmap animations. - */ - TInt iFrameIndex; - - /** - * Error code to notify the observer with. - */ - TInt iError; - - /** - * Current internal image converter state. - */ - TIRImageConverterState iState; - - }; - -#endif // C_IRIMAGECONVERTERIMPL_H