--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imagehandlinglib/Src/CIHLImageViewer.h Tue Jan 26 15:18:05 2010 +0200
@@ -0,0 +1,374 @@
+/*
+* Copyright (c) 2004 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: Implementation of Image Viewer class.
+*
+*/
+
+
+#ifndef CIHLIMAGEVIEWER_H
+#define CIHLIMAGEVIEWER_H
+
+// INCLUDES
+#include <MIHLImageViewer.h>
+#include <e32base.h>
+#include <hal.h>
+
+//FORWARD DECLARATIONS
+class MIHLFileImage;
+class MIHLBitmap;
+class MIHLViewerObserver;
+class CIHLBitmap;
+class CIHLBitmapProcessor;
+
+#define KMinimumInterval 10000
+
+// CLASS DECLARATION
+/**
+* CIHLImageViewer
+*
+* Image Viewer implementation class.
+* @lib IHL.lib
+* @since 3.0
+*/
+NONSHARABLE_CLASS( CIHLImageViewer ) : public CTimer, public MIHLImageViewer
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CIHLImageViewer* NewL( const TSize& aViewerSize,
+ MIHLFileImage& aSource,
+ MIHLBitmap& aDestination,
+ MIHLViewerObserver& aObserver,
+ const TUint32 aOptions );
+
+ /*
+ * Virtual destructor.
+ */
+ virtual ~CIHLImageViewer();
+
+ public: // From base class MIHLViewer
+
+ /*
+ * From MIHLViewer, see base class header.
+ */
+ TIHLInterfaceType Type() const;
+
+ public: // From base class MIHLImageViewer
+
+ /*
+ * From MIHLImageViewer, see base class header.
+ */
+ TBool IsAnimation() const;
+
+ /*
+ * From MIHLImageViewer, see base class header.
+ */
+ void Play();
+
+ /*
+ * From MIHLImageViewer, see base class header.
+ */
+ void Stop();
+
+ /*
+ * From MIHLImageViewer, see base class header.
+ */
+ TBool IsPlaying() const;
+
+ /*
+ * From MIHLImageViewer, see base class header.
+ */
+ TInt AnimationFrameCount() const;
+
+ /*
+ * From MIHLImageViewer, see base class header.
+ */
+ TInt AnimationFrame() const;
+
+ /*
+ * From MIHLImageViewer, see base class header.
+ */
+ TInt SetAnimationFrame( TInt aFrameIndex );
+
+ /*
+ * From MIHLImageViewer, see base class header.
+ */
+ TInt SetViewerSize( const TSize& aViewerSize, TInt srcBitmapScaleFactor = 1 );
+
+ /*
+ * From MIHLImageViewer, see base class header.
+ */
+ TSize ViewerSize() const;
+
+ /*
+ * From MIHLImageViewer, see base class header.
+ */
+ TInt MoveSourceRect( TInt aDx, TInt aDy );
+
+ /*
+ * From MIHLImageViewer, see base class header.
+ */
+ TInt SetSourceRectPosition( const TPoint& aPosition );
+
+ /*
+ * From MIHLImageViewer, see base class header.
+ */
+ TRect SourceRect() const;
+
+ /*
+ * From MIHLImageViewer, see base class header.
+ */
+ TSize SourceSize() const;
+
+ /*
+ * From MIHLImageViewer, see base class header.
+ */
+ TInt SetZoomRatio( TReal aZoomRatio );
+
+ /*
+ * From MIHLImageViewer, see base class header.
+ */
+ TReal ZoomRatio() const;
+
+ /*
+ * From MIHLImageViewer, see base class header.
+ */
+ TReal ZoomToFitRatio() const;
+
+ /*
+ * From MIHLImageViewer, see base class header.
+ */
+ TInt RotateClockwise();
+
+ /*
+ * From MIHLImageViewer, see base class header.
+ */
+ TInt RotateCounterClockwise();
+
+ /*
+ * From MIHLImageViewer, see base class header.
+ */
+ TInt SetRotationAngle( TInt aRotationAngle );
+
+ /*
+ * From MIHLImageViewer, see base class header.
+ */
+ TInt RotationAngle() const;
+
+ /*
+ * From MIHLImageViewer, see base class header.
+ */
+ TInt SetVerticalMirroring( TBool aValue );
+
+ /*
+ * From MIHLImageViewer, see base class header.
+ */
+ TBool VerticalMirroring() const;
+
+ /*
+ * From MIHLImageViewer, see base class header.
+ */
+ TInt SetHorizontalMirroring( TBool aValue );
+
+ /*
+ * From MIHLImageViewer, see base class header.
+ */
+ TBool HorizontalMirroring() const;
+
+ /*
+ * From MIHLImageViewer, see base class header.
+ */
+ void SetFilter( MIHLFilter* aFilter );
+
+ public: // From base class CTimer
+
+ /*
+ * From CTimer, see base class header.
+ */
+ void DoCancel();
+
+ /*
+ * From CTimer, see base class header.
+ */
+ void RunL();
+
+ /*
+ * From CTimer, see base class header.
+ */
+ TInt RunError( TInt aError );
+
+ private: // Private methods
+
+ /*
+ * Start asynchronous processing with new settings.
+ * This is needed always when settings are changed.
+ */
+ TInt ApplySettings();
+
+ /*
+ * Start load process source bitmap.
+ */
+ TInt AsyncLoad();
+
+ /*
+ * Check if process is needed.
+ */
+ TBool NeedAsyncProcess();
+
+ /*
+ * Start processing with new settings.
+ */
+ TInt AsyncProcess();
+
+ /*
+ * No external processing.
+ * Just duplicates source to destination.
+ */
+ TInt SyncProcess();
+
+ /*
+ * Finish processing and notify client.
+ */
+ TInt Finish();
+
+ /*
+ * Update frame index when playing animation.
+ */
+ void UpdateAnimationIndex();
+
+ /*
+ * Complete dummy request. This causes RunL() method to be called.
+ * Needed by state machine.
+ */
+ void SelfComplete();
+
+ /*
+ * Calculate minimum source bitmap size (using fixed loadsizes)
+ * needed by processing and destination bitmap.
+ */
+ TSize MinimumSourceLoadSize();
+
+ /*
+ * Calculate source bitmap rectangle needed by processor.
+ * Rectangle is affected by rotating and mirroring settings etc.
+ */
+ TRect CalculateProcessSourceRect( const TSize& aLoadSize );
+
+ /*
+ * Calculate destination bitmap rectangle needed by processor.
+ * Rectangle is affected by rotating and mirroring settings etc.
+ */
+ TRect CalculateProcessDestinationRect();
+
+ /*
+ * Calculate needed zoomratio for "fit-to-screen" zooming.
+ */
+ void CalculateZoomToFitRatio();
+
+ /*
+ * Calculate source bitmap rectangle and destination bitmap size.
+ * These values needs to be recalculated when rectangle setting is changed.
+ */
+ void CalculateSourceRectAndDestinationSize( );
+
+ /*
+ * Shedules next frame of animation in using aDelay CTimer::Hires().
+ * If this is not the first frame the shedule time is decreased by
+ * previous frame draw time.
+ */
+ void SheduleNextFrame(TTimeIntervalMicroSeconds32 aDelay);
+
+ /*
+ * Assert if source bitmap rectangle and destination bitmpa size are valid.
+ * This method is called by CalculateSourceRectAndDestinationSize()
+ */
+#ifdef _DEBUG
+ void AssertSourceRectAndDestinationSize();
+#endif
+
+ private: // Private constructors
+
+ void ConstructL();
+ CIHLImageViewer( const TSize& aViewerSize,
+ MIHLFileImage& aSource,
+ MIHLBitmap& aDestination,
+ MIHLViewerObserver& aObserver,
+ const TUint32 aOptions );
+
+ private: // Private data types
+
+ enum TViewerState
+ {
+ EInactive,
+ ELoad,
+ EProcess,
+ EAnimation,
+ };
+
+ private: // Data
+
+ // Viewer state
+ TViewerState iViewerState;
+
+ // Ref: Observers
+ MIHLViewerObserver& iObserver;
+
+ // Ref: Viewer source image
+ MIHLFileImage& iSource;
+ TSize iSourceSize;
+ TRect iSourceRect;
+
+ // Ref: Viewer destination bitmap
+ MIHLBitmap& iDestination;
+ TSize iDestinationSize;
+
+ // Viewing settings
+ const TUint32 iOptions;
+ TSize iViewerSize;
+ TReal iZoomRatio;
+ TReal iZoomToFitRatio;
+ TInt iRotationAngle;
+ TBool iVerticalMirroring;
+ TBool iHorizontalMirroring;
+
+ // Own: Bitmap caches
+ CIHLBitmap* iCacheSource;
+ CIHLBitmap* iCacheDestination;
+
+ // Own: Bitmap processor
+ CIHLBitmapProcessor* iProcessor;
+
+ // Animation info
+ TBool iIsPlaying;
+ TInt iAnimationIndex;
+
+ // src bitmap scale factor
+ TInt iSrcBitmapScaleFactor;
+
+ // Animation time tweaking
+ TInt64 iAnimInitFastTime; //clock ticks
+ TInt64 iAnimDrawStartFastTime; //clock tics
+ TInt iAnimLastFrameDrawTime; //micro seconds
+ TInt iTickPeriod; //clock tick period
+ TTimeIntervalMicroSeconds32 iAnimDelay;
+
+
+
+ };
+
+#endif // CIHLIMAGEVIEWER_H
+
+// End of File