--- a/photosgallery/viewframework/views/zoomview/src/glxzoomcontrol.cpp Thu Dec 17 08:45:44 2009 +0200
+++ b/photosgallery/viewframework/views/zoomview/src/glxzoomcontrol.cpp Thu Jan 07 12:46:23 2010 +0200
@@ -195,7 +195,6 @@
iImageVisual->SetScaleMode(CAlfImageVisual::EScaleFitInside);
iEventHandler = CGlxZoomPanEventHandler::NewL(*this);
-
}
// -----------------------------------------------------------------------------
@@ -275,12 +274,13 @@
//This Varaiable updates that we are in zoom state now.
iZoomActive = ETrue;
//To Retrive the image details
- TMPXAttribute thumbNailAttribute(0,0);
+ TMPXAttribute thumbNailAttribute(0,0);
+
TGlxIdSpaceId idspace = iMediaList.IdSpaceId( aFocusIndex );
//Get the texture Created in fullscreen View.
iImageTexture = &(iTextureMgr->CreateNewTextureForMediaL(
- ScreenSize(),aItem, idspace, this ));
- iImageVisual->SetImage(*iImageTexture);
+ ScreenSize(),aItem, idspace, this ));
+ iImageVisual->SetImage(*iImageTexture);
if(iGlxTvOut->IsConnected())
{
@@ -292,52 +292,53 @@
iZoomSliderWidget.AddEventHandler(*this);
iZoomSliderWidget.SetHandleKeyEvent(EFalse);
iZoomSliderModel = (IMulSliderModel*) iZoomSliderWidget.model();
- // Get size, return value tells us if it was available
- //We need this Value to calculate the size of the visual/Layout corresponding to the Zoom factor
- TSize imageSize;
- aItem.GetDimensions( imageSize );
- TSize maxVirtualImageSize = imageSize;
-
- if (KGlxDecodingThreshold < (imageSize.iWidth * imageSize.iHeight))
- {
- TReal areaRatio = TReal(imageSize.iWidth*imageSize.iHeight)/KGlxDecodingThreshold ;
-
- TReal sideRatio;
- Math::Sqrt(sideRatio, areaRatio);
-
+ // Get size, return value tells us if it was available
+ //We need this Value to calculate the size of the visual/Layout corresponding to the Zoom factor
+ TSize imageSize;
+ aItem.GetDimensions( imageSize );
+ TSize maxVirtualImageSize = imageSize;
+
+ if (KGlxDecodingThreshold < (imageSize.iWidth * imageSize.iHeight))
+ {
+ TReal areaRatio = TReal(imageSize.iWidth*imageSize.iHeight)/KGlxDecodingThreshold ;
+
+ TReal sideRatio;
+ Math::Sqrt(sideRatio, areaRatio);
+
+ maxVirtualImageSize.iHeight = imageSize.iHeight / sideRatio ;
+ maxVirtualImageSize.iWidth = imageSize.iWidth / sideRatio ;
+ }
- maxVirtualImageSize.iHeight = imageSize.iHeight / sideRatio ;
- maxVirtualImageSize.iWidth = imageSize.iWidth / sideRatio ;
-
- }
-
- TInt initialZoomRatio = GetIntialZoomLevel(maxVirtualImageSize);
- iZoomSliderModel->SetMinRange(initialZoomRatio);
-
- iEventHandler->SetZoomActivated(ETrue);
- iEventHandler->ActivateZoom(initialZoomRatio,
- maxVirtualImageSize,
- aStartMode,
- iZoomSliderModel->MinRange(),
- iZoomSliderModel->MaxRange(),
- maxVirtualImageSize,
- aZoomFocus);
-
- TRAP_IGNORE(iImageTexture =
- &(iTextureMgr->CreateZoomedTextureL(aItem,thumbNailAttribute,idspace,this)));
-
- //This is for handling the alaram interrupt events,that causes the phone to freeze.
- CEikButtonGroupContainer* cba = CEikButtonGroupContainer::Current();
- if (NULL != cba)
- {
- if (cba->IsVisible())
+ // Now since our maximum size possible is 3 MP. all our zoom percentages will be relative to it.
+ // So our initial zoom ratio will be different and cnsequently our minimum slider value too will change.
+ // Maximum is an
+ TInt initialZoomRatio = GetInitialZoomLevel(maxVirtualImageSize);
+ iZoomSliderModel->SetMinRange(initialZoomRatio);
+
+ iEventHandler->SetZoomActivated(ETrue);
+ iEventHandler->ActivateZoom(initialZoomRatio,
+ maxVirtualImageSize,
+ aStartMode,
+ iZoomSliderModel->MinRange(),
+ iZoomSliderModel->MaxRange(),
+ maxVirtualImageSize,
+ aZoomFocus);
+
+ TRAP_IGNORE(iImageTexture =
+ &(iTextureMgr->CreateZoomedTextureL(aItem,thumbNailAttribute,idspace,this)));
+
+ //This is for handling the alaram interrupt events,that causes the phone to freeze.
+ CEikButtonGroupContainer* cba = CEikButtonGroupContainer::Current();
+ if (NULL != cba)
{
- cba->ActivateL();
+ if (cba->IsVisible())
+ {
+ cba->ActivateL();
+ }
}
}
}
}
-}
// ---------------------------------------------------------------------------
// StartZoomAnimation
// ---------------------------------------------------------------------------
@@ -433,9 +434,35 @@
EXPORT_C void CGlxZoomControl::HandleZoomForegroundEvent(TBool aForeground)
{
TRACER("CGlxZoomControl::HandleZoomForegroundEventL()");
+
+ //Refeed the textures if we are coming back to foreground from background
+ //To Retrive the image details
+ TMPXAttribute thumbNailAttribute(0,0);
+ TInt focusIndex = iMediaList.FocusIndex();
+ TGlxIdSpaceId idspace = iMediaList.IdSpaceId( focusIndex );
+ //Get the texture Created in fullscreen View.
+ TGlxMedia item = iMediaList.Item( focusIndex );
+
if (!aForeground)
{
iEventHandler->CancelZoomPanTimer();
+ iEventHandler->CancelUITimer();
+ iEventHandler->CancelAnimationTimer();
+ }
+ else
+ {
+ // if we already have the decoded zoomed image bitmap use the texture corresponding to that.
+ // Else make do with the fullscreen texture till that happens.
+ TRAP_IGNORE(iImageTexture =
+ iTextureMgr->CreateZoomedTextureL());
+
+ if (NULL == iImageTexture)
+ {
+ iImageTexture = &(iTextureMgr->CreateNewTextureForMediaL(
+ ScreenSize(),item, idspace, this ));
+ }
+
+ iImageVisual->SetImage(*iImageTexture);
}
}
@@ -504,9 +531,9 @@
//decode and show anything. So try and check if the fullscreen texture
//is created by now if not then go to fullscreen view.
- if(aNewTexture == NULL)
+ if(NULL == aNewTexture )
{
- if(iImageTexture == NULL)
+ if(NULL == iImageTexture)
{
TSize TextureSize = ScreenSize();
TInt focus = iMediaList.FocusIndex();
@@ -818,9 +845,13 @@
iEventHandler->SetPreviousEventCode(code);
}
-TInt CGlxZoomControl::GetIntialZoomLevel(TSize& aSize )
+// -----------------------------------------------------------------------------
+// GetInitialZoomLevel
+// -----------------------------------------------------------------------------
+//
+TInt CGlxZoomControl::GetInitialZoomLevel(TSize& aSize )
{
- TRACER("CGlxZoomControl::IntialZoomLevel");
+ TRACER("CGlxZoomControl::InitialZoomLevel");
TRect rect = AlfUtil::ScreenSize();
TUint8 initialZoomLevel;