uiacceltk/hitchcock/tsrc/alfperfapp/src/alfperfappcovertestcase.cpp
author hgs
Wed, 03 Nov 2010 19:29:22 +0200
changeset 64 9f8c0686fb49
permissions -rw-r--r--
201044
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
64
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). 
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  CAlfPerfAppCoverTestCase implementation.
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
#include "alfperfappcovertestcase.h"
hgs
parents:
diff changeset
    20
#include "alfperfapp.hrh"
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
#include <AknUtils.h>
hgs
parents:
diff changeset
    23
#include <gdi.h>
hgs
parents:
diff changeset
    24
#include <alf/alfenv.h>
hgs
parents:
diff changeset
    25
#include <alf/alfdisplay.h>
hgs
parents:
diff changeset
    26
#include <alf/alfgc.h>
hgs
parents:
diff changeset
    27
#include <alf/alfdisplay.h>
hgs
parents:
diff changeset
    28
#include <alf/alfcontrol.h>
hgs
parents:
diff changeset
    29
#include <alf/alfcontrolgroup.h>
hgs
parents:
diff changeset
    30
#include <alf/alfroster.h>
hgs
parents:
diff changeset
    31
#include <alf/alfcommand.h>
hgs
parents:
diff changeset
    32
#include <alf/alfevent.h>
hgs
parents:
diff changeset
    33
#include <alf/alftexturemanager.h>
hgs
parents:
diff changeset
    34
#include <alf/alfimagevisual.h>
hgs
parents:
diff changeset
    35
#include <alf/alftextvisual.h>
hgs
parents:
diff changeset
    36
#include <alf/alfimageloaderutil.h>
hgs
parents:
diff changeset
    37
#include <alf/alfutil.h>
hgs
parents:
diff changeset
    38
#include <alf/alflayout.h>
hgs
parents:
diff changeset
    39
#include <alf/alfviewportlayout.h>
hgs
parents:
diff changeset
    40
#include <alf/alfgridlayout.h>
hgs
parents:
diff changeset
    41
#include <alf/alfflowlayout.h>
hgs
parents:
diff changeset
    42
#include <alf/alfdecklayout.h>
hgs
parents:
diff changeset
    43
#include <alf/alftransformation.h>
hgs
parents:
diff changeset
    44
#include <alf/alfgradientbrush.h>
hgs
parents:
diff changeset
    45
#include <alf/alfborderbrush.h>
hgs
parents:
diff changeset
    46
#include <alf/alfbrusharray.h>
hgs
parents:
diff changeset
    47
hgs
parents:
diff changeset
    48
#include <alfperfapp_imagetest.mbg>
hgs
parents:
diff changeset
    49
hgs
parents:
diff changeset
    50
#include <alfperfappappui.h>
hgs
parents:
diff changeset
    51
hgs
parents:
diff changeset
    52
hgs
parents:
diff changeset
    53
/**
hgs
parents:
diff changeset
    54
 * Control group for Cover test cases.
hgs
parents:
diff changeset
    55
 */
hgs
parents:
diff changeset
    56
const TInt KAlfPerfAppCoverControlGroup = 2;
hgs
parents:
diff changeset
    57
hgs
parents:
diff changeset
    58
/**
hgs
parents:
diff changeset
    59
 * Complete now command.
hgs
parents:
diff changeset
    60
 */
hgs
parents:
diff changeset
    61
const TInt KAlfPerfAppCoverCmdCompleteNow = 0x6000;
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
hgs
parents:
diff changeset
    64
/**
hgs
parents:
diff changeset
    65
 * Cover flow test case control.
hgs
parents:
diff changeset
    66
 */
hgs
parents:
diff changeset
    67
class CAlfPerfAppCoverTestCaseControl : public CAlfControl
hgs
parents:
diff changeset
    68
    {
hgs
parents:
diff changeset
    69
public:
hgs
parents:
diff changeset
    70
        
hgs
parents:
diff changeset
    71
    // Common constants
hgs
parents:
diff changeset
    72
    static const TInt KTransitionTime;
hgs
parents:
diff changeset
    73
    static const TInt KTransitionWaitTime;
hgs
parents:
diff changeset
    74
    static const TInt KRotationAngle;
hgs
parents:
diff changeset
    75
hgs
parents:
diff changeset
    76
    static CAlfPerfAppCoverTestCaseControl* NewL(
hgs
parents:
diff changeset
    77
        CAlfEnv& aEnv, TInt aCaseId, const TRect& aVisibleArea );
hgs
parents:
diff changeset
    78
hgs
parents:
diff changeset
    79
protected:
hgs
parents:
diff changeset
    80
    /**
hgs
parents:
diff changeset
    81
     * Constructor.
hgs
parents:
diff changeset
    82
     */
hgs
parents:
diff changeset
    83
    CAlfPerfAppCoverTestCaseControl();
hgs
parents:
diff changeset
    84
        
hgs
parents:
diff changeset
    85
    /**
hgs
parents:
diff changeset
    86
     * Base class constructor. Derived classes may
hgs
parents:
diff changeset
    87
     * override this, but base class needs to be called.
hgs
parents:
diff changeset
    88
     */
hgs
parents:
diff changeset
    89
    virtual void ConstructL( 
hgs
parents:
diff changeset
    90
        CAlfEnv& aEnv, TInt aCaseId, const TRect& aVisibleArea );
hgs
parents:
diff changeset
    91
        
hgs
parents:
diff changeset
    92
public:
hgs
parents:
diff changeset
    93
    /**
hgs
parents:
diff changeset
    94
     * Destructor.
hgs
parents:
diff changeset
    95
     */
hgs
parents:
diff changeset
    96
    ~CAlfPerfAppCoverTestCaseControl();
hgs
parents:
diff changeset
    97
        
hgs
parents:
diff changeset
    98
    /**
hgs
parents:
diff changeset
    99
     * Starts execution of the test case. By default,
hgs
parents:
diff changeset
   100
     * request status is stored to local variable.
hgs
parents:
diff changeset
   101
     */
hgs
parents:
diff changeset
   102
    void StartExecuteL( TRequestStatus& aStatus );    
hgs
parents:
diff changeset
   103
    
hgs
parents:
diff changeset
   104
    /**
hgs
parents:
diff changeset
   105
     * Cancels execution. This control and environment will be
hgs
parents:
diff changeset
   106
     * deleted soon after calling this method.
hgs
parents:
diff changeset
   107
     */
hgs
parents:
diff changeset
   108
    void CancelExecution();
hgs
parents:
diff changeset
   109
    
hgs
parents:
diff changeset
   110
    /**
hgs
parents:
diff changeset
   111
     * Starts execution.
hgs
parents:
diff changeset
   112
     * If this method leaves, then request must not be completed.
hgs
parents:
diff changeset
   113
     * By default, this method completes immediately.
hgs
parents:
diff changeset
   114
     */
hgs
parents:
diff changeset
   115
    virtual void DoStartExecuteL();
hgs
parents:
diff changeset
   116
    
hgs
parents:
diff changeset
   117
    /**
hgs
parents:
diff changeset
   118
     * Sets visible area.
hgs
parents:
diff changeset
   119
     * @param aVisibleArea visible area.
hgs
parents:
diff changeset
   120
     */
hgs
parents:
diff changeset
   121
    virtual void SetVisibleArea( const TRect& aVisibleArea );    
hgs
parents:
diff changeset
   122
    
hgs
parents:
diff changeset
   123
    // From base class CAlfControl:
hgs
parents:
diff changeset
   124
    
hgs
parents:
diff changeset
   125
    /**
hgs
parents:
diff changeset
   126
     * Handles events.
hgs
parents:
diff changeset
   127
     * Derived classes should forward to base class.
hgs
parents:
diff changeset
   128
     * @param aEvent event to be handled.
hgs
parents:
diff changeset
   129
     * @return ETrue if consumed, EFalse otherwise.
hgs
parents:
diff changeset
   130
     */
hgs
parents:
diff changeset
   131
    virtual TBool OfferEventL( const TAlfEvent& aEvent );
hgs
parents:
diff changeset
   132
    
hgs
parents:
diff changeset
   133
protected:
hgs
parents:
diff changeset
   134
    /**
hgs
parents:
diff changeset
   135
     * Next cycle.
hgs
parents:
diff changeset
   136
     */
hgs
parents:
diff changeset
   137
    void NextCycleL();
hgs
parents:
diff changeset
   138
hgs
parents:
diff changeset
   139
    /**
hgs
parents:
diff changeset
   140
     * Changes the view port left or right according to the given amount. 
hgs
parents:
diff changeset
   141
     * The amount can be negative or positive.
hgs
parents:
diff changeset
   142
     */
hgs
parents:
diff changeset
   143
    void MoveImages( 
hgs
parents:
diff changeset
   144
        TReal32 aAmount, 
hgs
parents:
diff changeset
   145
        TReal32 aTransitionTime = KTransitionTime );
hgs
parents:
diff changeset
   146
hgs
parents:
diff changeset
   147
    /**
hgs
parents:
diff changeset
   148
     * Changes the scaling. The current image is scaled to normal size.
hgs
parents:
diff changeset
   149
     * The previous image is scaled down. 
hgs
parents:
diff changeset
   150
     * This should be called when images are moved.
hgs
parents:
diff changeset
   151
     * @see MoveImages
hgs
parents:
diff changeset
   152
     */
hgs
parents:
diff changeset
   153
    void UpdateScaling( TReal32 aTransitionTime = KTransitionTime );
hgs
parents:
diff changeset
   154
    
hgs
parents:
diff changeset
   155
    /**
hgs
parents:
diff changeset
   156
     * Rotates Image from 0to 360 and 0 to -360 in alternate cycles.
hgs
parents:
diff changeset
   157
     */
hgs
parents:
diff changeset
   158
    void RotateImage( );
hgs
parents:
diff changeset
   159
    
hgs
parents:
diff changeset
   160
    /**
hgs
parents:
diff changeset
   161
     * Clips the display layout, zooms into the image by scaling it to
hgs
parents:
diff changeset
   162
     * multiples of cycle count and also moves the image with X and Y offset of 5.
hgs
parents:
diff changeset
   163
     * It gives the Clip, zoom and panning effect to image.
hgs
parents:
diff changeset
   164
     */
hgs
parents:
diff changeset
   165
    void ClipandZoom( );
hgs
parents:
diff changeset
   166
    
hgs
parents:
diff changeset
   167
    /**
hgs
parents:
diff changeset
   168
     * A way to round floating point number to integer.
hgs
parents:
diff changeset
   169
     */
hgs
parents:
diff changeset
   170
    TInt RoundFloatToInt( TReal32 aVal );
hgs
parents:
diff changeset
   171
    
hgs
parents:
diff changeset
   172
    /**
hgs
parents:
diff changeset
   173
     * Completes automatically after specified duration.
hgs
parents:
diff changeset
   174
     * @param aDuration duration in ms
hgs
parents:
diff changeset
   175
     */
hgs
parents:
diff changeset
   176
    void CompleteAfterL( TInt aDuration );
hgs
parents:
diff changeset
   177
        
hgs
parents:
diff changeset
   178
    /**
hgs
parents:
diff changeset
   179
     * Completes current request.
hgs
parents:
diff changeset
   180
     */
hgs
parents:
diff changeset
   181
    void CompleteNow( TInt aErrorCode );
hgs
parents:
diff changeset
   182
hgs
parents:
diff changeset
   183
    /**
hgs
parents:
diff changeset
   184
     * Returns test case id.
hgs
parents:
diff changeset
   185
     */
hgs
parents:
diff changeset
   186
    inline TInt CaseId() const;
hgs
parents:
diff changeset
   187
        
hgs
parents:
diff changeset
   188
    /**
hgs
parents:
diff changeset
   189
     * Returns ETrue if test case execution is still ongoing.
hgs
parents:
diff changeset
   190
     */
hgs
parents:
diff changeset
   191
    inline TBool IsExecutionOngoing() const;
hgs
parents:
diff changeset
   192
    
hgs
parents:
diff changeset
   193
    /**
hgs
parents:
diff changeset
   194
     * Test case id.
hgs
parents:
diff changeset
   195
     */
hgs
parents:
diff changeset
   196
    TInt iCaseId;
hgs
parents:
diff changeset
   197
    
hgs
parents:
diff changeset
   198
private:
hgs
parents:
diff changeset
   199
    TInt iCycleCount;
hgs
parents:
diff changeset
   200
    
hgs
parents:
diff changeset
   201
    /**
hgs
parents:
diff changeset
   202
     * Pointer to request status.
hgs
parents:
diff changeset
   203
     * Not owned.
hgs
parents:
diff changeset
   204
     */
hgs
parents:
diff changeset
   205
    TRequestStatus* iStatus;
hgs
parents:
diff changeset
   206
        
hgs
parents:
diff changeset
   207
    CAlfLayout* iLayout;
hgs
parents:
diff changeset
   208
    TReal32 iViewportPosition;
hgs
parents:
diff changeset
   209
    TReal32 iPreviousViewportPosition;
hgs
parents:
diff changeset
   210
    CAlfViewportLayout* iViewport;
hgs
parents:
diff changeset
   211
    };
hgs
parents:
diff changeset
   212
hgs
parents:
diff changeset
   213
        
hgs
parents:
diff changeset
   214
// ============================ MEMBER FUNCTIONS ===============================
hgs
parents:
diff changeset
   215
//
hgs
parents:
diff changeset
   216
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   217
// Checks if specified case is supported by this class.
hgs
parents:
diff changeset
   218
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   219
//
hgs
parents:
diff changeset
   220
TBool CAlfPerfAppCoverTestCase::IsSupported( TInt aCaseId )
hgs
parents:
diff changeset
   221
    {
hgs
parents:
diff changeset
   222
    return aCaseId == EAlfPerfAppCover 
hgs
parents:
diff changeset
   223
        || aCaseId == EAlfPerfAppCoverLandscape
hgs
parents:
diff changeset
   224
        || aCaseId == EAlfPerfAppCoverRotate
hgs
parents:
diff changeset
   225
        || aCaseId == EAlfPerfAppCoverClipZoomLargeImage
hgs
parents:
diff changeset
   226
        || aCaseId == EAlfPerfAppCoverClipZoomBigImage    
hgs
parents:
diff changeset
   227
        || aCaseId == EAlfPerfAppCoverClipZoomVga
hgs
parents:
diff changeset
   228
        || aCaseId == EAlfPerfAppCoverClipZoomAutoSize;
hgs
parents:
diff changeset
   229
    }
hgs
parents:
diff changeset
   230
hgs
parents:
diff changeset
   231
CAlfPerfAppCoverTestCase* CAlfPerfAppCoverTestCase::NewL( TInt aCaseId, TInt aSequenceIndex )
hgs
parents:
diff changeset
   232
    {
hgs
parents:
diff changeset
   233
    if ( !IsSupported( aCaseId ) )
hgs
parents:
diff changeset
   234
        {
hgs
parents:
diff changeset
   235
        User::Leave( KErrNotSupported );
hgs
parents:
diff changeset
   236
        }
hgs
parents:
diff changeset
   237
hgs
parents:
diff changeset
   238
    CAlfPerfAppCoverTestCase* self = 
hgs
parents:
diff changeset
   239
        new (ELeave) CAlfPerfAppCoverTestCase( aCaseId, aSequenceIndex);
hgs
parents:
diff changeset
   240
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
   241
    self->ConstructL();
hgs
parents:
diff changeset
   242
    CleanupStack::Pop( self );
hgs
parents:
diff changeset
   243
    return self;
hgs
parents:
diff changeset
   244
    }
hgs
parents:
diff changeset
   245
hgs
parents:
diff changeset
   246
CAlfPerfAppCoverTestCase::~CAlfPerfAppCoverTestCase()
hgs
parents:
diff changeset
   247
    {
hgs
parents:
diff changeset
   248
    if ( iEnv && iControl )
hgs
parents:
diff changeset
   249
        {
hgs
parents:
diff changeset
   250
        iEnv->TextureManager().RemoveLoadObserver( this );
hgs
parents:
diff changeset
   251
        iControl->CancelExecution();
hgs
parents:
diff changeset
   252
        iEnv->DeleteControlGroup( KAlfPerfAppCoverControlGroup );
hgs
parents:
diff changeset
   253
        }
hgs
parents:
diff changeset
   254
    }
hgs
parents:
diff changeset
   255
hgs
parents:
diff changeset
   256
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   257
// Starts setup phase.
hgs
parents:
diff changeset
   258
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   259
//
hgs
parents:
diff changeset
   260
void CAlfPerfAppCoverTestCase::SetupL( 
hgs
parents:
diff changeset
   261
        CAlfEnv& aEnv, const TRect& /*aVisibleArea*/, TRequestStatus& aStatus )
hgs
parents:
diff changeset
   262
    {
hgs
parents:
diff changeset
   263
    iEnv = &aEnv;
hgs
parents:
diff changeset
   264
    // the status pointer is taken for completing it 
hgs
parents:
diff changeset
   265
    // when all the images are loaded.
hgs
parents:
diff changeset
   266
    iStatus = &aStatus;
hgs
parents:
diff changeset
   267
    
hgs
parents:
diff changeset
   268
    CAlfPerfAppAppUi* appUi = (CAlfPerfAppAppUi*) EikonEnv()->AppUi();
hgs
parents:
diff changeset
   269
    iOrientation = appUi->Orientation();
hgs
parents:
diff changeset
   270
    
hgs
parents:
diff changeset
   271
    switch ( iCaseId )
hgs
parents:
diff changeset
   272
        {
hgs
parents:
diff changeset
   273
        case EAlfPerfAppCover:
hgs
parents:
diff changeset
   274
            {
hgs
parents:
diff changeset
   275
            appUi->SetOrientationL( CAknAppUiBase::EAppUiOrientationPortrait );    
hgs
parents:
diff changeset
   276
            break;
hgs
parents:
diff changeset
   277
            }
hgs
parents:
diff changeset
   278
hgs
parents:
diff changeset
   279
        case EAlfPerfAppCoverLandscape:
hgs
parents:
diff changeset
   280
            {
hgs
parents:
diff changeset
   281
            appUi->SetOrientationL( CAknAppUiBase::EAppUiOrientationLandscape );    
hgs
parents:
diff changeset
   282
            break;
hgs
parents:
diff changeset
   283
            }
hgs
parents:
diff changeset
   284
        case EAlfPerfAppCoverRotate:
hgs
parents:
diff changeset
   285
        case EAlfPerfAppCoverClipZoomLargeImage:
hgs
parents:
diff changeset
   286
        case EAlfPerfAppCoverClipZoomBigImage:
hgs
parents:
diff changeset
   287
        case EAlfPerfAppCoverClipZoomVga:
hgs
parents:
diff changeset
   288
        case EAlfPerfAppCoverClipZoomAutoSize:
hgs
parents:
diff changeset
   289
            {         
hgs
parents:
diff changeset
   290
            break;
hgs
parents:
diff changeset
   291
            }    
hgs
parents:
diff changeset
   292
        default:
hgs
parents:
diff changeset
   293
            User::Leave( KErrNotSupported );
hgs
parents:
diff changeset
   294
            break;
hgs
parents:
diff changeset
   295
        }
hgs
parents:
diff changeset
   296
    
hgs
parents:
diff changeset
   297
hgs
parents:
diff changeset
   298
    TRect rect;
hgs
parents:
diff changeset
   299
    AknLayoutUtils::LayoutMetricsRect( 
hgs
parents:
diff changeset
   300
        AknLayoutUtils::EApplicationWindow, 
hgs
parents:
diff changeset
   301
        rect );
hgs
parents:
diff changeset
   302
    
hgs
parents:
diff changeset
   303
    iEnv->SetFullScreenDrawing( ETrue );
hgs
parents:
diff changeset
   304
    CAlfDisplay& display = 
hgs
parents:
diff changeset
   305
        iEnv->NewDisplayL( rect, CAlfEnv::ENewDisplayFullScreen );
hgs
parents:
diff changeset
   306
hgs
parents:
diff changeset
   307
#if 1
hgs
parents:
diff changeset
   308
    // black seems to be the default color
hgs
parents:
diff changeset
   309
    display.SetClearBackgroundL( CAlfDisplay::EClearWithColor );
hgs
parents:
diff changeset
   310
#else
hgs
parents:
diff changeset
   311
    // for development/debugging purposes it is easier to see different
hgs
parents:
diff changeset
   312
    // components when there is a background.
hgs
parents:
diff changeset
   313
    display.SetClearBackgroundL( CAlfDisplay::EClearWithSkinBackground );
hgs
parents:
diff changeset
   314
#endif
hgs
parents:
diff changeset
   315
hgs
parents:
diff changeset
   316
    CAlfControlGroup& group = 
hgs
parents:
diff changeset
   317
        iEnv->NewControlGroupL( KAlfPerfAppCoverControlGroup );
hgs
parents:
diff changeset
   318
hgs
parents:
diff changeset
   319
    iLoadedImages = 0;
hgs
parents:
diff changeset
   320
    // the setup phase is completed only after the all images are 
hgs
parents:
diff changeset
   321
    // loaded by the texture manager. see the construction of the
hgs
parents:
diff changeset
   322
    // control class.
hgs
parents:
diff changeset
   323
    aEnv.TextureManager().AddLoadObserverL( this );
hgs
parents:
diff changeset
   324
hgs
parents:
diff changeset
   325
    iControl = CAlfPerfAppCoverTestCaseControl::NewL(
hgs
parents:
diff changeset
   326
            *iEnv, 
hgs
parents:
diff changeset
   327
            iCaseId, 
hgs
parents:
diff changeset
   328
            rect );
hgs
parents:
diff changeset
   329
hgs
parents:
diff changeset
   330
    TRAPD(error,group.AppendL( iControl );) // ownership passed to control group.
hgs
parents:
diff changeset
   331
    if(error != KErrNone)
hgs
parents:
diff changeset
   332
        {
hgs
parents:
diff changeset
   333
        delete iControl;
hgs
parents:
diff changeset
   334
        iControl = 0;
hgs
parents:
diff changeset
   335
        }
hgs
parents:
diff changeset
   336
    
hgs
parents:
diff changeset
   337
    
hgs
parents:
diff changeset
   338
    display.Roster().ShowL( group );
hgs
parents:
diff changeset
   339
    }
hgs
parents:
diff changeset
   340
hgs
parents:
diff changeset
   341
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   342
// Starts execution phase.
hgs
parents:
diff changeset
   343
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   344
//
hgs
parents:
diff changeset
   345
void CAlfPerfAppCoverTestCase::ExecuteL( TRequestStatus& aStatus )
hgs
parents:
diff changeset
   346
    {
hgs
parents:
diff changeset
   347
    // SetupL must have been called first.
hgs
parents:
diff changeset
   348
    __ASSERT_ALWAYS( iEnv, User::Invariant() );
hgs
parents:
diff changeset
   349
    __ASSERT_ALWAYS( iControl, User::Invariant() );
hgs
parents:
diff changeset
   350
    
hgs
parents:
diff changeset
   351
    iControl->StartExecuteL( aStatus );
hgs
parents:
diff changeset
   352
    }
hgs
parents:
diff changeset
   353
hgs
parents:
diff changeset
   354
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   355
// Tears down.
hgs
parents:
diff changeset
   356
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   357
//
hgs
parents:
diff changeset
   358
void CAlfPerfAppCoverTestCase::TearDown()
hgs
parents:
diff changeset
   359
    {
hgs
parents:
diff changeset
   360
    CAlfPerfAppAppUi* appUi = (CAlfPerfAppAppUi*) EikonEnv()->AppUi();
hgs
parents:
diff changeset
   361
    TRAP_IGNORE( appUi->SetOrientationL( iOrientation ) );    
hgs
parents:
diff changeset
   362
hgs
parents:
diff changeset
   363
    // Execution side will delete CAlfEnv, so it will delete everything
hgs
parents:
diff changeset
   364
    // related to this.
hgs
parents:
diff changeset
   365
    iEnv = NULL;
hgs
parents:
diff changeset
   366
    iControl = NULL;
hgs
parents:
diff changeset
   367
    }
hgs
parents:
diff changeset
   368
hgs
parents:
diff changeset
   369
void CAlfPerfAppCoverTestCase::HandleVisibleAreaChange( const TRect& aRect )
hgs
parents:
diff changeset
   370
    {
hgs
parents:
diff changeset
   371
    if ( iEnv && iControl )
hgs
parents:
diff changeset
   372
        {
hgs
parents:
diff changeset
   373
        if ( iEnv->DisplayCount() > 0 )
hgs
parents:
diff changeset
   374
            {
hgs
parents:
diff changeset
   375
            iEnv->PrimaryDisplay().SetVisibleArea( aRect );
hgs
parents:
diff changeset
   376
            }
hgs
parents:
diff changeset
   377
hgs
parents:
diff changeset
   378
        iControl->SetVisibleArea( aRect );
hgs
parents:
diff changeset
   379
        }
hgs
parents:
diff changeset
   380
    }
hgs
parents:
diff changeset
   381
  
hgs
parents:
diff changeset
   382
TInt CAlfPerfAppCoverTestCase::CaseID()
hgs
parents:
diff changeset
   383
    {
hgs
parents:
diff changeset
   384
    return iCaseId;
hgs
parents:
diff changeset
   385
    }
hgs
parents:
diff changeset
   386
hgs
parents:
diff changeset
   387
CAlfPerfAppCoverTestCase::CAlfPerfAppCoverTestCase( TInt aCaseId, TInt aSequenceIndex )
hgs
parents:
diff changeset
   388
    : CAlfPerfAppTestCase(aSequenceIndex), iCaseId ( aCaseId )
hgs
parents:
diff changeset
   389
    {
hgs
parents:
diff changeset
   390
    }
hgs
parents:
diff changeset
   391
hgs
parents:
diff changeset
   392
void CAlfPerfAppCoverTestCase::ConstructL()
hgs
parents:
diff changeset
   393
    {
hgs
parents:
diff changeset
   394
    }
hgs
parents:
diff changeset
   395
hgs
parents:
diff changeset
   396
const TInt KNumberOfImages = 4;
hgs
parents:
diff changeset
   397
hgs
parents:
diff changeset
   398
void CAlfPerfAppCoverTestCase::TextureLoadingCompleted(
hgs
parents:
diff changeset
   399
    CAlfTexture& /*aTexture*/, TInt /*aTextureId*/, TInt aErrorCode)
hgs
parents:
diff changeset
   400
    {
hgs
parents:
diff changeset
   401
    if( aErrorCode != KErrNone && iStatus )
hgs
parents:
diff changeset
   402
        {
hgs
parents:
diff changeset
   403
        User::RequestComplete( iStatus, aErrorCode );
hgs
parents:
diff changeset
   404
        iStatus = NULL;
hgs
parents:
diff changeset
   405
        }
hgs
parents:
diff changeset
   406
    iLoadedImages++;
hgs
parents:
diff changeset
   407
    TInt noOfImagesToLoad = 1;
hgs
parents:
diff changeset
   408
    if( CaseID() == EAlfPerfAppCover || 
hgs
parents:
diff changeset
   409
        CaseID() == EAlfPerfAppCoverLandscape )
hgs
parents:
diff changeset
   410
        {
hgs
parents:
diff changeset
   411
        noOfImagesToLoad = KNumberOfImages;
hgs
parents:
diff changeset
   412
        }
hgs
parents:
diff changeset
   413
    if ( iStatus && ( iLoadedImages == noOfImagesToLoad ) )
hgs
parents:
diff changeset
   414
        {
hgs
parents:
diff changeset
   415
        User::RequestComplete( iStatus, KErrNone );
hgs
parents:
diff changeset
   416
        iStatus = NULL;
hgs
parents:
diff changeset
   417
        }
hgs
parents:
diff changeset
   418
    }
hgs
parents:
diff changeset
   419
        
hgs
parents:
diff changeset
   420
// Implementation of CAlfPerfAppCoverTestCaseControl:
hgs
parents:
diff changeset
   421
const TInt CAlfPerfAppCoverTestCaseControl::KTransitionTime = 1000;
hgs
parents:
diff changeset
   422
const TInt CAlfPerfAppCoverTestCaseControl::KTransitionWaitTime = 1000;
hgs
parents:
diff changeset
   423
const TInt CAlfPerfAppCoverTestCaseControl::KRotationAngle = 360;
hgs
parents:
diff changeset
   424
hgs
parents:
diff changeset
   425
CAlfPerfAppCoverTestCaseControl* CAlfPerfAppCoverTestCaseControl::NewL(  
hgs
parents:
diff changeset
   426
    CAlfEnv& aEnv, TInt aCaseId, const TRect& aVisibleArea )
hgs
parents:
diff changeset
   427
    {
hgs
parents:
diff changeset
   428
    CAlfPerfAppCoverTestCaseControl* 
hgs
parents:
diff changeset
   429
        result = new (ELeave) CAlfPerfAppCoverTestCaseControl;
hgs
parents:
diff changeset
   430
    CleanupStack::PushL( result );
hgs
parents:
diff changeset
   431
    result->ConstructL( aEnv, aCaseId, aVisibleArea );
hgs
parents:
diff changeset
   432
    CleanupStack::Pop();
hgs
parents:
diff changeset
   433
    return result;
hgs
parents:
diff changeset
   434
    }
hgs
parents:
diff changeset
   435
        
hgs
parents:
diff changeset
   436
CAlfPerfAppCoverTestCaseControl::CAlfPerfAppCoverTestCaseControl()  
hgs
parents:
diff changeset
   437
    {
hgs
parents:
diff changeset
   438
    }
hgs
parents:
diff changeset
   439
        
hgs
parents:
diff changeset
   440
CAlfPerfAppCoverTestCaseControl::~CAlfPerfAppCoverTestCaseControl()
hgs
parents:
diff changeset
   441
    {
hgs
parents:
diff changeset
   442
    CompleteNow( KErrCancel );
hgs
parents:
diff changeset
   443
    }
hgs
parents:
diff changeset
   444
hgs
parents:
diff changeset
   445
const TInt KShadowWidth = 20; // in pixels
hgs
parents:
diff changeset
   446
hgs
parents:
diff changeset
   447
hgs
parents:
diff changeset
   448
static void AddBorderBrushL( 
hgs
parents:
diff changeset
   449
    CAlfEnv& aEnv,
hgs
parents:
diff changeset
   450
    CAlfVisual& aVisual, 
hgs
parents:
diff changeset
   451
    const TRgb& aColor,
hgs
parents:
diff changeset
   452
    TInt aThickness, 
hgs
parents:
diff changeset
   453
    TInt aOffset )
hgs
parents:
diff changeset
   454
    {
hgs
parents:
diff changeset
   455
    aVisual.EnableBrushesL();
hgs
parents:
diff changeset
   456
    CAlfBorderBrush* brush = CAlfBorderBrush::NewLC(
hgs
parents:
diff changeset
   457
        aEnv,
hgs
parents:
diff changeset
   458
        aThickness, 
hgs
parents:
diff changeset
   459
        aThickness,
hgs
parents:
diff changeset
   460
        aOffset,
hgs
parents:
diff changeset
   461
        aOffset );
hgs
parents:
diff changeset
   462
    brush->SetColor( aColor );
hgs
parents:
diff changeset
   463
    aVisual.Brushes()->AppendL( brush, EAlfHasOwnership );
hgs
parents:
diff changeset
   464
    CleanupStack::Pop( brush );
hgs
parents:
diff changeset
   465
    }
hgs
parents:
diff changeset
   466
hgs
parents:
diff changeset
   467
static void AddFrameL( CAlfEnv& aEnv, CAlfVisual& aVisual )
hgs
parents:
diff changeset
   468
    {
hgs
parents:
diff changeset
   469
    const TInt KNarrowBorderThickness = 2;
hgs
parents:
diff changeset
   470
    const TInt KBorderThickness = 4;
hgs
parents:
diff changeset
   471
    AddBorderBrushL( 
hgs
parents:
diff changeset
   472
        aEnv, 
hgs
parents:
diff changeset
   473
        aVisual, 
hgs
parents:
diff changeset
   474
        TRgb( 75, 75, 75 ), 
hgs
parents:
diff changeset
   475
        KNarrowBorderThickness, 
hgs
parents:
diff changeset
   476
        KNarrowBorderThickness );
hgs
parents:
diff changeset
   477
    AddBorderBrushL( 
hgs
parents:
diff changeset
   478
        aEnv, 
hgs
parents:
diff changeset
   479
        aVisual, 
hgs
parents:
diff changeset
   480
        TRgb( 55, 55, 55 ), 
hgs
parents:
diff changeset
   481
        KBorderThickness, 
hgs
parents:
diff changeset
   482
        KNarrowBorderThickness + KBorderThickness );
hgs
parents:
diff changeset
   483
    AddBorderBrushL( 
hgs
parents:
diff changeset
   484
        aEnv, 
hgs
parents:
diff changeset
   485
        aVisual, 
hgs
parents:
diff changeset
   486
        TRgb( 25, 25, 25 ), 
hgs
parents:
diff changeset
   487
        KNarrowBorderThickness, 2*KNarrowBorderThickness + KBorderThickness );
hgs
parents:
diff changeset
   488
    }
hgs
parents:
diff changeset
   489
hgs
parents:
diff changeset
   490
const TReal32 KFocusedImageScale = 1.0f;
hgs
parents:
diff changeset
   491
const TReal32 KSmallImageScale = .65f;
hgs
parents:
diff changeset
   492
hgs
parents:
diff changeset
   493
static void DownScaleImageL( CAlfVisual& aVisual, TInt aTransitionTime )
hgs
parents:
diff changeset
   494
    {
hgs
parents:
diff changeset
   495
    TAlfTimedValue presser;
hgs
parents:
diff changeset
   496
    presser.SetValueNow( KFocusedImageScale );
hgs
parents:
diff changeset
   497
    presser.SetTarget( KSmallImageScale, aTransitionTime );
hgs
parents:
diff changeset
   498
    CAlfTransformation& lessening = aVisual.Transformation();
hgs
parents:
diff changeset
   499
    lessening.LoadIdentity();
hgs
parents:
diff changeset
   500
    lessening.Scale( presser, presser );
hgs
parents:
diff changeset
   501
    }
hgs
parents:
diff changeset
   502
hgs
parents:
diff changeset
   503
static CAlfGridLayout* AddItemL( 
hgs
parents:
diff changeset
   504
    CAlfEnv& aEnv,
hgs
parents:
diff changeset
   505
    CAlfControl& aControl, 
hgs
parents:
diff changeset
   506
    CAlfLayout& aLayout, 
hgs
parents:
diff changeset
   507
    CAlfTexture& aTexture )
hgs
parents:
diff changeset
   508
    {
hgs
parents:
diff changeset
   509
    // grid size: two lines, one item on the line
hgs
parents:
diff changeset
   510
    CAlfGridLayout* item = CAlfGridLayout::AddNewL( aControl, 1, 1, &aLayout );
hgs
parents:
diff changeset
   511
hgs
parents:
diff changeset
   512
    // solid background for the item
hgs
parents:
diff changeset
   513
    item->EnableBrushesL();
hgs
parents:
diff changeset
   514
    CAlfGradientBrush* brush = CAlfGradientBrush::NewLC( aEnv );
hgs
parents:
diff changeset
   515
    brush->SetColor( TRgb( 60, 60, 60 ) ); // some gray
hgs
parents:
diff changeset
   516
    item->Brushes()->AppendL( brush, EAlfHasOwnership );
hgs
parents:
diff changeset
   517
    CleanupStack::Pop( brush );
hgs
parents:
diff changeset
   518
    
hgs
parents:
diff changeset
   519
    RArray<TInt> weights;
hgs
parents:
diff changeset
   520
    CleanupClosePushL( weights );
hgs
parents:
diff changeset
   521
    // this makes the image space much larger than the text box below it.
hgs
parents:
diff changeset
   522
    User::LeaveIfError( weights.Append( 100 ) );
hgs
parents:
diff changeset
   523
    User::LeaveIfError( weights.Append( 15 ) );
hgs
parents:
diff changeset
   524
    item->SetRowsL( weights );
hgs
parents:
diff changeset
   525
    CleanupStack::PopAndDestroy();
hgs
parents:
diff changeset
   526
    
hgs
parents:
diff changeset
   527
    CAlfImageVisual* visual = CAlfImageVisual::AddNewL( aControl, item );
hgs
parents:
diff changeset
   528
    visual->SetImage( TAlfImage( aTexture ) );
hgs
parents:
diff changeset
   529
    visual->EnableTransformationL();
hgs
parents:
diff changeset
   530
hgs
parents:
diff changeset
   531
    return item;
hgs
parents:
diff changeset
   532
    }
hgs
parents:
diff changeset
   533
hgs
parents:
diff changeset
   534
static CAlfGridLayout* AddItemTextL( 
hgs
parents:
diff changeset
   535
    CAlfControl& aControl, 
hgs
parents:
diff changeset
   536
    CAlfLayout& aParent, 
hgs
parents:
diff changeset
   537
    const TDesC& aArtist,
hgs
parents:
diff changeset
   538
    const TDesC& aTitle )
hgs
parents:
diff changeset
   539
    {
hgs
parents:
diff changeset
   540
    // creates a grid for holding text lines.
hgs
parents:
diff changeset
   541
    // grid size: two lines, one item on the line
hgs
parents:
diff changeset
   542
    CAlfGridLayout* texts = CAlfGridLayout::AddNewL( aControl, 1, 2, &aParent );
hgs
parents:
diff changeset
   543
    texts->EnableTransformationL();
hgs
parents:
diff changeset
   544
hgs
parents:
diff changeset
   545
    CAlfTextVisual* upper = CAlfTextVisual::AddNewL( aControl, texts );
hgs
parents:
diff changeset
   546
    upper->SetStyle( EAlfTextStyleNormal, EAlfBackgroundTypeDark );
hgs
parents:
diff changeset
   547
    upper->SetWrapping( CAlfTextVisual::ELineWrapTruncate );
hgs
parents:
diff changeset
   548
    upper->SetTextL( aArtist );
hgs
parents:
diff changeset
   549
    CAlfTextVisual* lower = CAlfTextVisual::AddNewL( aControl, texts );
hgs
parents:
diff changeset
   550
    lower->SetStyle( EAlfTextStyleSmall );
hgs
parents:
diff changeset
   551
    lower->SetWrapping( CAlfTextVisual::ELineWrapTruncate );
hgs
parents:
diff changeset
   552
    lower->SetTextL( aTitle );
hgs
parents:
diff changeset
   553
hgs
parents:
diff changeset
   554
    return texts;
hgs
parents:
diff changeset
   555
    }
hgs
parents:
diff changeset
   556
hgs
parents:
diff changeset
   557
static void GetImageTestCasePrivatePath( TFileName& aPath )
hgs
parents:
diff changeset
   558
    {
hgs
parents:
diff changeset
   559
    CEikonEnv::Static()->FsSession().PrivatePath( aPath );
hgs
parents:
diff changeset
   560
    ::CompleteWithAppPath( aPath );
hgs
parents:
diff changeset
   561
    }
hgs
parents:
diff changeset
   562
hgs
parents:
diff changeset
   563
const TReal32 KViewportOffset = -.25f;
hgs
parents:
diff changeset
   564
const TReal32 KViewportOffsetY = -.25f;
hgs
parents:
diff changeset
   565
hgs
parents:
diff changeset
   566
void CAlfPerfAppCoverTestCaseControl::ConstructL( 
hgs
parents:
diff changeset
   567
    CAlfEnv& aEnv, TInt aCaseId, const TRect& aVisibleArea )
hgs
parents:
diff changeset
   568
    {
hgs
parents:
diff changeset
   569
    iCaseId = aCaseId;
hgs
parents:
diff changeset
   570
    CAlfControl::ConstructL( aEnv );
hgs
parents:
diff changeset
   571
hgs
parents:
diff changeset
   572
    TFileName privatePath;
hgs
parents:
diff changeset
   573
    GetImageTestCasePrivatePath( privatePath );
hgs
parents:
diff changeset
   574
    aEnv.TextureManager().SetImagePathL( privatePath );
hgs
parents:
diff changeset
   575
hgs
parents:
diff changeset
   576
    // this is the top most visual
hgs
parents:
diff changeset
   577
    CAlfDeckLayout* top = CAlfDeckLayout::AddNewL( *this );
hgs
parents:
diff changeset
   578
hgs
parents:
diff changeset
   579
    // view port for scrolling
hgs
parents:
diff changeset
   580
    // this viewport needs to be added first for the deck
hgs
parents:
diff changeset
   581
    // to be under the shadows.
hgs
parents:
diff changeset
   582
    iViewport = CAlfViewportLayout::AddNewL( *this, top );
hgs
parents:
diff changeset
   583
    iViewport->SetClipping( EFalse );
hgs
parents:
diff changeset
   584
    
hgs
parents:
diff changeset
   585
    iViewport->SetViewportSize( TAlfRealSize( 1.5, 1.5 ), 0 );
hgs
parents:
diff changeset
   586
    iViewport->SetViewportPos( 
hgs
parents:
diff changeset
   587
        TAlfRealPoint( 
hgs
parents:
diff changeset
   588
            iViewportPosition + KViewportOffset, 
hgs
parents:
diff changeset
   589
            KViewportOffsetY ), 
hgs
parents:
diff changeset
   590
        0 );
hgs
parents:
diff changeset
   591
    // building the grid for holding images and stuff scrolled
hgs
parents:
diff changeset
   592
     iLayout = CAlfGridLayout::AddNewL( 
hgs
parents:
diff changeset
   593
          *this, 
hgs
parents:
diff changeset
   594
          1, 
hgs
parents:
diff changeset
   595
          1,  // just one line of images
hgs
parents:
diff changeset
   596
          iViewport );   
hgs
parents:
diff changeset
   597
     TBuf<50> KImage = _L("alfphotos_small1.jpg");
hgs
parents:
diff changeset
   598
     TInt textureFlag = EAlfTextureFlagRetainResolution;
hgs
parents:
diff changeset
   599
     switch(CaseId())
hgs
parents:
diff changeset
   600
             {
hgs
parents:
diff changeset
   601
             case EAlfPerfAppCover:
hgs
parents:
diff changeset
   602
             case EAlfPerfAppCoverLandscape:         
hgs
parents:
diff changeset
   603
                  {
hgs
parents:
diff changeset
   604
                  // one liner grid with left shadow, empty space, and right shadow
hgs
parents:
diff changeset
   605
                  CAlfGridLayout* shadows = CAlfGridLayout::AddNewL( *this, 3, 1, top );
hgs
parents:
diff changeset
   606
            
hgs
parents:
diff changeset
   607
                  RArray<TInt> weights;
hgs
parents:
diff changeset
   608
                  CleanupClosePushL( weights );
hgs
parents:
diff changeset
   609
                  // the shadows are only small portition of 
hgs
parents:
diff changeset
   610
                  // the size of the empty space between them
hgs
parents:
diff changeset
   611
                  User::LeaveIfError( weights.Append( 5 ) );
hgs
parents:
diff changeset
   612
                  User::LeaveIfError( weights.Append( 200 ) );
hgs
parents:
diff changeset
   613
                  User::LeaveIfError( weights.Append( 5 ) );
hgs
parents:
diff changeset
   614
                  shadows->SetColumnsL( weights );
hgs
parents:
diff changeset
   615
                  CleanupStack::PopAndDestroy();
hgs
parents:
diff changeset
   616
                
hgs
parents:
diff changeset
   617
                  // building of the left side shadow
hgs
parents:
diff changeset
   618
                  CAlfImageVisual* leftShadow = CAlfImageVisual::AddNewL( *this, shadows );
hgs
parents:
diff changeset
   619
                  leftShadow->SetFlag( EAlfVisualFlagManualSize );
hgs
parents:
diff changeset
   620
                  leftShadow->SetSize( 
hgs
parents:
diff changeset
   621
                     TAlfRealPoint( KShadowWidth, aVisibleArea.Height() ) );
hgs
parents:
diff changeset
   622
                  leftShadow->EnableBrushesL();
hgs
parents:
diff changeset
   623
                  CAlfGradientBrush* leftBrush = CAlfGradientBrush::NewLC( aEnv );
hgs
parents:
diff changeset
   624
                  leftBrush->SetLayer( EAlfBrushLayerForeground );
hgs
parents:
diff changeset
   625
                  leftBrush->SetColor( KRgbBlack, 1.f );
hgs
parents:
diff changeset
   626
                  leftBrush->AppendColorL( 0.f, KRgbBlack, 1.f );
hgs
parents:
diff changeset
   627
                  leftBrush->AppendColorL( 1.0f, KRgbBlack, 0.f );
hgs
parents:
diff changeset
   628
                  leftShadow->Brushes()->AppendL( leftBrush, EAlfHasOwnership );
hgs
parents:
diff changeset
   629
                  CleanupStack::Pop( leftBrush );
hgs
parents:
diff changeset
   630
            
hgs
parents:
diff changeset
   631
                  // this is just an empty visual to get the layout correct,
hgs
parents:
diff changeset
   632
                  // shadows take small portitions on left and right.
hgs
parents:
diff changeset
   633
                  // middle part of the screen is left empty for the viewport.
hgs
parents:
diff changeset
   634
                  CAlfImageVisual* emptySpace = CAlfImageVisual::AddNewL( *this, shadows );
hgs
parents:
diff changeset
   635
            
hgs
parents:
diff changeset
   636
                  // building of the right side shadow
hgs
parents:
diff changeset
   637
                  CAlfImageVisual* rightShadow = CAlfImageVisual::AddNewL( *this, shadows );
hgs
parents:
diff changeset
   638
                  rightShadow->SetFlag( EAlfVisualFlagManualSize );
hgs
parents:
diff changeset
   639
                  rightShadow->SetSize( 
hgs
parents:
diff changeset
   640
                    TAlfRealPoint( KShadowWidth, aVisibleArea.Height() ) );
hgs
parents:
diff changeset
   641
                  rightShadow->EnableBrushesL();
hgs
parents:
diff changeset
   642
                  CAlfGradientBrush* rightBrush = CAlfGradientBrush::NewLC( aEnv );
hgs
parents:
diff changeset
   643
                  rightBrush->SetLayer( EAlfBrushLayerForeground );
hgs
parents:
diff changeset
   644
                  rightBrush->SetColor( KRgbBlack, 0.f );
hgs
parents:
diff changeset
   645
                  rightBrush->AppendColorL( .0f, KRgbBlack, 0.f );
hgs
parents:
diff changeset
   646
                  rightBrush->AppendColorL( 1.0f, KRgbBlack, 1.f );
hgs
parents:
diff changeset
   647
                  rightShadow->Brushes()->AppendL( rightBrush, EAlfHasOwnership );
hgs
parents:
diff changeset
   648
                  CleanupStack::Pop( rightBrush );
hgs
parents:
diff changeset
   649
                  
hgs
parents:
diff changeset
   650
                  // NOTE: Now using small images for OpenVG, because of memory issues.
hgs
parents:
diff changeset
   651
                  // These files may be replaced for BitGDI if needed.
hgs
parents:
diff changeset
   652
                  _LIT( KImage2, "alfphotos_small2.jpg");
hgs
parents:
diff changeset
   653
                  _LIT( KImage3, "alfphotos_small3.jpg");
hgs
parents:
diff changeset
   654
                  _LIT( KImage4, "alfphotos_small4.jpg");
hgs
parents:
diff changeset
   655
                  KImage = _L("alfphotos_small1.jpg");
hgs
parents:
diff changeset
   656
                  
hgs
parents:
diff changeset
   657
                  static_cast<CAlfGridLayout* >( iLayout )->SetColumns( KNumberOfImages );
hgs
parents:
diff changeset
   658
                  iViewport->SetVirtualSize( TAlfRealSize( KNumberOfImages, 1.0 ), 0 );               
hgs
parents:
diff changeset
   659
            
hgs
parents:
diff changeset
   660
                  CAlfTexture& texture2 = aEnv.TextureManager().LoadTextureL(
hgs
parents:
diff changeset
   661
                    KImage2, 
hgs
parents:
diff changeset
   662
                    TAlfTextureFlags( textureFlag ), 
hgs
parents:
diff changeset
   663
                    KAlfAutoGeneratedTextureId );
hgs
parents:
diff changeset
   664
                
hgs
parents:
diff changeset
   665
                  CAlfTexture& texture3 = aEnv.TextureManager().LoadTextureL(
hgs
parents:
diff changeset
   666
                     KImage3, 
hgs
parents:
diff changeset
   667
                     TAlfTextureFlags( textureFlag ), 
hgs
parents:
diff changeset
   668
                     KAlfAutoGeneratedTextureId );
hgs
parents:
diff changeset
   669
                
hgs
parents:
diff changeset
   670
                  CAlfTexture& texture4 = aEnv.TextureManager().LoadTextureL(
hgs
parents:
diff changeset
   671
                     KImage4, 
hgs
parents:
diff changeset
   672
                     TAlfTextureFlags( textureFlag ),
hgs
parents:
diff changeset
   673
                     KAlfAutoGeneratedTextureId );
hgs
parents:
diff changeset
   674
                
hgs
parents:
diff changeset
   675
                  CAlfGridLayout* visual2 = AddItemL( aEnv, *this, *iLayout, texture2 );
hgs
parents:
diff changeset
   676
                  visual2->EnableTransformationL();
hgs
parents:
diff changeset
   677
                  AddFrameL( aEnv, *visual2 );
hgs
parents:
diff changeset
   678
               
hgs
parents:
diff changeset
   679
                  CAlfGridLayout* visual3 = AddItemL( aEnv, *this, *iLayout, texture3 );
hgs
parents:
diff changeset
   680
                  visual3->EnableTransformationL();
hgs
parents:
diff changeset
   681
                  AddFrameL( aEnv, *visual3 );
hgs
parents:
diff changeset
   682
                
hgs
parents:
diff changeset
   683
                  CAlfGridLayout* visual4 = AddItemL( aEnv, *this, *iLayout, texture4 );
hgs
parents:
diff changeset
   684
                  visual4->EnableTransformationL();
hgs
parents:
diff changeset
   685
                  AddFrameL( aEnv, *visual4 );                  
hgs
parents:
diff changeset
   686
                
hgs
parents:
diff changeset
   687
                  CAlfGridLayout* text2 = AddItemTextL( 
hgs
parents:
diff changeset
   688
                     *this, *visual2, _L( "Gwen Stefani" ), _L("Hollaback Girl") );
hgs
parents:
diff changeset
   689
            
hgs
parents:
diff changeset
   690
                  CAlfGridLayout* text3 = AddItemTextL( 
hgs
parents:
diff changeset
   691
                     *this, *visual3, _L( "No Doubt" ), _L("Don't Speak") );
hgs
parents:
diff changeset
   692
            
hgs
parents:
diff changeset
   693
                  CAlfGridLayout* text4 = AddItemTextL( 
hgs
parents:
diff changeset
   694
                     *this, *visual4, _L( "Jenni Vartiainen" ), _L("Ihmisten edessä") );     
hgs
parents:
diff changeset
   695
                
hgs
parents:
diff changeset
   696
                  DownScaleImageL( *visual2, 0 );
hgs
parents:
diff changeset
   697
                  DownScaleImageL( *visual3, 0 );
hgs
parents:
diff changeset
   698
                  DownScaleImageL( *visual4, 0 );
hgs
parents:
diff changeset
   699
                  break;
hgs
parents:
diff changeset
   700
                  }   
hgs
parents:
diff changeset
   701
              case EAlfPerfAppCoverRotate:
hgs
parents:
diff changeset
   702
                  {                      
hgs
parents:
diff changeset
   703
                  KImage = _L("alfphotos_small1.jpg");
hgs
parents:
diff changeset
   704
                  break;
hgs
parents:
diff changeset
   705
                  }    
hgs
parents:
diff changeset
   706
              case EAlfPerfAppCoverClipZoomLargeImage:
hgs
parents:
diff changeset
   707
                  {
hgs
parents:
diff changeset
   708
                  KImage = _L("alfphotos_5mpx.jpg");
hgs
parents:
diff changeset
   709
                  iLayout->SetClipping( ETrue );
hgs
parents:
diff changeset
   710
                  iViewport->SetClipping( ETrue );
hgs
parents:
diff changeset
   711
                  top->SetClipping( ETrue );
hgs
parents:
diff changeset
   712
                  break;
hgs
parents:
diff changeset
   713
                  }
hgs
parents:
diff changeset
   714
              case EAlfPerfAppCoverClipZoomBigImage:
hgs
parents:
diff changeset
   715
                  {
hgs
parents:
diff changeset
   716
                  KImage = _L("alfphotos_2mpx.jpg");
hgs
parents:
diff changeset
   717
                  iLayout->SetClipping( ETrue );
hgs
parents:
diff changeset
   718
                  iViewport->SetClipping( ETrue );
hgs
parents:
diff changeset
   719
                  top->SetClipping( ETrue );
hgs
parents:
diff changeset
   720
                  break;
hgs
parents:
diff changeset
   721
                  }
hgs
parents:
diff changeset
   722
              case EAlfPerfAppCoverClipZoomVga:
hgs
parents:
diff changeset
   723
                  {
hgs
parents:
diff changeset
   724
                  KImage = _L("alfphotos_vga.jpg");
hgs
parents:
diff changeset
   725
                  iLayout->SetClipping( ETrue );
hgs
parents:
diff changeset
   726
                  iViewport->SetClipping( ETrue );
hgs
parents:
diff changeset
   727
                  top->SetClipping( ETrue );
hgs
parents:
diff changeset
   728
                  break;
hgs
parents:
diff changeset
   729
                  }
hgs
parents:
diff changeset
   730
              case EAlfPerfAppCoverClipZoomAutoSize:
hgs
parents:
diff changeset
   731
                  {
hgs
parents:
diff changeset
   732
                  KImage = _L("alfphotos_small9.jpg");
hgs
parents:
diff changeset
   733
                  iLayout->SetClipping( ETrue );
hgs
parents:
diff changeset
   734
                  iViewport->SetClipping( ETrue );
hgs
parents:
diff changeset
   735
                  top->SetClipping( ETrue );
hgs
parents:
diff changeset
   736
                  textureFlag |= EAlfTextureFlagAutoSize;
hgs
parents:
diff changeset
   737
                  break;
hgs
parents:
diff changeset
   738
                  }
hgs
parents:
diff changeset
   739
             }
hgs
parents:
diff changeset
   740
             CAlfTexture& texture1 = aEnv.TextureManager().LoadTextureL(
hgs
parents:
diff changeset
   741
                    KImage, 
hgs
parents:
diff changeset
   742
                    TAlfTextureFlags( textureFlag ), 
hgs
parents:
diff changeset
   743
                    KAlfAutoGeneratedTextureId );
hgs
parents:
diff changeset
   744
             CAlfGridLayout* visual1 = AddItemL( aEnv, *this, *iLayout, texture1 );
hgs
parents:
diff changeset
   745
             CAlfGridLayout* text1 = AddItemTextL( 
hgs
parents:
diff changeset
   746
                    *this, *visual1, _L( "TikTak" ), _L("Sinkut 99 - 07 Disc 1") );
hgs
parents:
diff changeset
   747
             visual1->EnableTransformationL();                    
hgs
parents:
diff changeset
   748
             visual1->Visual( 0 ).SetClipping( EFalse );
hgs
parents:
diff changeset
   749
             if ( CaseId() == EAlfPerfAppCover ||
hgs
parents:
diff changeset
   750
                  CaseId() == EAlfPerfAppCoverLandscape )
hgs
parents:
diff changeset
   751
                 {
hgs
parents:
diff changeset
   752
                 AddFrameL( aEnv, *visual1 );
hgs
parents:
diff changeset
   753
                 DownScaleImageL( *visual1, 0 );
hgs
parents:
diff changeset
   754
                 }     
hgs
parents:
diff changeset
   755
    }
hgs
parents:
diff changeset
   756
        
hgs
parents:
diff changeset
   757
void CAlfPerfAppCoverTestCaseControl::StartExecuteL( TRequestStatus& aStatus )
hgs
parents:
diff changeset
   758
    {
hgs
parents:
diff changeset
   759
    iCycleCount = 0;
hgs
parents:
diff changeset
   760
    iViewportPosition = 0; 
hgs
parents:
diff changeset
   761
    iPreviousViewportPosition = -1; // no previous position
hgs
parents:
diff changeset
   762
    
hgs
parents:
diff changeset
   763
    iStatus = &aStatus;
hgs
parents:
diff changeset
   764
    *iStatus = KRequestPending;
hgs
parents:
diff changeset
   765
    
hgs
parents:
diff changeset
   766
    TRAPD( err, DoStartExecuteL() );
hgs
parents:
diff changeset
   767
    if ( err != KErrNone )
hgs
parents:
diff changeset
   768
        {
hgs
parents:
diff changeset
   769
        iStatus = NULL;
hgs
parents:
diff changeset
   770
        User::Leave( err );
hgs
parents:
diff changeset
   771
        }
hgs
parents:
diff changeset
   772
    }
hgs
parents:
diff changeset
   773
hgs
parents:
diff changeset
   774
void CAlfPerfAppCoverTestCaseControl::CancelExecution()
hgs
parents:
diff changeset
   775
    {
hgs
parents:
diff changeset
   776
    CompleteNow( KErrCancel );
hgs
parents:
diff changeset
   777
    }
hgs
parents:
diff changeset
   778
hgs
parents:
diff changeset
   779
void CAlfPerfAppCoverTestCaseControl::DoStartExecuteL()
hgs
parents:
diff changeset
   780
    {
hgs
parents:
diff changeset
   781
    NextCycleL();
hgs
parents:
diff changeset
   782
    CompleteAfterL( KTransitionWaitTime );
hgs
parents:
diff changeset
   783
    }
hgs
parents:
diff changeset
   784
hgs
parents:
diff changeset
   785
void CAlfPerfAppCoverTestCaseControl::SetVisibleArea( 
hgs
parents:
diff changeset
   786
        const TRect& /*aVisibleArea*/ )
hgs
parents:
diff changeset
   787
    {
hgs
parents:
diff changeset
   788
    }
hgs
parents:
diff changeset
   789
hgs
parents:
diff changeset
   790
TBool CAlfPerfAppCoverTestCaseControl::OfferEventL( const TAlfEvent& aEvent )
hgs
parents:
diff changeset
   791
    {
hgs
parents:
diff changeset
   792
    if ( aEvent.IsCustomEvent() && 
hgs
parents:
diff changeset
   793
         aEvent.CustomParameter() == KAlfPerfAppCoverCmdCompleteNow )
hgs
parents:
diff changeset
   794
        {
hgs
parents:
diff changeset
   795
        const TInt KNumberOfExecutedMovements = 15;
hgs
parents:
diff changeset
   796
        if ( iCycleCount < KNumberOfExecutedMovements )
hgs
parents:
diff changeset
   797
            {
hgs
parents:
diff changeset
   798
            NextCycleL();
hgs
parents:
diff changeset
   799
            CompleteAfterL( KTransitionWaitTime );
hgs
parents:
diff changeset
   800
            }
hgs
parents:
diff changeset
   801
        else
hgs
parents:
diff changeset
   802
            {
hgs
parents:
diff changeset
   803
            CompleteNow( KErrNone );
hgs
parents:
diff changeset
   804
            }
hgs
parents:
diff changeset
   805
        
hgs
parents:
diff changeset
   806
        return ETrue;
hgs
parents:
diff changeset
   807
        }
hgs
parents:
diff changeset
   808
hgs
parents:
diff changeset
   809
    return CAlfControl::OfferEventL( aEvent );
hgs
parents:
diff changeset
   810
    }
hgs
parents:
diff changeset
   811
hgs
parents:
diff changeset
   812
void CAlfPerfAppCoverTestCaseControl::NextCycleL()
hgs
parents:
diff changeset
   813
    {
hgs
parents:
diff changeset
   814
    static const TReal32 movements[] = { -1, -1, -1, 1, 1, 1 }; 
hgs
parents:
diff changeset
   815
    const TInt size = 6; //sizeof movements;
hgs
parents:
diff changeset
   816
    const TInt index = iCycleCount % size;   
hgs
parents:
diff changeset
   817
        
hgs
parents:
diff changeset
   818
   
hgs
parents:
diff changeset
   819
    switch(CaseId())
hgs
parents:
diff changeset
   820
      {
hgs
parents:
diff changeset
   821
      case EAlfPerfAppCoverRotate:    
hgs
parents:
diff changeset
   822
          RotateImage( );
hgs
parents:
diff changeset
   823
          break;     
hgs
parents:
diff changeset
   824
      case EAlfPerfAppCover:
hgs
parents:
diff changeset
   825
      case EAlfPerfAppCoverLandscape:
hgs
parents:
diff changeset
   826
          MoveImages( movements[ index ] );   
hgs
parents:
diff changeset
   827
          UpdateScaling();  
hgs
parents:
diff changeset
   828
          break;
hgs
parents:
diff changeset
   829
      case EAlfPerfAppCoverClipZoomLargeImage:
hgs
parents:
diff changeset
   830
      case EAlfPerfAppCoverClipZoomBigImage:
hgs
parents:
diff changeset
   831
      case EAlfPerfAppCoverClipZoomVga:
hgs
parents:
diff changeset
   832
      case EAlfPerfAppCoverClipZoomAutoSize:
hgs
parents:
diff changeset
   833
          ClipandZoom();
hgs
parents:
diff changeset
   834
          break;
hgs
parents:
diff changeset
   835
      }
hgs
parents:
diff changeset
   836
    ++iCycleCount;
hgs
parents:
diff changeset
   837
    }
hgs
parents:
diff changeset
   838
hgs
parents:
diff changeset
   839
void CAlfPerfAppCoverTestCaseControl::MoveImages( 
hgs
parents:
diff changeset
   840
    TReal32 aAmount, 
hgs
parents:
diff changeset
   841
    TReal32 aTransitionTime )
hgs
parents:
diff changeset
   842
    {
hgs
parents:
diff changeset
   843
    iPreviousViewportPosition = iViewportPosition;
hgs
parents:
diff changeset
   844
    iViewportPosition -= aAmount;
hgs
parents:
diff changeset
   845
hgs
parents:
diff changeset
   846
    if ( iViewportPosition < 0 )
hgs
parents:
diff changeset
   847
        {
hgs
parents:
diff changeset
   848
        iViewportPosition = 0;                
hgs
parents:
diff changeset
   849
        }
hgs
parents:
diff changeset
   850
    else if ( iViewportPosition > ( KNumberOfImages - 1.0 ) )
hgs
parents:
diff changeset
   851
        {
hgs
parents:
diff changeset
   852
        iViewportPosition = KNumberOfImages - 1.0;    
hgs
parents:
diff changeset
   853
        }
hgs
parents:
diff changeset
   854
hgs
parents:
diff changeset
   855
    iViewport->SetViewportPos(
hgs
parents:
diff changeset
   856
        TAlfRealPoint( iViewportPosition + KViewportOffset, KViewportOffsetY ), 
hgs
parents:
diff changeset
   857
        aTransitionTime );
hgs
parents:
diff changeset
   858
    }
hgs
parents:
diff changeset
   859
hgs
parents:
diff changeset
   860
void CAlfPerfAppCoverTestCaseControl::UpdateScaling( 
hgs
parents:
diff changeset
   861
    TReal32 aTransitionTime )
hgs
parents:
diff changeset
   862
    {
hgs
parents:
diff changeset
   863
    const TInt current = RoundFloatToInt( iViewportPosition );
hgs
parents:
diff changeset
   864
    const TInt previous = RoundFloatToInt( iPreviousViewportPosition );
hgs
parents:
diff changeset
   865
        
hgs
parents:
diff changeset
   866
    if ( previous >= 0 )
hgs
parents:
diff changeset
   867
        {
hgs
parents:
diff changeset
   868
        CAlfVisual& currentVisual = iLayout->Visual( current );
hgs
parents:
diff changeset
   869
        CAlfVisual& previousVisual = iLayout->Visual( previous );
hgs
parents:
diff changeset
   870
hgs
parents:
diff changeset
   871
        TAlfTimedValue puller;
hgs
parents:
diff changeset
   872
        puller.SetValueNow( KSmallImageScale );
hgs
parents:
diff changeset
   873
        puller.SetTarget( KFocusedImageScale, aTransitionTime );
hgs
parents:
diff changeset
   874
        CAlfTransformation& enlarging = currentVisual.Transformation();
hgs
parents:
diff changeset
   875
        enlarging.LoadIdentity();
hgs
parents:
diff changeset
   876
        enlarging.Scale( puller, puller );
hgs
parents:
diff changeset
   877
hgs
parents:
diff changeset
   878
        TRAP_IGNORE(DownScaleImageL( previousVisual, aTransitionTime ));
hgs
parents:
diff changeset
   879
        }
hgs
parents:
diff changeset
   880
    }
hgs
parents:
diff changeset
   881
hgs
parents:
diff changeset
   882
void CAlfPerfAppCoverTestCaseControl::RotateImage( )
hgs
parents:
diff changeset
   883
    {    
hgs
parents:
diff changeset
   884
    TInt angle = KRotationAngle;
hgs
parents:
diff changeset
   885
    if ( iCycleCount%2 )
hgs
parents:
diff changeset
   886
        {
hgs
parents:
diff changeset
   887
        angle = -KRotationAngle;
hgs
parents:
diff changeset
   888
        }
hgs
parents:
diff changeset
   889
    
hgs
parents:
diff changeset
   890
    CAlfVisual& currentVisual = iLayout->Visual( 0 );   
hgs
parents:
diff changeset
   891
    TAlfTimedValue rotator;
hgs
parents:
diff changeset
   892
    rotator.SetValueNow( 0 );        
hgs
parents:
diff changeset
   893
    rotator.SetTarget( angle, KTransitionTime );
hgs
parents:
diff changeset
   894
    CAlfTransformation& rotation = currentVisual.Transformation();
hgs
parents:
diff changeset
   895
    rotation.LoadIdentity();
hgs
parents:
diff changeset
   896
    rotation.Rotate( rotator );                
hgs
parents:
diff changeset
   897
    }
hgs
parents:
diff changeset
   898
hgs
parents:
diff changeset
   899
void CAlfPerfAppCoverTestCaseControl::ClipandZoom( )
hgs
parents:
diff changeset
   900
    {    
hgs
parents:
diff changeset
   901
    CAlfLayout& layout = static_cast< CAlfLayout& >( iLayout->Visual( 0 ) );
hgs
parents:
diff changeset
   902
    CAlfVisual& imgVisual = layout.Visual( 0 );
hgs
parents:
diff changeset
   903
    imgVisual.Move( TAlfRealPoint( -5, -5 ),  KTransitionTime);
hgs
parents:
diff changeset
   904
    
hgs
parents:
diff changeset
   905
    TAlfTimedValue scaler;
hgs
parents:
diff changeset
   906
    scaler.SetValueNow( KFocusedImageScale *  ( iCycleCount + 1 ) );
hgs
parents:
diff changeset
   907
    scaler.SetTarget( KFocusedImageScale *  ( iCycleCount + 2 ) , KTransitionTime );
hgs
parents:
diff changeset
   908
    CAlfTransformation& enlarging = layout.Transformation();
hgs
parents:
diff changeset
   909
    enlarging.LoadIdentity();
hgs
parents:
diff changeset
   910
    enlarging.Scale( scaler, scaler );  
hgs
parents:
diff changeset
   911
    }
hgs
parents:
diff changeset
   912
hgs
parents:
diff changeset
   913
TInt CAlfPerfAppCoverTestCaseControl::RoundFloatToInt( TReal32 aVal )
hgs
parents:
diff changeset
   914
    {
hgs
parents:
diff changeset
   915
    return aVal < 0 ? (TInt)( aVal - 0.5f ) : (TInt)( aVal + 0.5f );
hgs
parents:
diff changeset
   916
    }    
hgs
parents:
diff changeset
   917
hgs
parents:
diff changeset
   918
void CAlfPerfAppCoverTestCaseControl::CompleteAfterL( TInt aDuration )
hgs
parents:
diff changeset
   919
    {
hgs
parents:
diff changeset
   920
    // In order to use this service, base class StartExecuteL must
hgs
parents:
diff changeset
   921
    // have been called.
hgs
parents:
diff changeset
   922
    __ASSERT_ALWAYS( iStatus, User::Invariant() );
hgs
parents:
diff changeset
   923
    
hgs
parents:
diff changeset
   924
    TAlfCustomEventCommand command( KAlfPerfAppCoverCmdCompleteNow, this );
hgs
parents:
diff changeset
   925
    User::LeaveIfError( Env().Send( command, aDuration ) );
hgs
parents:
diff changeset
   926
    }
hgs
parents:
diff changeset
   927
        
hgs
parents:
diff changeset
   928
void CAlfPerfAppCoverTestCaseControl::CompleteNow( TInt aErrorCode )
hgs
parents:
diff changeset
   929
    {
hgs
parents:
diff changeset
   930
    if ( iStatus )
hgs
parents:
diff changeset
   931
        {
hgs
parents:
diff changeset
   932
        User::RequestComplete( iStatus, aErrorCode );
hgs
parents:
diff changeset
   933
        iStatus = NULL;
hgs
parents:
diff changeset
   934
        }
hgs
parents:
diff changeset
   935
    }
hgs
parents:
diff changeset
   936
hgs
parents:
diff changeset
   937
inline TInt CAlfPerfAppCoverTestCaseControl::CaseId() const
hgs
parents:
diff changeset
   938
    {
hgs
parents:
diff changeset
   939
    return iCaseId;
hgs
parents:
diff changeset
   940
    }
hgs
parents:
diff changeset
   941
hgs
parents:
diff changeset
   942
inline TBool CAlfPerfAppCoverTestCaseControl::IsExecutionOngoing() const
hgs
parents:
diff changeset
   943
    {
hgs
parents:
diff changeset
   944
    return ( iStatus != NULL );
hgs
parents:
diff changeset
   945
    }
hgs
parents:
diff changeset
   946
hgs
parents:
diff changeset
   947
hgs
parents:
diff changeset
   948