diff -r 6dc066157ed4 -r d9b6a8729acd vtprotocolplugins/DisplaySink/src/CVtImageRotator.cpp --- a/vtprotocolplugins/DisplaySink/src/CVtImageRotator.cpp Tue Jan 26 12:01:21 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,244 +0,0 @@ -/* -* Copyright (c) 2004 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: Image Transforms subsystem. -* -*/ - - -// INCLUDE FILES - -#include -#include - -#include "cvtimagerotator.h" -#include "CVtImageRotatorImplMirrorFlip.h" -#include "CVtImageRotatorImplClockwise.h" - -// CONSTANTS - -_LIT( KModuleName, "CVtImageRotator" ); - -// MACROS - -#ifdef _DEBUG -# define __IF_DEBUG(t) {RDebug::t;} -#else -# define __IF_DEBUG(t) -#endif - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CVtImageRotator::NewL( MVtImageRotatorObserver& aObserver, -// TPriority aPriority ) -// ----------------------------------------------------------------------------- -EXPORT_C CVtImageRotator* CVtImageRotator::NewL( - MVtImageRotatorObserver& aObserver, - TPriority aPriority) - { - CVtImageRotator* self = new ( ELeave ) CVtImageRotator( aObserver, aPriority ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop(); // self - return self; - } - -// ----------------------------------------------------------------------------- -// CVtImageRotator::~CVtImageRotator() -// ----------------------------------------------------------------------------- -EXPORT_C CVtImageRotator::~CVtImageRotator() - { - Cancel(); - delete iAsyncCallBack; - delete iHeapLock; - delete iRotatorImpl; - } - -// ----------------------------------------------------------------------------- -// CVtImageRotator::ScaleL( const CVtImage& aSource, -// CVtImage& aTarget, const TRotationAngle& aAngle ) -// ----------------------------------------------------------------------------- -EXPORT_C void CVtImageRotator::RotateL( const CVtImage& aSource, - CVtImage& aTarget, const TRotationAngle& aAngle ) - { - if ( !IsActive() ) - { - CreateRotatorL( aAngle ); - iRotatorImpl->SetSourceTargetL( aSource, aTarget ); - iCancelled = EFalse; - Activate(); - iAsyncCallBack->CallBack(); - } - else - { - User::Panic( KModuleName(), EBusy ); - } - } - -// ----------------------------------------------------------------------------- -// CVtImageRotator::Rotate -// ----------------------------------------------------------------------------- -EXPORT_C void CVtImageRotator::Rotate( - const CVtImage& aSource, - CVtImage& aTarget, const TRotationAngle& aAngle ) - { - TRAPD( result, RotateL( aSource, aTarget, aAngle ) ); - if ( result != KErrNone ) - { - Activate(); - Signal( result ); - } - } - -// ----------------------------------------------------------------------------- -// CVtImageRotator::CVtImageRotator( MVtImageRotatorObserver& aObserver, -// TPriority aPriority ) -// ----------------------------------------------------------------------------- -CVtImageRotator::CVtImageRotator( MVtImageRotatorObserver& aObserver, - TPriority aPriority ) -: CActive( aPriority ), iObserver( aObserver ) - { - CActiveScheduler::Add( this ); - } - -// ----------------------------------------------------------------------------- -// CVtImageRotator::ConstructL() -// ----------------------------------------------------------------------------- -void CVtImageRotator::ConstructL() - { - iHeapLock = new ( ELeave ) CFbsBitmap(); - iHeapLock->Create( TSize( 1, 1 ), EColor256 ); - iAsyncCallBack = new ( ELeave ) - CAsyncCallBack( TCallBack( StaticRotate, this ), Priority() ); - } - -// ----------------------------------------------------------------------------- -// CVtImageRotator::CreateRotatorL( const TRotationAngle& aAngle ) -// ----------------------------------------------------------------------------- -void CVtImageRotator::CreateRotatorL( const TRotationAngle& aAngle ) - { - if( iRotatorImpl ) - { - if( iRotatorImpl->SupportsRotationAngle( aAngle ) ) - { - iRotatorImpl->SetAngle( aAngle ); - return; - } - delete iRotatorImpl; - iRotatorImpl = 0; - } - - switch( aAngle ) - { - case E90DegreesClockwise: - case E270DegreesClockwise: - iRotatorImpl = - new ( ELeave ) CVtImageRotatorImplClockwise( aAngle ); - break; - - case EMirrorHorizontalAxis: - case EFlipVerticalAxis: - case E180DegreesClockwise: - iRotatorImpl = - new ( ELeave ) CVtImageRotatorImplMirrorFlip( aAngle ); - break; - - default: - User::Leave( KErrNotSupported ); - } - } - -// ----------------------------------------------------------------------------- -// CVtImageRotator::Activate -// ----------------------------------------------------------------------------- -void CVtImageRotator::Activate() - { - iStatus = KRequestPending; - SetActive(); - } - -// ----------------------------------------------------------------------------- -// CVtImageRotator::Signal( TInt aError ) -// ----------------------------------------------------------------------------- -void CVtImageRotator::Signal( TInt aError ) - { - TRequestStatus* pStatus = &iStatus; - User::RequestComplete( pStatus, aError ); - } - -// ----------------------------------------------------------------------------- -// CVtImageRotator::RunL() -// ----------------------------------------------------------------------------- -void CVtImageRotator::RunL() - { - iObserver.RotationFinished( iStatus.Int() ); - } - -// ----------------------------------------------------------------------------- -// CVtImageRotator::DoCancel() -// ----------------------------------------------------------------------------- -void CVtImageRotator::DoCancel() - { - if ( iStatus == KRequestPending ) - { - iCancelled = ETrue; - Signal( KErrCancel ); - iObserver.RotationFinished( KErrCancel ); - } - } - -// ----------------------------------------------------------------------------- -// CVtImageRotator::StaticRotate() -// ----------------------------------------------------------------------------- -TInt CVtImageRotator::StaticRotate( TAny* aPtr ) - { - CVtImageRotator* self = reinterpret_cast< CVtImageRotator* >( aPtr ); - self->DoRotate(); - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CVtImageRotator::DoRotate -// ----------------------------------------------------------------------------- -void CVtImageRotator::DoRotate() - { - if ( !iCancelled ) - { - TBool more; - TBool needsLock = iRotatorImpl->NeedHeapLock(); - if( needsLock ) - { - iHeapLock->LockHeap( ETrue ); - } - TInt result = iRotatorImpl->Rotate( more ); - if( needsLock ) - { - iHeapLock->UnlockHeap( ETrue ); - } - if( !more || ( result != KErrNone ) ) - { - Signal( result ); - } - else - { - iAsyncCallBack->CallBack(); - } - } - } - -// ========================== OTHER EXPORTED FUNCTIONS ========================= - -// End of File - -