--- /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