svgtviewer/SvgtViewerPlugin/UIControlSrc/SVGTThumbnailUtil.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 09 Sep 2010 11:17:40 +0300
branchRCL_3
changeset 20 5fd161fa28b6
parent 0 632761c941a7
permissions -rw-r--r--
Revision: 201019 Kit: 201035

/*
* 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 <AknIconUtils.h>
#include <e32def.h>
#include <e32base.h>
#include <eikenv.h>
#include <fbs.h>
#include <gdi.h>
#include <bautils.h>
#include <SVGEngineInterfaceImpl.h>
#include <data_caging_path_literals.hrh>

// 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