gssettingsuis/Gs/GSBackgroundImage/Src/GsAsyncImageHandling.cpp
branchGCC_SURGE
changeset 45 f48d04161a92
parent 27 572294aa6075
parent 43 3341fe7c643a
--- a/gssettingsuis/Gs/GSBackgroundImage/Src/GsAsyncImageHandling.cpp	Fri Jun 11 16:24:54 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,445 +0,0 @@
-/*
-* Copyright (c) 2005-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: 
-*
-*/
-
-
-// INCLUDE FILES
-#include "gsasyncimagehandling.h"
-#include <aknappui.h>
-#include <AknUtils.h>
-#include <applayout.cdl.h>
-#include <aknlayoutscalable_apps.cdl.h>
-#include <startupdomaincrkeys.h>
-
-#include "mgsasyncimagehandlingobserver.h"
-#include "GsLogger.h"
-
-#include <cphcltimagehandler.h>
-#include <cphcltimageparams.h>
-#include <cphcltbaseimageparams.h>
-
-//_LIT( KGSWelcomeNoteImgPath, "c:\\private\\100058ec\\welcomeimage.mbm");
-
-const   TInt    KGSVTStillImageWidth = 176;
-const   TInt    KGSVTStillImageHeight = 144;
-
-
-// ================= MEMBER FUNCTIONS =======================
-
-// ---------------------------------------------------------------------------
-// CGSAsyncImageHandling::CGSAsyncImageHandling
-// C++ constructor.
-//
-// ---------------------------------------------------------------------------
-//
-CGSAsyncImageHandling::CGSAsyncImageHandling( RFs& aFs,
-                                  MGSAsyncImageHandlingObserver* aObserver,
-                                  const TDesC& aDestinationPath )
-        : CActive( EPriorityNormal ),
-          iObserver( aObserver ),
-          iFs( aFs ),
-          iDestinationPath( aDestinationPath )
-          
-    {
-    CActiveScheduler::Add( this );
-    }
-
-
-// ---------------------------------------------------------------------------
-// CGSAsyncImageHandling::NewL()
-// C++ constructor.
-//
-// ---------------------------------------------------------------------------
-//
-EXPORT_C CGSAsyncImageHandling* CGSAsyncImageHandling::NewL( RFs& aFs,
-                                   MGSAsyncImageHandlingObserver* aObserver,
-                                   const TDesC& aDestinationPath )
-    {
-    CGSAsyncImageHandling* self =
-        new( ELeave ) CGSAsyncImageHandling( aFs, aObserver,
-                                                  aDestinationPath );
-    CleanupStack::PushL( self );                                              
-    self->ConstructL();
-    CleanupStack::Pop();
-    
-    return self;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CGSAsyncImageHandling::ConstructL
-// Symbian 2nd phase constructor can leave.
-//
-// -----------------------------------------------------------------------------
-//
-void CGSAsyncImageHandling::ConstructL()
-    {
-    iStartupRepository = CRepository::NewL( KCRUidStartupConf );
-    iBitmapScaler = CBitmapScaler::NewL();
-    }
-
-
-// ---------------------------------------------------------------------------
-// CGSAsyncImageHandling::~CGSAsyncImageHandling
-// destructor.
-//
-// ---------------------------------------------------------------------------
-//
-CGSAsyncImageHandling::~CGSAsyncImageHandling()
-    {
-    Cancel();
-
-    if ( iStartupRepository )
-        {
-        delete iStartupRepository;
-        }
-
-    if( iDecoder )
-        {
-        delete iDecoder;
-        }
-
-    if ( iBitmapScaler )
-        {
-        delete iBitmapScaler;
-        }
-
-    if ( iBitmap )
-        {
-        delete iBitmap;
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CGSAsyncImageHandling::ProcessImageL
-//
-// Processing the image asynchronously
-// ---------------------------------------------------------------------------
-//
-void CGSAsyncImageHandling::ProcessImageL( const TDesC& aFileName,
-                                           TInt aScreenWidth,
-                                           TInt aScreenHeight,
-                                           TGSBgImageType aBgImageType )
-    {
-__GSLOGSTRING1( "[CGSAsyncImageHandling] process image %S", &aFileName );
-
-    TInt frameNumber = 0; //for JPEG & bmp images
-    iBgImageType = aBgImageType;
-
-    // make sure there is no memory leaks because of iBitmap and iDimmedBmp
-    if (iBitmap)
-        {
-        delete iBitmap;
-        iBitmap = NULL;
-        }
-    iBitmap = new(ELeave) CFbsBitmap;
-
-    // Loading image from file into CFbsBitmap
-    CImageDecoder::GetMimeTypeFileL( iFs, aFileName, iMimeString );
-    iDecoder = CImageDecoder::FileNewL( iFs, aFileName,
-                                        CImageDecoder::EOptionNone );
-
-    TFrameInfo frameInfo = iDecoder->FrameInfo();
-    TSize imgSize = frameInfo.iOverallSizeInPixels;
-
-
-    TDisplayMode displayMode = GetDisplayMode( frameInfo );
-
-    TSize screenSize( aScreenWidth, aScreenHeight );
-    TSize loadSize( CalculateLoadSize( frameInfo, screenSize ) );
-    iScaleSize = loadSize;
-
-    iBitmap->Reset();
-    User::LeaveIfError( iBitmap->Create( imgSize, displayMode ) );
-    iDecoder->Convert( &iStatus, *iBitmap, frameNumber );
-
-    if ( aBgImageType == EGSWelcomeNoteImage )
-      {
-      iState = EGSWelcomeConversion;
-      }
-    else if ( aBgImageType == EGSVtStillImage )
-      {
-      iState = EGSVTConversion;
-      }
-
-    SetActive();
-    }
-
-// ---------------------------------------------------------------------------
-// CGSAsyncImageHandling::GetDisplayMode
-//
-// Dithers the image to attain the required dithering according to the display
-// mode settings
-// ---------------------------------------------------------------------------
-//
-TDisplayMode CGSAsyncImageHandling::GetDisplayMode( const TFrameInfo& aFrameInfo )
-    {
-    if( aFrameInfo.iFlags & TFrameInfo::ECanDither )
-        {
-        if( aFrameInfo.iFrameDisplayMode < EColor64K )
-            {
-            return aFrameInfo.iFrameDisplayMode;
-            }
-        else
-            {
-            return EColor64K;
-            }
-        }
-    else
-        {
-        return aFrameInfo.iFrameDisplayMode;
-        }
-    }
-
-
-// -----------------------------------------------------------------------------
-// CGSAsyncImageHandling::RunL
-//
-//
-// ---------------------------------------------------------------------------
-//
-void CGSAsyncImageHandling::RunL()
-    {
-    if( iStatus.Int() == KErrNone )
-      {
-      switch( iState )
-        {
-        case EGSWelcomeConversion:
-          iBitmapScaler->Scale(&iStatus, *iBitmap, iScaleSize, ETrue );
-          iState = EGSWelcomeScaling;
-          SetActive();
-          break;
-
-        case EGSWelcomeScaling:
-            {
-            TInt err = iBitmap->Save( iDestinationPath );
-            iStartupRepository->Set( KStartupWelcomeNoteImage,
-                                     iDestinationPath );
-
-            //raising completion event
-            iObserver->ImageHandlingCompleteL( iStatus.Int() );
-            Cancel();
-            }
-          break;
-
-        case EGSVTConversion:
-          iBitmapScaler->Scale(&iStatus, *iBitmap, iScaleSize, ETrue );
-          iState = EGSVTScaling;
-          SetActive();
-          break;
-
-        case EGSVTScaling:
-          SaveVTStillImageL();
-          iObserver->ImageHandlingCompleteL( iStatus.Int() );
-          Cancel();
-          break;
-
-        default:
-          break;
-        }
-      }
-    else
-      {
-      iObserver->ImageHandlingCompleteL( iStatus.Int() );
-      Cancel();
-      }
-    }
-
-// -----------------------------------------------------------------------------
-// CGSAsyncImageHandling::DoCancel
-//
-//
-// ---------------------------------------------------------------------------
-//
-void CGSAsyncImageHandling::DoCancel()
-    {
-    if ( iDecoder )
-        {
-        iDecoder->Cancel();
-        }
-
-    if ( iBitmapScaler )
-        {
-        iBitmapScaler->Cancel();
-        }
-
-    delete iDecoder;
-    iDecoder = NULL;
-    }
-
-// -----------------------------------------------------------------------------
-// CGSAsyncImageHandling::RunError
-//
-//
-// ---------------------------------------------------------------------------
-//
-TInt CGSAsyncImageHandling::RunError( TInt aError )
-    {
-    TRAP_IGNORE( iObserver->ImageHandlingCompleteL( aError ) );
-    DoCancel();
-    return aError;
-    }
-
-// ----------------------------------------------------------------------------
-// TSize CGSAsyncImageHandling::CalculateLoadSize
-//
-// Calculates the load size
-// ----------------------------------------------------------------------------
-//
-TSize CGSAsyncImageHandling::CalculateLoadSize( TFrameInfo& aFrameInfo,
-                                               const TSize aScreenSize )
-    {
-    TReal perfectAspect = ( TReal )(
-    		( TReal )aScreenSize.iWidth/
-    		( TReal )aScreenSize.iHeight );
-    TReal aspect = ( TReal )(
-        ( TReal )aFrameInfo.iFrameCoordsInPixels.Width()/
-        ( TReal )aFrameInfo.iFrameCoordsInPixels.Height() );
-    TSize size( aScreenSize.iWidth, aScreenSize.iHeight );
-    TSize cropsize( aScreenSize.iWidth, aScreenSize.iHeight );
-
-    TAknWindowLineLayout layout = AknLayout::wallpaper_pane();
-    if( aFrameInfo.iFrameCoordsInPixels.Width() > aScreenSize.iWidth ||
-        aFrameInfo.iFrameCoordsInPixels.Height() > aScreenSize.iHeight )
-        {
-        //calculating dynamically range for image aspect ratio close to screen
-        TReal maxAspect = ((TReal)aScreenSize.iWidth/(TReal)aScreenSize.iHeight) + 0.12;
-        TReal minAspect = ((TReal)aScreenSize.iWidth/(TReal)aScreenSize.iHeight) - 0.12;
-
-        if (aspect >= minAspect && aspect <= maxAspect )
-            {
-            if( aspect < perfectAspect )
-                {
-                size.iWidth = aScreenSize.iWidth;
-                size.iHeight = (TInt)((TReal)aScreenSize.iWidth/
-                    (TReal)aFrameInfo.iFrameCoordsInPixels.Width()*
-                    (TReal)aFrameInfo.iFrameCoordsInPixels.Height());
-                }
-            else
-                {
-                size.iWidth = (TInt)((TReal)aScreenSize.iHeight/
-                    (TReal)aFrameInfo.iFrameCoordsInPixels.Height()*
-                    (TReal)aFrameInfo.iFrameCoordsInPixels.Width());
-                size.iHeight = aScreenSize.iHeight;
-                }
-            if (size.iWidth > aScreenSize.iWidth)
-                {
-                cropsize.iWidth = aScreenSize.iWidth;
-                }
-            else
-                {
-                cropsize.iWidth = size.iWidth;
-                }
-            if (size.iHeight > aScreenSize.iHeight)
-                {
-                cropsize.iHeight = aScreenSize.iHeight;
-                }
-            else
-                {
-                cropsize.iHeight = size.iHeight;
-                }
-            }
-        else
-            {
-            // Scale and maintain aspect ratio
-            if( aspect < perfectAspect )
-                {
-                if (aFrameInfo.iFrameCoordsInPixels.Height() > aScreenSize.iHeight)
-                    {
-                    size.iWidth = (TInt)((TReal)aScreenSize.iHeight/
-                        (TReal)aFrameInfo.iFrameCoordsInPixels.Height()*
-                        (TReal)aFrameInfo.iFrameCoordsInPixels.Width());
-                    size.iHeight = aScreenSize.iHeight;
-                    }
-                }
-            else
-                {
-                if (aFrameInfo.iFrameCoordsInPixels.Width() > aScreenSize.iWidth)
-                    {
-                    size.iWidth = aScreenSize.iWidth;
-                    size.iHeight = (TInt)((TReal)aScreenSize.iWidth/
-                        (TReal)aFrameInfo.iFrameCoordsInPixels.Width()*
-                        (TReal)aFrameInfo.iFrameCoordsInPixels.Height());
-                    }
-                }
-            }
-        }
-
-    return size;
-    }
-
-// -----------------------------------------------------------------------------
-// CGSAsyncImageHandling::SaveVTStillImageL
-//
-//
-// ---------------------------------------------------------------------------
-//
-void CGSAsyncImageHandling::SaveVTStillImageL()
-    {
-    //creating new and merging
-    const TSize KStillImageSize( KGSVTStillImageWidth, KGSVTStillImageHeight );
-
-    CFbsBitmap* newBitmap = new ( ELeave ) CFbsBitmap;
-    CleanupStack::PushL( newBitmap );
-
-    User::LeaveIfError(
-        newBitmap->Create( KStillImageSize, iBitmap->DisplayMode() ) );
-
-    CFbsBitmapDevice* device = CFbsBitmapDevice::NewL( newBitmap );
-    CleanupStack::PushL( device );
-
-    CFbsBitGc* context = NULL;
-    User::LeaveIfError( device->CreateContext( context ) );
-    User::LeaveIfNull( context );
-
-    context->SetPenStyle( CGraphicsContext::ENullPen );
-    context->SetBrushColor( TRgb( 0, 0, 0 ) ); // black color
-    context->SetBrushStyle( CGraphicsContext::ESolidBrush );
-    context->Clear();
-
-    const TSize scaledImageSize( iBitmap->SizeInPixels() );
-
-    TInt xPos = ( KStillImageSize.iWidth - scaledImageSize.iWidth ) / 2;
-    TInt yPos = ( KStillImageSize.iHeight - scaledImageSize.iHeight ) / 2;
-
-    context->BitBlt( TPoint( xPos, yPos ), iBitmap );
-
-    delete context;
-    CleanupStack::PopAndDestroy( device );
-
-    //saving bitmap
-    CPhCltImageHandler* phCltImageHandler = CPhCltImageHandler::NewL();
-    CleanupStack::PushL( phCltImageHandler );
-
-    // Acquires ownership of *imageParams
-    // Bad naming for create-function CPhCltBaseImageParamsL().
-    CPhCltImageParams* imageParams = phCltImageHandler->
-                       CPhCltBaseImageParamsL( EPhCltTypeVTStill );
-    CleanupStack::PushL( imageParams );
-    TInt ret = newBitmap->Handle();
-    imageParams->AddImageL( ret );
-    phCltImageHandler->SaveImages( *imageParams );
-    CleanupStack::PopAndDestroy( imageParams );
-    CleanupStack::PopAndDestroy( phCltImageHandler );
-
-    delete iBitmap;
-    iBitmap = NULL;
-
-    CleanupStack::PopAndDestroy( newBitmap );
-    }
-
-
-// End of File