svgtopt/SVGTPlugin/src/Svgtplugin.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:  SVGT Plugin 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
#include <e32std.h>
hgs
parents:
diff changeset
    21
#include <eikenv.h>
hgs
parents:
diff changeset
    22
#include <barsread.h>
hgs
parents:
diff changeset
    23
#include <fbs.h>
hgs
parents:
diff changeset
    24
#include <gdi.h>
hgs
parents:
diff changeset
    25
#include <f32file.h>
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
#include <featmgr.h>
hgs
parents:
diff changeset
    28
hgs
parents:
diff changeset
    29
#include <eikappui.h>
hgs
parents:
diff changeset
    30
hgs
parents:
diff changeset
    31
#include <SVGEngineInterfaceImpl.h>
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
#include "Svgtplugin.h"
hgs
parents:
diff changeset
    34
hgs
parents:
diff changeset
    35
#include "VolumeKeyListener.h"
hgs
parents:
diff changeset
    36
#include "RepositoryVolumeListener.h"
hgs
parents:
diff changeset
    37
hgs
parents:
diff changeset
    38
_LIT(KWidth, "width");
hgs
parents:
diff changeset
    39
_LIT(KHeight, "height");
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
CSvgtPlugin* CSvgtPlugin::NewL(NPP anInstance)
hgs
parents:
diff changeset
    42
	{
hgs
parents:
diff changeset
    43
    CSvgtPlugin *self = new (ELeave) CSvgtPlugin;
hgs
parents:
diff changeset
    44
	CleanupStack::PushL( self );
hgs
parents:
diff changeset
    45
	self->ConstructL(anInstance);
hgs
parents:
diff changeset
    46
hgs
parents:
diff changeset
    47
	CleanupStack::Pop();
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
CSvgtPlugin::~CSvgtPlugin()
hgs
parents:
diff changeset
    53
	{
hgs
parents:
diff changeset
    54
	if ( iControl )
hgs
parents:
diff changeset
    55
		{
hgs
parents:
diff changeset
    56
    	delete iControl;
hgs
parents:
diff changeset
    57
    	iControl=NULL;
hgs
parents:
diff changeset
    58
    	}
hgs
parents:
diff changeset
    59
hgs
parents:
diff changeset
    60
	if ( iSvgModule )
hgs
parents:
diff changeset
    61
		{
hgs
parents:
diff changeset
    62
		iSvgModule->Stop();
hgs
parents:
diff changeset
    63
		delete iSvgModule;
hgs
parents:
diff changeset
    64
		iSvgModule = NULL;
hgs
parents:
diff changeset
    65
		}
hgs
parents:
diff changeset
    66
hgs
parents:
diff changeset
    67
	if ( iRenderBuffer )
hgs
parents:
diff changeset
    68
		{
hgs
parents:
diff changeset
    69
		delete iRenderBuffer;
hgs
parents:
diff changeset
    70
		iRenderBuffer = NULL;
hgs
parents:
diff changeset
    71
		}
hgs
parents:
diff changeset
    72
	
hgs
parents:
diff changeset
    73
 	iImageUrlInfoList.ResetAndDestroy();        
hgs
parents:
diff changeset
    74
	iImageUrlInfoList.Close();
hgs
parents:
diff changeset
    75
hgs
parents:
diff changeset
    76
	if(iKeyListener)
hgs
parents:
diff changeset
    77
	    {
hgs
parents:
diff changeset
    78
	    delete iKeyListener;
hgs
parents:
diff changeset
    79
	    iKeyListener = NULL;
hgs
parents:
diff changeset
    80
	    }
hgs
parents:
diff changeset
    81
hgs
parents:
diff changeset
    82
	if(iRepositoryListener)
hgs
parents:
diff changeset
    83
	    {
hgs
parents:
diff changeset
    84
	    delete iRepositoryListener;
hgs
parents:
diff changeset
    85
	    iRepositoryListener = NULL;
hgs
parents:
diff changeset
    86
	    }
hgs
parents:
diff changeset
    87
	}
hgs
parents:
diff changeset
    88
hgs
parents:
diff changeset
    89
void CSvgtPlugin::PrepareToExitL()
hgs
parents:
diff changeset
    90
	{
hgs
parents:
diff changeset
    91
	if (iPluginAdapter)
hgs
parents:
diff changeset
    92
		iPluginAdapter->PluginFinishedL();
hgs
parents:
diff changeset
    93
	}
hgs
parents:
diff changeset
    94
hgs
parents:
diff changeset
    95
void CSvgtPlugin::ConstructL(NPP anInstance)
hgs
parents:
diff changeset
    96
	{
hgs
parents:
diff changeset
    97
  	iInstance=anInstance;
hgs
parents:
diff changeset
    98
  	iRenderBuffer = new ( ELeave ) CFbsBitmap();
hgs
parents:
diff changeset
    99
	
hgs
parents:
diff changeset
   100
	iObjectWidth = 0;
hgs
parents:
diff changeset
   101
	iObjectHeight = 0;
hgs
parents:
diff changeset
   102
	// By default obj height is not in percentage
hgs
parents:
diff changeset
   103
	iObjHeightInPercentage = EFalse; 
hgs
parents:
diff changeset
   104
	// By default obj width is not in percentage
hgs
parents:
diff changeset
   105
	iObjWidthInPercentage = EFalse; 
hgs
parents:
diff changeset
   106
	iExpectedDefaultSize = EFalse;
hgs
parents:
diff changeset
   107
	
hgs
parents:
diff changeset
   108
	//While parsing are object width height are specified or not
hgs
parents:
diff changeset
   109
	iObjectWidthSpecified = EFalse;
hgs
parents:
diff changeset
   110
	iObjectHeightSpecified = EFalse;
hgs
parents:
diff changeset
   111
	TFontSpec lFontSpec;
hgs
parents:
diff changeset
   112
	iSvgModule = CSvgEngineInterfaceImpl::NewL( iRenderBuffer, this, lFontSpec );
hgs
parents:
diff changeset
   113
hgs
parents:
diff changeset
   114
  	// Clear background white
hgs
parents:
diff changeset
   115
	iSvgModule->SetBackgroundColor(0xffffffff);
hgs
parents:
diff changeset
   116
    iSvgModule->AddHyperlinkListener( this );
hgs
parents:
diff changeset
   117
    iAdjusted = EFalse;
hgs
parents:
diff changeset
   118
hgs
parents:
diff changeset
   119
    if (FeatureManager::FeatureSupported(KFeatureIdSideVolumeKeys))
hgs
parents:
diff changeset
   120
        {
hgs
parents:
diff changeset
   121
        User::InfoPrint(_L("Volume Key supported"));
hgs
parents:
diff changeset
   122
        iKeyListener = CVolumeKeyListener::NewL(this);
hgs
parents:
diff changeset
   123
   	    }
hgs
parents:
diff changeset
   124
   	else
hgs
parents:
diff changeset
   125
   	    {
hgs
parents:
diff changeset
   126
   	    User::InfoPrint(_L("Key not supported"));
hgs
parents:
diff changeset
   127
   	    iRepositoryListener = CRepositoryVolumeListener::NewL(this);
hgs
parents:
diff changeset
   128
   	    }
hgs
parents:
diff changeset
   129
	}
hgs
parents:
diff changeset
   130
hgs
parents:
diff changeset
   131
void CSvgtPlugin::SetWindowL(const NPWindow *aWindow,const TRect& aRect)
hgs
parents:
diff changeset
   132
    {
hgs
parents:
diff changeset
   133
    iCurrentWindow.x = aWindow->x;
hgs
parents:
diff changeset
   134
    iCurrentWindow.y = aWindow->y;
hgs
parents:
diff changeset
   135
    iCurrentWindow.window = aWindow->window;
hgs
parents:
diff changeset
   136
    iCurrentWindow.clipRect = aWindow->clipRect;
hgs
parents:
diff changeset
   137
    iCurrentWindow.type = aWindow->type;
hgs
parents:
diff changeset
   138
    iCurrentWindow.width = aWindow->width;
hgs
parents:
diff changeset
   139
    iCurrentWindow.height = aWindow->height;
hgs
parents:
diff changeset
   140
hgs
parents:
diff changeset
   141
    iPluginAdapter = static_cast<MPluginAdapter*>(aWindow->window);
hgs
parents:
diff changeset
   142
    iParentControl = iPluginAdapter->GetParentControl();
hgs
parents:
diff changeset
   143
    if (iControl == NULL)
hgs
parents:
diff changeset
   144
        {
hgs
parents:
diff changeset
   145
        iControl = new (ELeave) CSvgtPluginControl;
hgs
parents:
diff changeset
   146
        iControl->ConstructL(this,iParentControl);
hgs
parents:
diff changeset
   147
        iPluginAdapter->PluginConstructedL(iControl);
hgs
parents:
diff changeset
   148
        iPluginAdapter->SetPluginNotifier(iControl);
hgs
parents:
diff changeset
   149
        }
hgs
parents:
diff changeset
   150
hgs
parents:
diff changeset
   151
	if ( !iControl || !iSvgModule || aRect.Width() <= 0 || aRect.Height() <= 0 )
hgs
parents:
diff changeset
   152
    	{
hgs
parents:
diff changeset
   153
		  return;
hgs
parents:
diff changeset
   154
		  }
hgs
parents:
diff changeset
   155
	iSetWindowCalled = ETrue;
hgs
parents:
diff changeset
   156
	
hgs
parents:
diff changeset
   157
	    iControl->SetRect(aRect);
hgs
parents:
diff changeset
   158
	
hgs
parents:
diff changeset
   159
	if ( iRenderWidth != aRect.Width() ||
hgs
parents:
diff changeset
   160
	     iRenderHeight != aRect.Height() )
hgs
parents:
diff changeset
   161
		{
hgs
parents:
diff changeset
   162
		iRenderWidth = aRect.Width();
hgs
parents:
diff changeset
   163
		iRenderHeight = aRect.Height();
hgs
parents:
diff changeset
   164
		
hgs
parents:
diff changeset
   165
		// Browser initially sends width/height as zero 
hgs
parents:
diff changeset
   166
		// if width/height are not specified
hgs
parents:
diff changeset
   167
		// Later if svg is available to us we call resize after adjustDimention
hgs
parents:
diff changeset
   168
		// But if we dont do adjustDimention quick enough
hgs
parents:
diff changeset
   169
		// Browser sends default width/Height as 300x150
hgs
parents:
diff changeset
   170
		
hgs
parents:
diff changeset
   171
		// To Ensure that we are setting the object width/height and 
hgs
parents:
diff changeset
   172
		// browser is not setting default width/height ahead of us doing resize
hgs
parents:
diff changeset
   173
		
hgs
parents:
diff changeset
   174
		// In adjustDimention if width/height are specified at the browser level
hgs
parents:
diff changeset
   175
		// iAdjusted is set to false, the second condition is to ensure that
hgs
parents:
diff changeset
   176
		// if the browser does a resize at a later point it should be allowed
hgs
parents:
diff changeset
   177
		if(iAdjusted || (iObjectWidthSpecified && iObjectHeightSpecified))
hgs
parents:
diff changeset
   178
		    {
hgs
parents:
diff changeset
   179
		    iObjectWidth  = iRenderWidth;
hgs
parents:
diff changeset
   180
            iObjectHeight = iRenderHeight;
hgs
parents:
diff changeset
   181
		    }
hgs
parents:
diff changeset
   182
		iSvgModule->Pause(); //fix for CGSR-7CN7T7
hgs
parents:
diff changeset
   183
		
hgs
parents:
diff changeset
   184
		User::LeaveIfError( iRenderBuffer->Create(
hgs
parents:
diff changeset
   185
							TSize( iRenderWidth, iRenderHeight ), EColor64K ) );
hgs
parents:
diff changeset
   186
		iSvgModule->SetFrameBuffer( iRenderBuffer );
hgs
parents:
diff changeset
   187
		iSvgModule->Resume(); // fix for CGSR-7CN7T7
hgs
parents:
diff changeset
   188
		}
hgs
parents:
diff changeset
   189
hgs
parents:
diff changeset
   190
hgs
parents:
diff changeset
   191
		if ( iExpectedDefaultSize )
hgs
parents:
diff changeset
   192
			{
hgs
parents:
diff changeset
   193
			iExpectedDefaultSize = EFalse;
hgs
parents:
diff changeset
   194
            AdjustDimention(ETrue,ETrue);
hgs
parents:
diff changeset
   195
			}
hgs
parents:
diff changeset
   196
hgs
parents:
diff changeset
   197
    	if(iControlSize != aRect.Size())
hgs
parents:
diff changeset
   198
    		{
hgs
parents:
diff changeset
   199
            iRenderWidth = aRect.Width();
hgs
parents:
diff changeset
   200
            iRenderHeight = aRect.Height();
hgs
parents:
diff changeset
   201
	    	CFbsBitmap * lTempRenderBuffer = new (ELeave) CFbsBitmap();
hgs
parents:
diff changeset
   202
            CleanupStack::PushL(lTempRenderBuffer);
hgs
parents:
diff changeset
   203
            User::LeaveIfError( lTempRenderBuffer->Create( TSize(iRenderWidth,iRenderHeight), EColor64K ));
hgs
parents:
diff changeset
   204
			iSvgModule->SetFrameBuffer(lTempRenderBuffer);
hgs
parents:
diff changeset
   205
hgs
parents:
diff changeset
   206
			delete	iRenderBuffer;
hgs
parents:
diff changeset
   207
			iRenderBuffer = lTempRenderBuffer;
hgs
parents:
diff changeset
   208
			CleanupStack::Pop(lTempRenderBuffer);
hgs
parents:
diff changeset
   209
			lTempRenderBuffer = NULL;
hgs
parents:
diff changeset
   210
			iControlSize = aRect.Size();
hgs
parents:
diff changeset
   211
			iControl->iContentDimension = iSvgModule->ContentDimensions();
hgs
parents:
diff changeset
   212
			}
hgs
parents:
diff changeset
   213
        // For autoloading feature.
hgs
parents:
diff changeset
   214
            if ( iControl->IsAsFileCalled() && iControl->GetFilename().Length() > 0 &&
hgs
parents:
diff changeset
   215
                 !iStartCalled )
hgs
parents:
diff changeset
   216
            {
hgs
parents:
diff changeset
   217
hgs
parents:
diff changeset
   218
                    TBool widthInPercentage;
hgs
parents:
diff changeset
   219
                    TBool heightInPercentage;
hgs
parents:
diff changeset
   220
                    
hgs
parents:
diff changeset
   221
	                iControl->iContentDimension = iSvgModule->ContentDimensionsInPercentage();
hgs
parents:
diff changeset
   222
	                if(iControl->iContentDimension.iWidth == -1 )
hgs
parents:
diff changeset
   223
	                {
hgs
parents:
diff changeset
   224
	                    widthInPercentage = EFalse;
hgs
parents:
diff changeset
   225
	                    if(iSvgModule->SvgDocument())
hgs
parents:
diff changeset
   226
	                    {
hgs
parents:
diff changeset
   227
	                        iControl->iContentDimension.iWidth = iSvgModule->GetViewportWidth(iSvgModule->SvgDocument());    
hgs
parents:
diff changeset
   228
	                    }
hgs
parents:
diff changeset
   229
	                    else
hgs
parents:
diff changeset
   230
	                    {
hgs
parents:
diff changeset
   231
	                        return;
hgs
parents:
diff changeset
   232
	                    }
hgs
parents:
diff changeset
   233
	                    
hgs
parents:
diff changeset
   234
	                }
hgs
parents:
diff changeset
   235
	                else 
hgs
parents:
diff changeset
   236
                    {
hgs
parents:
diff changeset
   237
	                    widthInPercentage = ETrue;
hgs
parents:
diff changeset
   238
                    }
hgs
parents:
diff changeset
   239
                    
hgs
parents:
diff changeset
   240
                    if(iControl->iContentDimension.iHeight == -1)
hgs
parents:
diff changeset
   241
                    {
hgs
parents:
diff changeset
   242
                        heightInPercentage = EFalse;
hgs
parents:
diff changeset
   243
                        if(iSvgModule->SvgDocument())
hgs
parents:
diff changeset
   244
	                    {
hgs
parents:
diff changeset
   245
	                        iControl->iContentDimension.iHeight = iSvgModule->GetViewportHeight(iSvgModule->SvgDocument());
hgs
parents:
diff changeset
   246
	                    }
hgs
parents:
diff changeset
   247
	                    else
hgs
parents:
diff changeset
   248
	                    {
hgs
parents:
diff changeset
   249
	                        return;
hgs
parents:
diff changeset
   250
	                    }
hgs
parents:
diff changeset
   251
                    }
hgs
parents:
diff changeset
   252
                    else
hgs
parents:
diff changeset
   253
                    {
hgs
parents:
diff changeset
   254
                        heightInPercentage = ETrue;
hgs
parents:
diff changeset
   255
                    }
hgs
parents:
diff changeset
   256
                    // After loading the content, the width & height will be visible to plugin.
hgs
parents:
diff changeset
   257
                    // It is time to adjust the size if needed.
hgs
parents:
diff changeset
   258
                    if ( AdjustDimention(widthInPercentage,heightInPercentage) )
hgs
parents:
diff changeset
   259
                        {
hgs
parents:
diff changeset
   260
                        // dimention change is needed so return and notify Browser.
hgs
parents:
diff changeset
   261
                        return;
hgs
parents:
diff changeset
   262
                        }
hgs
parents:
diff changeset
   263
                    iSvgModule->Start();
hgs
parents:
diff changeset
   264
                    		iStartCalled = ETrue;
hgs
parents:
diff changeset
   265
            } 
hgs
parents:
diff changeset
   266
           
hgs
parents:
diff changeset
   267
	}
hgs
parents:
diff changeset
   268
hgs
parents:
diff changeset
   269
hgs
parents:
diff changeset
   270
CSvgtPluginControl* CSvgtPlugin::Control()
hgs
parents:
diff changeset
   271
    {
hgs
parents:
diff changeset
   272
    return iControl;
hgs
parents:
diff changeset
   273
    }
hgs
parents:
diff changeset
   274
hgs
parents:
diff changeset
   275
NPP CSvgtPlugin::Instance()
hgs
parents:
diff changeset
   276
    {
hgs
parents:
diff changeset
   277
    return iInstance;
hgs
parents:
diff changeset
   278
    }
hgs
parents:
diff changeset
   279
hgs
parents:
diff changeset
   280
void  CSvgtPlugin::GetSizeOfRenderBuffer(TSize& aSize)
hgs
parents:
diff changeset
   281
	{
hgs
parents:
diff changeset
   282
	if ( iRenderBuffer )
hgs
parents:
diff changeset
   283
		{
hgs
parents:
diff changeset
   284
		aSize = iRenderBuffer->SizeInPixels();
hgs
parents:
diff changeset
   285
		}
hgs
parents:
diff changeset
   286
	else
hgs
parents:
diff changeset
   287
		{
hgs
parents:
diff changeset
   288
		aSize = TSize ( 0, 0 );
hgs
parents:
diff changeset
   289
		}
hgs
parents:
diff changeset
   290
	}
hgs
parents:
diff changeset
   291
hgs
parents:
diff changeset
   292
hgs
parents:
diff changeset
   293
hgs
parents:
diff changeset
   294
/**********************************************************************/
hgs
parents:
diff changeset
   295
//					implements MSvgRequestObserver
hgs
parents:
diff changeset
   296
/**********************************************************************/
hgs
parents:
diff changeset
   297
hgs
parents:
diff changeset
   298
void CSvgtPlugin::UpdateScreen()
hgs
parents:
diff changeset
   299
	{
hgs
parents:
diff changeset
   300
	iControl->DrawNow();
hgs
parents:
diff changeset
   301
	}
hgs
parents:
diff changeset
   302
hgs
parents:
diff changeset
   303
hgs
parents:
diff changeset
   304
TBool CSvgtPlugin::ScriptCall( const TDesC& /*aScript*/,
hgs
parents:
diff changeset
   305
                                  CSvgElementImpl* /*aCallerElement*/ )
hgs
parents:
diff changeset
   306
	{
hgs
parents:
diff changeset
   307
    return EFalse;
hgs
parents:
diff changeset
   308
	}
hgs
parents:
diff changeset
   309
hgs
parents:
diff changeset
   310
TBool CSvgtPlugin::LinkEntered( const TDesC& /* aUri */ )
hgs
parents:
diff changeset
   311
{
hgs
parents:
diff changeset
   312
    // update mouse pointer here
hgs
parents:
diff changeset
   313
    return ETrue;
hgs
parents:
diff changeset
   314
}
hgs
parents:
diff changeset
   315
hgs
parents:
diff changeset
   316
TBool CSvgtPlugin::LinkExited( const TDesC& /* aUri */ )
hgs
parents:
diff changeset
   317
{
hgs
parents:
diff changeset
   318
    // update mouse pointer here
hgs
parents:
diff changeset
   319
    return ETrue;
hgs
parents:
diff changeset
   320
}
hgs
parents:
diff changeset
   321
TBool CSvgtPlugin::LinkActivated( const TDesC& aUrl )
hgs
parents:
diff changeset
   322
	{
hgs
parents:
diff changeset
   323
	CSvgtPluginEcomMain* lSvgtPluginEcomMain = (CSvgtPluginEcomMain*) Dll :: Tls ();
hgs
parents:
diff changeset
   324
	NPNetscapeFuncs* lNetscapeFuncs = lSvgtPluginEcomMain->Funcs();
hgs
parents:
diff changeset
   325
	if(lNetscapeFuncs)
hgs
parents:
diff changeset
   326
		{
hgs
parents:
diff changeset
   327
        TPtrC lTarget('\0',0);
hgs
parents:
diff changeset
   328
        lTarget.Set(_L("_parent"));
hgs
parents:
diff changeset
   329
        lNetscapeFuncs->geturl(iInstance,aUrl,&lTarget);
hgs
parents:
diff changeset
   330
   		}
hgs
parents:
diff changeset
   331
	return ETrue;
hgs
parents:
diff changeset
   332
	}
hgs
parents:
diff changeset
   333
hgs
parents:
diff changeset
   334
void CSvgtPlugin::VolumeChanged(TInt aNewValue)
hgs
parents:
diff changeset
   335
    {
hgs
parents:
diff changeset
   336
   	RDebug::Print(_L("Volume level: %d"), aNewValue);    
hgs
parents:
diff changeset
   337
    aNewValue *= 10; //to make the volume in percentage
hgs
parents:
diff changeset
   338
    iSvgModule->SetAudioVolume( aNewValue );
hgs
parents:
diff changeset
   339
    }
hgs
parents:
diff changeset
   340
    
hgs
parents:
diff changeset
   341
TInt CSvgtPlugin::FetchImage(const TDesC&  aUri,  RFs& /*aSession*/, RFile& /*aFileHandle*/ )
hgs
parents:
diff changeset
   342
{
hgs
parents:
diff changeset
   343
    TRAPD(err,FetchImageL(aUri));
hgs
parents:
diff changeset
   344
    
hgs
parents:
diff changeset
   345
    return err;
hgs
parents:
diff changeset
   346
    
hgs
parents:
diff changeset
   347
}
hgs
parents:
diff changeset
   348
    
hgs
parents:
diff changeset
   349
void CSvgtPlugin::FetchImageL(const TDesC&  aUri)    
hgs
parents:
diff changeset
   350
    {
hgs
parents:
diff changeset
   351
        TInt    lCount     = iImageUrlInfoList.Count();
hgs
parents:
diff changeset
   352
        HBufC*  lListItem  = NULL;
hgs
parents:
diff changeset
   353
        HBufC*  lUrl       = NULL;
hgs
parents:
diff changeset
   354
                  
hgs
parents:
diff changeset
   355
        //checks whether the request is already made for same Uri.        
hgs
parents:
diff changeset
   356
        for(TInt i = 0; i < lCount; i++)
hgs
parents:
diff changeset
   357
        {
hgs
parents:
diff changeset
   358
            lListItem = HBufC::NewLC(iImageUrlInfoList[i]->Length());
hgs
parents:
diff changeset
   359
            lUrl      = aUri.AllocLC();
hgs
parents:
diff changeset
   360
                 
hgs
parents:
diff changeset
   361
            *lListItem = *iImageUrlInfoList[i];
hgs
parents:
diff changeset
   362
            
hgs
parents:
diff changeset
   363
            // Convert the List Item to Lower case
hgs
parents:
diff changeset
   364
            TPtr lListItemPtr = lListItem->Des();
hgs
parents:
diff changeset
   365
            lListItemPtr.LowerCase();
hgs
parents:
diff changeset
   366
            
hgs
parents:
diff changeset
   367
            // Convert the Url to Lower case
hgs
parents:
diff changeset
   368
            TPtr lUrlPtr = lUrl->Des();
hgs
parents:
diff changeset
   369
            lUrlPtr.LowerCase();
hgs
parents:
diff changeset
   370
            
hgs
parents:
diff changeset
   371
            if( lListItemPtr.Compare(lUrlPtr) == 0 )       	
hgs
parents:
diff changeset
   372
            {
hgs
parents:
diff changeset
   373
                CleanupStack::PopAndDestroy(2);
hgs
parents:
diff changeset
   374
                
hgs
parents:
diff changeset
   375
                lListItem = NULL;
hgs
parents:
diff changeset
   376
                lUrl      = NULL;
hgs
parents:
diff changeset
   377
               	// Same Url is already requested in the past, no need to continue.
hgs
parents:
diff changeset
   378
              	User::Leave(KErrAlreadyExists); // Indicates the download is pending
hgs
parents:
diff changeset
   379
            }
hgs
parents:
diff changeset
   380
            
hgs
parents:
diff changeset
   381
            CleanupStack::PopAndDestroy(2);
hgs
parents:
diff changeset
   382
            
hgs
parents:
diff changeset
   383
            lListItem = NULL;
hgs
parents:
diff changeset
   384
            lUrl      = NULL;
hgs
parents:
diff changeset
   385
        }
hgs
parents:
diff changeset
   386
        
hgs
parents:
diff changeset
   387
         
hgs
parents:
diff changeset
   388
        // --------------------------------------
hgs
parents:
diff changeset
   389
		// Request file from browser
hgs
parents:
diff changeset
   390
		// --------------------------------------
hgs
parents:
diff changeset
   391
		CSvgtPluginEcomMain* lSvgtPluginEcomMain = (CSvgtPluginEcomMain*) Dll :: Tls ();
hgs
parents:
diff changeset
   392
		NPNetscapeFuncs* lNetscapeFuncs = lSvgtPluginEcomMain->Funcs();
hgs
parents:
diff changeset
   393
		if(lNetscapeFuncs)
hgs
parents:
diff changeset
   394
		{
hgs
parents:
diff changeset
   395
			TPtrC lTarget('\0',0);
hgs
parents:
diff changeset
   396
			
hgs
parents:
diff changeset
   397
			lUrl = aUri.AllocL();
hgs
parents:
diff changeset
   398
			
hgs
parents:
diff changeset
   399
			// Current count is used as a context data.
hgs
parents:
diff changeset
   400
			void* contextptr = (void*)(lCount);   
hgs
parents:
diff changeset
   401
			NPError error = lNetscapeFuncs->geturlnotify(iInstance,aUri,NULL,contextptr);		
hgs
parents:
diff changeset
   402
			    
hgs
parents:
diff changeset
   403
			// Add the Url and RequestID to the List
hgs
parents:
diff changeset
   404
			iImageUrlInfoList.Append(lUrl);
hgs
parents:
diff changeset
   405
			    
hgs
parents:
diff changeset
   406
			if ( error != 0 )
hgs
parents:
diff changeset
   407
    		{
hgs
parents:
diff changeset
   408
                #ifdef _DEBUG
hgs
parents:
diff changeset
   409
                		lNetscapeFuncs->status(iInstance,_L("Image failed"));
hgs
parents:
diff changeset
   410
                #endif
hgs
parents:
diff changeset
   411
                
hgs
parents:
diff changeset
   412
                User::LeaveIfError(error);
hgs
parents:
diff changeset
   413
    		}
hgs
parents:
diff changeset
   414
			#ifdef _DEBUG
hgs
parents:
diff changeset
   415
            lNetscapeFuncs->status(iInstance,_L("Downloading Image"));
hgs
parents:
diff changeset
   416
            #endif
hgs
parents:
diff changeset
   417
		}
hgs
parents:
diff changeset
   418
	
hgs
parents:
diff changeset
   419
        
hgs
parents:
diff changeset
   420
        
hgs
parents:
diff changeset
   421
        User::Leave(KRequestPending); // Indicate the download is pending
hgs
parents:
diff changeset
   422
    }
hgs
parents:
diff changeset
   423
hgs
parents:
diff changeset
   424
TInt CSvgtPlugin::FetchFont( const TDesC& /* aUri */,  RFs& /* aSession */, RFile&  /* aFileHandle */)
hgs
parents:
diff changeset
   425
    {
hgs
parents:
diff changeset
   426
	// Fix for ANAE-775B7E. There is a limitaiton. For rendering text with 
hgs
parents:
diff changeset
   427
	// external font synchronous fetching of the file is needed. But the 
hgs
parents:
diff changeset
   428
	// external font file is fetched asynchronously by browser when we say 
hgs
parents:
diff changeset
   429
	// geturlnotify(). There is no API to pass the font data after fetching
hgs
parents:
diff changeset
   430
	// asynchronously. Hence the code here is removed by returning an error.
hgs
parents:
diff changeset
   431
	return KErrNotFound;
hgs
parents:
diff changeset
   432
    }
hgs
parents:
diff changeset
   433
hgs
parents:
diff changeset
   434
hgs
parents:
diff changeset
   435
TBool CSvgtPlugin::LinkActivatedWithShow(const TDesC& aUri,const TDesC& /*aShow*/)
hgs
parents:
diff changeset
   436
	{
hgs
parents:
diff changeset
   437
	CSvgtPluginEcomMain* lSvgtPluginEcomMain = (CSvgtPluginEcomMain*) Dll :: Tls ();
hgs
parents:
diff changeset
   438
	NPNetscapeFuncs* lNetscapeFuncs = lSvgtPluginEcomMain->Funcs();
hgs
parents:
diff changeset
   439
	if(lNetscapeFuncs)
hgs
parents:
diff changeset
   440
		{
hgs
parents:
diff changeset
   441
        TPtrC lTarget('\0',0);
hgs
parents:
diff changeset
   442
        lTarget.Set(_L("_parent"));
hgs
parents:
diff changeset
   443
		lNetscapeFuncs->geturl(iInstance,aUri,&lTarget);
hgs
parents:
diff changeset
   444
		}
hgs
parents:
diff changeset
   445
	return ETrue;
hgs
parents:
diff changeset
   446
	}
hgs
parents:
diff changeset
   447
hgs
parents:
diff changeset
   448
void CSvgtPlugin::GetSmilFitValue(TDes16 &aSmilValue)
hgs
parents:
diff changeset
   449
    {
hgs
parents:
diff changeset
   450
    aSmilValue.Copy(_L("meet"));
hgs
parents:
diff changeset
   451
    }
hgs
parents:
diff changeset
   452
hgs
parents:
diff changeset
   453
void CSvgtPlugin::UpdatePresentation(const TInt32&  aNoOfAnimation)
hgs
parents:
diff changeset
   454
	{
hgs
parents:
diff changeset
   455
 	if (iTotalNumerOfAnimation < 0)
hgs
parents:
diff changeset
   456
  		{
hgs
parents:
diff changeset
   457
 		if (aNoOfAnimation != 0)
hgs
parents:
diff changeset
   458
			{
hgs
parents:
diff changeset
   459
			iStaticContent = EFalse;
hgs
parents:
diff changeset
   460
			iTotalNumerOfAnimation = aNoOfAnimation;
hgs
parents:
diff changeset
   461
			}
hgs
parents:
diff changeset
   462
		else
hgs
parents:
diff changeset
   463
			{
hgs
parents:
diff changeset
   464
			iStaticContent = ETrue;
hgs
parents:
diff changeset
   465
			}
hgs
parents:
diff changeset
   466
		}
hgs
parents:
diff changeset
   467
 	else
hgs
parents:
diff changeset
   468
		{
hgs
parents:
diff changeset
   469
		iTotalNumerOfAnimation--;
hgs
parents:
diff changeset
   470
		}
hgs
parents:
diff changeset
   471
	}
hgs
parents:
diff changeset
   472
hgs
parents:
diff changeset
   473
void CSvgtPlugin::GetViewPort(TInt /*getWidth*/, TInt /*getHeight*/, TBool /*isWidthInPer*/, TBool /*isHeightInPer*/, TInt &setWidth, TInt &setHeight)
hgs
parents:
diff changeset
   474
{
hgs
parents:
diff changeset
   475
   
hgs
parents:
diff changeset
   476
    setWidth = iRenderWidth;    
hgs
parents:
diff changeset
   477
    setHeight = iRenderHeight;    
hgs
parents:
diff changeset
   478
    
hgs
parents:
diff changeset
   479
    iViewPortWidth = setWidth;
hgs
parents:
diff changeset
   480
    iViewPortHeight = setHeight;
hgs
parents:
diff changeset
   481
}
hgs
parents:
diff changeset
   482
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   483
// This function extracts attributes from the list that is passed from Browser.
hgs
parents:
diff changeset
   484
// Use to check if width & height are defined in XHTML tag
hgs
parents:
diff changeset
   485
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   486
//
hgs
parents:
diff changeset
   487
NPError CSvgtPlugin::SvgPluginNew(NPMIMEType /*pluginType*/, NPP instance,
hgs
parents:
diff changeset
   488
    uint16 /*mode*/, CDesC16Array* argn, CDesC16Array* argv, NPSavedData* )
hgs
parents:
diff changeset
   489
    {
hgs
parents:
diff changeset
   490
    if (instance->pdata != this)
hgs
parents:
diff changeset
   491
        {
hgs
parents:
diff changeset
   492
        return NPERR_INVALID_INSTANCE_ERROR;
hgs
parents:
diff changeset
   493
        }
hgs
parents:
diff changeset
   494
hgs
parents:
diff changeset
   495
    for (TInt i = 0; i < argn->Count(); i++)
hgs
parents:
diff changeset
   496
        {
hgs
parents:
diff changeset
   497
        TPtrC16 namePtr((*argn)[i]);
hgs
parents:
diff changeset
   498
        TPtrC16 valPtr((*argv)[i]);
hgs
parents:
diff changeset
   499
hgs
parents:
diff changeset
   500
        if (KWidth().FindF(namePtr) == 0)
hgs
parents:
diff changeset
   501
            {
hgs
parents:
diff changeset
   502
            TLex lString( valPtr );
hgs
parents:
diff changeset
   503
            lString.SkipSpace();
hgs
parents:
diff changeset
   504
            TInt result = lString.Val(iRenderWidth);
hgs
parents:
diff changeset
   505
            // Check if object width was specified as
hgs
parents:
diff changeset
   506
            // percentage value.
hgs
parents:
diff changeset
   507
            if ( valPtr.Locate( '%' ) != KErrNotFound )
hgs
parents:
diff changeset
   508
                {
hgs
parents:
diff changeset
   509
                // Do not store the value, browser takes
hgs
parents:
diff changeset
   510
                // care of computing the width
hgs
parents:
diff changeset
   511
            	iObjWidthInPercentage = ETrue; 
hgs
parents:
diff changeset
   512
                }
hgs
parents:
diff changeset
   513
            if (( result != KErrNone) || (iRenderWidth < 0))
hgs
parents:
diff changeset
   514
                {
hgs
parents:
diff changeset
   515
                iObjectWidth = 0;
hgs
parents:
diff changeset
   516
                }
hgs
parents:
diff changeset
   517
            else
hgs
parents:
diff changeset
   518
            	{
hgs
parents:
diff changeset
   519
	            iObjectWidth = iRenderWidth;
hgs
parents:
diff changeset
   520
            	}
hgs
parents:
diff changeset
   521
            iObjectWidthSpecified = ETrue;
hgs
parents:
diff changeset
   522
            }
hgs
parents:
diff changeset
   523
        else if (KHeight().FindF(namePtr) == 0)
hgs
parents:
diff changeset
   524
            {
hgs
parents:
diff changeset
   525
            TLex lString( valPtr );
hgs
parents:
diff changeset
   526
            lString.SkipSpace();
hgs
parents:
diff changeset
   527
            TInt result = lString.Val(iRenderHeight);
hgs
parents:
diff changeset
   528
            // Check if object height was specified as a
hgs
parents:
diff changeset
   529
            // percentage value.
hgs
parents:
diff changeset
   530
            if ( valPtr.Locate( '%' ) != KErrNotFound )
hgs
parents:
diff changeset
   531
                {
hgs
parents:
diff changeset
   532
                // Do not store the value, browser takes
hgs
parents:
diff changeset
   533
                // care of computing the height                
hgs
parents:
diff changeset
   534
            	iObjHeightInPercentage = ETrue; 
hgs
parents:
diff changeset
   535
                }
hgs
parents:
diff changeset
   536
            if (( result != KErrNone) || ( iRenderHeight < 0 ))
hgs
parents:
diff changeset
   537
                {
hgs
parents:
diff changeset
   538
                iObjectHeight = 0;
hgs
parents:
diff changeset
   539
                }
hgs
parents:
diff changeset
   540
            else
hgs
parents:
diff changeset
   541
           		{
hgs
parents:
diff changeset
   542
	            iObjectHeight = iRenderHeight;
hgs
parents:
diff changeset
   543
           		}
hgs
parents:
diff changeset
   544
           	iObjectHeightSpecified = ETrue ;
hgs
parents:
diff changeset
   545
            }
hgs
parents:
diff changeset
   546
        }
hgs
parents:
diff changeset
   547
hgs
parents:
diff changeset
   548
    return NPERR_NO_ERROR;
hgs
parents:
diff changeset
   549
    }
hgs
parents:
diff changeset
   550
hgs
parents:
diff changeset
   551
hgs
parents:
diff changeset
   552
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   553
// ResizeWindow() This function is to notify that a new set of dimention value
hgs
parents:
diff changeset
   554
// should be taken into consideration. The new w&h is determined from
hgs
parents:
diff changeset
   555
// AdjustDimention().
hgs
parents:
diff changeset
   556
//
hgs
parents:
diff changeset
   557
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   558
//
hgs
parents:
diff changeset
   559
void CSvgtPlugin::ResizeWindow(TInt aWidth, TInt aHeight)
hgs
parents:
diff changeset
   560
    {
hgs
parents:
diff changeset
   561
    NPPVariable variable;
hgs
parents:
diff changeset
   562
	CSvgtPluginEcomMain* lSvgtPluginEcomMain = (CSvgtPluginEcomMain*) Dll::Tls();
hgs
parents:
diff changeset
   563
	NPNetscapeFuncs* lNetscapeFuncs = lSvgtPluginEcomMain->Funcs();
hgs
parents:
diff changeset
   564
	NPWindow newWindow;
hgs
parents:
diff changeset
   565
    variable = NPPVpluginWindowSize;
hgs
parents:
diff changeset
   566
    newWindow.x = iCurrentWindow.x;
hgs
parents:
diff changeset
   567
    newWindow.y = iCurrentWindow.y;
hgs
parents:
diff changeset
   568
    newWindow.window = iCurrentWindow.window;
hgs
parents:
diff changeset
   569
    newWindow.clipRect = iCurrentWindow.clipRect;
hgs
parents:
diff changeset
   570
    newWindow.type = iCurrentWindow.type;
hgs
parents:
diff changeset
   571
    newWindow.width = aWidth;
hgs
parents:
diff changeset
   572
    newWindow.height = aHeight;
hgs
parents:
diff changeset
   573
    TInt err = lNetscapeFuncs->setvalue(iInstance, variable, (void*)&newWindow);
hgs
parents:
diff changeset
   574
    }
hgs
parents:
diff changeset
   575
hgs
parents:
diff changeset
   576
hgs
parents:
diff changeset
   577
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   578
// AdjustDimention() This function does the logic to check if width & height
hgs
parents:
diff changeset
   579
// is needed to be adjusted
hgs
parents:
diff changeset
   580
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   581
//
hgs
parents:
diff changeset
   582
TBool CSvgtPlugin::AdjustDimention( TBool aWidthInPercentage, TBool aHeightInPercentage)
hgs
parents:
diff changeset
   583
    {
hgs
parents:
diff changeset
   584
    iSvgModule->AddListener( static_cast < MSvgViewPortListener*>(this), ESvgViewPortListener );
hgs
parents:
diff changeset
   585
    if ( iAdjusted )
hgs
parents:
diff changeset
   586
    	return EFalse;
hgs
parents:
diff changeset
   587
    
hgs
parents:
diff changeset
   588
    // we set the width height in all cases except when width/height has been
hgs
parents:
diff changeset
   589
    // explicitly specified in the browser hence its set here for all cases
hgs
parents:
diff changeset
   590
    iAdjusted = ETrue;
hgs
parents:
diff changeset
   591
   // html provides absolute width, no height
hgs
parents:
diff changeset
   592
   // svg provides absolute width and absolute height
hgs
parents:
diff changeset
   593
   if (
hgs
parents:
diff changeset
   594
   ( iObjectWidthSpecified && !iObjWidthInPercentage && !iObjectHeightSpecified ) 
hgs
parents:
diff changeset
   595
   && ( !aWidthInPercentage && !aHeightInPercentage)
hgs
parents:
diff changeset
   596
   )
hgs
parents:
diff changeset
   597
        {
hgs
parents:
diff changeset
   598
        // only iObjectWidth is valid
hgs
parents:
diff changeset
   599
        // Adjust missing object value as per aspect ratio of 
hgs
parents:
diff changeset
   600
        // svg's viewport
hgs
parents:
diff changeset
   601
        if(iControl->iContentDimension.iWidth)
hgs
parents:
diff changeset
   602
        {
hgs
parents:
diff changeset
   603
            TReal newHeight = (TInt)((TReal32)iObjectWidth *
hgs
parents:
diff changeset
   604
            ( (TReal32)iControl->iContentDimension.iHeight /
hgs
parents:
diff changeset
   605
                (TReal32)iControl->iContentDimension.iWidth));
hgs
parents:
diff changeset
   606
            
hgs
parents:
diff changeset
   607
            ResizeWindow(iObjectWidth, newHeight);
hgs
parents:
diff changeset
   608
        
hgs
parents:
diff changeset
   609
        }
hgs
parents:
diff changeset
   610
        return ETrue;
hgs
parents:
diff changeset
   611
        }
hgs
parents:
diff changeset
   612
    
hgs
parents:
diff changeset
   613
   // html provides no width and absolute height
hgs
parents:
diff changeset
   614
   // svg provides absolute width and absolute height
hgs
parents:
diff changeset
   615
   else if (
hgs
parents:
diff changeset
   616
    ( !iObjectWidthSpecified && iObjectHeightSpecified && !iObjHeightInPercentage ) 
hgs
parents:
diff changeset
   617
    && ( !aWidthInPercentage && !aHeightInPercentage)
hgs
parents:
diff changeset
   618
    )
hgs
parents:
diff changeset
   619
        {
hgs
parents:
diff changeset
   620
        // only iObjectHeight is valid
hgs
parents:
diff changeset
   621
        // Adjust missing object value as per aspect ratio of 
hgs
parents:
diff changeset
   622
        // svg's viewport
hgs
parents:
diff changeset
   623
        if(iControl->iContentDimension.iHeight)
hgs
parents:
diff changeset
   624
        {
hgs
parents:
diff changeset
   625
            TInt newWidth = (TInt)((TReal32)iObjectHeight *
hgs
parents:
diff changeset
   626
            ( (TReal32)iControl->iContentDimension.iWidth /
hgs
parents:
diff changeset
   627
                (TReal32)iControl->iContentDimension.iHeight));
hgs
parents:
diff changeset
   628
            ResizeWindow(newWidth, iObjectHeight);
hgs
parents:
diff changeset
   629
            
hgs
parents:
diff changeset
   630
        }
hgs
parents:
diff changeset
   631
        return ETrue;
hgs
parents:
diff changeset
   632
        }
hgs
parents:
diff changeset
   633
   // html provides no width and no height
hgs
parents:
diff changeset
   634
   // svg provides absolute width and absolute height
hgs
parents:
diff changeset
   635
   else if(
hgs
parents:
diff changeset
   636
    (!iObjectWidthSpecified && !iObjectHeightSpecified)
hgs
parents:
diff changeset
   637
     && ( !aWidthInPercentage && !aHeightInPercentage)
hgs
parents:
diff changeset
   638
     )
hgs
parents:
diff changeset
   639
        {
hgs
parents:
diff changeset
   640
        ResizeWindow(iControl->iContentDimension.iWidth, iControl->iContentDimension.iHeight);
hgs
parents:
diff changeset
   641
        return ETrue;
hgs
parents:
diff changeset
   642
        }
hgs
parents:
diff changeset
   643
   // html provides width and height be it percentages or absolute values
hgs
parents:
diff changeset
   644
   else if(iObjectWidthSpecified && iObjectHeightSpecified)
hgs
parents:
diff changeset
   645
        {
hgs
parents:
diff changeset
   646
        iAdjusted = EFalse;
hgs
parents:
diff changeset
   647
        return EFalse;
hgs
parents:
diff changeset
   648
        }
hgs
parents:
diff changeset
   649
    else
hgs
parents:
diff changeset
   650
        {
hgs
parents:
diff changeset
   651
        TReal newWidth = 0.0f;
hgs
parents:
diff changeset
   652
        TReal newHeight = 0.0f;
hgs
parents:
diff changeset
   653
        CEikonEnv* lEnv = STATIC_CAST( CEikonEnv*, iControl->ControlEnv() );
hgs
parents:
diff changeset
   654
        
hgs
parents:
diff changeset
   655
        TRect lClientRect = TRect( TPoint( 0,0 ), lEnv->EikAppUi()->ClientRect().Size());
hgs
parents:
diff changeset
   656
       
hgs
parents:
diff changeset
   657
       // if the browser has specified a valid absolute value width
hgs
parents:
diff changeset
   658
        if ( !iObjWidthInPercentage && iObjectWidthSpecified)
hgs
parents:
diff changeset
   659
            {
hgs
parents:
diff changeset
   660
            newWidth = iObjectWidth; 
hgs
parents:
diff changeset
   661
            }
hgs
parents:
diff changeset
   662
        // if the browser has specified a valid percentage value width
hgs
parents:
diff changeset
   663
        else if (iObjWidthInPercentage && iObjectWidthSpecified )
hgs
parents:
diff changeset
   664
            {
hgs
parents:
diff changeset
   665
            // Compute the new dimension by scaling clientRect dimension
hgs
parents:
diff changeset
   666
            newWidth = lClientRect.Width() * iObjectWidth / 100;
hgs
parents:
diff changeset
   667
            }
hgs
parents:
diff changeset
   668
        // if the browser has specified a valid absolute value height
hgs
parents:
diff changeset
   669
        if ( !iObjHeightInPercentage && iObjectHeightSpecified)
hgs
parents:
diff changeset
   670
            {
hgs
parents:
diff changeset
   671
            newHeight = iObjectHeight;
hgs
parents:
diff changeset
   672
            }
hgs
parents:
diff changeset
   673
        // if the browser has specified a valid percentage value Height
hgs
parents:
diff changeset
   674
        else if(iObjHeightInPercentage && iObjectHeightSpecified)
hgs
parents:
diff changeset
   675
            {
hgs
parents:
diff changeset
   676
            // Compute the new dimension by scaling clientRect dimension
hgs
parents:
diff changeset
   677
            newHeight = lClientRect.Height() * iObjectHeight / 100;
hgs
parents:
diff changeset
   678
            }
hgs
parents:
diff changeset
   679
            
hgs
parents:
diff changeset
   680
        // if the browser has not specified the width
hgs
parents:
diff changeset
   681
        if(!iObjectWidthSpecified)
hgs
parents:
diff changeset
   682
            {
hgs
parents:
diff changeset
   683
            if(aWidthInPercentage)
hgs
parents:
diff changeset
   684
                {
hgs
parents:
diff changeset
   685
                newWidth = lClientRect.Width() * iControl->iContentDimension.iWidth / 100;
hgs
parents:
diff changeset
   686
                }
hgs
parents:
diff changeset
   687
            else
hgs
parents:
diff changeset
   688
                {
hgs
parents:
diff changeset
   689
                newWidth = iControl->iContentDimension.iWidth;
hgs
parents:
diff changeset
   690
                }
hgs
parents:
diff changeset
   691
            }
hgs
parents:
diff changeset
   692
        // if the browser has not specified the height
hgs
parents:
diff changeset
   693
        if(!iObjectHeightSpecified)
hgs
parents:
diff changeset
   694
            {
hgs
parents:
diff changeset
   695
            if(aHeightInPercentage)
hgs
parents:
diff changeset
   696
                {
hgs
parents:
diff changeset
   697
                newHeight = lClientRect.Height() * iControl->iContentDimension.iHeight / 100;
hgs
parents:
diff changeset
   698
                }
hgs
parents:
diff changeset
   699
            else
hgs
parents:
diff changeset
   700
                {
hgs
parents:
diff changeset
   701
                newHeight = iControl->iContentDimension.iHeight;
hgs
parents:
diff changeset
   702
                }
hgs
parents:
diff changeset
   703
            }
hgs
parents:
diff changeset
   704
        ResizeWindow(newWidth, newHeight);
hgs
parents:
diff changeset
   705
        return ETrue;   
hgs
parents:
diff changeset
   706
        }
hgs
parents:
diff changeset
   707
    }
hgs
parents:
diff changeset
   708
hgs
parents:
diff changeset
   709
TBool CSvgtPlugin::LoadSvgFile( const TDesC& aFilename )
hgs
parents:
diff changeset
   710
	{
hgs
parents:
diff changeset
   711
	if ( !iSvgModule )
hgs
parents:
diff changeset
   712
		{
hgs
parents:
diff changeset
   713
		return EFalse;
hgs
parents:
diff changeset
   714
		}
hgs
parents:
diff changeset
   715
	MSvgError* error = iSvgModule->Load( aFilename );
hgs
parents:
diff changeset
   716
	if ( !error )
hgs
parents:
diff changeset
   717
		{
hgs
parents:
diff changeset
   718
		return EFalse;
hgs
parents:
diff changeset
   719
		}
hgs
parents:
diff changeset
   720
	
hgs
parents:
diff changeset
   721
	// Loading error
hgs
parents:
diff changeset
   722
    if ( error->HasError() && !error->IsWarning() )
hgs
parents:
diff changeset
   723
        {
hgs
parents:
diff changeset
   724
    	return EFalse;
hgs
parents:
diff changeset
   725
        }
hgs
parents:
diff changeset
   726
    TInt currentVolume;
hgs
parents:
diff changeset
   727
    if (FeatureManager::FeatureSupported(KFeatureIdSideVolumeKeys))
hgs
parents:
diff changeset
   728
        {
hgs
parents:
diff changeset
   729
        currentVolume = iKeyListener->GetCurrentVolume();
hgs
parents:
diff changeset
   730
   	    }
hgs
parents:
diff changeset
   731
   	else
hgs
parents:
diff changeset
   732
   	    {
hgs
parents:
diff changeset
   733
        currentVolume = iRepositoryListener->GetCurrentVolume();
hgs
parents:
diff changeset
   734
   	    }
hgs
parents:
diff changeset
   735
   	    
hgs
parents:
diff changeset
   736
   	VolumeChanged(currentVolume );
hgs
parents:
diff changeset
   737
    iTotalNumerOfAnimation = -1;
hgs
parents:
diff changeset
   738
    return ETrue;
hgs
parents:
diff changeset
   739
	}
hgs
parents:
diff changeset
   740