diff -r 000000000000 -r 4e91876724a2 photosgallery/viewframework/views/zoomview/inc/glxzoommathsengine.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/photosgallery/viewframework/views/zoomview/inc/glxzoommathsengine.h Thu Dec 17 08:45:44 2009 +0200 @@ -0,0 +1,124 @@ +/* +* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Declaration of Maths Engine +* +*/ + +#ifndef GLXZOOMMATHSENGINE_H_ +#define GLXZOOMMATHSENGINE_H_ + + +// INCLUDE FILES +#include + +#include + +NONSHARABLE_CLASS( TGlxZoomAndPanMathsEngine ) + { +public: + + /** + * Starts panning with keys + *@ param aOffset:Specifies the offset value with which image has to be shifted/panned + */ + void Pan(TPoint aOffset, + TPoint& aViewPortTopLeft, + TGlxPanIncrementType aPanIncrement, + TBool* aThresholdReached = NULL); + + /** + * Starts zooming In/out with slider/Keys + * @ param aMfactor:The Zooming factor with which image has to be zoomed + */ + TInt Zoom( TZoomMode aZoomMode, // Ignored when aExpectedZoomRatio has a value + TInt aExpectedZoomRatio, // only for slider based zoom. = 0 for key based zoom. + TPoint& aViewPortTopLeft, + TSize& aViewPortDimension, + TBool* apThresholdReached = NULL, + TPoint* apZoomFocus = NULL, + TInt aRelativeZoomFactor = 0); + + // Initialize + void Initialize(TPoint& aCenter, + TSize& aScreenSize, + TSize& aImageSize, + TSize& aOriginalZoomedDimensions, + TUint8 aInitialZoomRatio); + + void UpdatePanFactor(TTime& aPanTime); + + // this can have a more generic name. but now it informs only abt screen orientation changes. and hence the name + void OrientationChanged(const TRect& aNewScreenRect); + + TSize ImageVirtualSize(); + + TSize ScreenSize(); + + TInt NewCenterCoordinate(TInt Center, + TInt Offset, + TUint16 HalfScreenDimension, + TInt MinimumCoordinate, + TInt MaximumCoordinate, + TBool *aLimitReached = NULL) ; + + void SetupPanOperation(); + + TPoint LastPanOffset(); + +private: + + /** + * Get the next Zoomlevel on the basis of Zoom In/Out + * @ param aZoomMode:Specifies the zoomode,whether it is Zoom In/Out + * + * We ignore aZoommode and aRelativeZoomFactor if we have a aExpectedZoomRatio. + * We ignore aZoommode if we have a aRelativeZoomFactor. + * + */ + TInt NewZoomRatio( + TInt aExpectedZoomRatio, + TInt aRelativeZoomFactor, + TZoomMode aZoomMode, + TBool *aThresholdReached = NULL) ; + + TPoint iCenter ; + TSize iScreenSize ; + TSize iImageVirtualSize ; + TSize iActualImageSize ; + + // The Purpose of this Variable is to set the No:of pixels, by which it should Pan, + // when the Key is held for long time. + TUint8 iPanFactor ; + // No of continuous pan operations that have happened. This is used in calculating the pan factor + TInt iContinuousPanOperations; + + // These are the thresholds + TUint8 iMaxZoomRatio; + TUint8 iMinZoomRatio ; + TSize iInitialImageSize ; + + // This is what our current zoom ratio is in percentage + TReal iZoomRatio; + + TPoint iPanSpeed; // Pixels Panned per pan operation in vector form. + TPoint iLastPanOffset; // Pixels Panned during the last pan operation. + + // [TODO]:Tsize might not be an exact match for this. using this only since it has exactly all the parameters that are required. + TSize iBorderWidth; + + }; + + + +#endif //GLXZOOMMATHSENGINE