startupservices/startupanimation/sanimsvgplugin/src/sanimsvgplugin.cpp
author teknolog
Sat, 29 May 2010 16:19:12 +0100
branchRCL_3
changeset 36 98afcc9489c0
parent 0 2e3d3ce01487
permissions -rw-r--r--
Fix for bug 2524

/*
* Copyright (c) 2007 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:  Implementation of CSAnimSvgPlugin class
*
*/


#include <SVGEngineInterfaceImpl.h>

#include "sanimsvgplugin.h"
#include "assert.h"
#include "trace.h"

// ======== MEMBER FUNCTIONS ========

// ---------------------------------------------------------------------------
// CSAnimSvgPlugin::NewL
//
// ---------------------------------------------------------------------------
//
CSAnimSvgPlugin* CSAnimSvgPlugin::NewL( TAny* aConstructionParameters )
    {
    FUNC_LOG;

    CSAnimSvgPlugin* self =
        new( ELeave ) CSAnimSvgPlugin( aConstructionParameters );
    CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop( self );
    return self;
    }


// ---------------------------------------------------------------------------
// CSAnimSvgPlugin::~CSAnimSvgPlugin
//
// ---------------------------------------------------------------------------
//
CSAnimSvgPlugin::~CSAnimSvgPlugin()
    {
    FUNC_LOG;

    delete iImage;
    delete iMask;
    }


// ---------------------------------------------------------------------------
// CSAnimSvgPlugin::Load
//
// ---------------------------------------------------------------------------
//
void CSAnimSvgPlugin::Load(
    RFs& /*aFs*/,
    const TDesC& aFileName,
    TRequestStatus& aStatus )
    {
    FUNC_LOG;
    INFO_1( "File name: %S", &aFileName );

    delete iEngine;
    iEngine = NULL;
    delete iMask;
    iMask = NULL;
    delete iImage;
    iImage = NULL;

    TRAPD( errorCode, LoadL( aFileName ) );
    ERROR( errorCode, "Failed to load image file" );
    SetClientRequest( aStatus );
    CompleteClientRequest( errorCode );
    }


// ---------------------------------------------------------------------------
// CSAnimSvgPlugin::Start
//
// ---------------------------------------------------------------------------
//
void CSAnimSvgPlugin::Start( TRequestStatus& aStatus )
    {
    FUNC_LOG;
    ASSERT_TRACE( iEngine, SAnimPanic::ENotInitialized );

    SetClientRequest( aStatus );

    TBool isAnimation = iEngine->SvgHasAnimation( iEngine->SvgDocument() );
    if ( isAnimation )
        {
        INFO( "SVG animation" );

        iEngine->AddAnimationListener( this );
        }

    MSvgError* error = NULL;
    iEngine->Start( error );
    TInt errorCode = SvgToSymbianErr( error );
    if ( errorCode != KErrNone )
        {
        CompleteClientRequest( errorCode );
        }
    else if ( !isAnimation )
        {
        CompleteClientRequest( KErrNone );
        }
    }


// ---------------------------------------------------------------------------
// CSAnimSvgPlugin::Cancel
//
// ---------------------------------------------------------------------------
//
void CSAnimSvgPlugin::Cancel()
    {
    FUNC_LOG;

    CompleteClientRequest( KErrCancel );
    if ( iEngine )
        {
        iEngine->Stop();
        }
    }


// ---------------------------------------------------------------------------
// CSAnimSvgPlugin::BackroundColour
//
// ---------------------------------------------------------------------------
//
TRgb CSAnimSvgPlugin::BackroundColour() const
    {
    FUNC_LOG;

    return KRgbWhite;
    }


// ---------------------------------------------------------------------------
// CSAnimSvgPlugin::UpdateScreen
//
// ---------------------------------------------------------------------------
//
void CSAnimSvgPlugin::UpdateScreen()
    {
    FUNC_LOG;

    if ( iImage && iMask )
        {
        iEngine->GenerateMask( iMask );
        iObserver.UpdateScreen( *iImage, *iMask );
        }
    }


// ---------------------------------------------------------------------------
// CSAnimSvgPlugin::AnimationStarted
//
// ---------------------------------------------------------------------------
//
TBool CSAnimSvgPlugin::AnimationStarted( TBool /*isAnimationIndefinite*/ )
    {
    FUNC_LOG;
    return EFalse;
    }


// ---------------------------------------------------------------------------
// CSAnimSvgPlugin::AnimationPaused
//
// ---------------------------------------------------------------------------
//
TBool CSAnimSvgPlugin::AnimationPaused()
    {
    FUNC_LOG;
    return EFalse;
    }


// ---------------------------------------------------------------------------
// CSAnimSvgPlugin::AnimationEnded
//
// ---------------------------------------------------------------------------
//
TBool CSAnimSvgPlugin::AnimationEnded()
    {
    FUNC_LOG;

    CompleteClientRequest( KErrNone );
    return EFalse;
    }


// ---------------------------------------------------------------------------
// CSAnimSvgPlugin::CSAnimSvgPlugin
//
// ---------------------------------------------------------------------------
//
CSAnimSvgPlugin::CSAnimSvgPlugin( TAny* aConstructionParameters )
  : CSAnimSvgPluginBase( aConstructionParameters )
    {
    FUNC_LOG;
    }


// ---------------------------------------------------------------------------
// CSAnimSvgPlugin::ConstructL
//
// ---------------------------------------------------------------------------
//
void CSAnimSvgPlugin::ConstructL()
    {
    FUNC_LOG;
    }


// ---------------------------------------------------------------------------
// CSAnimSvgPlugin::LoadL
//
// ---------------------------------------------------------------------------
//
void CSAnimSvgPlugin::LoadL( const TDesC& aFileName )
    {
    FUNC_LOG;

    iImage = new ( ELeave ) CFbsBitmap();
    User::LeaveIfError( iImage->Create( iSize, iDisplayMode ) );
    iMask = new ( ELeave ) CFbsBitmap();
    User::LeaveIfError( iMask->Create( iSize, EGray256 ) );

    iEngine = CSvgEngineInterfaceImpl::NewL( iImage, this, iFontSpec );
    iEngine->SetBackgroundColor( KRgbWhite.Internal() );
    iEngine->SetDRMMode( EFalse );

    TInt errorCode = SvgToSymbianErr( iEngine->Load( aFileName ) );
    ERROR( errorCode, "Failed to load SVG file" );
    User::LeaveIfError( errorCode );
    }