svgtopt/SVG/SVGImpl/src/SVGSolidColorElementImpl.cpp
changeset 0 d46562c3d99d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtopt/SVG/SVGImpl/src/SVGSolidColorElementImpl.cpp	Thu Jan 07 16:19:02 2010 +0200
@@ -0,0 +1,258 @@
+/*
+* 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:  SVG Implementation source file
+ *
+*/
+
+
+// INCLUDE FILES
+#include "SVGSolidColorElementImpl.h"
+#include "SVGFloatCssValueImpl.h"
+#include "SVGDocumentImpl.h"
+#include "SVGSchemaData.h"
+
+_LIT(SOLIDOPACITY, "solid-opacity");
+_LIT(INHERIT, "inherit");
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+CSvgSolidColorElementImpl* CSvgSolidColorElementImpl::NewL(const TUint8 aElemID,
+																   CSvgDocumentImpl* aDoc )
+	{
+    CSvgSolidColorElementImpl *self = new (ELeave) CSvgSolidColorElementImpl(aDoc);
+    CleanupStack::PushL(self);
+    self->ConstructL(aElemID);
+    CleanupStack::Pop(self);
+    return self;
+	}
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+CSvgSolidColorElementImpl* CSvgSolidColorElementImpl::NewLC(  const TUint8 aElemID,
+                                                     CSvgDocumentImpl* aDoc )
+    {
+    CSvgSolidColorElementImpl*  self    = new ( ELeave )
+                                      CSvgSolidColorElementImpl( aDoc );
+    CleanupStack::PushL( self );
+    self->ConstructL(  aElemID );
+
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Symbian default constructor that can leave.
+// ---------------------------------------------------------------------------
+void CSvgSolidColorElementImpl::ConstructL(const TUint8 aElemID)
+    {
+    CSvgElementImpl::InitializeL( aElemID );
+
+    iSvgStyleProperties = new(ELeave) RPointerArray<CCssValue>(KCSS_MAX_ATTR);
+    User::LeaveIfError( iSvgStyleProperties->Append( NULL ) );
+    iSvgStyleProperties->Remove( 0 );
+
+    iSvgUriReferenceImpl = CSvgUriReferenceImpl::NewL();
+    iSvgTransformable = CSvgTransformableImpl::NewL();
+
+    }
+// ---------------------------------------------------------------------------
+//  C++ default constructor
+// ---------------------------------------------------------------------------
+
+CSvgSolidColorElementImpl::CSvgSolidColorElementImpl( CSvgDocumentImpl* aDoc )
+    {
+    SetOwnerDocument(aDoc);
+
+    iSolidOpacity = TFloatFixPt(1);
+
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+CSvgSolidColorElementImpl::~CSvgSolidColorElementImpl()
+    {
+
+    if ( iSvgStyleProperties )
+        {
+        iSvgStyleProperties->Close();
+        delete iSvgStyleProperties;
+        iSvgStyleProperties = NULL;
+        }
+
+    if ( iSvgUriReferenceImpl )
+        {
+        delete iSvgUriReferenceImpl;
+        iSvgUriReferenceImpl = NULL;
+        }
+
+    }
+
+// ============================ MEMBER FUNCTIONS ========================================
+
+// -----------------------------------------------------------------------------
+// SetAttributeL: The implemented function will be called from CSvgContentHandler.
+// SetAttributeFloatL: The implemented function will be called from CSvgContentHandler.
+//
+// From CSvgElementImpl
+//
+// There will be two attributes been set: solid-color and solid-opacity.
+// These attributes are redundant and are same as fill and fill-opacity
+//
+// Returns: ETrue always in this case.
+// -----------------------------------------------------------------------------
+//
+TInt CSvgSolidColorElementImpl::SetAttributeL( const TDesC& aName,
+                                           const TDesC& aValue )
+    {
+     TFloatFixPt KZero;
+     TFloatFixPt KOne( KFloatFixOne );
+
+    	if(aName == SOLIDOPACITY)
+        {
+        if(aValue == INHERIT)
+            {
+            // inherit does not make any sense since the stop-opacity is
+            //specific to stop element only and a stop element can not have another stop element as
+            //its child.
+            iSolidOpacity = KOne;
+            }
+        else
+            {
+    #ifdef SVG_FLOAT_BUILD
+            iSolidOpacity = TFloatFixPt::ConvertString( aValue );
+            if (!(iSolidOpacity > TFloatFixPt(0) && iSolidOpacity < TFloatFixPt(1)) )
+
+    #else
+            if ( TFloatFixPt::ConvertString (aValue, iSolidOpacity ) != KErrNone )
+    #endif
+                {
+                iSolidOpacity = KOne;
+                }
+            else
+                {
+                if (aValue.Locate('%') != KErrNotFound)
+		 			{
+		 			//if stop opacity was listed as a percentage
+		 			iSolidOpacity = iSolidOpacity / TFloatFixPt(100);
+                    }
+
+                if ( iSolidOpacity < KZero )
+                    iSolidOpacity = KZero;
+                else if ( iSolidOpacity > KOne )
+                    iSolidOpacity = KOne;
+                }
+            }
+
+            //CFloatCssValueImpl* lFloatObject = (CFloatCssValueImpl*)iSvgStyleProperties[KCSS_ATTR_FILL_OPACITY];
+            CFloatCssValueImpl* lFloatObject;
+            this->FindProperty( KCSS_ATTR_FILL_OPACITY, (CCssValue*&)lFloatObject, this );
+            lFloatObject->SetValueL(iSolidOpacity);
+
+
+
+		}
+
+	CSvgElementImpl::SetAttributeL(aName,aValue);
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+TInt CSvgSolidColorElementImpl::GetAttributeFloat(const TInt aNameId, TFloatFixPt& aValue)
+{
+	switch(aNameId)
+	{
+	case KAtrSolidOpacity:
+		aValue = iSolidOpacity;
+		break;
+	default:
+		CSvgElementImpl::GetAttributeFloat(aNameId,aValue);
+		break;
+	}
+
+    return 0;
+
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+TInt CSvgSolidColorElementImpl::SetAttributeFloatL(const TInt aNameId,const TFloatFixPt aValue)
+{
+	switch(aNameId)
+	{
+    case KAtrSolidOpacity:
+        {
+        iSolidOpacity = aValue;
+
+		//set the solid opacity into the fill-opacity here
+//        CFloatCssValueImpl* lFloatObject = (CFloatCssValueImpl*)iSvgStyleProperties[KCSS_ATTR_FILL_OPACITY];
+//        lFloatObject->SetValueL(iSolidOpacity);
+        CFloatCssValueImpl* lFloatObject;
+        this->FindProperty( KCSS_ATTR_FILL_OPACITY, (CCssValue*&)lFloatObject, this );
+        lFloatObject->SetValueL(iSolidOpacity);
+
+        }
+		break;
+
+    default:
+        return CSvgElementImpl::SetAttributeFloatL(aNameId,aValue);
+    }
+
+    return 0;
+}
+
+
+// ---------------------------------------------------------------------------=======
+// ApplyOpacitytoElement: Applies solid-opacity to appropriate element
+// ---------------------------------------------------------------------------=======
+void CSvgSolidColorElementImpl::ApplyOpacitytoElement(CSvgElementImpl* aElement)
+     {
+       CCssValue*  lCssValue = NULL;
+       // get soild-opacity attribute from SolidColor element
+       // solid-opacity is same as fill-opacity attribute
+       this->FindProperty( KCSS_ATTR_FILL_OPACITY, lCssValue, this );
+       if (lCssValue != NULL)
+          {
+          TBool lResult = ETrue;
+          // apply solid-opacity to the element
+          TRAPD( err, lResult = aElement->SetPropertyFloatL( KCSS_ATTR_FILL_OPACITY,
+      	                 ((CFloatCssValueImpl*)lCssValue)->Value()) );
+          if ( err || !lResult )
+             {
+           	#ifdef _DEBUG
+            _LIT( KErrMsg, "CPaintCssValueImpl::Value() Error in SetValueL" );
+             RDebug::Print(KErrMsg);
+            #endif //_DEBUG*/
+             }
+
+           }//
+
+     }
+
+void CSvgSolidColorElementImpl::Print( TBool aIsEncodeOn )
+{
+	if (!aIsEncodeOn)
+	{
+		#ifdef _DEBUG
+		RDebug::Printf("<solidColor/>", this);
+		#endif
+	}
+}
+
+//  End of File