diff -r 000000000000 -r 15bf7259bb7c uiaccelerator_plat/alf_visual_api/inc/alf/alftexturemanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiaccelerator_plat/alf_visual_api/inc/alf/alftexturemanager.h Tue Feb 02 07:56:43 2010 +0200 @@ -0,0 +1,938 @@ +/* +* Copyright (c) 2006 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: Loads textures. +* +*/ + + + +#ifndef C_ALFTEXTUREMANAGER_H +#define C_ALFTEXTUREMANAGER_H + +#include +#include +#include + + +/* Forward declarations */ +class CAlfEnv; +class CAlfTextureProcessor; +class CAlfTextureManager; +class MAlfBitmapProvider; +struct TLoadQueueEntry; +struct TTextureEntry; + +/** + * Special texture id, can be used to let CAlfTextureManager to assign + * ids for textures when those are created or loaded. + * + * @see CAlfTextureManager + */ +const TInt KAlfAutoGeneratedTextureId = 0; + +/** + * Texture release level. + * + * @see Release(), RestoreL() + * @see CAlfTexture::SetPriority() + */ +enum TAlfTexturePriority + { + /** Texture is released only on destruction */ + EAlfTexturePriorityHighest = 0, + + /** Texture is released on the background only if memory is running out */ + EAlfTexturePriorityHigh = 1000, + + /** Texture is released when application goes into background */ + EAlfTexturePriorityNormal= 2000, // = default + + /** Texture is released on the foreground if memory is running out */ + EAlfTexturePriorityLow= 3000 + }; + +/** + * Provides callback methods for getting notifications when texture manager + * finishes asynchronous texture loads. An observer of a CAlfTextureManager. + * + * The class willing to receive these events must implement the methods + * of this interface, and then register itself to the obsevers list of + * the texture manager. + * + * @see CAlfTextureManager + */ +class MAlfTextureLoadingCompletedObserver + { +public: + /** + * Called to notify the observer that loading of a texture has + * been completed. + * @param aTexture Reference to the texture that has been loaded. + * @param aTextureId Id of the texture in the texture manager. Can be used + * to identify the loaded texture, provided that an id was assigned to the + * texture. + * @param aErrorCode KErrNone if the load was successful, otherwise one of + * the system-wide error codes indicating reason why the texture loading + * failed. + * @note One should not commence loading of a new texture in this callback method. + */ + virtual void TextureLoadingCompleted(CAlfTexture& aTexture, + TInt aTextureId, + TInt aErrorCode) = 0; + + }; + +/** + * Provides callback methods for getting notifications of texture manager state + * changes. An observer of a CAlfTextureManager. + * + * @see CAlfTextureManager + */ +class MAlfTextureManagerStateChangedObserver + { +public: + /** + * Called to notify the observer that the state of the texture manager + * has changed. This is called when the state changes between Idle and + * Loading. + * + * @param aManager Texture manager. + */ + virtual void TextureManagerStateChanged(const CAlfTextureManager& aManager) = 0; + + }; + + + +/** + * Provides callback methods for getting notifications when texture manager + * notices a texture which preferrred size is changed. + * + * The class willing to receive these events must implement the methods + * of this interface, and then register itself to the obsevers list of + * the texture manager. + * + */ +class MAlfTextureAutoSizeObserver + { +public: + /** + * Called to notify the observer that the preferred size of some texture + * has been changed. + * + * @param aChangedTexture Texture which preferred size has changed. + * @param aPreferredSize preferred size for texture. + * @return ETrue if observer accepts new size, EFalse if it does not accept or + * doesn't care. + */ + virtual TBool PreferredSizeChanged(const CAlfTexture& aChangedTexture, TSize aPreferredSize) = 0; + }; + + +/** + * CAlfTextureManager is responsible for managing the texture objects used by + * the application. It provides asynchronous loading of image data into + * CAlfTexture instances. The texture manager also manages font textures, + * which can be used for compositing text in text meshes. + * + * The texture manager makes sure that only one copy of each image is loaded + * at a time, so even if the application requests the same image several times + * it is only loaded once. Textures are identified either by an integer ID or + * by their file name. + * + * CAlfTextureManager is owned by CAlfEnv, and should be accessed via a + * CAlfEnv instance. You should never construct your own texturemanagers. + * + * Usage: + * @code + * + * //Get TextureManager + * CAlfTextureManager* textureMgr = &iEnv->TextureManager(); + * + * //Set texturemanager image path + * textureMgr->setImagePath(_L( "C:\\data\\Images\\Pictures\\" ) ); + * + * //Load texture + * CAlfTexture* texture = textureMgr->LoadTextureL( _L("1.bmp"), EAlfTextureFlagDefault, 10 ); + * + * //Unload texture. Here, texture instance itself is not destroyed, only its + * //contents are emptied. + * textureMgr->UnloadTexture(10); + * + * //Update texturecontent without changing the texture istance + * textureMgr->updateTextureFromFile( 10, _L( "2.jpg" ) ); + * + * //Create texture + * //BitmapProviderTest - implements MalfBitMapProvider interface + * //Default implementation of this interface, provided by toolkit is + * //CAlfImageLoaderUtil + * BitmapProviderTest* callback = new (ELeave) BitmapProviderTest(); + * textureMgr->CreateTextureL( 42, *callback, EAlfTextureFlagDefault ); + * + * @endcode + * @lib alfclient.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CAlfTextureManager ): public CActive + { +public: + + /** + * States of a CAlfTextureManager object. + */ + enum TState + { + /** Indicates that the manager is in idle state. A new bitmap loading + operation can be started. */ + EIdle, + + /** Indicates that the manager is loading a bitmap. */ + ELoading + }; + + /* Constructors and destructor. */ + + /** + * Static factory method. Creates a texture appropriate for the current + * renderer. + */ + static CAlfTextureManager* NewL(CAlfEnv& aEnv, TUid aUid); + + /** + * Static factory method. Creates a texture appropriate for the current + * renderer. + */ + static CAlfTextureManager* NewLC(CAlfEnv& aEnv, TUid aUid); + + /** + * Destructor. + */ + virtual ~CAlfTextureManager(); + + + /* Methods. */ + + /** @beginAPI */ + + /** + * Determines the environment the manager belongs to. + */ + IMPORT_C CAlfEnv& Env(); + + /** + * Retuns a texture having given id. Will return a default blank + * texture if the id was not found. + */ + IMPORT_C const CAlfTexture* Texture(TInt aId) const; + + /** + * Returns a texture associated with the given id. + * Will leave if no associated texture exists. + * + * @param aId Id of the retrieved texture. + * @return Pointer to the texture. If the method leaves the return value is undefined. + * @leave KErrNotFound If a texture with the given id does not exist. + */ + IMPORT_C CAlfTexture* TextureL(TInt aId); + + /** + * Sets the path where bitmaps are loaded from. If drive is not included, tries to resolver that + * using CCoeEnv + * + * @param aPath Path for bitmap files. + * @see LoadTexture() Call to load textures from this location. + */ + IMPORT_C void SetImagePathL(const TDesC& aPath); + + /** + * Returns the current image path. + * @see LoadTexture() Call to load textures from this location. + */ + IMPORT_C const TDesC& ImagePath() const; + + /** + * Returns the blank texture. This can be used as a dummy texture if + * no real texture is available. + */ + IMPORT_C const CAlfTexture& BlankTexture() const; + + /** + * Returns the blank texture. This can be used as a dummy texture if + * no real texture is available. Will generate the blank texture + * if the texture is not yet available. + */ + IMPORT_C CAlfTexture& BlankTexture(); + + /** + * Loads an image and makes it a texture. The bitmap files are searched in + * the path specified with SetImagePathL. The format of the loaded image + * must be supported by the system (Series 60) codecs. + * + * LoadTextureL is an asynchronous method, which returns an empty texture + * which is loaded and filled in the background. Register an + * MAlfTextureLoadingCompletedObserver instance to the iLoadedObservers + * array, whose TextureLoadingCompleted() method will be called when + * textures finish loading. The same observer is also called if an error + * occurs during the loading process. The other method is to check if an + * image has been loaded with TextureManagers IsLoaded(). + * + * If a texture with the given id or filename is already loaded the previously + * loaded texture is returned. If texture with the given id has been unloaded + * with UnloadTexture() method then the id is reused by loading a new texture + * on the id. + * + * @param aImageFileName Name of the image bitmap file to load. Relative + * to the image load path. If empty filename is + * used, will check if a filename for the id has + * been defined and load a texture using that resource + * location, if possible. + * @param aFlags Specify flags for the texture loading and + * uploading - how to convert the bitmap to + * texture. + * @param aId Id for the texture. Must be unique. + * KAlfAutoGeneratedTextureId can be used to let + * texture manager automatically decide id. + * + * @note If both image name and id are left undefined + * ("" and zero), will return a blank texture. + * + * @return Reference to the texture. + * + * @see SetImagePathL() To set the image search path. Set to "" to use + * absolute image filenames. + * @see iLoadObservers + * @see MAlfTextureLoadingCompletedObserver::TextureLoadingCompleted() + * @see IsLoaded() + */ + IMPORT_C CAlfTexture& LoadTextureL(const TDesC& aImageFileName, + TAlfTextureFlags aFlags, + TInt aId); + + /** + * Loads an image based on pre-registered id and file name. + * + * @see DefineFileName() + * + * LoadTextureL is an asynchronous method, which returns an empty texture + * which is loaded and filled in the background. Register an + * MAlfTextureLoadingCompletedObserver instance to the iLoadedObservers + * array, whose TextureLoadingCompleted() method will be called when + * textures finish loading. The same observer is also called if an error + * occurs during the loading process. The other method is to check if an + * image has been loaded with TextureManagers IsLoaded(). + * + * If a texture with the given id or filename is already loaded the previously + * loaded texture is returned. If texture with the given id has been unloaded + * with UnloadTexture() method then the id is reused by loading a new texture + * on the id. + * + * @param aId The id of the texture/filename to load. The id must + * have a filename assigned by a call to DefineFileName(). + * + * @param aTextureMaxSize Can be used to define a maximum dimensions for + * the final texture. The image data loaded will be + * scaled (down) and fitted to these dimensions. Use + * zero or below-zero values if size does not matter. + * If the texture size is larger than the texture size + * supported by the GL, the texture will be split to + * multiple segments. + * @param aFlags Specify upload behavior - how to convert the bitmap + * to texture and other load/upload behavior. + * + * @return Reference to the texture. + * + * @see SetImagePathL() To set the image search path. Set to "" to use + * absolute image filenames. + * @see iLoadObservers + * @see MAlfTextureLoadingCompletedObserver::TextureLoadingCompleted() + * @see IsLoaded() + */ + IMPORT_C CAlfTexture& LoadTextureL(const TInt aId, + TSize aTextureMaxSize = TSize(0,0), + TAlfTextureFlags aFlags = EAlfTextureFlagDefault); + + /** + * Loads an image and makes it a texture. The bitmap files are searched in + * the path specified with SetImagePathL. The format of the loaded image + * must be supported by the system (Series 60) codecs. + * + * LoadTextureL is an asynchronous method, which returns an empty texture + * which is loaded and filled in the background. Register an + * MAlfTextureLoadingCompletedObserver instance to the iLoadedObservers + * array, whose TextureLoadingCompleted() method will be called when + * textures finish loading. The same observer is also called if an error + * occurs during the loading process. The other method is to check if an + * image has been loaded with TextureManagers IsLoaded(). + * + * If a texture with the given id or filename is already loaded the previously + * loaded texture is returned. If texture with the given id has been unloaded + * with UnloadTexture() method then the id is reused by loading a new texture + * on the id. + * + * @param aImageName Name of the image bitmap file to load. If + * empty filename is used, will check if a + * filename for the aId has been defined + * (using DefineFileNameL()) and load a texture + * using that resource location, if possible. + * @param aTextureMaxSize Can be used to define a maximum dimensions + * for the final texture. The image data + * loaded will be scaled (down) and fitted to + * these dimensions. Use zero or below-zero + * values if size does not matter. If the + * texture size is larger than the texture + * size supported by the GL, the texture will + * be split to multiple segments. + * @param aFlags Specify load/upload behavior - how to convert + * the bitmap to texture. + * @param aId Id for the texture. Must be unique. + * KAlfAutoGeneratedTextureId can be used to let + * texture manager automatically decide id. + * + * @note If both image name and id are left undefined + * ("" and zero), will return a blank texture. + * + * @return Reference to the texture. + * + * @see SetImagePathL() To set the image search path. Set to "" to use + * absolute image filenames. + * @see iLoadObservers + * @see MAlfTextureLoadingCompletedObserver::TextureLoadingCompleted() + * @see IsLoaded() + */ + IMPORT_C CAlfTexture& LoadTextureL(const TDesC& aImageName, + TSize aTextureMaxSize, + TAlfTextureFlags aFlags, + TInt aId); + + /** + * Creates a texture by calling the ProvideBitmapL method of the passed MAlfBitmapProvider. + * + * If a texture with the given id is already created or loaded the previously + * existing texture is returned. If texture with the given id has been unloaded + * with UnloadTexture() method then the id is reused by loading a new texture + * on the id. + * + * @param aBitmapProvider A bitmap provider that will load the bitmaps for us. The + * ProvideBitmapL method of this will be called, which should + * load or generate the needed bitmaps. + * @param aFlags Specify load/upload behavior - how to convert + * the bitmap to texture. + * @param aId Id for the texture. Must be unique, use + * KAlfAutoGeneratedTextureId to let texture manager + * automatically decide id. + * + * @return Reference to the created texture. + * @leave KErrArgument The bitmap and the mask bitmap are incompatible (different size). + */ + IMPORT_C CAlfTexture& CreateTextureL(TInt aId, + MAlfBitmapProvider* aBitmapProvider, + TAlfTextureFlags aFlags); + + + + /** + * Unloads a texture from memory. + * + * This method releases the texture id and image name for reusing. + * @see LoadTexture(). + * + * @note May unload several textures from memory, if they have the + * sane image name assigned! + */ + IMPORT_C void UnloadTexture(const TDesC& aImageName); + + /** + * Unloads a texture from memory. + * + * This method releases the texture id and image name for reusing. + * + */ + IMPORT_C void UnloadTexture(TInt aId); + + /** + * Updates texture content without changing the texture address. + * + * this is an asynchronous method which is loaded and filled in + * the background. Register an MAlfTextureLoadingCompletedObserver instance + * to the iLoadedObservers array, whose TextureLoadingCompleted() method + * will be called when textures finish loading. The same observer is also + * called if an error occurs during the loading process. The other method + * is to check if an image has been loaded with TextureManagers IsLoaded(). + * + * @param aId Id for the texture. Must be unique. + * + * @param aFileName Name of the image bitmap file to load. Relative + * to the image load path. If filename is empty or + * not given, will check if a filename for the id has + * been defined and load a texture using that resource + * location, if possible. + * @leave If this method leaves the texture is not valid any more. + * + * @see SetImagePathL() To set the image search path. Set to "" to use + * absolute image filenames. + * @see iLoadObservers + * @see MAlfTextureLoadingCompletedObserver::TextureLoadingCompleted() + * @see IsLoaded() + */ + IMPORT_C void UpdateTextureFromFileL(TInt aId, const TDesC* aFileName = NULL); + + /** + * Updates texture content without changing the texture address. + * + * @param aId Id for the texture. + * @param aBitmapProvider A bitmap provider that will load the bitmaps for us. The + * ProvideBitmapL method of this will be called, which should + * load or generate the needed bitmaps. If this is not given + * the current provider is called instead. + * @leave If this method leaves the texture is not valid any more. + */ + IMPORT_C void UpdateTextureFromBitmapL(TInt aId, MAlfBitmapProvider* aBitmapProvider = NULL); + + /** + * Define (register) a texture resource (filename/path) for + * a texture id. Enables calling the LoadTextureL only with an id. + * This resource will then be loaded when LoadTextureL + * is called with the id. + */ + IMPORT_C void DefineFileNameL(TInt aId, const TDesC& aImageName); + + /** + * Prepends the image path to the beginning of the file name, + * if necessary. + */ + IMPORT_C void PrependImagePath(TDes& aFileName); + + /** + * Adds texture loading observer + * + * @param aObserver observer to be added to array + * @leave any system wide error code + */ + IMPORT_C void AddLoadObserverL(MAlfTextureLoadingCompletedObserver* aObserver); + + /** + * Removes texture loading observer, this must be done at latest when observer is being deleted + * + * @param aObserver observer to be removed from array + */ + IMPORT_C void RemoveLoadObserver(MAlfTextureLoadingCompletedObserver* aObserver); + + /** + * Adds texture manager state observer + * + * @param aObserver observer to be added to array + * @leave any system wide error code + */ + IMPORT_C void AddStateObserverL(MAlfTextureManagerStateChangedObserver* aObserver); + + /** + * Removes texture manager state observer, this must be done at latest when observer is being deleted + * + * @param aObserver observer to be removed from array + */ + IMPORT_C void RemoveStateObserver(MAlfTextureManagerStateChangedObserver* aObserver); + + /** + * Returns a reference to the texture processor. + * @return Texture processor + */ + IMPORT_C CAlfTextureProcessor& Processor(); + + /** + * Sets the range where texture manager is allowed to assign new texture ids automatically. + * + * @param aLow Smallest texture id that can be auto assigned. + * @param aHigh Largest texture id that can be auto assigned. + * + */ + IMPORT_C void SetAutomaticTextureIdRange(TInt aLow, TInt aHigh); + + /** + * Checks if a texture exists, has content and is not found + * from the texture load queue. + * + * Mainly meant for file-based textures to check if the + * texture is ready to be used. + * + * Note that textures may have some temporary placeholder + * content already before they have been fully loaded! + * + * For CreateTextureL -based textures it is recommended to use + * CAlfTexture::HasContent() directly. + * + * @see LoadTextureL() + * @see CreateTextureL() + * @see CAlfTexture::HasContent() + * + * @param aImageName Name of the image bitmap file to check. + * ImagePath (if set) will be prepended to + * this name. + * @return ETrue if texture exists, has content and + * is not found from the texture load queue. + */ + IMPORT_C TBool IsLoaded(const TDesC& aImageName) const; + + /** + * Returns the texture ID of the previously loaded file. + * + * @param aImageName Name of the image bitmap file to check. + * ImagePath (if set) will be prepended to + * this name. + * @return Texture ID of the already created texture + * KErrNotFound if the texture has not been created. + */ + IMPORT_C TInt TextureId(const TDesC& aImageName) const; + + /** + * Checks if a texture exists, has content and is not found + * from the texture load queue. + * + * Mainly meant for file-based textures to check if the + * texture is ready to be used. + * + * Note that textures may have some temporary placeholder + * content already before they have been fully loaded! + * + * For CreateTextureL -based textures it is recommended to use + * CAlfTexture::HasContent() directly. + * + * @see LoadTextureL() + * @see CreateTextureL() + * @see CAlfTexture::HasContent() + * + * @param aId Id of the texture. + * @return ETrue if texture exists, has content and is not found + * from the texture load queue. + */ + IMPORT_C TBool IsLoaded(TInt aId) const; + + /** + * Checks if a texture exists, has content and is not found + * from the texture load queue. + * + * Mainly meant for file-based textures to check when the + * texture is ready to be used. + * + * Note that textures may have some temporary placeholder + * content already before they have been fully loaded! + * + * For CreateTextureL -based textures it is recommended to use + * CAlfTexture::HasContent() directly. + * + * @see LoadTextureL() + * @see CreateTextureL() + * @see CAlfTexture::HasContent() + * + * @param aTexture Texture object. + * @return True if texture exists, has content and is not found + * from the texture load queue. + */ + IMPORT_C TBool IsLoaded(const CAlfTexture * aTexture) const; + + /** + * @deprecated Always returns an invalid reference! + * + * Loads a sequence of images and makes it an animated texture. + * + * @param aSkinName Logical name of animated element + * @param aTextureMaxSize Can be used to define a maximum dimensions + * for the final texture. The image data + * loaded will be scaled (down) and fitted to + * these dimensions. Use zero or below-zero + * values if size does not matter. + * @param aFlags Specify load/upload behavior + * @param aId Id for the texture. Must be unique. + * KAlfAutoGeneratedTextureId can be used to let + * texture manager automatically decide id. + * + * @return Reference to the texture. + */ + IMPORT_C CAlfTexture& LoadAnimatedTextureL(const TDesC& aSkinName, + TSize aTextureMaxSize, + TAlfTextureFlags aFlags, + TInt aId); + + /** @endAPI */ + + TUid ManagerUid(); + + /** + * Appends a texture to the texture manager's list of managed textures. + * Ownership of the texture is transferred to the manager; when the manager + * is destroyed, the texture will be destroyed, too. + * + * Checks already existing duplicate textures + * having matching id and leaves with appropriate errorcode if needed. + * + * @param aTexture Texture to transfer to the manager. + * @param aId Id for the texture. Must be unique. + * @leave KErrAlreadyExists if a texture with the given id already exists. + * + */ + void AppendTextureL(CAlfTexture* aTexture); + + /** + * Removes a texture from management. The texture's ownership is + * transferred to the caller. + * + * @param aTexture Texture to remove from management. + */ + void RemoveTexture(CAlfTexture& aTexture); + + /** + * Gets the state of the texture manager. + * + * @return State of the texture manager. + */ + TState State() const; + + /** + * Releases texture manager resources. Releases all textures. + * Called when AlfEnv is restored. + * + * While the release operation is in progress, it is not possible to delete + * CAlfTexture instances or create new ones. After the release has been + * completed, textures can again be deleted and created. + * + * @param aReleasePriorityLevel Priority level. All textures, which + * priority has equal or higher value are released. + * + * @return Were all textures released? If ETrue all texture were released. + * If EFalse, some texture were not released. + * + * @panic ETextureManagerTextureConstructedDuringRelease + * A new CAlfTexture was constructed and added to the texture + * manager during the release operation. + * @panic ETextureManagerTextureDestroyedDuringRelease + * An existing CAlfTexture was destroyed and removed from the texture + * manager during the release operation. + * + * @see RestoreL() + */ + TBool Release( TInt aReleasePriorityLevel = EAlfTexturePriorityNormal ); + + /** + * Restores texture manager resources. Restores the content of all textures + * released in Release(). Called when AlfEnv is restored. + * + * While the restore operation is in progress, it is not possible to delete + * CAlfTexture instances or create new ones. After the restore has been + * completed, textures can again be deleted and created. + * + * @param aRestorePriorityLevel Priority level. All textures, which + * priority has equal or lower value are restored. + * + * @return Were all textures restored? If ETrue all texture were restored. + * If EFalse, some texture were not restored. + * + * @panic ETextureManagerTextureConstructedDuringRestore + * A new CAlfTexture was constructed and added to the texture + * manager during the restore operation. + * @panic ETextureManagerTextureDestroyedDuringRestore + * An existing CAlfTexture was destroyed and removed from the texture + * manager during the restore operation. + * + * @see Release() + */ + TBool RestoreL( TInt aRestorePriorityLevel = EAlfTexturePriorityLow ); + + /** + * Releases and restores skin dependent textures. Usually called after + * system skin has been changed. + */ + void NotifySkinChangedL(); + + /** + * Increases the texture reference count based on texture id. + * + * @param aId the texture id + */ + void IncRefcount(TInt aId); + + /** + * Decreases the texture reference count based on texture id. + * + * @param aId the texture id + */ + void DecRefcount(TInt aId); + + /** + * Reports texture information, i.e. what's the size of texture in + * display. + * @param aTextureId texture identifier. + * @param aSize texture size. + */ + void ReportTextureInfoL( TInt aTextureId, const TSize& aTextureSize ); + + /** + * Adds texture manager texture auto size observer. + * + * @param aObserver observer to be added to array + * @leave any system wide error code + */ + IMPORT_C void AddAutoSizeObserverL(MAlfTextureAutoSizeObserver* aObserver); + + /** + * Removes texture manager texture auto size observer. + * + * @param aObserver observer to be removed from array + */ + IMPORT_C void RemoveAutoSizeObserver(MAlfTextureAutoSizeObserver* aObserver); + +protected: + + /* Constructors. */ + + /** + * Constructor. + */ + CAlfTextureManager(); + + /** + * Second-phase constructor. + */ + void ConstructL(CAlfEnv& aEnv, TUid aUid); + +private: + + /** + * Check the existence of a texture. + * + * @param aFileName File name of the texture. + * + * @return Index of the texture, in the iTextures array, or KErrNotFound if not found. + */ + TInt CheckTexture(const TDesC& aFileName) const; + + /** + * Check if texture exists with given id. + * + * @return Index of the texture, in the iTextures array, or KErrNotFound if not found. + */ + TInt CheckTexture(TInt aId) const; + + /** + * Called when image loading (decoding) operation is complete. + */ + void RunL(); + + /** + * Handles a leave occurring in the request completion event handler RunL(). + */ + TInt RunError(TInt aError); + + /** + * Cancel active object operation. + */ + void DoCancel(); + + /** + * Starts loading next images from the load queue. If scheduling a + * queue entry fails for some reason, the entry is discarded and the + * next queue entry is processed. + */ + void StartLoading(); + + /** + * Cleans up the topmost load queue entry and removes it from the + * load queue. Deletes the decoder, but not the loaded texture entry. + */ + TLoadQueueEntry PopLoadedQueueEntry(); + + /** + * Sets up image decoding and starts to load the first entry in the load + * queue. + * @leave Standard error code if decoder initialization/resource read + * fails. + */ + void DoLoadNextL(); + + /** + * Called when an image has finished loading. Handles + * uploading of the loaded bitmap to the texture. + * + * @param aEntry Entry whose contents have been loaded. + */ + void ImageLoadingCompleteL(TLoadQueueEntry& aEntry); + + /** + * Helper method that notifies observers of texture manager state change. + * + */ + void NotifyStateChange() const; + + /** + * Helper method that notifies observers of texture load completion. + */ + void NotifyTextureLoaded(CAlfTexture& aTexture, + TInt aTextureId, + TInt aErrorCode) const; + + + /** Returns true if the given texture is still in the load queue. */ + TBool IsInLoadQueue(const CAlfTexture* texture) const; + + /** Cancels loading of a texture */ + void CancelLoadingOfTexture(CAlfTexture& aTexture); + + /** Generates unique id for texture */ + TInt GenerateTextureId(); + + /** Releases one texture */ + void ReleaseEntry(const TTextureEntry& aEntry); + + /** Restores one texture */ + void RestoreEntryL(const TTextureEntry& aEntry); + + /** Returns ETrue if this texturemanager is a shared texture manager */ + TBool IsShared(); + + /** Updates texture by re-uploading content */ + void UpdateTextureL(TInt aId, TSize aSize); + + /** Reloads texture from a file */ + void ReloadTextureL(const TDesC& aImageName, + TSize aTextureMaxSize, + TAlfTextureFlags aFlags, + TInt aId); + + /** Recreates texture from a bitmap provider */ + void RecreateTextureL(TInt aId, + MAlfBitmapProvider* aBitmapProvider, + TAlfTextureFlags aFlags); + + /** Starts the texture garbagecollecting, triggered + * automatically when zero refcount textures are + * detected + */ + void StartGarbageCollect(); + + /* Garbace collector callback function */ + static TInt GarbageCollect(TAny* aPtr); + + /* Modifies flags */ + void RemoveFlags(TAlfTextureFlags& aFlags, TInt aFlagsToBeRemoved); + + /* Modifies flags */ + void SetFlags(TAlfTextureFlags& aFlags, TInt aFlagsToBeSet); + +private: + + /* Private data. Owned */ + struct TPrivateData; + TPrivateData* iData; + + }; + +#endif