svgtopt/SVG/SVGImpl/src/SVGAElementImpl.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
hgs
parents:
diff changeset
    20
hgs
parents:
diff changeset
    21
#if !defined(__E32BASE_H__)
hgs
parents:
diff changeset
    22
#include <e32base.h>
hgs
parents:
diff changeset
    23
#endif
hgs
parents:
diff changeset
    24
#include "SVGAElementImpl.h"
hgs
parents:
diff changeset
    25
#include "SVGElementImpl.h"
hgs
parents:
diff changeset
    26
#include "SVGDocumentImpl.h"
hgs
parents:
diff changeset
    27
#include "SVGEngineImpl.h"
hgs
parents:
diff changeset
    28
hgs
parents:
diff changeset
    29
#include "GfxAffineTransform.h"
hgs
parents:
diff changeset
    30
#include "SVGGElementImpl.h"
hgs
parents:
diff changeset
    31
hgs
parents:
diff changeset
    32
_LIT(TARGET, "target");
hgs
parents:
diff changeset
    33
_LIT(NEW, "new");
hgs
parents:
diff changeset
    34
hgs
parents:
diff changeset
    35
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    36
// Two phase construction
hgs
parents:
diff changeset
    37
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    38
CSvgAElementImpl* CSvgAElementImpl::NewL(  const TUint8 aElemID,
hgs
parents:
diff changeset
    39
										  CSvgDocumentImpl* aDoc )
hgs
parents:
diff changeset
    40
	{
hgs
parents:
diff changeset
    41
	CSvgAElementImpl*   self    = new ( ELeave ) CSvgAElementImpl( aDoc );
hgs
parents:
diff changeset
    42
	CleanupStack::PushL( self );
hgs
parents:
diff changeset
    43
	self->ConstructL(aElemID);
hgs
parents:
diff changeset
    44
	CleanupStack::Pop();
hgs
parents:
diff changeset
    45
hgs
parents:
diff changeset
    46
	return self;
hgs
parents:
diff changeset
    47
	}
hgs
parents:
diff changeset
    48
hgs
parents:
diff changeset
    49
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    50
//
hgs
parents:
diff changeset
    51
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    52
CSvgAElementImpl* CSvgAElementImpl::NewLC(  const TUint8 aElemID,
hgs
parents:
diff changeset
    53
										   CSvgDocumentImpl* aDoc )
hgs
parents:
diff changeset
    54
	{
hgs
parents:
diff changeset
    55
	CSvgAElementImpl*   self    = new ( ELeave ) CSvgAElementImpl( aDoc );
hgs
parents:
diff changeset
    56
	CleanupStack::PushL( self );
hgs
parents:
diff changeset
    57
	self->ConstructL(aElemID);
hgs
parents:
diff changeset
    58
hgs
parents:
diff changeset
    59
	return self;
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
//
hgs
parents:
diff changeset
    65
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    66
void CSvgAElementImpl::ConstructL( const TUint8 aElemID)
hgs
parents:
diff changeset
    67
	{
hgs
parents:
diff changeset
    68
	CSvgElementImpl::InitializeL( aElemID);
hgs
parents:
diff changeset
    69
hgs
parents:
diff changeset
    70
	iSvgStyleProperties = new(ELeave) RPointerArray<CCssValue>(KCSS_MAX_ATTR);
hgs
parents:
diff changeset
    71
	User::LeaveIfError( iSvgStyleProperties->Append( NULL ) );
hgs
parents:
diff changeset
    72
	iSvgStyleProperties->Remove( 0 );
hgs
parents:
diff changeset
    73
hgs
parents:
diff changeset
    74
    iSvgTransformable = CSvgTransformableImpl::NewL();
hgs
parents:
diff changeset
    75
hgs
parents:
diff changeset
    76
    iSvgUriReferenceImpl = CSvgUriReferenceImpl::NewL();
hgs
parents:
diff changeset
    77
		iTarget = HBufC::NewL( 0 );
hgs
parents:
diff changeset
    78
hgs
parents:
diff changeset
    79
	if (OwnerDocument())
hgs
parents:
diff changeset
    80
	{
hgs
parents:
diff changeset
    81
		((CSvgDocumentImpl*)OwnerDocument())->AddInternalMouseListener( this );
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
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
CSvgAElementImpl::~CSvgAElementImpl()
hgs
parents:
diff changeset
    93
{
hgs
parents:
diff changeset
    94
    if(iSvgUriReferenceImpl)
hgs
parents:
diff changeset
    95
    	{
hgs
parents:
diff changeset
    96
    	delete iSvgUriReferenceImpl;
hgs
parents:
diff changeset
    97
    	iSvgUriReferenceImpl = NULL;
hgs
parents:
diff changeset
    98
    	}
hgs
parents:
diff changeset
    99
hgs
parents:
diff changeset
   100
    if(iSvgStyleProperties)
hgs
parents:
diff changeset
   101
		{
hgs
parents:
diff changeset
   102
		iSvgStyleProperties->Close();
hgs
parents:
diff changeset
   103
		delete iSvgStyleProperties;
hgs
parents:
diff changeset
   104
		iSvgStyleProperties = NULL;
hgs
parents:
diff changeset
   105
		}
hgs
parents:
diff changeset
   106
		if (iTarget)
hgs
parents:
diff changeset
   107
		{
hgs
parents:
diff changeset
   108
			delete iTarget;
hgs
parents:
diff changeset
   109
			iTarget = NULL;
hgs
parents:
diff changeset
   110
		}
hgs
parents:
diff changeset
   111
hgs
parents:
diff changeset
   112
	if (OwnerDocument())
hgs
parents:
diff changeset
   113
		{
hgs
parents:
diff changeset
   114
			((CSvgDocumentImpl*)OwnerDocument())->RemoveInternalMouseListener( this );
hgs
parents:
diff changeset
   115
		}
hgs
parents:
diff changeset
   116
}
hgs
parents:
diff changeset
   117
hgs
parents:
diff changeset
   118
// Private
hgs
parents:
diff changeset
   119
hgs
parents:
diff changeset
   120
hgs
parents:
diff changeset
   121
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   122
//
hgs
parents:
diff changeset
   123
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   124
hgs
parents:
diff changeset
   125
CSvgAElementImpl::CSvgAElementImpl( CSvgDocumentImpl* aDoc ) : iInitDone( EFalse )
hgs
parents:
diff changeset
   126
    {
hgs
parents:
diff changeset
   127
	SetOwnerDocument(aDoc);
hgs
parents:
diff changeset
   128
    }
hgs
parents:
diff changeset
   129
hgs
parents:
diff changeset
   130
hgs
parents:
diff changeset
   131
// *******************************************************
hgs
parents:
diff changeset
   132
// From MXmlElement
hgs
parents:
diff changeset
   133
hgs
parents:
diff changeset
   134
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   135
//
hgs
parents:
diff changeset
   136
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   137
TInt CSvgAElementImpl::SetAttributeL( const TDesC& aName, const TDesC& aValue )
hgs
parents:
diff changeset
   138
    {
hgs
parents:
diff changeset
   139
    if ( this->SetXlinkAttributeL( aName, aValue ) )
hgs
parents:
diff changeset
   140
        {
hgs
parents:
diff changeset
   141
        return KErrNone;
hgs
parents:
diff changeset
   142
        }
hgs
parents:
diff changeset
   143
   if ( SetTargetL( aName, aValue ))
hgs
parents:
diff changeset
   144
   		{
hgs
parents:
diff changeset
   145
   		return KErrNone;
hgs
parents:
diff changeset
   146
   		}
hgs
parents:
diff changeset
   147
hgs
parents:
diff changeset
   148
	CSvgElementImpl::SetAttributeL(aName,aValue);
hgs
parents:
diff changeset
   149
hgs
parents:
diff changeset
   150
    return KErrNone;
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
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   156
hgs
parents:
diff changeset
   157
TBool CSvgAElementImpl::SetTargetL( const TDesC& aName, const TDesC& aValue )
hgs
parents:
diff changeset
   158
    {
hgs
parents:
diff changeset
   159
	if ( aName == TARGET )
hgs
parents:
diff changeset
   160
        {
hgs
parents:
diff changeset
   161
        if(iTarget)
hgs
parents:
diff changeset
   162
	        {
hgs
parents:
diff changeset
   163
	        delete iTarget;
hgs
parents:
diff changeset
   164
	        iTarget = NULL;
hgs
parents:
diff changeset
   165
	        }
hgs
parents:
diff changeset
   166
	       iTarget = aValue.AllocL();
hgs
parents:
diff changeset
   167
        }
hgs
parents:
diff changeset
   168
    else
hgs
parents:
diff changeset
   169
        {
hgs
parents:
diff changeset
   170
  		return EFalse;
hgs
parents:
diff changeset
   171
        }
hgs
parents:
diff changeset
   172
hgs
parents:
diff changeset
   173
    return ETrue;
hgs
parents:
diff changeset
   174
hgs
parents:
diff changeset
   175
    }
hgs
parents:
diff changeset
   176
hgs
parents:
diff changeset
   177
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   178
//
hgs
parents:
diff changeset
   179
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   180
const TDesC& CSvgAElementImpl::Target( )
hgs
parents:
diff changeset
   181
{
hgs
parents:
diff changeset
   182
	 if (iTarget)
hgs
parents:
diff changeset
   183
	 {
hgs
parents:
diff changeset
   184
	 		return *iTarget;
hgs
parents:
diff changeset
   185
	 }
hgs
parents:
diff changeset
   186
	 else
hgs
parents:
diff changeset
   187
	 {
hgs
parents:
diff changeset
   188
    	return KNullDesC;
hgs
parents:
diff changeset
   189
   }
hgs
parents:
diff changeset
   190
}
hgs
parents:
diff changeset
   191
hgs
parents:
diff changeset
   192
// *******************************************************
hgs
parents:
diff changeset
   193
// From CSvgElementImpl
hgs
parents:
diff changeset
   194
hgs
parents:
diff changeset
   195
// perform a deep clone of this object
hgs
parents:
diff changeset
   196
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   197
//
hgs
parents:
diff changeset
   198
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   199
MXmlElement* CSvgAElementImpl::CloneL(MXmlElement*)
hgs
parents:
diff changeset
   200
    {
hgs
parents:
diff changeset
   201
    return NULL;
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
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   207
TBool CSvgAElementImpl::DrawL( CGfx2dGc* /* aGc */,
hgs
parents:
diff changeset
   208
                               CSvgElementImpl* /* aElement */ )
hgs
parents:
diff changeset
   209
    {
hgs
parents:
diff changeset
   210
    if ( !iInitDone )
hgs
parents:
diff changeset
   211
        {
hgs
parents:
diff changeset
   212
        // Add child elemenets as mouse event receiver to engine
hgs
parents:
diff changeset
   213
        // so that child elements can fire ui internal event
hgs
parents:
diff changeset
   214
        AddEventReceiverSubtreeL( this );
hgs
parents:
diff changeset
   215
hgs
parents:
diff changeset
   216
        // Add this as internal event receiver
hgs
parents:
diff changeset
   217
        ((CSvgDocumentImpl*)iOwnerDocument)->AddToEventReceiverListL( this, KSvgEventMaskInternal);
hgs
parents:
diff changeset
   218
hgs
parents:
diff changeset
   219
hgs
parents:
diff changeset
   220
        iInitDone = ETrue;
hgs
parents:
diff changeset
   221
        }
hgs
parents:
diff changeset
   222
hgs
parents:
diff changeset
   223
    return ETrue;
hgs
parents:
diff changeset
   224
    }
hgs
parents:
diff changeset
   225
hgs
parents:
diff changeset
   226
hgs
parents:
diff changeset
   227
// *******************************************************
hgs
parents:
diff changeset
   228
// From MSvgEventReceiver
hgs
parents:
diff changeset
   229
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   230
//
hgs
parents:
diff changeset
   231
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   232
TBool CSvgAElementImpl::ReceiveEventL( MSvgEvent* aEvent )
hgs
parents:
diff changeset
   233
    {
hgs
parents:
diff changeset
   234
hgs
parents:
diff changeset
   235
	if( CSvgElementImpl::IsSVGEnginePaused())
hgs
parents:
diff changeset
   236
    {
hgs
parents:
diff changeset
   237
    	return EFalse;
hgs
parents:
diff changeset
   238
    }
hgs
parents:
diff changeset
   239
    // Receive internal UI click event on child elements only
hgs
parents:
diff changeset
   240
    if ( aEvent->EventType() != ESvgEngineInternalEvent )
hgs
parents:
diff changeset
   241
		{
hgs
parents:
diff changeset
   242
        return EFalse;
hgs
parents:
diff changeset
   243
		}
hgs
parents:
diff changeset
   244
hgs
parents:
diff changeset
   245
	// Link activation process
hgs
parents:
diff changeset
   246
    MSvgInternalEvent*  evt = ( MSvgInternalEvent* ) aEvent;
hgs
parents:
diff changeset
   247
hgs
parents:
diff changeset
   248
     if ( !IsChild( this, evt->ObjectAddress() ) )
hgs
parents:
diff changeset
   249
		{
hgs
parents:
diff changeset
   250
        return EFalse;
hgs
parents:
diff changeset
   251
		}
hgs
parents:
diff changeset
   252
hgs
parents:
diff changeset
   253
//////
hgs
parents:
diff changeset
   254
hgs
parents:
diff changeset
   255
	CSvgEngineImpl* engine  = ( ( CSvgDocumentImpl* ) OwnerDocument() )->Engine();
hgs
parents:
diff changeset
   256
 // Process the UI event on its child elements and propagate that event to its dependents
hgs
parents:
diff changeset
   257
    switch ( evt->SvgEvent() )
hgs
parents:
diff changeset
   258
        {
hgs
parents:
diff changeset
   259
hgs
parents:
diff changeset
   260
        case ESvgEventMousedown:
hgs
parents:
diff changeset
   261
        case ESvgEventMouseup:
hgs
parents:
diff changeset
   262
        case ESvgEventClick:
hgs
parents:
diff changeset
   263
		case ESvgEventActivate:
hgs
parents:
diff changeset
   264
		case ESvgEventMouseover:
hgs
parents:
diff changeset
   265
		case ESvgEventMousemove:
hgs
parents:
diff changeset
   266
		case ESvgEventFocusin:
hgs
parents:
diff changeset
   267
		case ESvgEventMouseout:
hgs
parents:
diff changeset
   268
		case ESvgEventFocusout:
hgs
parents:
diff changeset
   269
            {
hgs
parents:
diff changeset
   270
            TSvgInternalEvent   lEvt ( evt->SvgEvent(),
hgs
parents:
diff changeset
   271
                                        ( CSvgElementImpl* )
hgs
parents:
diff changeset
   272
                                             this );
hgs
parents:
diff changeset
   273
            engine->ProcessEventL( 
hgs
parents:
diff changeset
   274
                ( CSvgDocumentImpl* ) OwnerDocument(), &lEvt );
hgs
parents:
diff changeset
   275
			}
hgs
parents:
diff changeset
   276
        break;
hgs
parents:
diff changeset
   277
hgs
parents:
diff changeset
   278
        default:
hgs
parents:
diff changeset
   279
        break;
hgs
parents:
diff changeset
   280
        }
hgs
parents:
diff changeset
   281
hgs
parents:
diff changeset
   282
///////
hgs
parents:
diff changeset
   283
hgs
parents:
diff changeset
   284
hgs
parents:
diff changeset
   285
	// To activate only on mouse click event
hgs
parents:
diff changeset
   286
    if ( evt->SvgEvent() != ESvgEventClick )
hgs
parents:
diff changeset
   287
		{
hgs
parents:
diff changeset
   288
        return EFalse;
hgs
parents:
diff changeset
   289
		}
hgs
parents:
diff changeset
   290
hgs
parents:
diff changeset
   291
    // Linking behavior
hgs
parents:
diff changeset
   292
hgs
parents:
diff changeset
   293
	TPtrC n(XlinkShow());
hgs
parents:
diff changeset
   294
hgs
parents:
diff changeset
   295
	if (n == NEW)
hgs
parents:
diff changeset
   296
		{
hgs
parents:
diff changeset
   297
		engine->LinkRequestWithShow( Href(),XlinkShow() ); // ssb iHrefUri->Des());
hgs
parents:
diff changeset
   298
		}
hgs
parents:
diff changeset
   299
	else
hgs
parents:
diff changeset
   300
		{
hgs
parents:
diff changeset
   301
		engine->LinkRequest( Href() ); // ssb iHrefUri->Des());
hgs
parents:
diff changeset
   302
		}
hgs
parents:
diff changeset
   303
hgs
parents:
diff changeset
   304
hgs
parents:
diff changeset
   305
hgs
parents:
diff changeset
   306
    return EFalse;
hgs
parents:
diff changeset
   307
    }
hgs
parents:
diff changeset
   308
hgs
parents:
diff changeset
   309
hgs
parents:
diff changeset
   310
// *******************************************************
hgs
parents:
diff changeset
   311
// Private methods
hgs
parents:
diff changeset
   312
//
hgs
parents:
diff changeset
   313
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   314
//
hgs
parents:
diff changeset
   315
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   316
void CSvgAElementImpl::AddEventReceiverSubtreeL( CSvgElementImpl* aElement )
hgs
parents:
diff changeset
   317
    {
hgs
parents:
diff changeset
   318
    CSvgElementImpl*element = ( CSvgElementImpl* ) aElement->FirstChild();
hgs
parents:
diff changeset
   319
    while ( element != NULL )
hgs
parents:
diff changeset
   320
        {
hgs
parents:
diff changeset
   321
hgs
parents:
diff changeset
   322
        ((CSvgDocumentImpl*)iOwnerDocument)->AddToEventReceiverListL( element,
hgs
parents:
diff changeset
   323
                                                KSvgEventMaskExternalUI);
hgs
parents:
diff changeset
   324
hgs
parents:
diff changeset
   325
        AddEventReceiverSubtreeL( element );
hgs
parents:
diff changeset
   326
        element = ( CSvgElementImpl * ) element->NextSibling();
hgs
parents:
diff changeset
   327
        }
hgs
parents:
diff changeset
   328
    }
hgs
parents:
diff changeset
   329
hgs
parents:
diff changeset
   330
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   331
//
hgs
parents:
diff changeset
   332
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   333
TBool CSvgAElementImpl::IsChild( CSvgElementImpl* aSubtree,
hgs
parents:
diff changeset
   334
                                 CSvgElementImpl* aElement )
hgs
parents:
diff changeset
   335
    {
hgs
parents:
diff changeset
   336
    CSvgElementImpl*element = ( CSvgElementImpl* ) aSubtree->FirstChild();
hgs
parents:
diff changeset
   337
    if ( element != NULL )
hgs
parents:
diff changeset
   338
        {
hgs
parents:
diff changeset
   339
        do
hgs
parents:
diff changeset
   340
            {
hgs
parents:
diff changeset
   341
            if ( element == aElement || IsChild( element, aElement ) )
hgs
parents:
diff changeset
   342
				{
hgs
parents:
diff changeset
   343
                return ETrue;
hgs
parents:
diff changeset
   344
				}
hgs
parents:
diff changeset
   345
            element = ( CSvgElementImpl * ) element->NextSibling();
hgs
parents:
diff changeset
   346
            }
hgs
parents:
diff changeset
   347
        while ( element != NULL );
hgs
parents:
diff changeset
   348
        }
hgs
parents:
diff changeset
   349
    return EFalse;
hgs
parents:
diff changeset
   350
    }
hgs
parents:
diff changeset
   351
void CSvgAElementImpl::Reset(MSvgEvent* /*aEvent*/)
hgs
parents:
diff changeset
   352
{
hgs
parents:
diff changeset
   353
}
hgs
parents:
diff changeset
   354
hgs
parents:
diff changeset
   355
TInt CSvgAElementImpl::SetAttributeDesL( const TInt aNameId,
hgs
parents:
diff changeset
   356
                                             const TDesC& aValue )
hgs
parents:
diff changeset
   357
    {
hgs
parents:
diff changeset
   358
	_LIT( KXlinkHref, "xlink:href" );
hgs
parents:
diff changeset
   359
	_LIT( KTarget, "target");
hgs
parents:
diff changeset
   360
hgs
parents:
diff changeset
   361
    switch ( aNameId )
hgs
parents:
diff changeset
   362
        {
hgs
parents:
diff changeset
   363
        case KAtrXlinkhref:
hgs
parents:
diff changeset
   364
        SetAttributeL(KXlinkHref, aValue );
hgs
parents:
diff changeset
   365
        break;
hgs
parents:
diff changeset
   366
        case KAtrTarget:
hgs
parents:
diff changeset
   367
        SetAttributeL(KTarget, aValue );
hgs
parents:
diff changeset
   368
        break;
hgs
parents:
diff changeset
   369
        default:
hgs
parents:
diff changeset
   370
        return CSvgElementImpl::SetAttributeDesL( aNameId, aValue );
hgs
parents:
diff changeset
   371
        }
hgs
parents:
diff changeset
   372
    return KErrNone;
hgs
parents:
diff changeset
   373
    }
hgs
parents:
diff changeset
   374
TInt CSvgAElementImpl::GetAttributeDes( const TInt aNameId,
hgs
parents:
diff changeset
   375
                                                     TPtrC16& aValue )
hgs
parents:
diff changeset
   376
{
hgs
parents:
diff changeset
   377
 if(aNameId == KAtrXlinkhref)
hgs
parents:
diff changeset
   378
	{
hgs
parents:
diff changeset
   379
	 aValue.Set( Href() );
hgs
parents:
diff changeset
   380
	 return KErrNone;
hgs
parents:
diff changeset
   381
	}
hgs
parents:
diff changeset
   382
	if (aNameId == KAtrTarget)
hgs
parents:
diff changeset
   383
	{
hgs
parents:
diff changeset
   384
		aValue.Set( Target() );
hgs
parents:
diff changeset
   385
		return KErrNone;
hgs
parents:
diff changeset
   386
	}
hgs
parents:
diff changeset
   387
 return CSvgElementImpl::GetAttributeDes( aNameId, aValue );
hgs
parents:
diff changeset
   388
}
hgs
parents:
diff changeset
   389
hgs
parents:
diff changeset
   390
/*** FROM MSvgMouseListener ***/
hgs
parents:
diff changeset
   391
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   392
// mouse entered
hgs
parents:
diff changeset
   393
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   394
TBool CSvgAElementImpl::MouseEntered( RPointerArray<CSvgElementImpl>& aElements,
hgs
parents:
diff changeset
   395
                                    TInt /*aX*/, TInt /*aY*/ )
hgs
parents:
diff changeset
   396
{
hgs
parents:
diff changeset
   397
	CSvgEngineImpl* lEngine  = ( ( CSvgDocumentImpl* ) OwnerDocument() )->Engine();
hgs
parents:
diff changeset
   398
	
hgs
parents:
diff changeset
   399
	TInt lEleCnt = aElements.Count();
hgs
parents:
diff changeset
   400
	for (TInt i = 0; i < lEleCnt; i++ )
hgs
parents:
diff changeset
   401
	{
hgs
parents:
diff changeset
   402
		if ( aElements[i] == this )
hgs
parents:
diff changeset
   403
		{
hgs
parents:
diff changeset
   404
			lEngine->NotifyHyperlinkEntered(this);
hgs
parents:
diff changeset
   405
			return ETrue;
hgs
parents:
diff changeset
   406
		}
hgs
parents:
diff changeset
   407
    }
hgs
parents:
diff changeset
   408
hgs
parents:
diff changeset
   409
	return EFalse;
hgs
parents:
diff changeset
   410
}
hgs
parents:
diff changeset
   411
hgs
parents:
diff changeset
   412
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   413
// Notified when the mouse pointer exits a visible svg element.
hgs
parents:
diff changeset
   414
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   415
TBool CSvgAElementImpl::MouseExited( RPointerArray<CSvgElementImpl>& aElements,
hgs
parents:
diff changeset
   416
                                   TInt /*aX*/, TInt /*aY*/ )
hgs
parents:
diff changeset
   417
{
hgs
parents:
diff changeset
   418
	CSvgEngineImpl* lEngine  = ( ( CSvgDocumentImpl* ) OwnerDocument() )->Engine();
hgs
parents:
diff changeset
   419
	
hgs
parents:
diff changeset
   420
	TInt lEleCnt = aElements.Count();
hgs
parents:
diff changeset
   421
	for (TInt i = 0; i < lEleCnt; i++ )
hgs
parents:
diff changeset
   422
	{
hgs
parents:
diff changeset
   423
		if ( aElements[i] == this )
hgs
parents:
diff changeset
   424
		{
hgs
parents:
diff changeset
   425
			lEngine->NotifyHyperlinkExited(this);
hgs
parents:
diff changeset
   426
			return ETrue;
hgs
parents:
diff changeset
   427
		}
hgs
parents:
diff changeset
   428
    }
hgs
parents:
diff changeset
   429
hgs
parents:
diff changeset
   430
	return EFalse;
hgs
parents:
diff changeset
   431
}
hgs
parents:
diff changeset
   432
hgs
parents:
diff changeset
   433
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   434
// Notified when the mouse pointer is pressed down on visible svg element.
hgs
parents:
diff changeset
   435
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   436
TBool CSvgAElementImpl::MouseMoved( RPointerArray<CSvgElementImpl>& /*aElements*/,
hgs
parents:
diff changeset
   437
                                    TInt /*aX*/, TInt /*aY*/ )
hgs
parents:
diff changeset
   438
{
hgs
parents:
diff changeset
   439
    return EFalse;
hgs
parents:
diff changeset
   440
}
hgs
parents:
diff changeset
   441
hgs
parents:
diff changeset
   442
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   443
// Notified when the mouse pointer is pressed down on visible svg element.
hgs
parents:
diff changeset
   444
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   445
TBool CSvgAElementImpl::MousePressed( RPointerArray<CSvgElementImpl>& /*aElements*/,
hgs
parents:
diff changeset
   446
                                    TInt /*aX*/, TInt /*aY*/ )
hgs
parents:
diff changeset
   447
{
hgs
parents:
diff changeset
   448
	return EFalse;
hgs
parents:
diff changeset
   449
}
hgs
parents:
diff changeset
   450
hgs
parents:
diff changeset
   451
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   452
// Notified when the mouse pointer is released on on visible svg element.
hgs
parents:
diff changeset
   453
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   454
TBool CSvgAElementImpl::MouseReleased( RPointerArray<CSvgElementImpl>& aElements,
hgs
parents:
diff changeset
   455
                                    TInt /*aX*/, TInt /*aY*/ )
hgs
parents:
diff changeset
   456
{
hgs
parents:
diff changeset
   457
	CSvgEngineImpl* lEngine  = ( ( CSvgDocumentImpl* ) OwnerDocument() )->Engine();
hgs
parents:
diff changeset
   458
	
hgs
parents:
diff changeset
   459
	TInt lEleCnt = aElements.Count();
hgs
parents:
diff changeset
   460
	for (TInt i = 0; i < lEleCnt; i++ )
hgs
parents:
diff changeset
   461
	{
hgs
parents:
diff changeset
   462
		if ( aElements[i] == this )
hgs
parents:
diff changeset
   463
		{
hgs
parents:
diff changeset
   464
			lEngine->NotifyHyperlinkActivated(this);
hgs
parents:
diff changeset
   465
			return ETrue;
hgs
parents:
diff changeset
   466
		}
hgs
parents:
diff changeset
   467
    }
hgs
parents:
diff changeset
   468
hgs
parents:
diff changeset
   469
    return EFalse;
hgs
parents:
diff changeset
   470
}
hgs
parents:
diff changeset
   471
hgs
parents:
diff changeset
   472
void CSvgAElementImpl::GetUnscaledBBox( TGfxRectangle2D& aBbox )
hgs
parents:
diff changeset
   473
{
hgs
parents:
diff changeset
   474
	CSvgGElementImpl::GetGroupBoundingUnscaled( aBbox, this );
hgs
parents:
diff changeset
   475
}
hgs
parents:
diff changeset
   476
hgs
parents:
diff changeset
   477
void CSvgAElementImpl::GetBBox( TGfxRectangle2D& aBbox )
hgs
parents:
diff changeset
   478
{
hgs
parents:
diff changeset
   479
	CSvgGElementImpl::GetGroupBounding( aBbox, this );
hgs
parents:
diff changeset
   480
}
hgs
parents:
diff changeset
   481
hgs
parents:
diff changeset
   482
void CSvgAElementImpl::Print( TBool aIsEncodeOn )
hgs
parents:
diff changeset
   483
{
hgs
parents:
diff changeset
   484
	if (!aIsEncodeOn)
hgs
parents:
diff changeset
   485
	{
hgs
parents:
diff changeset
   486
		#ifdef _DEBUG
hgs
parents:
diff changeset
   487
		RDebug::Printf("<a xlink:href=\"hmm\">"/*, Href()*/);
hgs
parents:
diff changeset
   488
		#endif
hgs
parents:
diff changeset
   489
	}
hgs
parents:
diff changeset
   490
}