--- 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 <caf/content.h>
#include <driveinfo.h>
#include <coeutils.h>
+#include <coemain.h>
_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);
+ }