svgtopt/SVG/SVGImpl/src/SVGRadialGradientElementImpl.cpp
author hgs
Wed, 03 Nov 2010 18:56:10 +0200
changeset 46 88edb906c587
permissions -rw-r--r--
201044
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
46
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  SVG Implementation source file
hgs
parents:
diff changeset
    15
 *
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
#include "SVGRadialGradientElementImpl.h"
hgs
parents:
diff changeset
    20
#include "SVGDocumentImpl.h"
hgs
parents:
diff changeset
    21
#include "SVGSchemaData.h"
hgs
parents:
diff changeset
    22
#include "SvgStopElementImpl.h"
hgs
parents:
diff changeset
    23
#include "SVGIntCssValueImpl.h"
hgs
parents:
diff changeset
    24
hgs
parents:
diff changeset
    25
#include "GfxAffineTransform.h"
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
_LIT(FX, "fx");
hgs
parents:
diff changeset
    28
_LIT(FY, "fy");
hgs
parents:
diff changeset
    29
hgs
parents:
diff changeset
    30
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    31
//
hgs
parents:
diff changeset
    32
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    33
CSvgRadialGradientElementImpl* CSvgRadialGradientElementImpl::NewL(const TUint8 aElemID,
hgs
parents:
diff changeset
    34
																   CSvgDocumentImpl* aDoc )
hgs
parents:
diff changeset
    35
	{
hgs
parents:
diff changeset
    36
    CSvgRadialGradientElementImpl *self = new (ELeave) CSvgRadialGradientElementImpl(aDoc);
hgs
parents:
diff changeset
    37
    CleanupStack::PushL(self);
hgs
parents:
diff changeset
    38
    self->ConstructL(aElemID);
hgs
parents:
diff changeset
    39
    CleanupStack::Pop(self);
hgs
parents:
diff changeset
    40
    return self;
hgs
parents:
diff changeset
    41
	}
hgs
parents:
diff changeset
    42
hgs
parents:
diff changeset
    43
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    44
//
hgs
parents:
diff changeset
    45
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    46
void CSvgRadialGradientElementImpl::ConstructL(const TUint8 aElemID)
hgs
parents:
diff changeset
    47
	{
hgs
parents:
diff changeset
    48
    CSvgGradientElementImpl::ConstructL( aElemID );
hgs
parents:
diff changeset
    49
hgs
parents:
diff changeset
    50
	}
hgs
parents:
diff changeset
    51
hgs
parents:
diff changeset
    52
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    53
//
hgs
parents:
diff changeset
    54
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    55
CSvgRadialGradientElementImpl::CSvgRadialGradientElementImpl( CSvgDocumentImpl* aDoc ):
hgs
parents:
diff changeset
    56
	CSvgGradientElementImpl(aDoc)
hgs
parents:
diff changeset
    57
	{
hgs
parents:
diff changeset
    58
	iGradientPaint = &iGfxRadialPaint;
hgs
parents:
diff changeset
    59
	}
hgs
parents:
diff changeset
    60
hgs
parents:
diff changeset
    61
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    62
//
hgs
parents:
diff changeset
    63
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    64
TInt CSvgRadialGradientElementImpl::SetAttributeL(const TDesC &aName, const TDesC &aValue)
hgs
parents:
diff changeset
    65
	{
hgs
parents:
diff changeset
    66
	CSvgGradientElementImpl::SetAttributeL( aName, aValue );
hgs
parents:
diff changeset
    67
hgs
parents:
diff changeset
    68
    if(aName == FX)
hgs
parents:
diff changeset
    69
		{
hgs
parents:
diff changeset
    70
        iGfxRadialPaint.iFx=TFloatFixPt::ConvertString(aValue);
hgs
parents:
diff changeset
    71
        
hgs
parents:
diff changeset
    72
        return KErrNone;
hgs
parents:
diff changeset
    73
		}
hgs
parents:
diff changeset
    74
    else if(aName == FY)
hgs
parents:
diff changeset
    75
		{
hgs
parents:
diff changeset
    76
        iGfxRadialPaint.iFy=TFloatFixPt::ConvertString(aValue);
hgs
parents:
diff changeset
    77
hgs
parents:
diff changeset
    78
        return KErrNone;
hgs
parents:
diff changeset
    79
		}
hgs
parents:
diff changeset
    80
hgs
parents:
diff changeset
    81
    return KErrNone;
hgs
parents:
diff changeset
    82
	}
hgs
parents:
diff changeset
    83
hgs
parents:
diff changeset
    84
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    85
//
hgs
parents:
diff changeset
    86
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    87
MGfxPaint *CSvgRadialGradientElementImpl::PaintAttribute()
hgs
parents:
diff changeset
    88
	{
hgs
parents:
diff changeset
    89
	TInt i=0;
hgs
parents:
diff changeset
    90
hgs
parents:
diff changeset
    91
	TFloatFixPt lOffset;
hgs
parents:
diff changeset
    92
	TUint32 lStopColor;
hgs
parents:
diff changeset
    93
	TFloatFixPt	lStopOpacity;
hgs
parents:
diff changeset
    94
hgs
parents:
diff changeset
    95
	if( iStopElementData )
hgs
parents:
diff changeset
    96
		{
hgs
parents:
diff changeset
    97
		iStopElementData->Reset();
hgs
parents:
diff changeset
    98
		}
hgs
parents:
diff changeset
    99
	
hgs
parents:
diff changeset
   100
	TInt svgStopEleArrayCnt = iSvgStopElementArray->Count();
hgs
parents:
diff changeset
   101
    for(i=0;i<svgStopEleArrayCnt;i++)
hgs
parents:
diff changeset
   102
		{
hgs
parents:
diff changeset
   103
		CSvgStopElementImpl* temp = (*iSvgStopElementArray)[i];
hgs
parents:
diff changeset
   104
		
hgs
parents:
diff changeset
   105
		// Check if the element has valid offset value. If the offset had invalid value
hgs
parents:
diff changeset
   106
		// it will be made zero but this function will return FALSE.
hgs
parents:
diff changeset
   107
		if( temp->IsValidElement() )
hgs
parents:
diff changeset
   108
		{
hgs
parents:
diff changeset
   109
		    temp->GetOffset(lOffset);
hgs
parents:
diff changeset
   110
            temp->GetStopColor(lStopColor);
hgs
parents:
diff changeset
   111
		    temp->GetStopOpacity (lStopOpacity);
hgs
parents:
diff changeset
   112
		    TSvgStopData la ;
hgs
parents:
diff changeset
   113
		    la.iOffset = lOffset;
hgs
parents:
diff changeset
   114
		    la.iStopColor = lStopColor;
hgs
parents:
diff changeset
   115
		    la.iStopOpacity = lStopOpacity;
hgs
parents:
diff changeset
   116
	    	TInt error = iStopElementData->Append(la);
hgs
parents:
diff changeset
   117
		    if(error != KErrNone)
hgs
parents:
diff changeset
   118
			{
hgs
parents:
diff changeset
   119
		    	break;
hgs
parents:
diff changeset
   120
			}	
hgs
parents:
diff changeset
   121
		}
hgs
parents:
diff changeset
   122
		}
hgs
parents:
diff changeset
   123
	iGfxRadialPaint.iStopData = 	iStopElementData;
hgs
parents:
diff changeset
   124
hgs
parents:
diff changeset
   125
    const TGfxAffineTransform& tempTransform = GetCTM();
hgs
parents:
diff changeset
   126
	iGradientPaint->iGradientTransform.matrix[0][0] = tempTransform.iM00.iValue;
hgs
parents:
diff changeset
   127
    iGradientPaint->iGradientTransform.matrix[0][1] = tempTransform.iM01.iValue;
hgs
parents:
diff changeset
   128
    iGradientPaint->iGradientTransform.matrix[0][2] = tempTransform.iM02.iValue;
hgs
parents:
diff changeset
   129
	iGradientPaint->iGradientTransform.matrix[1][0] = tempTransform.iM10.iValue;
hgs
parents:
diff changeset
   130
	iGradientPaint->iGradientTransform.matrix[1][1] = tempTransform.iM11.iValue;
hgs
parents:
diff changeset
   131
	iGradientPaint->iGradientTransform.matrix[1][2] = tempTransform.iM12.iValue;
hgs
parents:
diff changeset
   132
hgs
parents:
diff changeset
   133
hgs
parents:
diff changeset
   134
    return &iGfxRadialPaint;
hgs
parents:
diff changeset
   135
	}
hgs
parents:
diff changeset
   136
hgs
parents:
diff changeset
   137
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   138
//
hgs
parents:
diff changeset
   139
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   140
TInt CSvgRadialGradientElementImpl::GetAttributeFloat( const TInt aNameId, TFloatFixPt& aValue )
hgs
parents:
diff changeset
   141
	{
hgs
parents:
diff changeset
   142
		switch ( aNameId )
hgs
parents:
diff changeset
   143
        {
hgs
parents:
diff changeset
   144
        case KAtrCx:
hgs
parents:
diff changeset
   145
			 aValue = iGfxRadialPaint.iCx ;
hgs
parents:
diff changeset
   146
			break;
hgs
parents:
diff changeset
   147
        case KAtrCy:
hgs
parents:
diff changeset
   148
			aValue = iGfxRadialPaint.iCy ;
hgs
parents:
diff changeset
   149
			break;
hgs
parents:
diff changeset
   150
        case KAtrR :
hgs
parents:
diff changeset
   151
			aValue = iGfxRadialPaint.iR ;
hgs
parents:
diff changeset
   152
			break;
hgs
parents:
diff changeset
   153
		case KAtrFx:
hgs
parents:
diff changeset
   154
			aValue = iGfxRadialPaint.iFx;
hgs
parents:
diff changeset
   155
			break;
hgs
parents:
diff changeset
   156
		case KAtrFy:
hgs
parents:
diff changeset
   157
			aValue = iGfxRadialPaint.iFy;
hgs
parents:
diff changeset
   158
			break;
hgs
parents:
diff changeset
   159
        default:
hgs
parents:
diff changeset
   160
			return CSvgElementImpl::GetAttributeFloat( aNameId, aValue );
hgs
parents:
diff changeset
   161
		}
hgs
parents:
diff changeset
   162
hgs
parents:
diff changeset
   163
	return 0;
hgs
parents:
diff changeset
   164
	}
hgs
parents:
diff changeset
   165
hgs
parents:
diff changeset
   166
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   167
//
hgs
parents:
diff changeset
   168
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   169
TInt CSvgRadialGradientElementImpl::SetAttributeFloatL( const TInt aNameId, const TFloatFixPt aValue )
hgs
parents:
diff changeset
   170
	{
hgs
parents:
diff changeset
   171
    switch ( aNameId )
hgs
parents:
diff changeset
   172
        {
hgs
parents:
diff changeset
   173
        case KAtrCx:
hgs
parents:
diff changeset
   174
			iGfxRadialPaint.iCx = aValue;
hgs
parents:
diff changeset
   175
			break;
hgs
parents:
diff changeset
   176
        case KAtrCy:
hgs
parents:
diff changeset
   177
			iGfxRadialPaint.iCy = aValue;
hgs
parents:
diff changeset
   178
			break;
hgs
parents:
diff changeset
   179
        case KAtrR :
hgs
parents:
diff changeset
   180
			iGfxRadialPaint.iR = aValue;
hgs
parents:
diff changeset
   181
			break;
hgs
parents:
diff changeset
   182
		case KAtrFx:
hgs
parents:
diff changeset
   183
			iGfxRadialPaint.iFx= aValue;
hgs
parents:
diff changeset
   184
			break;
hgs
parents:
diff changeset
   185
		case KAtrFy:
hgs
parents:
diff changeset
   186
			iGfxRadialPaint.iFy = aValue;
hgs
parents:
diff changeset
   187
			break;
hgs
parents:
diff changeset
   188
hgs
parents:
diff changeset
   189
        default:
hgs
parents:
diff changeset
   190
			return CSvgElementImpl::SetAttributeFloatL( aNameId, aValue );
hgs
parents:
diff changeset
   191
        }
hgs
parents:
diff changeset
   192
	return 0;
hgs
parents:
diff changeset
   193
	}
hgs
parents:
diff changeset
   194
hgs
parents:
diff changeset
   195
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   196
//
hgs
parents:
diff changeset
   197
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   198
CSvgRadialGradientElementImpl::~CSvgRadialGradientElementImpl()
hgs
parents:
diff changeset
   199
	{
hgs
parents:
diff changeset
   200
hgs
parents:
diff changeset
   201
	}
hgs
parents:
diff changeset
   202
hgs
parents:
diff changeset
   203
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   204
//
hgs
parents:
diff changeset
   205
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   206
void CSvgRadialGradientElementImpl::Print( TBool aIsEncodeOn )
hgs
parents:
diff changeset
   207
{
hgs
parents:
diff changeset
   208
	if (!aIsEncodeOn)
hgs
parents:
diff changeset
   209
	{
hgs
parents:
diff changeset
   210
		#ifdef _DEBUG
hgs
parents:
diff changeset
   211
		RDebug::Printf("<radialGradient gradientUnits=\"hmm\" gradientTransform=\"hmm\" cx=\"%d\" cy=\"%d\" r=\"%d\" fx=\"%d\" fy=\"%d\" spreadMethod=\"hmm\" xlink:href=\"hmm\"/>",
hgs
parents:
diff changeset
   212
		(int)iGfxRadialPaint.iCx, (int)iGfxRadialPaint.iCy, (int)iGfxRadialPaint.iR, (int)iGfxRadialPaint.iFx, (int)iGfxRadialPaint.iFy/*, Href()*/);
hgs
parents:
diff changeset
   213
		#endif
hgs
parents:
diff changeset
   214
	}
hgs
parents:
diff changeset
   215
}