--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/classicui_plat/physics_api/inc/aknphysics.h Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,462 @@
+/*
+* Copyright (c) 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: AknPhysics
+*
+*/
+
+#ifndef C_AKNPHYSICS_H
+#define C_AKNPHYSICS_H
+
+#include <e32base.h>
+
+class MAknPhysicsObserver;
+class CAknPhysicsParameterProvider;
+class CAknPhysicsRestrictor;
+class CAknPhysicsConeObserver;
+class CAknPhysicsEngine;
+class CCoeControl;
+class CAknHighResPeriodic;
+class MTouchFeedback;
+
+
+/**
+ * CAknPhysics
+ *
+ * @lib aknphysics
+ * @since S60 v5.0
+ */
+NONSHARABLE_CLASS( CAknPhysics ) : public CBase
+ {
+
+public:
+
+ /** CAknPhysics action definition */
+ enum TAknPhysicsAction
+ {
+ EAknPhysicsActionNone = 1,
+ EAknPhysicsActionFlicking,
+ EAknPhysicsActionBouncing,
+ EAknPhysicsActionDragging
+ };
+
+
+ /**
+ * Two-phased constructor.
+ * @param aObserver Observer of the physics object.
+ * @param aViewControl Physics view control.
+ */
+ IMPORT_C static CAknPhysics* NewL( MAknPhysicsObserver& aObserver,
+ CCoeControl* aViewControl );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CAknPhysics();
+
+public:
+
+ /**
+ * Physics initialization.
+ *
+ * @since S60 v5.0
+ * @param aWorldSize Physics world size.
+ * @param aViewSize Physics (visible) view size.
+ * @param aLandscape ETrue if physics should work in landscape.
+ */
+ IMPORT_C void InitPhysicsL( const TSize& aWorldSize,
+ const TSize& aViewSize,
+ TBool aLandscape );
+
+ /**
+ * Starts physics simulation and applies drag event. The action is
+ * done only if the drag distance is greater than the drag threshold.
+ * Drag distance is adjusted by physics, if the dragging direction
+ * has been changed during the dragging event.
+ *
+ * @param aDrag Drag distance.
+ * @param aStartTime Dragging start time.
+ * @return ETrue if physics was started and drag was applied.
+ */
+ IMPORT_C TBool StartPhysics( TPoint& aDrag, const TTime& aStartTime );
+
+ /**
+ * Stops physics simulation.
+ *
+ * @since S60 v5.0
+ */
+ IMPORT_C void StopPhysics();
+
+ /**
+ * Returns CAknPhysics action code i.e. which action CAknPhysics
+ * is currently performing.
+ *
+ * @since S60 v5.0
+ * @return TAknPhysicsAction type action code.
+ */
+ IMPORT_C TInt OngoingPhysicsAction() const;
+
+
+ /**
+ * Registers view panning position. Used when view is panned
+ * (dragged).
+ *
+ * @since S60 v5.0
+ * @param aDelta Dragging distance.
+ */
+ IMPORT_C void RegisterPanningPosition( const TPoint& aDelta );
+
+ /**
+ * Sets friction.
+ *
+ * @since S60 v5.0
+ * @param aFriction
+ */
+ IMPORT_C void SetFriction( TReal aFriction );
+
+ /**
+ * Resets friction.
+ *
+ * @since S60 v5.0
+ */
+ IMPORT_C void ResetFriction();
+
+ /**
+ * Returns highlight timeout parameter.
+ *
+ * @since S60 v5.0
+ * @return Highlight timeout.
+ */
+ IMPORT_C TInt HighlightTimeout() const;
+
+ /**
+ * Returns drag threshold parameter.
+ *
+ * @since S60 v5.0
+ * @return Drag threshold.
+ */
+ IMPORT_C TInt DragThreshold() const;
+
+ /**
+ * Returns feature enabled parameter.
+ *
+ * @since S60 v5.0
+ * @return ETrue if kinetic scrolling feature is enabled.
+ */
+ IMPORT_C static TBool FeatureEnabled();
+
+ /**
+ * Returns EFalse if events should not be handled. This is the case if
+ * flick is interrupted via key or pointer event or view is bouncing.
+ *
+ * @since S60 v5.0
+ * @return ETrue if key and pointer events can be handled normally.
+ */
+ IMPORT_C TBool EventHandlingAllowed() const;
+
+ /**
+ * Updates view window control (in case e.g. view control container
+ * window has changed).
+ *
+ * @since S60 v5.0
+ * @param aControl New view control if view control itself has changed.
+ */
+ IMPORT_C void UpdateViewWindowControl( CCoeControl* aControl = NULL );
+
+ /**
+ * Suspends physics simulation, but doesn't reset current force or
+ * velocity. When simulation is suspended, it is possible to change
+ * view position.
+ *
+ * @since S60 v5.2
+ */
+ IMPORT_C void SuspendPhysics();
+
+ /**
+ * Resumes physics simulation with current view position, force
+ * and velocity.
+ *
+ * @since S60 v5.2
+ */
+ IMPORT_C void ResumePhysics();
+
+// internal AknPhysics methods
+
+ /**
+ * Checks if view position needs updating.
+ *
+ * @since S60 v5.0
+ * @internal
+ */
+ void UpdateViewPosition();
+
+ /**
+ * Returns ETrue if physics works in landscape.
+ *
+ * @since S60 v5.0
+ * @internal
+ * @return ETrue if physics works in landscape.
+ */
+ const TBool& Landscape();
+
+ /**
+ * Returns current view size.
+ *
+ * @since S60 v5.0
+ * @internal
+ * @return Current view size.
+ */
+ const TSize& ViewSize();
+
+ /**
+ * Returns current world size.
+ *
+ * @since S60 v5.0
+ * @internal
+ * @return Current world size.
+ */
+ const TSize& WorldSize();
+
+ /**
+ * Returns current surface erp value.
+ *
+ * @since S60 v5.0
+ * @internal
+ * @return Current surface erp value.
+ */
+ TInt SurfaceErp() const;
+
+ /**
+ * Returns current surface cfm value.
+ *
+ * @since S60 v5.0
+ * @internal
+ * @return Current surface cfm value.
+ */
+ TInt SurfaceCfm() const;
+
+ /**
+ * Returns frame delay value.
+ *
+ * @since S60 v5.0
+ * @internal
+ * @return Frame delay.
+ */
+ TInt FrameDelay() const;
+
+ /**
+ * Returns min frame interval value.
+ *
+ * @since S60 v5.0
+ * @internal
+ * @return Min frame interval.
+ */
+ TInt MinFrameInterval() const;
+
+ /**
+ * Draws the view in the current position.
+ */
+ void DrawViewInCurrentPosition();
+
+ /**
+ * Sets the iBounceTactileFeedback flag value.
+ *
+ * @since S60 v5.2
+ * @param aBounceTactileFeedback Whether tactile feedback is to be
+ * produced for bounce or not.
+ */
+ void SetBounceTactileFeedback( TBool aBounceTactileFeedback );
+
+ /**
+ * Checks if view is not drawn during panning
+ * because of high CPU usage
+ *
+ * @since S60 v5.2
+ * @internal
+ */
+ TBool IsPanningDrawOmitted() const;
+
+protected:
+
+ /**
+ * C++ constructor.
+ */
+ CAknPhysics( MAknPhysicsObserver& aObserver );
+
+ /**
+ * Symbian second-phase constructor.
+ */
+ void ConstructL( CCoeControl* aViewControl );
+
+private:
+
+ /**
+ * Physics start.
+ */
+ void StartPhysics();
+
+ /**
+ * Apply drag.
+ *
+ * @param aDrag Dragging distance.
+ * @param aMoveTime Dragging movetime.
+ */
+ void ApplyDrag( TPoint aDrag, TInt aMoveTime );
+
+ /**
+ * Timer callback.
+ */
+ static TInt Simulate(TAny* aSelf);
+
+ /**
+ * Physics simulation function.
+ */
+ void DoSimulation();
+
+ /**
+ * Cancels the physics timer and resets action state.
+ */
+ void CancelPhysicsTimer();
+
+ /**
+ * Updates ongoing action state according to whether physics timer is
+ * active or not and collision status.
+ */
+ void UpdateActionState();
+
+ /**
+ * Returns ETrue if observer view position reveals empty space i.e.
+ * view is about to bounce.
+ *
+ * @return ETrue if observer view position reveals empty space.
+ */
+ TBool ViewAboutToBounce();
+
+ /**
+ * Wrapper method for notifying observer of view position change.
+ *
+ * @param aPosition New view position.
+ * @param aDrawNow @c ETrue to inform the observer that it's
+ * view should be drawn, @c EFalse otherwise,
+ * in which case the observer should only update
+ * the logical position.
+ */
+ void NotifyViewPositionChanged( const TPoint& aPosition,
+ TBool aDrawNow = ETrue );
+
+private: // data
+
+ /**
+ * Simulation timer.
+ */
+ CAknHighResPeriodic* iPhysics; // Own
+
+ /**
+ * Physics observer.
+ */
+ MAknPhysicsObserver& iObserver;
+
+ /**
+ * Current world size.
+ */
+ TSize iWorldSize;
+
+ /**
+ * Current view size.
+ */
+ TSize iViewSize;
+
+ /**
+ * ETrue if physics works in landscape.
+ */
+ TBool iLandscape;
+
+ /**
+ * Ongoing action.
+ */
+ TAknPhysicsAction iOngoingAction;
+
+ /**
+ * Counter to keep track of same successive view positions.
+ */
+ TInt iSamePositionCounter;
+
+ /**
+ * Physics parameter provider.
+ * Own.
+ */
+ CAknPhysicsParameterProvider* iParamProvider;
+
+ /**
+ * Physics restrictor.
+ * Own.
+ */
+ CAknPhysicsRestrictor* iRestrictor;
+
+ /**
+ * CONE observer.
+ * Own.
+ */
+ CAknPhysicsConeObserver* iConeObserver;
+
+ /**
+ * Physics engine.
+ * Own.
+ */
+ CAknPhysicsEngine* iEngine;
+
+ /**
+ * ETrue if maximum flick time exceeded.
+ */
+ TBool iFlickTimeExceeded;
+
+ /**
+ * Handle to the null thread, used for performance monitoring.
+ */
+ RThread iNullThread;
+
+ /**
+ * CPU time used by the null thread after the last view draw.
+ */
+ TInt64 iNullThreadTime;
+
+ /**
+ * Time of the last view draw.
+ */
+ TTime iTimeOfLastDraw;
+
+ /**
+ * Pointer to touch feedback instance
+ * Not own.
+ */
+ MTouchFeedback* iFeedback;
+
+ /**
+ * Flag that indicates whether or not to give tactile feedback when
+ * bouncing.
+ */
+ TBool iBounceTactileFeedback;
+
+ /**
+ * ETrue if a panning frame is not drawn on screen because of
+ * high CPU usage.
+ */
+ TBool iPanningDrawOmitted;
+
+ /**
+ * ETrue if physics simulation is suspended.
+ */
+ TBool iSuspended;
+ };
+
+#endif // C_AKNPHYSICS_H