photosgallery/viewframework/views/zoomview/src/glxzoommathsengine.cpp
branchRCL_3
changeset 47 f9e827349359
parent 35 420f6808bf21
child 56 b023a8d2866a
--- a/photosgallery/viewframework/views/zoomview/src/glxzoommathsengine.cpp	Wed Jun 09 09:41:51 2010 +0300
+++ b/photosgallery/viewframework/views/zoomview/src/glxzoommathsengine.cpp	Mon Jun 21 15:40:32 2010 +0300
@@ -37,8 +37,8 @@
 const TInt KGlxMaxPanUpdateMultiple         =   6       ;
 const TInt KGlxOrigin                       =   0       ;
 
-const TInt KGlxMinRelativeZoomPercent       =   85       ;
-const TInt KGlxMaxRelativeZoomPercent       =   115      ;
+const TInt KGlxMinRelativeZoomPercent       =   70       ;
+const TInt KGlxMaxRelativeZoomPercent       =   130      ;
 
 const TInt KGlxZoomPanInc                   =   10      ; // Min number of pixels panned in one keypress. This value is incremented exponentially by multiples of iPanFactor 
 
@@ -226,7 +226,7 @@
         centerTranslationfactor.iY = (((apZoomFocus->iY - halfScreenHeight  ) * newZoomRatio)/oldZoomRatio) + (halfScreenHeight - apZoomFocus->iY);
         }
 
-    GLX_LOG_INFO1(" Zoom: newZoomRatio = %x.   ", newZoomRatio );
+    GLX_LOG_INFO1(" Zoom: newZoomRatio = %f.   ", newZoomRatio);
     
     TSize imageDimension = TSize(iActualImageSize);
     imageDimension.iWidth =  (imageDimension.iWidth  * newZoomRatio)/100;
@@ -258,37 +258,35 @@
             }
         else
             {
-            TInt weightedBorderHeight = (iBorderWidth.iHeight*(100-((newZoomRatio-iMinZoomRatio)*100/(iMaxZoomRatio-iMinZoomRatio))))/100 ;
             // Is Center positioned such that the top end of the image is inside the 
             // screen. 
-            if( iCenter.iY < (halfScreenHeight - weightedBorderHeight )) 
+            if( iCenter.iY < halfScreenHeight ) 
                 {
-                iCenter.iY = halfScreenHeight - weightedBorderHeight ;
+                iCenter.iY = halfScreenHeight;
                 }
             // Is Center positioned such that the Bottom end of the image is inside the 
             // screen. 
-            else if((iCenter.iY + (halfScreenHeight - weightedBorderHeight ))> imageDimension.iHeight)
+            else if((iCenter.iY + halfScreenHeight)> imageDimension.iHeight)
                 {
                 // if so pan the image so that the edge of the image and screen coincide.
-                iCenter.iY = imageDimension.iHeight - (halfScreenHeight - weightedBorderHeight)  ;
+                iCenter.iY = imageDimension.iHeight - halfScreenHeight ;
                 }
             }
 
         //WIDTH Calculation
-        if((imageDimension.iWidth < iScreenSize.iWidth - BORDER_WIDTH))
+        if(imageDimension.iWidth < iScreenSize.iWidth )
             {
             iCenter.iX=(imageDimension.iWidth/2);
             }
         else
             {
-            TInt weightedBorderWidth = (iBorderWidth.iWidth*(100-((newZoomRatio-iMinZoomRatio)*100/(iMaxZoomRatio-iMinZoomRatio))))/100 ;
-            if( iCenter.iX < (halfScreenWidth - weightedBorderWidth )) 
+            if( iCenter.iX < halfScreenWidth) 
                 {
-                iCenter.iX = (halfScreenWidth - weightedBorderWidth );
+                iCenter.iX = halfScreenWidth;
                 }
-            else if((iCenter.iX + (halfScreenWidth - weightedBorderWidth ))> imageDimension.iWidth)
+            else if((iCenter.iX + halfScreenWidth)> imageDimension.iWidth)
                 {
-                iCenter.iX = imageDimension.iWidth - (halfScreenWidth - weightedBorderWidth ) ;
+                iCenter.iX = imageDimension.iWidth - halfScreenWidth;
                 }
             }
         //Update the TopLeft corner and then re align to the center in the below code
@@ -331,10 +329,9 @@
             // New DIM is less than Old one. and all above conditions fail. 
             // This means that new DIM is smaller than VP DIM. So keep center 'centered'.
             // DIM = dimension
-            else if(iImageVirtualSize.iHeight >  imageDimension.iHeight)      
+            else if(iCenter.iY < halfScreenHeight)      
                 {
-                //This is executed in the Zoom Out Case,In ZoomIn Case the Image is widened.
-                iCenter.iY=(imageDimension.iHeight/2);
+                iCenter.iY=halfScreenHeight;
                 }
             }
 
@@ -356,10 +353,10 @@
                 //Stick the Image to right side and then re-posistion the center 
                 iCenter.iX = imageDimension.iWidth - halfScreenWidth ;
                 }
-            else if(iImageVirtualSize.iWidth >imageDimension.iWidth )
+            else if(iCenter.iX < halfScreenWidth)
                 {
                 //The Image is panned and while zooming out ,the center has to be possistioned to center of the screen.
-                iCenter.iX =(imageDimension.iWidth/2);
+                iCenter.iX = halfScreenWidth;
                 }
             }
         viewPortTopLeft.iX = iCenter.iX - halfScreenWidth;
@@ -417,7 +414,7 @@
         TBool *aThresholdReached)  
     {
     TRACER("TGlxZoomAndPanMathsEngine::NewZoomRatio ");
-    GLX_LOG_INFO1("NewZoomRatio: Old Zoom Ratio = %x .   ",iZoomRatio   );
+    GLX_LOG_INFO1("NewZoomRatio: Old Zoom Ratio = %f       .   ",iZoomRatio   );
     GLX_LOG_INFO1("NewZoomRatio: Expected Zoom Ratio  = %d .   ",aExpectedZoomRatio    );
     GLX_LOG_INFO1("NewZoomRatio: Relative Zoom Factor = %d .   ",aRelativeZoomFactor   );
     
@@ -430,7 +427,7 @@
     else if (aRelativeZoomFactor > 0)
         {
         //Pruning extreme values. Not allowing more than 15% change in zoom ratio.
-        TInt normalizedRelativeZoomFactor = aRelativeZoomFactor ;
+        TReal normalizedRelativeZoomFactor = aRelativeZoomFactor ;
         if (normalizedRelativeZoomFactor < KGlxMinRelativeZoomPercent)
             {
             normalizedRelativeZoomFactor = KGlxMinRelativeZoomPercent;
@@ -439,7 +436,8 @@
             {
             normalizedRelativeZoomFactor = KGlxMaxRelativeZoomPercent;
             }
-        iZoomRatio =  (iZoomRatio * normalizedRelativeZoomFactor)/100 ;
+        iZoomRatio =  (iZoomRatio * ((normalizedRelativeZoomFactor - 100.0F)*0.75F + 100.0F))/100.0F ;
+        GLX_LOG_INFO1("NewZoomRatio: New Zoom Ratio = %f       .   ",iZoomRatio   );
         }
     else
         {
@@ -468,12 +466,12 @@
         iZoomRatio = iMinZoomRatio;
         if (NULL != aThresholdReached)
             {
-            GLX_LOG_INFO1("NewZoomRatio: Min Threshold Reached iInitialZoomRatio = %d .", iMinZoomRatio );
+            GLX_LOG_INFO1("NewZoomRatio: Min Threshold Reached iMinZoomRatio = %d .", iMinZoomRatio );
             *aThresholdReached = ETrue;
             }
         }
 
-    GLX_LOG_INFO1("NewZoomRatio: New Zoom Ratio = %x.   ",iZoomRatio   );
+    GLX_LOG_INFO1("NewZoomRatio: New Zoom Ratio = %f.   ",iZoomRatio  );
     return iZoomRatio;
     }