diff -r e52958d06c29 -r 5fd161fa28b6 svgtviewer/SvgtViewerPlugin/UIControlSrc/SVGTThumbnailUtil.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgtviewer/SvgtViewerPlugin/UIControlSrc/SVGTThumbnailUtil.cpp Thu Sep 09 11:17:40 2010 +0300 @@ -0,0 +1,303 @@ +/* +* Copyright (c) 2004,2005 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 implements the SVGT Thumbnail functionality +* to display SVGT content +* +*/ + + + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// User Includes +#include "SVGTUIControlDbgFlags.hrh" +#include "SVGTThumbnailUtil.h" + +// Constants +// General Constants +const TInt KSccConstMinusOne = -1; +const TInt KSccConstZero = 0; +const TUint KSccBackground = 0xffffffff; + + +// SMIL Fit Value +_LIT( KSccSmilFitValue,"meet" ); + +// ============================ MEMBER FUNCTIONS =============================== +// ----------------------------------------------------------------------------- +// CSVGTThumbnailUtil::GenerateThumbnailLD +// Generate thumbnails for SVGT content. +// ----------------------------------------------------------------------------- +// +EXPORT_C TBool CSVGTThumbnailUtil::GenerateThumbnailLD( + RFile& aFileHandle, // Filehandle of SVGT + CFbsBitmap& aThumbnailBitmap, // Thumbnail Bitmap + CFbsBitmap& aThumbnailBitmapMask ) // BitMap mask + { + CSVGTThumbnailUtil *tnUtilPtr = CSVGTThumbnailUtil::NewLC( aFileHandle, + aThumbnailBitmap, + aThumbnailBitmapMask ); + TBool retVal = tnUtilPtr->GenerateThumbnail(); + CleanupStack::PopAndDestroy( tnUtilPtr ); + return retVal; + } + + + +// ----------------------------------------------------------------------------- +// CSVGTThumbnailUtil::UpdateScreen +// Implements MSvgRequestObserver::UpdateScreen. +// ----------------------------------------------------------------------------- +// +void CSVGTThumbnailUtil::UpdateScreen() + { + } + +// ----------------------------------------------------------------------------- +// CSVGTThumbnailUtil::ScriptCall +// Implements MSvgRequestObserver::ScriptCall. +// ----------------------------------------------------------------------------- +// +TBool CSVGTThumbnailUtil::ScriptCall( const TDesC& /*aScript*/, + CSvgElementImpl* /*aCallerElement*/ ) + { + return EFalse; + } + + +// ----------------------------------------------------------------------------- +// CSVGTThumbnailUtil::FetchImage +// Implements MSvgRequestObserver::FetchImage. Calls the application call +// back corresponding to this function if exists, else returns EFalse +// indicating to the engine that the image was not retrieved. +// ----------------------------------------------------------------------------- +// +TInt CSVGTThumbnailUtil::FetchImage( const TDesC& /*aUri*/, + RFs& /*aSession*/, RFile& /*aFileHandle*/ ) + { + return KErrNotFound; + } + +TInt CSVGTThumbnailUtil::FetchFont( const TDesC& /* aUri */, + RFs& /* aSession */, RFile& /* aFileHandle */ ) + { + return KErrNotSupported; + } + +// ----------------------------------------------------------------------------- +// CSVGTThumbnailUtil:: GetSmilFitValue +// Implements the MSvgRequestObserver::GetSmilFitValue. +// ----------------------------------------------------------------------------- +// +void CSVGTThumbnailUtil::GetSmilFitValue( TDes& aSmilValue ) + { + aSmilValue.Copy( KSccSmilFitValue ); + } + +// ----------------------------------------------------------------------------- +// CSVGTThumbnailUtil::UpdatePresentation +// Implements MSvgRequestObserver::UpdatePresentation. +// ----------------------------------------------------------------------------- +// +void CSVGTThumbnailUtil::UpdatePresentation( const TInt32& + /* aNoOfAnimation */ ) + { + } + +// ----------------------------------------------------------------------------- +// CSVGTThumbnailUtil::InitializeEngineL +// Initiliazes the interface with the SVG engine. +// ----------------------------------------------------------------------------- +// +void CSVGTThumbnailUtil::InitializeEngineL() + { + if ( !iSvgModule ) + { + TFontSpec spec; + + if ( !iSVGTBitMapDummy ) + { + // For thumbnails, the user provided bitmap is used, + // Have to give some dummy bitmap to the engine in the constructor. + iSVGTBitMapDummy = new( ELeave ) CFbsBitmap; + User::LeaveIfError( iSVGTBitMapDummy->Create( + TSize( KSccConstZero, KSccConstZero ), EGray2 ) ); + } + + iSvgModule = CSvgEngineInterfaceImpl::NewL( iSVGTBitMapDummy, + this, spec ); + iSvgModule->SetBackgroundColor( KSccBackground ); + } + } + +// ----------------------------------------------------------------------------- +// CSVGTThumbnailUtil::GenerateThumbnail +// Helper function that generates Thumbnail for the SVG content. +// ----------------------------------------------------------------------------- +// +TBool CSVGTThumbnailUtil::GenerateThumbnail() + { + if ( iSvgModule ) + { + MSvgError* result; + result = iSvgModule->PrepareDom( iContentFileHandle, iThumbnailHandle ); + + // NULL is returned, possible out of memory when create error object. + if ( ( !result ) || ( result->HasError() ) ) + { + return EFalse; + } +#ifdef SVGTUICONTROL_DBG_DRM_THUMBNAIL_API_ENABLE + // Set thumbnail mode On + iSvgModule->SetThumbNailMode( ETrue ); +#endif // SVGTUICONTROL_DBG_DRM_THUMBNAIL_API_ENABLE + + // Setup the engine to use the DOM + result = iSvgModule->UseDom( iThumbnailHandle, iThumbnailBitmap ); + if ( result->HasError() && !result->IsWarning() ) + { + return EFalse; + } + + // View Box define for Dom associated frame + iSvgModule->ChooseViewBoxIfNotSet(iThumbnailHandle); + iSvgModule->InitializeEngine(); + iSvgModule->RenderFrame( NULL, 0); + + // Render the Mask Bitmap + iSvgModule->GenerateMask( iThumbnailBitmapMask ); +#ifdef SVGTUICONTROL_DBG_DRM_THUMBNAIL_API_ENABLE + // Set thumbnail mode Off + iSvgModule->SetThumbNailMode( EFalse ); +#endif // SVGTUICONTROL_DBG_DRM_THUMBNAIL_API_ENABLE + + return ETrue; + } + else + { + return EFalse; + } + + } + +// ----------------------------------------------------------------------------- +// CSVGTThumbnailUtil::CSVGTThumbnailUtil +// C++ default constructor. +// ----------------------------------------------------------------------------- +// +CSVGTThumbnailUtil::CSVGTThumbnailUtil( RFile& aFileHandle ) : + // Thumbnail Variables + iThumbnailHandle( KSccConstMinusOne ), + iContentFileHandle( aFileHandle ) +{ +} + +// ----------------------------------------------------------------------------- +// CSVGTThumbnailUtil::ConstructL +// Symbian 2nd phase constructor. +// ----------------------------------------------------------------------------- +// +void CSVGTThumbnailUtil::ConstructL( + CFbsBitmap& aThumbnailBitmap, // Bitmap on which content is to be + // rendered + CFbsBitmap& aThumbnailBitmapMask )// Bitmap Mask + { + // Save the user parameters for later access. + iSvgModule = NULL; + iSVGTBitMapDummy = NULL; + iThumbnailBitmap = &aThumbnailBitmap; + iThumbnailBitmapMask = &aThumbnailBitmapMask; + InitializeEngineL(); + } + +// ----------------------------------------------------------------------------- +// CSVGTThumbnailUtil::NewL +// Factory function for creating CSVGTThumbnailUtil objects for thumbnail +// generation. +// Returns: CSVGTThumbnailUtil* ; Pointer to the created object. +// Leaves if error occurs during creation. +// ----------------------------------------------------------------------------- +// +CSVGTThumbnailUtil* CSVGTThumbnailUtil::NewL( + RFile& aFileHandle, // File handle of SVGT Content + CFbsBitmap& aThumbnailBitmap, // Bitmap on which content is to be + // rendered + CFbsBitmap& aThumbnailBitmapMask )// Bitmap Mask + { + CSVGTThumbnailUtil* self = CSVGTThumbnailUtil::NewLC( aFileHandle, + aThumbnailBitmap, + aThumbnailBitmapMask ); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CSVGTThumbnailUtil::NewLC +// Factory function for creating CSVGTThumbnailUtil objects for thumbnail +// generation. +// Returns: CSVGTThumbnailUtil* ; Pointer to the created object. +// Leaves if error occurs during creation. +// ----------------------------------------------------------------------------- +// +CSVGTThumbnailUtil* CSVGTThumbnailUtil::NewLC( + RFile& aFileHandle, // File Handle of SVGT Content + CFbsBitmap& aThumbnailBitmap, // Bitmap on which content is to be + // rendered + CFbsBitmap& aThumbnailBitmapMask) // Bitmap Mask + { + CSVGTThumbnailUtil* self = new ( ELeave ) CSVGTThumbnailUtil( + aFileHandle ); + CleanupStack::PushL( self ); + self->ConstructL( aThumbnailBitmap, aThumbnailBitmapMask ); + return self; + } + + +// ----------------------------------------------------------------------------- +// CSVGTThumbnailUtil::~CSVGTThumbnailUtil +// Destructor +// ----------------------------------------------------------------------------- +// +CSVGTThumbnailUtil::~CSVGTThumbnailUtil() + { + if ( iThumbnailHandle != KSccConstMinusOne ) + { + if ( iSvgModule ) + { + iSvgModule->DeleteDom( iThumbnailHandle ); + } + } + + // Dummy bitmap + delete iSVGTBitMapDummy; + + // SVG Engine + delete iSvgModule; + + // Reset the Thumbnail and Mask as this is owned by the caller + iThumbnailBitmap = NULL; + iThumbnailBitmapMask = NULL; + } + + +// End of File