# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1277309605 -10800 # Node ID 5cc7cc9a1c877fc30d54b10aa9cf3df637f95ff6 # Parent 4c62338e03c8ed5ce656293658ee93e111514901 Revision: 201023 Kit: 2010125 diff -r 4c62338e03c8 -r 5cc7cc9a1c87 svgt_plat/svgt_api/group/bld.inf --- a/svgt_plat/svgt_api/group/bld.inf Fri May 14 16:45:42 2010 +0300 +++ b/svgt_plat/svgt_api/group/bld.inf Wed Jun 23 19:13:25 2010 +0300 @@ -33,3 +33,7 @@ ../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 4c62338e03c8 -r 5cc7cc9a1c87 svgt_plat/svgt_api/inc/SVGEngineInterfaceImpl.h --- a/svgt_plat/svgt_api/inc/SVGEngineInterfaceImpl.h Fri May 14 16:45:42 2010 +0300 +++ b/svgt_plat/svgt_api/inc/SVGEngineInterfaceImpl.h Wed Jun 23 19:13:25 2010 +0300 @@ -105,6 +105,9 @@ class CSvgTextElementImpl; class CSvgBitmapFontProvider; + +class CSvgtBitmap; + class MRect { public: @@ -647,6 +650,8 @@ */ IMPORT_C void GenerateMask( CFbsBitmap* aMask, TInt aEngine = NULL ); + IMPORT_C void GenerateMask( CSvgtBitmap* aMask, TInt aEngine = NULL ); + /** * Set the color for clearing background. * @@ -871,6 +876,7 @@ */ 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 4c62338e03c8 -r 5cc7cc9a1c87 svgt_plat/svgt_api/inc/SvgJavaInterfaceImpl.h --- a/svgt_plat/svgt_api/inc/SvgJavaInterfaceImpl.h Fri May 14 16:45:42 2010 +0300 +++ b/svgt_plat/svgt_api/inc/SvgJavaInterfaceImpl.h Wed Jun 23 19:13:25 2010 +0300 @@ -33,6 +33,8 @@ typedef int SvgPathHandle; typedef short SvgAttrType; +typedef unsigned int SvgtBitmapHandle; + class CSvgEngineImpl; class CSvgDocumentImpl; class CFbsBitmap; @@ -1488,7 +1490,12 @@ SvgEngineHandle aEngineHandle, SvgDocumentHandle aDocumentHandle, TInt aSurfaceHandle, TInt aSurfaceMaskHandle = NULL, TReal32 aCurrentTime = 0.0f ) __SOFTFP; - IMPORT_C void SvgEngineRenderDocumentL( + IMPORT_C void SvgEngineRenderDocument( + SvgEngineHandle aEngineHandle, SvgDocumentHandle aDocumentHandle, + SvgtBitmapHandle aSurfaceHandle, SvgtBitmapHandle aSurfaceMaskHandle = NULL, + TReal32 aCurrentTime = 0.0f ) __SOFTFP; + + IMPORT_C void SvgEngineRenderDocumentL( SvgEngineHandle aEngineHandle, SvgDocumentHandle aDocumentHandle, TInt aSurfaceHandle, const TPoint& aAnchor, const TRect& aRenderArea, TReal32 aCurrentTime, TReal32 aAlpha ) __SOFTFP; diff -r 4c62338e03c8 -r 5cc7cc9a1c87 svgt_plat/svgt_api/inc/svgtbitmap.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgt_plat/svgt_api/inc/svgtbitmap.h Wed Jun 23 19:13:25 2010 +0300 @@ -0,0 +1,60 @@ +/* + * 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 4c62338e03c8 -r 5cc7cc9a1c87 svgt_plat/svgt_api/inc/svgtbitmap.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgt_plat/svgt_api/inc/svgtbitmap.inl Wed Jun 23 19:13:25 2010 +0300 @@ -0,0 +1,44 @@ +/* +* 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 4c62338e03c8 -r 5cc7cc9a1c87 svgtopt/SVG/SVGEngine/BWINSCW/SVGENGINE-OpenVGU.def --- a/svgtopt/SVG/SVGEngine/BWINSCW/SVGENGINE-OpenVGU.def Fri May 14 16:45:42 2010 +0300 +++ b/svgtopt/SVG/SVGEngine/BWINSCW/SVGENGINE-OpenVGU.def Wed Jun 23 19:13:25 2010 +0300 @@ -191,4 +191,6 @@ ?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 4c62338e03c8 -r 5cc7cc9a1c87 svgtopt/SVG/SVGEngine/eabi/SVGENGINE-OpenVGU.def --- a/svgtopt/SVG/SVGEngine/eabi/SVGENGINE-OpenVGU.def Fri May 14 16:45:42 2010 +0300 +++ b/svgtopt/SVG/SVGEngine/eabi/SVGENGINE-OpenVGU.def Wed Jun 23 19:13:25 2010 +0300 @@ -388,4 +388,6 @@ _ZN23CSvgEngineInterfaceImpl5StartERP9MSvgErrorPK6TDesC8P14CSvgEngineImpl @ 387 NONAME _ZN23CSvgEngineInterfaceImpl6UseDomEiP10CFbsBitmapS1_5TSize12TDisplayModeS3_i @ 388 NONAME _ZNK23CSvgEngineInterfaceImpl14TLVEncodedDataEv @ 389 NONAME + _ZN23CSvgEngineInterfaceImpl12GenerateMaskEP11CSvgtBitmapi @ 390 NONAME + _ZN23CSvgEngineInterfaceImpl14SetGdiContextLEP14CSvgEngineImplP11CSvgtBitmap @ 391 NONAME diff -r 4c62338e03c8 -r 5cc7cc9a1c87 svgtopt/SVG/SVGEngine/group/SVGEngine.mmp --- a/svgtopt/SVG/SVGEngine/group/SVGEngine.mmp Fri May 14 16:45:42 2010 +0300 +++ b/svgtopt/SVG/SVGEngine/group/SVGEngine.mmp Wed Jun 23 19:13:25 2010 +0300 @@ -62,6 +62,7 @@ SOURCE Svgdecoder.cpp SOURCE SVGFourPointRect.cpp + SOURCEPATH ../../SVGImpl/src SOURCE SVGElementImpl.cpp diff -r 4c62338e03c8 -r 5cc7cc9a1c87 svgtopt/SVG/SVGEngine/inc/SVGEngineImpl.h --- a/svgtopt/SVG/SVGEngine/inc/SVGEngineImpl.h Fri May 14 16:45:42 2010 +0300 +++ b/svgtopt/SVG/SVGEngine/inc/SVGEngineImpl.h Wed Jun 23 19:13:25 2010 +0300 @@ -68,6 +68,7 @@ class CSvgTimer; // temporary for debugging +class CSvgtBitmap; //This includes the main rendering loop. /** @@ -327,6 +328,8 @@ */ void GenerateMask( CFbsBitmap* aMask ); + void GenerateMask(CSvgtBitmap* aMask); + /** * Set background color * @@ -365,6 +368,9 @@ 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. * @@ -611,6 +617,10 @@ TBool IsSVGEnginePaused(); void SetBitmapHeader(const TDesC* aHeaderData); + + void EnableTargetRendering(TBool aTargetRendering ); + TBool IsTargetRenderingEnabled() const; + public: // Functions from base classes // From CSvgElementImpl /** @@ -916,7 +926,7 @@ CFbsBitmap* iFrameBuffer; CFbsBitmap* iMask; - + TSize iFrameBufferSize; //NGA TDisplayMode iRenderDspMode; TDisplayMode iMaskDspMode; @@ -931,6 +941,10 @@ TPtrC iLinkShow; TBool iShowDebugInfo; + //M2G: target bitmap buffer and mask buffer + CSvgtBitmap* iTargetBitmapBuffer; + CSvgtBitmap* iTargetMaskBuffer; + TGfxRectangle2D iClipRect; TSvgEngineState iSvgEngineState; TAnimStatus iAnimationState; @@ -960,6 +974,7 @@ //Stores Font Type information as passed by CSvgEngineInterfaceImpl CSvgBitmapFontProvider *iSvgBitmapFontProvider; + TBool iIsTargetRenderingEnabled; public: TBool iCustomOption; TBool iFrameBufferOverridesViewport; diff -r 4c62338e03c8 -r 5cc7cc9a1c87 svgtopt/SVG/SVGEngine/src/SVGEngineImpl.cpp --- a/svgtopt/SVG/SVGEngine/src/SVGEngineImpl.cpp Fri May 14 16:45:42 2010 +0300 +++ b/svgtopt/SVG/SVGEngine/src/SVGEngineImpl.cpp Wed Jun 23 19:13:25 2010 +0300 @@ -59,6 +59,7 @@ #include "SVGTimeContainer.h" #include "SVGMediaAnimationElementImpl.h" +#include // Constants // length of const TInt KClosingTextTagLength = 7; @@ -748,9 +749,24 @@ // Get the redering result onto CFbsBitmap. if(iFrameBufferSize.iWidth > 0) - iGfxContext->UpdateFramebufferL( iFrameBuffer, iMask,iFrameBufferSize,iRenderDspMode,iMaskDspMode ); + { + if(iIsTargetRenderingEnabled) + { // M2G + iGfxContext->UpdateFramebufferL( iTargetBitmapBuffer, iTargetMaskBuffer,iFrameBufferSize, + iTargetBitmapBuffer->DisplayMode(),iTargetMaskBuffer->DisplayMode()); + } + else + iGfxContext->UpdateFramebufferL( iFrameBuffer, iMask,iFrameBufferSize,iRenderDspMode, + iMaskDspMode ); + } else - iGfxContext->UpdateFramebufferL( iFrameBuffer, iMask ); + { + if(iIsTargetRenderingEnabled) //M2G + iGfxContext->UpdateFramebufferL( iTargetBitmapBuffer, iTargetMaskBuffer ); + else + iGfxContext->UpdateFramebufferL( iFrameBuffer, iMask ); + + } if ( !iIgnoreUpdateScreen && iRequestObserver != NULL ) { @@ -1259,6 +1275,13 @@ } } +void CSvgEngineImpl::GenerateMask(CSvgtBitmap* aMask) + { + if ( iGfxContext ) + { + iGfxContext->GenerateMask( aMask ); + } + } // // --------------------------------------------------------------------------- // set background color @@ -1372,7 +1395,38 @@ 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) // --------------------------------------------------------------------------- @@ -1460,12 +1514,24 @@ // --------------------------------------------------------------------------- void CSvgEngineImpl::RenderFrame( TUint aCurrentTime ) { - if ( !iFrameBuffer || !iSvgDocument || - iFrameBuffer->SizeInPixels().iWidth == 0 || iFrameBuffer->SizeInPixels().iHeight == 0 ) + if(iIsTargetRenderingEnabled) //M2G: If target rendering is enabled { - return; + if ( !iTargetBitmapBuffer || !iSvgDocument || + iTargetBitmapBuffer->SizeInPixels().iWidth == 0 || + iTargetBitmapBuffer->SizeInPixels().iHeight == 0 ) + { + return; + } } - + else + { + if (!iFrameBuffer || !iSvgDocument + || iFrameBuffer->SizeInPixels().iWidth == 0 + || iFrameBuffer->SizeInPixels().iHeight == 0) + { + return; + } + } if ( aCurrentTime == 0 ) { SeekEngine( 0 ); @@ -3153,6 +3219,21 @@ ((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 4c62338e03c8 -r 5cc7cc9a1c87 svgtopt/SVG/SVGEngine/src/SVGEngineInterfaceImpl.cpp --- a/svgtopt/SVG/SVGEngine/src/SVGEngineInterfaceImpl.cpp Fri May 14 16:45:42 2010 +0300 +++ b/svgtopt/SVG/SVGEngine/src/SVGEngineInterfaceImpl.cpp Wed Jun 23 19:13:25 2010 +0300 @@ -1499,6 +1499,13 @@ } } +EXPORT_C void CSvgEngineInterfaceImpl::GenerateMask(CSvgtBitmap* aMask, TInt aEngine ) + { + if ( ChooseEngine( aEngine ) ) + { + iSvgEngine->GenerateMask(aMask); + } + } // -------------------------------------------------------------------------- // EXPORT_C void CSvgEngineInterfaceImpl::SetBackgroundColor(TUint32 aRGBA8888Color, CSvgEngineImpl* aEngine) @@ -2465,6 +2472,19 @@ 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 ) // --------------------------------------------------------------------------- diff -r 4c62338e03c8 -r 5cc7cc9a1c87 svgtopt/SVGEngineJI/BWINSCW/SVGEngineJIU.def --- a/svgtopt/SVGEngineJI/BWINSCW/SVGEngineJIU.def Fri May 14 16:45:42 2010 +0300 +++ b/svgtopt/SVGEngineJI/BWINSCW/SVGEngineJIU.def Wed Jun 23 19:13:25 2010 +0300 @@ -87,4 +87,5 @@ ?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 4c62338e03c8 -r 5cc7cc9a1c87 svgtopt/SVGEngineJI/eabi/SVGEngineJIU.def --- a/svgtopt/SVGEngineJI/eabi/SVGEngineJIU.def Fri May 14 16:45:42 2010 +0300 +++ b/svgtopt/SVGEngineJI/eabi/SVGEngineJIU.def Wed Jun 23 19:13:25 2010 +0300 @@ -94,4 +94,5 @@ _ZTV10CJavaError @ 93 NONAME ; ## _ZTV21CSvgJavaInterfaceImpl @ 94 NONAME ; ## _ZN21CSvgJavaInterfaceImpl4NewLER9TFontSpec @ 95 NONAME + _ZN21CSvgJavaInterfaceImpl23SvgEngineRenderDocumentEiijjf @ 96 NONAME diff -r 4c62338e03c8 -r 5cc7cc9a1c87 svgtopt/SVGEngineJI/src/SvgJavaInterfaceImpl.cpp --- a/svgtopt/SVGEngineJI/src/SvgJavaInterfaceImpl.cpp Fri May 14 16:45:42 2010 +0300 +++ b/svgtopt/SVGEngineJI/src/SvgJavaInterfaceImpl.cpp Wed Jun 23 19:13:25 2010 +0300 @@ -241,6 +241,34 @@ */ } +/* + * 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) ); + } + /** * */ @@ -2688,8 +2716,8 @@ default: attribVal = KErrNotFound; + } return attribVal; - } } /** * This maps the Enumeration from SVG to JSR. diff -r 4c62338e03c8 -r 5cc7cc9a1c87 svgtopt/VGRenderer/SWVG/eabi/SWVG.def --- a/svgtopt/VGRenderer/SWVG/eabi/SWVG.def Fri May 14 16:45:42 2010 +0300 +++ b/svgtopt/VGRenderer/SWVG/eabi/SWVG.def Wed Jun 23 19:13:25 2010 +0300 @@ -6,4 +6,6 @@ _ZTV15COpenVGRenderer @ 5 NONAME ; ## _ZTV16CSWVGSurfaceImpl @ 6 NONAME ; ## _ZTV21CSWOpenVGRendererImpl @ 7 NONAME ; ## + _ZTI22CSWVGTargetSurfaceImpl @ 8 NONAME + _ZTV22CSWVGTargetSurfaceImpl @ 9 NONAME diff -r 4c62338e03c8 -r 5cc7cc9a1c87 svgtopt/VGRenderer/SWVG/group/SWVG.mmp --- a/svgtopt/VGRenderer/SWVG/group/SWVG.mmp Fri May 14 16:45:42 2010 +0300 +++ b/svgtopt/VGRenderer/SWVG/group/SWVG.mmp Wed Jun 23 19:13:25 2010 +0300 @@ -32,7 +32,7 @@ SOURCE SWVGSurfaceImpl.cpp SOURCEPATH ../../OpenVGRenderer/src -SOURCE OpenVGRenderer.cpp +SOURCE ../../SWVG/src/swopenvgtargetsurfaceimpl.cpp OpenVGRenderer.cpp //By default, the build tools look for the WINSCW def file in a BWINS directory diff -r 4c62338e03c8 -r 5cc7cc9a1c87 svgtopt/VGRenderer/SWVG/inc/swopenvgtargetsurfaceimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgtopt/VGRenderer/SWVG/inc/swopenvgtargetsurfaceimpl.h Wed Jun 23 19:13:25 2010 +0300 @@ -0,0 +1,64 @@ +/* + * 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 4c62338e03c8 -r 5cc7cc9a1c87 svgtopt/VGRenderer/SWVG/src/SWOpenVGRendererImpl.cpp --- a/svgtopt/VGRenderer/SWVG/src/SWOpenVGRendererImpl.cpp Fri May 14 16:45:42 2010 +0300 +++ b/svgtopt/VGRenderer/SWVG/src/SWOpenVGRendererImpl.cpp Wed Jun 23 19:13:25 2010 +0300 @@ -17,6 +17,7 @@ #include "SWOpenVGRendererImpl.h" #include "SWVGSurfaceImpl.h" +#include "swopenvgtargetsurfaceimpl.h" #include @@ -77,7 +78,10 @@ { } -MVGSurfaceImpl* CSWOpenVGRendererImpl::CreateVGSurfaceL(TInt /*aOption*/) +MVGSurfaceImpl* CSWOpenVGRendererImpl::CreateVGSurfaceL(TInt aOption) { - return CSWVGSurfaceImpl::NewL(); + if(aOption) + return CSWVGSurfaceImpl::NewL(); + else + return CSWVGTargetSurfaceImpl::NewL(); //M2G: Enable rendering on target buffer. } diff -r 4c62338e03c8 -r 5cc7cc9a1c87 svgtopt/VGRenderer/SWVG/src/SWVGSurfaceImpl.cpp --- a/svgtopt/VGRenderer/SWVG/src/SWVGSurfaceImpl.cpp Fri May 14 16:45:42 2010 +0300 +++ b/svgtopt/VGRenderer/SWVG/src/SWVGSurfaceImpl.cpp Wed Jun 23 19:13:25 2010 +0300 @@ -104,7 +104,7 @@ ret = ::VGISymbianCopyToBitmap(aBitmap, aMask, VGI_COPY_TRANSPARENT_PIXELS); } - return KErrNone; + return ret; } TInt CSWVGSurfaceImpl::PrepareToBindClientBuffer() diff -r 4c62338e03c8 -r 5cc7cc9a1c87 svgtopt/VGRenderer/SWVG/src/swopenvgtargetsurfaceimpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgtopt/VGRenderer/SWVG/src/swopenvgtargetsurfaceimpl.cpp Wed Jun 23 19:13:25 2010 +0300 @@ -0,0 +1,226 @@ +/* + * 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 4c62338e03c8 -r 5cc7cc9a1c87 svgtopt/VGRenderer/inc/MVGSurfaceImpl.h --- a/svgtopt/VGRenderer/inc/MVGSurfaceImpl.h Fri May 14 16:45:42 2010 +0300 +++ b/svgtopt/VGRenderer/inc/MVGSurfaceImpl.h Wed Jun 23 19:13:25 2010 +0300 @@ -23,6 +23,7 @@ class RWindow; class CFbsBitmap; +class CSvgtBitmap; class MVGSurfaceImpl { @@ -39,12 +40,14 @@ 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 4c62338e03c8 -r 5cc7cc9a1c87 svgtopt/VGRenderer/inc/VGSurface.h --- a/svgtopt/VGRenderer/inc/VGSurface.h Fri May 14 16:45:42 2010 +0300 +++ b/svgtopt/VGRenderer/inc/VGSurface.h Wed Jun 23 19:13:25 2010 +0300 @@ -27,6 +27,8 @@ class CFbsBitmap; class CVGRenderer; +class CSvgtBitmap; + /** * CVGSurface * @@ -121,6 +123,11 @@ 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 4c62338e03c8 -r 5cc7cc9a1c87 svgtopt/gfx2d/inc/Gfx2dGcInterface.h --- a/svgtopt/gfx2d/inc/Gfx2dGcInterface.h Fri May 14 16:45:42 2010 +0300 +++ b/svgtopt/gfx2d/inc/Gfx2dGcInterface.h Wed Jun 23 19:13:25 2010 +0300 @@ -34,6 +34,7 @@ #include "SvgBitmapFontProvider.h" class MGfxShape; class MGfxPaint; +class CSvgtBitmap; typedef enum { @@ -347,6 +348,10 @@ */ 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 * @@ -365,6 +370,7 @@ * @return */ virtual void GenerateMask(CFbsBitmap* aMask)=0; + virtual void GenerateMask(CSvgtBitmap* /*aMask*/){}; /** * Set the fill opacity value diff -r 4c62338e03c8 -r 5cc7cc9a1c87 svgtopt/gfx2d/inc/Gfx2dGcOpenVG.h --- a/svgtopt/gfx2d/inc/Gfx2dGcOpenVG.h Fri May 14 16:45:42 2010 +0300 +++ b/svgtopt/gfx2d/inc/Gfx2dGcOpenVG.h Wed Jun 23 19:13:25 2010 +0300 @@ -26,6 +26,8 @@ #include "VGSurface.h" #include +class CSvgtBitmap; + const TUint8 KMediaAnimationVisible = 2; /** @@ -47,7 +49,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 aIsMain = ETrue ); + static CGfx2dGcOpenVG* NewL( const TSize aBufferSize, TFontSpec& aFontSpec, CSvgBitmapFontProvider* aSvgBitmapFontProvider,SVGRendererId aRendererType,TBool aRenderOption = ETrue ); void GetFontScaled( TFloatFixPt aHeight, const TDesC& aTypefaceName, CFont*& aFont, TFontSpec& aFontSpec ); /** @@ -352,7 +354,10 @@ 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 @@ -370,7 +375,8 @@ * @return */ void GenerateMask(CFbsBitmap* aMask); - + void GenerateMask(CSvgtBitmap* aMask); + /** * Set the fill opacity value * @@ -510,6 +516,12 @@ // 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; @@ -535,10 +547,6 @@ TFontSpec iFontSpec; //OpenVG stuff - TDisplayMode iDisplayMode; - TBool iGraphicsContextCreated; - TBool iIsMainContext; - VGPaint iFillPaint; VGPaint iStrokePaint; VGPath iPath; diff -r 4c62338e03c8 -r 5cc7cc9a1c87 svgtopt/gfx2d/src/GfxGc/Gfx2dGcOpenVG.cpp --- a/svgtopt/gfx2d/src/GfxGc/Gfx2dGcOpenVG.cpp Fri May 14 16:45:42 2010 +0300 +++ b/svgtopt/gfx2d/src/GfxGc/Gfx2dGcOpenVG.cpp Wed Jun 23 19:13:25 2010 +0300 @@ -48,6 +48,7 @@ // 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; @@ -61,20 +62,21 @@ // -------------------------------------------------------------------------- // CGfx2dGcOpenVG::CGfx2dGcOpenVG() : iScale( 1 ), // --------------------------------------------------------------------------- -CGfx2dGcOpenVG::CGfx2dGcOpenVG( TBool /* aIsMainContext */ ) : +CGfx2dGcOpenVG::CGfx2dGcOpenVG( TBool aRenderOption ) : + iRenderOption(aRenderOption), + iGraphicsContextCreated( EFalse ), iFillOpacity( 1 ), iScale( 1 ), iStrokeColor( 0 ), iStrokeOpacity( 1 ), iBackgroundColor( 0xffffff ), - iFontSize( 10 ), - iFontWeight( -1 ), - iFontStyle( -1 ), - iFamilies( NULL ), - iTextAnchor( EGfxTextAnchorNone ), - iTextDecoration( EGfxTextDecorationNone ), - iGraphicsContextCreated( EFalse ), - iRenderQuality(VG_RENDERING_QUALITY_BETTER), + iFontSize( 10 ), + iFontWeight( -1 ), + iFontStyle( -1 ), + iFamilies( NULL ), + iTextAnchor( EGfxTextAnchorNone ), + iTextDecoration( EGfxTextDecorationNone ), + iRenderQuality(VG_RENDERING_QUALITY_BETTER), iCurrentRendererType(ESVGRendererSW) { @@ -86,9 +88,9 @@ // -------------------------------------------------------------------------- // CGfx2dGcOpenVG* CGfx2dGcOpenVG::NewL( CFbsBitmap* aFrameBuffer, TFontSpec& aFontSpec ) // --------------------------------------------------------------------------- - CGfx2dGcOpenVG* CGfx2dGcOpenVG::NewL( const TSize aBufferSize, TFontSpec& aFontSpec, CSvgBitmapFontProvider* aSvgBitmapFontProvider, TBool aIsMainContext ) + CGfx2dGcOpenVG* CGfx2dGcOpenVG::NewL( const TSize aBufferSize, TFontSpec& aFontSpec, CSvgBitmapFontProvider* aSvgBitmapFontProvider, TBool aRenderOption ) { - CGfx2dGcOpenVG* self = new( ELeave ) CGfx2dGcOpenVG( aIsMainContext ); + CGfx2dGcOpenVG* self = new( ELeave ) CGfx2dGcOpenVG( aRenderOption ); CleanupStack::PushL( self ); self->ConstructL( aBufferSize, aFontSpec, aSvgBitmapFontProvider); CleanupStack::Pop(); @@ -123,7 +125,7 @@ iDashArray = new ( ELeave ) CArrayFixFlat( 32 ); - iVgRenderer = CVGRenderer::NewL(ESVGRendererSW, 0); + iVgRenderer = CVGRenderer::NewL(ESVGRendererSW, iRenderOption); iVgSurface = iVgRenderer->GetCurrentSurface(); ChangeBufferSizeL( aBufferSize ); } @@ -131,9 +133,9 @@ // -------------------------------------------------------------------------- // CGfx2dGcOpenVG* CGfx2dGcOpenVG::NewL( CFbsBitmap* aFrameBuffer, TFontSpec& aFontSpec ) // --------------------------------------------------------------------------- - CGfx2dGcOpenVG* CGfx2dGcOpenVG::NewL( const TSize aBufferSize, TFontSpec& aFontSpec, CSvgBitmapFontProvider* aSvgBitmapFontProvider,SVGRendererId aRendererType,TBool aIsMainContext ) + CGfx2dGcOpenVG* CGfx2dGcOpenVG::NewL( const TSize aBufferSize, TFontSpec& aFontSpec, CSvgBitmapFontProvider* aSvgBitmapFontProvider,SVGRendererId aRendererType,TBool aRenderOption ) { - CGfx2dGcOpenVG* self = new( ELeave ) CGfx2dGcOpenVG( aIsMainContext ); + CGfx2dGcOpenVG* self = new( ELeave ) CGfx2dGcOpenVG( aRenderOption ); CleanupStack::PushL( self ); self->ConstructL( aBufferSize, aFontSpec, aSvgBitmapFontProvider,aRendererType); CleanupStack::Pop(); @@ -161,7 +163,7 @@ iDashArray = new ( ELeave ) CArrayFixFlat( 32 ); iCurrentRendererType = aRendererType; - iVgRenderer = CVGRenderer::NewL(aRendererType, 0); + iVgRenderer = CVGRenderer::NewL(aRendererType, iRenderOption); iVgSurface = iVgRenderer->GetCurrentSurface(); iVgSurface->InitializeSurface( aBufferSize, VGI_COLORSPACE_SRGB ); @@ -2325,6 +2327,36 @@ 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 @@ -2987,3 +3019,108 @@ { 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); + } + } + + }