taskswitcher/taskswitcherui/taskswitcherapp/inc/tsfastswapareautils.h
branchRCL_3
changeset 35 3321d3e205b6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/taskswitcherui/taskswitcherapp/inc/tsfastswapareautils.h	Tue Sep 14 20:58:58 2010 +0300
@@ -0,0 +1,220 @@
+/*
+* Copyright (c) 2008 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:  Fast swap area utilities classes
+ *
+*/
+
+#ifndef TSFASTSWAPAREAUTILS_H_
+#define TSFASTSWAPAREAUTILS_H_
+
+#include <e32base.h>
+
+// Forwar class declarations
+class CEikonEnv;
+class TAknLayoutRect;
+class CTsFastSwapTimer;
+class CTsFastSwapArea;
+class CTsFastSwapGrid;
+class CTsFswEntry;
+class CBitmapScaler;
+class CTsFastSwapAreaExtension;
+
+
+/**
+ * Interface for observing timer class.
+ */
+class MTsFastSwapTimerObserver
+    {
+public:
+    /**
+     * Called when timer is completed
+     */
+    virtual void TimerCompletedL( CTsFastSwapTimer* aSource ) = 0;
+    };
+
+
+
+/**
+ * Timer class for handling timed events
+ */
+class CTsFastSwapTimer : public CTimer
+    {
+public:
+    // Constructor
+    CTsFastSwapTimer( MTsFastSwapTimerObserver& aObserver );
+    // Destructor
+    ~CTsFastSwapTimer();
+    // 2nd phase constructor
+    void ConstructL();
+    
+private: // From CTimer
+    void RunL();
+    
+private: // Data
+    MTsFastSwapTimerObserver* iObserver; // not own
+    };
+
+
+
+/**
+ * Asynchronous class for handling screenshots loading
+ * and rescaling to achieve better quality. 
+ */
+class CTsBitmapScaleTask : public CActive
+    {
+public:
+    CTsBitmapScaleTask( CTsFastSwapAreaExtension& aObserver );
+    ~CTsBitmapScaleTask();
+    void StartLD( CFbsBitmap* aSourceBitmap,
+                  CFbsBitmap* aTargetBitmap );
+private:
+    void RunL();
+    void DoCancel();
+private:
+    // Data
+    CTsFastSwapAreaExtension& iObserver;
+    CBitmapScaler* iScaler; // owned
+    CFbsBitmap* iSourceBmp; // owned
+    };
+
+
+
+/**
+ * Utility class containg methods for fast swap area handling.
+ */
+class CTsFastSwapAreaExtension: public CBase
+    {
+
+public:
+    
+    /**
+     * Two-phase constructor.
+     * 
+     * @param aRect Area where fast swap info & list should draw itself.
+     * @param aParent Parent CoeControl. 
+     */
+    static CTsFastSwapAreaExtension* NewL( CTsFastSwapArea& aFastSwapArea,
+                                       CEikonEnv& aEnv);
+
+    /**
+     * @copydoc NewL
+     */
+    static CTsFastSwapAreaExtension* NewLC( CTsFastSwapArea& aFastSwapArea,
+                                        CEikonEnv& aEnv );
+
+    /**
+     * Destructor.
+     */
+    ~CTsFastSwapAreaExtension();
+    
+private:
+
+    /**
+     * @copydoc NewL
+     */
+    void ConstructL();
+
+    /**
+     * C++ constructor.
+     */
+    CTsFastSwapAreaExtension( CTsFastSwapArea& aFastSwapArea,
+                          CEikonEnv& aEnv );
+    
+public:
+    
+    /**
+     * Returns current screen orientation:
+     * 
+     * @return  1 if landscape, 0 if portait 
+     */
+    TInt GetCurrentScreenOrientation();
+    
+    /**
+     * Retrieves variety value, based on current screen resolution.
+     * 
+     * @param  aVariety  result of the function, 0 value means portrait
+     *                   value of 1 indicates landscape
+     * @return  ETrue if screen resolution differs from vale returned by
+     *          layout meta data functions.
+     */
+    TBool GetVariety( TInt& aVariety );
+    
+    /**
+     * Returns rectangles for fast swap area controls
+     */
+    void GetFastSwapAreaRects( RArray<TAknLayoutRect>& aRects );
+    
+    /**
+     * Returns the position of the given item inside grid world rect.
+     * Returns point in the middle of the view rectangle.
+     * 
+     * @param  aItemIdx  index of the item for which calculation will be done
+     */
+    TPoint ItemViewPosition( TInt aItemIdx );
+    
+    /**
+     * Returns index of the shown item, based on the logical
+     * position of the grids view. Item that is closest to the
+     * middle of screen is returned.
+     * 
+     * @param  aViewPos  grids view position. This must be point in
+     *                   the middle of the view rectangle
+     * @return  index of the item
+     */
+    TInt ViewToVisibleItem( const TPoint aViewPos );
+    
+    /**
+     * Launches increasing pop-up feedback.
+     */
+    void LaunchPopupFeedback();
+    
+    /**
+     * Retrieves and returns size for image graphics.
+     */
+    TSize PreferredImageSize();
+    
+    /**
+     * Calculates the correct size if aspect ratio needs to be preserved.
+     */
+    TSize CalculateSizePreserveRatio(const TSize& aTargetAreaSize,
+            const TSize& aSourceSize);
+    
+    /**
+     * Makes a copy of the given bitmap.
+     * Also scaled to the given size, but maintains aspect ratio,
+     * so the size of the returned bitmap may be less then aSize.
+     */
+    CFbsBitmap* CopyBitmapL( TInt aFbsHandle, TSize aSize, TBool aIsScreenshot );
+    
+    /**
+     * Cancels ongoing scale tasks
+     */
+    void CancelScaleTasks();
+    
+    /**
+     * Callback for updating task list.
+     */
+    void ScaleFinished( CTsBitmapScaleTask* iFinishedTask );
+    
+private: // Data
+    
+    CTsFastSwapArea& iFastSwapArea;
+    
+    CEikonEnv& iEnv;
+    
+    RPointerArray<CTsBitmapScaleTask> iScaleTasks;
+    
+    };
+
+#endif /* TSFASTSWAPAREAUTILS_H_ */