--- a/windowing/windowserver/tauto/TSCREENMODEPOSITIONING.CPP Tue Jun 22 15:21:29 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1164 +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 positioning CR
-// GT 0164 Uikon: A3.26. IM 9.
-// Test code for the positioning part of Change Request PHAR-5SJGAM
-// ("Enable screen mode positioning and scaling").
-// Note this feature is also in GT0199 as PREQ673"Screen Positioning".
-// Tests screen position being configurable for a screen mode -
-// eg it is now possible to set in wsini.ini the position on the
-// physical screen where the origin of the screen mode's screen will appear.
-//
-//
-
-/**
- @file
- @test
- @internalComponent - Internal Symbian test code
-*/
-
-#include "TSCREENMODEPOSITIONING.H"
-#include <graphics/displaycontrol.h>
-
-//#define LOGGING on //Uncomment this line to get extra logging useful when there is a tests that fails
-
-LOCAL_D TSize FullScreenModeSize;
-LOCAL_D TDisplayMode ScreenDisplayMode;
-LOCAL_D TInt Copy2ndHalfOfScreen;
-
-
-void CBasicWin::Draw()
- {
- iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
- iGc->SetPenStyle(CGraphicsContext::ENullPen);
- iGc->SetBrushColor(TRgb(255,0,0));
- TSize winSize=Size();
- iGc->DrawRect(TRect(winSize));
- iGc->SetBrushColor(TRgb(0,221,221));
- iGc->DrawEllipse(TRect(TPoint(winSize.iWidth/2,winSize.iHeight/2),winSize));
- iGc->DrawEllipse(TRect(TPoint(-winSize.iWidth/2,-winSize.iHeight/2),winSize));
- iDrawn=ETrue;
- }
-
-void CSpriteWin::UpdateState(TInt aState)
- {
- SetState(aState);
- DrawNow();
- }
-
-TPoint CheckSpritePos(233,60);
-TPoint CheckSpritePos2(18,60);
-
-void CSpriteWin::Draw()
- {
- switch(iState)
- {
- case 0:
- iGc->BitBlt(CheckSpritePos,&iSpriteBitmap);
- break;
- case 1:
- iGc->BitBlt(CheckSpritePos+TPoint(30,30),&iSpriteBitmap);
- iGc->BitBlt(CheckSpritePos,&iSpriteBitmap);
- break;
- case 2:
- iGc->BitBlt(CheckSpritePos2+TPoint(-10,40),&iSpriteBitmap);
- iGc->BitBlt(CheckSpritePos2+TPoint(-10,20),&iSpriteBitmap);
- break;
- case 3:
- iGc->BitBlt(TPoint(),&iSpriteBitmap);
- break;
- default:
- break;
- }
- }
-
-CSpriteWin::~CSpriteWin()
- {
- }
-
-void CBmpWin::Draw()
- {
- iGc->BitBlt(TPoint(),&iScreenBmp);
- }
-
-CConnection2::~CConnection2()
- {
- delete iScreenBitmap;
- delete iBitmapWin;
- delete iSpriteWin;
- iGroup->GroupWin()->EnableReceiptOfFocus(EFalse);
- delete iGroup;
- delete iClient;
- }
-
-void CConnection2::ConstructL(CTestBase *aTest,CFbsBitmap& aBitmap)
- {
- iClient=new(ELeave) CTClient;
- iClient->SetScreenNumber(aTest->ScreenNumber());
- iClient->ConstructL();
- iGroup=new(ELeave) CConnection2Group(iClient,this,aTest);
- iGroup->ConstructL();
- iGroup->GroupWin()->EnableScreenChangeEvents();
- iClient->Flush();
- iSpriteWin=new(ELeave) CSpriteWin(aBitmap);
- iSpriteWin->ConstructExtLD(*iGroup,TPoint(),TSize(433,240));
- User::LeaveIfError(iSpriteWin->BaseWin()->SetRequiredDisplayMode(EColor256));
- iSpriteWin->AssignGC(*iClient->iGc);
- iSpriteWin->Activate();
- iSpriteWin->SetVisible(EFalse);
- iSpriteWin->BaseWin()->SetShadowDisabled(ETrue);
- iSpriteWin->BaseWin()->SetShadowHeight(0);
- iScreenBitmap=new(ELeave) CFbsBitmap();
- User::LeaveIfError(iScreenBitmap->Create(TSize(FullScreenModeSize.iWidth/2,FullScreenModeSize.iHeight), ScreenDisplayMode));
- iBitmapWin=new(ELeave) CBmpWin(*iScreenBitmap);
- iBitmapWin->ConstructExtLD(*iGroup,TPoint(FullScreenModeSize.iWidth/2,0),iScreenBitmap->SizeInPixels());
- User::LeaveIfError(iBitmapWin->BaseWin()->SetRequiredDisplayMode(EColor256));
- iBitmapWin->AssignGC(*iClient->iGc);
- iBitmapWin->Activate();
- iBitmapWin->SetVisible(EFalse);
- iBitmapWin->BaseWin()->SetShadowDisabled(ETrue);
- iBitmapWin->BaseWin()->SetShadowHeight(0);
- }
-
-void CConnection2::DrawBitmapWin()
- {
- TPoint pos=(Copy2ndHalfOfScreen? TPoint() : TPoint(FullScreenModeSize.iWidth/2,0));
- iBitmapWin->SetPos(pos);
- iBitmapWin->SetVisible(ETrue);
- iBitmapWin->DrawNow();
- iClient->Flush();
- }
-
-CConnection2Group::CConnection2Group(CTClient *aClient, CConnection2 *aSecondConnection, CTestBase *aTest) : CTWindowGroup(aClient), iTest(aTest), iConnection2(aSecondConnection)
- {}
-
-
-
-
-//CTScreenModePositioning
-CTScreenModePositioning::CTScreenModePositioning(CTestStep* aStep) : CTWsGraphicsBase(aStep)
- {
- }
-
-
-CTScreenModePositioning::~CTScreenModePositioning()
- {
- delete iTestWin;
- delete iConnection2;
- delete iBlankWin;
- delete iBackedUpWin;
- delete iTestChildWin;
- }
-
-void CTScreenModePositioning::ConstructL()
- {
- User::LeaveIfError(iSpriteBitmap.Load(TEST_BITMAP_NAME,0));
- iScalingSupported=CheckScalingSupportedOrNot();
- TheClient->iScreen->SetScreenMode(TheClient->iScreenModes[0]);
- FullScreenModeSize=TheClient->iScreen->SizeInPixels();
- ScreenDisplayMode=TheClient->iScreen->DisplayMode();
- iConnection2=new(ELeave) CConnection2;
- iConnection2->ConstructL(iTest,iSpriteBitmap);
- iBlankWin=new(ELeave) CTBlankWindow();
- iBlankWin->ConstructL(*TheClient->iGroup);
- User::LeaveIfError(iBlankWin->BaseWin()->SetRequiredDisplayMode(EColor256));
- iBlankWin->SetExt(TPoint(),FullScreenModeSize);
- iBlankWin->SetVisible(EFalse);
- iBlankWin->Activate();
- iTestWin=new(ELeave) CBasicWin;
- iTestWin->ConstructExtLD(*TheClient->iGroup,TPoint(),FullScreenModeSize);
- User::LeaveIfError(iTestWin->BaseWin()->SetRequiredDisplayMode(EColor256));
- iTestWin->AssignGC(*TheClient->iGc);
- iTestWin->BaseWin()->SetShadowDisabled(ETrue);
- iTestWin->BaseWin()->SetShadowHeight(0);
- iTestWin->SetVisible(EFalse);
- iTestWin->Activate();
- iBackedUpWin=new(ELeave) CTBackedUpWin(EColor256);
- 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();
- //The Cursor appearing on screen will affect the result of RectCompare function.
- //Set it to the position out of the screen
- TheClient->iWs.SetPointerCursorPosition(TPoint(-1,-1));
- }
-
-void CTScreenModePositioning::ChangeScreenMode(CTClient* aClient,TPixelsAndRotation aPixelsAndRotation,TInt aMode)
- {
- ChangeScreenMode(aClient,aPixelsAndRotation,ESizeEnforcementNone,aMode);
- }
-
-void CTScreenModePositioning::ChangeScreenMode(CTClient* aClient,TPixelsAndRotation aPixelsAndRotation,TScreenModeEnforcement aScreenModeEnforcement,TInt aMode)
- {
- aClient->iScreen->SetScreenSizeAndRotation(aPixelsAndRotation);
- aClient->iScreen->SetScreenModeEnforcement(aScreenModeEnforcement);
- aClient->iScreen->SetScreenMode(aMode);
- }
-
-void CTScreenModePositioning::SetScreenMode(CTClient* aClient,TInt aMode,TScreenModeEnforcement aScreenModeEnforcement)
- {
- TPixelsAndRotation pixelsAndRotation;
- aClient->iScreen->SetScreenModeEnforcement(aScreenModeEnforcement);
- aClient->iScreen->SetScreenMode(aMode);
- aClient->iScreen->GetDefaultScreenSizeAndRotation(pixelsAndRotation);
- aClient->iScreen->SetScreenSizeAndRotation(pixelsAndRotation);
- aClient->Flush();
- }
-
-void CTScreenModePositioning::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());
- }
-
-/**
-@SYMTestCaseID GRAPHICS-WSERV-0098
-
-@SYMDEF DEF081259
-
-@SYMTestCaseDesc Window Tests. Please see test cases GRAPHICS-WSERV-(0099-0103) which are a subset of this test case.
- REQUIREMENT: CR PHAR-5SJGAM, PREQ673
-
-@SYMTestPriority High
-
-@SYMTestStatus Implemented
-
-@SYMTestActions Tests on windows in different screen modes each with differing screen mode origin's defined in the
- wsini file. This test case only tests screen modes with 0 orientation.
- Goes through each screen mode defined in the wsini file and exercises test cases GRAPHICS-WSERV-(0099-0103) for each mode.
- For more details see test cases GRAPHICS-WSERV-(0099-0103) which are a subset of this test case.
-
-@SYMTestExpectedResults
-
-*/
-void CTScreenModePositioning::WindowTestsL()
- {
- TheClient->iGroup->GroupWin()->EnableScreenChangeEvents();
- TInt numOfModes=TheClient->iScreenModes.Count();
- TInt ii;
- for (ii=0; ii<numOfModes; ++ii)
- {
- iCurrentMode=TheClient->iScreenModes[ii];
- TPixelsAndRotation pixelsAndRotation;
- iCurrentScreenModeOrigin=TheClient->iScreen->GetScreenModeScaledOrigin(iCurrentMode);
- iCurrentScreenModeScale=TheClient->iScreen->GetScreenModeScale(iCurrentMode);
- TheClient->iScreen->GetScreenModeSizeAndRotation(iCurrentMode,pixelsAndRotation);
- iCurrentScreenModeSize=pixelsAndRotation.iPixelSize;
- if (iCurrentScreenModeOrigin.iX<=FullScreenModeSize.iWidth/2-10 /*&& iCurrentScreenModeOrigin!=TPoint() */&& pixelsAndRotation.iRotation==CFbsBitGc::EGraphicsOrientationNormal)
- {
- #if defined(LOGGING)
- _LIT(KLog,"Test mode %d");
- LOG_MESSAGE2(KLog,ii);
- #endif
- TRAPD(ret,DoWindowTestsL());
- if (ret==KErrNone)
- continue;
- RestoreScreenMode();
- if (ret<KErrNone)
- TEST(EFalse);
- else
- User::Leave(ret);
- }
- }
- }
-
-void CTScreenModePositioning::DoWindowTestsL()
- {
- // Make this visible so that the display mode remains EColor256
- iBlankWin->SetVisible(ETrue);
- Copy2ndHalfOfScreen=(iCurrentScreenModeOrigin.iX>FullScreenModeSize.iWidth/2? 1 : 0);
- TInt testWinWidth=Max(FullScreenModeSize.iWidth/2-iCurrentScreenModeOrigin.iX,iCurrentScreenModeOrigin.iX-FullScreenModeSize.iWidth/2);
- iTestWinSize=TSize(testWinWidth,FullScreenModeSize.iHeight-iCurrentScreenModeOrigin.iY-60);
- iTestWinSize.iWidth/=(iCurrentScreenModeScale.iWidth > 1 ? iCurrentScreenModeScale.iWidth*2 : iCurrentScreenModeScale.iWidth);
- iTestWinSize.iHeight/=(iCurrentScreenModeScale.iHeight > 1 ? iCurrentScreenModeScale.iHeight*2 : iCurrentScreenModeScale.iHeight);
-#if defined(LOGGING)
- _LIT(KLog1," PosTest1");
- LOG_MESSAGE(KLog1);
-#endif
- PositionTest1L(TPoint());
-#if defined(LOGGING)
- _LIT(KLog2," PosTest2");
- LOG_MESSAGE(KLog2);
-#endif
- PositionTest1L(TPoint(25,35));
-#if defined(LOGGING)
- _LIT(KLog3," PosTest3");
- LOG_MESSAGE(KLog3);
-#endif
- PositionTest2L(TPoint(10,10));
-#if defined(LOGGING)
- _LIT(KLog4," GetInvalidRegion");
- LOG_MESSAGE(KLog4);
-#endif
- GetInvalidRegionTestL(TPoint(10,10));
-#if defined(LOGGING)
- _LIT(KLog5," CreateWin1");
- LOG_MESSAGE(KLog5);
-#endif
- CreateWindowsTestL(TPoint());
-#if defined(LOGGING)
- _LIT(KLog6," CreateWin2");
- LOG_MESSAGE(KLog6);
-#endif
- CreateWindowsTestL(TPoint(33,15));
-#if defined(LOGGING)
- _LIT(KLog7," NextMode");
- LOG_MESSAGE(KLog7);
-#endif
- NextScreenModeTestL(TPoint(12,6));
- }
-
-/**
-@SYMTestCaseID GRAPHICS-WSERV-0099
-
-@SYMDEF DEF081259
-
-@SYMTestCaseDesc Position Test 1
- REQUIREMENT: CR PHAR-5SJGAM, PREQ673
- API: RWindowBase::InquireOffset(), RWindowBase::AbsPosition(),RWindowBase::Position()
-
-@SYMTestPriority High
-
-@SYMTestStatus Implemented
-
-@SYMTestActions Sets the new screen mode on the main client's screen device. Checks that an window whose group window
- has this screen device is in the correct position and for the origin of the new screen mode.
- (Does this by copying the window to a bitmap, switching back to screen mode 0 and then setting the position
- of the window to be the expected position. Then the bitmap is blitted to the other half of the screen and the
- 2 halves of the screen compared)
-
-@SYMTestExpectedResults Checks the window is positioned correctly for the origin of the new screen mode.
-
-*/
-void CTScreenModePositioning::PositionTest1L(TPoint aPos)
- {
- ((CTScreenModePositioningStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0099"));
- SetScreenMode(TheClient,iCurrentMode,ESizeEnforcementPixelsAndRotation);
- iTestWin->SetExt(aPos,iTestWinSize);
- iTestWin->SetVisible(ETrue);
- iTestWin->Invalidate();
- TheClient->Flush();
- TestTopClientWindowPositionAPIs(aPos,iTestWin->BaseWin());
- TheClient->WaitForRedrawsToFinish();
- CopyAndCompareL(aPos);
- ((CTScreenModePositioningStep*)iStep)->RecordTestResultL();
- }
-
-template <TBool newstate>
-class TCleanupSetVisible:public TCleanupItem
- {
- static void Cleanup(void*v)
- {
- ((CTWinBase*)v)[0].SetVisible(newstate);
- }
- public:
- TCleanupSetVisible(CTWinBase* v):
- TCleanupItem(Cleanup,v)
- {}
- };
-
-
-/**
-@SYMTestCaseID GRAPHICS-WSERV-0100
-
-@SYMDEF DEF081259
-
-@SYMTestCaseDesc Position Test 2
- REQUIREMENT: CR PHAR-5SJGAM, PREQ673
- API: RWindowBase::SetPosition(),RWindowBase::InquireOffset(), RWindowBase::AbsPosition(),RWindowBase::Position()
-
-@SYMTestPriority High
-
-@SYMTestStatus Implemented
-
-@SYMTestActions As in test case GRAPHICS-WSERV-0099 but also tests moving and resizing the window and also does these tests on a backed up child window.
-
-@SYMTestExpectedResults Checks both the windows are positioned correctly for the origin of the new screen mode.
-
-*/
-void CTScreenModePositioning::PositionTest2L(TPoint aPos)
- {
- ((CTScreenModePositioningStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0100"));
- SetScreenMode(TheClient,iCurrentMode,ESizeEnforcementPixelsAndRotation);
- iTestWin->SetPos(aPos);
-
- CleanupStack::PushL(TCleanupSetVisible<EFalse>(iBackedUpWin));
- iTestWin->SetVisible(ETrue);
- TestTopClientWindowPositionAPIs(aPos,iTestWin->BaseWin());
- TPoint backedUpWinPt=TPoint(iTestWinSize.iWidth/3,iTestWinSize.iHeight/4);
- iBackedUpWin->SetExtL(backedUpWinPt,TSize(iTestWinSize.iWidth/6,iTestWinSize.iHeight/6));
- iBackedUpWin->SetVisible(ETrue);
- TestChildWindowPositionAPIs(backedUpWinPt,aPos,iBackedUpWin->BaseWin(),iTestWin->BaseWin());
- aPos+=TPoint(20,20);
- iTestWin->SetPos(aPos);
- TestTopClientWindowPositionAPIs(aPos,iTestWin->BaseWin());
- TestChildWindowPositionAPIs(backedUpWinPt,aPos,iBackedUpWin->BaseWin(),iTestWin->BaseWin());
- iTestWin->Invalidate();
- TheClient->Flush();
- TheClient->WaitForRedrawsToFinish();
- TestTopClientWindowPositionAPIs(aPos,iTestWin->BaseWin());
- TestChildWindowPositionAPIs(backedUpWinPt,aPos,iBackedUpWin->BaseWin(),iTestWin->BaseWin());
- CopyAndCompareL(aPos);
- CleanupStack::PopAndDestroy(iBackedUpWin); //TCleanupSetVisible
- ((CTScreenModePositioningStep*)iStep)->RecordTestResultL();
- }
-
-/**
-@SYMTestCaseID GRAPHICS-WSERV-0101
-
-@SYMDEF DEF081259
-
-@SYMTestCaseDesc Invalid Region Test
- REQUIREMENT: CR PHAR-5SJGAM, PREQ673
- API: RWindow::GetInvalidRegion()
-
-@SYMTestPriority High
-
-@SYMTestStatus Implemented
-
-@SYMTestActions Sets the new screen mode, then invalidates different parts of the test window. Checks that the above API gets
- the correct invalid area from the server. Also tests moving the invalid area.
-
-@SYMTestExpectedResults Checks the invalid region is correct for the origin of the new screen mode.
-
-*/
-void CTScreenModePositioning::GetInvalidRegionTestL(TPoint aPos)
- {
- ((CTScreenModePositioningStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0101"));
- SetScreenMode(TheClient,iCurrentMode,ESizeEnforcementPixelsAndRotation);
- 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);
- iTestWin->Win()->BeginRedraw();
- iTestWin->Win()->EndRedraw();
- const TInt KNumRects=3;
- TRect rects[KNumRects];
- rects[0]=TRect(1,1,5,2);
- rects[1]=TRect(TPoint(iTest->StdTestWindowSize().iWidth>>1,iTest->StdTestWindowSize().iHeight>>1),iTest->StdTestWindowSize());
- rects[2]=TRect(2,0,4,5);
- RRegion region;
- CleanupClosePushL(region);
- for (TInt index=0;index<KNumRects;++index)
- {
- iTestWin->Invalidate(rects[index]);
- region.AddRect(rects[index]);
- }
- //PeterI original wserv assumes a region hidden beneath a child is not invalid
- //Mk3 doesn't make this assumption
- //TRect subRect;
- //subRect.iTl=iTestChildWin->BaseWin()->InquireOffset(*iTestWin->BaseWin());
- //subRect.SetSize(iTestChildWin->Size());
- //region.Tidy();
- //region.SubRect(subRect);
- //region.ClipRect(TRect(iTestWin->Size()));
- RRegion invalidRegion;
- CleanupClosePushL(invalidRegion);
- iTestWin->Win()->GetInvalidRegion(invalidRegion);
- CompareRegionsL(region,invalidRegion);
- CleanupStack::PopAndDestroy(2,®ion);
- TheClient->Flush();
- TheClient->WaitForRedrawsToFinish();
- iTestChildWin->SetVisible(EFalse);
- TRect rect1(TPoint(0,0),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);
- iTestWin->Invalidate();
- 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 err=invalid.CheckError();
- TEST(!err);
- if (err)
- {
- _LIT(KLog,"Returned Invalid Region has an error");
- LOG_MESSAGE(KLog);
- }
-
- TEST(invalid.BoundingRect().iBr.iX<=iTestWinSize.iWidth);
- if (invalid.BoundingRect().iBr.iX>iTestWinSize.iWidth)
- {
- _LIT(KLog,"Invalid Region extends beyond right edge of window");
- LOG_MESSAGE(KLog);
- }
-
- CompareRegionsL(testRegion,invalid);
- CleanupStack::PopAndDestroy(2,&invalid);
- iTestWin->DrawNow();
- TheClient->Flush();
- CopyAndCompareL(aPos);
- ((CTScreenModePositioningStep*)iStep)->RecordTestResultL();
- }
-
-void CTScreenModePositioning::CopyAndCompareL(TPoint aPos)
- {
- CopyScreenAndChangeBackToDefScrModeL();
- iTestWin->SetPos(iCurrentScreenModeOrigin+aPos);
- iConnection2->DrawBitmapWin();
- TheClient->WaitForRedrawsToFinish();
- TestRect();
- iConnection2->BitmapWin()->SetVisible(EFalse);
- iTestWin->SetVisible(EFalse);
- }
-
-void CTScreenModePositioning::TestGetInvalidRegionL(TRect& aRect)
- {
- RRegion testRegion;
- RRegion invalid;
- iTestWin->Invalidate(aRect);
- testRegion.AddRect(aRect);
- iTestWin->Win()->GetInvalidRegion(invalid);
- CompareRegionsL(testRegion,invalid);
- invalid.Close();
- testRegion.Close();
- TheClient->Flush();
- TheClient->WaitForRedrawsToFinish();
- }
-
-void CTScreenModePositioning::CompareRegionsL(const TRegion &aRegion1,const TRegion &aRegion2)
- {
- _LIT(KLog,"Regions do not contain same area.");
- RRegion tmp;
- tmp.Copy(aRegion1);
- tmp.SubRegion(aRegion2);
- if (tmp.CheckError())
- User::Leave(KErrNoMemory);
- TBool retVal1=tmp.IsEmpty();
- TEST(retVal1);
- if (!retVal1)
- LOG_MESSAGE(KLog);
-
- tmp.Copy(aRegion2);
- tmp.SubRegion(aRegion1);
- if (tmp.CheckError())
- User::Leave(KErrNoMemory);
- TBool retVal2=tmp.IsEmpty();
- TEST(retVal2);
- if (!retVal2 && retVal1)
- LOG_MESSAGE(KLog);
-
- tmp.Close();
- }
-
-void CTScreenModePositioning::TestTopClientWindowPositionAPIs(TPoint aPos,RWindowBase* aWin)
- {
- TEST(aWin->AbsPosition()==aPos);
- TEST(aWin->Position()==aPos);
- TEST(aWin->InquireOffset(*TheClient->iGroup->GroupWin())==aPos);
- }
-
-void CTScreenModePositioning::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 CTScreenModePositioning::RestoreScreenMode()
- {
- TPixelsAndRotation pixelsAndRotation;
- pixelsAndRotation.iPixelSize=FullScreenModeSize;
- TheClient->iScreen->GetDefaultScreenSizeAndRotation(pixelsAndRotation);
- ChangeScreenMode(TheClient,pixelsAndRotation,ESizeEnforcementNone,TheClient->iScreenModes[0]);
- }
-
-/**
-@SYMTestCaseID GRAPHICS-WSERV-0102
-
-@SYMDEF DEF081259
-
-@SYMTestCaseDesc Create Windows Test
- REQUIREMENT: CR PHAR-5SJGAM, PREQ673
- API: RWindowBase::SetPosition(),RWindowBase::InquireOffset(), RWindowBase::AbsPosition(),RWindowBase::Position()
-
-@SYMTestPriority High
-
-@SYMTestStatus Implemented
-
-@SYMTestActions As in test case GRAPHICS-WSERV-0100 but tests windows that are created in the new screen mode. Also tests moving and resizing these windows
-
-@SYMTestExpectedResults Checks both the windows are positioned correctly for the origin of the new screen mode.
-
-*/
-void CTScreenModePositioning::CreateWindowsTestL(TPoint aPos)
- {
- ((CTScreenModePositioningStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0102"));
- SetScreenMode(TheClient,iCurrentMode,ESizeEnforcementPixelsAndRotation);
- CBasicWin* basicWin=new(ELeave) CBasicWin;
- basicWin->ConstructExtLD(*TheClient->iGroup,aPos,iTestWinSize);
- CleanupStack::PushL(basicWin);
- TInt mode=basicWin->BaseWin()->SetRequiredDisplayMode(EColor256);
- basicWin->AssignGC(*TheClient->iGc);
- basicWin->BaseWin()->SetShadowDisabled(ETrue);
- basicWin->BaseWin()->SetShadowHeight(0);
- basicWin->Activate();
- TheClient->Flush();
- TheClient->WaitForRedrawsToFinish();
- TestTopClientWindowPositionAPIs(aPos,basicWin->BaseWin());
- CTBlankWindow* blankChildWin=new(ELeave) CTBlankWindow ;
- CleanupStack::PushL(blankChildWin);
- blankChildWin->ConstructL(*basicWin);
- blankChildWin->BaseWin()->SetRequiredDisplayMode(EColor256);
- blankChildWin->BaseWin()->SetShadowDisabled(ETrue);
- blankChildWin->SetColor(KRgbYellow);
- TPoint childPos(iTestWinSize.iWidth/4,iTestWinSize.iHeight/4);
- blankChildWin->SetExtL(childPos,TSize(iTestWinSize.iWidth/2,iTestWinSize.iHeight/2));
- blankChildWin->Activate();
- TheClient->Flush();
- TheClient->WaitForRedrawsToFinish();
- TestChildWindowPositionAPIs(childPos,aPos,blankChildWin->BaseWin(),basicWin->BaseWin());
- blankChildWin->SetPos(TPoint(-15,-20));
- TheClient->Flush();
- basicWin->DrawNow();
- TestChildWindowPositionAPIs(TPoint(-15,-20),aPos,blankChildWin->BaseWin(),basicWin->BaseWin());
- CopyScreenAndChangeBackToDefScrModeL();
- basicWin->SetPos(iCurrentScreenModeOrigin+aPos);
- iConnection2->DrawBitmapWin();
- TheClient->WaitForRedrawsToFinish();
- TestRect();
- iConnection2->BitmapWin()->SetVisible(EFalse);
- iTestWin->SetVisible(EFalse);
- CleanupStack::PopAndDestroy(blankChildWin);
- CleanupStack::PopAndDestroy(basicWin);
- ((CTScreenModePositioningStep*)iStep)->RecordTestResultL();
- }
-
-/**
-@SYMTestCaseID GRAPHICS-WSERV-0103
-
-@SYMDEF DEF081259
-
-@SYMTestCaseDesc Changing to next screen mode
- REQUIREMENT: CR PHAR-5SJGAM, PREQ673
- API: RWindowBase::SetPosition(),RWindowBase::InquireOffset(), RWindowBase::AbsPosition(),RWindowBase::Position()
-
-@SYMTestPriority High
-
-@SYMTestStatus Implemented
-
-@SYMTestActions Sets the new screen mode, creates a new child window and then changes to the next screen mode with non-zero origin,
- checks windows are in the expected position for the origin of the new screen mode.
-
-@SYMTestExpectedResults Checks both the windows are positioned correctly for the origin of the new screen mode.
-
-*/
-void CTScreenModePositioning::NextScreenModeTestL(TPoint aPos)
- {
- ((CTScreenModePositioningStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0103"));
- if (iCurrentScreenModeOrigin==TPoint())
- {
- return;
- }
- 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;
- }
- else if (mode==lastMode)
- {
- modeIdx=0;
- }
- screenModeOrigin=TheClient->iScreen->GetScreenModeOrigin(mode);
- TheClient->iScreen->GetScreenModeSizeAndRotation(mode,pixelsAndRotation);
- }
- SetScreenMode(TheClient,iCurrentMode,ESizeEnforcementPixelsAndRotation);
- 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);
- iTestWinSize.iWidth/=(iCurrentScreenModeScale.iWidth > 1 ? iCurrentScreenModeScale.iWidth*2 : iCurrentScreenModeScale.iWidth);
- iTestWinSize.iHeight/=(iCurrentScreenModeScale.iHeight > 1 ? iCurrentScreenModeScale.iHeight*2 : iCurrentScreenModeScale.iHeight);
- iTestWin->SetExt(aPos,iTestWinSize);
- SetScreenMode(TheClient,mode,ESizeEnforcementPixelsAndRotation);
- CopyScreenAndChangeBackToDefScrModeL();
- iTestWin->SetPos(aPos+iCurrentScreenModeOrigin);
- basicWin->SetPos(pos);
- iConnection2->DrawBitmapWin();
- TestRect();
- iConnection2->BitmapWin()->SetVisible(EFalse);
- iTestWin->SetVisible(EFalse);
- CleanupStack::PopAndDestroy(basicWin);
- iCurrentScreenModeOrigin=TheClient->iScreen->GetScreenModeOrigin(iCurrentMode);
- ((CTScreenModePositioningStep*)iStep)->RecordTestResultL();
- }
-
-void CTScreenModePositioning::CopyScreenAndChangeBackToDefScrModeL()
- {
- // clear the content of bitmap before it is used for copying
- ClearBitmap(iConnection2->iScreenBitmap);
-
- // Copy the current content of the screen before moving to screen sizemode 0.
- if (!iScalingSupported)
- {
- TPoint pt=(Copy2ndHalfOfScreen? TPoint(FullScreenModeSize.iWidth/2,0) : TPoint());
- User::LeaveIfError(iConnection2->iClient->iScreen->CopyScreenToBitmap(iConnection2->iScreenBitmap,TRect(pt,TSize(FullScreenModeSize.iWidth/2,FullScreenModeSize.iHeight))));
- }
- else
- {
- TPoint pt=(Copy2ndHalfOfScreen? TPoint((iCurrentScreenModeSize.iWidth+iCurrentScreenModeOrigin.iX)/2,0) : -iCurrentScreenModeOrigin);
- TPoint ptBottom(FullScreenModeSize.iWidth/2,FullScreenModeSize.iHeight);
- ptBottom-=iCurrentScreenModeOrigin;
- ptBottom.iX=(ptBottom.iX>=0 ? ptBottom.iX/iCurrentScreenModeScale.iWidth : ((-ptBottom.iX)*iCurrentScreenModeScale.iWidth+ptBottom.iX)/iCurrentScreenModeScale.iWidth+ptBottom.iX);
- ptBottom.iY=(ptBottom.iY>=0 ? ptBottom.iY/iCurrentScreenModeScale.iHeight : ((-ptBottom.iY)*iCurrentScreenModeScale.iHeight+ptBottom.iY)/iCurrentScreenModeScale.iHeight+ptBottom.iY);
- User::LeaveIfError(iConnection2->iClient->iScreen->CopyScreenToBitmap(iConnection2->iScreenBitmap,TRect(pt,ptBottom)));
- }
- TheClient->Flush();
- SetScreenMode(TheClient,TheClient->iScreenModes[0],ESizeEnforcementPixelsAndRotation);
- TPixelsAndRotation dummySize;
- dummySize.iPixelSize=TSize(0,0);
- iConnection2->iClient->iScreen->SetScreenSizeAndRotation(dummySize); //to force an update in the server when we do the next line
- TPixelsAndRotation pixelsAndRotation;
- TheClient->iScreen->GetDefaultScreenSizeAndRotation(pixelsAndRotation);
- iConnection2->iClient->iScreen->SetScreenSizeAndRotation(pixelsAndRotation);
- iConnection2->iClient->iScreen->SetScreenModeEnforcement(ESizeEnforcementPixelsAndRotation);
- iConnection2->iClient->iScreen->SetScreenMode(TheClient->iScreenModes[0]);
- }
-
-TBool CTScreenModePositioning::TestRect()
- {
- TSize size(FullScreenModeSize.iWidth/2,FullScreenModeSize.iHeight);
- TRect right(TPoint(FullScreenModeSize.iWidth/2,0),size);
- TBool retVal=TheClient->iScreen->RectCompare(TRect(size),right);
-// User::After(2000000);
- //Let the pixels cool down for a bit
- User::After(10);
- TEST(retVal);
- if(!retVal)
- {
- _LIT(KLog,"Left and Right halves of display don't match. RightHalf=(%d,%d,%d,%d)");
- LOG_MESSAGE5(KLog,right.iTl.iX,right.iTl.iY,right.iBr.iX,right.iBr.iY);
- }
- return retVal;
- }
-
-/**
-@SYMTestCaseID GRAPHICS-WSERV-0104
-
-@SYMDEF DEF081259, DEF111847
-
-@SYMTestCaseDesc Sprite Tests
- REQUIREMENT: CR PHAR-5SJGAM, PREQ673
- API: RWsSprite::SetPosition()
-
-@SYMTestPriority High
-
-@SYMTestStatus Implemented
-
-@SYMTestActions Test sprites associated with group windows in screen modes with non-zero origin:
- Sets such a new screen mode and creates 2 sprites.
- compares these sprites with some blitted onto the screen in the expected position.
- Sets the rotation of screen mode to be 180 deg, sets the position of the sprites
- and does the same as above to compare expected position.
- Then changes back to screen mode 0 and sets a new positions of the sprites,changes to the new
- screen mode and checks the sprites have been moved to the correct position.
- Additionally, as part of defect fix DEF111847, this also loops through all display modes above and including Color256,
- and if possible tests each with the above described method. Previously, it use to only test Color256.
- Display modes lower than EColor256 are not tested as they are not supported for origin change.
-
-@SYMTestExpectedResults Checks the sprites are positioned correctly according to the origin
- of the new screen mode.
-
-*/
-void CTScreenModePositioning::SpriteTestL()
- {
-
-#if defined(__WINS__)
- TBool retVal;
- if (iScalingSupported)
- {
- TDisplayMode curDispMode; // Holds the current display mode being tested
-
- for(curDispMode = EColor256; curDispMode < EColorLast; curDispMode = TDisplayMode(curDispMode+1))
- {
- if (curDispMode == ERgb)
- {
- continue;
- }
- // Set screen mode to 3
- iCurrentMode=3;
- SetScreenMode(TheClient,iCurrentMode,ESizeEnforcementPixelsAndRotation);
- TPoint topLeft(-TheClient->iScreen->GetScreenModeOrigin(iCurrentMode));
- TPoint botRight(TheClient->iScreen->SizeInPixels().AsPoint());
-
- // Create a sprite at position (0,0) from current origin
- RWsSprite sprite;
- TSize spriteSize=iSpriteBitmap.SizeInPixels();
- SetUpSpriteLC(sprite,TheClient->iWs,*iBlankWin->BaseWin());
- TPoint winPos;
- if (botRight.iX<spriteSize.iWidth)
- {
- winPos.iX=botRight.iX-spriteSize.iWidth;
- iBlankWin->BaseWin()->SetPosition(winPos);
- }
-
- // Now create a spritewin at top left of the visible screen
- CSpriteWin* spriteWin=new(ELeave) CSpriteWin(iSpriteBitmap);
- CleanupStack::PushL(spriteWin);
- spriteWin->ConstructExtLD(*TheClient->iGroup,topLeft,spriteSize);
-
- // Set the display mode of the base window
- TInt setBlankWinDispMode = iBlankWin->BaseWin()->SetRequiredDisplayMode(curDispMode);
- // Set the display mode of the sprite window
- TInt setSpriteWinDispMode = spriteWin->BaseWin()->SetRequiredDisplayMode(curDispMode);
-
- //Only do the tests if the requested mode was actually set on both windows
- if(curDispMode == setBlankWinDispMode && curDispMode == setSpriteWinDispMode)
- {
- //Create and show DisplayMode details message
- _LIT(KModeDetails, "Display Mode: ");
- TBuf<30> modeDetailsMessage(KModeDetails);
- modeDetailsMessage.Append(DisplayModeAsString(curDispMode));
- LOG_MESSAGE(modeDetailsMessage);
-
- spriteWin->AssignGC(*TheClient->iGc);
- spriteWin->SetState(3);
- spriteWin->Activate();
- spriteWin->DrawNow();
- TheClient->WaitForRedrawsToFinish();
- retVal=TheClient->iScreen->RectCompare(TRect(topLeft,spriteSize),TRect(winPos,spriteSize),CWsScreenDevice::EIncludeSprite);
- TEST(retVal);
- if(!retVal)
- {
- _LIT(KLog,"Initial Drawing of sprite fails - does not compare to same bitmap drawn in window.");
- LOG_MESSAGE(KLog);
- }
-
- // Move position of the window and sprite and then test
- TPoint spritePos(Min(20,botRight.iX-spriteSize.iWidth-winPos.iX),20);
- spriteWin->SetExt(topLeft+spritePos,spriteSize);
- sprite.SetPosition(spritePos);
- spriteWin->DrawNow();
- TheClient->WaitForRedrawsToFinish();
- retVal=TheClient->iScreen->RectCompare(TRect(topLeft+spritePos,spriteSize),TRect(winPos+spritePos,spriteSize),CWsScreenDevice::EIncludeSprite);
- TEST(retVal);
- if(!retVal)
- {
- _LIT(KLog,"Second position of sprite fails - does not compare to same bitmap drawn in window.");
- LOG_MESSAGE(KLog);
- }
- iBlankWin->BaseWin()->SetPosition(TPoint());
-
- // Now test the same by moving into other screen mode
- iCurrentMode=4;
- SetScreenMode(TheClient,iCurrentMode,ESizeEnforcementNone);
- spritePos.SetXY(0,160);
- sprite.SetPosition(spritePos);
- spriteWin->SetExt(TPoint(),spriteSize);
- spriteWin->DrawNow();
- TheClient->WaitForRedrawsToFinish();
- retVal=TheClient->iScreen->RectCompare(TRect(TPoint(),spriteSize),TRect(spritePos,spriteSize),CWsScreenDevice::EIncludeSprite);
- TEST(retVal);
- if(!retVal)
- {
- _LIT(KLog,"Third position of sprite fails - does not compare to same bitmap drawn in window.");
- LOG_MESSAGE(KLog);
- }
- }
-
- CleanupStack::PopAndDestroy(spriteWin);
- CleanupStack::PopAndDestroy(&sprite);
- RestoreScreenMode();
- }
- }
- else
- {
- const TInt KScreenModeWithOffset = 2;
- TheClient->iGroup->GroupWin()->EnableScreenChangeEvents();
- iTestWin->SetVisible(EFalse);
- TheClient->Flush();
- iConnection2->iClient->Flush();
- TheClient->WaitForRedrawsToFinish();
- TPixelsAndRotation pixelsAndRotation1;
- TheClient->iScreen->GetScreenModeSizeAndRotation(KScreenModeWithOffset,pixelsAndRotation1);
- ChangeScreenMode(TheClient,pixelsAndRotation1,KScreenModeWithOffset);
- RWsSprite sprite[2];
- for (TInt ii=0;ii<2;ii++)
- {
- SetUpSpriteLC(sprite[ii],TheClient->iWs,*TheClient->iGroup->WinTreeNode());
- }
- TheClient->Flush();
- TheClient->WaitForRedrawsToFinish();
- TPixelsAndRotation pixelsAndRotation2;
- TheClient->iScreen->GetScreenModeSizeAndRotation(0,pixelsAndRotation2);
- iConnection2->iSpriteWin->UpdateState(0);
- iConnection2->iSpriteWin->SetVisible(ETrue);
- iConnection2->iClient->Flush();
- TSize spriteSize=iSpriteBitmap.SizeInPixels();
- TPoint screenMode2Origin;
- screenMode2Origin=TheClient->iScreen->GetScreenModeOrigin(KScreenModeWithOffset);
- //Check all reference bitmaps can be drawn inside the screen
- MDisplayControl* interface = static_cast<MDisplayControl*>
- (TheClient->iScreen->GetInterface(MDisplayControl::ETypeId));
- if(interface)
- {
- TDisplayConfiguration config;
- interface->GetConfiguration(config);
- TSize screenSize;
- config.GetResolution(screenSize);
- TEST(screenSize.iWidth > screenMode2Origin.iX+CheckSpritePos.iX+spriteSize.iWidth+30
- && screenSize.iHeight > screenMode2Origin.iY+CheckSpritePos.iY + spriteSize.iHeight+30);
- }
-
- retVal = iConnection2->iClient->iScreen->RectCompare(TRect(screenMode2Origin+CheckSpritePos,spriteSize),TRect(screenMode2Origin,spriteSize),CWsScreenDevice::EIncludeSprite);
- TEST(retVal);
- if(!retVal)
- INFO_PRINTF3(_L("iConnection2->iClient->iScreen->RectCompare() return value - Expected: %d, Actual: %d"), ETrue, retVal);
-
- TheClient->iScreen->SetCurrentRotations(KScreenModeWithOffset,CFbsBitGc::EGraphicsOrientationRotated180);
- ChangeScreenMode(TheClient,pixelsAndRotation1,KScreenModeWithOffset);
- TheClient->Flush();
- sprite[0].SetPosition(TPoint(0,0));
- sprite[1].SetPosition(TPoint(30,30));
- TheClient->Flush();
- TheClient->WaitForRedrawsToFinish();
- iConnection2->iSpriteWin->UpdateState(1);
- iConnection2->iClient->Flush();
- retVal = iConnection2->iClient->iScreen->RectCompare(TRect(screenMode2Origin+CheckSpritePos,spriteSize+TPoint(30,30)),TRect(screenMode2Origin,spriteSize+TPoint(30,30)),CWsScreenDevice::EIncludeSprite);
- TEST(retVal);
- if(!retVal)
- INFO_PRINTF3(_L("iConnection2->iClient->iScreen->RectCompare() return value - Expected: %d, Actual: %d"), ETrue, retVal);
-
- TheClient->iScreen->SetCurrentRotations(KScreenModeWithOffset,CFbsBitGc::EGraphicsOrientationNormal);
- ChangeScreenMode(TheClient,pixelsAndRotation2,0);
- iConnection2->iSpriteWin->SetExt(TPoint(215,0),TSize(218,240));
- TheClient->Flush();
- TheClient->WaitForRedrawsToFinish();
- sprite[0].SetPosition(TPoint(-10,20));
- sprite[1].SetPosition(TPoint(-10,40));
- TheClient->Flush();
- TheClient->WaitForRedrawsToFinish();
- ChangeScreenMode(TheClient,pixelsAndRotation1,ESizeEnforcementPixelsAndRotation,KScreenModeWithOffset);
- TheClient->Flush();
- TheClient->WaitForRedrawsToFinish();
- iConnection2->iSpriteWin->UpdateState(2);
- iConnection2->iClient->Flush();
- retVal = iConnection2->iClient->iScreen->RectCompare(TRect(screenMode2Origin+CheckSpritePos+TPoint(0,20),spriteSize+TPoint(-10,20)),TRect(screenMode2Origin+TPoint(0,20),spriteSize+TPoint(-10,20)),CWsScreenDevice::EIncludeSprite);
- TEST(retVal);
- if(!retVal)
- INFO_PRINTF3(_L("iConnection2->iClient->iScreen->RectCompare() return value - Expected: %d, Actual: %d"), ETrue, retVal);
-
- CleanupStack::PopAndDestroy(2,&sprite[0]);
- iConnection2->iSpriteWin->SetVisible(EFalse);
- ChangeScreenMode(TheClient,pixelsAndRotation2,ESizeEnforcementPixelsAndRotation,0);
- TheClient->Flush();
- TheClient->WaitForRedrawsToFinish();
- }
-#endif
- }
-
-/**
-@SYMTestCaseID GRAPHICS-WSERV-0105
-
-@SYMDEF DEF081259
-
-@SYMTestCaseDesc Rotation Tests
- REQUIREMENT: CR PHAR-5SJGAM, PREQ673
- API: RWindowBase::InquireOffset(), RWindowBase::AbsPosition(),RWindowBase::Position()
-
-@SYMTestPriority High
-
-@SYMTestStatus Implemented
-
-@SYMTestActions Goes through all the screen modes defined in the wsini file and all the rotations in
- each screen mode. For each case sets the new screen mode and the the rotation on the current
- client's screen device. Then sets a suitable size and position of 2 windows (an RWindow
- and a child RBackedUpWindow) whose group window has the above screen device.
-
-@SYMTestExpectedResults Checks the windows are positioned correctly according to the origin and rotation
- of the new screen mode.
-
-*/
-void CTScreenModePositioning::RotationTestsL()
- {
- RBlankWindow color256(TheClient->iWs);
- User::LeaveIfError(color256.Construct(*TheClient->iGroup->GroupWin(),ENullWsHandle));
- CleanupClosePushL(color256);
- color256.SetRequiredDisplayMode(EColor256);
- color256.SetOrdinalPosition(2);
- color256.Activate();
- TInt ii;
- for (ii=0;ii<TheClient->iScreenModes.Count();)
- {
- iCurrentMode=TheClient->iScreenModes[ii];
- SetScreenMode(TheClient,iCurrentMode,ESizeEnforcementPixelsAndRotation);
- TPixelsAndRotation pixelsAndRotation;
- TheClient->iScreen->GetDefaultScreenSizeAndRotation(pixelsAndRotation);
- TInt 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);
- iCurrentScreenModeOrigin=TheClient->iScreen->GetScreenModeScaledOrigin(oldCurrentMode);
- TPoint point1(iCurrentScreenModeOrigin.iX,iCurrentScreenModeOrigin.iY+(iCurrentScreenModeOrigin.iY+pixelsAndRotation.iPixelSize.iHeight)/2);
- TPoint point2(iCurrentScreenModeOrigin.iX+(iCurrentScreenModeOrigin.iX+pixelsAndRotation.iPixelSize.iWidth)/2,pixelsAndRotation.iPixelSize.iHeight+iCurrentScreenModeOrigin.iY);
- TRect rect0(point1,point2);
- iTestWin->SetExtL(TPoint(),rect0.Size());
- iTestWin->Invalidate();
-
- iTestWin->SetVisible(ETrue);
- TheClient->Flush();
- TheClient->WaitForRedrawsToFinish();
- TestTopClientWindowPositionAPIs(TPoint(),iTestWin->BaseWin());
- TPoint backedUpWinPt=TPoint(rect0.Width()/3,rect0.Height()/4);
- iBackedUpWin->SetVisible(ETrue);
-
- CleanupStack::PushL(TCleanupSetVisible<EFalse>(iBackedUpWin));
- CleanupStack::PushL(TCleanupSetVisible<EFalse>(iTestWin));
-
-
- iBackedUpWin->SetExtL(backedUpWinPt,TSize(rect0.Width()/6,rect0.Height()/6));
- TestChildWindowPositionAPIs(backedUpWinPt,TPoint(),iBackedUpWin->BaseWin(),iTestWin->BaseWin());
-
- CleanupStack::PopAndDestroy(2,iBackedUpWin); //TCleanupSetVisible
- }
- CleanupStack::PopAndDestroy(&color256);
- }
-
-TBool CTScreenModePositioning::ScalingSupportedByDisplayMode()
- {
- //PeterI Standard ScreenDriver only supports scaling in EColor256 and EColor64k
- //see CDrawBitmap::CanBeScaled(), as mk3 is always in 16mu the tests will not pass.
- TBool ret=EFalse;
- TDisplayMode mode=TheClient->iScreen->DisplayMode();
- if (mode==EColor64K || mode==EColor256)
- {
- ret=ETrue;
- }
- return ret;
- }
-void CTScreenModePositioning::RunTestCaseL(TInt /*aCurTestCase*/)
- {
- _LIT(KWindowTests,"Window Tests");
- _LIT(KSpriteTest,"Sprite Test");
- _LIT(KRotationTests,"Rotation Tests");
- ((CTScreenModePositioningStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
- switch(iTest->iState)
- {
- case 0:
- ((CTScreenModePositioningStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
- if (!CheckNonZeroOriginsSupportedOrNot())
- {
- _LIT(KLog,"Non Zero Origins not supported");
- LOG_MESSAGE(KLog);
- TestComplete();
- return;
- }
- break;
- case 1:
- iTest->LogSubTest(KWindowTests);
- if(ScalingSupportedByDisplayMode())
- WindowTestsL();
- ((CTScreenModePositioningStep*)iStep)->SetOverallTestStepID(_L("GRAPHICS-WSERV-0098"));
- break;
- case 2:
- ((CTScreenModePositioningStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0104"));
- iTest->LogSubTest(KSpriteTest);
- if(ScalingSupportedByDisplayMode())
- SpriteTestL();
- break;
- case 3:
- ((CTScreenModePositioningStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0105"));
- iTest->LogSubTest(KRotationTests);
- RotationTestsL();
- break;
- default:
- ((CTScreenModePositioningStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
- ((CTScreenModePositioningStep*)iStep)->CloseTMSGraphicsStep();
- RestoreScreenMode();
- TestComplete();
- return;
- }
- ((CTScreenModePositioningStep*)iStep)->RecordTestResultL();
- ++iTest->iState; // still used in the remaining code
- }
-
-__WS_CONSTRUCT_STEP__(ScreenModePositioning)