svgtopt/SVG/SVGImpl/src/SVGGlyphElementImpl.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
#if !defined(__E32BASE_H__)
hgs
parents:
diff changeset
    20
#include <e32base.h>
hgs
parents:
diff changeset
    21
#endif
hgs
parents:
diff changeset
    22
#include "SVGGlyphElementImpl.h"
hgs
parents:
diff changeset
    23
#include "SVGElementImpl.h"
hgs
parents:
diff changeset
    24
#include "SVGDocumentImpl.h"
hgs
parents:
diff changeset
    25
#include "SVGSchemaData.h"
hgs
parents:
diff changeset
    26
#include "SVGPathDataParser.h"
hgs
parents:
diff changeset
    27
#include "SVGPathElementImpl.h"
hgs
parents:
diff changeset
    28
hgs
parents:
diff changeset
    29
#include "GfxAffineTransform.h"
hgs
parents:
diff changeset
    30
hgs
parents:
diff changeset
    31
#ifdef SVG_FONTS_INCLUDE
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
_LIT( SPACE, " " );
hgs
parents:
diff changeset
    34
_LIT( D, "d" );
hgs
parents:
diff changeset
    35
hgs
parents:
diff changeset
    36
// ==========================================================================
hgs
parents:
diff changeset
    37
// Need method description
hgs
parents:
diff changeset
    38
// ==========================================================================
hgs
parents:
diff changeset
    39
CSvgGlyphElementImpl* CSvgGlyphElementImpl::NewL(  const TUint8 aElemID,
hgs
parents:
diff changeset
    40
												  CSvgDocumentImpl* aDoc )
hgs
parents:
diff changeset
    41
	{
hgs
parents:
diff changeset
    42
	CSvgGlyphElementImpl*   self    = new ( ELeave )
hgs
parents:
diff changeset
    43
									  CSvgGlyphElementImpl( aDoc );
hgs
parents:
diff changeset
    44
	CleanupStack::PushL( self );
hgs
parents:
diff changeset
    45
	self->ConstructL(   aElemID);
hgs
parents:
diff changeset
    46
	CleanupStack::Pop();
hgs
parents:
diff changeset
    47
hgs
parents:
diff changeset
    48
	return self;
hgs
parents:
diff changeset
    49
	}
hgs
parents:
diff changeset
    50
hgs
parents:
diff changeset
    51
// ==========================================================================
hgs
parents:
diff changeset
    52
// Need method description
hgs
parents:
diff changeset
    53
// ==========================================================================
hgs
parents:
diff changeset
    54
CSvgGlyphElementImpl* CSvgGlyphElementImpl::NewLC(  const TUint8 aElemID,
hgs
parents:
diff changeset
    55
												   CSvgDocumentImpl* aDoc )
hgs
parents:
diff changeset
    56
	{
hgs
parents:
diff changeset
    57
	CSvgGlyphElementImpl*   self    = new ( ELeave )
hgs
parents:
diff changeset
    58
									  CSvgGlyphElementImpl( aDoc );
hgs
parents:
diff changeset
    59
	CleanupStack::PushL( self );
hgs
parents:
diff changeset
    60
	self->ConstructL(   aElemID);
hgs
parents:
diff changeset
    61
hgs
parents:
diff changeset
    62
	return self;
hgs
parents:
diff changeset
    63
	}
hgs
parents:
diff changeset
    64
hgs
parents:
diff changeset
    65
// ==========================================================================
hgs
parents:
diff changeset
    66
// Need method description
hgs
parents:
diff changeset
    67
// ==========================================================================
hgs
parents:
diff changeset
    68
void CSvgGlyphElementImpl::ConstructL(  const TUint8 aElemID )
hgs
parents:
diff changeset
    69
	{
hgs
parents:
diff changeset
    70
hgs
parents:
diff changeset
    71
	CSvgElementImpl::InitializeL( aElemID);
hgs
parents:
diff changeset
    72
hgs
parents:
diff changeset
    73
	iOwnedPath = EFalse;
hgs
parents:
diff changeset
    74
	iUnicode = HBufC::NewL( 2 );
hgs
parents:
diff changeset
    75
	*iUnicode = SPACE;
hgs
parents:
diff changeset
    76
	iGlyphName = HBufC::NewL( 0 );
hgs
parents:
diff changeset
    77
	iLangCode = HBufC::NewL( 0 );
hgs
parents:
diff changeset
    78
	iShape = CGfxGeneralPath::NewL();
hgs
parents:
diff changeset
    79
	#ifdef SVG_FLOAT_BUILD
hgs
parents:
diff changeset
    80
  iHorzAdvX = TFloatFixPt( 0 );
hgs
parents:
diff changeset
    81
	#else
hgs
parents:
diff changeset
    82
    iHorzAdvX = TFloatFixPt( 0 , ETrue);
hgs
parents:
diff changeset
    83
	#endif
hgs
parents:
diff changeset
    84
hgs
parents:
diff changeset
    85
    iSvgStyleProperties = new(ELeave) RPointerArray<CCssValue>(KCSS_MAX_ATTR);
hgs
parents:
diff changeset
    86
    User::LeaveIfError( iSvgStyleProperties->Append( NULL ) );
hgs
parents:
diff changeset
    87
iSvgStyleProperties->Remove( 0 );
hgs
parents:
diff changeset
    88
hgs
parents:
diff changeset
    89
hgs
parents:
diff changeset
    90
	}
hgs
parents:
diff changeset
    91
hgs
parents:
diff changeset
    92
hgs
parents:
diff changeset
    93
hgs
parents:
diff changeset
    94
hgs
parents:
diff changeset
    95
hgs
parents:
diff changeset
    96
hgs
parents:
diff changeset
    97
// ==========================================================================
hgs
parents:
diff changeset
    98
// Need method description
hgs
parents:
diff changeset
    99
// ==========================================================================
hgs
parents:
diff changeset
   100
hgs
parents:
diff changeset
   101
CSvgGlyphElementImpl::CSvgGlyphElementImpl( CSvgDocumentImpl* aDoc )
hgs
parents:
diff changeset
   102
    {
hgs
parents:
diff changeset
   103
	SetOwnerDocument(aDoc);
hgs
parents:
diff changeset
   104
    }
hgs
parents:
diff changeset
   105
hgs
parents:
diff changeset
   106
hgs
parents:
diff changeset
   107
// ==========================================================================
hgs
parents:
diff changeset
   108
// Need method description
hgs
parents:
diff changeset
   109
// ==========================================================================
hgs
parents:
diff changeset
   110
CSvgGlyphElementImpl::~CSvgGlyphElementImpl()
hgs
parents:
diff changeset
   111
    {
hgs
parents:
diff changeset
   112
	if ( iUnicode )
hgs
parents:
diff changeset
   113
		{
hgs
parents:
diff changeset
   114
		delete iUnicode;
hgs
parents:
diff changeset
   115
		iUnicode = NULL;
hgs
parents:
diff changeset
   116
		}
hgs
parents:
diff changeset
   117
hgs
parents:
diff changeset
   118
	if ( iGlyphName )
hgs
parents:
diff changeset
   119
		{
hgs
parents:
diff changeset
   120
		delete iGlyphName;
hgs
parents:
diff changeset
   121
		iGlyphName =  NULL;
hgs
parents:
diff changeset
   122
		}
hgs
parents:
diff changeset
   123
hgs
parents:
diff changeset
   124
	if ( iLangCode )
hgs
parents:
diff changeset
   125
		{
hgs
parents:
diff changeset
   126
		delete iLangCode;
hgs
parents:
diff changeset
   127
		iLangCode = NULL;
hgs
parents:
diff changeset
   128
		}
hgs
parents:
diff changeset
   129
hgs
parents:
diff changeset
   130
	if ( iShape )
hgs
parents:
diff changeset
   131
		{
hgs
parents:
diff changeset
   132
		CSvgElementImpl* aChild = (CSvgElementImpl*)FirstChild();
hgs
parents:
diff changeset
   133
		if (!(aChild && aChild->ElemID() == KSvgPathElement))
hgs
parents:
diff changeset
   134
			{
hgs
parents:
diff changeset
   135
			delete iShape;
hgs
parents:
diff changeset
   136
			iShape = NULL;
hgs
parents:
diff changeset
   137
			}
hgs
parents:
diff changeset
   138
		else if ( iOwnedPath )
hgs
parents:
diff changeset
   139
			{
hgs
parents:
diff changeset
   140
			delete iShape;
hgs
parents:
diff changeset
   141
			}
hgs
parents:
diff changeset
   142
		iShape = NULL;
hgs
parents:
diff changeset
   143
		}
hgs
parents:
diff changeset
   144
hgs
parents:
diff changeset
   145
	if ( iSvgStyleProperties )
hgs
parents:
diff changeset
   146
		{
hgs
parents:
diff changeset
   147
		iSvgStyleProperties->Close();
hgs
parents:
diff changeset
   148
		delete iSvgStyleProperties;
hgs
parents:
diff changeset
   149
		iSvgStyleProperties = NULL;
hgs
parents:
diff changeset
   150
		}
hgs
parents:
diff changeset
   151
hgs
parents:
diff changeset
   152
    }
hgs
parents:
diff changeset
   153
hgs
parents:
diff changeset
   154
// ==========================================================================
hgs
parents:
diff changeset
   155
// Need method description
hgs
parents:
diff changeset
   156
// ==========================================================================
hgs
parents:
diff changeset
   157
void CSvgGlyphElementImpl::GetBBox( TGfxRectangle2D& aBbox )
hgs
parents:
diff changeset
   158
    {
hgs
parents:
diff changeset
   159
    iShape->GetBounds( GetCTM(), aBbox );
hgs
parents:
diff changeset
   160
    }
hgs
parents:
diff changeset
   161
hgs
parents:
diff changeset
   162
// ==========================================================================
hgs
parents:
diff changeset
   163
// Need method description
hgs
parents:
diff changeset
   164
// ==========================================================================
hgs
parents:
diff changeset
   165
void CSvgGlyphElementImpl::GetUnscaledBBox( TGfxRectangle2D& aBbox )
hgs
parents:
diff changeset
   166
    {
hgs
parents:
diff changeset
   167
    TGfxAffineTransform identityTx;
hgs
parents:
diff changeset
   168
    iShape->GetBounds( identityTx, aBbox );
hgs
parents:
diff changeset
   169
    }
hgs
parents:
diff changeset
   170
hgs
parents:
diff changeset
   171
// *******************************************************
hgs
parents:
diff changeset
   172
// From SVG DOM
hgs
parents:
diff changeset
   173
hgs
parents:
diff changeset
   174
// ==========================================================================
hgs
parents:
diff changeset
   175
// Need method description
hgs
parents:
diff changeset
   176
// ==========================================================================
hgs
parents:
diff changeset
   177
void CSvgGlyphElementImpl::GetUnicode( TDes& aUnicode )
hgs
parents:
diff changeset
   178
    {
hgs
parents:
diff changeset
   179
    aUnicode = iUnicode->Des();
hgs
parents:
diff changeset
   180
    }
hgs
parents:
diff changeset
   181
hgs
parents:
diff changeset
   182
// ==========================================================================
hgs
parents:
diff changeset
   183
// Need method description
hgs
parents:
diff changeset
   184
// ==========================================================================
hgs
parents:
diff changeset
   185
TFloatFixPt CSvgGlyphElementImpl::GetHorzAdvX()
hgs
parents:
diff changeset
   186
    {
hgs
parents:
diff changeset
   187
    return iHorzAdvX;
hgs
parents:
diff changeset
   188
    }
hgs
parents:
diff changeset
   189
hgs
parents:
diff changeset
   190
hgs
parents:
diff changeset
   191
// *******************************************************
hgs
parents:
diff changeset
   192
// SVG Implementation
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
// Need method description
hgs
parents:
diff changeset
   199
// ==========================================================================
hgs
parents:
diff changeset
   200
void CSvgGlyphElementImpl::SetPath( const TDesC& aPath )
hgs
parents:
diff changeset
   201
    {
hgs
parents:
diff changeset
   202
	TSvgPathDataParser::ParsePathData( aPath, iShape );
hgs
parents:
diff changeset
   203
    }
hgs
parents:
diff changeset
   204
hgs
parents:
diff changeset
   205
hgs
parents:
diff changeset
   206
// *******************************************************
hgs
parents:
diff changeset
   207
// From MXmlElementOpt
hgs
parents:
diff changeset
   208
hgs
parents:
diff changeset
   209
// ==========================================================================
hgs
parents:
diff changeset
   210
// Need method description
hgs
parents:
diff changeset
   211
// ==========================================================================
hgs
parents:
diff changeset
   212
TInt CSvgGlyphElementImpl::GetAttributeFloat( const TInt aNameId,
hgs
parents:
diff changeset
   213
                                               TFloatFixPt& aValue )
hgs
parents:
diff changeset
   214
    {
hgs
parents:
diff changeset
   215
    switch ( aNameId )
hgs
parents:
diff changeset
   216
        {
hgs
parents:
diff changeset
   217
        case KAtrRefX:
hgs
parents:
diff changeset
   218
        aValue = iShape->PointCoordsArray()[0];
hgs
parents:
diff changeset
   219
        break;
hgs
parents:
diff changeset
   220
        case KAtrRefY:
hgs
parents:
diff changeset
   221
        aValue = iShape->PointCoordsArray()[1];
hgs
parents:
diff changeset
   222
        break;
hgs
parents:
diff changeset
   223
        case KAtrHorizAdvX:
hgs
parents:
diff changeset
   224
        aValue = GetHorzAdvX();
hgs
parents:
diff changeset
   225
        break;
hgs
parents:
diff changeset
   226
        default:
hgs
parents:
diff changeset
   227
        return CSvgElementImpl::GetAttributeFloat( aNameId, aValue );
hgs
parents:
diff changeset
   228
        }
hgs
parents:
diff changeset
   229
    return KErrNone;
hgs
parents:
diff changeset
   230
    }
hgs
parents:
diff changeset
   231
hgs
parents:
diff changeset
   232
// ==========================================================================
hgs
parents:
diff changeset
   233
// Need method description
hgs
parents:
diff changeset
   234
// ==========================================================================
hgs
parents:
diff changeset
   235
TInt CSvgGlyphElementImpl::GetAttributePath( const TInt aNameId,
hgs
parents:
diff changeset
   236
                                             CGfxGeneralPath*& aValue )
hgs
parents:
diff changeset
   237
    {
hgs
parents:
diff changeset
   238
    if ( aNameId == KAtrData )
hgs
parents:
diff changeset
   239
        {
hgs
parents:
diff changeset
   240
        aValue = iShape;
hgs
parents:
diff changeset
   241
        }
hgs
parents:
diff changeset
   242
    else
hgs
parents:
diff changeset
   243
        {
hgs
parents:
diff changeset
   244
        aValue = NULL;
hgs
parents:
diff changeset
   245
        return KErrNoAttribute;
hgs
parents:
diff changeset
   246
        }
hgs
parents:
diff changeset
   247
hgs
parents:
diff changeset
   248
    return KErrNone;
hgs
parents:
diff changeset
   249
    }
hgs
parents:
diff changeset
   250
hgs
parents:
diff changeset
   251
// ==========================================================================
hgs
parents:
diff changeset
   252
// Need method description
hgs
parents:
diff changeset
   253
// ==========================================================================
hgs
parents:
diff changeset
   254
TInt CSvgGlyphElementImpl::SetAttributePathL( const TInt aNameId,
hgs
parents:
diff changeset
   255
                                              CGfxGeneralPath* /* aValue */ )
hgs
parents:
diff changeset
   256
    {
hgs
parents:
diff changeset
   257
    if ( aNameId == KAtrData )
hgs
parents:
diff changeset
   258
        {
hgs
parents:
diff changeset
   259
        }
hgs
parents:
diff changeset
   260
    else
hgs
parents:
diff changeset
   261
        {
hgs
parents:
diff changeset
   262
        return KErrNoAttribute;
hgs
parents:
diff changeset
   263
        }
hgs
parents:
diff changeset
   264
hgs
parents:
diff changeset
   265
    return KErrNone;
hgs
parents:
diff changeset
   266
    }
hgs
parents:
diff changeset
   267
hgs
parents:
diff changeset
   268
// ==========================================================================
hgs
parents:
diff changeset
   269
// Need method description
hgs
parents:
diff changeset
   270
// ==========================================================================
hgs
parents:
diff changeset
   271
TInt CSvgGlyphElementImpl::SetAttributePathRef( const TInt aNameId,
hgs
parents:
diff changeset
   272
                                              CGfxGeneralPath*&  aValue  )
hgs
parents:
diff changeset
   273
    {
hgs
parents:
diff changeset
   274
    if ( aNameId == KAtrData )
hgs
parents:
diff changeset
   275
        {
hgs
parents:
diff changeset
   276
		if(iShape)
hgs
parents:
diff changeset
   277
			{
hgs
parents:
diff changeset
   278
			delete iShape;
hgs
parents:
diff changeset
   279
			iShape= NULL;
hgs
parents:
diff changeset
   280
			}
hgs
parents:
diff changeset
   281
		iShape= aValue;
hgs
parents:
diff changeset
   282
hgs
parents:
diff changeset
   283
        }
hgs
parents:
diff changeset
   284
    else
hgs
parents:
diff changeset
   285
        {
hgs
parents:
diff changeset
   286
        return KErrNoAttribute;
hgs
parents:
diff changeset
   287
        }
hgs
parents:
diff changeset
   288
hgs
parents:
diff changeset
   289
    return KErrNone;
hgs
parents:
diff changeset
   290
    }
hgs
parents:
diff changeset
   291
// ==========================================================================
hgs
parents:
diff changeset
   292
// Need method description
hgs
parents:
diff changeset
   293
// ==========================================================================
hgs
parents:
diff changeset
   294
TInt CSvgGlyphElementImpl::GetAttributeDes( const TInt aNameId, TPtrC16& aValue )
hgs
parents:
diff changeset
   295
    {
hgs
parents:
diff changeset
   296
    switch ( aNameId )
hgs
parents:
diff changeset
   297
        {
hgs
parents:
diff changeset
   298
        case KAtrUnicode:
hgs
parents:
diff changeset
   299
        if ( iUnicode->Length() > 0 )
hgs
parents:
diff changeset
   300
            {
hgs
parents:
diff changeset
   301
            aValue.Set( *iUnicode );
hgs
parents:
diff changeset
   302
            break;
hgs
parents:
diff changeset
   303
            }
hgs
parents:
diff changeset
   304
        else
hgs
parents:
diff changeset
   305
            return KErrNoAttribute;
hgs
parents:
diff changeset
   306
hgs
parents:
diff changeset
   307
        case KAtrGlyphName:
hgs
parents:
diff changeset
   308
        if ( iGlyphName->Length() > 0 )
hgs
parents:
diff changeset
   309
            {
hgs
parents:
diff changeset
   310
            aValue.Set( *iGlyphName );
hgs
parents:
diff changeset
   311
            break;
hgs
parents:
diff changeset
   312
            }
hgs
parents:
diff changeset
   313
        else
hgs
parents:
diff changeset
   314
            return KErrNoAttribute;
hgs
parents:
diff changeset
   315
hgs
parents:
diff changeset
   316
        case KAtrLang:
hgs
parents:
diff changeset
   317
        if ( iLangCode->Length() > 0 )
hgs
parents:
diff changeset
   318
            {
hgs
parents:
diff changeset
   319
            aValue.Set( *iLangCode );
hgs
parents:
diff changeset
   320
            break;
hgs
parents:
diff changeset
   321
            }
hgs
parents:
diff changeset
   322
        else
hgs
parents:
diff changeset
   323
            return KErrNoAttribute;
hgs
parents:
diff changeset
   324
hgs
parents:
diff changeset
   325
        default:
hgs
parents:
diff changeset
   326
        return CSvgElementImpl::GetAttributeDes( aNameId, aValue );
hgs
parents:
diff changeset
   327
        }
hgs
parents:
diff changeset
   328
    return KErrNone;
hgs
parents:
diff changeset
   329
    }
hgs
parents:
diff changeset
   330
hgs
parents:
diff changeset
   331
// *******************************************************
hgs
parents:
diff changeset
   332
// From MXmlElement
hgs
parents:
diff changeset
   333
hgs
parents:
diff changeset
   334
hgs
parents:
diff changeset
   335
// ==========================================================================
hgs
parents:
diff changeset
   336
// Need method description
hgs
parents:
diff changeset
   337
// ==========================================================================
hgs
parents:
diff changeset
   338
TInt CSvgGlyphElementImpl::SetAttributeL( const TDesC& aName,
hgs
parents:
diff changeset
   339
                                          const TDesC& aValue )
hgs
parents:
diff changeset
   340
    {
hgs
parents:
diff changeset
   341
	CSvgElementImpl::SetAttributeL(aName,aValue);
hgs
parents:
diff changeset
   342
	if( aName == D )
hgs
parents:
diff changeset
   343
		{
hgs
parents:
diff changeset
   344
		SetPath (aValue);
hgs
parents:
diff changeset
   345
		iOwnedPath = ETrue;
hgs
parents:
diff changeset
   346
		}
hgs
parents:
diff changeset
   347
    return KErrNone;
hgs
parents:
diff changeset
   348
    }
hgs
parents:
diff changeset
   349
hgs
parents:
diff changeset
   350
hgs
parents:
diff changeset
   351
// ==========================================================================
hgs
parents:
diff changeset
   352
// Need method description
hgs
parents:
diff changeset
   353
// ==========================================================================
hgs
parents:
diff changeset
   354
TInt CSvgGlyphElementImpl::SetAttributeFloatL( const TInt aNameId,
hgs
parents:
diff changeset
   355
                                               const TFloatFixPt aValue )
hgs
parents:
diff changeset
   356
	{
hgs
parents:
diff changeset
   357
		if( aNameId == KAtrHorizAdvX )
hgs
parents:
diff changeset
   358
			{
hgs
parents:
diff changeset
   359
			iHorzAdvX = aValue;
hgs
parents:
diff changeset
   360
			}
hgs
parents:
diff changeset
   361
		else return CSvgElementImpl::SetAttributeFloatL( aNameId, aValue );
hgs
parents:
diff changeset
   362
    return KErrNone;
hgs
parents:
diff changeset
   363
	}
hgs
parents:
diff changeset
   364
hgs
parents:
diff changeset
   365
// ==========================================================================
hgs
parents:
diff changeset
   366
// Need method description
hgs
parents:
diff changeset
   367
// ==========================================================================
hgs
parents:
diff changeset
   368
TInt  CSvgGlyphElementImpl::SetAttributeDesL( const TInt aNameId, const TDesC& aValue )
hgs
parents:
diff changeset
   369
{
hgs
parents:
diff changeset
   370
	switch (aNameId)
hgs
parents:
diff changeset
   371
		{
hgs
parents:
diff changeset
   372
		case KAtrUnicode:
hgs
parents:
diff changeset
   373
						delete iUnicode;
hgs
parents:
diff changeset
   374
						iUnicode = NULL;
hgs
parents:
diff changeset
   375
						iUnicode = aValue.AllocL();
hgs
parents:
diff changeset
   376
						//iUnicode->Des().ZeroTerminate();
hgs
parents:
diff changeset
   377
						break;
hgs
parents:
diff changeset
   378
		case KAtrGlyphName:
hgs
parents:
diff changeset
   379
						delete iGlyphName;
hgs
parents:
diff changeset
   380
						iGlyphName = NULL;
hgs
parents:
diff changeset
   381
						iGlyphName = aValue.AllocL();
hgs
parents:
diff changeset
   382
						break;
hgs
parents:
diff changeset
   383
		case KAtrLang:
hgs
parents:
diff changeset
   384
						delete iLangCode;
hgs
parents:
diff changeset
   385
						iLangCode = NULL;
hgs
parents:
diff changeset
   386
						iLangCode = aValue.AllocL();
hgs
parents:
diff changeset
   387
						break;
hgs
parents:
diff changeset
   388
hgs
parents:
diff changeset
   389
		default:		return CSvgElementImpl::SetAttributeDesL( aNameId, aValue );
hgs
parents:
diff changeset
   390
hgs
parents:
diff changeset
   391
		}
hgs
parents:
diff changeset
   392
	return KErrNone;
hgs
parents:
diff changeset
   393
}
hgs
parents:
diff changeset
   394
hgs
parents:
diff changeset
   395
hgs
parents:
diff changeset
   396
// *******************************************************
hgs
parents:
diff changeset
   397
// From CSvgElementImpl
hgs
parents:
diff changeset
   398
hgs
parents:
diff changeset
   399
// perform a deep clone of this object
hgs
parents:
diff changeset
   400
// ==========================================================================
hgs
parents:
diff changeset
   401
// Need method description
hgs
parents:
diff changeset
   402
// ==========================================================================
hgs
parents:
diff changeset
   403
MXmlElement* CSvgGlyphElementImpl::CloneL(MXmlElement*)
hgs
parents:
diff changeset
   404
    {
hgs
parents:
diff changeset
   405
    return NULL;
hgs
parents:
diff changeset
   406
    }
hgs
parents:
diff changeset
   407
hgs
parents:
diff changeset
   408
// ==========================================================================
hgs
parents:
diff changeset
   409
// Need method description
hgs
parents:
diff changeset
   410
// ==========================================================================
hgs
parents:
diff changeset
   411
TBool CSvgGlyphElementImpl::DrawL( CGfx2dGc* /* aGc */,
hgs
parents:
diff changeset
   412
                                   CSvgElementImpl* /* aElement */ )
hgs
parents:
diff changeset
   413
    {
hgs
parents:
diff changeset
   414
    return EFalse;
hgs
parents:
diff changeset
   415
    }
hgs
parents:
diff changeset
   416
hgs
parents:
diff changeset
   417
hgs
parents:
diff changeset
   418
// *******************************************************
hgs
parents:
diff changeset
   419
// Private
hgs
parents:
diff changeset
   420
hgs
parents:
diff changeset
   421
CGfxGeneralPath* CSvgGlyphElementImpl::GetPathAttribute(TInt aAttributeId)
hgs
parents:
diff changeset
   422
	{
hgs
parents:
diff changeset
   423
	if(aAttributeId == KAtrD)
hgs
parents:
diff changeset
   424
		{
hgs
parents:
diff changeset
   425
		return iShape;
hgs
parents:
diff changeset
   426
		}
hgs
parents:
diff changeset
   427
	else
hgs
parents:
diff changeset
   428
		{
hgs
parents:
diff changeset
   429
		return NULL;
hgs
parents:
diff changeset
   430
		}
hgs
parents:
diff changeset
   431
	}
hgs
parents:
diff changeset
   432
void CSvgGlyphElementImpl::SetPathAttribute(TInt aAttributeId, CGfxGeneralPath* aPathHandle)
hgs
parents:
diff changeset
   433
{
hgs
parents:
diff changeset
   434
	if(aAttributeId == KAtrD)
hgs
parents:
diff changeset
   435
		{
hgs
parents:
diff changeset
   436
		if(iShape == aPathHandle)
hgs
parents:
diff changeset
   437
			{
hgs
parents:
diff changeset
   438
			return;
hgs
parents:
diff changeset
   439
			}
hgs
parents:
diff changeset
   440
		delete iShape;
hgs
parents:
diff changeset
   441
		iShape = aPathHandle;
hgs
parents:
diff changeset
   442
		}
hgs
parents:
diff changeset
   443
}
hgs
parents:
diff changeset
   444
hgs
parents:
diff changeset
   445
void CSvgGlyphElementImpl::Print( TBool aIsEncodeOn )
hgs
parents:
diff changeset
   446
{
hgs
parents:
diff changeset
   447
	if (!aIsEncodeOn)
hgs
parents:
diff changeset
   448
	{
hgs
parents:
diff changeset
   449
	#ifdef _DEBUG
hgs
parents:
diff changeset
   450
	if (iGlyphName)
hgs
parents:
diff changeset
   451
	{
hgs
parents:
diff changeset
   452
	RDebug::Printf("<glyph name=\"%s\" unicode=\"%d\" lang=\"%d\" horiz-adv-x=\"%d\" >",
hgs
parents:
diff changeset
   453
	iGlyphName, (int)iUnicode, (int)iLangCode, (int)iHorzAdvX);
hgs
parents:
diff changeset
   454
hgs
parents:
diff changeset
   455
	if (iShape)
hgs
parents:
diff changeset
   456
	{
hgs
parents:
diff changeset
   457
		RArray<TUint32>* lTypes = iShape->PointTypeArray();
hgs
parents:
diff changeset
   458
		RArray<TFloatFixPt>* lCoords = iShape->PointCoordsArrayAll();
hgs
parents:
diff changeset
   459
hgs
parents:
diff changeset
   460
		if (lTypes->Count() != lCoords->Count())
hgs
parents:
diff changeset
   461
		{
hgs
parents:
diff changeset
   462
			RDebug::Printf("Invalid path points and types didnt match", this);
hgs
parents:
diff changeset
   463
			return;
hgs
parents:
diff changeset
   464
		}
hgs
parents:
diff changeset
   465
hgs
parents:
diff changeset
   466
		RDebug::Printf("<path d=\"", this);
hgs
parents:
diff changeset
   467
hgs
parents:
diff changeset
   468
		TInt lTypesCnt = lTypes->Count();
hgs
parents:
diff changeset
   469
		for (TInt i=0; i < lTypesCnt; i++)
hgs
parents:
diff changeset
   470
		{
hgs
parents:
diff changeset
   471
			RDebug::Printf("%c ", lTypes->operator[]( i ));
hgs
parents:
diff changeset
   472
			RDebug::Printf("%d ", (int)(lCoords->operator[]( i )));
hgs
parents:
diff changeset
   473
		}
hgs
parents:
diff changeset
   474
hgs
parents:
diff changeset
   475
		RDebug::Printf(" z\">", this);
hgs
parents:
diff changeset
   476
	}
hgs
parents:
diff changeset
   477
hgs
parents:
diff changeset
   478
	RDebug::Printf("</glyph>", this);
hgs
parents:
diff changeset
   479
	}
hgs
parents:
diff changeset
   480
	#endif
hgs
parents:
diff changeset
   481
	}
hgs
parents:
diff changeset
   482
}
hgs
parents:
diff changeset
   483
#endif    //ifdef SVG_FONTS_INCLUDE