svgtviewer/SvgtViewerPlugin/SVGCodecInc/SVGCodec.h
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:29:59 +0100
branchRCL_3
changeset 14 20b99a6d6175
parent 0 632761c941a7
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201019 Kit: 201035

/*
* Copyright (c) 2005 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:  SVGT codec for reading the file header & data.
*
*/


#ifndef SVGCODEC_H
#define SVGCODEC_H

#include <imagecodec.h>
#include <imagedata.h>
#include <SVGRequestObserver.h>
#include <SVGListener.h>


class CSvgEngineInterfaceImpl;
class CFbsBitmap;
class TFrameInfo;
class TSVGFrameInfo;
class MSvgError;
class CGulIcon;

// SVG Read codec.
class CSvgReadCodec : public CImageProcessorReadCodec
                       ,public MSvgRequestObserver
                       , public MSvgLoadingListener

    {
public:
    enum TDownloadNeeded 
        {
        // The uri refers to a local image file
        ELocalImageFile,
        // The uri refers to a remote image file
        ERemoteImageFile,
        // The uri doesnt refer to an image file
        ENotAnImageFile
        };
    
    enum TImagesLocation
        {
        EPhoneMemory,
        EMemoryCard
        };
public:

    /**
    * Static constructor. Creates and returns a pointer to CSvgReadCodec
    * @since 3.1
    * @return Pointer to the read codec instance.
    */
    static CSvgReadCodec* NewL(const TSize& aSize);

    /**
    * Destructor.
    */
    virtual ~CSvgReadCodec();

    /**
    * Sets the SVG presentation data
    * @since 3.1
    * @param aFileData  SVG presentation file data
    */
    void SetFileDataL( const TDesC8& aFileData );
    
public: //From MSvgRequestObserver
    void UpdateScreen();

    TBool ScriptCall( const TDesC& aScript, CSvgElementImpl* aCallerElement );

    TInt FetchImage( const TDesC& aUri, RFs& aSession, RFile& aFileHandle ) ;
    TInt CSvgReadCodec::FetchFont( const TDesC& /* aUri */, 
                                    RFs& /* aSession */, RFile& /* aFileHandle */ );

    void GetSmilFitValue( TDes& aSmilValue );

    void UpdatePresentation( const TInt32&  aNoOfAnimation );        

public: //User methods
    void PrepareEngine();
    TSize ContentSize() const;
    void GenerateThumbnailL(CFbsBitmap* aFrame, CFbsBitmap* aFrameMask);
    TDownloadNeeded IsDownloadNeededL( const TDesC& aUri ) const;
    TBool GetLocalFile( const TDesC& aUri, 
                                    TDes& aFileName ,
                                    const TDesC& aRefPath ) const;
    
    HBufC* GetImagesPath( CSvgReadCodec::TImagesLocation aImagesLocation) const;
    
protected:
    // From CImageProcessorReadCodec
    /**
    * Performs initial processing of image data and mask bitmaps.
	* @param	aFrameInfo
	        A reference to a TFrameInfo object.
	* @param	aFrameImageData
	        A reference to a CFrameImageData object.
	* @param	aDisableErrorDiffusion
	        A flag indicating whether error diffusion should be disabled.
	* @param	aDestination
	        The destination bitmap.
	* @param	aDestinationMask
	        The destination mask bitmap.
    */
    virtual void InitFrameL(TFrameInfo& aFrameInfo, CFrameImageData& aFrameImageData, TBool aDisableErrorDiffusion, CFbsBitmap& aDestination, CFbsBitmap* aDestinationMask);
    
	/**
	* Processes the frame data contained in aSrc.
 	* This is a pure virtual function that each derived class must implement.
	* @param  aSrc
	*       A reference to the buffer containing the frame data.
    *
	* @return	The current frame state after processing.
	*/
    
    virtual TFrameState ProcessFrameL(TBufPtr8& aSrc);

private:
    
    /**
    * Precesses the SVG presentation file data
    */
    void DoProcessL();
    
    /**
    * Default constructor
    * @param aSize specifies the thubnail size
    */
    CSvgReadCodec(const TSize& aSize);

    void ConstructL();
    void InitializeEngineL();
    /**
    * Deletes the structures associated with the engine
    * viz. The Frame List, Mask List, Delay Interval List, 
    * The DOM for the content and the Engine Implementation itself
    */
    void DeleteEngine();
// From MSvgLoadingListener    
public:
    /**
     * Query the listener if every element is to be reported or only
     * the children of <svg> tag.
     *
     * @since 1.0
     * @return : ETrue if every element is to be reported, otherwise
     *           only the children of <svg> are reported.
     */
    TBool ReportAllElements();

    /**
     * Query the listener if client will call 'AssignImageData' to decode images
     * separately from parsing.  This is used to avoid non-thread-safe calls in
     * creating bitmap and decoding images, which must be executed in the main thread.
     *
     * @since 1.0
     * @return : ETrue to use 'ImageDataReference' instead of 'FetchImage'.
     */
    TBool WillAssignImageData();

    /**
     * Callback when the href:xlink attribute is encountered for the <image>
     * element.  This method is used to notify clients of image data references
     * needed by <image> element.  This method is called only when 'WillAssignImageData'
     * returns ETrue.
     *
     * @since 1.0
     * @return : none.
     */
    void ImageDataReference( const TDesC& aUri );

    /**
     * Notified when the start of a svg document(<svg> tag) is encountered.
     *
     * @since 1.0
     * @return : For future use.  Value is ignored.
     */
    TBool DocumentStart() ;

    /**
     * Notified when the end of a svg document(</svg> tag) is encountered.
     *
     * @since 1.0
     * @return : For future use.  Value is ignored.
     */
    TBool DocumentEnd();

    /**
     * Notified when the start of a svg element is encountered.
     *
     * @since 1.0
     * @param : aTagName -- name of svg tag
     * @param : aAttributeList -- attribute list.
     * @return : For future use.  Value is ignored.
     */
    TBool ElementStart( const TDesC& aTagName,
                                MSvgAttributeList& aAttributeList);

    /**
     * Notified when the end of a svg element is encountered.
     * activated.
     *
     * @since 1.0
     * @param : aTagName -- name of svg tag
     * @return : For future use.  Value is ignored.
     */
    TBool ElementEnd( const TDesC& aTagName );

    /**
     * Notified when an external data is needed by the svg document,
     * such as a image-file or an embedded svg-file.
     *
     * @since 1.0
     * @param : aUri -- URI string of external data
     * @return : For future use.  Value is ignored.
     */
    TBool ExternalDataRequested( const TDesC& aUri );

    /**
     * Notified when an external data has been retrieved,
     * such as a image-file or an embedded svg-file.
     *
     * @since 1.0
     * @param : aUri -- URI string of external data
     * @return : For future use.  Value is ignored.
     */
    TBool ExternalDataReceived( const TDesC& aUri );

    /**
     * Notified when an external data request has failed.
     *
     * @since 1.0
     * @param : aUri -- URI string of external data
     * @return : For future use.  Value is ignored.
     */
    TBool ExternalDataRequestFailed( const TDesC& aUri );

    /**
     * Notified when an unsupported element is encountered.
     *
     * @since 1.0
     * @param : aTagName -- tag name of element
     * @param : aAttributeList -- attribute list.
     * @return : For future use.  Value is ignored.
     */
    TBool UnsupportedElement( const TDesC& aTagName,
                                      MSvgAttributeList& aAttributeList );

    void ImagesLoaded(TInt aError);
    void GetNewDataPosition(TInt &aPosition, TInt &aLength);
    
private:    // Data
    // Dummy Bitmap used by SVG Engine to render content.
    CFbsBitmap* iSVGTBitMapDummy;

    // SVG Engine Interface Implementation pointer
    CSvgEngineInterfaceImpl* iSvgModule;
    
    //Frame Array
    RPointerArray<CFbsBitmap> iFrameList;
    RPointerArray<CFbsBitmap> iMaskList;
    RArray<TUint> iDelayList;
    
    // SVG Thumbnail Handle
    TInt iThumbnailHandle;
      
    // SVGT content filename descriptor
    HBufC8* iFileData;
    TSize iContentSize;
    MSvgError* iPrepareDomResult;
    
    TBool iImagesPresent;
    
    TBool iImagesLoaded;

    TSize iOriginalSize;
    };

#endif  //SVGCODEC_H