--- a/windowing/windowserver/tauto/TScreenModeScaling.cpp Fri Jun 11 14:58:47 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1104 +0,0 @@
-// 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 (iDisplayMode<EColor256)
- iDisplayMode=EColor256;
- User::LeaveIfError(iSpriteBitmap.Load(MY_TEST_BITMAP,0));
-
- TheClient->iScreen->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)<Abs(rect2.iBr.iX-rect2.iTl.iX)) || (Abs(rect1.iBr.iY-rect1.iTl.iY)<Abs(rect2.iBr.iY-rect2.iTl.iY)))
- {
- rect2.SetRect(rect2.iTl,rect1.Size());
- }
- TBool retVal = TheClient->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; ii<numOfModes; ++ii)
- {
- INFO_PRINTF1(_L(" Start of Loop"));
- iCurrentMode=TheClient->iScreenModes[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=(iCurrentMode<lastMode? iCurrentMode:defaultMode);
- // find current mode index
- TInt ii;
- TInt modeIdx=0;
- for (ii=0; ii<numOfModes; ++ii)
- {
- if (mode==TheClient->iScreenModes[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<TRect> *rectList=new(ELeave) CArrayFixFlat<TRect>(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;index<rectList->Count();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; ii<numOfModes; ++ii)
- {
- iCurrentMode=TheClient->iScreenModes[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;ii<TheClient->iScreenModes.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<TInt>* rotations=new(ELeave) CArrayFixFlat<TInt>(1);
- CleanupStack::PushL(rotations);
- User::LeaveIfError(TheClient->iScreen->GetRotationsList(iCurrentMode,rotations));
- TInt count=rotations->Count();
- TInt jj=0;
- if (count>1)
- {
- for (jj=0;jj<count;)
- {
- if ((*rotations)[jj++]==pixelsAndRotation.iRotation)
- {
- break;
- }
- }
- if (jj==count)
- {
- jj=0;
- }
- }
- if (jj==0)
- {
- ii++;
- }
- TInt currentRotation=(*rotations)[jj];
- TheClient->iScreen->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)