diff -r b023a8d2866a -r ea65f74e6de4 photosgallery/controllers/imageviewer/src/glximageviewermanager.cpp --- a/photosgallery/controllers/imageviewer/src/glximageviewermanager.cpp Thu Jul 15 18:39:01 2010 +0300 +++ b/photosgallery/controllers/imageviewer/src/glximageviewermanager.cpp Thu Aug 19 09:55:03 2010 +0300 @@ -26,6 +26,7 @@ #include #include #include +#include _LIT( KPrivateFolder, "\\Private\\" ); _LIT( KGifFileMime, "image/gif" ); @@ -121,6 +122,7 @@ User::Leave(KErrNotSupported); } iImageUri = aFileName.AllocL(); + CreateImageDecoderL(); } // --------------------------------------------------------------------------- @@ -137,6 +139,8 @@ delete iFile; iFile = NULL; + CloseImageDecoder(); + if (iIsPrivateGif) { iManager->DeleteFile(iImageUri->Des()); @@ -208,3 +212,51 @@ } SetImageUriL( filePath ); } + +// --------------------------------------------------------------------------- +// CloseImageDecoder +// --------------------------------------------------------------------------- +// +EXPORT_C void CGlxImageViewerManager::CloseImageDecoder() + { + TRACER("void CGlxImageViewerManager::CloseImageDecoder()"); + if (iImageDecoder) + { + delete iImageDecoder; + iImageDecoder = NULL; + } + } + +// --------------------------------------------------------------------------- +// CreateImageDecoderL +// --------------------------------------------------------------------------- +// +EXPORT_C void CGlxImageViewerManager::CreateImageDecoderL() + { + TRACER("void CGlxImageViewerManager::CreateImageDecoderL()"); + + CloseImageDecoder(); + + TInt err = KErrNone; + if (IsPrivate()) + { + if (&ImageFileHandle()) + { + GLX_DEBUG1("CGlxImageViewerManager::CreateImageDecoderL() FH"); + TRAP(err, iImageDecoder = CImageDecoder::FileNewL( + ImageFileHandle(), ContentAccess::EPeek)); + } + } + else + { + if (ImageUri()) + { + GLX_DEBUG1("CGlxImageViewerManager::CreateImageDecoderL() FN"); + TRAP(err, iImageDecoder = CImageDecoder::FileNewL( + CCoeEnv::Static()->FsSession(), ImageUri()->Des())); + } + } + + GLX_DEBUG2("CGlxImageViewerManager::CreateImageDecoderL() err(%d)", err); + User::LeaveIfError(err); + }