diff -r bf7481649c98 -r 7f25ef56562d windowing/windowserver/test/tauto/TScreenModeScaling.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/windowing/windowserver/test/tauto/TScreenModeScaling.cpp Wed Jun 23 19:41:15 2010 +0300 @@ -0,0 +1,1104 @@ +// Copyright (c) 1996-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: +// Test code for screen mode scaling CR +// Test code for the Scaling part of Change Request PHAR-5SJGAM +// ("Enable screen mode positioning and scaling"). +// Tests screen scale being configurable for a screen mode - +// eg it is now possible to set in wsini.ini amount by which a screen +// mode's screen will be scaled when drawn on the physical screen. +// +// + +/** + @file + @test + @internalComponent - Internal Symbian test code +*/ + +#include "TScreenModeScaling.h" + +#define MY_TEST_BITMAP _L("Z:\\WSTEST\\MYTEST.MBM") + +LOCAL_D TSize FullScreenModeSize; +LOCAL_D TInt Copy2ndHalfOfScreen; + +void ClearBitmap(CFbsBitmap* aBitMap) + { + // clear the content of bitmap before it is used for copying + CFbsBitmapDevice *device=CFbsBitmapDevice::NewL(aBitMap); + CleanupStack::PushL(device); + CFbsBitGc *gc=NULL; + User::LeaveIfError(device->CreateContext(gc)); + CleanupStack::PushL(gc); + gc->Clear(); + CleanupStack::PopAndDestroy(2,device); + } + +/*CBitMapWin*/ + +void CBitMapWin::Draw() + { + iGc->BitBlt(TPoint(),&iBackup->Bitmap()); + } + +/*CTestSpriteWin*/ + +CTestSpriteWin::~CTestSpriteWin() + { + } + +void CTestSpriteWin::UpdateWin(TPoint aOrigin) + { + SetOrigin(aOrigin); + DrawNow(); + } + +void CTestSpriteWin::Draw() + { + iGc->BitBlt(iOrigin,&iSpriteBitmap); + } + +/*CTScreenModeScaling*/ + +CTScreenModeScaling::CTScreenModeScaling(CTestStep* aStep) : CTWsGraphicsBase(aStep) + { + } + +CTScreenModeScaling::~CTScreenModeScaling() + { + delete iTestWin; + delete iBlankWin; + delete iBackedUpWin; + delete iTestChildWin; + delete iScreenBitmap; + delete iBitmapWin; + delete iCheckWin; + delete iTransWin; + delete iBackgroundWin; + delete iCheckBitmap; + delete iTransparencyBitmap; + delete iBackgroundBitmap; + delete iForegroundBitmap; + } + +void CTScreenModeScaling::ConstructL() + { + iDisplayMode=TheClient->iScreen->DisplayMode(); + if (iDisplayModeiScreen->SetAppScreenMode(TheClient->iScreenModes[0]); + FullScreenModeSize=TheClient->iScreen->SizeInPixels(); + iBlankWin=new(ELeave) CTBlankWindow(); + iBlankWin->ConstructL(*TheClient->iGroup); + User::LeaveIfError(iBlankWin->BaseWin()->SetRequiredDisplayMode(EColor256)); + iBlankWin->SetExt(TPoint(),FullScreenModeSize); + iBlankWin->Activate(); + + iTestWin=new(ELeave) CBasicWin; + iTestWin->ConstructExtLD(*TheClient->iGroup,TPoint(),FullScreenModeSize); + User::LeaveIfError(iTestWin->BaseWin()->SetRequiredDisplayMode(EColor256)); + iTestWin->AssignGC(*TheClient->iGc); + iTestWin->SetVisible(EFalse); + iTestWin->Activate(); + iTestWin->BaseWin()->SetShadowDisabled(ETrue); + iTestWin->BaseWin()->SetShadowHeight(0); + + iBackedUpWin=new(ELeave) CTBackedUpWin(iDisplayMode); + iBackedUpWin->ConstructExtLD(*iTestWin,TPoint(),FullScreenModeSize); + iBackedUpWin->SetVisible(EFalse); + iBackedUpWin->Activate(); + + iTestChildWin=new(ELeave) CTBlankWindow(); + iTestChildWin->ConstructL(*iTestWin); + User::LeaveIfError(iTestChildWin->BaseWin()->SetRequiredDisplayMode(EColor256)); + iTestChildWin->BaseWin()->SetShadowDisabled(ETrue); + iTestChildWin->SetColor(KRgbGreen); + iTestChildWin->BaseWin()->SetVisible(EFalse); + iTestChildWin->Activate(); + + iScreenBitmap=new(ELeave) CFbsBitmap(); + User::LeaveIfError(iScreenBitmap->Create(TSize(FullScreenModeSize.iWidth/2,FullScreenModeSize.iHeight),iDisplayMode)); + + iBitmapWin=new(ELeave) CBmpWin(*iScreenBitmap); + iBitmapWin->ConstructExtLD(*TheClient->iGroup,TPoint(),iScreenBitmap->SizeInPixels()); + User::LeaveIfError(iBitmapWin->BaseWin()->SetRequiredDisplayMode(EColor256)); + iBitmapWin->AssignGC(*TheClient->iGc); + iBitmapWin->Activate(); + iBitmapWin->SetVisible(EFalse); + iBitmapWin->BaseWin()->SetShadowDisabled(ETrue); + iBitmapWin->BaseWin()->SetShadowHeight(0); + + //.. Create all the bitmaps and transparent windows + iWinSize.SetSize(20,20); + iTransparencyBitmap=CBitmap::NewL(iWinSize,EGray256); + iBackgroundBitmap=CBitmap::NewL(iWinSize,iDisplayMode); + iForegroundBitmap=CBitmap::NewL(iWinSize,iDisplayMode); + + CBitMapWin* backgroundWin=new(ELeave) CBitMapWin(iBackgroundBitmap); + backgroundWin->ConstructExtLD(*TheClient->iGroup,TPoint(),iWinSize); + iBackgroundWin=backgroundWin; + User::LeaveIfError(iBackgroundWin->BaseWin()->SetRequiredDisplayMode(EColor256)); + iBackgroundWin->SetVisible(EFalse); + iBackgroundWin->BaseWin()->SetShadowDisabled(ETrue); + iBackgroundWin->BaseWin()->SetShadowHeight(0); + iBackgroundWin->AssignGC(*TheClient->iGc); + iBackgroundWin->Activate(); + + CBitMapWin* transWin=new(ELeave) CBitMapWin(iForegroundBitmap); + transWin->ConstructExtLD(*TheClient->iGroup,TPoint(),iWinSize); + iTransWin=transWin; + RWindowBase& transWinB=*iTransWin->BaseWin(); + User::LeaveIfError(transWinB.SetRequiredDisplayMode(EColor256)); + transWinB.SetShadowDisabled(ETrue); + transWinB.SetShadowHeight(0); + iTransWin->SetVisible(EFalse); + iTransWin->AssignGC(*TheClient->iGc); + iTransWin->Win()->SetTransparencyBitmap(iTransparencyBitmap->Bitmap()); + iTransWin->Activate(); + + CTBackedUpWin* checkWin=new(ELeave) CTBackedUpWin(iDisplayMode); + checkWin->ConstructExtLD(*TheClient->iGroup,TPoint(iWinSize.iWidth+1,0),iWinSize); + iCheckWin=checkWin; + RBackedUpWindow& win=*iCheckWin->BackedUpWin(); + win.SetShadowHeight(0); + iCheckWin->Activate(); + win.MaintainBackup(); + iCheckBitmap=CBitmap::NewL(win.BitmapHandle()); + iCheckWin->BaseWin()->SetShadowDisabled(ETrue); + iCheckWin->BaseWin()->SetShadowHeight(0); + iCheckWin->BaseWin()->SetVisible(EFalse); + TheClient->Flush(); + TheClient->WaitForRedrawsToFinish(); + } + +void CTScreenModeScaling::TestTopClientWindowPositionAPIs(TPoint aPos,RWindowBase* aWin) + { + TEST(aWin->AbsPosition()==aPos); + TEST(aWin->Position()==aPos); + TEST(aWin->InquireOffset(*TheClient->iGroup->GroupWin())==aPos); + } + +void CTScreenModeScaling::TestChildWindowPositionAPIs(TPoint aPos,TPoint aParentPos,RWindowBase* aWin,RWindowBase* aParentWin) + { + TEST(aWin->AbsPosition()==aParentPos+aPos); + TEST(aWin->Position()==aPos); + TEST(aWin->InquireOffset(*TheClient->iGroup->GroupWin())==aParentPos+aPos); + TEST(aWin->InquireOffset(*aParentWin)==aPos); + } + +void CTScreenModeScaling::TestRect() + { + // Here if the width or height of the screen cannot be divided by 2 + // then make both the rect size same by reducing the first or second which ever is smaller + // and make sure that top left corner is not disturbed. + TRect rect1=TRect(PhysicalToLogical(TPoint()-iCurrentScreenModeOrigin,iCurrentScreenModeScale), + PhysicalToLogical(TPoint(FullScreenModeSize.iWidth/2,FullScreenModeSize.iHeight)-iCurrentScreenModeOrigin, + iCurrentScreenModeScale) + ); + TRect rect2=TRect(PhysicalToLogical(TPoint(FullScreenModeSize.iWidth/2,0)-iCurrentScreenModeOrigin, + iCurrentScreenModeScale), + PhysicalToLogical(FullScreenModeSize.AsPoint()-iCurrentScreenModeOrigin, + iCurrentScreenModeScale) + ); + if ((Abs(rect1.iBr.iX-rect1.iTl.iX)>Abs(rect2.iBr.iX-rect2.iTl.iX)) || (Abs(rect1.iBr.iY-rect1.iTl.iY)>Abs(rect2.iBr.iY-rect2.iTl.iY))) + { + rect1.SetRect(rect1.iTl,rect2.Size()); + } + if ((Abs(rect1.iBr.iX-rect1.iTl.iX)iScreen->RectCompare(rect1,rect2); + TEST(retVal); + if (!retVal) + INFO_PRINTF3(_L("TheClient->iScreen->RectCompare(rect1,rect2) return value - Expected: %d, Actual: %d"), ETrue, retVal); + } + +void CTScreenModeScaling::CompareRegionsL(const TRegion &aRegion1,const TRegion &aRegion2) + { + RRegion tmp; + tmp.Copy(aRegion1); + tmp.SubRegion(aRegion2); + if (tmp.CheckError()) + User::Leave(KErrNoMemory); + TBool retVal = tmp.IsEmpty(); + TEST(retVal); + if (!retVal) + INFO_PRINTF3(_L("RRegion1.IsEmpty() return value - Expected: %d, Actual: %d"), ETrue, retVal); + tmp.Copy(aRegion2); + tmp.SubRegion(aRegion1); + if (tmp.CheckError()) + User::Leave(KErrNoMemory); + retVal = tmp.IsEmpty(); + TEST(retVal); + if (!retVal) + INFO_PRINTF3(_L("RRegion2.IsEmpty() return value - Expected: %d, Actual: %d"), ETrue, retVal); + + tmp.Close(); + } + +void CTScreenModeScaling::SetUpSpriteLC(RWsSprite &aSprite, RWsSession &aSession, RWindowTreeNode &aWindow,TInt aFlags) + { + aSprite=RWsSprite(aSession); + User::LeaveIfError(aSprite.Construct(aWindow,TPoint(),aFlags)); + CleanupClosePushL(aSprite); + TSpriteMember member; + iTest->SetUpMember(member); + member.iBitmap=&iSpriteBitmap; + User::LeaveIfError(aSprite.AppendMember(member)); + User::LeaveIfError(aSprite.Activate()); + } + +void CTScreenModeScaling::TestGetInvalidRegionL(TRect& aRect) + { + RRegion testRegion; + RRegion invalid; + iTestWin->Invalidate(aRect); + testRegion.AddRect(aRect); + iTestWin->Win()->GetInvalidRegion(invalid); + CleanupClosePushL(testRegion); + CleanupClosePushL(invalid); + CompareRegionsL(testRegion, invalid); + CleanupStack::PopAndDestroy(2, &testRegion); + TheClient->WaitForRedrawsToFinish(); + } + +void CTScreenModeScaling::CopyAndCompareL() + { + TInt oldOrdinalPriority = TheClient->iGroup->GroupWin()->OrdinalPriority(); + TInt oldOrdinalPosition = TheClient->iGroup->GroupWin()->OrdinalPosition(); + // the following line makes sure that a console object hidden outside of + // screens range doesn't affect test results ocerlapping the bitmap window + TheClient->iGroup->GroupWin()->SetOrdinalPosition(0, 65535); + + // clear the content of bitmap before it is used for copying + ClearBitmap(iScreenBitmap); + + // Copy first half or second half of the screen to a bitmap then paste it to second or first half of the screen + TRect testWinRect(PhysicalToLogical(TPoint((Copy2ndHalfOfScreen ? FullScreenModeSize.iWidth/2 : 0),0)-iCurrentScreenModeOrigin,iCurrentScreenModeScale), + PhysicalToLogical(TPoint((Copy2ndHalfOfScreen ? FullScreenModeSize.iWidth : FullScreenModeSize.iWidth/2),FullScreenModeSize.iHeight)-iCurrentScreenModeOrigin,iCurrentScreenModeScale) + ); + TheClient->iScreen->CopyScreenToBitmap(iScreenBitmap,testWinRect); + iBitmapWin->SetExt(PhysicalToLogical(TPoint((Copy2ndHalfOfScreen ? 0 : FullScreenModeSize.iWidth/2),0)-iCurrentScreenModeOrigin,iCurrentScreenModeScale),testWinRect.Size()); + iBitmapWin->SetVisible(ETrue); + iBitmapWin->DrawNow(); + TheClient->Flush(); + TestRect(); + iBitmapWin->SetVisible(EFalse); + iTestWin->SetVisible(EFalse); + TheClient->Flush(); + + TheClient->iGroup->GroupWin()->SetOrdinalPosition(oldOrdinalPosition, oldOrdinalPriority); + } + +/** +@SYMTestCaseID GRAPHICS-WSERV-0093 + +@SYMDEF DEF081259, DEF111847 + +@SYMTestCaseDesc Window tests + REQUIREMENT: PREQ673 (Screen Scaling) + API: RWindowBase::InquireOffset(), RWindowBase::AbsPosition(),RWindowBase::Position() + +@SYMTestPriority High + +@SYMTestStatus Implemented + +@SYMTestActions Loops through all the screen modes present in the wsini file, and then moves to the test screen + mode where it goes on changing the screen scale and origin. In each of the wsini screen modes and test + screen modes, it checks the test window's API's RWindowBase::InquireOffset(), RWindowBase::AbsPosition() + RWindowBase::Position(). Then it copies the content from either first or second half to second or first + half and compares both the regions so that its content are same. + Additionally, as part of defect fix DEF111847, this also loops through all the display modes, and if possible + tests each with the above described method. Previously, it use to only test Color256. + +@SYMTestExpectedResults The content of both halves of the screen should match. +*/ +void CTScreenModeScaling::WindowTestsL() + { + INFO_PRINTF1(_L("AUTO WindowTests : ")); + + TDisplayMode curDispMode; // Holds the current display mode being tested + + for(curDispMode = EGray2; curDispMode < EColorLast; curDispMode = TDisplayMode(curDispMode+1)) + { + if (curDispMode == ERgb) + { + continue; + } + CTClient* client=new(ELeave) CTClient(); + CleanupStack::PushL(client); + client->SetScreenNumber(iTest->iScreenNumber); + client->ConstructL(); + client->iGroup=new(ELeave) TestWindowGroup(client); + client->iGroup->ConstructL(); + client->iGroup->WinTreeNode()->SetOrdinalPosition(1); + RBlankWindow testWindow(client->iWs); + User::LeaveIfError(testWindow.Construct(*TheClient->iGroup->GroupWin(),ENullWsHandle)); + CleanupClosePushL(testWindow); + + TInt setDispMode; // Holds the actual display mode that was set + setDispMode = testWindow.SetRequiredDisplayMode(curDispMode); + + //Only do the tests if the requested mode was actually set + if(curDispMode == setDispMode) + { + //Create and show DisplayMode details message + _LIT(KModeDetails, "Display Mode: "); + TBuf<30> modeDetailsMessage(KModeDetails); + modeDetailsMessage.Append(DisplayModeAsString(curDispMode)); + LOG_MESSAGE(modeDetailsMessage); + + testWindow.Activate(); + TheClient->iGroup->GroupWin()->EnableScreenChangeEvents(); + TInt numOfModes=TheClient->iScreenModes.Count(); + TInt ii; + for (ii=0; iiiScreenModes[ii]; + TPixelsAndRotation pixelsAndRotation; + iCurrentScreenModeOrigin=TheClient->iScreen->GetScreenModeOrigin(iCurrentMode); + iCurrentScreenModeScale=TheClient->iScreen->GetScreenModeScale(iCurrentMode); + TheClient->iScreen->GetScreenModeSizeAndRotation(iCurrentMode,pixelsAndRotation); + if (pixelsAndRotation.iRotation==CFbsBitGc::EGraphicsOrientationNormal) + { + INFO_PRINTF1(_L(" Do Tests")); + TRAPD(ret,DoWindowTestsL()); + TEST(ret==KErrNone); + if (ret!=KErrNone) + { + INFO_PRINTF3(_L("DoWindowTestsL() return value - Expected: %d, Actual: %d"), KErrNone, ret); + } + + INFO_PRINTF1(_L(" Window Trees")); + client->iScreen->SetAppScreenMode(iCurrentMode); + client->Flush(); + } + } + TestDifferentScales(numOfModes-1); + } + CleanupStack::PopAndDestroy(2,client); + } + } + +void CTScreenModeScaling::TestDifferentScales(TInt aLastModeIdx) + { + if (aLastModeIdx<0) return; + TPixelsAndRotation pixelsAndRotation; + for (TInt modeCount=aLastModeIdx;modeCount>=0;--modeCount) + { + TheClient->iScreen->GetScreenModeSizeAndRotation(TheClient->iScreenModes[modeCount],pixelsAndRotation); + if (pixelsAndRotation.iRotation==CFbsBitGc::EGraphicsOrientationNormal) + break; + } + iCurrentMode=TheClient->iScreenModes[aLastModeIdx]; + TheClient->iScreen->SetAppScreenMode(iCurrentMode); + TheClient->iScreen->SetScreenMode(iCurrentMode); + TSizeMode storeModeData=TheClient->iScreen->GetCurrentScreenModeAttributes(); + TSizeMode testMode=storeModeData; + for (TInt xScale=1;xScale<4;++xScale) + { + for (TInt yScale=1;yScale<4;++yScale) + { + testMode.iScreenScale=TSize(xScale,yScale); + TestDifferentOrigin(testMode,TPoint(20,20)); + TestDifferentOrigin(testMode,TPoint(20,30)); + TestDifferentOrigin(testMode,TPoint(30,20)); + TestDifferentOrigin(testMode,TPoint(FullScreenModeSize.iWidth/2+640/FullScreenModeSize.iWidth*10,60)); + } + } + TheClient->iScreen->SetScreenMode(iCurrentMode); + TheClient->iScreen->SetCurrentScreenModeAttributes(storeModeData); + TInt defaultMode=TheClient->iScreenModes[0]; + TheClient->iScreen->SetAppScreenMode(defaultMode); + TheClient->iScreen->SetScreenMode(defaultMode); + } + +void CTScreenModeScaling::TestDifferentOrigin(TSizeMode &aMode,TPoint aOrigin) + { + TheClient->iScreen->SetScreenMode(iCurrentMode);//.. this is required because at the end of next screenmode test it will be set to zero screen mode + aMode.iOrigin=aOrigin; + TheClient->iScreen->SetCurrentScreenModeAttributes(aMode); + TheClient->iScreen->SetAppScreenMode(iCurrentMode); + TheClient->iScreen->SetScreenMode(iCurrentMode); + iCurrentScreenModeOrigin=TheClient->iScreen->GetScreenModeOrigin(iCurrentMode); + iCurrentScreenModeScale=TheClient->iScreen->GetScreenModeScale(iCurrentMode); + TRAPD(ret,DoWindowTestsL()); + TEST(ret==KErrNone); + if (ret!=KErrNone) + INFO_PRINTF3(_L("DoWindowTestsL() return value - Expected: %d, Actual: %d"), KErrNone, ret); + } + +void CTScreenModeScaling::DoWindowTestsL() + { + TheClient->iScreen->SetAppScreenMode(iCurrentMode); + TheClient->iScreen->SetScreenMode(iCurrentMode); + Copy2ndHalfOfScreen=(iCurrentScreenModeOrigin.iX>FullScreenModeSize.iWidth/2? 1 : 0); + TRect testWinRect(PhysicalToLogical(TPoint(),iCurrentScreenModeScale), + PhysicalToLogical(TPoint((Copy2ndHalfOfScreen ? FullScreenModeSize.iWidth + : FullScreenModeSize.iWidth/2), + FullScreenModeSize.iHeight)-iCurrentScreenModeOrigin,iCurrentScreenModeScale) + ); + testWinRect.Shrink(10,10); + iTestWinSize=testWinRect.Size(); + PositionTestL(testWinRect.iTl); + testWinRect.Shrink(10,10); + iTestWinSize=testWinRect.Size(); + PositionTestL(testWinRect.iTl); + BackedUpChildWindowTestL(testWinRect.iTl); + GetInvalidRegionTestL(testWinRect.iTl); + //NextScreenModeTestL(testWinRect.iTl); //This test needs a lot more work ### + } + +void CTScreenModeScaling::PositionTestL(TPoint aPostion) + { + iTestWin->SetExt(aPostion,iTestWinSize); + iTestWin->SetVisible(ETrue); + iTestWin->Invalidate(); + TheClient->Flush(); + TheClient->WaitForRedrawsToFinish(); + TestTopClientWindowPositionAPIs(aPostion,iTestWin->BaseWin()); + CopyAndCompareL(); + } + +void CTScreenModeScaling::BackedUpChildWindowTestL(TPoint aPostion) + { + iTestWin->SetVisible(ETrue); + TPoint backedUpWinPt=TPoint(iTestWinSize.iWidth/3,iTestWinSize.iHeight/4); + iBackedUpWin->SetExtL(backedUpWinPt,TSize(iTestWinSize.iWidth/6,iTestWinSize.iHeight/6)); + iBackedUpWin->SetVisible(ETrue); + TestChildWindowPositionAPIs(backedUpWinPt,aPostion,iBackedUpWin->BaseWin(),iTestWin->BaseWin()); + aPostion+=TPoint(10,10); + iTestWin->SetPos(aPostion); + TestTopClientWindowPositionAPIs(aPostion,iTestWin->BaseWin()); + TestChildWindowPositionAPIs(backedUpWinPt,aPostion,iBackedUpWin->BaseWin(),iTestWin->BaseWin()); + iTestWin->Invalidate(); + TheClient->Flush(); + TheClient->WaitForRedrawsToFinish(); + TestTopClientWindowPositionAPIs(aPostion,iTestWin->BaseWin()); + TestChildWindowPositionAPIs(backedUpWinPt,aPostion,iBackedUpWin->BaseWin(),iTestWin->BaseWin()); + CopyAndCompareL(); + iBackedUpWin->SetVisible(EFalse); + } + +void CTScreenModeScaling::NextScreenModeTestL(TPoint aPos) + { + TInt numOfModes=TheClient->iScreenModes.Count(); + TInt defaultMode=TheClient->iScreenModes[0]; + TInt lastMode=TheClient->iScreenModes[numOfModes-1]; + TInt mode=(iCurrentModeiScreenModes[ii]) + { + modeIdx=ii; + break; + } + } + TPoint screenModeOrigin(0,0); + TPixelsAndRotation pixelsAndRotation; + while (screenModeOrigin==TPoint()||(pixelsAndRotation.iRotation!=CFbsBitGc::EGraphicsOrientationNormal)) + { + mode=(mode==lastMode? defaultMode : TheClient->iScreenModes[++modeIdx]); + if (mode==iCurrentMode) + { + return; + } + screenModeOrigin=TheClient->iScreen->GetScreenModeOrigin(mode); + TheClient->iScreen->GetScreenModeSizeAndRotation(mode,pixelsAndRotation); + } + iTestWin->SetExt(aPos,iTestWinSize); + iTestWin->SetVisible(ETrue); + TheClient->Flush(); + CBasicWin* basicWin=new(ELeave) CBasicWin; + CleanupStack::PushL(basicWin); + basicWin->ConstructExtLD(*iTestWin,TPoint(),TSize(iTestWinSize.iWidth/5,iTestWinSize.iHeight/5)); + User::LeaveIfError(basicWin->BaseWin()->SetRequiredDisplayMode(EColor256)); + basicWin->AssignGC(*TheClient->iGc); + basicWin->BaseWin()->SetShadowDisabled(ETrue); + basicWin->BaseWin()->SetShadowHeight(0); + basicWin->Activate(); + TPoint pos(iTestWinSize.iWidth/3,iTestWinSize.iWidth/4); + basicWin->SetPos(pos); + TheClient->Flush(); + TheClient->WaitForRedrawsToFinish(); + TestChildWindowPositionAPIs(pos,aPos,basicWin->BaseWin(),iTestWin->BaseWin()); + iCurrentScreenModeScale=TheClient->iScreen->GetScreenModeScale(mode); + iCurrentScreenModeOrigin=TheClient->iScreen->GetScreenModeOrigin(mode); + Copy2ndHalfOfScreen=(iCurrentScreenModeOrigin.iX>FullScreenModeSize.iWidth/2? 1 : 0); + TheClient->iScreen->SetAppScreenMode(mode); + TheClient->iScreen->SetScreenMode(mode); + iTestWin->SetVisible(ETrue); + CopyAndCompareL(); + TheClient->iScreen->SetAppScreenMode(defaultMode); + TheClient->iScreen->SetScreenMode(defaultMode); + CleanupStack::PopAndDestroy(basicWin); + } + +void CTScreenModeScaling::GetInvalidRegionTestL(TPoint aPos) + { + iTestWin->SetExt(aPos,iTestWinSize); + iTestWin->SetVisible(ETrue); + iTestChildWin->SetExt(TPoint(iTestWinSize.iWidth>>2,iTestWinSize.iHeight>>2),TSize(iTestWinSize.iWidth>>1,iTestWinSize.iHeight>>1)); + iTestChildWin->SetVisible(ETrue); + TheClient->Flush(); // ensure testchildwin is on-screen + + CArrayFixFlat *rectList=new(ELeave) CArrayFixFlat(3); + CleanupStack::PushL(rectList); + rectList->AppendL(TRect(1,1,5,2)); + rectList->AppendL(TRect(iTest->StdTestWindowSize().iWidth>>1,iTest->StdTestWindowSize().iHeight>>1,iTest->StdTestWindowSize().iWidth,iTest->StdTestWindowSize().iHeight)); + rectList->AppendL(TRect(2,0,4,5)); + + // set iTestWin to a 'clean state' before invalidating rects in the window + iTestWin->DrawNow(); + TheClient->Flush(); + + // invalidate the various rectangles in iTestWin & then initiate a redraw of the window + RRegion invalidRegion; + RRegion region; + for (TInt index=0;indexCount();index++) + { + const TRect& myRect = (*rectList)[index]; + iTestWin->Invalidate(myRect); + region.AddRect(myRect); + } + CleanupStack::PopAndDestroy(rectList); + CleanupClosePushL(invalidRegion); + CleanupClosePushL(region); + iTestWin->Win()->GetInvalidRegion(invalidRegion); + CompareRegionsL(region, invalidRegion); + CleanupStack::PopAndDestroy(2,&invalidRegion); + iTestChildWin->SetVisible(EFalse); + + // ensure the test child win is removed + TheClient->Flush(); + TheClient->WaitForRedrawsToFinish(); + + TRect rect1(iTestWinSize); + TestGetInvalidRegionL(rect1); + TInt width=iTestWinSize.iWidth; + TInt height=iTestWinSize.iHeight; + TRect rect2(TPoint(width/6,height/6),TSize(width/3,height/3)); + TestGetInvalidRegionL(rect2); + + // invalidate the entire test window + iTestWin->Invalidate(); + TheClient->Flush(); + + iTestWin->SetPos(TPoint(15,15)); + iTestWin->SetPos(TPoint()); + iTestWin->SetPos(TPoint(-15,-15)); + iTestWin->SetPos(aPos); + RRegion invalid; + RRegion testRegion(rect1); + CleanupClosePushL(invalid); + CleanupClosePushL(testRegion); + iTestWin->Win()->GetInvalidRegion(invalid); + TBool retVal = !invalid.CheckError(); + TEST(retVal); + if (!retVal) + INFO_PRINTF3(_L("RRegion.CheckError() return value - Expected: %d, Actual: %d"), ETrue, retVal); + TEST(invalid.BoundingRect().iBr.iX<=iTestWinSize.iWidth); + if (invalid.BoundingRect().iBr.iX>iTestWinSize.iWidth) + INFO_PRINTF3(_L("invalid.BoundingRect().iBr.iX<=iTestWinSize.iWidth - Expected: %d, Actual: %d"), invalid.BoundingRect().iBr.iX, iTestWinSize.iWidth); + CompareRegionsL(testRegion,invalid); + CleanupStack::PopAndDestroy(2,&invalid); + + // redraw the test window & confirm + iTestWin->DrawNow(); + TheClient->Flush(); + CopyAndCompareL(); + } + +/** +@SYMTestCaseID GRAPHICS-WSERV-0094 + +@SYMDEF DEF081259 + +@SYMTestCaseDesc SpriteTestL + REQUIREMENT: PREQ673 (Screen Scaling) + API: RWsSprite::SetPosition() + +@SYMTestPriority High + +@SYMTestStatus Implemented + +@SYMTestActions In the same way as in window tests it shifts the screen modes. + In each screen modes it creates a sprite window and then it moves slightly + either side or bottom of the sprite, then it compares both the regions + to check whether content are same. + +@SYMTestExpectedResults The content of both halves of the screen should match. +*/ +void CTScreenModeScaling::SpriteTestL() + { + CTClient* client=new(ELeave) CTClient(); + CleanupStack::PushL(client); + client->SetScreenNumber(iTest->iScreenNumber); + client->ConstructL(); + client->iGroup=new(ELeave) TestWindowGroup(client); + client->iGroup->ConstructL(); + client->iGroup->WinTreeNode()->SetOrdinalPosition(1); + RBlankWindow color256(client->iWs); + User::LeaveIfError(color256.Construct(*TheClient->iGroup->GroupWin(),ENullWsHandle)); + CleanupClosePushL(color256); + color256.SetRequiredDisplayMode(EColor256); + color256.Activate(); + TInt numOfModes=TheClient->iScreenModes.Count(); + TInt flushState=TheClient->iWs.SetAutoFlush(ETrue); + TInt ii; + for (ii=0; iiiScreenModes[ii]; + TPixelsAndRotation pixelsAndRotation; + iCurrentScreenModeOrigin=TheClient->iScreen->GetScreenModeOrigin(iCurrentMode); + iCurrentScreenModeScale=TheClient->iScreen->GetScreenModeScale(iCurrentMode); + TheClient->iScreen->GetScreenModeSizeAndRotation(iCurrentMode,pixelsAndRotation); + DoSpriteTestsL(); + client->iScreen->SetAppScreenMode(iCurrentMode); + client->Flush(); + } + iCurrentMode=TheClient->iScreenModes[numOfModes-1]; + TheClient->iScreen->SetAppScreenMode(iCurrentMode); + TheClient->iScreen->SetScreenMode(iCurrentMode); + TSizeMode storeModeData=TheClient->iScreen->GetCurrentScreenModeAttributes(); + TSizeMode testMode=storeModeData; + for (TInt xScale=1;xScale<4;xScale++) + { + for (TInt yScale=1;yScale<4;yScale++) + { + testMode.iScreenScale=TSize(xScale,yScale); + TestDifferentOriginAndScaleForSpritesL(testMode,TPoint(20,20)); + TestDifferentOriginAndScaleForSpritesL(testMode,TPoint(20,30)); + TestDifferentOriginAndScaleForSpritesL(testMode,TPoint(30,20)); + TestDifferentOriginAndScaleForSpritesL(testMode,TPoint(FullScreenModeSize.iWidth/2+10,60)); + } + } + TheClient->iScreen->SetScreenMode(iCurrentMode); + TheClient->iScreen->SetCurrentScreenModeAttributes(storeModeData); + TInt defaultMode=TheClient->iScreenModes[0]; + TheClient->iScreen->SetAppScreenMode(defaultMode); + TheClient->iScreen->SetScreenMode(defaultMode); + CleanupStack::PopAndDestroy(2,client); + TheClient->iWs.SetAutoFlush(flushState); + } + +void CTScreenModeScaling::TestDifferentOriginAndScaleForSpritesL(TSizeMode &aMode, TPoint aOrigin) + { + TheClient->iScreen->SetScreenMode(iCurrentMode); + aMode.iOrigin=aOrigin; + TheClient->iScreen->SetCurrentScreenModeAttributes(aMode); + iCurrentScreenModeOrigin=TheClient->iScreen->GetScreenModeOrigin(iCurrentMode); + iCurrentScreenModeScale=TheClient->iScreen->GetScreenModeScale(iCurrentMode); + DoSpriteTestsL(); + } + +void CTScreenModeScaling::DoSpriteTestsL() + { + TheClient->iScreen->SetAppScreenMode(iCurrentMode); + TheClient->iScreen->SetScreenMode(iCurrentMode); + TPixelsAndRotation pixelsAndRotation; + TheClient->iScreen->GetScreenModeSizeAndRotation(iCurrentMode,pixelsAndRotation); + RWsSprite sprite; + TSize spriteSize=iSpriteBitmap.SizeInPixels(); + if (spriteSize.iWidth*iCurrentScreenModeScale.iWidth>FullScreenModeSize.iWidth/2) + spriteSize.iWidth=(FullScreenModeSize.iWidth/2-20)/iCurrentScreenModeScale.iWidth; + SetUpSpriteLC(sprite,TheClient->iWs,*iBlankWin->BaseWin()); + sprite.SetPosition(TPoint()); + CTestSpriteWin* spriteWin=new(ELeave) CTestSpriteWin(iSpriteBitmap); + CleanupStack::PushL(spriteWin); + spriteWin->ConstructExtLD(*TheClient->iGroup,PhysicalToLogical(TPoint()-iCurrentScreenModeOrigin,iCurrentScreenModeScale),spriteSize); + User::LeaveIfError(spriteWin->BaseWin()->SetRequiredDisplayMode(EColor256)); + spriteWin->AssignGC(*TheClient->iGc); + spriteWin->SetVisible(ETrue); + spriteWin->Activate(); + spriteWin->UpdateWin(TPoint()); + spriteWin->BaseWin()->SetShadowDisabled(ETrue); + spriteWin->BaseWin()->SetShadowHeight(0); + TheClient->Flush(); + TheClient->WaitForRedrawsToFinish(); + TPoint spritePosition; + if (iCurrentScreenModeOrigin.iX<=spriteSize.iWidth || iCurrentScreenModeOrigin.iY<=spriteSize.iHeight) + { + if (pixelsAndRotation.iRotation==CFbsBitGc::EGraphicsOrientationNormal || pixelsAndRotation.iRotation==CFbsBitGc::EGraphicsOrientationRotated180) + spritePosition=TPoint(spriteSize.iWidth+1,0); + else + spritePosition=TPoint(0,spriteSize.iHeight+1); + } + sprite.SetPosition(spritePosition); + const TInt KAnimationGrace = 35000; //defined in server.cpp, but can be changed in wsini.ini + User::After(KAnimationGrace); + TBool retVal = TheClient->iScreen->RectCompare(TRect(PhysicalToLogical(TPoint()-iCurrentScreenModeOrigin,iCurrentScreenModeScale),spriteSize),TRect(spritePosition,spriteSize),CWsScreenDevice::EIncludeSprite); + TEST(retVal); + if (!retVal) + INFO_PRINTF3(_L("TheClient->iScreen->RectCompare(rect1,rect2) return value - Expected: %d, Actual: %d"), ETrue, retVal); + + sprite.SetPosition(TPoint()); + CleanupStack::PopAndDestroy(spriteWin); + CleanupStack::PopAndDestroy(&sprite); + } + +/** +@SYMTestCaseID GRAPHICS-WSERV-0095 + +@SYMDEF DEF081259 + +@SYMTestCaseDesc Rotation Tests + REQUIREMENT: PREQ673 (Screen Scaling) + API: RWindowBase::InquireOffset(), RWindowBase::AbsPosition(),RWindowBase::Position() + +@SYMTestPriority High + +@SYMTestStatus Implemented + +@SYMTestActions For each of the screen mode with all its rotation it checks whether the window + is correctly placed in particular screen mode. Then it creates a child window + and checks whether it s correctly placed. + +@SYMTestExpectedResults Checks the windows are positioned correctly according to the origin,scale and rotation + of the new screen mode. +*/ +void CTScreenModeScaling::RotationTestsL() + { + CTClient* client=new(ELeave) CTClient(); + CleanupStack::PushL(client); + client->SetScreenNumber(iTest->iScreenNumber); + client->ConstructL(); + client->iGroup=new(ELeave) TestWindowGroup(client); + client->iGroup->ConstructL(); + client->iGroup->WinTreeNode()->SetOrdinalPosition(1); + RBlankWindow color256(client->iWs); + User::LeaveIfError(color256.Construct(*TheClient->iGroup->GroupWin(),ENullWsHandle)); + CleanupClosePushL(color256); + color256.SetRequiredDisplayMode(EColor256); + color256.Activate(); + TInt oldCurrentMode=0; + TInt ii; + //TInt screenMode=TheClient->iScreen->CurrentScreenMode(); + for (ii=0;iiiScreenModes.Count();) + { + iCurrentMode=TheClient->iScreenModes[ii]; + if (iCurrentMode!=oldCurrentMode) + { + client->iScreen->SetAppScreenMode(iCurrentMode); + TheClient->iScreen->SetScreenMode(iCurrentMode); + TheClient->iScreen->SetAppScreenMode(iCurrentMode); + } + TPixelsAndRotation pixelsAndRotation; + TheClient->iScreen->GetDefaultScreenSizeAndRotation(pixelsAndRotation); + oldCurrentMode=iCurrentMode; + CArrayFixFlat* rotations=new(ELeave) CArrayFixFlat(1); + CleanupStack::PushL(rotations); + User::LeaveIfError(TheClient->iScreen->GetRotationsList(iCurrentMode,rotations)); + TInt count=rotations->Count(); + TInt jj=0; + if (count>1) + { + for (jj=0;jjiScreen->SetCurrentRotations(oldCurrentMode,REINTERPRET_CAST(CFbsBitGc::TGraphicsOrientation&,currentRotation)); + CleanupStack::PopAndDestroy(rotations); + iCurrentScreenModeOrigin=TheClient->iScreen->GetScreenModeOrigin(oldCurrentMode); + iCurrentScreenModeScale=TheClient->iScreen->GetScreenModeScale(oldCurrentMode); + TRect testWinRect(PhysicalToLogical(TPoint(),iCurrentScreenModeScale), + PhysicalToLogical(TPoint((Copy2ndHalfOfScreen ? FullScreenModeSize.iWidth : FullScreenModeSize.iWidth/2),FullScreenModeSize.iHeight)-iCurrentScreenModeOrigin,iCurrentScreenModeScale) + ); + testWinRect.Shrink(10,10); + iTestWin->SetExtL(testWinRect.iTl,testWinRect.Size()); + iTestWin->Invalidate(); + iTestWin->SetVisible(ETrue); + TheClient->Flush(); + TheClient->WaitForRedrawsToFinish(); + TestTopClientWindowPositionAPIs(testWinRect.iTl,iTestWin->BaseWin()); + TPoint backedUpWinPt=TPoint(testWinRect.Width()/3,testWinRect.Height()/4); + iBackedUpWin->SetVisible(ETrue); + iBackedUpWin->SetExtL(backedUpWinPt,TSize(testWinRect.Width()/6,testWinRect.Height()/6)); + TestChildWindowPositionAPIs(backedUpWinPt,testWinRect.iTl,iBackedUpWin->BaseWin(),iTestWin->BaseWin()); + iTestWin->SetVisible(EFalse); + iBackedUpWin->SetVisible(EFalse); + } + CleanupStack::PopAndDestroy(2,client); + } + +void CTScreenModeScaling::DrawTransparentWindows() + { + //.. First Draw on Backgroundbitmap + iBackgroundBitmap->Gc().SetBrushColor(TRgb(255,0,255)); + iBackgroundBitmap->Gc().SetBrushStyle(CGraphicsContext::ESolidBrush); + iBackgroundBitmap->Gc().SetPenStyle(CGraphicsContext::ENullPen); + iBackgroundBitmap->Gc().DrawRect(iWinSize); + + //.. Invalidate the background bitmap and do bitBlt to iCheckBitmap also + iBackgroundWin->BaseWin()->SetVisible(ETrue); + iBackgroundWin->DrawNow(); + + //.. Copy to checkbitmap + iCheckBitmap->Gc().SetFaded(EFalse); + iCheckBitmap->Gc().BitBlt(TPoint(),&iBackgroundBitmap->Bitmap()); + + //.. Set the grade of transperency + iTransparencyBitmap->Gc().SetBrushColor(TRgb::Gray256(128)); + iTransparencyBitmap->Gc().SetBrushStyle(CGraphicsContext::ESolidBrush); + iTransparencyBitmap->Gc().SetPenStyle(CGraphicsContext::ENullPen); + iTransparencyBitmap->Gc().DrawRect(iWinSize); + + //.. Then draw to the fore ground bitmap and invalidate the second window + iForegroundBitmap->Gc().Reset(); + iForegroundBitmap->Gc().SetPenStyle(CGraphicsContext::ESolidPen); + iForegroundBitmap->Gc().SetPenSize(TSize(1,1)); + iForegroundBitmap->Gc().SetPenColor(TRgb(0,0,0)); + iForegroundBitmap->Gc().DrawLine(TPoint(0,0),TPoint(iWinSize.iWidth,iWinSize.iHeight)); + iForegroundBitmap->Gc().DrawLine(TPoint(iWinSize.iWidth,0),TPoint(0,iWinSize.iHeight)); + iTransWin->BaseWin()->SetVisible(ETrue); + iTransWin->Invalidate(); + iTransWin->DrawNow(); + + iCheckBitmap->Gc().AlphaBlendBitmaps(TPoint(0,0),&iForegroundBitmap->Bitmap(),&iCheckBitmap->Bitmap() + ,TRect(iWinSize),TPoint(0,0),&iTransparencyBitmap->Bitmap(),TPoint(0,0)); + iCheckWin->BaseWin()->SetVisible(ETrue); + iCheckWin->BackedUpWin()->UpdateScreen(); + TheClient->Flush(); + TheClient->WaitForRedrawsToFinish(); + CheckRect(iTransWin,iCheckWin,TRect(iWinSize),_L("DrawTransparentWindows() CheckRect failed")); + } + +// !!! THE COMMENT BELOW IS DISABLED BECAUSE TransparentTests() METHOD IS NOT USED !!! +//** +//@SYMTestCaseID GRAPHICS-WSERV-0096 +// +//@SYMDEF DEF081259 +// +//@SYMTestCaseDesc TransparentTests +// REQUIREMENT: PREQ673 (Screen Scaling) +// API: CWindowGc::AlphaBlendBitmaps() +// +//@SYMTestPriority High +// +//@SYMTestStatus Implemented +// +//@SYMTestActions The main logic behind this test is to copy the content of the background window +// bitmap to checkwindow bitmap and then use the foreground window bitmap and transparency bitmap +// with the function AlphaBlendBitmaps() to get the content present on the combination of +// foreground(transparent) window and background window. Then compare both the regions of the +// window to check whether the content is same. +// +//@SYMTestExpectedResults The content of both halves of the screen should match. +//*/ +void CTScreenModeScaling::TransparentTestsL() + { + TInt flushState=TheClient->iWs.SetAutoFlush(ETrue); + TInt defaultMode=TheClient->iScreenModes[0]; + TheClient->iScreen->SetAppScreenMode(defaultMode); + TheClient->iScreen->SetScreenMode(defaultMode); + CTClient* client=new(ELeave) CTClient(); + CleanupStack::PushL(client); + client->SetScreenNumber(iTest->iScreenNumber); + client->ConstructL(); + client->iGroup=new(ELeave) TestWindowGroup(client); + client->iGroup->ConstructL(); + client->iGroup->WinTreeNode()->SetOrdinalPosition(1); + RBlankWindow color256(client->iWs); + User::LeaveIfError(color256.Construct(*TheClient->iGroup->GroupWin(),ENullWsHandle)); + CleanupClosePushL(color256); + color256.SetRequiredDisplayMode(EColor256); + color256.Activate(); + client->Flush(); + DrawTransparentWindows(); + iCurrentMode=TheClient->iScreenModes[TheClient->iScreenModes.Count()-1]; + TheClient->iScreen->SetAppScreenMode(iCurrentMode); + TheClient->iScreen->SetScreenMode(iCurrentMode); + TSizeMode storeModeData=TheClient->iScreen->GetCurrentScreenModeAttributes(); + TSizeMode testMode=storeModeData; + for (TInt xScale=1;xScale<4;xScale++) + { + for (TInt yScale=1;yScale<4;yScale++) + { + testMode.iScreenScale=TSize(xScale,yScale); + TestDifferentOriginAndScaleForTranspWin(testMode,TPoint(20,20)); + TestDifferentOriginAndScaleForTranspWin(testMode,TPoint(20,30)); + TestDifferentOriginAndScaleForTranspWin(testMode,TPoint(30,20)); + TestDifferentOriginAndScaleForTranspWin(testMode,TPoint(FullScreenModeSize.iWidth/2+1,60)); + } + } + TheClient->iScreen->SetScreenMode(iCurrentMode); + TheClient->iScreen->SetCurrentScreenModeAttributes(storeModeData); + client->iScreen->SetAppScreenMode(iCurrentMode); + client->Flush(); + TheClient->iScreen->SetAppScreenMode(defaultMode); + TheClient->iScreen->SetScreenMode(defaultMode); + TheClient->iWs.SetAutoFlush(flushState); + CleanupStack::PopAndDestroy(2,client); + } + +void CTScreenModeScaling::TestDifferentOriginAndScaleForTranspWin(TSizeMode &aMode,TPoint aOrigin) + { + TheClient->iScreen->SetScreenMode(iCurrentMode); + aMode.iOrigin=aOrigin; + TheClient->iScreen->SetCurrentScreenModeAttributes(aMode); + TheClient->iScreen->SetAppScreenMode(iCurrentMode); + TheClient->iScreen->SetScreenMode(iCurrentMode); + TRAPD(ret,DrawTransparentWindows()); + TEST(ret==KErrNone); + if (ret!=KErrNone) + INFO_PRINTF3(_L("DrawTransparentWindows() return value - Expected: %d, Actual: %d"), KErrNone, ret); + + } + +/** +@SYMTestCaseID GRAPHICS-WSERV-0097 + +@SYMDEF DEF081259 + +@SYMTestCaseDesc AppScreenModeTest + REQUIREMENT: PREQ673 (Screen Scaling) + API: CWsScreenDevice::SetAppScreenMode() + +@SYMTestPriority High + +@SYMTestStatus Implemented + +@SYMTestActions Enable the visibility of Test window, Call SetAppScreenMode() API with different + screen mode. Check the variable which is set in its draw function. + +@SYMTestExpectedResults The variable should not be set when the application screen mode is different + then current screen mode. +*/ +void CTScreenModeScaling::AppScreenModeTestL() + { + TheClient->iScreen->SetAppScreenMode(0); + TheClient->iScreen->SetScreenMode(0); + iTestWin->iDrawn=EFalse; + iTestWin->SetExtL(TPoint(),TSize(FullScreenModeSize.iWidth/2,FullScreenModeSize.iHeight)); + iTestWin->SetVisible(ETrue); + TheClient->Flush(); + TheClient->WaitForRedrawsToFinish(); + TEST(iTestWin->iDrawn); + if (!iTestWin->iDrawn) + INFO_PRINTF3(_L("iTestWin->iDrawn - Expected: %d, Actual: %d"), ETrue, iTestWin->iDrawn); + + iTestWin->iDrawn=EFalse; + TheClient->iScreen->SetAppScreenMode(2); + TheClient->iScreen->SetScreenMode(0); + iTestWin->Invalidate(); + TheClient->Flush(); + TEST(!iTestWin->iDrawn); + if (iTestWin->iDrawn) + INFO_PRINTF3(_L("iTestWin->iDrawn - Expected: %d, Actual: %d"), EFalse, iTestWin->iDrawn); + + TheClient->iScreen->SetAppScreenMode(0); + TheClient->Flush(); + TheClient->WaitForRedrawsToFinish(); + TEST(iTestWin->iDrawn); + if (!iTestWin->iDrawn) + INFO_PRINTF3(_L("iTestWin->iDrawn - Expected: %d, Actual: %d"), ETrue, iTestWin->iDrawn); + + iTestWin->iDrawn=EFalse; + TheClient->iScreen->SetScreenMode(1); + iTestWin->Invalidate(); + TheClient->Flush(); + TEST(!iTestWin->iDrawn); + if (iTestWin->iDrawn) + INFO_PRINTF3(_L("iTestWin->iDrawn - Expected: %d, Actual: %d"), EFalse, iTestWin->iDrawn); + + iTestWin->SetVisible(EFalse); + TheClient->iScreen->SetAppScreenMode(0); + TheClient->iScreen->SetScreenMode(0); + } + +void CTScreenModeScaling::RunTestCaseL(TInt /*aCurTestCase*/) + { + _LIT(KWindowTests,"Window Tests"); + _LIT(KSpriteTest,"Sprite Test"); + _LIT(KRotationTests,"Rotation Tests"); + _LIT(KTransparentTests,"Transparent Tests"); + _LIT(KAppScreenModeTest,"AppScreenMode Test"); + _LIT(KScalling,"Scaling not Supported"); + _LIT(KModes,"Only one Screen Size Mode"); + + ((CTScreenModeScalingStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName); + switch(++iTest->iState) + { + case 1: + { + ((CTScreenModeScalingStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0097")); + TInt numScrModes=TheClient->iScreen->NumScreenModes(); + if (numScrModes<2 || !CheckScalingSupportedOrNot()) + { + if (numScrModes<2) + LOG_MESSAGE(KModes); + else + LOG_MESSAGE(KScalling); + TestComplete(); + return; + } + iTest->LogSubTest(KAppScreenModeTest); + AppScreenModeTestL(); + } + break; + case 2: + ((CTScreenModeScalingStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0093")); + iTest->LogSubTest(KWindowTests); + WindowTestsL(); + break; + case 3: + ((CTScreenModeScalingStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0094")); + iTest->LogSubTest(KSpriteTest); + SpriteTestL(); + break; + case 4: + ((CTScreenModeScalingStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0095")); + iTest->LogSubTest(KRotationTests); + RotationTestsL(); + break; + case 5: + ((CTScreenModeScalingStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName); + iTest->LogSubTest(KTransparentTests); + //TransparentTestsL(); //This tests currently fails sometimes for reasons not understood #### + break; + default: + { + TInt defaultMode=TheClient->iScreenModes[0]; + TheClient->iScreen->SetAppScreenMode(defaultMode); + TheClient->iScreen->SetScreenMode(defaultMode); + } + ((CTScreenModeScalingStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName); + ((CTScreenModeScalingStep*)iStep)->CloseTMSGraphicsStep(); + TestComplete(); + return; + } + ((CTScreenModeScalingStep*)iStep)->RecordTestResultL(); + } + +__WS_CONSTRUCT_STEP__(ScreenModeScaling)