diff -r 000000000000 -r 5d03bc08d59c windowing/windowserver/tauto/TFADINGBITMAP.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/windowing/windowserver/tauto/TFADINGBITMAP.CPP Tue Feb 02 01:47:50 2010 +0200 @@ -0,0 +1,250 @@ +// 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)