windowing/windowserver/tauto/TFADINGBITMAP.CPP
author Faisal Memon <faisal.memon@nokia.com>
Thu, 06 May 2010 11:31:11 +0100
branchNewGraphicsArchitecture
changeset 47 48b924ae7197
parent 0 5d03bc08d59c
permissions -rw-r--r--
Applied patch 1, to provide a syborg specific minigui oby file. Need to compare this with the "stripped" version currently in the tree. This supplied version applies for Nokia builds, but need to repeat the test for SF builds to see if pruning is needed, or if the file needs to be device-specific.

// Copyright (c) 2006-2009 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:
// The fix enables the fading effect with alpha-blending, which was not applied bofore.
// The test will load a bitmap and two different masks: on/off and alpha-blend.
// The bitmap will be masked with these masks and displayed before and after
// setting the fading effect.
// All different colour modes are being tested for both mask types.
// The test will check the colour of a specific pixel in the scene before and after the
// fading. The higher values in the After circle means that it has been highlighted.
// The result will be printed in wstest log file.
// 
//

/**
 @file
 @test
 @internalComponent - Internal Symbian test code
*/

#include "TFADINGBITMAP.H"

//===================================================
// CBaseWin Declaration
//===================================================

CBaseWin::CBaseWin(): CTWin()
	{
	}

CBaseWin::~CBaseWin()
	{
	delete iTempBitmap;
	delete iMaskGray256;
	delete iMaskGray2;
	delete iTempMask;
	delete iBitmap;
	}

void CBaseWin::ConstructWinL(TPoint aPos, TSize aSize, TBool aVisible)
	{	
	/*** Setting up the window ***/
	iSize = aSize;
	SetUpL(aPos, aSize, TheClient->iGroup, *TheClient->iGc, aVisible);
	Win()->SetBackgroundColor(TRgb(20, 80, 20));	// dark green background
	BaseWin()->SetRequiredDisplayMode(EColor64K);

	/*** 24 bit bitmap ***/
	// the original 24b bitmap to mask
	iTempBitmap = new (ELeave) CFbsBitmap();
	User::LeaveIfError(iTempBitmap->Load(_L("Z:\\WSTEST\\WSAUTOTEST.MBM"), EMbmWsautotestCircles24b));
	iBitmap = new (ELeave) CFbsBitmap();

	/*** on/off mask ***/
	iMaskGray2 = new (ELeave) CFbsBitmap();
	User::LeaveIfError(iMaskGray2->Load(_L("Z:\\WSTEST\\WSAUTOTEST.MBM"), EMbmWsautotestCircles_mask2b));

	/*** alpha-blend mask ***/
	// holds the 24bit copy of the alpha blend mask which will be 
	// copied into the proper Gray256 mask, iMaskGray256.
	iTempMask = new (ELeave) CFbsBitmap();
	User::LeaveIfError(iTempMask->Load(_L("Z:\\WSTEST\\WSAUTOTEST.MBM"), EMbmWsautotestCircles_mask256));	
	// alpha blend mask; copying its data from iTempMask
	iMaskGray256 = new (ELeave) CFbsBitmap();
	User::LeaveIfError(iMaskGray256->Create(iTempBitmap->SizeInPixels(),EGray256));
	CFbsBitmapDevice *dev = CFbsBitmapDevice::NewL(iMaskGray256);
	CleanupStack::PushL(dev);
	CFbsBitGc *gc;
	User::LeaveIfError(dev->CreateContext(gc));
	// performing the copying here
	gc->BitBlt(TPoint(0,0), iTempMask);
	// cleaning up
	CleanupStack::Pop();
	delete gc;
	gc = NULL;	
	delete dev;
	dev = NULL;	
	}

void CBaseWin::Draw()
	{
	iGc->Clear();

	// Font intialization
	CFont* myFont;    	
	_LIT(KMyFontName,"Swiss");
	TFontSpec myFontSpec = TFontSpec(KMyFontName,16); // to get smallest Swiss font
	TFontStyle style = TFontStyle (EPostureUpright, EStrokeWeightBold,   EPrintPosNormal);
	myFontSpec.iFontStyle = style;
	User::LeaveIfError(TheClient->iScreen->GetNearestFontInPixels(myFont, myFontSpec));
	iGc->UseFont(myFont);
	iGc->SetPenStyle(CGraphicsContext::ESolidPen);
	iGc->SetPenColor(TRgb(255, 255, 255));
	
	// drawing text
	iGc->DrawText(_L("Fading = OFF"), TPoint(130,15));
	iGc->DrawText(_L("Fading = ON"),  TPoint(275,15));
	iGc->DrawText(_L("Alpha blend"), TPoint(15,90));
	iGc->DrawText(_L("on/off mask"),  TPoint(15,190));
	TBuf <30> displayMode(_L("Display Mode = "));
	displayMode.Append(iMode);	
	iGc->DrawText(displayMode, TPoint(385,100));		
	
	/*** drawing bitmap with its on/off mask and alpha-blending 
		 before and after fading ***/
	iGc->BitBltMasked(TPoint(140,25), iBitmap, 
						   TRect(0,0,100,100), iMaskGray256, EFalse);	
	// Save the pixel colour of a pixel on the outer ring of the circle 
	// before fading enabled.
	TheClient->iScreen->GetPixel(iNonFadedPixel, TPoint(190,30));	

	iGc->SetFaded(ETrue);
	iGc->BitBltMasked(TPoint(270,25), iBitmap, 
						   TRect(0,0,100,100), iMaskGray256, EFalse);
	// Save the pixel colour of a pixel on the outer ring of the circle 
	// after fading enabled.
	TheClient->iScreen->GetPixel(iFadedPixel, TPoint(320,30));	

	iGc->SetFaded(EFalse);
	
	iGc->BitBltMasked(TPoint(140,125), iBitmap, 
						   TRect(0,0,100,100), iMaskGray2, EFalse);
	iGc->SetFaded(ETrue);
	iGc->BitBltMasked(TPoint(270,125), iBitmap, 
						   TRect(0,0,100,100), iMaskGray2, EFalse);
	iGc->SetFaded(EFalse);

	iGc->DiscardFont();
	TheClient->iScreen->ReleaseFont(myFont);
	}


//===================================================
// CTFadingBitmap Definition
//===================================================

CTFadingBitmap::CTFadingBitmap(CTestStep* aStep):
	CTWsGraphicsBase(aStep), iTestResult(ETrue)
	{
	}

CTFadingBitmap::~CTFadingBitmap()
	{
	delete iBgWin;
	}

void CTFadingBitmap::TestFadingL()
	{
	// Modes to test
	TDisplayMode modes[] = 
		{
		EGray2, EGray4, EGray16, EGray256, 
		EColor16, EColor256, EColor4K, EColor64K, 
		EColor16M, EColor16MU, EColor16MA, EColor16MAP   
		};
	
	TBuf <12> modesTxt []= 
		{
		_L("EGray2"), _L("EGray4"), _L("EGray16"), _L("EGray256"), 
		_L("EColor16"), _L("EColor256"), _L("EColor4K"), _L("EColor64K"), 
		_L("EColor16M"), _L("EColor16MU"), _L("EColor16MA"), _L("EColor16MAP")
		};
	
	TBuf <100> testTxt;		 
	for( int i = 0; i < 12; i++)
		{
		testTxt.Format(modesTxt[i]);
		INFO_PRINTF1(testTxt);
		// Here we copy the content of the temp bitmap, which holds the test bitmap,
		// into the bitmap created with alternating color depths.
		User::LeaveIfError(iBgWin->iBitmap->Create(iBgWin->iTempBitmap->SizeInPixels(), modes[i]));
		CFbsBitmapDevice *dev = CFbsBitmapDevice::NewL(iBgWin->iBitmap);
		CleanupStack::PushL(dev);
		CFbsBitGc *gc;
		User::LeaveIfError(dev->CreateContext(gc));
		// performing the copying here
		gc->BitBlt(TPoint(0,0), iBgWin->iTempBitmap);
		// setting the mode text to display it
		iBgWin->iMode = modesTxt[i];
		// draws the bitmap on screen 
		iBgWin->DrawNow();
		TheClient->Flush();
		User::After(5000);
		// cleaning up		
		CleanupStack::Pop();
		delete gc;
		gc = NULL;	
		delete dev;
		dev = NULL;		
		
		// Here the colours of pixels before and after fading are printed in wstest log
		testTxt.Format(_L("Nonfaded circle - color of the outside ring: R=%d G=%d B=%d"), iBgWin->iNonFadedPixel.Red(), iBgWin->iNonFadedPixel.Green(), iBgWin->iNonFadedPixel.Blue());
		INFO_PRINTF1(testTxt);
		testTxt.Format(_L("Faded circle  - color of the outside ring: R=%d G=%d B=%d"), iBgWin->iFadedPixel.Red(), iBgWin->iFadedPixel.Green(), iBgWin->iFadedPixel.Blue());
		INFO_PRINTF1(testTxt);
		
		// Checks if the colors are the same before and after the fading.
		// The color will be the same only in EGray2 and EGray4 as there are no enough 
		// color variations to represent the fading and nonfading effects.
		if(iTestResult &&
		   iBgWin->iNonFadedPixel.Red()   == iBgWin->iFadedPixel.Red() &&
		   iBgWin->iNonFadedPixel.Green() == iBgWin->iFadedPixel.Green() &&
		   iBgWin->iNonFadedPixel.Blue()  == iBgWin->iFadedPixel.Blue() &&
		   modes[i] != EGray2 && modes[i] != EGray4)
			iTestResult = EFalse;
		}
	}

void CTFadingBitmap::ConstructL()
	{
	// construct the base window of the test in the background
	TSize scrSize = TSize(TheClient->iScreen->SizeInPixels());
	iBgWin = new (ELeave) CBaseWin();
	iBgWin->ConstructWinL(TPoint(0,0), scrSize, ETrue);	
	}

void CTFadingBitmap::RunTestCaseL(TInt aCurTestCase)
	{
    	((CTFadingBitmapStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
	switch(aCurTestCase)
		{
		case 1:
/**
@SYMTestCaseID		GRAPHICS-WSERV-0566
*/
            		((CTFadingBitmapStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0566"));
			TestFadingL();
			// Fails or passes the test
			if(!iTestResult)
				TEST(EFalse);
			break;
		default:
            		((CTFadingBitmapStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
			((CTFadingBitmapStep*)iStep)->CloseTMSGraphicsStep();
			TestComplete();
		}
	((CTFadingBitmapStep*)iStep)->RecordTestResultL();
	}

__WS_CONSTRUCT_STEP__(FadingBitmap)