--- a/photosgallery/viewframework/views/listview/src/glxpreviewthumbnailbinding.cpp Tue Feb 02 10:12:14 2010 +0200
+++ b/photosgallery/viewframework/views/listview/src/glxpreviewthumbnailbinding.cpp Fri Feb 19 22:51:01 2010 +0200
@@ -29,6 +29,9 @@
#include <glxuistd.h> // Fetch context priority def'ns
+#include <ganes/HgDoubleGraphicList.h>
+
+
const TInt KInitialThumbnailsTimeDelay(100000);
const TInt KWaitCount(5);
const TInt KThumbnailStartTimeDelay(250000);
@@ -36,6 +39,57 @@
const TInt KPreviewThumbnailFetchCount(1);
// ----------------------------------------------------------------------------
+// CWaitScheduler::NewL()
+// ----------------------------------------------------------------------------
+CGlxWaitScheduler* CGlxWaitScheduler::NewL()
+ {
+ TRACER("CGlxWaitScheduler::NewL()");
+ CGlxWaitScheduler* self = new( ELeave ) CGlxWaitScheduler();
+ CleanupStack::PushL( self );
+ self->ConstructL( );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+CGlxWaitScheduler::CGlxWaitScheduler()
+: CActive( EPriorityStandard )
+ {
+ TRACER("CGlxWaitScheduler::CGlxWaitScheduler()");
+ CActiveScheduler::Add( this );
+ }
+
+void CGlxWaitScheduler::ConstructL()
+ {
+ TRACER("CGlxWaitScheduler::ConstructL()");
+ // Do nothing
+ }
+
+CGlxWaitScheduler::~CGlxWaitScheduler()
+ {
+ TRACER("CGlxWaitScheduler::~CGlxWaitScheduler()");
+ Cancel();
+ }
+
+void CGlxWaitScheduler::WaitForRequest()
+ {
+ TRACER("CGlxWaitScheduler::WaitForRequest()");
+ SetActive();
+ iScheduler.Start();
+ }
+
+void CGlxWaitScheduler::RunL()
+ {
+ TRACER("CGlxWaitScheduler::RunL()");
+ iScheduler.AsyncStop();
+ }
+
+void CGlxWaitScheduler::DoCancel()
+ {
+ TRACER("CGlxWaitScheduler::DoCancel()");
+ //Do nothing
+ }
+
+// ----------------------------------------------------------------------------
// NewL
// ----------------------------------------------------------------------------
//
@@ -94,6 +148,7 @@
iThumbnailContext->SetDefaultSpec(iGridIconSize.iWidth,
iGridIconSize.iHeight);
iThumbnailContext->AddAttributeL(tnAttr);
+ iBitmapScaler = CBitmapScaler::NewL();
}
// ----------------------------------------------------------------------------
@@ -121,6 +176,12 @@
delete iTimer;
iTimer = NULL;
iPreviewItemCount.Close();
+
+ if(iBitmapScaler)
+ {
+ delete iBitmapScaler;
+ iBitmapScaler = NULL;
+ }
}
// ----------------------------------------------------------------------------
@@ -147,7 +208,8 @@
if (value)
{
CFbsBitmap* bitmap = new (ELeave) CFbsBitmap;
- bitmap->Duplicate( value->iBitmap->Handle());
+ bitmap->Duplicate( value->iBitmap->Handle());
+ //ScaleBitmapToListSizeL(value->iBitmap, bitmap);
iObserver.PreviewTNReadyL(bitmap, NULL,iProgressIndex);
}
}
@@ -179,6 +241,7 @@
{
CFbsBitmap* bitmap = new (ELeave) CFbsBitmap;
bitmap->Duplicate( value->iBitmap->Handle());
+ //ScaleBitmapToListSizeL(value->iBitmap, bitmap);
iObserver.PreviewTNReadyL(bitmap, NULL,iProgressIndex);
}
else
@@ -425,3 +488,24 @@
StartTimer(iPopulateListTNs);
}
+// ----------------------------------------------------------------------------
+// ScaleBitmapToListSizeL
+// ----------------------------------------------------------------------------
+//
+void CGlxPreviewThumbnailBinding::ScaleBitmapToListSizeL(
+ CFbsBitmap* aSrcBitmap, CFbsBitmap* aDestBitmap)
+ {
+ TRACER("CGlxPreviewThumbnailBinding::ScaleBitmapToListSizeL()");
+
+ // Create the bitmap with the list preferred size
+ aDestBitmap->Create(CHgDoubleGraphicList::PreferredImageSize(), EColor16MU);
+
+ CGlxWaitScheduler* waitScheduler = CGlxWaitScheduler::NewL();
+ CleanupStack::PushL( waitScheduler );
+
+ iBitmapScaler->Scale(&waitScheduler->iStatus, *aSrcBitmap,
+ *aDestBitmap, ETrue);
+ waitScheduler->WaitForRequest();
+
+ CleanupStack::PopAndDestroy( waitScheduler );
+ }