diff -r 5f8e5adbbed9 -r 29cda98b007e engine/inc/ImageHandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/engine/inc/ImageHandler.h Thu Feb 25 14:29:19 2010 +0000 @@ -0,0 +1,183 @@ +/* +* Copyright (c) 2007-2010 Sebastian Brannstrom, Lars Persson, EmbedDev AB +* +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: +* EmbedDev AB - initial contribution. +* +* Contributors: +* Example code from OcrExample Copyright (c) 2006 Nokia Corporation. +* Description: +* +*/ + +#ifndef IMAGEHANDLER_H +#define IMAGEHANDLER_H + +#include +#include +#include + +/** + * Listener interface that can be used to listen for image loading operation + * completion events from CImageHandler. + * + * The class is intended to be implemented by a client class that observes the + * loading operation of image handler. The methods in this class + * are called by the image handler (class CImageHandler) when it loads + * an image. + * + * Reference to implementations of this listener interface can be passed as + * a parameter to the constructor of the image handler (class CImageHandler). + */ +class MImageHandlerCallback + { +public: + /** + * Called by CImageHandler when an image has been loaded. + * @param aError Error code given by the CImageHandler or 0 (zero) if the + * image was loaded successfully. + */ + virtual void ImageOperationCompleteL(TInt aError) = 0; + }; + +// ============================================================================ +class TImageStruct + { +public: + CFbsBitmap* iScaledImage; + TSize iScaledSize; + MImageHandlerCallback* iCallBack; + TFileName iFileName; + }; +/** +* CImageHandler +* Image loader and scaler class. +*/ +class CImageHandler : public CActive + { + public: // Constructors and destructor + /** + * Factory method that constructs a CImageHandler by using the NewLC method + * and then cleans the cleanup stack. + * @param aBitmap Bitmap where the image data is loaded to. + * @param aScaledBitmap Bitmap where the scaled image data is loaded to. + * @param aFs File server reference that is used to load the image data. + * @param aCallback Listener interface implementation that is notified + * when an image has been loaded. + * @return pointer to created CImageHandler-object + */ + IMPORT_C static CImageHandler* NewL(RFs& aFs); + + /** + * Factory method that constructs a CImageHandler and leaves it to the + * cleanup stack. + * @param aBitmap Bitmap where the image data is loaded to. + * @param aScaledBitmap Bitmap where the scaled image data is loaded to. + * @param aFs File server reference that is used to load the image data. + * @param aCallback Listener interface implementation that is notified + * when an image has been loaded. + * @return pointer to created CImageHandler-object + */ + IMPORT_C static CImageHandler* NewLC(RFs& aFs); + /** + * Desctructor. Destroys the CImageDecoder used by the image handler. + */ + IMPORT_C virtual ~CImageHandler(); + IMPORT_C CFbsBitmap* ScaledBitmap(); + public: // New functions + + /** + * Loads a the given frame from the given file and scale it to the + * specified size + * @param aFileName Filename wherefrom the bitmap data is loaded. + * @param aSize the target size for the scaling + * @param aSelectedFrame A single frame index in a multi-frame file. + * If not given the first frame is loaded. + */ + IMPORT_C void LoadFileAndScaleL(CFbsBitmap* aScaledBitmap, + const TFileName& aFileName, + const TSize &aSize, + MImageHandlerCallback& aCallback, + TInt aSelectedFrame = 0); + + /** + * Returns the current frame information. + * @return Current frame information. + */ + const TFrameInfo& FrameInfo() const; + private: + /** + * Loads a the given frame from the given file. + * @param aFileName Filename wherefrom the bitmap data is loaded. + * @param aSelectedFrame A single frame index in a multi-frame file. If not given the first frame is loaded. + */ + void LoadFileL(const TFileName& aFileName, TInt aSelectedFrame = 0); + + /** + * Scales a loaded image + * Scales a loaded image to the target size (given in LoadFileAndScaleL or + * FitToScreenL). The scaled image is stored into iScaledBitmap. + */ + void ScaleL(); + + private: // Functions from base classes + + /** + * CActive::RunL() implementation. Called on image load success/failure. + */ + void RunL(); + /** + * CActive::Cancel() implementation. Stops decoding. + */ + void DoCancel(); + + protected: + /** + * C++ default constructor. Just stores the given parameters to + * corresponding attributes. + * @param aScaledBitmap Bitmap where the scaled image data is loaded to. + * @param aFs File server reference that is used to load the image data. + * @param aCallback Listener interface implementation that is notified + * when an image has been loaded. + */ + CImageHandler(RFs& aFs); + /** + * 2nd phase constructor. Adds this object to the active scheduler. + */ + void ConstructL(); + + private: // Data + /** Image decoder that is used to load the image data from file. */ + CImageDecoder *iDecoder; + + /** Image scaler that is used to scale the image */ + CBitmapScaler *iScaler; + + /** Listener that is notified when an image has been loaded. */ + MImageHandlerCallback * iCallback; + + /** Bitmap (owned by the user of this class) where the loaded image is put */ + CFbsBitmap *iBitmap; + + /** Bitmap (owned by the user of this class) where the SCALED image is put */ + CFbsBitmap *iScaledBitmap; + + /** File server session (owned by the user of this class) */ + RFs &iFs; + + /** Current image frame information. */ + TFrameInfo iFrameInfo; + + /** target size for scaled image */ + TSize iSize; + RArray iCallbackQue; + }; + +#endif +