# HG changeset patch # User Pat Downey # Date 1283340046 -3600 # Node ID 1902ade171ab1f8e48b86bd7ce27ce0624285e67 # Parent db5c883ad1c57ee549f6999bc4c808e4e119f5c2 Revert incorrect RCL_3 drop: Revision: 201026 Kit: 201035 diff -r db5c883ad1c5 -r 1902ade171ab group/bld.inf --- a/group/bld.inf Tue Aug 31 16:06:58 2010 +0300 +++ b/group/bld.inf Wed Sep 01 12:20:46 2010 +0100 @@ -24,6 +24,7 @@ */ #include "../svgtopt/group/bld.inf" +#include "../svgtopt/SVGTPlugin/group/bld.inf" PRJ_PLATFORMS DEFAULT diff -r db5c883ad1c5 -r 1902ade171ab package_definition.xml --- a/package_definition.xml Tue Aug 31 16:06:58 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff -r db5c883ad1c5 -r 1902ade171ab package_map.xml --- a/package_map.xml Tue Aug 31 16:06:58 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ - diff -r db5c883ad1c5 -r 1902ade171ab svgt_plat/svgt_api/group/bld.inf --- a/svgt_plat/svgt_api/group/bld.inf Tue Aug 31 16:06:58 2010 +0300 +++ b/svgt_plat/svgt_api/group/bld.inf Wed Sep 01 12:20:46 2010 +0100 @@ -33,7 +33,3 @@ ../inc/SVGAnimationListener.h MW_LAYER_PLATFORM_EXPORT_PATH(SVGAnimationListener.h) ../inc/SVGRequestObserver.h MW_LAYER_PLATFORM_EXPORT_PATH(SVGRequestObserver.h) ../inc/SVGRendererId.h MW_LAYER_PLATFORM_EXPORT_PATH(SVGRendererId.h) - -../inc/svgtbitmap.h MW_LAYER_PLATFORM_EXPORT_PATH(svgtbitmap.h) -../inc/svgtbitmap.inl MW_LAYER_PLATFORM_EXPORT_PATH(svgtbitmap.inl) - diff -r db5c883ad1c5 -r 1902ade171ab svgt_plat/svgt_api/inc/SVGEngineInterfaceImpl.h --- a/svgt_plat/svgt_api/inc/SVGEngineInterfaceImpl.h Tue Aug 31 16:06:58 2010 +0300 +++ b/svgt_plat/svgt_api/inc/SVGEngineInterfaceImpl.h Wed Sep 01 12:20:46 2010 +0100 @@ -105,9 +105,6 @@ class CSvgTextElementImpl; class CSvgBitmapFontProvider; - -class CSvgtBitmap; - class MRect { public: @@ -650,8 +647,6 @@ */ IMPORT_C void GenerateMask( CFbsBitmap* aMask, TInt aEngine = NULL ); - IMPORT_C void GenerateMask( CSvgtBitmap* aMask, TInt aEngine = NULL ); - /** * Set the color for clearing background. * @@ -876,7 +871,6 @@ */ IMPORT_C void SetGdiContextL( CSvgEngineImpl* aEngine, CFbsBitmap* aFrameBuffer ); - IMPORT_C void SetGdiContextL( CSvgEngineImpl* aEngine, CSvgtBitmap* aFrameBuffer ); /** * Associate the given document with the given engine. * diff -r db5c883ad1c5 -r 1902ade171ab svgt_plat/svgt_api/inc/SvgJavaInterfaceImpl.h --- a/svgt_plat/svgt_api/inc/SvgJavaInterfaceImpl.h Tue Aug 31 16:06:58 2010 +0300 +++ b/svgt_plat/svgt_api/inc/SvgJavaInterfaceImpl.h Wed Sep 01 12:20:46 2010 +0100 @@ -33,8 +33,6 @@ typedef int SvgPathHandle; typedef short SvgAttrType; -typedef unsigned int SvgtBitmapHandle; - class CSvgEngineImpl; class CSvgDocumentImpl; class CFbsBitmap; @@ -1490,12 +1488,7 @@ SvgEngineHandle aEngineHandle, SvgDocumentHandle aDocumentHandle, TInt aSurfaceHandle, TInt aSurfaceMaskHandle = NULL, TReal32 aCurrentTime = 0.0f ) __SOFTFP; - IMPORT_C void SvgEngineRenderDocument( - SvgEngineHandle aEngineHandle, SvgDocumentHandle aDocumentHandle, - SvgtBitmapHandle aSurfaceHandle, SvgtBitmapHandle aSurfaceMaskHandle = NULL, - TReal32 aCurrentTime = 0.0f ) __SOFTFP; - - IMPORT_C void SvgEngineRenderDocumentL( + IMPORT_C void SvgEngineRenderDocumentL( SvgEngineHandle aEngineHandle, SvgDocumentHandle aDocumentHandle, TInt aSurfaceHandle, const TPoint& aAnchor, const TRect& aRenderArea, TReal32 aCurrentTime, TReal32 aAlpha ) __SOFTFP; diff -r db5c883ad1c5 -r 1902ade171ab svgt_plat/svgt_api/inc/SvgListener.h --- a/svgt_plat/svgt_api/inc/SvgListener.h Tue Aug 31 16:06:58 2010 +0300 +++ b/svgt_plat/svgt_api/inc/SvgListener.h Wed Sep 01 12:20:46 2010 +0100 @@ -23,7 +23,7 @@ #include #endif -#include "xml/mxmlattributes.h" +#include "MXMLAttributes.h" class CSvgElementImpl; diff -r db5c883ad1c5 -r 1902ade171ab svgt_plat/svgt_api/inc/svgtbitmap.h --- a/svgt_plat/svgt_api/inc/svgtbitmap.h Tue Aug 31 16:06:58 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies). - * All rights reserved. - * This component and the accompanying materials are made available - * under the terms of "Eclipse Public License v1.0" - * which accompanies this distribution, and is available - * at the URL "http://www.eclipse.org/legal/epl-v10.html". - * - * Initial Contributors: - * Nokia Corporation - initial contribution. - * - * Contributors: - * - * Description: SVGTbitmap header file - * -*/ - -#ifndef SVGTBITMAP_H_ -#define SVGTBITMAP_H_ - -#include -#include - -class CSvgtBitmap : public CBase - { -public: // constructors - inline CSvgtBitmap( TInt8* aBitmapBuffer, TSize aBitmapSize, - TDisplayMode aDisplayMode, TInt aStride); - -public: //class methods - /* - * returns target image buffer - */ - inline TInt8* BitmapBuffer() const; - - /* - * returns target image size in pixels - */ - inline TSize SizeInPixels() const; - - /* - * returns target image display mode - */ - inline TDisplayMode DisplayMode() const; - - /* - * returns target image bytes per scanline - */ - inline TInt Stride() const; - -private: - TInt8* iBitmapBuffer; - TSize iBitmapSize; - TDisplayMode iDisplayMode; - TInt iStride; - }; - -#include - -#endif /* SVGTBITMAP_H_ */ diff -r db5c883ad1c5 -r 1902ade171ab svgt_plat/svgt_api/inc/svgtbitmap.inl --- a/svgt_plat/svgt_api/inc/svgtbitmap.inl Tue Aug 31 16:06:58 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,44 +0,0 @@ -/* -* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* - * Description: SVGTbitmap header file - * -*/ - -inline CSvgtBitmap::CSvgtBitmap( TInt8* aBitmapBuffer, TSize aBitmapSize, - TDisplayMode aDisplayMode, TInt aStride):iBitmapBuffer(aBitmapBuffer), - iBitmapSize(aBitmapSize), - iDisplayMode(aDisplayMode), - iStride(aStride) - { - } - -inline TInt8* CSvgtBitmap::BitmapBuffer() const - { - return iBitmapBuffer; - } - -inline TSize CSvgtBitmap::SizeInPixels() const - { - return iBitmapSize; - } - -inline TDisplayMode CSvgtBitmap::DisplayMode() const - { - return iDisplayMode; - } - -inline TInt CSvgtBitmap::Stride() const - { - return iStride; - } diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVG/SVGEngine/BWINSCW/SVGENGINE-OpenVGU.def --- a/svgtopt/SVG/SVGEngine/BWINSCW/SVGENGINE-OpenVGU.def Tue Aug 31 16:06:58 2010 +0300 +++ b/svgtopt/SVG/SVGEngine/BWINSCW/SVGENGINE-OpenVGU.def Wed Sep 01 12:20:46 2010 +0100 @@ -191,6 +191,4 @@ ?ResetContext@CSvgEngineInterfaceImpl@@QAEXH@Z @ 190 NONAME ; void CSvgEngineInterfaceImpl::ResetContext(int) ?ConstructL@CSvgEngineInterfaceImpl@@IAEXAAVTFontSpec@@@Z @ 191 NONAME ; void CSvgEngineInterfaceImpl::ConstructL(class TFontSpec &) ?TLVEncodedData@CSvgEngineInterfaceImpl@@QBE?BVTPtrC8@@XZ @ 192 NONAME ; class TPtrC8 const CSvgEngineInterfaceImpl::TLVEncodedData(void) const - ?GenerateMask@CSvgEngineInterfaceImpl@@QAEXPAVCSvgtBitmap@@H@Z @ 193 NONAME ; void CSvgEngineInterfaceImpl::GenerateMask(class CSvgtBitmap *, int) - ?SetGdiContextL@CSvgEngineInterfaceImpl@@QAEXPAVCSvgEngineImpl@@PAVCSvgtBitmap@@@Z @ 194 NONAME ; void CSvgEngineInterfaceImpl::SetGdiContextL(class CSvgEngineImpl *, class CSvgtBitmap *) diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVG/SVGEngine/eabi/SVGENGINE-OpenVGU.def --- a/svgtopt/SVG/SVGEngine/eabi/SVGENGINE-OpenVGU.def Tue Aug 31 16:06:58 2010 +0300 +++ b/svgtopt/SVG/SVGEngine/eabi/SVGENGINE-OpenVGU.def Wed Sep 01 12:20:46 2010 +0100 @@ -388,6 +388,4 @@ _ZN23CSvgEngineInterfaceImpl5StartERP9MSvgErrorPK6TDesC8P14CSvgEngineImpl @ 387 NONAME _ZN23CSvgEngineInterfaceImpl6UseDomEiP10CFbsBitmapS1_5TSize12TDisplayModeS3_i @ 388 NONAME _ZNK23CSvgEngineInterfaceImpl14TLVEncodedDataEv @ 389 NONAME - _ZN23CSvgEngineInterfaceImpl12GenerateMaskEP11CSvgtBitmapi @ 390 NONAME - _ZN23CSvgEngineInterfaceImpl14SetGdiContextLEP14CSvgEngineImplP11CSvgtBitmap @ 391 NONAME diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVG/SVGEngine/group/SVGEngine.mmp --- a/svgtopt/SVG/SVGEngine/group/SVGEngine.mmp Tue Aug 31 16:06:58 2010 +0300 +++ b/svgtopt/SVG/SVGEngine/group/SVGEngine.mmp Wed Sep 01 12:20:46 2010 +0100 @@ -19,12 +19,7 @@ #include ALWAYS_BUILD_AS_ARM -/* Srini: Raptor automatically adds --cpu 5te when building for rvct4.0 - and adds --cpu 5t when building with rvct 2.2. - basically the option is redundant. please don't add the option. - - */ -OPTION_REPLACE ARMCC -O3 -Otime +OPTION_REPLACE ARMCC --cpu 5T -O3 -Otime TARGET SVGEngine.dll TARGETTYPE dll @@ -62,7 +57,6 @@ SOURCE Svgdecoder.cpp SOURCE SVGFourPointRect.cpp - SOURCEPATH ../../SVGImpl/src SOURCE SVGElementImpl.cpp diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVG/SVGEngine/inc/SVGContentHandler.h --- a/svgtopt/SVG/SVGEngine/inc/SVGContentHandler.h Tue Aug 31 16:06:58 2010 +0300 +++ b/svgtopt/SVG/SVGEngine/inc/SVGContentHandler.h Wed Sep 01 12:20:46 2010 +0100 @@ -28,8 +28,8 @@ #include "SVGAttributeVerifier.h" #include "SVGErrorImpl.h" -#include "xml/mxmlattributes.h" -#include "xml/mxmlcontenthandler.h" +#include "mxmlattributes.h" +#include "mxmlcontenthandler.h" #include "SVGSchemaData.h" #include "SVGDocumentImpl.h" diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVG/SVGEngine/inc/SVGEngineImpl.h --- a/svgtopt/SVG/SVGEngine/inc/SVGEngineImpl.h Tue Aug 31 16:06:58 2010 +0300 +++ b/svgtopt/SVG/SVGEngine/inc/SVGEngineImpl.h Wed Sep 01 12:20:46 2010 +0100 @@ -68,7 +68,6 @@ class CSvgTimer; // temporary for debugging -class CSvgtBitmap; //This includes the main rendering loop. /** @@ -328,8 +327,6 @@ */ void GenerateMask( CFbsBitmap* aMask ); - void GenerateMask(CSvgtBitmap* aMask); - /** * Set background color * @@ -368,9 +365,6 @@ void SetGdiContextL(CFbsBitmap* aCurrentBitmap, CFbsBitmap* aMask = NULL); void SetGdiContextL(CFbsBitmap* aCurrentBitmap, CFbsBitmap* aMask,TSize aCurrentBitmapSize,TDisplayMode aRenderDspMode,TDisplayMode aMaskDspMode); - - void SetGdiContextL(CSvgtBitmap* aCurrentBitmap, CSvgtBitmap* aMask = NULL); - /** * Start the Engine so that the first frame is drawn when the call is finished. * @@ -617,10 +611,6 @@ TBool IsSVGEnginePaused(); void SetBitmapHeader(const TDesC* aHeaderData); - - void EnableTargetRendering(TBool aTargetRendering ); - TBool IsTargetRenderingEnabled() const; - public: // Functions from base classes // From CSvgElementImpl /** @@ -926,7 +916,7 @@ CFbsBitmap* iFrameBuffer; CFbsBitmap* iMask; - + TSize iFrameBufferSize; //NGA TDisplayMode iRenderDspMode; TDisplayMode iMaskDspMode; @@ -941,10 +931,6 @@ TPtrC iLinkShow; TBool iShowDebugInfo; - //M2G: target bitmap buffer and mask buffer - CSvgtBitmap* iTargetBitmapBuffer; - CSvgtBitmap* iTargetMaskBuffer; - TGfxRectangle2D iClipRect; TSvgEngineState iSvgEngineState; TAnimStatus iAnimationState; @@ -974,7 +960,6 @@ //Stores Font Type information as passed by CSvgEngineInterfaceImpl CSvgBitmapFontProvider *iSvgBitmapFontProvider; - TBool iIsTargetRenderingEnabled; public: TBool iCustomOption; TBool iFrameBufferOverridesViewport; diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVG/SVGEngine/src/SVGContentHandler.cpp --- a/svgtopt/SVG/SVGEngine/src/SVGContentHandler.cpp Tue Aug 31 16:06:58 2010 +0300 +++ b/svgtopt/SVG/SVGEngine/src/SVGContentHandler.cpp Wed Sep 01 12:20:46 2010 +0100 @@ -26,7 +26,7 @@ #include "SVGUseElementImpl.h" #include "SVGAnimationElementImpl.h" -#include +#include "rxmlreader.h" #include "SVGPaintCssValueImpl.h" #include "SVGPathElementImpl.h" @@ -1434,14 +1434,9 @@ CleanupStack::PopAndDestroy( 1 ); // tBufC2 } - TBool rVal = iCurrentElement->SetTransform(KTransform,tPf); - CleanupStack::PopAndDestroy( 2 ); // tBufC & TFinal - - if (!rVal) - { - return EFalse; - } - + iCurrentElement->SetTransform(KTransform,tPf); + + CleanupStack::PopAndDestroy( 2 ); // tBufC & TFinal return ETrue; } diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVG/SVGEngine/src/SVGEngineImpl.cpp --- a/svgtopt/SVG/SVGEngine/src/SVGEngineImpl.cpp Tue Aug 31 16:06:58 2010 +0300 +++ b/svgtopt/SVG/SVGEngine/src/SVGEngineImpl.cpp Wed Sep 01 12:20:46 2010 +0100 @@ -59,7 +59,6 @@ #include "SVGTimeContainer.h" #include "SVGMediaAnimationElementImpl.h" -#include // Constants // length of const TInt KClosingTextTagLength = 7; @@ -749,24 +748,9 @@ // Get the redering result onto CFbsBitmap. if(iFrameBufferSize.iWidth > 0) - { - if(iIsTargetRenderingEnabled) - { // M2G - iGfxContext->UpdateFramebufferL( iTargetBitmapBuffer, iTargetMaskBuffer,iFrameBufferSize, - iTargetBitmapBuffer->DisplayMode(),iTargetMaskBuffer->DisplayMode()); - } - else - iGfxContext->UpdateFramebufferL( iFrameBuffer, iMask,iFrameBufferSize,iRenderDspMode, - iMaskDspMode ); - } + iGfxContext->UpdateFramebufferL( iFrameBuffer, iMask,iFrameBufferSize,iRenderDspMode,iMaskDspMode ); else - { - if(iIsTargetRenderingEnabled) //M2G - iGfxContext->UpdateFramebufferL( iTargetBitmapBuffer, iTargetMaskBuffer ); - else - iGfxContext->UpdateFramebufferL( iFrameBuffer, iMask ); - - } + iGfxContext->UpdateFramebufferL( iFrameBuffer, iMask ); if ( !iIgnoreUpdateScreen && iRequestObserver != NULL ) { @@ -1275,13 +1259,6 @@ } } -void CSvgEngineImpl::GenerateMask(CSvgtBitmap* aMask) - { - if ( iGfxContext ) - { - iGfxContext->GenerateMask( aMask ); - } - } // // --------------------------------------------------------------------------- // set background color @@ -1395,38 +1372,7 @@ iGfxContext->ChangeBufferSizeL( TSize( 0,0 ) ); } } -//---------------------------------------------------------------------------------------------- -//M2G: SetGdiContextL() is overloaded to accept CSvgtBitmap to enable rendering on target buffer. -//----------------------------------------------------------------------------------------------- -void CSvgEngineImpl::SetGdiContextL(CSvgtBitmap* aCurrentBitmap, CSvgtBitmap* aMask) - { - - // Handle for both Non-NULL and NULL parameter - iTargetBitmapBuffer = aCurrentBitmap; - iTargetMaskBuffer = aMask; - - if ( aCurrentBitmap ) - { - if ( !iGfxContext ) - { - iGfxContext = CGfx2dGcOpenVG::NewL( iTargetBitmapBuffer->SizeInPixels(), iBitmapFontSpec, iSvgBitmapFontProvider, EFalse ); - - // The API is called Only in case of JSR226. Incase if the midlet developer - // has changed the RedenderQuality of the midlet.ByDefualt the value of - // iRenderQuality is 2 i.e. VG_RENDERING_QUALITY_BETTER. - iGfxContext->SetAntialiasingMode( iRenderQuality ); - } - else - { - iGfxContext->ChangeBufferSizeL( iTargetBitmapBuffer->SizeInPixels() ); - } - } - else if ( iGfxContext ) - { - iGfxContext->ChangeBufferSizeL( TSize( 0,0 ) ); - } - - } + // --------------------------------------------------------------------------- // void CSvgEngineImpl::StartEngine(CSvgErrorImpl* aError) // --------------------------------------------------------------------------- @@ -1514,24 +1460,12 @@ // --------------------------------------------------------------------------- void CSvgEngineImpl::RenderFrame( TUint aCurrentTime ) { - if(iIsTargetRenderingEnabled) //M2G: If target rendering is enabled + if ( !iFrameBuffer || !iSvgDocument || + iFrameBuffer->SizeInPixels().iWidth == 0 || iFrameBuffer->SizeInPixels().iHeight == 0 ) { - if ( !iTargetBitmapBuffer || !iSvgDocument || - iTargetBitmapBuffer->SizeInPixels().iWidth == 0 || - iTargetBitmapBuffer->SizeInPixels().iHeight == 0 ) - { - return; - } + return; } - else - { - if (!iFrameBuffer || !iSvgDocument - || iFrameBuffer->SizeInPixels().iWidth == 0 - || iFrameBuffer->SizeInPixels().iHeight == 0) - { - return; - } - } + if ( aCurrentTime == 0 ) { SeekEngine( 0 ); @@ -3219,21 +3153,6 @@ ((CGfx2dGcOpenVG *)iGfxContext)->SetBitmapHeader(aHeaderData); } } -//--------------------------------------------------------------- -// M2G: Enable rendering on target buffer. -//---------------------------------------------------------------- -void CSvgEngineImpl::EnableTargetRendering(TBool aTargetRendering ) - { - iIsTargetRenderingEnabled = aTargetRendering; - } - -//--------------------------------------------------------------- -// M2G: TBool CSvgEngineImpl::IsTargetRenderingEnabled() const -//---------------------------------------------------------------- -TBool CSvgEngineImpl::IsTargetRenderingEnabled() const - { - return iIsTargetRenderingEnabled; - } //NGA // --------------------------------------------------------------------------- // SetGdiContext File diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVG/SVGEngine/src/SVGEngineInterfaceImpl.cpp --- a/svgtopt/SVG/SVGEngine/src/SVGEngineInterfaceImpl.cpp Tue Aug 31 16:06:58 2010 +0300 +++ b/svgtopt/SVG/SVGEngine/src/SVGEngineInterfaceImpl.cpp Wed Sep 01 12:20:46 2010 +0100 @@ -1055,36 +1055,67 @@ TInt aX,aY; // Check in Left direction aX = 1; aY = 0; - //Coverity fixes - if ( bound.iX >= zero ) + if ( xmax <= clipWidth && aX < 0 ) + aX = 0; + if ( bound.iX >= zero && aX > 0 ) aX = 0; - + if ( ymax <= clipHeight && aY < 0 ) + aY = 0; + if ( bound.iY >= zero && aY > 0 ) + aY = 0; // Do panning - left = ((aY)||(aX)); + if ( ( aY == 0 ) && ( aX == 0 ) ) + left = EFalse; + else + left = ETrue; // Check in Right direction aX = -1; aY = 0; - if ( xmax <= clipWidth ) + if ( xmax <= clipWidth && aX < 0 ) + aX = 0; + if ( bound.iX >= zero && aX > 0 ) aX = 0; - + if ( ymax <= clipHeight && aY < 0 ) + aY = 0; + if ( bound.iY >= zero && aY > 0 ) + aY = 0; // Do panning - right = ((aY)||(aX)); + if ( ( aY == 0 ) && ( aX == 0 ) ) + right = EFalse; + else + right = ETrue; // Check in Up direction aX = 0; aY = 1; - if ( bound.iY >= zero ) + if ( xmax <= clipWidth && aX < 0 ) + aX = 0; + if ( bound.iX >= zero && aX > 0 ) + aX = 0; + if ( ymax <= clipHeight && aY < 0 ) aY = 0; - + if ( bound.iY >= zero && aY > 0 ) + aY = 0; // Do panning - up = ((aY)||(aX)); + if ( ( aY == 0 ) && ( aX == 0 ) ) + up = EFalse; + else + up = ETrue; // Check in down direction aX = 0; aY = -1; - if ( ymax <= clipHeight ) + if ( xmax <= clipWidth && aX < 0 ) + aX = 0; + if ( bound.iX >= zero && aX > 0 ) + aX = 0; + if ( ymax <= clipHeight && aY < 0 ) aY = 0; - + if ( bound.iY >= zero && aY > 0 ) + aY = 0; // Do panning - down = ((aY)||(aX)); + if ( ( aY == 0 ) && ( aX == 0 ) ) + down = EFalse; + else + down = ETrue; } // -------------------------------------------------------------------------- @@ -1188,11 +1219,19 @@ { bbSize.iWidth = ((TReal32)bbSize.iWidth) * percentWidth / 100.0; } + else + { + bbSize.iWidth = bbSize.iWidth; + } if( svgElement->iHeightInPercentage ) { bbSize.iHeight = ((TReal32)bbSize.iHeight) * percentHeight / 100.0; } + else + { + bbSize.iHeight = bbSize.iHeight; + } return bbSize; } } @@ -1499,13 +1538,6 @@ } } -EXPORT_C void CSvgEngineInterfaceImpl::GenerateMask(CSvgtBitmap* aMask, TInt aEngine ) - { - if ( ChooseEngine( aEngine ) ) - { - iSvgEngine->GenerateMask(aMask); - } - } // -------------------------------------------------------------------------- // EXPORT_C void CSvgEngineInterfaceImpl::SetBackgroundColor(TUint32 aRGBA8888Color, CSvgEngineImpl* aEngine) @@ -2472,19 +2504,6 @@ aEngine->SetGdiContextL( aFrameBuffer ); } } - -// -------------------------------------------------------------------------- -// M2G: Overloaded SetGdiContextL() for CSvgtBitmap to enable rendering on target buffer. -// --------------------------------------------------------------------------- -EXPORT_C void CSvgEngineInterfaceImpl::SetGdiContextL( CSvgEngineImpl* aEngine, CSvgtBitmap* aFrameBuffer ) - { - if( aEngine ) - { - aEngine->EnableTargetRendering(ETrue); - aEngine->SetGdiContextL( aFrameBuffer ); - } - } - // -------------------------------------------------------------------------- // EXPORT_C void CSvgEngineInterfaceImpl::SetDocument( CSvgEngineImpl* aEngine, CSvgDocumentImpl* aDocument ) // --------------------------------------------------------------------------- @@ -3083,9 +3102,10 @@ TSvgFourPointRect fourPointRect; //updates CTM from root + aTextElementHandle->UpdateCTM(); + if (aTextElementHandle) { - aTextElementHandle->UpdateCTM(); aTextElementHandle->GetFourPointBBox(fourPointRect); } diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVG/SVGEngine/src/Svgdecoder.cpp --- a/svgtopt/SVG/SVGEngine/src/Svgdecoder.cpp Tue Aug 31 16:06:58 2010 +0300 +++ b/svgtopt/SVG/SVGEngine/src/Svgdecoder.cpp Wed Sep 01 12:20:46 2010 +0100 @@ -2511,20 +2511,30 @@ // --------------------------------------------------------------------------- TBool CSvgDecoder::DecodeIdAndXmlAttributeL(const TUint16 aName) { - TBool rVal = EFalse; + if (aName== KAtrId) { - rVal = iCurrentElement->SetIdandXmlbaseL( _L("id"), DecodeTDesCLC()); - CleanupStack::PopAndDestroy( 1 ); + iCurrentElement->SetIdandXmlbaseL( _L("id"), DecodeTDesCLC()); + CleanupStack::PopAndDestroy( 1 ); + return ETrue; } - else if (aName== KAtrXmlBase) + + if (aName== KAtrXmlBase) { - rVal = iCurrentElement->SetIdandXmlbaseL( _L("xml:base"), DecodeTDesCLC()); - CleanupStack::PopAndDestroy( 1 ); + iCurrentElement->SetIdandXmlbaseL( _L("xml:base"), DecodeTDesCLC()); + CleanupStack::PopAndDestroy( 1 ); + return ETrue; } - return rVal; + + else + { + return EFalse; + } } + + + // -------------------------------------------------------------------------- // TBool CSvgDecoder::DecodeUriRefAttributeL(const TUint16 aName) // --------------------------------------------------------------------------- diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVG/SVGImpl/src/SVGAnimationBase.cpp --- a/svgtopt/SVG/SVGImpl/src/SVGAnimationBase.cpp Tue Aug 31 16:06:58 2010 +0300 +++ b/svgtopt/SVG/SVGImpl/src/SVGAnimationBase.cpp Wed Sep 01 12:20:46 2010 +0100 @@ -679,13 +679,11 @@ iAnimTime->SaveBeginTime(); } - if ( ( ((CSvgDocumentImpl*)iOwnerDocument)->Engine() && ((CSvgDocumentImpl*)iOwnerDocument)->Engine()->CurrentTIme() >= iAnimTime->BeginTime() ) - || ( ((CSvgDocumentImpl*)iOwnerDocument)->iTimeForJSR226 >= iAnimTime->BeginTime() ) ) + if ( ( ((CSvgDocumentImpl*)iOwnerDocument)->Engine() && iAnimTime && ((CSvgDocumentImpl*)iOwnerDocument)->Engine()->CurrentTIme() >= iAnimTime->BeginTime() ) + || ( iAnimTime && ((CSvgDocumentImpl*)iOwnerDocument)->iTimeForJSR226 >= iAnimTime->BeginTime() ) ) { - if (iTargetElement) - iTargetElement->SetIsAnimating( ETrue ); - - SetIsAnimating( ETrue ); + iTargetElement->SetIsAnimating( ETrue ); + SetIsAnimating( ETrue ); } } diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVG/SVGImpl/src/SVGAnimationElementImpl.cpp --- a/svgtopt/SVG/SVGImpl/src/SVGAnimationElementImpl.cpp Tue Aug 31 16:06:58 2010 +0300 +++ b/svgtopt/SVG/SVGImpl/src/SVGAnimationElementImpl.cpp Wed Sep 01 12:20:46 2010 +0100 @@ -473,9 +473,6 @@ // void CSvgAnimationElementImpl::RemoveEventListener() { - if ( !iMyAnimationElementList ) - return; - FindAllAnimationElements( (CSvgElementImpl* )this, iMyAnimationElementList ); // Remove event listening for every animation elements that are child of diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVG/SVGImpl/src/SVGDocumentImpl.cpp --- a/svgtopt/SVG/SVGImpl/src/SVGDocumentImpl.cpp Tue Aug 31 16:06:58 2010 +0300 +++ b/svgtopt/SVG/SVGImpl/src/SVGDocumentImpl.cpp Wed Sep 01 12:20:46 2010 +0100 @@ -77,7 +77,7 @@ #include "SVGTimeContainer.h" #include -//#include +#include #include // ========================================================================== @@ -374,7 +374,11 @@ // ellipse return ( MXmlElement * ) CSvgEllipseElementImpl::NewL( (TUint8) position, this ); - case KSvgForeignObjectElement: + case KSvgDefsElement: + // defs + return ( MXmlElement * ) CSvgDefsElementImpl::NewL((TUint8) position, this); + + case KSvgForeignObjectElement: // foreignObject return ( MXmlElement * ) CSvgForeignObjectElementImpl::NewL((TUint8) position, this); diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVG/SVGImpl/src/SVGElementImpl.cpp --- a/svgtopt/SVG/SVGImpl/src/SVGElementImpl.cpp Tue Aug 31 16:06:58 2010 +0300 +++ b/svgtopt/SVG/SVGImpl/src/SVGElementImpl.cpp Wed Sep 01 12:20:46 2010 +0100 @@ -101,6 +101,8 @@ CSvgElementImpl* lParentElement = (CSvgElementImpl*)aElement->ParentNode (); while(lParentElement && (lParentElement->iSvgStyleProperties != NULL)) { + if(!lParentElement) + return EFalse; if (aElement->iSvgStyleProperties->operator[](aAttrIndex) == lParentElement->iSvgStyleProperties->operator[](aAttrIndex)) { @@ -671,8 +673,7 @@ { ((CSvgFontFaceElementImpl *)this)->SetFontFamilyL(aValue); } - break; - + case KCSS_ATTR_STROKE_LINECAP: case KCSS_ATTR_STROKE_LINEJOIN: case KCSS_ATTR_FILLRULE: @@ -2312,7 +2313,7 @@ //tParentValue = (CIntCssValueImpl *)(lParentElement->iSvgStyleProperties->operator[](aNameId)); //(*iSvgStyleProperties)[aNameId]= tParentValue; if(tParentValue) - tValue->SetValueL(tParentValue->Value()); + tValue->SetValueL(tParentValue->Value()); } else { diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVG/SVGImpl/src/SVGFontFaceElementImpl.cpp --- a/svgtopt/SVG/SVGImpl/src/SVGFontFaceElementImpl.cpp Tue Aug 31 16:06:58 2010 +0300 +++ b/svgtopt/SVG/SVGImpl/src/SVGFontFaceElementImpl.cpp Wed Sep 01 12:20:46 2010 +0100 @@ -117,31 +117,28 @@ { //AJD this whole thing needs to be replaced with some sort of external resource registry area.... //for images, fonts, other svg files - CSvgDocumentImpl * ownerDoc = (CSvgDocumentImpl*)iOwnerDocument; - if ( ownerDoc ) + if ( ((CSvgDocumentImpl*)iOwnerDocument)->Engine() && ((CSvgDocumentImpl*)iOwnerDocument)->Engine()->iFontHashMap) + { + TRAPD(err, ((CSvgDocumentImpl*)iOwnerDocument)->Engine()->iFontHashMap->RemoveReferenceFromFontL(iFontFamily->Des())); + if (err) { - if ( ownerDoc->Engine() && ownerDoc->Engine()->iFontHashMap) - { - TRAPD(err, ownerDoc->Engine()->iFontHashMap->RemoveReferenceFromFontL(iFontFamily->Des())); - if (err) - { - #ifdef _DEBUG - RDebug::Printf("CSvgFontFaceElementImpl::~CSvgFontFaceElementImpl: Error trapped=%d", err); - #endif - } - } - - if ( ownerDoc->iFontHashMap) - { - TRAPD(err, ownerDoc->iFontHashMap->RemoveReferenceFromFontL(iFontFamily->Des())); - if (err) - { - #ifdef _DEBUG - RDebug::Printf("CSvgFontFaceElementImpl::~CSvgFontFaceElementImpl: Error trapped=%d", err); - #endif - } - } + #ifdef _DEBUG + RDebug::Printf("CSvgFontFaceElementImpl::~CSvgFontFaceElementImpl: Error trapped=%d", err); + #endif } + } + + if ( (CSvgDocumentImpl*)iOwnerDocument && ((CSvgDocumentImpl*)iOwnerDocument)->iFontHashMap) + { + TRAPD(err, ((CSvgDocumentImpl*)iOwnerDocument)->iFontHashMap->RemoveReferenceFromFontL(iFontFamily->Des())); + if (err) + { + #ifdef _DEBUG + RDebug::Printf("CSvgFontFaceElementImpl::~CSvgFontFaceElementImpl: Error trapped=%d", err); + #endif + } + } + if ( iFontFamily ) { delete iFontFamily; diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVG/SVGImpl/src/SVGImageElementImpl.cpp --- a/svgtopt/SVG/SVGImpl/src/SVGImageElementImpl.cpp Tue Aug 31 16:06:58 2010 +0300 +++ b/svgtopt/SVG/SVGImpl/src/SVGImageElementImpl.cpp Wed Sep 01 12:20:46 2010 +0100 @@ -29,7 +29,7 @@ #include -//#include +#include const TInt KErrNoAttributeSet = -1; #define KSVGWAITFORIMAGEDOWNLOAD 1 diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVG/SVGImpl/src/SVGSetElementImpl.cpp --- a/svgtopt/SVG/SVGImpl/src/SVGSetElementImpl.cpp Tue Aug 31 16:06:58 2010 +0300 +++ b/svgtopt/SVG/SVGImpl/src/SVGSetElementImpl.cpp Wed Sep 01 12:20:46 2010 +0100 @@ -151,9 +151,16 @@ case KSvgTypeTransform: break; case KSvgTypeColor: + iEndInt = iToInt; + iTargetElement->SetAttributeIntL( iAttrId, iToInt ); + break; case KSvgTypeTextAnchor: case KSvgTypeInteger: + iEndInt = iToInt; + iTargetElement->SetAttributeIntL( iAttrId, iToInt ); case KSvgTypeVisibility: + iEndInt = iToInt; + iTargetElement->SetAttributeIntL( iAttrId, iToInt ); case KSvgTypeDisplay: iEndInt = iToInt; iTargetElement->SetAttributeIntL( iAttrId, iToInt ); diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVG/SVGImpl/src/SVGTextElementImpl.cpp --- a/svgtopt/SVG/SVGImpl/src/SVGTextElementImpl.cpp Tue Aug 31 16:06:58 2010 +0300 +++ b/svgtopt/SVG/SVGImpl/src/SVGTextElementImpl.cpp Wed Sep 01 12:20:46 2010 +0100 @@ -2885,7 +2885,12 @@ //SetFontFamilyL(_L("NokiaSansWide")); if(!aReturn) { - delete lNewFontDoc; + if(lNewFontDoc) + { + delete lNewFontDoc; + lNewFontDoc = NULL; + } + } return ETrue; } @@ -2899,6 +2904,7 @@ } delete lNewFontDoc; + lNewFontDoc = NULL; return EFalse; } diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVG/SVGImpl/src/SVGTokenizer.cpp --- a/svgtopt/SVG/SVGImpl/src/SVGTokenizer.cpp Tue Aug 31 16:06:58 2010 +0300 +++ b/svgtopt/SVG/SVGImpl/src/SVGTokenizer.cpp Wed Sep 01 12:20:46 2010 +0100 @@ -305,12 +305,11 @@ TLex lex( decimalString ); // Specify the decimal seperator, instead of using // locale specific seperator. - if(lex.Val( aValue, '.' )== KErrNone) - { - tokenizer.SkipWhiteSpace(); - aRemainder.Set( tokenizer.Remainder() ); - return ETrue; - } - } + lex.Val( aValue, '.' ); + + tokenizer.SkipWhiteSpace(); + aRemainder.Set( tokenizer.Remainder() ); + return ETrue; + } return EFalse; } diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVGEngineJI/BWINSCW/SVGEngineJIU.def --- a/svgtopt/SVGEngineJI/BWINSCW/SVGEngineJIU.def Tue Aug 31 16:06:58 2010 +0300 +++ b/svgtopt/SVGEngineJI/BWINSCW/SVGEngineJIU.def Wed Sep 01 12:20:46 2010 +0100 @@ -87,5 +87,4 @@ ?SvgRenderingSurfaceGetHeight@CSvgJavaInterfaceImpl@@QAEHH@Z @ 86 NONAME ; int CSvgJavaInterfaceImpl::SvgRenderingSurfaceGetHeight(int) ?SvgRenderingSurfaceGetWidth@CSvgJavaInterfaceImpl@@QAEHH@Z @ 87 NONAME ; int CSvgJavaInterfaceImpl::SvgRenderingSurfaceGetWidth(int) ?NewL@CSvgJavaInterfaceImpl@@SAPAV1@AAVTFontSpec@@@Z @ 88 NONAME ; class CSvgJavaInterfaceImpl * CSvgJavaInterfaceImpl::NewL(class TFontSpec &) - ?SvgEngineRenderDocument@CSvgJavaInterfaceImpl@@QAEXHHIIM@Z @ 89 NONAME ; void CSvgJavaInterfaceImpl::SvgEngineRenderDocument(int, int, unsigned int, unsigned int, float) diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVGEngineJI/eabi/SVGEngineJIU.def --- a/svgtopt/SVGEngineJI/eabi/SVGEngineJIU.def Tue Aug 31 16:06:58 2010 +0300 +++ b/svgtopt/SVGEngineJI/eabi/SVGEngineJIU.def Wed Sep 01 12:20:46 2010 +0100 @@ -94,5 +94,4 @@ _ZTV10CJavaError @ 93 NONAME ; ## _ZTV21CSvgJavaInterfaceImpl @ 94 NONAME ; ## _ZN21CSvgJavaInterfaceImpl4NewLER9TFontSpec @ 95 NONAME - _ZN21CSvgJavaInterfaceImpl23SvgEngineRenderDocumentEiijjf @ 96 NONAME diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVGEngineJI/src/SvgJavaInterfaceImpl.cpp --- a/svgtopt/SVGEngineJI/src/SvgJavaInterfaceImpl.cpp Tue Aug 31 16:06:58 2010 +0300 +++ b/svgtopt/SVGEngineJI/src/SvgJavaInterfaceImpl.cpp Wed Sep 01 12:20:46 2010 +0100 @@ -241,34 +241,6 @@ */ } -/* - * M2G: SvgEngineRenderDocument() overloaded to pass the CSvgtBitmap object to SvgEngine - */ -EXPORT_C void CSvgJavaInterfaceImpl::SvgEngineRenderDocument( - SvgEngineHandle aEngineHandle, SvgDocumentHandle aDocumentHandle, - SvgtBitmapHandle aSurfaceHandle, SvgtBitmapHandle aSurfaceMaskHandle, - TReal32 aCurrentTime ) - { - CSvgEngineInterfaceImpl::iFileIsLoaded = ETrue; - - SetDocument( (CSvgEngineImpl*)aEngineHandle, (CSvgDocumentImpl*)aDocumentHandle ); - - // GfxContext creation - TRAPD(error, SetGdiContextL( (CSvgEngineImpl*)aEngineHandle, (CSvgtBitmap*)aSurfaceHandle ) ); - if ( error != KErrNone ) - { - // ignore trap error - } - - //this udpates things like Viewport with whatever preserveAspectRatio and widths are set - //InitializeEngine((CSvgEngineImpl*)aEngineHandle); - - if ( ((CSvgtBitmap*)aSurfaceMaskHandle) != NULL) - GenerateMask((CSvgtBitmap*)aSurfaceMaskHandle); - - RenderFrame( (CSvgEngineImpl*)aEngineHandle, (TUint)(aCurrentTime * 1000) ); - } - /** * */ @@ -1355,13 +1327,13 @@ { if(lSvgAttrId == KCSS_ATTR_FONTSIZE) { - // if(lValue != KErrNotFound) - // { + if(lValue != KErrNotFound) + { // font is internally considered to be a float. TReal32 lValue = GetElementFloatAttribute((CSvgElementImpl*)aElementHandle,lSvgAttrId); return short (lValue) ; - // } - //return KInvalidEnumAttribute; + } + return KInvalidEnumAttribute; } TInt lResult = GetEnumAttribute((CSvgElementImpl*)aElementHandle, lSvgAttrId , lValue); if(lResult == KErrNotFound) @@ -2681,43 +2653,37 @@ */ TInt CSvgJavaInterfaceImpl::SvgStringtoEnumerationMappingSVGtoJSR(const TInt aAttributeId , TPtrC16 aValue) { - TInt attribVal = KErrNotFound; - switch(aAttributeId) { case KCSS_ATTR_FILLRULE: { if(aValue == _L("evenodd")) - attribVal = FILL_RULE_EVENODD; - else if(aValue == _L("nonzero")) - attribVal = FILL_RULE_NONZERO; + return FILL_RULE_EVENODD; + if(aValue == _L("nonzero")) + return FILL_RULE_NONZERO; } - break; case KCSS_ATTR_STROKE_LINECAP: { if(aValue == _L("butt")) - attribVal = STROKE_LINECAP_BUTT; - else if(aValue == _L("round")) - attribVal = STROKE_LINECAP_ROUND; - else if(aValue == _L("square")) - attribVal = STROKE_LINECAP_SQUARE; + return STROKE_LINECAP_BUTT; + if(aValue == _L("round")) + return STROKE_LINECAP_ROUND; + if(aValue == _L("square")) + return STROKE_LINECAP_SQUARE; } - break; - case KCSS_ATTR_STROKE_LINEJOIN: + + case KCSS_ATTR_STROKE_LINEJOIN: + { if(aValue == _L("miter")) - attribVal = STROKE_LINEJOIN_MITER; - else if(aValue == _L("round")) - attribVal = STROKE_LINEJOIN_ROUND; - else if(aValue == _L("bevel")) - attribVal = STROKE_LINEJOIN_BEVEL; + return STROKE_LINEJOIN_MITER; + if(aValue == _L("round")) + return STROKE_LINEJOIN_ROUND; + if(aValue == _L("bevel")) + return STROKE_LINEJOIN_BEVEL; } - break; - default: - attribVal = KErrNotFound; - + default: return KErrNotFound; } - return attribVal; } /** * This maps the Enumeration from SVG to JSR. diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVGTPlugin/BWINSCW/NPSVGTPLUGINU.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgtopt/SVGTPlugin/BWINSCW/NPSVGTPLUGINU.DEF Wed Sep 01 12:20:46 2010 +0100 @@ -0,0 +1,5 @@ +EXPORTS + ?ImplementationGroupProxy@@YAPBUTImplementationProxy@@AAH@Z @ 1 NONAME ; struct TImplementationProxy const * ImplementationGroupProxy(int &) + ?InitializeFuncs@@YAFPAU_NPPluginFuncs@@@Z @ 2 NONAME ; short InitializeFuncs(struct _NPPluginFuncs *) + ?NPP_Shutdown@@YAXXZ @ 3 NONAME ; void NPP_Shutdown(void) + diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVGTPlugin/eabi/npSvgtPluginU.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgtopt/SVGTPlugin/eabi/npSvgtPluginU.DEF Wed Sep 01 12:20:46 2010 +0100 @@ -0,0 +1,11 @@ +EXPORTS + _Z24ImplementationGroupProxyRi @ 1 NONAME + _Z12NPP_Shutdownv @ 2 NONAME + _Z15InitializeFuncsP14_NPPluginFuncs @ 3 NONAME + _ZTI11CSvgtPlugin @ 4 NONAME ; ## + _ZTI18CSvgtPluginControl @ 5 NONAME ; ## + _ZTI19CSvgtPluginEcomMain @ 6 NONAME ; ## + _ZTV11CSvgtPlugin @ 7 NONAME ; ## + _ZTV18CSvgtPluginControl @ 8 NONAME ; ## + _ZTV19CSvgtPluginEcomMain @ 9 NONAME ; ## + diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVGTPlugin/group/SVGTPluginS60.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgtopt/SVGTPlugin/group/SVGTPluginS60.pkg Wed Sep 01 12:20:46 2010 +0100 @@ -0,0 +1,48 @@ +; +; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +; All rights reserved. +; This component and the accompanying materials are made available +; under the terms of "Eclipse Public License v1.0" +; which accompanies this distribution, and is available +; at the URL "http://www.eclipse.org/legal/epl-v10.html". +; +; Initial Contributors: +; Nokia Corporation - initial contribution. +; +; Contributors: +; +; Description: +; +; +; Installation file for MFP application +; +;Languages +&EN +; +; UID is the app's UID +; +#{"SVGTPlugin"},(0x101F86DF),1,0,0,TYPE=SISOPTION +; +;Supports Series 60 v 1.1 +;This line indicates that this installation is for the Series 60 platform v0.9 +;This line must appear _exactly_ as shown below in the sis file +;If this line is missing or incorrect, the sis file will not be able +;to be installed on Series 60 v0.9 platforms +(0x101F6F88), 0, 0, 0, {"Series60ProductID"} +; +; Two files to install +; +"\epoc32\release\thumb\urel\npSvgtPlugin.dll" -"!:\apps\plugin\npSvgtPlugin.dll" + +"\Epoc32\release\thumb\urel\gfx2d.dll" -"!:\system\libs\gfx2d.dll" + +"\Epoc32\release\thumb\urel\svgengine.dll" -"!:\system\libs\svgengine.dll" + +"\Epoc32\release\thumb\urel\SVGRECOG.MDL" -"!:\system\recogs\SVGRECOG.MDL" + + + + + + + diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVGTPlugin/group/SVGTPluginS60Ecom.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgtopt/SVGTPlugin/group/SVGTPluginS60Ecom.mmp Wed Sep 01 12:20:46 2010 +0100 @@ -0,0 +1,75 @@ +/* +* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: This is the .mmp for building Ecom style SVGT Plugin for + * the Series60 Platform. + * +*/ + + +#include + +TARGET npsvgtplugin.dll + +TARGETTYPE PLUGIN + +UID 0x10009D8D 0x101F86DF + +CAPABILITY CAP_ECOM_PLUGIN +VENDORID VID_DEFAULT + +// Defined for audio support + +//deffile generation +#if defined( ARMCC ) +deffile ../eabi/npSvgtPlugin.DEF +#else +deffile ../BWINSCW/NPSVGTPLUGIN.DEF +#endif + +SOURCEPATH ../src +SOURCE Svgtpluginmain.cpp +SOURCE Svgtplugin.cpp +SOURCE Svgtplugindllapi.cpp +SOURCE SvgtPluginControl.cpp + +SOURCE VolumeKeyListener.cpp +SOURCE RepositoryVolumeListener.cpp + +USERINCLUDE ../inc + +// This is a SYSTEMINCLUDE macro containing the middleware +// layer specific include directories +APP_LAYER_SYSTEMINCLUDE + +SYSTEMINCLUDE /epoc32/include/libc +SYSTEMINCLUDE /epoc32/include/ecom +SYSTEMINCLUDE /epoc32/include/http + +SOURCEPATH ../resource/s60 + +START RESOURCE 101F86DF.rss +TARGET npsvgtplugin.rsc +END + +LIBRARY euser.lib efsrv.lib cone.lib +LIBRARY eikcore.lib fbscli.lib gdi.lib +LIBRARY svgengine.lib +LIBRARY HWRMLightClient.lib +//LIBRARY pluginadapterutil.lib +LIBRARY ecom.lib + +LIBRARY centralrepository.lib +LIBRARY remconcoreapi.lib +LIBRARY remconinterfacebase.lib +LIBRARY FeatMgr.lib diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVGTPlugin/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgtopt/SVGTPlugin/group/bld.inf Wed Sep 01 12:20:46 2010 +0100 @@ -0,0 +1,29 @@ +/* +* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: This is a build file that builds SVGTPlugin alone +* +*/ + + +//Platforms listed are not built by SVGTPlugin +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS + +PRJ_MMPFILES +#ifdef __SERIES60_NATIVE_BROWSER +SVGTPluginS60Ecom.mmp +#endif // __SERIES60_NATIVE_BROWSER + diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVGTPlugin/inc/MRepositoryVolumeObserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgtopt/SVGTPlugin/inc/MRepositoryVolumeObserver.h Wed Sep 01 12:20:46 2010 +0100 @@ -0,0 +1,34 @@ +/* +* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Definition of the interface MRepositoryVolumeObserver used to +* observer events from CRepositoryVolumeListener +* +*/ + + +// +// JRT 22_09_04 +// Version 1.0 release. + +#ifndef REPOSITORYVOLUMEOBSERVER_H +#define REPOSITORYVOLUMEOBSERVER_H + +class MRepositoryVolumeObserver +{ + public: + virtual void VolumeChanged(TInt aNewValue) = 0; +}; + +#endif //REPOSITORYVOLUMEOBSERVER_H + diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVGTPlugin/inc/RepositoryVolumeListener.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgtopt/SVGTPlugin/inc/RepositoryVolumeListener.h Wed Sep 01 12:20:46 2010 +0100 @@ -0,0 +1,70 @@ +/* +* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: AO that completes on a change in the volume property. Used for +* the new Central Repository Server. Used in EKA2 builds only +* +*/ + + +// +#ifndef REPOSITORYVOLUMELISTENER_H +#define REPOSITORYVOLUMELISTENER_H + +#include +#include +#include + +// +// for emulator max volume = 65535 +#define WINS_DEFAULT_VOLUME 43690 + +// +// For HW max volume = 9 +#define HW_DEFAULT_VOLUME 6 + +#include + +class MRepositoryVolumeObserver; + +NONSHARABLE_CLASS( CRepositoryVolumeListener ) : public CActive + { +public: + enum TPropertyWatchState + { + EConnected = 1, + EUnableToConnect + }; + + static CRepositoryVolumeListener* NewL(MRepositoryVolumeObserver* aObserver); + virtual ~CRepositoryVolumeListener(); + TInt GetCurrentVolume(); + +private: + CRepositoryVolumeListener(); + void ConstructL(MRepositoryVolumeObserver* aObserver); + TInt GetDefaultVolume(); + + //From CActive + void RunL(); + void DoCancel(); + + + CRepository* iCenRepos; + + TPropertyWatchState iState; + + MRepositoryVolumeObserver* iObserver; + }; + +#endif //REPOSITORYVOLUMELISTENER_H diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVGTPlugin/inc/SvgtPlugin.hrh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgtopt/SVGTPlugin/inc/SvgtPlugin.hrh Wed Sep 01 12:20:46 2010 +0100 @@ -0,0 +1,39 @@ +/* +* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: SVGT Plugin Implementation source file + * +*/ + +#ifndef SVGTPLUGIN_HRH +#define SVGTPLUGIN_HRH + +enum TSVGTPluginCommandIds + { + ESVGTPluginPause = 1, + ESVGTPluginResume, + ESVGTPluginReset, + ESVGTPluginReplay, + ESVGTPluginZoomSubMenu, + ESVGTPluginRotateSubMenu, + ESVGTPluginZoomIn, + ESVGTPluginZoomOut, + ESVGTPluginRotate90, + ESVGTPluginRotate180, + ESVGTPluginRotate270 + }; + + + + +#endif // SVGTPLUGIN_HRH diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVGTPlugin/inc/Svgtplugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgtopt/SVGTPlugin/inc/Svgtplugin.h Wed Sep 01 12:20:46 2010 +0100 @@ -0,0 +1,333 @@ +/* +* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: SVGT Plugin Implementation header file + * +*/ + + +#ifndef __SVGTPLUGIN_H +#define __SVGTPLUGIN_H + +#include +#include +#include +#include +#include + +#include +//SVGT Engine interface +#include +#include +#include +#include "SVGListener.h" + +#include +#include + +#include + +#include "MRepositoryVolumeObserver.h" + +class CSvgtPlugin; +class CSvgEngineInterfaceImpl; +class CFbsBitmap; + +class CVolumeKeyListener; +class CRepositoryVolumeListener; +/****************************************** +This class is specific to ECom Style Plugin. +This is used for passing plugin specific initialization information to and from +browser. +*******************************************/ + +IMPORT_C NPError InitializeFuncs(NPPluginFuncs* aPpf); + +const TInt KSvgtPluginImplementationValue = 0x101F8823; //implementation id Svgt Ecom Plugin + +class CSvgtPluginEcomMain : public CEcomBrowserPluginInterface + { + public: // Functions from base classes + static CSvgtPluginEcomMain* NewL(TAny* aInitParam); + ~CSvgtPluginEcomMain(); + NPNetscapeFuncs* Funcs() {return iNpf;} + private: + CSvgtPluginEcomMain(NPNetscapeFuncs* aNpf); + void ConstructL(NPPluginFuncs* aPluginFuncs); + NPNetscapeFuncs* iNpf; + }; + +/**************************************** +Class CSvgtPluginControl +Class to Handle UI related actions +****************************************/ + +class CSvgtPluginControl : public CCoeControl, public MCoeControlObserver, + public MPluginNotifier, public MHWRMLightObserver + + { +public: + ~CSvgtPluginControl(); + void ConstructL(CSvgtPlugin *aPlugin, const CCoeControl *aParentControl); + TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType); + void FocusChanged(TDrawNow aDrawNow); +private: // new - possible notifications +#ifndef ER5 + TCoeInputCapabilities InputCapabilities() const; +#endif + void ApplicationFocusChanged(TBool aInFocus); + void SystemNotification(); + void Draw(const TRect& aRect) const; + TInt CountComponentControls() const; + CCoeControl* ComponentControl(TInt aIndex) const; + void HandlePointerEventL(const TPointerEvent& aPointerEvent); + void SizeChanged(); + void HandleControlEventL(CCoeControl* aControl, TCoeEvent aEventType); +private: // in MPluginNottify in S60 + TInt NotifyL(TNotificationType aCallType, void* aParam); +public: //From MEikMenuObserver + + +public: + void LightStatusChanged(TInt aTarget, CHWRMLight::TLightStatus aStatus); + CHWRMLight* iLightObserver; + void AsFile(const TDesC& fname,NPStream* stream); + TBool IsAsFileCalled(); + TDesC& GetFilename(); + +private: + void UpdatePointer(TInt aShiftX =0 , TInt aShiftY=0); + +public: + TSize iContentDimension; +private: + CSvgtPlugin *iPlugin; + TInt iPointerDx, iPointerDy;// increment decrement + TInt iPointerX, iPointerY;//actual Pointer position with respect to Document. + TBool iAsFileCalled; + TBuf<256> iFilename; + TBool iShowCursor; + TInt iXPosAtMouseDown; + TInt iYPosAtMouseDown; + TKeyEvent iPreviousScanCode; //Introduced to differentiate long keypress and short key press + + }; + + +/******************************************************* +Class CSvgtPlugin +********************************************************/ + +class CSvgtPlugin : public CBase, + public MSvgRequestObserver, + public MSvgHyperlinkListener, + public MSvgViewPortListener + , + public MRepositoryVolumeObserver + { + struct ImageInfo + { + TBuf<256> iImageRefUri; + TBool iImagePendingOps; + }; + +public: + static CSvgtPlugin* NewL(NPP anInstance); + ~CSvgtPlugin(); + void ConstructL(NPP anInstance); + void PrepareToExitL(); + CSvgtPluginControl* Control(); + void GetSizeOfRenderBuffer(TSize& aSize); + NPP Instance(); + void SetWindowL(const NPWindow *aWindow,const TRect& aRect); + /** + * ResizeWindow This function set width & height to the browser + * and tell brower to resize. + * + * @since S60 3.1 + * @param TInt width that needed to be used. + * @param TInt height that needed to be used. + * @return void + */ + void ResizeWindow(TInt width, TInt height); + + /** + * AdjustDimention + * + * @since S60 3.1 + * @return ETrue if dimention needs to be changed. EFalse if dimention + * remains the same. + */ + TBool AdjustDimention( TBool aWidthInPercentage, + TBool aHeightInPercentage ); + + /** + * This function retrieves attributes from HTML that is + * passed in by browser engine. + * + * @since S60 3.1 + * @param NPMIMEType + * @param NPP + * @param uint16 + * @param DesC16Array* attribute names + * @param CDesC16Array* attribute values + * @param NPSavedData* + * @return NPError + */ + NPError SvgPluginNew(NPMIMEType pluginType, NPP instance, uint16 mode, + CDesC16Array* argn, CDesC16Array* argv, NPSavedData* saved); + +public: // implements MSvgRequestObserver + + void UpdateScreen(); + + TBool ScriptCall( const TDesC& aScript, + CSvgElementImpl* aCallerElement ); + + TInt FetchImage( const TDesC& aUri, RFs& aSession, RFile& aFileHandle ); + + TInt FetchFont( const TDesC& aUri, RFs& aSession, RFile& aFileHandle ); + + void GetSmilFitValue(TDes& aSmilValue); + + void UpdatePresentation(const TInt32& aNoOfAnimation); + // MHyperlinkListener interface methods + TBool LinkEntered( const TDesC& aUri ); + TBool LinkExited( const TDesC& aUri ); + TBool LinkActivated( const TDesC& aUri ); + TBool LinkActivatedWithShow(const TDesC& aUri,const TDesC& aShow); + //MSvgViewPortListener method + void GetViewPort(TInt getWidth, TInt getHeight,TBool isWidthInPer, TBool isHeightInPer, TInt &setWidth, TInt &setHeight); + + // From MRepositoryVolumeObserver + void VolumeChanged(TInt aNewValue); + + TBool LoadSvgFile( const TDesC& aFilename ); + +private: + + void FetchImageL(const TDesC& aUri); +public: + CFbsBitmap * iRenderBuffer; + TSize iControlSize; + TBool iSetWindowCalled; + TBool iStartCalled; + CSvgEngineInterfaceImpl * iSvgModule; + TInt iRenderWidth; + TInt iRenderHeight; + TInt iObjectWidth; + TInt iObjectHeight; + NPWindow iCurrentWindow; + + TBool iTotalNumerOfAnimation, iStaticContent; + + /*Image Rendering*/ + RPointerArray iImageUrlInfoList; + + TInt iViewPortWidth; + TInt iViewPortHeight; +private: + + CVolumeKeyListener* iKeyListener; + CRepositoryVolumeListener* iRepositoryListener; + + MPluginAdapter* iPluginAdapter; + + //Control of UI for SVGT Engine + CCoeControl * iParentControl; + CSvgtPluginControl * iControl; + NPP iInstance; + TBool iIsRenderBufferDefined; + TInt iResourceFileIndex; + TBool iExpectedDefaultSize; + TBool iAdjusted; + // Flag indicates whether object height is specified + // as percentage value + TBool iObjHeightInPercentage; + // Flag indicates whether object width is specified + // as percentage value + TBool iObjWidthInPercentage; + + //While parsing are object width height are specified or not + TBool iObjectWidthSpecified; + TBool iObjectHeightSpecified; + }; + + +/********************************************************************************* + + Plugin API methods + +*/ + +/** + * Create a plugin. + */ +NPError SvgtPluginNewp(NPMIMEType pluginType, NPP instance, uint16 mode, CDesCArray* argn, CDesCArray* argv, NPSavedData* saved); + +/** + * Destroy a plugin. + */ +NPError SvgtPluginDestroy(NPP instance, NPSavedData** save); + +/** + * This is the parent window of a plugin. + */ +NPError SvgtPluginSetWindow(NPP instance, NPWindow* window); + +/** + * A new data stream has been created for sending data to the plugin. + */ +NPError SvgtPluginNewStream(NPP instance, NPMIMEType type, NPStream* stream, NPBool seekable, uint16* stype); + +/** + * A data stream has been terminated. + */ +NPError SvgtPluginDestroyStream(NPP instance, NPStream* stream, NPReason reason); + +/** + * A data stream has been fully saved to a file. + */ +void SvgtPluginAsFile(NPP instance, NPStream* stream, const TDesC& fname); + +/** + * Return the maximum number of bytes this plugin can accept from the stream. + */ +int32 SvgtPluginWriteReady(NPP instance, NPStream* stream); + +/** + * Receive more data - return number of bytes processed. + */ +int32 SvgtPluginWrite(NPP instance, NPStream* stream, int32 offset, int32 len, void* buffer); + +/** + * Generic hook to set values/attributes within the plugin. + */ +NPError SvgtPluginSetValue(NPP instance, NPNVariable variable, void *ret_value); + +/** + * Generic hook to get values/attributes from the plugin. + */ +NPError SvgtPluginGetValue(NPP instance, NPNVariable variable, void* *ret_value); + +/** + * Event + */ +int16 SvgtPluginEvent(NPP instance, void* event); + + +void SvgtPluginURLNotify(NPP instance, const TDesC& url, NPReason reason, void* notifyData); + +void SvgtPluginPrint(NPP instance, NPPrint* platformPrint); + +#endif // __PLGPLUGIN_H \ No newline at end of file diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVGTPlugin/inc/VolumeKeyListener.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgtopt/SVGTPlugin/inc/VolumeKeyListener.h Wed Sep 01 12:20:46 2010 +0100 @@ -0,0 +1,98 @@ +/* +* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: It completes on a change in the volume property. Used for +* the new Central Repository Server. Used in EKA2 builds only +* +*/ + + +#ifndef VOLUMEKEYLISTENER_H +#define VOLUMEKEYLISTENER_H + +#include +#include +#include + +#include +#include //for MRemConCoreApiTargetObserver +#include //for CRemConInterfaceSelector +#include //for CRemConCoreApiTarget + +// +// for emulator max volume = 65535 +#define WINS_DEFAULT_VOLUME 43690 + +// +// For HW max volume = 9 +#define HW_DEFAULT_VOLUME 6 + +class MRepositoryVolumeObserver; + +// DATA TYPES +// Used for volume up/down events +enum TVolumeControlCommands + { + EVolumeControlCmdVolumeUpByOne, + EVolumeControlCmdVolumeDownByOne + }; + +NONSHARABLE_CLASS( CVolumeKeyListener ) : public CBase, + public MRemConCoreApiTargetObserver + { +public: + + static CVolumeKeyListener* NewL( MRepositoryVolumeObserver* aObserver ); + virtual ~CVolumeKeyListener(); + TInt GetCurrentVolume(); + /** + * Function to add an observer + */ + void SetObserver( MRepositoryVolumeObserver* aObserver ); + +private: + CVolumeKeyListener( MRepositoryVolumeObserver* aObserver ); + void ConstructL(); + + //From MRemConCoreApiTargetObserver (remconcoreapitargetobserver.h) + void MrccatoCommand( TRemConCoreApiOperationId aOperationId, + TRemConCoreApiButtonAction aButtonAct ); + + /** + * Handle repeat event + */ + void HandleRepeatEvent(); + + /** + * Send play command to app UI or view. + * @since 3.1 + */ + void FilterAndSendCommand(TInt aCommandId); + /** + * Callback for timer + */ + static TInt TimerCallback(TAny* aPtr); + +private: + CRemConCoreApiTarget* iInterfaceSelector; + CRemConInterfaceSelector* iSelector; + CRepository* iCenRepos; + CPeriodic* iTimer; // owned + TInt iCommandId; + // Stores the observers. + MRepositoryVolumeObserver* iObserver; + }; + +#endif //VOLUMEKEYLISTENER_H + +// End of File diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVGTPlugin/loc/npSVGTPlugin.loc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgtopt/SVGTPlugin/loc/npSVGTPlugin.loc Wed Sep 01 12:20:46 2010 +0100 @@ -0,0 +1,145 @@ +/* +* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +// r: GSM/CDMA +// v: +// i: LOCALISATION_TARGET = S90 + + +//b: n/a +//e: n/a +//f: n/a +//s: SVG-MEN001 +//w: S90MenuHdr +//d: This is the menu command in the Svg Browser plugin. The Menu appears +//d: when the user taps and holds the stylus for predefined time on the +//d: svg display area in the browser window. "Pause" is used to pause +//d: current svg animation +#define SVGT_ME_MEN001_PAUSE "Pause" + + +//b: n/a +//e: n/a +//f: n/a +//s: SVG-MEN001 +//w: S90MenuHdr +//d: This is the menu command in the Svg Browser plugin. The Menu appears +//d: when the user taps and holds the stylus for predefined time on the +//d: svg display area in the browser window. "Resume" is used to resume playing of +//d: paused svg animation +#define SVGT_ME_MEN001_RESUME "Resume" + + +//b: n/a +//e: n/a +//f: n/a +//s: SVG-MEN001 +//w: S90MenuHdr +//d: This is the menu command in the Svg Browser plugin. The Menu appears +//d: when the user taps and holds the stylus for predefined time on the +//d: svg display area in the browser window. "Reset" is used to reset current +//d: svg animation +#define SVGT_ME_MEN001_RESET "Reset" + +//b: n/a +//e: n/a +//f: n/a +//s: SVG-MEN001 +//w: S90MenuHdr +//d: This is the menu command in the Svg Browser plugin. The Menu appears +//d: when the user taps and holds the stylus for predefined time on the +//d: svg display area in the browser window. "Replay" is used to play the +//d: current svg animation from the start. +#define SVGT_ME_MEN001_REPLAY "Replay" + +//b: n/a +//e: n/a +//f: n/a +//s: SVG-MEN001 +//w: S90MenuHdr +//d: This is the menu command in the Svg Browser plugin. The Menu appears +//d: when the user taps and holds the stylus for predefined time on the +//d: svg display area in the browser window. "Zoom" is used to pop out a +//d: cascade menu for "Zoom In" and "Zoom Out" options +#define SVGT_ME_MEN001_ZOOM "Zoom" + +//b: n/a +//e: n/a +//f: n/a +//s: SVG-MEN001 +//w: S90MenuHdr +//d: This is the menu command in the Svg Browser plugin. The Menu appears +//d: when the user taps and holds the stylus for predefined time on the +//d: svg display area in the browser window. "Rotate" is used to pop out a +//d: cascade menu for "Rotate by 90°", "Rotate by 180°" and "Rotate by 270°" options +#define SVGT_ME_MEN001_ROTATE "Rotate" + +//b: n/a +//e: n/a +//f: n/a +//s: SVG-MEN001 +//w: S90MenuCmd +//d: This is the menu command in the Svg Browser plugin. The Menu appears +//d: when the user taps and holds the stylus for predefined time on the +//d: svg display area in the browser window. "In" is used to Zoom In to the +//d: current svg content +#define SVGT_ME_MEN001_ZOOM_IN "In" + +//b: n/a +//e: n/a +//f: n/a +//s: SVG-MEN001 +//w: S90MenuCmd +//d: This is the menu command in the Svg Browser plugin. The Menu appears +//d: when the user taps and holds the stylus for predefined time on the +//d: svg display area in the browser window. "Out" is used to Zoom Out of the +//d: current svg content +#define SVGT_ME_MEN001_ZOOM_OUT "Out" + +//b: n/a +//e: n/a +//f: n/a +//s: SVG-MEN001 +//w: S90MenuCmd +//d: This is the menu command in the Svg Browser plugin. The Menu appears +//d: when the user taps and holds the stylus for predefined time on the +//d: svg display area in the browser window. "90°" is used to display current +//d: svg content by rotating it by 90 degrees +#define SVGT_ME_MEN001_ROTATE_90 "90°" + +//b: n/a +//e: n/a +//f: n/a +//s: SVG-MEN001 +//w: S90MenuCmd +//d: This is the menu command in the Svg Browser plugin. The Menu appears +//d: when the user taps and holds the stylus for predefined time on the +//d: svg display area in the browser window. "180°" is used to display current +//d: svg content by rotating it by 180 degrees +#define SVGT_ME_MEN001_ROTATE_180 "180°" + +//b: n/a +//e: n/a +//f: n/a +//s: SVG-MEN001 +//w: S90MenuCmd +//d: This is the menu command in the Svg Browser plugin. The Menu appears +//d: when the user taps and holds the stylus for predefined time on the +//d: svg display area in the browser window. "270°" is used to display current +//d: svg content by rotating it by 270 degrees +#define SVGT_ME_MEN001_ROTATE_270 "270°" \ No newline at end of file diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVGTPlugin/resource/s60/101F86DF.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgtopt/SVGTPlugin/resource/s60/101F86DF.rss Wed Sep 01 12:20:46 2010 +0100 @@ -0,0 +1,61 @@ +/* +* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Registry file for Ecom style SVGT Plugin. +* +*/ + + + + + +#include "registryinfo.rh" + +// RESOURCE DEFINITIONS +// ----------------------------------------------------------------------------- +// +// Registry info +// The UIDs for the filters implemented in this DLL +// +// ----------------------------------------------------------------------------- +// + +RESOURCE REGISTRY_INFO theInfo + { + dll_uid = 0x101F86DF; // should match the name of the file. + // 3-d Uid of associeted plugin dll (declared in the dll mmp file) + + interfaces= + { + INTERFACE_INFO + { + interface_uid = 0x101F8810; // identifies plugin type (used by ECom) + implementations = + { + IMPLEMENTATION_INFO + { + implementation_uid = 0x101F8823; // specify specific implementation (must + // match an implementation entry in the dll + version_no = 1; + display_name = "npsvgtplugin.dll;SVGT Plugin";// file name; plugin's name + default_data = "image/svg+xml;svg,svgb,svgz,dcf;SVG Content"; + // suppored mime types + // mime Extensions + // and mime descriptions + opaque_data = "Scalable Vector Graphics Tiny Model Plugin"; // plugin's description + } + }; + } + }; + } + diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVGTPlugin/resource/s90/npSvgtplugin.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgtopt/SVGTPlugin/resource/s90/npSvgtplugin.rss Wed Sep 01 12:20:46 2010 +0100 @@ -0,0 +1,74 @@ +/* +* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: This file contains all the resources for the SVGT Plugin. +* +*/ + + +// RESOURCE IDENTIFIER +NAME SVGT + +// INCLUDES +#include +#include "SvgtPlugin.hrh" +#include + +RESOURCE RSS_SIGNATURE { } + +RESOURCE TBUF { buf=""; } + +RESOURCE EIK_APP_INFO +{ +} + +RESOURCE MNBUT r_svgtplugin_menu_button +{ + popout = r_svgtplugin_menu_pane; +} + +RESOURCE MENU_PANE r_svgtplugin_menu_pane + { + items= + { + MENU_ITEM { command=ESVGTPluginPause; txt=SVGT_ME_MEN001_PAUSE; }, + MENU_ITEM { command=ESVGTPluginResume; txt=SVGT_ME_MEN001_RESUME; }, + MENU_ITEM { command=ESVGTPluginReset; txt=SVGT_ME_MEN001_RESET; }, + MENU_ITEM { command=ESVGTPluginReplay; txt=SVGT_ME_MEN001_REPLAY; }, + MENU_ITEM { command=ESVGTPluginZoomSubMenu; txt=SVGT_ME_MEN001_ZOOM; cascade=r_svgtplugin_zoom_cascaded_menu; }, + MENU_ITEM { command=ESVGTPluginRotateSubMenu; txt=SVGT_ME_MEN001_ROTATE; cascade=r_svgtplugin_rotate_cascaded_menu;} + }; + } + +RESOURCE MENU_PANE r_svgtplugin_zoom_cascaded_menu + { + items = + { + MENU_ITEM { command = ESVGTPluginZoomIn; txt = SVGT_ME_MEN001_ZOOM_IN; }, + MENU_ITEM { command = ESVGTPluginZoomOut; txt = SVGT_ME_MEN001_ZOOM_OUT; } + }; + } + +RESOURCE MENU_PANE r_svgtplugin_rotate_cascaded_menu + { + items = + { + MENU_ITEM { command = ESVGTPluginRotate90; txt = SVGT_ME_MEN001_ROTATE_90;}, + MENU_ITEM { command = ESVGTPluginRotate180; txt = SVGT_ME_MEN001_ROTATE_180; }, + MENU_ITEM { command = ESVGTPluginRotate270; txt = SVGT_ME_MEN001_ROTATE_270; } + }; + } + + +// End of File + diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVGTPlugin/src/RepositoryVolumeListener.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgtopt/SVGTPlugin/src/RepositoryVolumeListener.cpp Wed Sep 01 12:20:46 2010 +0100 @@ -0,0 +1,150 @@ +/* +* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: AO that completes on a change in the volume property. Used for +* the new Central Repository Server. Used in EKA2 builds only +* +*/ + + +//#include + + +#include "RepositoryVolumeListener.h" +//#include //include this file when KSDUidMediaVolumeControl and KMediaVolume will be needed +//#include "epocdebug.h" +#include +#include "MRepositoryVolumeObserver.h" + +CRepositoryVolumeListener* CRepositoryVolumeListener::NewL(MRepositoryVolumeObserver* aObserver) + { + CRepositoryVolumeListener* self = new(ELeave) CRepositoryVolumeListener; + CleanupStack::PushL(self); + self->ConstructL(aObserver); + CleanupStack::Pop(self); + return self; + } + +CRepositoryVolumeListener::CRepositoryVolumeListener() : CActive(CActive::EPriorityStandard) + { + iState = EUnableToConnect; + CActiveScheduler::Add(this) ; // add to active scheduler + } + +void CRepositoryVolumeListener::ConstructL(MRepositoryVolumeObserver* aObserver) + { + // + // Open a connection to the Central Repository... + iCenRepos = CRepository::NewL(KCRUidBrowser); + + if ( iCenRepos->NotifyRequest(KBrowserMediaVolumeControl, iStatus) == KErrNone ) + { + iState = EConnected; + SetActive(); + } + else + { + iState = EUnableToConnect; + } + + iObserver = aObserver; + } + +CRepositoryVolumeListener::~CRepositoryVolumeListener() + { + Cancel(); + delete iCenRepos; // close the client session + } + +// +// Get the current volume +TInt CRepositoryVolumeListener::GetCurrentVolume() + { + TInt currentVolume = 0; + + if ( iState == EUnableToConnect ) + { + // + // Connection to CenRepos not available so return the default volume + currentVolume = GetDefaultVolume(); + } + else + { + // + // Get the current volume + if ( iCenRepos->Get(KBrowserMediaVolumeControl, currentVolume) != KErrNone ) + { + // Error retrieving value... return default value + //PLAYEROUTPUT("*ERROR* CRepositoryVolumeListener::GetCurrentVolume() - Unable to retreive volume value"); + currentVolume = GetDefaultVolume(); + } + } + + return currentVolume; + } + +// +// Return the default volume in this case 2/3 of the max support by the system +TInt CRepositoryVolumeListener::GetDefaultVolume() + { + TInt defaultVol = 0; + + #if defined(__WINS__) + defaultVol = WINS_DEFAULT_VOLUME; + #else + defaultVol = HW_DEFAULT_VOLUME; + #endif + + return defaultVol; + } + +void CRepositoryVolumeListener::DoCancel() + { + iCenRepos->NotifyCancel(KBrowserMediaVolumeControl); + } + +// +// Activated when the watched value updates. +void CRepositoryVolumeListener::RunL() + { + TInt currentVolume = 0; + + if (EUnableToConnect == iState) + { + return; + } + + // + // Get the current volume + if ( iCenRepos->Get(KBrowserMediaVolumeControl, currentVolume) == KErrNone ) + { + // + // Inform the observer + iObserver->VolumeChanged(currentVolume); + if ( iCenRepos->NotifyRequest(KBrowserMediaVolumeControl, iStatus) == KErrNone ) + { + SetActive(); + } + else + { + iState = EUnableToConnect; + } + } + else + { + // + // error + iState = EUnableToConnect; + } + + } diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVGTPlugin/src/SvgtPluginControl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgtopt/SVGTPlugin/src/SvgtPluginControl.cpp Wed Sep 01 12:20:46 2010 +0100 @@ -0,0 +1,589 @@ +/* +* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: SVGT Plugin Implementation source file + * +*/ + +#include +#include +#include +#include +#include +#include +//#include +#include + +#include "Svgtplugin.h" + +#define SVGT_PLUGIN_DEVICE_KEY_0 48 +#define SVGT_PLUGIN_DEVICE_KEY_1 49 +#define SVGT_PLUGIN_DEVICE_KEY_2 50 +#define SVGT_PLUGIN_DEVICE_KEY_3 51 +#define SVGT_PLUGIN_DEVICE_KEY_4 52 +#define SVGT_PLUGIN_DEVICE_KEY_5 53 +#define SVGT_PLUGIN_DEVICE_KEY_6 54 +#define SVGT_PLUGIN_DEVICE_KEY_7 55 +#define SVGT_PLUGIN_DEVICE_KEY_8 56 +#define SVGT_PLUGIN_DEVICE_KEY_9 57 +#define SVGT_PLUGIN_DEVICE_KEY_ASTERIX 42 + + +void CSvgtPluginControl::ConstructL(CSvgtPlugin* aPlugin, const CCoeControl* aParentControl) + { + iAsFileCalled = EFalse; + iShowCursor = EFalse; + iPointerX = 5; + iPointerY = 5; + iPlugin=aPlugin; + this->CreateWindowL(aParentControl); + ActivateL(); + EnableDragEvents(); + iLightObserver = CHWRMLight::NewL(this); + } + +CSvgtPluginControl::~CSvgtPluginControl() + { + delete iLightObserver; + } + +void CSvgtPluginControl::Draw(const TRect& aRect) const + { + CWindowGc &gc = SystemGc(); + if (iPlugin && iPlugin->iRenderBuffer !=NULL) + { + + // Fix for the iframe scrolling. + TRect lCliprect; + + lCliprect.iTl.iY = iPlugin->iCurrentWindow.clipRect.top; + lCliprect.iTl.iX = iPlugin->iCurrentWindow.clipRect.left; + lCliprect.iBr.iY = iPlugin->iCurrentWindow.clipRect.bottom; + lCliprect.iBr.iX = iPlugin->iCurrentWindow.clipRect.right; + + TSize lWindowSize(iPlugin->iCurrentWindow.width,iPlugin->iCurrentWindow.height); + + if(lWindowSize!=(lCliprect.Size())) + { + // Get the Abs(x,y) of the window and render with the size of the cliprect + TPoint lpt(Abs(iPlugin->iCurrentWindow.x),Abs(iPlugin->iCurrentWindow.y )); + TRect lrect(lpt,lCliprect.Size()); + gc.BitBlt( aRect.iTl, (iPlugin->iRenderBuffer), lrect ); + } + else + { + gc.BitBlt( aRect.iTl, (iPlugin->iRenderBuffer), aRect ); + } + + + if ( iShowCursor ) + { + TInt lX = iPointerX + aRect.iTl.iX; + TInt lY = iPointerY + aRect.iTl.iY; + TRect csrh ( lX - 2, + lY - 5, + lX + 2, + lY + 5 ); + TRect csrv ( lX - 5, + lY - 2, + lX + 5, + lY + 2 ); + gc.SetPenSize( TSize( 1, 1 ) ); + gc.SetBrushStyle( CGraphicsContext::ESolidBrush ); + gc.SetBrushColor( TRgb( 0, 0, 0 ) ); + gc.SetPenColor( TRgb( 0, 0, 0 ) ); + gc.DrawRect( csrh ); + gc.DrawRect( csrv ); + csrh.Shrink( 1, 1 ); + csrv.Shrink( 1, 1 ); + gc.SetBrushColor( TRgb( 255, 225, 225 ) ); + gc.SetPenColor( TRgb( 255, 225, 225 ) ); + gc.DrawRect( csrh ); + gc.DrawRect( csrv ); + } + } + } + +TInt CSvgtPluginControl::CountComponentControls() const + { + return 0; + } + +CCoeControl* CSvgtPluginControl::ComponentControl(TInt /*aIndex*/) const + { + return NULL; + } + +void CSvgtPluginControl::SizeChanged() + { + } + +#ifndef ER5 +TCoeInputCapabilities CSvgtPluginControl::InputCapabilities() const + { + return TCoeInputCapabilities(TCoeInputCapabilities::ENavigation); + } +#endif + +void CSvgtPluginControl::HandleControlEventL(CCoeControl* /*aControl*/, TCoeEvent /*aEventType*/) + { + } + +void CSvgtPluginControl::FocusChanged(TDrawNow /*aDrawNow*/) + { + } + +TKeyResponse CSvgtPluginControl::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType) + { + TKeyResponse retVal = EKeyWasNotConsumed; + if( iPlugin->iSvgModule && iPlugin->iSvgModule->SvgDocument() ) + { + if ( aType == EEventKeyUp ) + { + iPointerDx = 0; + iPointerDy = 0; + if ( aKeyEvent.iScanCode == EStdKeyDevice3 ) // Center button of rocker key + { + iPlugin->iSvgModule->MouseUp( iPointerX, iPointerY ); + retVal = EKeyWasConsumed; + } + if(iPreviousScanCode.iScanCode == SVGT_PLUGIN_DEVICE_KEY_0) + { + if(!iPreviousScanCode.iRepeats) /*Short Key Press of 'Zero' Do Zoom Out*/ + { + iPlugin->iSvgModule->Zoom(0.5f); + iPlugin->iSvgModule->Redraw(); + } + else /*Long Key Press of 'Zero' Reset to Original View*/ + { + iPlugin->iSvgModule->OriginalView(); + iPlugin->iSvgModule->Redraw(); + } + retVal = EKeyWasConsumed; + + } + iPreviousScanCode.iRepeats = 0; + iPreviousScanCode.iCode = 0; + iPreviousScanCode.iScanCode = 0; + } + else if ( aType == EEventKey ) + { + retVal = EKeyWasConsumed; + // aKeyEvent.iScanCode does not recognize EStdKeyNkpAsterisk + switch ( aKeyEvent.iScanCode ) + { + case EStdKeyLeftArrow: + iPointerDx -= 5; + iPointerDy = 0; + break; + case EStdKeyRightArrow: + iPointerDx += 5; + iPointerDy = 0; + break; + case EStdKeyUpArrow: + iPointerDx = 0; + iPointerDy -= 5; + break; + case EStdKeyDownArrow: + iPointerDx = 0; + iPointerDy += 5; + break; + case EStdKeyDevice3: + // Center button of rocker key + iPlugin->iSvgModule->MouseDown( iPointerX, iPointerY ); + break; + case EStdKeyHash: // Pause/Resume + if(iPlugin->iSvgModule->CurrentState() == 0) + iPlugin->iSvgModule->Stop(); + else if(iPlugin->iSvgModule->CurrentState() == 1) + iPlugin->iSvgModule->Resume(); + break; + + case SVGT_PLUGIN_DEVICE_KEY_5: //Zoom In + iPlugin->iSvgModule->Zoom(2.0f); + iPlugin->iSvgModule->Redraw(); + break; + + case SVGT_PLUGIN_DEVICE_KEY_1: //Rotate ClockWise 90 + iPlugin->iSvgModule->Rotate( (float) (3.1415926/2), iContentDimension.iWidth/2, iContentDimension.iHeight/2); + iPlugin->iSvgModule->Redraw(); + break; + + case SVGT_PLUGIN_DEVICE_KEY_3: //Rotate Counter ClockWise 90 + iPlugin->iSvgModule->Rotate( (float) (-3.1415926/2), iContentDimension.iWidth/2, iContentDimension.iHeight/2); + iPlugin->iSvgModule->Redraw(); + break; + case SVGT_PLUGIN_DEVICE_KEY_7: //Rotate ClockWise 45 + iPlugin->iSvgModule->Rotate( (float) (3.1415926/4), iContentDimension.iWidth/2, iContentDimension.iHeight/2); + iPlugin->iSvgModule->Redraw(); + break; + case SVGT_PLUGIN_DEVICE_KEY_9: //Rotate Counter ClockWise 45 + iPlugin->iSvgModule->Rotate( (float) (-3.1415926/4), iContentDimension.iWidth/2, iContentDimension.iHeight/2); + iPlugin->iSvgModule->Redraw(); + break; + case SVGT_PLUGIN_DEVICE_KEY_0: + iPreviousScanCode = aKeyEvent; + break; + default: + retVal = EKeyWasNotConsumed; + } + } + + else if ( aType == EEventKeyDown) + { + // Send the mousedown event for triggering any animation + // Since the EEventKey is not recieved when MSK is pressed, + // the mousedown doesn't occur on engine. Hence EEventKey + // handled here + if ( aKeyEvent.iScanCode == EStdKeyDevice3 ) // Center button of rocker key + { + iPlugin->iSvgModule->MouseDown( iPointerX, iPointerY ); + retVal=EKeyWasConsumed; + } + } + + if ( (iPointerDx != 0) || (iPointerDy != 0) ) + { + UpdatePointer(iPointerDx,iPointerDy); + } + } + return retVal; + } + + +void CSvgtPluginControl::AsFile(const TDesC& fname,NPStream* stream) + { + // ----------------------------------- + // Check for image was requested + // ----------------------------------- + if( iPlugin && iFilename.Length() > 0 ) + { + TInt lFileSize = 0; + RFile lSvgFile; + CEikonEnv* iEikEnv = CEikonEnv::Static(); + + // Attempt to open the file in read mode + User::LeaveIfError( lSvgFile.Open(iEikEnv->FsSession(),fname,EFileRead ) ); + + // Save on cleanup stack + CleanupClosePushL( lSvgFile ); + + // Get the size of the data to create read buffer + User::LeaveIfError( lSvgFile.Size(lFileSize) ); + + // Create buffer that will contain the file data + HBufC8* lFileData = HBufC8::NewLC(lFileSize); + TPtr8 lFileDataPtr(lFileData->Des()); + + // Read from the file + User::LeaveIfError( lSvgFile.Read(lFileDataPtr) ); + + TInt index = reinterpret_cast((stream->notifyData)); + + iPlugin->iSvgModule->AssignImageData(*(iPlugin->iImageUrlInfoList[index]), lFileData ); + iPlugin->iSvgModule->Redraw(); + + // The ownership of lFileData is with the respective Image Element. + CleanupStack::Pop(1); + CleanupStack::PopAndDestroy(&lSvgFile); // lSvgFile.Close() + + return; + } + + // Svg file + iFilename.Zero(); + iFilename.Copy(fname); + + if ( ( iPlugin && iPlugin->iSvgModule ) ) + { + iPlugin->iSvgModule->Stop(); + iPlugin->LoadSvgFile( iFilename ); + // After loading the content, the width & height will be visible to plugin. + // It is time to adjust the size if needed. + TBool widthInPercentage = EFalse; + TBool heightInPercentage = EFalse; + iContentDimension = iPlugin->iSvgModule->ContentDimensionsInPercentage(); + + if(iContentDimension.iWidth == -1) + { + widthInPercentage = EFalse; + if(iPlugin->iSvgModule->SvgDocument()) + { + iContentDimension.iWidth = iPlugin->iSvgModule->GetViewportWidth(iPlugin->iSvgModule->SvgDocument()); + } + else + { + return; + } + } + else + { + widthInPercentage = ETrue; + } + + if(iContentDimension.iHeight == -1) + { + heightInPercentage = EFalse; + if(iPlugin->iSvgModule->SvgDocument()) + { + iContentDimension.iHeight = iPlugin->iSvgModule->GetViewportHeight(iPlugin->iSvgModule->SvgDocument()); + } + else + { + return; + } + + } + else + { + heightInPercentage = ETrue; + } + if(iPlugin->AdjustDimention(widthInPercentage, heightInPercentage)) + { + // dimention change is needed so return and notify Browser. + iAsFileCalled = ETrue; + return; + } + + iPlugin->iSvgModule->Start(); + } + iAsFileCalled = ETrue; + } + + +TBool CSvgtPluginControl::IsAsFileCalled() + { + return iAsFileCalled; + } + +TDesC& CSvgtPluginControl::GetFilename() + { + return iFilename; + } + + +void CSvgtPluginControl::LightStatusChanged(TInt aTarget, CHWRMLight::TLightStatus aStatus) +{ + //TInt lState = iPlugin->iSvgModule->CurrentState(); + if((aTarget == CHWRMLight::EPrimaryDisplay) || (aTarget == CHWRMLight::EPrimaryDisplayAndKeyboard)) + { + if(aStatus == CHWRMLight::ELightOff) + { + + if (iPlugin && iPlugin->iSvgModule) + { + #ifdef _DEBUG + RDebug::Printf("Backlight Off"); + #endif //_DEBUG + + iPlugin->iSvgModule->Pause(); + } + + } + else if(aStatus == CHWRMLight::ELightOn) + { + + if (iPlugin && iPlugin->iSvgModule) + { + #ifdef _DEBUG + RDebug::Printf("Backlight On"); + #endif //_DEBUG + + iPlugin->iSvgModule->Resume(); + } + } + } + +} +/** +* MOperaPluginNotifier methods +* - Handle notifications browser +*/ +TInt CSvgtPluginControl::NotifyL(TNotificationType aCallType, void* aParam) + { + if ( (iPlugin == NULL ) || ( iPlugin->iSvgModule == NULL ) ) + { + return KErrNone; + } + + if(aCallType == EApplicationFocusChanged) + { + TInt lState = iPlugin->iSvgModule->CurrentState(); + TBool lInFocus = (TBool) aParam; + + if ( lInFocus ) + { + // iShowCursor = ETrue; + if ( lState == 1 ) + { + iPlugin->iSvgModule->Resume(); + } + DrawNow(); + } + else if ( !lInFocus ) + { + //ShowCursor = EFalse; + if ( lState == 0 ) + { + iPlugin->iSvgModule->Pause(); + } + DrawNow(); + } + } + else if(aCallType == EPluginActivated) + { + iShowCursor = ETrue; + DrawNow(); + } + else if(aCallType == EPluginDeactivated) + { + iShowCursor = EFalse; + DrawNow(); + } + else if(aCallType == EPluginInvisible ) + { + } + return KErrNone; + } + + +void CSvgtPluginControl::ApplicationFocusChanged(TBool /*aInFocus*/) + { + } + +void CSvgtPluginControl::SystemNotification() + { + } + +void CSvgtPluginControl::HandlePointerEventL(const TPointerEvent& aPointerEvent) + { + + + if ( iPlugin->iSvgModule && iPlugin->iSvgModule->SvgDocument() ) + { + iPointerDx = 0; + iPointerDy = 0; + + if(aPointerEvent.iType == TPointerEvent::EButton1Down) + { + if(aPointerEvent.iPosition.iX <=iPlugin->iRenderWidth && aPointerEvent.iPosition.iY <=iPlugin->iRenderHeight) + { + iPointerX = aPointerEvent.iPosition.iX; + iPointerY = aPointerEvent.iPosition.iY; + + iXPosAtMouseDown = iPointerX; + iYPosAtMouseDown = iPointerY; + + iPlugin->iSvgModule->MouseDown( iPointerX, iPointerY ); + UpdatePointer(); + } + } + else if(aPointerEvent.iType == TPointerEvent::EButton1Up) + { + iPlugin->iSvgModule->MouseUp( iPointerX, iPointerY ); + DrawDeferred(); + } + else if (aPointerEvent.iType == TPointerEvent::EDrag) + { + if((iPointerX != aPointerEvent.iPosition.iX || iPointerY != aPointerEvent.iPosition.iY) && + (aPointerEvent.iPosition.iX <=iPlugin->iRenderWidth && aPointerEvent.iPosition.iY <=iPlugin->iRenderHeight)) + { + iPointerX = aPointerEvent.iPosition.iX; + iPointerY = aPointerEvent.iPosition.iY; + + iPlugin->iSvgModule->MouseMove( iPointerX, iPointerY ); + + UpdatePointer((iXPosAtMouseDown-iPointerX),(iYPosAtMouseDown-iPointerY)); + } + } + } + } + +void CSvgtPluginControl::UpdatePointer( +#ifdef __PEN_SUPPORT + TInt aShiftX , TInt aShiftY +#else + TInt , TInt +#endif + ) + { + #ifdef __PEN_SUPPORT + if(FeatureManager::FeatureSupported(KFeatureIdPenSupport)) + { + if(aShiftX != 0 || aShiftY != 0 ) + { + iPlugin->iSvgModule->Pan(-aShiftX,-aShiftY); + iPlugin->iSvgModule->Redraw(); + iXPosAtMouseDown = iPointerX; + iYPosAtMouseDown = iPointerY; + iPlugin->iSvgModule->MouseMove( iPointerX, iPointerY ); + User::After(10); + DrawNow(); + } + } + #else//_PEN_SUPPORT + { + if (iPlugin->iRenderBuffer !=NULL) + { + // Due to the iframe scrolling the pointer will run out + // of the iframe window when tried to pan inside the plugin. + // So the control rect for the pointer is now the cliprect. + + // TRect lControlRect(TSize(iPlugin->iViewPortWidth, iPlugin->iViewPortHeight)); + TRect lControlRect; + + lControlRect.iTl.iY = iPlugin->iCurrentWindow.clipRect.top; + lControlRect.iTl.iX = iPlugin->iCurrentWindow.clipRect.left; + lControlRect.iBr.iY = iPlugin->iCurrentWindow.clipRect.bottom; + lControlRect.iBr.iX = iPlugin->iCurrentWindow.clipRect.right; + + //X value + iPointerX += iPointerDx; + if ( iPointerX < 5 ) + { + iPointerX = 5; + iPlugin->iSvgModule->Pan( 30, 0 ); + //iPlugin->iSvgModule->Pan( -30, 0 ); + iPlugin->iSvgModule->Redraw(); + } + else if ( lControlRect.Width() - 5 < iPointerX ) + { + iPointerX = lControlRect.Width() - 5; + iPlugin->iSvgModule->Pan( -30, 0 ); + //iPlugin->iSvgModule->Pan( 30, 0 ); + iPlugin->iSvgModule->Redraw(); + } + //Y value + iPointerY += iPointerDy; + if ( iPointerY < 5 ) + { + iPointerY = 5; + iPlugin->iSvgModule->Pan( 0, 30 ); + //iPlugin->iSvgModule->Pan( 0, -30 ); + iPlugin->iSvgModule->Redraw(); + } + else if ( lControlRect.Height() - 5 < iPointerY ) + { + iPointerY = lControlRect.Height() - 5; + iPlugin->iSvgModule->Pan( 0,-30 ); + //iPlugin->iSvgModule->Pan( 0,30 ); + iPlugin->iSvgModule->Redraw(); + } + iPlugin->iSvgModule->MouseMove( iPointerX, iPointerY ); + DrawNow(); + } + } + #endif //_PEN_SUPPORT + + } + diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVGTPlugin/src/Svgtplugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgtopt/SVGTPlugin/src/Svgtplugin.cpp Wed Sep 01 12:20:46 2010 +0100 @@ -0,0 +1,740 @@ +/* +* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: SVGT Plugin Implementation source file + * +*/ + + + +#include +#include +#include +#include +#include +#include + +#include + +#include + +#include + +#include "Svgtplugin.h" + +#include "VolumeKeyListener.h" +#include "RepositoryVolumeListener.h" + +_LIT(KWidth, "width"); +_LIT(KHeight, "height"); + +CSvgtPlugin* CSvgtPlugin::NewL(NPP anInstance) + { + CSvgtPlugin *self = new (ELeave) CSvgtPlugin; + CleanupStack::PushL( self ); + self->ConstructL(anInstance); + + CleanupStack::Pop(); + return self; + } + + +CSvgtPlugin::~CSvgtPlugin() + { + if ( iControl ) + { + delete iControl; + iControl=NULL; + } + + if ( iSvgModule ) + { + iSvgModule->Stop(); + delete iSvgModule; + iSvgModule = NULL; + } + + if ( iRenderBuffer ) + { + delete iRenderBuffer; + iRenderBuffer = NULL; + } + + iImageUrlInfoList.ResetAndDestroy(); + iImageUrlInfoList.Close(); + + if(iKeyListener) + { + delete iKeyListener; + iKeyListener = NULL; + } + + if(iRepositoryListener) + { + delete iRepositoryListener; + iRepositoryListener = NULL; + } + } + +void CSvgtPlugin::PrepareToExitL() + { + if (iPluginAdapter) + iPluginAdapter->PluginFinishedL(); + } + +void CSvgtPlugin::ConstructL(NPP anInstance) + { + iInstance=anInstance; + iRenderBuffer = new ( ELeave ) CFbsBitmap(); + + iObjectWidth = 0; + iObjectHeight = 0; + // By default obj height is not in percentage + iObjHeightInPercentage = EFalse; + // By default obj width is not in percentage + iObjWidthInPercentage = EFalse; + iExpectedDefaultSize = EFalse; + + //While parsing are object width height are specified or not + iObjectWidthSpecified = EFalse; + iObjectHeightSpecified = EFalse; + TFontSpec lFontSpec; + iSvgModule = CSvgEngineInterfaceImpl::NewL( iRenderBuffer, this, lFontSpec ); + + // Clear background white + iSvgModule->SetBackgroundColor(0xffffffff); + iSvgModule->AddHyperlinkListener( this ); + iAdjusted = EFalse; + + if (FeatureManager::FeatureSupported(KFeatureIdSideVolumeKeys)) + { + User::InfoPrint(_L("Volume Key supported")); + iKeyListener = CVolumeKeyListener::NewL(this); + } + else + { + User::InfoPrint(_L("Key not supported")); + iRepositoryListener = CRepositoryVolumeListener::NewL(this); + } + } + +void CSvgtPlugin::SetWindowL(const NPWindow *aWindow,const TRect& aRect) + { + iCurrentWindow.x = aWindow->x; + iCurrentWindow.y = aWindow->y; + iCurrentWindow.window = aWindow->window; + iCurrentWindow.clipRect = aWindow->clipRect; + iCurrentWindow.type = aWindow->type; + iCurrentWindow.width = aWindow->width; + iCurrentWindow.height = aWindow->height; + + iPluginAdapter = static_cast(aWindow->window); + iParentControl = iPluginAdapter->GetParentControl(); + if (iControl == NULL) + { + iControl = new (ELeave) CSvgtPluginControl; + iControl->ConstructL(this,iParentControl); + iPluginAdapter->PluginConstructedL(iControl); + iPluginAdapter->SetPluginNotifier(iControl); + } + + if ( !iControl || !iSvgModule || aRect.Width() <= 0 || aRect.Height() <= 0 ) + { + return; + } + iSetWindowCalled = ETrue; + + iControl->SetRect(aRect); + + if ( iRenderWidth != aRect.Width() || + iRenderHeight != aRect.Height() ) + { + iRenderWidth = aRect.Width(); + iRenderHeight = aRect.Height(); + + // Browser initially sends width/height as zero + // if width/height are not specified + // Later if svg is available to us we call resize after adjustDimention + // But if we dont do adjustDimention quick enough + // Browser sends default width/Height as 300x150 + + // To Ensure that we are setting the object width/height and + // browser is not setting default width/height ahead of us doing resize + + // In adjustDimention if width/height are specified at the browser level + // iAdjusted is set to false, the second condition is to ensure that + // if the browser does a resize at a later point it should be allowed + if(iAdjusted || (iObjectWidthSpecified && iObjectHeightSpecified)) + { + iObjectWidth = iRenderWidth; + iObjectHeight = iRenderHeight; + } + iSvgModule->Pause(); //fix for CGSR-7CN7T7 + + User::LeaveIfError( iRenderBuffer->Create( + TSize( iRenderWidth, iRenderHeight ), EColor64K ) ); + iSvgModule->SetFrameBuffer( iRenderBuffer ); + iSvgModule->Resume(); // fix for CGSR-7CN7T7 + } + + + if ( iExpectedDefaultSize ) + { + iExpectedDefaultSize = EFalse; + AdjustDimention(ETrue,ETrue); + } + + if(iControlSize != aRect.Size()) + { + iRenderWidth = aRect.Width(); + iRenderHeight = aRect.Height(); + CFbsBitmap * lTempRenderBuffer = new (ELeave) CFbsBitmap(); + CleanupStack::PushL(lTempRenderBuffer); + User::LeaveIfError( lTempRenderBuffer->Create( TSize(iRenderWidth,iRenderHeight), EColor64K )); + iSvgModule->SetFrameBuffer(lTempRenderBuffer); + + delete iRenderBuffer; + iRenderBuffer = lTempRenderBuffer; + CleanupStack::Pop(lTempRenderBuffer); + lTempRenderBuffer = NULL; + iControlSize = aRect.Size(); + iControl->iContentDimension = iSvgModule->ContentDimensions(); + } + // For autoloading feature. + if ( iControl->IsAsFileCalled() && iControl->GetFilename().Length() > 0 && + !iStartCalled ) + { + + TBool widthInPercentage; + TBool heightInPercentage; + + iControl->iContentDimension = iSvgModule->ContentDimensionsInPercentage(); + if(iControl->iContentDimension.iWidth == -1 ) + { + widthInPercentage = EFalse; + if(iSvgModule->SvgDocument()) + { + iControl->iContentDimension.iWidth = iSvgModule->GetViewportWidth(iSvgModule->SvgDocument()); + } + else + { + return; + } + + } + else + { + widthInPercentage = ETrue; + } + + if(iControl->iContentDimension.iHeight == -1) + { + heightInPercentage = EFalse; + if(iSvgModule->SvgDocument()) + { + iControl->iContentDimension.iHeight = iSvgModule->GetViewportHeight(iSvgModule->SvgDocument()); + } + else + { + return; + } + } + else + { + heightInPercentage = ETrue; + } + // After loading the content, the width & height will be visible to plugin. + // It is time to adjust the size if needed. + if ( AdjustDimention(widthInPercentage,heightInPercentage) ) + { + // dimention change is needed so return and notify Browser. + return; + } + iSvgModule->Start(); + iStartCalled = ETrue; + } + + } + + +CSvgtPluginControl* CSvgtPlugin::Control() + { + return iControl; + } + +NPP CSvgtPlugin::Instance() + { + return iInstance; + } + +void CSvgtPlugin::GetSizeOfRenderBuffer(TSize& aSize) + { + if ( iRenderBuffer ) + { + aSize = iRenderBuffer->SizeInPixels(); + } + else + { + aSize = TSize ( 0, 0 ); + } + } + + + +/**********************************************************************/ +// implements MSvgRequestObserver +/**********************************************************************/ + +void CSvgtPlugin::UpdateScreen() + { + iControl->DrawNow(); + } + + +TBool CSvgtPlugin::ScriptCall( const TDesC& /*aScript*/, + CSvgElementImpl* /*aCallerElement*/ ) + { + return EFalse; + } + +TBool CSvgtPlugin::LinkEntered( const TDesC& /* aUri */ ) +{ + // update mouse pointer here + return ETrue; +} + +TBool CSvgtPlugin::LinkExited( const TDesC& /* aUri */ ) +{ + // update mouse pointer here + return ETrue; +} +TBool CSvgtPlugin::LinkActivated( const TDesC& aUrl ) + { + CSvgtPluginEcomMain* lSvgtPluginEcomMain = (CSvgtPluginEcomMain*) Dll :: Tls (); + NPNetscapeFuncs* lNetscapeFuncs = lSvgtPluginEcomMain->Funcs(); + if(lNetscapeFuncs) + { + TPtrC lTarget('\0',0); + lTarget.Set(_L("_parent")); + lNetscapeFuncs->geturl(iInstance,aUrl,&lTarget); + } + return ETrue; + } + +void CSvgtPlugin::VolumeChanged(TInt aNewValue) + { + RDebug::Print(_L("Volume level: %d"), aNewValue); + aNewValue *= 10; //to make the volume in percentage + iSvgModule->SetAudioVolume( aNewValue ); + } + +TInt CSvgtPlugin::FetchImage(const TDesC& aUri, RFs& /*aSession*/, RFile& /*aFileHandle*/ ) +{ + TRAPD(err,FetchImageL(aUri)); + + return err; + +} + +void CSvgtPlugin::FetchImageL(const TDesC& aUri) + { + TInt lCount = iImageUrlInfoList.Count(); + HBufC* lListItem = NULL; + HBufC* lUrl = NULL; + + //checks whether the request is already made for same Uri. + for(TInt i = 0; i < lCount; i++) + { + lListItem = HBufC::NewLC(iImageUrlInfoList[i]->Length()); + lUrl = aUri.AllocLC(); + + *lListItem = *iImageUrlInfoList[i]; + + // Convert the List Item to Lower case + TPtr lListItemPtr = lListItem->Des(); + lListItemPtr.LowerCase(); + + // Convert the Url to Lower case + TPtr lUrlPtr = lUrl->Des(); + lUrlPtr.LowerCase(); + + if( lListItemPtr.Compare(lUrlPtr) == 0 ) + { + CleanupStack::PopAndDestroy(2); + + lListItem = NULL; + lUrl = NULL; + // Same Url is already requested in the past, no need to continue. + User::Leave(KErrAlreadyExists); // Indicates the download is pending + } + + CleanupStack::PopAndDestroy(2); + + lListItem = NULL; + lUrl = NULL; + } + + + // -------------------------------------- + // Request file from browser + // -------------------------------------- + CSvgtPluginEcomMain* lSvgtPluginEcomMain = (CSvgtPluginEcomMain*) Dll :: Tls (); + NPNetscapeFuncs* lNetscapeFuncs = lSvgtPluginEcomMain->Funcs(); + if(lNetscapeFuncs) + { + TPtrC lTarget('\0',0); + + lUrl = aUri.AllocL(); + + // Current count is used as a context data. + void* contextptr = (void*)(lCount); + NPError error = lNetscapeFuncs->geturlnotify(iInstance,aUri,NULL,contextptr); + + // Add the Url and RequestID to the List + iImageUrlInfoList.Append(lUrl); + + if ( error != 0 ) + { + #ifdef _DEBUG + lNetscapeFuncs->status(iInstance,_L("Image failed")); + #endif + + User::LeaveIfError(error); + } + #ifdef _DEBUG + lNetscapeFuncs->status(iInstance,_L("Downloading Image")); + #endif + } + + + + User::Leave(KRequestPending); // Indicate the download is pending + } + +TInt CSvgtPlugin::FetchFont( const TDesC& /* aUri */, RFs& /* aSession */, RFile& /* aFileHandle */) + { + // Fix for ANAE-775B7E. There is a limitaiton. For rendering text with + // external font synchronous fetching of the file is needed. But the + // external font file is fetched asynchronously by browser when we say + // geturlnotify(). There is no API to pass the font data after fetching + // asynchronously. Hence the code here is removed by returning an error. + return KErrNotFound; + } + + +TBool CSvgtPlugin::LinkActivatedWithShow(const TDesC& aUri,const TDesC& /*aShow*/) + { + CSvgtPluginEcomMain* lSvgtPluginEcomMain = (CSvgtPluginEcomMain*) Dll :: Tls (); + NPNetscapeFuncs* lNetscapeFuncs = lSvgtPluginEcomMain->Funcs(); + if(lNetscapeFuncs) + { + TPtrC lTarget('\0',0); + lTarget.Set(_L("_parent")); + lNetscapeFuncs->geturl(iInstance,aUri,&lTarget); + } + return ETrue; + } + +void CSvgtPlugin::GetSmilFitValue(TDes16 &aSmilValue) + { + aSmilValue.Copy(_L("meet")); + } + +void CSvgtPlugin::UpdatePresentation(const TInt32& aNoOfAnimation) + { + if (iTotalNumerOfAnimation < 0) + { + if (aNoOfAnimation != 0) + { + iStaticContent = EFalse; + iTotalNumerOfAnimation = aNoOfAnimation; + } + else + { + iStaticContent = ETrue; + } + } + else + { + iTotalNumerOfAnimation--; + } + } + +void CSvgtPlugin::GetViewPort(TInt /*getWidth*/, TInt /*getHeight*/, TBool /*isWidthInPer*/, TBool /*isHeightInPer*/, TInt &setWidth, TInt &setHeight) +{ + + setWidth = iRenderWidth; + setHeight = iRenderHeight; + + iViewPortWidth = setWidth; + iViewPortHeight = setHeight; +} +// --------------------------------------------------------------------------- +// This function extracts attributes from the list that is passed from Browser. +// Use to check if width & height are defined in XHTML tag +// --------------------------------------------------------------------------- +// +NPError CSvgtPlugin::SvgPluginNew(NPMIMEType /*pluginType*/, NPP instance, + uint16 /*mode*/, CDesC16Array* argn, CDesC16Array* argv, NPSavedData* ) + { + if (instance->pdata != this) + { + return NPERR_INVALID_INSTANCE_ERROR; + } + + for (TInt i = 0; i < argn->Count(); i++) + { + TPtrC16 namePtr((*argn)[i]); + TPtrC16 valPtr((*argv)[i]); + + if (KWidth().FindF(namePtr) == 0) + { + TLex lString( valPtr ); + lString.SkipSpace(); + TInt result = lString.Val(iRenderWidth); + // Check if object width was specified as + // percentage value. + if ( valPtr.Locate( '%' ) != KErrNotFound ) + { + // Do not store the value, browser takes + // care of computing the width + iObjWidthInPercentage = ETrue; + } + if (( result != KErrNone) || (iRenderWidth < 0)) + { + iObjectWidth = 0; + } + else + { + iObjectWidth = iRenderWidth; + } + iObjectWidthSpecified = ETrue; + } + else if (KHeight().FindF(namePtr) == 0) + { + TLex lString( valPtr ); + lString.SkipSpace(); + TInt result = lString.Val(iRenderHeight); + // Check if object height was specified as a + // percentage value. + if ( valPtr.Locate( '%' ) != KErrNotFound ) + { + // Do not store the value, browser takes + // care of computing the height + iObjHeightInPercentage = ETrue; + } + if (( result != KErrNone) || ( iRenderHeight < 0 )) + { + iObjectHeight = 0; + } + else + { + iObjectHeight = iRenderHeight; + } + iObjectHeightSpecified = ETrue ; + } + } + + return NPERR_NO_ERROR; + } + + +// --------------------------------------------------------------------------- +// ResizeWindow() This function is to notify that a new set of dimention value +// should be taken into consideration. The new w&h is determined from +// AdjustDimention(). +// +// --------------------------------------------------------------------------- +// +void CSvgtPlugin::ResizeWindow(TInt aWidth, TInt aHeight) + { + NPPVariable variable; + CSvgtPluginEcomMain* lSvgtPluginEcomMain = (CSvgtPluginEcomMain*) Dll::Tls(); + NPNetscapeFuncs* lNetscapeFuncs = lSvgtPluginEcomMain->Funcs(); + NPWindow newWindow; + variable = NPPVpluginWindowSize; + newWindow.x = iCurrentWindow.x; + newWindow.y = iCurrentWindow.y; + newWindow.window = iCurrentWindow.window; + newWindow.clipRect = iCurrentWindow.clipRect; + newWindow.type = iCurrentWindow.type; + newWindow.width = aWidth; + newWindow.height = aHeight; + TInt err = lNetscapeFuncs->setvalue(iInstance, variable, (void*)&newWindow); + } + + +// --------------------------------------------------------------------------- +// AdjustDimention() This function does the logic to check if width & height +// is needed to be adjusted +// --------------------------------------------------------------------------- +// +TBool CSvgtPlugin::AdjustDimention( TBool aWidthInPercentage, TBool aHeightInPercentage) + { + iSvgModule->AddListener( static_cast < MSvgViewPortListener*>(this), ESvgViewPortListener ); + if ( iAdjusted ) + return EFalse; + + // we set the width height in all cases except when width/height has been + // explicitly specified in the browser hence its set here for all cases + iAdjusted = ETrue; + // html provides absolute width, no height + // svg provides absolute width and absolute height + if ( + ( iObjectWidthSpecified && !iObjWidthInPercentage && !iObjectHeightSpecified ) + && ( !aWidthInPercentage && !aHeightInPercentage) + ) + { + // only iObjectWidth is valid + // Adjust missing object value as per aspect ratio of + // svg's viewport + if(iControl->iContentDimension.iWidth) + { + TReal newHeight = (TInt)((TReal32)iObjectWidth * + ( (TReal32)iControl->iContentDimension.iHeight / + (TReal32)iControl->iContentDimension.iWidth)); + + ResizeWindow(iObjectWidth, newHeight); + + } + return ETrue; + } + + // html provides no width and absolute height + // svg provides absolute width and absolute height + else if ( + ( !iObjectWidthSpecified && iObjectHeightSpecified && !iObjHeightInPercentage ) + && ( !aWidthInPercentage && !aHeightInPercentage) + ) + { + // only iObjectHeight is valid + // Adjust missing object value as per aspect ratio of + // svg's viewport + if(iControl->iContentDimension.iHeight) + { + TInt newWidth = (TInt)((TReal32)iObjectHeight * + ( (TReal32)iControl->iContentDimension.iWidth / + (TReal32)iControl->iContentDimension.iHeight)); + ResizeWindow(newWidth, iObjectHeight); + + } + return ETrue; + } + // html provides no width and no height + // svg provides absolute width and absolute height + else if( + (!iObjectWidthSpecified && !iObjectHeightSpecified) + && ( !aWidthInPercentage && !aHeightInPercentage) + ) + { + ResizeWindow(iControl->iContentDimension.iWidth, iControl->iContentDimension.iHeight); + return ETrue; + } + // html provides width and height be it percentages or absolute values + else if(iObjectWidthSpecified && iObjectHeightSpecified) + { + iAdjusted = EFalse; + return EFalse; + } + else + { + TReal newWidth = 0.0f; + TReal newHeight = 0.0f; + CEikonEnv* lEnv = STATIC_CAST( CEikonEnv*, iControl->ControlEnv() ); + + TRect lClientRect = TRect( TPoint( 0,0 ), lEnv->EikAppUi()->ClientRect().Size()); + + // if the browser has specified a valid absolute value width + if ( !iObjWidthInPercentage && iObjectWidthSpecified) + { + newWidth = iObjectWidth; + } + // if the browser has specified a valid percentage value width + else if (iObjWidthInPercentage && iObjectWidthSpecified ) + { + // Compute the new dimension by scaling clientRect dimension + newWidth = lClientRect.Width() * iObjectWidth / 100; + } + // if the browser has specified a valid absolute value height + if ( !iObjHeightInPercentage && iObjectHeightSpecified) + { + newHeight = iObjectHeight; + } + // if the browser has specified a valid percentage value Height + else if(iObjHeightInPercentage && iObjectHeightSpecified) + { + // Compute the new dimension by scaling clientRect dimension + newHeight = lClientRect.Height() * iObjectHeight / 100; + } + + // if the browser has not specified the width + if(!iObjectWidthSpecified) + { + if(aWidthInPercentage) + { + newWidth = lClientRect.Width() * iControl->iContentDimension.iWidth / 100; + } + else + { + newWidth = iControl->iContentDimension.iWidth; + } + } + // if the browser has not specified the height + if(!iObjectHeightSpecified) + { + if(aHeightInPercentage) + { + newHeight = lClientRect.Height() * iControl->iContentDimension.iHeight / 100; + } + else + { + newHeight = iControl->iContentDimension.iHeight; + } + } + ResizeWindow(newWidth, newHeight); + return ETrue; + } + } + +TBool CSvgtPlugin::LoadSvgFile( const TDesC& aFilename ) + { + if ( !iSvgModule ) + { + return EFalse; + } + MSvgError* error = iSvgModule->Load( aFilename ); + if ( !error ) + { + return EFalse; + } + + // Loading error + if ( error->HasError() && !error->IsWarning() ) + { + return EFalse; + } + TInt currentVolume; + if (FeatureManager::FeatureSupported(KFeatureIdSideVolumeKeys)) + { + currentVolume = iKeyListener->GetCurrentVolume(); + } + else + { + currentVolume = iRepositoryListener->GetCurrentVolume(); + } + + VolumeChanged(currentVolume ); + iTotalNumerOfAnimation = -1; + return ETrue; + } + diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVGTPlugin/src/Svgtplugindllapi.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgtopt/SVGTPlugin/src/Svgtplugindllapi.cpp Wed Sep 01 12:20:46 2010 +0100 @@ -0,0 +1,186 @@ +/* +* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: SVGT Plugin Implementation source file + * +*/ + + +/* +************************************************************************************ +* Contents: Example plugin implementation +* Implementation of the API used by Opera to control the plugin +************************************************************************************ +*/ + + +#include "Svgtplugin.h" + +/** + * Create a new instance of a SVG plugin. +**/ + +NPError SvgtPluginNewp(NPMIMEType pluginType, NPP instance, uint16 mode, + CDesCArray* argn, CDesCArray* argv, NPSavedData* saved) + { + CSvgtPlugin* lSvgtPlugin = NULL; + TRAPD(err,lSvgtPlugin = CSvgtPlugin::NewL(instance)); + + if (err == KErrNoMemory) + return NPERR_OUT_OF_MEMORY_ERROR; + if (err != KErrNone) + return NPERR_MODULE_LOAD_FAILED_ERROR; + + instance->pdata = (void *) lSvgtPlugin; + NPError nerr = lSvgtPlugin->SvgPluginNew(pluginType, instance, + mode, argn, argv, saved); + return nerr; + } + +/** + * Destroy a plugin. +**/ +NPError SvgtPluginDestroy(NPP instance, NPSavedData** /*save*/) + { + CSvgtPlugin* lSvgtPlugin = (CSvgtPlugin *)instance->pdata; + if ( lSvgtPlugin ) + { + TRAPD(err,lSvgtPlugin->PrepareToExitL()); + if (err != KErrNone) + { + #ifdef _DEBUG + RDebug::Printf("SvgtPluginDestroy Error when printing Warning."); + #endif //_DEBUG + } + /**Ignoring the error*/ + delete lSvgtPlugin; + lSvgtPlugin = NULL; + } + return NPERR_NO_ERROR; + } + +/** + * This is the parent window of a plugin. + */ +NPError SvgtPluginSetWindow(NPP instance, NPWindow *window) + { + CSvgtPlugin* lSvgtPlugin = (CSvgtPlugin *) instance->pdata; + TUint lWidth = window->width; + TUint lHeight = window->height; + + TRAPD(err,lSvgtPlugin->SetWindowL(window,TRect(TSize(lWidth,lHeight)))); + + if (err == KErrNoMemory) + return NPERR_OUT_OF_MEMORY_ERROR; + if (err != KErrNone) + return NPERR_GENERIC_ERROR; + return NPERR_NO_ERROR; + } + +/** + * A new data stream has been created for sending data to the plugin. + * @param stream - A pointer to plugin specific data can be placed in stream->pdata + * + */ + +NPError SvgtPluginNewStream(NPP /*instance*/, NPMIMEType /*type*/, NPStream* /*stream*/, NPBool /*seekable*/, uint16* stype) + { + *stype = NP_ASFILEONLY; + return NPERR_NO_ERROR; + } + +/** + * A data stream has been terminated. + */ +NPError SvgtPluginDestroyStream(NPP /*instance*/, NPStream* /*stream*/, NPReason /*reason*/) + { + return NPERR_NO_ERROR; + } + +/** + * A data stream has been fully saved to a file. + */ +void SvgtPluginAsFile(NPP instance, NPStream* stream, const TDesC& fname) + { + CSvgtPlugin* lSvgtPlugin = (CSvgtPlugin*)instance->pdata; + + if (lSvgtPlugin && lSvgtPlugin->Control()) + { + lSvgtPlugin->Control()->AsFile(fname, stream ); + } + } + +/** + * Return the maximum number of bytes this plugin can accept from the stream. + */ +int32 SvgtPluginWriteReady(NPP /*instance*/, NPStream* /*stream*/) + { + return 65536; + } + +/** + * Receive more data + * @param buffer - contains the data. + * @param len - the number of bytes in buffer. + * @param offset - the number of bytes already sent/processed. + * @return TInt number of bytes processed. + */ +int32 SvgtPluginWrite(NPP /*instance*/, NPStream* /*stream*/, int32 /*offset*/, int32 len, void* /*buffer*/) + { + return len; + } + +/** + * Event + */ +int16 SvgtPluginEvent(NPP /*instance*/, void* /*event*/) + { + return 0; + } + + +/** + * Generic hook to set values/attributes within the plugin. + */ +NPError SvgtPluginSetValue(NPP /*instance*/, NPNVariable /*variable*/, void* /*ret_value*/) + { + return NPERR_NO_ERROR; + } + +/** + * Generic hook to get values/attributes from the plugin. + */ +NPError SvgtPluginGetValue(NPP instance, NPNVariable variable, void* +*ret_value) + { + CSvgtPlugin* lSvgtPlugin = (CSvgtPlugin *)instance->pdata; + if(lSvgtPlugin) + { + // A response of false when enum passed is NPPVpluginInteractiveBool + // must be interpreted as "Plugin is interactive" + // Since operations such as panning, zooming can be performed + // on all svg contents plugin can be considered always interactive + if(variable==NPPVpluginInteractiveBool) + { + *(TBool*) ret_value=EFalse; + } + } + return NPERR_NO_ERROR; + } +void SvgtPluginURLNotify(NPP /*instance*/, const TDesC& /*url*/, NPReason /*reason*/, void* /*notifyData*/) + { + } + +void SvgtPluginPrint(NPP /*instance*/, NPPrint* /*platformPrint*/) + { + } diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVGTPlugin/src/Svgtpluginmain.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgtopt/SVGTPlugin/src/Svgtpluginmain.cpp Wed Sep 01 12:20:46 2010 +0100 @@ -0,0 +1,105 @@ +/* +* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: SVGT Plugin Implementation source file + * +*/ + + +#include "Svgtplugin.h" + + +#include +#include +/***************************************************/ +/**********ECOM STYLE SVGT PLUGIN ENTRY POINTS******/ +/***************************************************/ +CSvgtPluginEcomMain* CSvgtPluginEcomMain::NewL(TAny* aInitParam) +{ + TFuncs* funcs = REINTERPRET_CAST( TFuncs*, aInitParam); + CSvgtPluginEcomMain* self = new(ELeave)CSvgtPluginEcomMain(funcs->iNetscapeFuncs); + CleanupStack::PushL(self); + self->ConstructL(funcs->iPluginFuncs); + CleanupStack::Pop(); + + Dll :: SetTls ( (void*) self ); + + return self; +} + +void CSvgtPluginEcomMain::ConstructL(NPPluginFuncs* aPluginFuncs) +{ + InitializeFuncs(aPluginFuncs); +} + +CSvgtPluginEcomMain::CSvgtPluginEcomMain(NPNetscapeFuncs* aNpf) : CEcomBrowserPluginInterface(),iNpf(aNpf) +{ +} + +CSvgtPluginEcomMain::~CSvgtPluginEcomMain() +{ + +} +const TImplementationProxy KImplementationTable[] = + { + {{KSvgtPluginImplementationValue}, (TProxyNewLPtr) CSvgtPluginEcomMain::NewL} + }; + +// ----------------------------------------------------------------------------- +// ImplementationGroupProxy +// Returns the filters implemented in this DLL +// Returns: The filters implemented in this DLL +// ----------------------------------------------------------------------------- +// +EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount) +{ + aTableCount = sizeof(KImplementationTable) / sizeof(TImplementationProxy); + return KImplementationTable; +} + + + +/** + * The E32Dll() entry point function. +**/ + + +EXPORT_C NPError InitializeFuncs(NPPluginFuncs* aPpf) +{ + aPpf->size = sizeof(NPPluginFuncs); + aPpf->version = 1; + aPpf->newp = NewNPP_NewProc(SvgtPluginNewp); + aPpf->destroy = NewNPP_DestroyProc(SvgtPluginDestroy); + aPpf->setwindow = NewNPP_SetWindowProc(SvgtPluginSetWindow); + aPpf->newstream = NewNPP_NewStreamProc(SvgtPluginNewStream); + aPpf->destroystream = NewNPP_DestroyStreamProc(SvgtPluginDestroyStream); + aPpf->asfile = NewNPP_StreamAsFileProc(SvgtPluginAsFile); + aPpf->writeready = NewNPP_WriteReadyProc(SvgtPluginWriteReady); + aPpf->write = NewNPP_WriteProc(SvgtPluginWrite); + aPpf->print = NewNPP_PrintProc(SvgtPluginPrint); + aPpf->event = NewNPP_HandleEventProc(SvgtPluginEvent); + aPpf->urlnotify = NewNPP_URLNotifyProc(SvgtPluginURLNotify); + aPpf->javaClass = NULL; + aPpf->getvalue = NewNPP_GetValueProc(SvgtPluginGetValue); + aPpf->setvalue = NewNPP_SetValueProc(SvgtPluginSetValue); + + return NPERR_NO_ERROR; +} + +EXPORT_C void NPP_Shutdown(void) +{ + CSvgtPluginEcomMain* npm = (CSvgtPluginEcomMain*) Dll :: Tls (); + delete npm; + Dll :: SetTls ( NULL ); +} + diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/SVGTPlugin/src/VolumeKeyListener.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgtopt/SVGTPlugin/src/VolumeKeyListener.cpp Wed Sep 01 12:20:46 2010 +0100 @@ -0,0 +1,289 @@ +/* +* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: It completes on a change in the volume property. Used for +* the new Central Repository Server. Used in EKA2 builds only +* +*/ + + +#include +#include +#include + +#include "VolumeKeyListener.h" +#include "MRepositoryVolumeObserver.h" + +// CONSTANTS +const TInt KFirstTimerExpiryInterval = 1; // Expire immediately +const TInt KTimerExpiryInterval = KAknStandardKeyboardRepeatRate; + +const TInt KMinVolume = 0; // Minimum volume level(Mute) +const TInt KMaxVolume = 10; // Maximum volume level + +// ---------------------------------------------------- +// CVolumeKeyListener::NewL +// Description: static constructor. +// Output: none +// Return: CVolumeKeyListener object +// ---------------------------------------------------- +CVolumeKeyListener* CVolumeKeyListener::NewL( MRepositoryVolumeObserver* aObserver ) + { + CVolumeKeyListener* self = new(ELeave) CVolumeKeyListener( + aObserver); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +// ---------------------------------------------------- +// CVolumeKeyListener::CVolumeKeyListener +// Description: constructor. +// Output: none +// Return: none +// ---------------------------------------------------- +CVolumeKeyListener::CVolumeKeyListener( MRepositoryVolumeObserver* aObserver ): + iInterfaceSelector(NULL), + iSelector(NULL), + iCenRepos(NULL), + iObserver(aObserver) + { + } + +// ---------------------------------------------------- +// CVolumeKeyListener::ConstructL +// Description: second phase constructor. +// Input: aObserver: link to the calling object +// Output: none +// Return: none +// ---------------------------------------------------- +void CVolumeKeyListener::ConstructL() + { + // + // Open a connection to receive Volume Key events. + iSelector = CRemConInterfaceSelector::NewL(); + iInterfaceSelector = CRemConCoreApiTarget::NewL(*iSelector,*this); + TRAP_IGNORE(iSelector->OpenTargetL()); + // Timer for implementing repeat + iTimer = CPeriodic::NewL(CActive::EPriorityStandard); + + // + // Open a connection to the Central Repository... + iCenRepos = CRepository::NewL(KCRUidBrowser); + // iObservers=new(ELeave)CArrayFixSeg + // (KVolumeObserversArrayGranularity); + } + +// ---------------------------------------------------- +// CVolumeKeyListener::~CVolumeKeyListener +// Description: destructor. +// Input: none +// Output: none +// ---------------------------------------------------- +CVolumeKeyListener::~CVolumeKeyListener() + { + if(iSelector) + { + delete iSelector; + iInterfaceSelector=NULL; + iSelector=NULL; //iSelector has been deleted by "delete iInterfaceSelector" + } + + if(iTimer) + { + iTimer->Cancel(); + delete iTimer; + } + + if(iCenRepos) + { + delete iCenRepos; + } + } + +// ---------------------------------------------------- +// CVolumeKeyListener::SetObserver +// Description: Used to set an observer +// Input: aObserver: Point to observer +// Output: none +// Return: none +// ---------------------------------------------------- +void CVolumeKeyListener::SetObserver( MRepositoryVolumeObserver* aObserver) + { + iObserver = aObserver; + } + +// ---------------------------------------------------- +// CVolumeKeyListener::GetCurrentVolume +// Description: gets the current volume level from the +// central directory. +// Input: none +// Output: none +// Return: volume level +// ---------------------------------------------------- +TInt CVolumeKeyListener::GetCurrentVolume() + { + TInt currentVolume = 0; + // + // Get the current volume + if(iCenRepos) + iCenRepos->Get(KBrowserMediaVolumeControl, currentVolume); + +/* + #if defined(__WINSCW__) //offset required on the emulator + currentVolume += WINS_DEFAULT_VOLUME; + #endif +*/ + return currentVolume; + } + +// ---------------------------------------------------- +// CVolumeKeyListener::MrccatoCommand +// Description: A Volume key command has been received +// (from MRemConCoreApiTargetObserver) +// Input:aOperationId The operation ID of the command +// aButtonAct The button action associated with the command. +// Output: none +// Return: none +// ---------------------------------------------------- +void CVolumeKeyListener::MrccatoCommand(TRemConCoreApiOperationId aOperationId, + TRemConCoreApiButtonAction aButtonAct ) + { + + switch(aOperationId) + { + case ERemConCoreApiVolumeUp: + { + switch (aButtonAct) + { + case ERemConCoreApiButtonPress: + { + //Start Timer + if (!iTimer->IsActive()) + { + iCommandId = EVolumeControlCmdVolumeUpByOne; + iTimer->Start(KFirstTimerExpiryInterval, + KTimerExpiryInterval, + TCallBack(TimerCallback, this)); + } + break; + } + case ERemConCoreApiButtonRelease: + { + iTimer->Cancel(); + break; + } + case ERemConCoreApiButtonClick: + { + FilterAndSendCommand(EVolumeControlCmdVolumeUpByOne); + break; + } + default: + { + break; + } + } + break; + } + case ERemConCoreApiVolumeDown: + { + switch (aButtonAct) + { + case ERemConCoreApiButtonPress: + { + //Start Timer + iCommandId = EVolumeControlCmdVolumeDownByOne; + if (!iTimer->IsActive()) + { + iTimer->Start(KFirstTimerExpiryInterval, + KTimerExpiryInterval, + TCallBack(TimerCallback, this)); + } + break; + } + case ERemConCoreApiButtonRelease: + { + iTimer->Cancel(); + break; + } + case ERemConCoreApiButtonClick: + { + FilterAndSendCommand(EVolumeControlCmdVolumeDownByOne); + break; + } + default: + { + break; + } + } + break; + } + default: + { + break; + } + } + } + +// ----------------------------------------------------------------------- +// CVolumeKeyListener::HandleRepeatEvent +// ----------------------------------------------------------------------- +// +void CVolumeKeyListener::HandleRepeatEvent() + { + FilterAndSendCommand(iCommandId); + } + +// ----------------------------------------------------------------------- +// CVolumeKeyListener::TimerCallback +// ----------------------------------------------------------------------- +// +TInt CVolumeKeyListener::TimerCallback(TAny* aPtr) + { + static_cast(aPtr)->HandleRepeatEvent(); + return KErrNone; + } + +// ----------------------------------------------------------------------- +// CVolumeKeyListener::FilterAndSendCommand +// ----------------------------------------------------------------------- +// +void CVolumeKeyListener::FilterAndSendCommand(TInt aCommandId) + { + TInt currentVolume = 0; + + iCenRepos->Get(KBrowserMediaVolumeControl,currentVolume); + switch(aCommandId) + { + case EVolumeControlCmdVolumeUpByOne: + currentVolume=(currentVolume< KMaxVolume)? ++currentVolume : KMaxVolume; + break; + case EVolumeControlCmdVolumeDownByOne: + currentVolume=(currentVolume> KMinVolume)? --currentVolume : KMinVolume; + break; + default: + break; + } + + iCenRepos->Set(KBrowserMediaVolumeControl,currentVolume); + +#if defined(__WINS__) //offset required on the emulator + currentVolume += WINS_DEFAULT_VOLUME; +#endif + + if(iObserver) + iObserver->VolumeChanged(currentVolume); + } + +// End of File diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/VGRenderer/PseudoVG/inc/PseodoVGRendererImpl.h --- a/svgtopt/VGRenderer/PseudoVG/inc/PseodoVGRendererImpl.h Tue Aug 31 16:06:58 2010 +0300 +++ b/svgtopt/VGRenderer/PseudoVG/inc/PseodoVGRendererImpl.h Wed Sep 01 12:20:46 2010 +0100 @@ -169,7 +169,7 @@ static const TUint ENCODEDDATAGRANULARITY; TInt iCommonHeaderLength; const TUint8* iCommonHeader; - + VGErrorCode iVgErrorCode; //Command specific logging methods #ifdef VGRENDERER_LOG RFileLogger iLog;//logs diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/VGRenderer/PseudoVG/src/PseodoVGRendererImpl.cpp --- a/svgtopt/VGRenderer/PseudoVG/src/PseodoVGRendererImpl.cpp Tue Aug 31 16:06:58 2010 +0300 +++ b/svgtopt/VGRenderer/PseudoVG/src/PseodoVGRendererImpl.cpp Wed Sep 01 12:20:46 2010 +0100 @@ -39,6 +39,7 @@ iHandle = 1; iCommonHeaderLength = 0; iCommonHeader = 0; + iVgErrorCode = VG_NO_ERROR; } CPseodoVGRendererImpl::~CPseodoVGRendererImpl() @@ -232,6 +233,9 @@ TUint CPseodoVGRendererImpl::vgCreatePaint() { + if(iVgErrorCode != VG_NO_ERROR) + return VG_INVALID_HANDLE; + iHandle++; EncodeInt8(EvgCreatePaint); EncodeInt32(iHandle); @@ -244,6 +248,10 @@ TUint CPseodoVGRendererImpl::vgCreatePath(TInt pathFormat, TInt datatype, TReal32 scale, TReal32 bias, TInt segmentCapacityHint, TInt coordCapacityHint, TInt capabilities) { + if(iVgErrorCode != VG_NO_ERROR) + return VG_INVALID_HANDLE; + + iHandle++; EncodeInt8(EvgCreatePath); EncodeInt32(pathFormat); @@ -383,7 +391,7 @@ EncodeInt16(capabilities); #ifdef VGRENDERER_LOG - LogvgDrawPath(paintModes,0); + LogvgDrawPath(path,0); #endif } @@ -460,6 +468,9 @@ TUint CPseodoVGRendererImpl::vgCreateImage(TInt format, TInt width, TInt height, TInt allowedQuality) { + if(iVgErrorCode != VG_NO_ERROR) + return VG_INVALID_HANDLE; + iHandle++; EncodeInt8(EvgCreateImage); EncodeInt32(format); @@ -467,6 +478,9 @@ EncodeInt32(height); EncodeInt8(allowedQuality); EncodeInt32(iHandle); +#ifdef VGRENDERER_LOG + iLog.WriteFormat(_L("vgcreateimage")); +#endif return iHandle; } @@ -479,6 +493,9 @@ { EncodeInt8(EvgDrawImage); EncodeInt32(image); +#ifdef VGRENDERER_LOG + iLog.WriteFormat(_L("vgdrawimage")); +#endif } void CPseodoVGRendererImpl::vgClearImage(TUint image, TInt x, TInt y, TInt width, TInt height) @@ -489,6 +506,9 @@ EncodeInt32(y); EncodeInt32(width); EncodeInt32(height); +#ifdef VGRENDERER_LOG + iLog.WriteFormat(_L("vgclearimage")); +#endif } void CPseodoVGRendererImpl::vgImageSubData(TUint image, const void * data, TInt dataStride, @@ -623,6 +643,9 @@ EncodeData(dstData, dataLength); delete [] dstData; +#ifdef VGRENDERER_LOG + iLog.WriteFormat(_L("vgimagesubdata")); +#endif } else { @@ -648,6 +671,9 @@ { EncodeInt8(EvgDestroyImage); EncodeInt32(aHandle); +#ifdef VGRENDERER_LOG + iLog.WriteFormat(_L("vgdestroyimage")); +#endif } void CPseodoVGRendererImpl::vgDestroyPaint(TUint /*aHandle*/) @@ -667,8 +693,7 @@ TInt CPseodoVGRendererImpl::vgGetError() { - //TODO - return 0; + return iVgErrorCode; } MVGSurfaceImpl* CPseodoVGRendererImpl::CreateVGSurfaceL(TInt /*aOption*/) @@ -708,10 +733,13 @@ TInt CPseodoVGRendererImpl::EncodeData(const TAny *aData, TUint aLength) { - TInt result = KErrNone; - TPtr8 lPtr( iEncodedData->Des() ); - TInt encodedDataLength = lPtr.Length() + aLength; - TInt encodedDataMaxLength = lPtr.MaxLength(); + + if(iVgErrorCode==VG_NO_ERROR) + { + TInt result = KErrNone; + TPtr8 lPtr( iEncodedData->Des() ); + TInt encodedDataLength = lPtr.Length() + aLength; + TInt encodedDataMaxLength = lPtr.MaxLength(); if (encodedDataLength >= encodedDataMaxLength) { @@ -726,7 +754,12 @@ lPtr.Append((TUint8*)(aData), aLength); } - return result; + return result; + } + else + { + return iVgErrorCode; + } } TInt CPseodoVGRendererImpl::ExpandEncodedData(TUint aNewLength) @@ -740,6 +773,7 @@ if (tmpBuf == 0) { result = KErrNoMemory; + iVgErrorCode = VG_OUT_OF_MEMORY_ERROR; } else @@ -757,6 +791,17 @@ void CPseodoVGRendererImpl::EmptyEncodedData() { + iVgErrorCode = VG_NO_ERROR; + if(iEncodedData->Length() > CPseodoVGRendererImpl::ENCODEDDATALENGTH) + { + delete iEncodedData; + iEncodedData = HBufC8::New(CPseodoVGRendererImpl::ENCODEDDATALENGTH); + if(!iEncodedData) + { + iVgErrorCode = VG_OUT_OF_MEMORY_ERROR; + return; + } + } TPtr8 lPtr( iEncodedData->Des() ); lPtr.Zero(); WriteHeader(); diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/VGRenderer/PseudoVG/src/PseudoVGSurfaceImpl.cpp --- a/svgtopt/VGRenderer/PseudoVG/src/PseudoVGSurfaceImpl.cpp Tue Aug 31 16:06:58 2010 +0300 +++ b/svgtopt/VGRenderer/PseudoVG/src/PseudoVGSurfaceImpl.cpp Wed Sep 01 12:20:46 2010 +0100 @@ -50,8 +50,8 @@ TInt CPseudoVGSurfaceImpl::InitializeSurface(TSize aSize, TInt /*aColorSpace*/) { iSize = aSize; - iPseodoVGRendererImpl->EmptyEncodedData(); - return KErrNone; + return iPseodoVGRendererImpl->vgGetError(); + } void CPseudoVGSurfaceImpl::SetConfiguration(TInt aOption, const TAny* aValue) @@ -69,8 +69,9 @@ TInt CPseudoVGSurfaceImpl::ResizeSurface(TSize aSize) { - iSize = aSize; - return KErrNone; + iSize = aSize; + iPseodoVGRendererImpl->EmptyEncodedData(); + return iPseodoVGRendererImpl->vgGetError(); } TInt CPseudoVGSurfaceImpl::CopyBitmap(TInt aDisplayMode, TInt aMaskMode,CFbsBitmap *aBitmap, CFbsBitmap *aMask, TSize /*aSize*/) diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/VGRenderer/SWVG/eabi/SWVG.def --- a/svgtopt/VGRenderer/SWVG/eabi/SWVG.def Tue Aug 31 16:06:58 2010 +0300 +++ b/svgtopt/VGRenderer/SWVG/eabi/SWVG.def Wed Sep 01 12:20:46 2010 +0100 @@ -6,6 +6,4 @@ _ZTV15COpenVGRenderer @ 5 NONAME ; ## _ZTV16CSWVGSurfaceImpl @ 6 NONAME ; ## _ZTV21CSWOpenVGRendererImpl @ 7 NONAME ; ## - _ZTI22CSWVGTargetSurfaceImpl @ 8 NONAME - _ZTV22CSWVGTargetSurfaceImpl @ 9 NONAME diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/VGRenderer/SWVG/group/SWVG.mmp --- a/svgtopt/VGRenderer/SWVG/group/SWVG.mmp Tue Aug 31 16:06:58 2010 +0300 +++ b/svgtopt/VGRenderer/SWVG/group/SWVG.mmp Wed Sep 01 12:20:46 2010 +0100 @@ -32,7 +32,7 @@ SOURCE SWVGSurfaceImpl.cpp SOURCEPATH ../../OpenVGRenderer/src -SOURCE ../../SWVG/src/swopenvgtargetsurfaceimpl.cpp OpenVGRenderer.cpp +SOURCE OpenVGRenderer.cpp //By default, the build tools look for the WINSCW def file in a BWINS directory diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/VGRenderer/SWVG/inc/swopenvgtargetsurfaceimpl.h --- a/svgtopt/VGRenderer/SWVG/inc/swopenvgtargetsurfaceimpl.h Tue Aug 31 16:06:58 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,64 +0,0 @@ -/* - * Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies). - * All rights reserved. - * This component and the accompanying materials are made available - * under the terms of "Eclipse Public License v1.0" - * which accompanies this distribution, and is available - * at the URL "http://www.eclipse.org/legal/epl-v10.html". - * - * Initial Contributors: - * Nokia Corporation - initial contribution. - * - * Contributors: - * - * Description: CSWVGTargetSurfaceImpl header file - * -*/ - -#ifndef SWOPENVGTARGETSURFACEIMPL_H_ -#define SWOPENVGTARGETSURFACEIMPL_H_ - -#include "SWVG.h" -#include "MVGSurfaceImpl.h" - -#include - -class CSvgtBitmap; - -class CSWVGTargetSurfaceImpl : public CBase, public MVGSurfaceImpl -{ -public: - static CSWVGTargetSurfaceImpl* NewL(); - static CSWVGTargetSurfaceImpl* NewLC(); - - virtual ~CSWVGTargetSurfaceImpl(); - - virtual TInt InitializeSurface(TSize aSize, TInt aColorSpace); - - virtual TInt CreateSurface(TInt /*aDisplayMode*/, RWindow */*aSurface*/, CFbsBitmap */*aBitmap*/); - virtual TInt CreateSurface(TInt aDisplayMode, RWindow *aSurface, CSvgtBitmap *aBitmap); - - virtual TInt ResizeSurface(TSize aSize); - - virtual void SetConfiguration(TInt aOption, const TAny* aValue); - - virtual TInt CopyBitmap(TInt /*aDisplayMode*/, TInt /*aMaskMode*/, CFbsBitmap */*aBitmap*/, CFbsBitmap */*aMask*/, TSize /*aSize*/ = TSize(0,0)); - virtual TInt CopyBitmap(TInt aDisplayMode,TInt aMaskMode,CSvgtBitmap *aBitmap, CSvgtBitmap *aMask, TSize aSize = TSize(0,0)); - - virtual TInt PrepareToBindClientBuffer(); - virtual TInt BindClientBuffer(TInt buffer); - - virtual TInt UnBindClientBuffer(); - - virtual void TerminateSurface(); - - TInt MapSymbianDisplayModeToOpenVG( TDisplayMode aMode) const; - TInt MapOpenVGErrorToSymbianError( TInt aError ) const; - -private: - CSWVGTargetSurfaceImpl(); - void ConstructL(); - TSize iSize; -}; - -#endif /* SWOPENVGTARGETSURFACEIMPL_H_ */ diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/VGRenderer/SWVG/src/SWOpenVGRendererImpl.cpp --- a/svgtopt/VGRenderer/SWVG/src/SWOpenVGRendererImpl.cpp Tue Aug 31 16:06:58 2010 +0300 +++ b/svgtopt/VGRenderer/SWVG/src/SWOpenVGRendererImpl.cpp Wed Sep 01 12:20:46 2010 +0100 @@ -17,7 +17,6 @@ #include "SWOpenVGRendererImpl.h" #include "SWVGSurfaceImpl.h" -#include "swopenvgtargetsurfaceimpl.h" #include @@ -78,10 +77,7 @@ { } -MVGSurfaceImpl* CSWOpenVGRendererImpl::CreateVGSurfaceL(TInt aOption) +MVGSurfaceImpl* CSWOpenVGRendererImpl::CreateVGSurfaceL(TInt /*aOption*/) { - if(aOption) - return CSWVGSurfaceImpl::NewL(); - else - return CSWVGTargetSurfaceImpl::NewL(); //M2G: Enable rendering on target buffer. + return CSWVGSurfaceImpl::NewL(); } diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/VGRenderer/SWVG/src/swopenvgtargetsurfaceimpl.cpp --- a/svgtopt/VGRenderer/SWVG/src/swopenvgtargetsurfaceimpl.cpp Tue Aug 31 16:06:58 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,226 +0,0 @@ -/* - * Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies). - * All rights reserved. - * This component and the accompanying materials are made available - * under the terms of "Eclipse Public License v1.0" - * which accompanies this distribution, and is available - * at the URL "http://www.eclipse.org/legal/epl-v10.html". - * - * Initial Contributors: - * Nokia Corporation - initial contribution. - * - * Contributors: - * - * Description: CSWVGTargetSurfaceImpl source file - * -*/ - -#include "swopenvgtargetSurfaceImpl.h" - -#include - -#include - -CSWVGTargetSurfaceImpl::CSWVGTargetSurfaceImpl() - { - } - -CSWVGTargetSurfaceImpl::~CSWVGTargetSurfaceImpl() - { - } - -CSWVGTargetSurfaceImpl* CSWVGTargetSurfaceImpl::NewL() - { - CSWVGTargetSurfaceImpl* self = CSWVGTargetSurfaceImpl::NewLC(); - CleanupStack::Pop(); - return self; - } - -CSWVGTargetSurfaceImpl* CSWVGTargetSurfaceImpl::NewLC() - { - CSWVGTargetSurfaceImpl* self = new (ELeave) CSWVGTargetSurfaceImpl(); - CleanupStack::PushL(self); - self->ConstructL(); - return self; - } - -inline void CSWVGTargetSurfaceImpl::ConstructL() - { - } - -TInt CSWVGTargetSurfaceImpl::InitializeSurface(TSize aSize, TInt aColorSpace) - { - iSize = aSize; - TInt vgError = ::VGIInitialize(aSize.iWidth,aSize.iHeight, (VGIColorSpace)aColorSpace); - return MapOpenVGErrorToSymbianError(vgError); - } - -void CSWVGTargetSurfaceImpl::SetConfiguration(TInt /*aOption*/, const TAny* /*aValue*/) - { - } - -TInt CSWVGTargetSurfaceImpl::CreateSurface(TInt /*aDisplayMode*/, RWindow */*aSurface*/, CFbsBitmap */*aBitmap*/) - { - return KErrNotSupported; - } - -TInt CSWVGTargetSurfaceImpl::CreateSurface(TInt /*aDisplayMode*/, RWindow */*aSurface*/, CSvgtBitmap */*aBitmap*/) - { - return KErrNone; - } - -TInt CSWVGTargetSurfaceImpl::ResizeSurface(TSize aSize) - { - iSize = aSize; - TInt vgError = ::VGIResize(aSize.iWidth,aSize.iHeight); - return MapOpenVGErrorToSymbianError(vgError); - } - -TInt CSWVGTargetSurfaceImpl::CopyBitmap(TInt /*aDisplayMode*/, TInt /*aMaskMode*/, CFbsBitmap */*aBitmap*/, CFbsBitmap */*aMask*/, TSize /*aSize*/) - { - return KErrNotSupported; - } -TInt CSWVGTargetSurfaceImpl::CopyBitmap(TInt /*aDisplayMode*/,TInt /*aMaskMode*/,CSvgtBitmap *aBitmap, CSvgtBitmap *aMask, TSize /*aSize*/) - { - VGIColorBufferFormat format = - (VGIColorBufferFormat)MapSymbianDisplayModeToOpenVG( (TDisplayMode)aBitmap->DisplayMode() ); - - TInt vgError = KErrNone; - if(aMask) - { - vgError = ::VGICopyToTarget(format, - aBitmap->Stride(), aBitmap->BitmapBuffer(), - aMask->Stride(), aMask->BitmapBuffer(), - VGI_SKIP_TRANSPARENT_PIXELS); - } - else - { - vgError = ::VGICopyToTarget(format, - aBitmap->Stride(), aBitmap->BitmapBuffer(), - 0, NULL, - VGI_COPY_TRANSPARENT_PIXELS); - } - - return MapOpenVGErrorToSymbianError(vgError); - } - -TInt CSWVGTargetSurfaceImpl::PrepareToBindClientBuffer() - { - return KErrNone; - } - -TInt CSWVGTargetSurfaceImpl::BindClientBuffer(TInt buffer) - { - return MapOpenVGErrorToSymbianError(::VGIBindToImage(buffer)); - } - -TInt CSWVGTargetSurfaceImpl::UnBindClientBuffer() - { - return MapOpenVGErrorToSymbianError(::VGIUnBindImage()); - } - -void CSWVGTargetSurfaceImpl::TerminateSurface() - { - ::VGITerminate(); - } - -TInt CSWVGTargetSurfaceImpl::MapSymbianDisplayModeToOpenVG( TDisplayMode aMode) const - { - VGIColorBufferFormat format; - switch( aMode ) - { - case EColor16MA: - format = VGI_COLOR_BUFFER_FORMAT_ARGB8888; - break; - - case EColor16MU: - format = VGI_COLOR_BUFFER_FORMAT_XRGB8888; - break; - - case EColor16MAP: - format = VGI_COLOR_BUFFER_FORMAT_ARGB8888_PRE; - break; - - case EColor16M: - format = VGI_COLOR_BUFFER_FORMAT_RGB888; - break; - - case EColor64K: - format = VGI_COLOR_BUFFER_FORMAT_RGB565; - break; - - case EColor4K: - format = VGI_COLOR_BUFFER_FORMAT_XRGB4444; - break; - - default: - return KErrNotSupported; - } - return format; - } - -TInt CSWVGTargetSurfaceImpl::MapOpenVGErrorToSymbianError( TInt aError ) const - { - TInt error = KErrNone; - switch (aError) - { - case VGI_OK: - { - error = KErrNone; - break; - } - case VG_OUT_OF_MEMORY_ERROR: - case VGI_ERROR_OUT_OF_MEMORY: - { - error = KErrNoMemory; - break; - } - case VG_ILLEGAL_ARGUMENT_ERROR: - case VGI_ERROR_INVALID_ARGUMENTS: - { - error = KErrArgument; - break; - } - case VGI_ERROR_ALREADY_EXISTS: - { - error = KErrAlreadyExists; - break; - } - case VG_UNSUPPORTED_PATH_FORMAT_ERROR: - case VGI_ERROR_COLORSPACE_NOT_SUPPORTED: - case VG_UNSUPPORTED_IMAGE_FORMAT_ERROR: - case VGI_ERROR_NOT_SUPPORTED: - { - error = KErrNotSupported; - break; - } - case VGI_ERROR_ILLEGAL_IMAGE_HANDLE: - { - error = KErrBadHandle; - break; - } - case VG_IMAGE_IN_USE_ERROR: - case VGI_ERROR_IMAGE_IN_USE: - { - error = KErrInUse; - break; - } - case VGI_ERROR_ILLEGAL_OPERATION: - { - error = KErrPermissionDenied; - break; - } - case VG_BAD_HANDLE_ERROR: - case VG_PATH_CAPABILITY_ERROR: - { - error = KErrUnknown; - break; - } - default: - { - error = KErrUnknown; - } - } - - return error; - } diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/VGRenderer/inc/MVGSurfaceImpl.h --- a/svgtopt/VGRenderer/inc/MVGSurfaceImpl.h Tue Aug 31 16:06:58 2010 +0300 +++ b/svgtopt/VGRenderer/inc/MVGSurfaceImpl.h Wed Sep 01 12:20:46 2010 +0100 @@ -23,7 +23,6 @@ class RWindow; class CFbsBitmap; -class CSvgtBitmap; class MVGSurfaceImpl { @@ -40,14 +39,12 @@ virtual TInt InitializeSurface(TSize aSize, TInt aColorSpace) = 0; virtual TInt CreateSurface(TInt aDisplayMode, RWindow *aSurface, CFbsBitmap *aBitmap) = 0; - virtual TInt CreateSurface(TInt /*aDisplayMode*/, RWindow */*aSurface*/, CSvgtBitmap */*aBitmap*/){ return KErrNotSupported; } virtual TInt ResizeSurface(TSize aSize) = 0; virtual void SetConfiguration(TInt aOption, const TAny* aValue) = 0; virtual TInt CopyBitmap(TInt aDisplayMode, TInt aMaskMode, CFbsBitmap *aBitmap, CFbsBitmap *aMask, TSize aSize = TSize(0,0)) = 0; - virtual TInt CopyBitmap(TInt /*aDisplayMode*/, TInt /*aMaskMode*/, CSvgtBitmap* /*aBitmap*/, CSvgtBitmap */*aMask*/, TSize /*aSize*/ = TSize(0,0)) { return KErrNotSupported; } virtual TInt BindClientBuffer(TInt aBuffer) = 0; diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/VGRenderer/inc/VGSurface.h --- a/svgtopt/VGRenderer/inc/VGSurface.h Tue Aug 31 16:06:58 2010 +0300 +++ b/svgtopt/VGRenderer/inc/VGSurface.h Wed Sep 01 12:20:46 2010 +0100 @@ -27,8 +27,6 @@ class CFbsBitmap; class CVGRenderer; -class CSvgtBitmap; - /** * CVGSurface * @@ -123,11 +121,6 @@ return iImpl->CopyBitmap(aDisplayMode,aMaskMode, aBitmap, aMask, aSize); } - TInt CopyBitmap(TInt aDisplayMode,TInt aMaskMode,CSvgtBitmap *aBitmap, CSvgtBitmap *aMask, TSize aSize) - { - return iImpl->CopyBitmap(aDisplayMode,aMaskMode, aBitmap, aMask, aSize); - } - /** * @fn PrepareToBindClientBuffer * Prepares the renderer to bind to an image. diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/gfx2d/inc/Gfx2dGcInterface.h --- a/svgtopt/gfx2d/inc/Gfx2dGcInterface.h Tue Aug 31 16:06:58 2010 +0300 +++ b/svgtopt/gfx2d/inc/Gfx2dGcInterface.h Wed Sep 01 12:20:46 2010 +0100 @@ -34,7 +34,6 @@ #include "SvgBitmapFontProvider.h" class MGfxShape; class MGfxPaint; -class CSvgtBitmap; typedef enum { @@ -348,10 +347,6 @@ */ virtual void UpdateFramebufferL( CFbsBitmap* aFrameBuffer, CFbsBitmap* aMask ) = 0; virtual void UpdateFramebufferL( CFbsBitmap* aFrameBuffer, CFbsBitmap* aMask,TSize aFrameBufferSize,TDisplayMode aFrameBufferMode,TDisplayMode aMaskDspMode ) =0; - - - virtual void UpdateFramebufferL( CSvgtBitmap* /*aFrameBuffer*/, CSvgtBitmap* /*aMask*/ ){} - virtual void UpdateFramebufferL( CSvgtBitmap* /*aFrameBuffer*/, CSvgtBitmap* /*aMask*/,TSize /*aFrameBufferSize*/,TDisplayMode /*aFrameBufferMode*/,TDisplayMode /*aMaskDspMode*/ ){} /** * Blend aFrameBuffer with background buffer using the opacity value * @@ -370,7 +365,6 @@ * @return */ virtual void GenerateMask(CFbsBitmap* aMask)=0; - virtual void GenerateMask(CSvgtBitmap* /*aMask*/){}; /** * Set the fill opacity value diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/gfx2d/inc/Gfx2dGcOpenVG.h --- a/svgtopt/gfx2d/inc/Gfx2dGcOpenVG.h Tue Aug 31 16:06:58 2010 +0300 +++ b/svgtopt/gfx2d/inc/Gfx2dGcOpenVG.h Wed Sep 01 12:20:46 2010 +0100 @@ -26,8 +26,6 @@ #include "VGSurface.h" #include -class CSvgtBitmap; - const TUint8 KMediaAnimationVisible = 2; /** @@ -49,7 +47,7 @@ */ static CGfx2dGcOpenVG* NewL( const TSize aBufferSize, TFontSpec& aFontSpec, CSvgBitmapFontProvider* aSvgBitmapFontProvider, TBool aIsMain = ETrue ); - static CGfx2dGcOpenVG* NewL( const TSize aBufferSize, TFontSpec& aFontSpec, CSvgBitmapFontProvider* aSvgBitmapFontProvider,SVGRendererId aRendererType,TBool aRenderOption = ETrue ); + static CGfx2dGcOpenVG* NewL( const TSize aBufferSize, TFontSpec& aFontSpec, CSvgBitmapFontProvider* aSvgBitmapFontProvider,SVGRendererId aRendererType,TBool aIsMain = ETrue ); void GetFontScaled( TFloatFixPt aHeight, const TDesC& aTypefaceName, CFont*& aFont, TFontSpec& aFontSpec ); /** @@ -354,10 +352,7 @@ void UpdateFramebufferL( CFbsBitmap* aBitmap, CFbsBitmap* aMask ); void UpdateFramebufferL( CFbsBitmap* aBitmap, CFbsBitmap* aMask,TSize BitmapSize,TDisplayMode aBitmapDspMode,TDisplayMode aMaskDspMode ); - - void UpdateFramebufferL( CSvgtBitmap* aBitmap, CSvgtBitmap* aMask ); - void UpdateFramebufferL( CSvgtBitmap* aBitmap, CSvgtBitmap* aMask,TSize BitmapSize,TDisplayMode aBitmapDspMode,TDisplayMode aMaskDspMode ); - /** + /** * Blend aFrameBuffer with background buffer using the opacity value * * @since 1.0 @@ -375,8 +370,7 @@ * @return */ void GenerateMask(CFbsBitmap* aMask); - void GenerateMask(CSvgtBitmap* aMask); - + /** * Set the fill opacity value * @@ -516,12 +510,6 @@ // Color conversion/copy to Symbian bitmap is needed as final step TSize iColorBufferSize; - TDisplayMode iDisplayMode; - - // M2G: Variable to specify the target rendering option (rendering onto bitmap or onto target) - TBool iRenderOption; - TBool iGraphicsContextCreated; - TGfxRectangle2D iClip; MGfxPaint* iFillColor; TFloatFixPt iFillOpacity; @@ -547,6 +535,10 @@ TFontSpec iFontSpec; //OpenVG stuff + TDisplayMode iDisplayMode; + TBool iGraphicsContextCreated; + TBool iIsMainContext; + VGPaint iFillPaint; VGPaint iStrokePaint; VGPath iPath; diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/gfx2d/src/GfxGc/Gfx2dGcOpenVG.cpp --- a/svgtopt/gfx2d/src/GfxGc/Gfx2dGcOpenVG.cpp Tue Aug 31 16:06:58 2010 +0300 +++ b/svgtopt/gfx2d/src/GfxGc/Gfx2dGcOpenVG.cpp Wed Sep 01 12:20:46 2010 +0100 @@ -48,7 +48,6 @@ // OpenVG API Binding Symbian specific #include -#include // For allocating path segment type array // Found 130 to be max size at bootup const TInt KPathSegmentTypeInitialSize = 130; @@ -62,21 +61,20 @@ // -------------------------------------------------------------------------- // CGfx2dGcOpenVG::CGfx2dGcOpenVG() : iScale( 1 ), // --------------------------------------------------------------------------- -CGfx2dGcOpenVG::CGfx2dGcOpenVG( TBool aRenderOption ) : - iRenderOption(aRenderOption), - iGraphicsContextCreated( EFalse ), +CGfx2dGcOpenVG::CGfx2dGcOpenVG( TBool /* aIsMainContext */ ) : iFillOpacity( 1 ), iScale( 1 ), iStrokeColor( 0 ), iStrokeOpacity( 1 ), iBackgroundColor( 0xffffff ), - iFontSize( 10 ), - iFontWeight( -1 ), - iFontStyle( -1 ), - iFamilies( NULL ), - iTextAnchor( EGfxTextAnchorNone ), - iTextDecoration( EGfxTextDecorationNone ), - iRenderQuality(VG_RENDERING_QUALITY_BETTER), + iFontSize( 10 ), + iFontWeight( -1 ), + iFontStyle( -1 ), + iFamilies( NULL ), + iTextAnchor( EGfxTextAnchorNone ), + iTextDecoration( EGfxTextDecorationNone ), + iGraphicsContextCreated( EFalse ), + iRenderQuality(VG_RENDERING_QUALITY_BETTER), iCurrentRendererType(ESVGRendererSW) { @@ -88,9 +86,9 @@ // -------------------------------------------------------------------------- // CGfx2dGcOpenVG* CGfx2dGcOpenVG::NewL( CFbsBitmap* aFrameBuffer, TFontSpec& aFontSpec ) // --------------------------------------------------------------------------- - CGfx2dGcOpenVG* CGfx2dGcOpenVG::NewL( const TSize aBufferSize, TFontSpec& aFontSpec, CSvgBitmapFontProvider* aSvgBitmapFontProvider, TBool aRenderOption ) + CGfx2dGcOpenVG* CGfx2dGcOpenVG::NewL( const TSize aBufferSize, TFontSpec& aFontSpec, CSvgBitmapFontProvider* aSvgBitmapFontProvider, TBool aIsMainContext ) { - CGfx2dGcOpenVG* self = new( ELeave ) CGfx2dGcOpenVG( aRenderOption ); + CGfx2dGcOpenVG* self = new( ELeave ) CGfx2dGcOpenVG( aIsMainContext ); CleanupStack::PushL( self ); self->ConstructL( aBufferSize, aFontSpec, aSvgBitmapFontProvider); CleanupStack::Pop(); @@ -125,7 +123,7 @@ iDashArray = new ( ELeave ) CArrayFixFlat( 32 ); - iVgRenderer = CVGRenderer::NewL(ESVGRendererSW, iRenderOption); + iVgRenderer = CVGRenderer::NewL(ESVGRendererSW, 0); iVgSurface = iVgRenderer->GetCurrentSurface(); ChangeBufferSizeL( aBufferSize ); } @@ -133,9 +131,9 @@ // -------------------------------------------------------------------------- // CGfx2dGcOpenVG* CGfx2dGcOpenVG::NewL( CFbsBitmap* aFrameBuffer, TFontSpec& aFontSpec ) // --------------------------------------------------------------------------- - CGfx2dGcOpenVG* CGfx2dGcOpenVG::NewL( const TSize aBufferSize, TFontSpec& aFontSpec, CSvgBitmapFontProvider* aSvgBitmapFontProvider,SVGRendererId aRendererType,TBool aRenderOption ) + CGfx2dGcOpenVG* CGfx2dGcOpenVG::NewL( const TSize aBufferSize, TFontSpec& aFontSpec, CSvgBitmapFontProvider* aSvgBitmapFontProvider,SVGRendererId aRendererType,TBool aIsMainContext ) { - CGfx2dGcOpenVG* self = new( ELeave ) CGfx2dGcOpenVG( aRenderOption ); + CGfx2dGcOpenVG* self = new( ELeave ) CGfx2dGcOpenVG( aIsMainContext ); CleanupStack::PushL( self ); self->ConstructL( aBufferSize, aFontSpec, aSvgBitmapFontProvider,aRendererType); CleanupStack::Pop(); @@ -163,7 +161,7 @@ iDashArray = new ( ELeave ) CArrayFixFlat( 32 ); iCurrentRendererType = aRendererType; - iVgRenderer = CVGRenderer::NewL(aRendererType, iRenderOption); + iVgRenderer = CVGRenderer::NewL(aRendererType, 0); iVgSurface = iVgRenderer->GetCurrentSurface(); iVgSurface->InitializeSurface( aBufferSize, VGI_COLORSPACE_SRGB ); @@ -2327,36 +2325,6 @@ iVgRenderer->vgSeti( VG_FILTER_CHANNEL_MASK, KOriginalFilterMasks ); } - void CGfx2dGcOpenVG::GenerateMask(CSvgtBitmap* aMask) - { - if ( !aMask || aMask->SizeInPixels() != iColorBufferSize ) - { - return; - } - - const TDisplayMode KMaskDisplayMode = aMask->DisplayMode(); - - if ( KMaskDisplayMode != EGray256 && KMaskDisplayMode != EGray2 ) - { - return; - } - - const TInt KOriginalFilterMasks = iVgRenderer->vgGeti( VG_FILTER_CHANNEL_MASK );// - const TInt KStride = CFbsBitmap::ScanLineLength( iColorBufferSize.iWidth, KMaskDisplayMode ); - - // Change to get alpha values from OpenVG - iVgRenderer->vgSeti( VG_FILTER_CHANNEL_MASK, VG_ALPHA ); - - VGImageFormat format = ( KMaskDisplayMode == EGray256 ) ? VG_A_8 : VG_BW_1; - - // Get data address of last line and move upwards (negative stride) - // OpenVG uses Cartesian coordinate system and Symbian uses Screen coordinate system. - - iVgRenderer->vgReadPixels( aMask->BitmapBuffer(), -KStride, format, 0, 0, - iColorBufferSize.iWidth, iColorBufferSize.iHeight ); - // Set back the original filter-masks - iVgRenderer->vgSeti( VG_FILTER_CHANNEL_MASK, KOriginalFilterMasks ); - } // ========================================================================== // This function calls the low level function to set fill opacity value @@ -3019,108 +2987,3 @@ { return(iVgRenderer->TLVEncodedData()); } - -//-------------------------------------------------------------------------------- -// M2G: UpdateFramebufferL() is overloaded to enable rendering on target buffer. -//-------------------------------------------------------------------------------- -void CGfx2dGcOpenVG::UpdateFramebufferL( CSvgtBitmap* aBitmap, CSvgtBitmap* aMask ) - { - if ( !aBitmap || aBitmap->SizeInPixels() != iColorBufferSize ) - { - return; - } - - const TDisplayMode KBitmapDisplayMode = aBitmap->DisplayMode(); - // This check just before VGISymbianCopyToBitmap avoid putting lot - // many similar error checks in the code. If there is any problem - // during OpenVG call we simply leave without drawing any thing. - VGErrorCode vgret = (VGErrorCode)iVgRenderer->vgGetError(); - - if(vgret != VG_NO_ERROR ) - { - User::LeaveIfError(OpenVGErrorToSymbianError(vgret)); - } - - // EGray2 is not support in VGISymbianCopyToBitmap API - if ( KBitmapDisplayMode == EGray2 ) - { - const TInt KStride = aBitmap->Stride(); - - iVgRenderer->vgReadPixels( aBitmap->BitmapBuffer(), -KStride, VG_BW_1, 0, 0, - iColorBufferSize.iWidth, iColorBufferSize.iHeight ); - } - // All other color modes - else - { - // No Mask -- to be generated in GenerateMask - TInt error=KErrNone; - - //In cases, where the mask/aMaskBitmap != NULL, the hint should be defined as VGI_SKIP_TRANSPARENT_PIXELS. - //In all other cases, i.e., when mask/aMaskBitmap == NULL, the definition should be VGI_COPY_TRANSPARENT_PIXELS - error = iVgSurface->CopyBitmap(ENone,ENone, aBitmap, aMask, iColorBufferSize); - - if ( error != KErrNone ) - { - #ifdef _DEBUG - RDebug::Printf("VGICopyToTarget failed: error code: %d", error ); - RDebug::Printf(" - Color mode: %d", aBitmap->DisplayMode() ); - RDebug::Printf(" - Bitmap size: %dx%d", iColorBufferSize.iWidth, iColorBufferSize.iHeight ); - #endif - User::LeaveIfError(error); - } - } - } - -//-------------------------------------------------------------------------------- -// M2G: UpdateFramebufferL() is overloaded to enable rendering on target buffer. -//-------------------------------------------------------------------------------- -void CGfx2dGcOpenVG::UpdateFramebufferL( CSvgtBitmap* aBitmap, CSvgtBitmap* aMask,TSize /*BitmapSize*/,TDisplayMode aBitmapDspMode,TDisplayMode aMaskDspMode ) - { - if ( !aBitmap) - { - return; - } - - const TDisplayMode KBitmapDisplayMode = aBitmap->DisplayMode(); - // This check just before VGISymbianCopyToBitmap avoid putting lot - // many similar error checks in the code. If there is any problem - // during OpenVG call we simply leave without drawing any thing. - VGErrorCode vgret = (VGErrorCode)iVgRenderer->vgGetError(); - - if(vgret != VG_NO_ERROR ) - { - User::LeaveIfError(OpenVGErrorToSymbianError(vgret)); - } - - // EGray2 is not support in VGISymbianCopyToBitmap API - if ( KBitmapDisplayMode == EGray2 ) - { - const TInt KStride = aBitmap->Stride(); - - iVgRenderer->vgReadPixels( aBitmap->BitmapBuffer(), -KStride, VG_BW_1, 0, 0, - iColorBufferSize.iWidth, iColorBufferSize.iHeight ); - - } - // All other color modes - else - { - // No Mask -- to be generated in GenerateMask - TInt error=KErrNone; - - //In cases, where the mask/aMaskBitmap != NULL, the hint should be defined as VGI_SKIP_TRANSPARENT_PIXELS. - //In all other cases, i.e., when mask/aMaskBitmap == NULL, the definition should be VGI_COPY_TRANSPARENT_PIXELS - - error = iVgSurface->CopyBitmap(aBitmapDspMode, aMaskDspMode, aBitmap, aMask, iColorBufferSize); - - if ( error != KErrNone ) - { - #ifdef _DEBUG - RDebug::Printf("VGICopyToTarget failed: error code: %d", error ); - RDebug::Printf(" - Color mode: %d", aBitmap->DisplayMode() ); - RDebug::Printf(" - Bitmap size: %dx%d", iColorBufferSize.iWidth, iColorBufferSize.iHeight ); - #endif - User::LeaveIfError(error); - } - } - - } diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/nvgdecoder/src/TLVIconCreator.cpp --- a/svgtopt/nvgdecoder/src/TLVIconCreator.cpp Tue Aug 31 16:06:58 2010 +0300 +++ b/svgtopt/nvgdecoder/src/TLVIconCreator.cpp Wed Sep 01 12:20:46 2010 +0100 @@ -71,45 +71,45 @@ : iNVGDataPtr((TUint8 *)&aWidth, 1) { - vgapi[EvgSeti] = &CTLVIconCreator::DvgAddCommandL; - vgapi[EvgSetf] = &CTLVIconCreator::DvgAddCommandL; - vgapi[EvgSetParameteri] = &CTLVIconCreator::DvgAddCommandL; - vgapi[EvgSetParameterf] = &CTLVIconCreator::DvgAddCommandL; - vgapi[EvgSetParameterfv] = &CTLVIconCreator::DvgSetParameterfvL; - vgapi[EvgSetColor] = &CTLVIconCreator::DvgAddCommandL; - vgapi[EvgSetPaint] = &CTLVIconCreator::DvgAddCommandL; - vgapi[EvgLoadMatrix] = &CTLVIconCreator::DvgAddCommandL; - vgapi[EvgMultMatrix] = &CTLVIconCreator::DvgAddCommandL; - vgapi[EvgLoadIdentity] = &CTLVIconCreator::DvgAddCommandL; - vgapi[EvgScale] = &CTLVIconCreator::DvgAddCommandL; - vgapi[EvgTranslate] = &CTLVIconCreator::DvgAddCommandL; - vgapi[EvgAppendPathData] = &CTLVIconCreator::DvgAppendPathDataL; - vgapi[EvgDrawPath] = &CTLVIconCreator::DvgDrawPathL; - vgapi[EvgClearPath] = &CTLVIconCreator::DvgAddCommandL; - vgapi[EvguRect] = &CTLVIconCreator::DvguRectL; - vgapi[EvguEllipse] = &CTLVIconCreator::DvguEllipseL; - vgapi[EvguRoundRect] = &CTLVIconCreator::DvguRoundRectL; - vgapi[EvguLine] = &CTLVIconCreator::DvguLineL; - vgapi[EvgCreatePaint] = &CTLVIconCreator::DvgAddCommandL; - vgapi[EvgSetiv] = &CTLVIconCreator::DvgSetivL; - vgapi[EvgClear] = &CTLVIconCreator::DvgAddCommandL; - vgapi[EvgSetfv] = &CTLVIconCreator::DvgSetfvL; - vgapi[EvgRotate] = &CTLVIconCreator::DvgAddCommandL; - vgapi[EvgCreatePath] = &CTLVIconCreator::DvgCreatePathL; - vgapi[EvgCreateImage] = &CTLVIconCreator::DvgAddCommandL; - vgapi[EvgGetPixels] = &CTLVIconCreator::DvgGetPixelsL; - vgapi[EvgDrawImage] = &CTLVIconCreator::DvgAddCommandL; - vgapi[EvgClearImage] = &CTLVIconCreator::DvgAddCommandL; - vgapi[EvgImageSubData] = &CTLVIconCreator::DvgImageSubDataL; - vgapi[EvgDestroyImage] = &CTLVIconCreator::DvgAddCommandL; - vgapi[EvgDestroyPaint] = &CTLVIconCreator::DvgDestroyPaintL; - vgapi[EvgDestroyPath] = &CTLVIconCreator::DvgDestroyPathL; + vgapi[EvgSeti] = &DvgAddCommandL; + vgapi[EvgSetf] = &DvgAddCommandL; + vgapi[EvgSetParameteri] = &DvgAddCommandL; + vgapi[EvgSetParameterf] = &DvgAddCommandL; + vgapi[EvgSetParameterfv] = &DvgSetParameterfvL; + vgapi[EvgSetColor] = &DvgAddCommandL; + vgapi[EvgSetPaint] = &DvgAddCommandL; + vgapi[EvgLoadMatrix] = &DvgAddCommandL; + vgapi[EvgMultMatrix] = &DvgAddCommandL; + vgapi[EvgLoadIdentity] = &DvgAddCommandL; + vgapi[EvgScale] = &DvgAddCommandL; + vgapi[EvgTranslate] = &DvgAddCommandL; + vgapi[EvgAppendPathData] = &DvgAppendPathDataL; + vgapi[EvgDrawPath] = &DvgDrawPathL; + vgapi[EvgClearPath] = &DvgAddCommandL; + vgapi[EvguRect] = &DvguRectL; + vgapi[EvguEllipse] = &DvguEllipseL; + vgapi[EvguRoundRect] = &DvguRoundRectL; + vgapi[EvguLine] = &DvguLineL; + vgapi[EvgCreatePaint] = &DvgAddCommandL; + vgapi[EvgSetiv] = &DvgSetivL; + vgapi[EvgClear] = &DvgAddCommandL; + vgapi[EvgSetfv] = &DvgSetfvL; + vgapi[EvgRotate] = &DvgAddCommandL; + vgapi[EvgCreatePath] = &DvgCreatePathL; + vgapi[EvgCreateImage] = &DvgAddCommandL; + vgapi[EvgGetPixels] = &DvgGetPixelsL; + vgapi[EvgDrawImage] = &DvgAddCommandL; + vgapi[EvgClearImage] = &DvgAddCommandL; + vgapi[EvgImageSubData] = &DvgImageSubDataL; + vgapi[EvgDestroyImage] = &DvgAddCommandL; + vgapi[EvgDestroyPaint] = &DvgDestroyPaintL; + vgapi[EvgDestroyPath] = &DvgDestroyPathL; - vgapi[EvgPrepareToBindImage]= &CTLVIconCreator::DvgAddCommandL; - vgapi[EvgBindImage] = &CTLVIconCreator::DvgAddCommandL; - vgapi[EvgUnBindImage] = &CTLVIconCreator::DvgAddCommandL; + vgapi[EvgPrepareToBindImage]= &DvgAddCommandL; + vgapi[EvgBindImage] = &DvgAddCommandL; + vgapi[EvgUnBindImage] = &DvgAddCommandL; - vgapi[EvgFlush] = &CTLVIconCreator::DvgAddCommandL; + vgapi[EvgFlush] = &DvgAddCommandL; iTargetWidth = aWidth; iTargetHeight = aHeight; diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/nvgdecoder/src/TLVRenderer.cpp --- a/svgtopt/nvgdecoder/src/TLVRenderer.cpp Tue Aug 31 16:06:58 2010 +0300 +++ b/svgtopt/nvgdecoder/src/TLVRenderer.cpp Wed Sep 01 12:20:46 2010 +0100 @@ -51,43 +51,43 @@ void CTLVRenderer::ConstructL(const TDesC8& aBuf) { - vgapi[EvgSeti] = &CTLVRenderer::DvgSetiL; - vgapi[EvgSetf] = &CTLVRenderer::DvgSetfL; - vgapi[EvgSetParameteri] = &CTLVRenderer::DvgSetParameteriL; - vgapi[EvgSetParameterf] = &CTLVRenderer::DvgSetParameterfL; - vgapi[EvgSetParameterfv] = &CTLVRenderer::DvgSetParameterfvL; - vgapi[EvgSetColor] = &CTLVRenderer::DvgSetColorL; - vgapi[EvgSetPaint] = &CTLVRenderer::DvgSetPaintL; - vgapi[EvgLoadMatrix] = &CTLVRenderer::DvgLoadMatrixL; - vgapi[EvgMultMatrix] = &CTLVRenderer::DvgMultMatrixL; - vgapi[EvgLoadIdentity] = &CTLVRenderer::DvgLoadIdentityL; - vgapi[EvgScale] = &CTLVRenderer::DvgScaleL; - vgapi[EvgTranslate] = &CTLVRenderer::DvgTranslateL; - vgapi[EvgAppendPathData] = &CTLVRenderer::DvgAppendPathDataL; - vgapi[EvgDrawPath] = &CTLVRenderer::DvgDrawPathL; - vgapi[EvgClearPath] = &CTLVRenderer::DvgClearPathL; - vgapi[EvguRect] = &CTLVRenderer::DvguRectL; - vgapi[EvguEllipse] = &CTLVRenderer::DvguEllipseL; - vgapi[EvguRoundRect] = &CTLVRenderer::DvguRoundRectL; - vgapi[EvguLine] = &CTLVRenderer::DvguLineL; - vgapi[EvgCreatePaint] = &CTLVRenderer::DvgCreatePaintL; - vgapi[EvgSetiv] = &CTLVRenderer::DvgSetivL; - vgapi[EvgClear] = &CTLVRenderer::DvgClearL; - vgapi[EvgSetfv] = &CTLVRenderer::DvgSetfvL; - vgapi[EvgRotate] = &CTLVRenderer::DvgRotateL; - vgapi[EvgCreatePath] = &CTLVRenderer::DvgCreatePathL; - vgapi[EvgCreateImage] = &CTLVRenderer::DvgCreateImageL; - vgapi[EvgGetPixels] = &CTLVRenderer::DvgGetPixelsL; - vgapi[EvgDrawImage] = &CTLVRenderer::DvgDrawImageL; - vgapi[EvgClearImage] = &CTLVRenderer::DvgClearImageL; - vgapi[EvgImageSubData] = &CTLVRenderer::DvgImageSubDataL; - vgapi[EvgDestroyImage] = &CTLVRenderer::DvgDestroyImageL; - vgapi[EvgDestroyPaint] = &CTLVRenderer::DvgDestroyPaintL; - vgapi[EvgDestroyPath] = &CTLVRenderer::DvgDestroyPathL; - vgapi[EvgPrepareToBindImage]= &CTLVRenderer::DvgPrepareToBindImageL; - vgapi[EvgBindImage] = &CTLVRenderer::DvgBindImageL; - vgapi[EvgUnBindImage] = &CTLVRenderer::DvgUnBindImageL; - vgapi[EvgFlush] = &CTLVRenderer::DvgFlushL; + vgapi[EvgSeti] = &DvgSetiL; + vgapi[EvgSetf] = &DvgSetfL; + vgapi[EvgSetParameteri] = &DvgSetParameteriL; + vgapi[EvgSetParameterf] = &DvgSetParameterfL; + vgapi[EvgSetParameterfv] = &DvgSetParameterfvL; + vgapi[EvgSetColor] = &DvgSetColorL; + vgapi[EvgSetPaint] = &DvgSetPaintL; + vgapi[EvgLoadMatrix] = &DvgLoadMatrixL; + vgapi[EvgMultMatrix] = &DvgMultMatrixL; + vgapi[EvgLoadIdentity] = &DvgLoadIdentityL; + vgapi[EvgScale] = &DvgScaleL; + vgapi[EvgTranslate] = &DvgTranslateL; + vgapi[EvgAppendPathData] = &DvgAppendPathDataL; + vgapi[EvgDrawPath] = &DvgDrawPathL; + vgapi[EvgClearPath] = &DvgClearPathL; + vgapi[EvguRect] = &DvguRectL; + vgapi[EvguEllipse] = &DvguEllipseL; + vgapi[EvguRoundRect] = &DvguRoundRectL; + vgapi[EvguLine] = &DvguLineL; + vgapi[EvgCreatePaint] = &DvgCreatePaintL; + vgapi[EvgSetiv] = &DvgSetivL; + vgapi[EvgClear] = &DvgClearL; + vgapi[EvgSetfv] = &DvgSetfvL; + vgapi[EvgRotate] = &DvgRotateL; + vgapi[EvgCreatePath] = &DvgCreatePathL; + vgapi[EvgCreateImage] = &DvgCreateImageL; + vgapi[EvgGetPixels] = &DvgGetPixelsL; + vgapi[EvgDrawImage] = &DvgDrawImageL; + vgapi[EvgClearImage] = &DvgClearImageL; + vgapi[EvgImageSubData] = &DvgImageSubDataL; + vgapi[EvgDestroyImage] = &DvgDestroyImageL; + vgapi[EvgDestroyPaint] = &DvgDestroyPaintL; + vgapi[EvgDestroyPath] = &DvgDestroyPathL; + vgapi[EvgPrepareToBindImage]= &DvgPrepareToBindImageL; + vgapi[EvgBindImage] = &DvgBindImageL; + vgapi[EvgUnBindImage] = &DvgUnBindImageL; + vgapi[EvgFlush] = &DvgFlushL; vgGetMatrix(iUserMatrix); diff -r db5c883ad1c5 -r 1902ade171ab svgtopt/nvgdecoder/src/nvg.cpp --- a/svgtopt/nvgdecoder/src/nvg.cpp Tue Aug 31 16:06:58 2010 +0300 +++ b/svgtopt/nvgdecoder/src/nvg.cpp Wed Sep 01 12:20:46 2010 +0100 @@ -181,8 +181,7 @@ iLastPathDataType(0), iPreserveAspectSetting(ENvgPreserveAspectRatio_XmidYmid), iSmilFitSetting(ENvgMeet), - iVGImageBinder(0), - iBackgroundColor(0) + iVGImageBinder(0) { } @@ -407,11 +406,6 @@ iCurrentBufferSize = aSize; } - if (iBackgroundColor) - { - ClearBackground(); - } - iDstBimtap = aDstBitmap; TDereferencer nvgIconData(aBuffer); @@ -1565,14 +1559,14 @@ void CNvgEngine::ClearBackground() { - TUint32 rgba = iBackgroundColor;//(iBackgroundColor << 8) | (iBackgroundColor >> 24); + TUint32 rgba = (iBackgroundColor << 8) | (iBackgroundColor >> 24); TInt32 r, g, b, a; r = (TInt)((rgba & 0xFF000000) >> 24); g = (TInt)((rgba & 0x00FF0000) >> 16); b = (TInt)((rgba & 0x0000FF00) >> 8); a = (TInt)(rgba & 0x000000FF); - //r += r >> 7; g += g >> 7; b += b >> 7; a += a >> 7; + r += r >> 7; g += g >> 7; b += b >> 7; a += a >> 7; const VGfloat KInverse255 = 1.0f/256.0f; const VGfloat clearColor[4] = { (KInverse255 * VGfloat (r)), @@ -1580,10 +1574,10 @@ (KInverse255 * VGfloat (b)), (KInverse255 * VGfloat (a)) }; - //vgSeti(VG_SCISSORING, VG_FALSE); + vgSeti(VG_SCISSORING, VG_FALSE); vgSetfv(VG_CLEAR_COLOR, 4, clearColor); vgClear(0, 0, iCurrentBufferSize.iWidth, iCurrentBufferSize.iHeight); - //vgSeti(VG_SCISSORING, VG_TRUE); + vgSeti(VG_SCISSORING, VG_TRUE); } TBool CNvgEngine::IsIdentity(VGfloat array[])