lafagnosticuifoundation/animation/tef/TFrames.cpp
changeset 0 2f259fa3e83a
child 12 941195f2d488
equal deleted inserted replaced
-1:000000000000 0:2f259fa3e83a
       
     1 // Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 //
       
    15 
       
    16 /**
       
    17  @file
       
    18  @internalComponent - Internal Symbian test code 
       
    19 */
       
    20 
       
    21 
       
    22 #include "TFrames.h"
       
    23 #include "AnimationConfig.h"
       
    24 #include "AnimationTestServer.h"
       
    25 
       
    26 _LIT(KSquares1File, "Z:\\private\\10204F5B\\sqdisp1.gif");
       
    27 _LIT(KSquares1MbmFile, "Z:\\private\\10204F5B\\sqdisp1.mbm");
       
    28 _LIT(KSquares2File, "Z:\\private\\10204F5B\\sqdisp2.gif");
       
    29 _LIT(KSquares2MbmFile, "Z:\\private\\10204F5B\\sqdisp2.mbm");
       
    30 _LIT(KSquares3File, "Z:\\private\\10204F5B\\previous.gif");
       
    31 _LIT(KSquares3MbmFile, "Z:\\private\\10204F5B\\previous.mbm");
       
    32 // These two pairs of files are commented pending defect fixes.
       
    33 // See comments in doACtiveTestStepL
       
    34 //_LIT(KDisposalFile, "Z:\\private\\10204F5B\\disposal.gif");
       
    35 //_LIT(KDisposalMbmFile, "Z:\\private\\10204F5B\\disposal.mbm");
       
    36 //_LIT(KMovingFile, "Z:\\private\\10204F5B\\moving.gif");
       
    37 //_LIT(KMovingMbmFile, "Z:\\private\\10204F5B\\moving.mbm");
       
    38 
       
    39 const TInt KFramesWindowHeight = 32;
       
    40 const TInt KFramesFrameLength = 100000;
       
    41 
       
    42 //
       
    43 // Windows:
       
    44 //
       
    45 CFramesTestWindow::CFramesTestWindow(RWsSession& aWsSession, CTestWindowGroup& aGroup, CWindowGc& aGc) : CTestWindow(aWsSession, aGroup, aGc)
       
    46 	{
       
    47 	}
       
    48 	
       
    49 void CFramesTestWindow::DrawL()
       
    50 	{
       
    51 	iGc.Reset();
       
    52 	if (iOpaque)
       
    53 		iGc.SetOpaque(ETrue);
       
    54 	if (iLined)
       
    55 		{
       
    56 		for (TInt row = 0; row < KFramesWindowHeight; row += 4)
       
    57 			{
       
    58 			iGc.SetPenColor(0x00FF00);
       
    59 			iGc.SetPenSize(TSize(2,2));
       
    60 			iGc.SetPenStyle(CGraphicsContext::ESolidPen);
       
    61 			iGc.DrawLine(TPoint(0, row), TPoint(400,row));
       
    62 			}		
       
    63 		}
       
    64 	}
       
    65 
       
    66 CFramesAnimationWindow::CFramesAnimationWindow(RWsSession& aWsSession, CTestWindowGroup& aGroup, CWindowGc& aGc) : CFramesTestWindow(aWsSession, aGroup, aGc)
       
    67 	{
       
    68 	}
       
    69 
       
    70 void CFramesAnimationWindow::SetAnimations(RPointerArray<CAnimation>* aAnimations, TBool aBasic)
       
    71 	{
       
    72 	iBasicAnimations = aBasic;
       
    73 	iAnimations = aAnimations;
       
    74 	}
       
    75 
       
    76 void CFramesAnimationWindow::DrawL()
       
    77 	{
       
    78 	CFramesTestWindow::DrawL();
       
    79 	if(iBasicAnimations && iAnimations && iAnimations->Count())
       
    80 		{
       
    81 		for (TInt frame = 0; frame < iAnimations->Count(); ++frame)
       
    82 			{
       
    83 			static_cast<CBasicAnimation*>((*iAnimations)[frame])->Draw(iGc);
       
    84 			}
       
    85 		}
       
    86 	}
       
    87 	
       
    88 CFramesFrameWindow::CFramesFrameWindow(RWsSession& aWsSession, CTestWindowGroup& aGroup, CWindowGc& aGc) :
       
    89 CFramesTestWindow(aWsSession, aGroup, aGc)
       
    90 	{
       
    91 	}
       
    92 
       
    93 CFramesFrameWindow::~CFramesFrameWindow()
       
    94 	{
       
    95 	FreeData();
       
    96 	}
       
    97 
       
    98 void CFramesFrameWindow::FreeData()
       
    99 	{
       
   100 	iFrames.ResetAndDestroy();
       
   101 	iMasks.ResetAndDestroy();
       
   102 	}
       
   103 	
       
   104 void CFramesFrameWindow::DrawL()
       
   105 	{
       
   106 	CFramesTestWindow::DrawL();
       
   107 	if (iFrames.Count())
       
   108 		{
       
   109 		TPoint pos(0,0);
       
   110 		TSize size = iFrames[0]->SizeInPixels();	
       
   111 		
       
   112 		for (TInt frame = 0; frame < iFrames.Count(); ++frame)
       
   113 			{
       
   114 			iGc.BitBltMasked(pos, iFrames[frame], size, iMasks[frame], EFalse);
       
   115 			pos.iX += size.iWidth;
       
   116 			}
       
   117 		iGc.BitBltMasked(pos, iFrames[0], size, iMasks[0], EFalse);
       
   118 		pos.iX += size.iWidth;
       
   119 		iGc.BitBltMasked(pos, iFrames[1], size, iMasks[1], EFalse);
       
   120 		pos.iX += size.iWidth;
       
   121 		iGc.BitBltMasked(pos, iFrames[iFrames.Count() - 1], size, iMasks[iFrames.Count() - 1], EFalse);
       
   122 		}
       
   123 	}
       
   124 
       
   125 TInt CFramesFrameWindow::LoadL(const TDesC& aFile)
       
   126 	{
       
   127 	FreeData();
       
   128 	
       
   129 	TInt num = 0;
       
   130 	TInt err = KErrNone;
       
   131 	CFbsBitmap* frame;
       
   132 	CFbsBitmap* mask;
       
   133 	while(err == KErrNone)
       
   134 		{
       
   135 		frame = new (ELeave) CFbsBitmap;
       
   136 		CleanupStack::PushL(frame);
       
   137 		mask = new (ELeave) CFbsBitmap;
       
   138 		CleanupStack::PushL(mask);
       
   139 		err = frame->Load(aFile,num * 2);
       
   140 		if (!err)
       
   141 			{
       
   142 			User::LeaveIfError(mask->Load(aFile,num * 2 + 1));
       
   143 			User::LeaveIfError(iMasks.Append(mask));
       
   144 			CleanupStack::Pop(mask);
       
   145 			User::LeaveIfError(iFrames.Append(frame));
       
   146 			CleanupStack::Pop(frame);
       
   147 			++num;
       
   148 			}
       
   149 		}
       
   150 	CleanupStack::PopAndDestroy(mask);
       
   151 	CleanupStack::PopAndDestroy(frame);
       
   152 	if (err != KErrEof)
       
   153 		User::LeaveIfError(err);
       
   154 	Window()->Invalidate();
       
   155 	return num;
       
   156 	}
       
   157 
       
   158 //
       
   159 // The test:
       
   160 //
       
   161 CFrames::CFrames()
       
   162 	{
       
   163 	SetTestStepName(KFramesStep);
       
   164 	}
       
   165 	
       
   166 CFrames::~CFrames()
       
   167 	{
       
   168 	iBasicAnimations.ResetAndDestroy();
       
   169 	iSpriteAnimations.ResetAndDestroy();
       
   170 	delete iBasicAnimWin;
       
   171 	delete iSpriteAnimWin;
       
   172 	delete iTransBasicAnimWin;
       
   173 	delete iTransSpriteAnimWin;
       
   174 	delete iFrameWin;
       
   175 	delete iTransFrameWin;
       
   176 	}
       
   177 	
       
   178 void CFrames::InitialiseL()
       
   179 	{
       
   180 	CAnimationTestStep::InitialiseL();
       
   181 	
       
   182 	ANIM_INFO1(_L("Begin test FRAMES"));
       
   183 
       
   184 	TInt winborder = 2;
       
   185 	iWinSize = Screen()->SizeInPixels();
       
   186 	iWinSize.iWidth /= 2;
       
   187 	iWinSize.iHeight = KFramesWindowHeight + winborder * 2;
       
   188 	iBasicAnimWinPosition = TPoint(iWinSize.iWidth + winborder,winborder);
       
   189 	iSpriteAnimWinPosition = TPoint(iBasicAnimWinPosition.iX, iBasicAnimWinPosition.iY + iWinSize.iHeight + winborder);
       
   190 	iFrameWinPosition = TPoint(iSpriteAnimWinPosition.iX, iSpriteAnimWinPosition.iY + iWinSize.iHeight + winborder);
       
   191 	iWinSize.iWidth -= winborder * 2;
       
   192 	iWinSize.iHeight -= winborder * 2;
       
   193 
       
   194 	iBasicAnimWin = new (ELeave) CFramesAnimationWindow(Ws(), *GroupWin(), *Gc());
       
   195 	iBasicAnimWin->Window()->SetRequiredDisplayMode(iDisplayMode);
       
   196 	iBasicAnimWin->Window()->SetExtent(iBasicAnimWinPosition, iWinSize);
       
   197 	iBasicAnimWin->Window()->SetBackgroundColor(iBackgroundColor1);
       
   198 	iBasicAnimWin->Window()->SetVisible(ETrue);
       
   199 	iBasicAnimWin->Window()->Activate();
       
   200 	
       
   201 	iTransBasicAnimWin = new (ELeave) CFramesAnimationWindow(Ws(), *GroupWin(), *Gc());
       
   202 	iTransBasicAnimWin->Window()->SetTransparencyFactor(0x808080);
       
   203 	iTransBasicAnimWin->Window()->SetRequiredDisplayMode(iDisplayMode);
       
   204 	iTransBasicAnimWin->Window()->SetExtent(iBasicAnimWinPosition, iWinSize);
       
   205 	iTransBasicAnimWin->Window()->SetBackgroundColor(iBackgroundColor2);
       
   206 	iTransBasicAnimWin->Window()->SetVisible(EFalse);
       
   207 	iTransBasicAnimWin->Window()->Activate();
       
   208 
       
   209 	iSpriteAnimWin = new (ELeave) CFramesAnimationWindow(Ws(), *GroupWin(), *Gc());
       
   210 	iSpriteAnimWin->Window()->SetRequiredDisplayMode(iDisplayMode);
       
   211 	iSpriteAnimWin->Window()->SetExtent(iSpriteAnimWinPosition, iWinSize);
       
   212 	iSpriteAnimWin->Window()->SetBackgroundColor(iBackgroundColor1);
       
   213 	iSpriteAnimWin->Window()->SetVisible(ETrue);
       
   214 	iSpriteAnimWin->Window()->Activate();
       
   215 	
       
   216 	iTransSpriteAnimWin = new (ELeave) CFramesAnimationWindow(Ws(), *GroupWin(), *Gc());
       
   217 	iTransSpriteAnimWin->Window()->SetTransparencyFactor(0x808080);
       
   218 	iTransSpriteAnimWin->Window()->SetRequiredDisplayMode(iDisplayMode);
       
   219 	iTransSpriteAnimWin->Window()->SetExtent(iSpriteAnimWinPosition, iWinSize);
       
   220 	iTransSpriteAnimWin->Window()->SetBackgroundColor(iBackgroundColor2);
       
   221 	iTransSpriteAnimWin->Window()->SetVisible(EFalse);
       
   222 	iTransSpriteAnimWin->Window()->Activate();
       
   223 
       
   224 	iFrameWin = new (ELeave) CFramesFrameWindow(Ws(), *GroupWin(), *Gc());
       
   225 	iFrameWin->Window()->SetRequiredDisplayMode(iDisplayMode);
       
   226 	iFrameWin->Window()->SetExtent(iFrameWinPosition, iWinSize);
       
   227 	iFrameWin->Window()->SetBackgroundColor(iBackgroundColor1);
       
   228 	iFrameWin->Window()->SetVisible(ETrue);
       
   229 	iFrameWin->Window()->Activate();
       
   230 
       
   231 	iTransFrameWin = new (ELeave) CFramesFrameWindow(Ws(), *GroupWin(), *Gc());
       
   232 	iTransFrameWin->Window()->SetTransparencyFactor(0x808080);
       
   233 	iTransFrameWin->Window()->SetRequiredDisplayMode(iDisplayMode);
       
   234 	iTransFrameWin->Window()->SetExtent(iFrameWinPosition, iWinSize);
       
   235 	iTransFrameWin->Window()->SetBackgroundColor(iBackgroundColor2);
       
   236 	iTransFrameWin->Window()->SetVisible(EFalse);
       
   237 	iTransFrameWin->Window()->Activate();
       
   238 
       
   239 	}
       
   240 
       
   241 /**
       
   242 	@SYMTestCaseID UIF-animation-TFrames-TestFramesL
       
   243 
       
   244 	@SYMTestCaseDesc 
       
   245 	This tests basic animation and sprite animation with frames.
       
   246 
       
   247 	@SYMPREQ 269
       
   248 
       
   249 	@SYMTestStatus Implemented
       
   250 
       
   251 	@SYMTestPriority High
       
   252 
       
   253 	@SYMTestActions 
       
   254 	The animation windows are initialised.  Then basic and sprite animations are
       
   255 	started, the program waits for the animations to finish, and finally the output checked.
       
   256 
       
   257 	@SYMTestExpectedResults Pass
       
   258 
       
   259 */
       
   260 void CFrames::TestFramesL(TInt aFlags)
       
   261 	{
       
   262 	iBasicAnimWin->Window()->Invalidate();
       
   263 	iTransBasicAnimWin->Window()->Invalidate();
       
   264 	iSpriteAnimWin->Window()->Invalidate();
       
   265 	iTransSpriteAnimWin->Window()->Invalidate();
       
   266 	iFrameWin->Window()->Invalidate();
       
   267 	iTransFrameWin->Window()->Invalidate();
       
   268 	Ws().Flush();
       
   269 	WaitForRedrawsToFinish();
       
   270 	
       
   271 	// Start the animations:
       
   272 	TAnimationConfig config;
       
   273 	config.iFlags = TAnimationConfig::ELoop | TAnimationConfig::ECountFrames;
       
   274 	
       
   275 	TInt frameCount = iBasicAnimations.Count() - 3;
       
   276 	
       
   277 	for (TInt frame = 0; frame < iBasicAnimations.Count(); ++frame)
       
   278 		{
       
   279 		// Some special cases:
       
   280 		switch(frame - frameCount)
       
   281 			{
       
   282 			case 2:
       
   283 				config.iFlags |= TAnimationConfig::EEndOnLastFrame;
       
   284 				config.iData = frameCount;
       
   285 				break;
       
   286 			default:
       
   287 				config.iData = frame;
       
   288 				break;
       
   289 			}
       
   290 		iBasicAnimations[frame]->Start(config);
       
   291 		iSpriteAnimations[frame]->Start(config);
       
   292 		}
       
   293 	
       
   294 	// Why * 4? because we seem to go very slowly?
       
   295 	Wait(KFramesFrameLength * iBasicAnimations.Count() * 4);
       
   296 
       
   297 	// Verify output:
       
   298 	WaitForRedrawsToFinish();
       
   299 	ANIMTESTRECT(TRect(iBasicAnimWinPosition, iWinSize), TRect(iFrameWinPosition, iWinSize));
       
   300 	if(!(aFlags & ENoSprites))
       
   301 		ANIMTESTRECT(TRect(iSpriteAnimWinPosition, iWinSize), TRect(iFrameWinPosition, iWinSize));
       
   302 	}
       
   303 /**
       
   304 	@SYMTestCaseID UIF-animation-TFrames-TestFramesL2
       
   305 
       
   306 	@SYMTestCaseDesc 
       
   307 	This tests basic animation and sprite animation with frames.  
       
   308 
       
   309 	@SYMPREQ 269
       
   310 
       
   311 	@SYMTestStatus Implemented
       
   312 
       
   313 	@SYMTestPriority High
       
   314 
       
   315 	@SYMTestActions 
       
   316 	The animation windows are initialised.  This function is used to set up tests by TestFramesL by
       
   317 	initializing basic and sprite animations for a sequence of frames.
       
   318 
       
   319 	@SYMTestExpectedResults Tests performed by TestFramesL.
       
   320 
       
   321 */
       
   322 void CFrames::TestFramesL(CFramesAnimationWindow& aBasicAnimWin, CFramesAnimationWindow& aSpriteAnimWin, const TDesC& aFile, CFramesFrameWindow& aFrameWin, const TDesC& aMbm, TInt aFlags)
       
   323 	{
       
   324 	iBasicAnimations.ResetAndDestroy();
       
   325 	iSpriteAnimations.ResetAndDestroy();
       
   326 	// Load the MBM file into the frame window:
       
   327 	TInt num = aFrameWin.LoadL(aMbm);
       
   328 	TSize size = aFrameWin.Size();
       
   329 	// Load the animation file multiple times:
       
   330 	CICLAnimationDataProvider * dataProvider;
       
   331 
       
   332 	// num + 3 = every frame, 2 more looped past the end, and 1 special case
       
   333 	for(TInt frame = 0; frame < num + 3; ++frame)
       
   334 		{
       
   335 		CAnimation* anim;
       
   336 		
       
   337 		dataProvider=new (ELeave) CICLAnimationDataProvider;
       
   338 		CleanupStack::PushL(dataProvider);
       
   339 		dataProvider->SetFileL(iFs, aFile);
       
   340 		CleanupStack::Pop(dataProvider);
       
   341 		anim = CBasicAnimation::NewL(dataProvider, TPoint((size.iWidth * frame), 0), Ws(), *aBasicAnimWin.Window());
       
   342 		CleanupStack::PushL(anim);
       
   343 		User::LeaveIfError(iBasicAnimations.Append(anim));
       
   344 		CleanupStack::Pop(anim);
       
   345 
       
   346 		dataProvider=new (ELeave) CICLAnimationDataProvider;
       
   347 		CleanupStack::PushL(dataProvider);
       
   348 		dataProvider->SetFileL(iFs, aFile);
       
   349 		CleanupStack::Pop(dataProvider);
       
   350 		anim = CSpriteAnimation::NewL(dataProvider, TPoint((size.iWidth * frame), 0), Ws(), *aSpriteAnimWin.Window());
       
   351 		CleanupStack::PushL(anim);
       
   352 		User::LeaveIfError(iSpriteAnimations.Append(anim));
       
   353 		CleanupStack::Pop(anim);
       
   354 		}
       
   355 
       
   356 	Wait(2000000); // wait for loading to complete
       
   357 	// Give the animations to the animation window:
       
   358 	aBasicAnimWin.SetAnimations(&iBasicAnimations, ETrue);
       
   359 	aSpriteAnimWin.SetAnimations(&iSpriteAnimations, EFalse);
       
   360 
       
   361 	TestFramesL(aFlags);
       
   362 	}
       
   363 
       
   364 void CFrames::TestFramesL(const TDesC& aFile, const TDesC& aMbm, TInt aFlags)
       
   365 	{
       
   366 	TestFramesL(*iBasicAnimWin, *iSpriteAnimWin, aFile, *iFrameWin, aMbm, aFlags);
       
   367 	}
       
   368 
       
   369 /**
       
   370 	@SYMTestCaseID UIF-animation-TFrames-doActiveTestStepL
       
   371 
       
   372 	@SYMTestCaseDesc 
       
   373 	This tests basic animation and sprite animation with frames.  
       
   374 
       
   375 	@SYMPREQ 269
       
   376 
       
   377 	@SYMTestStatus Implemented
       
   378 
       
   379 	@SYMTestPriority High
       
   380 
       
   381 	@SYMTestActions 
       
   382 	The animation windows are initialized.  This function is used to set up tests by function TestFramesL. 
       
   383 	To begin three different squares files are used, with different disposal methods. Then testing is performed
       
   384 	under a transparent window, on a transparent window, and using opaque windows.
       
   385 
       
   386 	@SYMTestExpectedResults Testing performed by TestFramesL.
       
   387 
       
   388 */	
       
   389 TVerdict CFrames::doActiveTestStepL()
       
   390 	{
       
   391 	_LIT(KTestMethod1, "Test disposal method 1");
       
   392 	_LIT(KTestMethod2, "Test disposal method 2");
       
   393 	_LIT(KTestMethod3, "Test disposal method 3");
       
   394 	_LIT(KTestMasked, "Test disposal methods on masked images");
       
   395 	_LIT(KTestMoving, "Test a small moving image");
       
   396 	_LIT(KTestUnderTransparent, "Test under a transparent window");
       
   397 	_LIT(KTestOnTransparent, "Test on a transparent window");
       
   398 	_LIT(KTestOpaque, "Test opaque animation on a transparent window");
       
   399 	
       
   400 	InitialiseL();
       
   401 	
       
   402 	TInt stage = 0;
       
   403 	TBool finished = false;
       
   404 	SetTestStepID(_L("UIF-animation-TFrames-TestFramesL"));
       
   405 	while(TestStepResult() == EPass && !finished)
       
   406 		{
       
   407 		switch(stage)
       
   408 			{
       
   409 			case 0:
       
   410 				ANIM_INFO1(KTestMethod1);
       
   411 				TestFramesL(KSquares1File, KSquares1MbmFile);
       
   412 				break;
       
   413 			case 1:
       
   414 				ANIM_INFO1(KTestMethod2);
       
   415 				TestFramesL(KSquares2File, KSquares2MbmFile);
       
   416 				break;
       
   417 			case 2:
       
   418 				ANIM_INFO1(KTestMethod3);
       
   419 				TestFramesL(KSquares3File, KSquares3MbmFile);
       
   420 				break;
       
   421 			case 3:
       
   422 				ANIM_INFO1(KTestMasked);
       
   423 				// Skip this test - I think the failure is caused by a disposal method of RestoreToPrevious
       
   424 				// on an image which is smaller than the full animation, and which is immediately after an
       
   425 				// image with a disposal method of RestoreToBackground.  However, I am not sure if it is this
       
   426 				// code which is wrong, or the bitmaps to which the output is being compared.
       
   427 				// Web browsers generally agree with the bitmaps, but not with the original GIF specification.
       
   428 				// TestFramesL(KDisposalFile, KDisposalMbmFile); 
       
   429 				break;
       
   430 			case 4:
       
   431 				ANIM_INFO1(KTestMoving);
       
   432 				// ## Skip this too - defect against ICL because first frame is the wrong size and shape?
       
   433 				// ## See DEF050484
       
   434 				//TestFramesL(KMovingFile, KMovingMbmFile);
       
   435 				stage = 100; // Do transparency last so we don't have to keep setting the windows up.
       
   436 				break;
       
   437 			case 101:
       
   438 				ANIM_INFO1(KTestUnderTransparent);
       
   439 				iTransBasicAnimWin->Window()->SetVisible(ETrue);
       
   440 				iTransSpriteAnimWin->Window()->SetVisible(ETrue);
       
   441 				iTransFrameWin->Window()->SetVisible(ETrue);
       
   442 				iTransBasicAnimWin->SetLined(ETrue);
       
   443 				iTransSpriteAnimWin->SetLined(ETrue);
       
   444 				iTransFrameWin->SetLined(ETrue);
       
   445 				TestFramesL(KSquares1File, KSquares1MbmFile, ENoSprites);
       
   446 				break;
       
   447 			case 102:
       
   448 				ANIM_INFO1(KTestOnTransparent);
       
   449 				iTransBasicAnimWin->SetLined(EFalse);
       
   450 				iTransSpriteAnimWin->SetLined(EFalse);
       
   451 				iBasicAnimWin->SetAnimations(0);
       
   452 				iSpriteAnimWin->SetAnimations(0);
       
   453 				iBasicAnimWin->SetLined(ETrue);
       
   454 				iSpriteAnimWin->SetLined(ETrue);
       
   455 				iTransFrameWin->SetLined(EFalse);
       
   456 				iFrameWin->FreeData();
       
   457 				iFrameWin->SetLined(ETrue);
       
   458 				TestFramesL(*iTransBasicAnimWin, *iTransSpriteAnimWin, KSquares2File, *iTransFrameWin, KSquares2MbmFile, ENoSprites);
       
   459 				break;
       
   460 			case 103:
       
   461 				ANIM_INFO1(KTestOpaque);
       
   462 				iTransBasicAnimWin->SetOpaque(ETrue);
       
   463 				iTransSpriteAnimWin->SetOpaque(ETrue);
       
   464 				iTransFrameWin->SetOpaque(ETrue);
       
   465 				TestFramesL(ENoSprites);
       
   466 				break;
       
   467 			default:
       
   468 				finished = ETrue;
       
   469 			}
       
   470 		++stage;
       
   471 		}
       
   472 
       
   473 	RecordTestResultL();
       
   474 	CloseTMSGraphicsStep();
       
   475 
       
   476 	return TestStepResult();
       
   477 	}
       
   478