diff -r 000000000000 -r 72b543305e3a mobilemessaging/smilui/mediainc/SmilImageRenderer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mobilemessaging/smilui/mediainc/SmilImageRenderer.h Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,458 @@ +/* +* Copyright (c) 2003-2006 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 SmilMediaRenderer, a image renderer. +* +*/ + + + +#ifndef IMAGE_RENDERER_H +#define IMAGE_RENDERER_H + +// INCLUDES +#include +#include +#include +#include +#include + +#include "SmilMediaRendererBase.h" + + +// FORWARD DECLARATIONS +class MSmilFocus; +class MIHLFileImage; +class MIHLBitmap; +class MIHLImageViewer; + +// CLASS DECLARATION + +/** +* CSmilImageRenderer provides SMIL media renderer interface for +* image source files. +* This class is used by SMIL Engine to perform the image rending. +* +* @lib smilmediarenderer.lib +* @since 2.0 +*/ +NONSHARABLE_CLASS(CSmilImageRenderer) : public CSmilMediaRendererBase, + public MIHLViewerObserver, + public MSmilActive, + public MEikScrollBarObserver + { + public: // Methods + + // Constructors and destructor + + /** + * Static constructor. + * + * @since 2.0 + * @param aFileHandle IN Source file handle. + * @param aMedia IN SMIL media object. + * @param aDrmCommon IN DRM Common + * @param aDrmHelper IN DRM Helper + * + * @return Initialized image renderer object. + */ + static CSmilImageRenderer* NewL( RFile& aFileHandle, + MSmilMedia* aMedia, + DRMCommon& aDrmCommon, + CDRMHelper& aDrmHelper ); + + /** + * Destructor. + * + * @since 2.0 + */ + virtual ~CSmilImageRenderer(); + + public: // From MSmilMediaRenderer + + /** + * From MSmilMediaRenderer Called by the SMIL engine to signal + * that the engine is no more referencing renderer. + * + * @since 2.0 + * + * @return void + */ + void Close(); + + /** + * From MSmilMediaRenderer Returns if renderer is visual + * (i.e. draws something to the screen). + * + * @since 2.0 + * + * @return Returns ETrue since the media type is visual. + */ + TBool IsVisual() const; + + /** + * From MSmilMediaRenderer Returns if renderer is non-transparent + * (i.e. fills all the pixels on specied region). + * + * @since 2.0 + * + * @return Returns EFalse if source image is non-transparent + * otherwise returns ETrue. + */ + TBool IsOpaque() const; + + /** + * From MSmilMediaRenderer Returns if renderer is scrollable. + * + * @since 2.0 + * + * @return Returns ETrue if image is scrollable and EFalse if + * it is not. + */ + TBool IsScrollable() const; + + /** + * From MSmilMediaRenderer Returns if renderer is Symbian control. + * + * @since 2.0 + * + * @return Returns ETrue since all the renderers are implemented + * as controls. + */ + TBool IsControl() const; + + /** + * From MSmilMediaRenderer Returns the unscalable size of the + * visual media object. + * + * @since 2.0 + * + * @return Width in pixels. + */ + TInt IntrinsicWidth() const; + + /** + * From MSmilMediaRenderer Returns the unscalable size of the + * visual media object. + * + * @since 2.0 + * + * @return Height in pixels. + */ + TInt IntrinsicHeight() const; + + /** + * From MSmilMediaRenderer Returns the duration of the media object. + * + * @since 2.0 + * + * @return Returns duration of image (Note! zero duration means still + * image). + */ + TSmilTime IntrinsicDuration() const; + + /** + * From MSmilMediaRenderer Called by the engine to signal that + * the media is going to be played soon. + * + * @since 2.0 + * + * @return void + */ + void PrepareMediaL(); + + /** + * From MSmilMediaRenderer Called by the engine to seek the media + * to given position in its local timeline. + * + * @since 2.0 + * + * @param aTime IN Seek position. + * + * @return void + */ + void SeekMediaL( const TSmilTime& aTime ); + + /** + * From MSmilMediaRenderer Called by the engine to start media + * playback and to make visual media visible. + * + * @since 2.0 + * + * @return void + */ + void ShowMediaL(); + + /** + * From MSmilMediaRenderer Called by the engine to stop media + * playback and remove visual media from the screen. + * + * @since 2.0 + * + * @return void + */ + void HideMedia(); + + /** + * From MSmilMediaRenderer Called by the engine to pause media playback. + * + * @since 2.0 + * + * @return void + */ + void FreezeMedia(); + + /** + * From MSmilMediaRenderer Called by the engine to continue paused + * media playback. + * + * @since 2.0 + * + * @return void + */ + void ResumeMedia(); + + /** + * From MSmilMediaRenderer Called by the engine to make a media + * renderer draw its content. + * + * @since 2.0 + * + * @param aGc IN Graphical context performing the drawing. + * @param aRect IN Target rectangle. + * @param aTransitionFilter IN Transition effects if present. + * @param aFocus IN Focus indication if focussed. + * + * @return void + */ + void Draw( CGraphicsContext& aGc, + const TRect& aRect, + CSmilTransitionFilter* aTransitionFilter, + const MSmilFocus* aFocus ); + + /** + * From MSmilMediaRenderer Move scrollable media to given position. + * + * @since 2.0 + * + * @param aDirX IN Amount of pixels to move on X direction. + * @param aDirY IN Amount of pixels to move on Y direction. + * + * @return void + */ + void Scroll( TInt aDirX, TInt aDirY ); + + /** + * from MEikScrollBarObserver + * Handles the scrollevents + */ + void HandleScrollEventL( CEikScrollBar* aScrollBar, + TEikScrollEvent aEventType ); + + protected: // From MSmilActive + + /** + * Called when the requested time has been reached. + * + * @since 3.0 + * + * @param aTime IN Current time, relative to the requesting media obect. + */ + void ActivateL( const TSmilTime& aTime ); + + protected: // From MIHLViewerObserver + + /** + * From MIHLViewerObserver Notifies client when viewer bitmap content is changed. + * Leave situation is handled in ViewerError() callback. + * + * @since 3.0 + * + * @return void + */ + void ViewerBitmapChangedL(); + + /** + * From MIHLViewerObserver Notifies client if error occurs in viewer. + * + * @since 2.0 + * + * @param aError IN System wide error code. + * + * @return void + */ + void ViewerError( TInt aError ); + + private: //Types + + // Scrolling directions. + enum TDirection + { + EScrollUp, + EScrollDown, + EScrollLeft, + EScrollRight + }; + + // Internal states. + enum TState + { + ENotReady = 0, + EReady, + EPlaying, + EPaused, + EHidden, + EError + }; + + private: //Methods + + /** + * C++ default constructor + */ + CSmilImageRenderer(); + + /** + * Constructor. + */ + CSmilImageRenderer( MSmilMedia* aMedia, + DRMCommon& aDrmCommon, + CDRMHelper& aDrmHelper ); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL( RFile& aFileHandle ); + + /** + * Creates viewer and configures it. + */ + void InitializeViewerL(); + + /** + * Converts the specified frame. + */ + void ConvertFrameL( TInt aFrame ); + + /** + * Initializes the scroll bars. + */ + void SetupScrollingL(); + + /** + * Calculate zoom ratio for meet fit attribute. + */ + TReal CalculateMeetRatio( const TSize& aRegion, const TSize& aImage ) const; + + /** + * Calculate zoom ratio for slice fit attribute. + */ + TReal CalculateSliceRatio( const TSize& aRegion, const TSize& aImage ) const; + + /** + * Sets internal state variables + */ + void SetState( TInt aNewState ); + + /** + * Checks if scrolling to specified direction is possible. + */ + TBool IsScrollingPossible( TDirection aDirection ) const; + + /** + * Calculates single scrolling step size to specified direction. + */ + void CalculateScrollStepSize( TDirection aDirection, + TSize& aScrollingStep, TInt aStepSize = 1 ) const; + + /** + * Draws the scrollbar(s) + */ + void DrawScrollBarL(); + + /** + * Scrolls without redrawing the thumbs on the scrollbar + * + * @param aDirX IN Amount of pixels to move on X direction. + * @param aDirY IN Amount of pixels to move on Y direction. + * + * @return void + */ + void ScrollWithOutThumbUpdate( TInt aDirX, TInt aDirY ); + + private: // Data + + // Source image + MIHLFileImage* iSourceImage; + + // Destination bitmap + MIHLBitmap* iDestinationBitmap; + + // Image viewer used as engine + MIHLImageViewer* iEngine; + + // Total duration of the animation. + TSmilTime iTotalLength; + + // Error flag + TInt iError; + + // Specifies whether renderer is scrollable. + TBool iIsScrollable; + + // Scrolling rectangle. + TRect iImageScrollRect; + + // Previous internal state. + TInt iPrevState; + + // Current internal state. + TInt iCurrState; + + // Specifies the time taken by some operation. + TTimeIntervalMicroSeconds iProcessingDelay; + + // Image bitmap size + TSize iSourceSize; + + // Indicates whether image is animation. Value is + // stored because we lose this information when + // iEngine and iSourceImage are deleted for memory + // optimization. + TBool iAnimation; + +#ifdef RD_SCALABLE_UI_V2 + // Scrollbar frame + CEikScrollBarFrame* iSBFrame; + + //indicator whether or not the scrollbar needs to be + // initialised and drawn + TBool iNotYetDrawn; + + //save the thumb position if replay is needed + TInt iThumbPosX; + + //save the thumb position if replay is needed + TInt iThumbPosY; + + //from scrollbar, member because maxvalue of scrollbar + // is uninitialised + TInt iScrollSpanY; + TInt iScrollSpanX; +#endif // RD_SCALABLE_UI_V2 + }; + +#endif // IMAGE_RENDERER_H + +// End of File