svgtopt/SVG/SVGImpl/inc/SVGElementImpl.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 04 Oct 2010 01:44:10 +0300
changeset 42 0dbbd0486661
parent 0 d46562c3d99d
permissions -rw-r--r--
Revision: 201037 Kit: 201039

/*
* Copyright (c) 2003 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:  SVG Implementation header file
 *
*/


#ifndef _INC_CSVGELEMENTIMPL_
#define _INC_CSVGELEMENTIMPL_



#include "GfxAffineTransform.h"
#include "SVGColor.h"

#include "SVGTransformableImpl.h"
#include "SVGTestsImpl.h"
#include "SVGLangSpaceImpl.h"
#include "SVGUriReferenceImpl.h"
#include "SVGEventReceiver.h"
#include "SVGEvent.h"

#define SVG_FONTS_INCLUDE // Macro to include SVG FONTS Functionality

class   CGfx2dGc;
class   CSvgTransformListImpl;
class   MSvgTransformList;

#include "SVGXmlElementImpl.h"
#include "SVGTransformable.h"
#include "SVGTests.h"
#include "SVGLangSpace.h"
#include "SVGXmlElementOpt.h"
#include "SVGUriReference.h"

#include "GfxFloatFixPt.h"
#include "GfxAffineTransform.h"
#include "SVGSchemaData.h"

class CCssValue;


const float KGradiansPerDegree = 3.1415926f / 180.0f;

/**
 * Class description goes here.
 *
 *  @lib SVGEngine.lib
 *  @since 1.0
 */



class CSvgElementImpl : public CXmlElementImpl,
                        public MSvgTransformable,
                        public MSvgTests,
                        public MXmlElementOpt,
                        public MSvgLangSpace,
                        public MSvgUriReference,
                        public MSvgEventReceiver

    {
    public:


        virtual TBool  DoAnimProcL(MSvgEvent* aEvent);
        void PointToParent(const TInt aAttrId);
        TBool                       IsInherited(const TInt aAttrId);

        TBool                       HasAnimation();

       TInt32 AnimateTransformMatrixIndexL();

        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual TBool               DrawL( CGfx2dGc* agc,
                                           CSvgElementImpl* aElement );
		/**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
		virtual	TBool StyleInParent(CSvgElementImpl* aElement, TInt aAttrIndex);

        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual void                DrawShapeL( CGfx2dGc* aGc,
                                                MGfxShape& aShape,
                                                CSvgElementImpl* aElement );


        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual void                DrawShapeL( CGfx2dGc* aGc,
                                                CSvgElementImpl* aElement );
        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        void                        PropagateToChildren(CCssValue* aOldvalue,CCssValue* aNewValue, const TInt aNameId);

        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        const TDesC*        Id();


        virtual CGfxGeneralPath* GetPathAttribute(TInt aAttributeId);
        virtual void SetPathAttribute(TInt aSvgAttrId, CGfxGeneralPath* aPathHandle);

        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual TInt                SetIdandXmlbaseL( const TDesC& aPropertyName,
                                                     const TDesC& aValue );


        // need to move to CXmlElementImpl

        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual MXmlElement*        AppendChildL( MXmlElement* aElement, TBool aIsJSR226Element = EFalse );

        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
            virtual TInt                SetAttributeL(  const TDesC&  aName ,
                                                        const TDesC&  aValue  );


        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */

        virtual TInt                RemoveAttribute( const TInt aAttrId );



        // From MXmlElementOpt API

        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual TInt                GetAttributeIntL( const TInt aNameId,
                                                     TInt32& aValue );

        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual TInt                SetAttributeIntL( const TInt aNameId,
                                                      const TInt32 aValue );


        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual TInt                GetAttributeFloat( const TInt aNameId,
                                                       TFloatFixPt& aValue );

        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual TInt                SetAttributeFloatL( const TInt aNameId,
                                                        const TFloatFixPt aValue );


        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual TInt                GetAttributePath( const TInt aNameId,
                                                      CGfxGeneralPath*& aValue );

        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual TInt                SetAttributePathL( const TInt aNameId,
                                                       CGfxGeneralPath* aValue );

        //used in decoder to avoid local copying.
         virtual TInt                SetAttributePathRef( const TInt aNameId,
                                                       CGfxGeneralPath*& aValue );


        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual TInt                GetAttributeDes( const TInt aNameId,
                                                     TPtrC16& aValue );

        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual TInt                SetAttributeDesL( const TInt aNameId,
                                                      const TDesC& aValue );


        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */

        void                        GetSvgStylePropertiesArray( RPointerArray<CCssValue>*& aSvgStyleProperties);

        // From MSvgLocatable/MSvgTransformable

         /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
         TBool                IsTransformable();


        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual void                GetTransform( MSvgTransformList*& aTransformList );


        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual void                SetTransform( MSvgTransformList*& aTransformList );

        virtual void                SetTransformList(TGfxAffineTransform& aTr);


        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual                     const TGfxAffineTransform& GetCTM();


        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual void                SetCTM( TGfxAffineTransform& aTr );


        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual void                GetBBox( TGfxRectangle2D& /*aBbox*/ );

        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual void                GetUnscaledBBox( TGfxRectangle2D& /*aBbox*/ );

        // From MSvgStylable


        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */

        void                                SetPresentationAttribute( const TInt8 aPropertyId,
                                                CCssValue*& aCssValue );

        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
         TBool                      SetPropertyL( const TInt& aAttrId,
                                    const TDesC& aValue);
        /**
         * This method sets a property value that takes a float
         *
         * @since 1.0
         * @param const TInt& (attribute ID), TReal32 (float value)
         * @return TBool
         */
         TBool                        SetPropertyFloatL( const TInt& aAttrId,
                                                TReal32 aValue);
        // From MSvgTests


        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual void                GetRequiredFeatures( const CDesCArrayFlat*& aRequiredFeatures );


        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual void                GetRequiredExtensions( const CDesCArrayFlat*& aRequiredExtensions );


        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual TBool                GetSystemLanguage( const CDesCArrayFlat*& aSystemLanguage );


        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual TBool               HasExtension( const TDesC& aExtension );


        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual TBool               HasFeature( const TDesC& aFeature );

        virtual TBool               HasAnyTests();

        // From MSvgLangSpace.h

        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual const TDesC&        XMLLang();


        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual TInt                SetXMLLangL( const TDesC& aXMLLang );


        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual const TDesC&        XMLSpace();


        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual TInt                SetXMLSpaceL( const TDesC& aXMLSpace );

        // TKC: Shouldn't this be a wrapper to CSVGTransformableImpl


        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual TBool               SetTransform( const TDesC& aAttributeName,
                                                  const TDesC& aValue );

        // TKC Wrapper to CSvgTestsImpl

        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual TBool               SetTestAttributeL( const TDesC& aPropertyName,
                                                       const TDesC& aValue );

        // SSB Wrapper to CSvgLangSpace

        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual TBool               SetLangSpaceAttributeL( const TDesC& aPropertyName,
                                                            const TDesC& aValue );

        // SSB Wrapper to CSvgUriReferenceImpl

        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual TBool               SetXlinkAttributeL( const TDesC& aPropertyName,
                                                        const TDesC& aValue );
        // From MSvgLangSpace.h

        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual const TDesC&        Href();
        
        virtual TDesC*				HrefPointer();
        
        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual const TDesC&        XlinkShow();


        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual                     ~CSvgElementImpl();

        // From MSvgEventReceiver

        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
               
        virtual TBool               ReceiveEventL( MSvgEvent* aEvent);
     
        /**
         * Receives events and generates suitable internal events
         * for engine based on aSubEventMask
         * 
         * @since v3.2
         * @param aEvent - The event of type TSvgEngineEventType
         * @param aSubEventMask - contains the list of interactive events 
         *                        that the element can respond to.
         * @return ETrue if the aEvent is of type TSvgEngineEventType and
         *               event processing needs redraw else EFalse.    
         */                        
          
        virtual TBool               ReceiveEventL( MSvgEvent* aEvent, const TUint16 aSubEventMask );
     
        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual void                ResetReferenceElementL();

        // Internal methods

        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual TSvgColor*           CurrentColor();


        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual void                SetGCL( CGfx2dGc* aGc);


        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual TInt32              AnimateMotionMatrixIndexL();


        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */


        void                        FindProperty( const TInt8 aPropertyId,
                                        CCssValue*& aCssValue,
                                        CSvgElementImpl* aElement );

        void                        FindProperty( const TInt8 aPropertyId,
                                        CCssValue*& aCssValue);
        void                        CreateSvgTestL(const TUint16 aAttrName);

        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        void                        CloneSvgStylePropertiesL( CSvgElementImpl* aNewChild,
                                        CSvgElementImpl* aParentElement);

        TInt                       SetUriRefDesL( const TUint16 aNameId,
                                        const TDesC& aValue );

        /**
         * Return wether an svg element is displayable, such as <rect>, <circle>, or
         * an abstract element, such as <g>, <animate>.
         *
         * @since 1.0
         * @param None
         * @return ETrue is element is viewable.
         */
        virtual TBool               IsViewable() { return EFalse; }

        TBool IsVisible();

		TFloatFixPt GetCurrentScale( );

       virtual void UpdateCTM();
        
        
    protected:
        // Internal methods


        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual void                InitializeL(  TUint8 aElemID );



        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
                                    CSvgElementImpl();



        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual TBool               IsDrawable();


        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */


        TInt                        InitSvgStyleProperties();


    public:

		void 					InitAllSvgStyleProperties(CSvgElementImpl* aElement);
		void 					InitSvgJSRStyleProperties(CSvgElementImpl* aParentElement);
        void					PrintStyleProperties();
        virtual void			Print( TBool aIsEncodeOn ) = 0;

        TBool						GetDefaultAttributeL( const TInt aNameId, CCssValue*& aValue );

            // functions for encoding

        virtual void                    SetRequiredFeatures(  CDesCArrayFlat*& aRequiredFeatures );


        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual void                    SetRequiredExtensions(  CDesCArrayFlat*& aRequiredExtensions );


        /**
         * Need method description
         *
         * @since 1.0
         * @param
         * @return
         */
        virtual void                    SetSystemLanguage(  CDesCArrayFlat*& aSystemLanguage );

        /**
         * Initialize all style property values with NULL.
         *
         * @since 1.0
         * @return none
         */
        void InitSvgStylePropertiesWithNullL();

        virtual void                DeactivateAnimation();

        MXmlElement*                CloneL(MXmlElement* aParentElement);

        void                        ResetReferenceAttrSet();

        void                        Reset(MSvgEvent* aEvent);

        virtual void                ReInitializeAnimation();

        void                        SetIsAnimating( TBool aBool );
        TBool                       IsAnimating();

        void                        SetTurnOff( TBool aBool );
        TBool                       WasTurnedOff();

        void                        SetOverwriteTransforms( TBool aBool );
        TBool                       IsOverwriteTransforms();

        void                        SetAllAttributesAdded( TBool aBool );
        TBool                       AreAllAttributesAdded();

        void                        SetMouseDown( TBool aBool );
        TBool                       IsMouseDown();

        void                        SetMouseIn( TBool aBool );
        TBool                       IsMouseIn();

		TBool						IsAnimatedElement( );
		
	    /**
		 * Check whether the internal event can be generated
		 *
		 * @since v3.2
		 * @param aSubEventMask - The bit field that contains the list of events
		 *                        registered for the element 
		 * @param aEvent - The internal event to be generated
		 * @return ETrue if the element is registered for the aEvent otherwise EFalse.
		 */                                                
		TBool                     CanGenerateInternalEvent(TUint16 aSubEventmask, TSvgEvent aEvent);
		
		TBool                     IsSVGEnginePaused();
    protected:
        void                        CopyL( CSvgElementImpl* aDestElement );

    public:

        // Additive
        RArray<TUint32>*            iAnimateAttrSet;

        TInt                        iAnimateTransformMatrixIndex;

        TInt                        iHasAnimationBase;

    protected:
        // Internal variables

        HBufC*                      iId;

        RPointerArray<CCssValue>*   iSvgStyleProperties;
        CSvgTransformableImpl*      iSvgTransformable;

        CSvgTestsImpl*              iSvgTests;

        CSvgLangSpaceImpl*          iSvgLangSpace;

        CSvgUriReferenceImpl*       iSvgUriReferenceImpl;

    private:
        // Enumeration for boolean bits:  boolean variables use bitfield to reduce memory usage
        enum TElementBooleanBits
        {
            KAnimatingBit           = 0x00000001,
            KWasTurnedOffBit        = 0x00000002,
            KOverwriteTransformsBit = 0x00000004,
            KAllAttributesAddedBit  = 0x00000008,
            KMouseDownBit           = 0x00000010,
            KMouseInBit             = 0x00000020

        };

        // variable to track TBool members with bitwise operations
        TUint32                     iBooleanFlags;

    public:
        TInt16                      iAnimateMotionMatrixIndex;

        TUint16                     iReqAttrFlag;






    };

#endif /* _INC_CSVGELEMENTIMPL_ */