diff -r 2717213c588a -r 171fae344dd4 windowing/windowserver/tdynamicres/src/wsdynamicresbasic.cpp --- a/windowing/windowserver/tdynamicres/src/wsdynamicresbasic.cpp Tue Jun 22 15:21:29 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,4540 +0,0 @@ -// Copyright (c) 2008-2010 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: -// - -/** - @file -*/ -#include "wsdynamicresbasic.h" -#include -#include "globalsettings.h" -#include -#include -#include "regionextend.h" -#include -#include -#include -#include -#include "surfaceutility.h" -#include - -//verify which base code is available to the test -#include -#if (!defined(K_DISPLAY_CH_MAJOR_VERSION_NUMBER) && !defined(K_DISPLAY_CH_MINOR_VERSION_NUMBER)) -#define MODE_CHANGE_BASE_FUNCTIONALITY_NOT_PRESENT_IN_HEADER -#endif - - -//#define VISIBLE_PAUSES 1000 -#define OVERLAPPING_CELL 0 //'m' //0 indicates cells do not overlap -/* - * CWsGceTestPlaceSurfExtra implementation - * - * - * - * - */ -CWsDynamicResBasic::CWsDynamicResBasic() -{ -} - -CWsDynamicResBasic::~CWsDynamicResBasic() -{ -} - -void CWsDynamicResBasic::SetupL() - { - MyBase::SetupL(); - } -void CWsDynamicResBasic::TearDownL() - { - MyBase::TearDownL(); - - } -void CWsDynamicResBasic::TearDownFromDeleteL() - { - MyBase::TearDownFromDeleteL(); - } - - -CTestSuite* CWsDynamicResBasic::CreateSuiteL( const TDesC& aName ) - { - //Create the surface manager here, before the test suite creates additional threads - if (GCEIsSupportedStatic()) - { - TRAP_IGNORE(PostTestCleanupInstance().CreateSharedUtilityL()); - } - - SUB_SUITE_OPT(CWsDynamicResBasic,NULL); - - //BASIC - ADD_THIS_TEST_STEP(GRAPHICS_WSERV_DYNAMICRES_0001L); - ADD_THIS_TEST_STEP(GRAPHICS_WSERV_DYNAMICRES_0002L); - ADD_THIS_TEST_STEP(GRAPHICS_WSERV_DYNAMICRES_0003L); - ADD_THIS_TEST_STEP(GRAPHICS_WSERV_DYNAMICRES_0004L); - ADD_THIS_TEST_STEP(GRAPHICS_WSERV_DYNAMICRES_0005L); - ADD_THIS_TEST_STEP(GRAPHICS_WSERV_DYNAMICRES_0006L); - ADD_THIS_TEST_STEP(GRAPHICS_WSERV_DYNAMICRES_0007L); - ADD_THIS_TEST_STEP(GRAPHICS_WSERV_DYNAMICRES_0008L); - ADD_THIS_TEST_STEP(GRAPHICS_WSERV_DYNAMICRES_0009L); - ADD_THIS_TEST_STEP(GRAPHICS_WSERV_DYNAMICRES_0010L); //only run on screen 1 - ADD_THIS_TEST_STEP(GRAPHICS_WSERV_DYNAMICRES_0011L); - ADD_THIS_TEST_STEP(GRAPHICS_WSERV_DYNAMICRES_0012L); //only run on screen 0 - ADD_THIS_TEST_STEP(GRAPHICS_WSERV_DYNAMICRES_0013L); - ADD_THIS_TEST_STEP(GRAPHICS_WSERV_DYNAMICRES_0014L); //only run on screen 1 - ADD_THIS_TEST_STEP(GRAPHICS_WSERV_DYNAMICRES_0015L); //only run with no scaling - ADD_THIS_TEST_STEP(GRAPHICS_WSERV_DYNAMICRES_0016L); //only run with anisotropic scaling - ADD_THIS_TEST_STEP(GRAPHICS_WSERV_DYNAMICRES_0017L); //only run with integer scaling - ADD_THIS_TEST_STEP(GRAPHICS_WSERV_DYNAMICRES_0018L); - - ADD_TEST_STEP_PARAM_BOOL(GRAPHICS_WSERV_DYNAMICRES_0021L); //only run on screen 1 - - //OOM - ADD_THIS_TEST_STEP(GRAPHICS_WSERV_DYNAMICRES_0031L); - ADD_THIS_TEST_STEP(GRAPHICS_WSERV_DYNAMICRES_0032L); - ADD_THIS_TEST_STEP(GRAPHICS_WSERV_DYNAMICRES_0033L); - ADD_THIS_TEST_STEP(GRAPHICS_WSERV_DYNAMICRES_0034L); //dont run with no scaling on screen 0 - - //SCREEN CAPTURE - ADD_TEST_STEP_PARAM_BOOL(GRAPHICS_WSERV_DYNAMICRES_0041L); - ADD_TEST_STEP_PARAM_BOOL(GRAPHICS_WSERV_DYNAMICRES_0042L); - - //DYNAMIC SCREEN MODE - only run these with no scaling and isotropic scaling - ADD_THIS_TEST_STEP(GRAPHICS_WSERV_DYNAMICRES_0051L); - ADD_THIS_TEST_STEP(GRAPHICS_WSERV_DYNAMICRES_0052L); //only run on screen 1 (multiple resolutions) - ADD_THIS_TEST_STEP(GRAPHICS_WSERV_DYNAMICRES_0053L); - - //DEFECT - ADD_THIS_TEST_STEP(GRAPHICS_WSERV_DYNAMICRES_0101L); - ADD_THIS_TEST_STEP(GRAPHICS_WSERV_DYNAMICRES_0102L); - - END_SUITE; - } - -#define LOG_AND_PANIC_IF_NOT_GCE \ - { \ - if (!GCEIsSupported()) \ - { \ - INFO_PRINTF1(_L("Test skipped: GCE support is not loaded")); \ - User::Panic(_L("GCE.Wrong.Mode"),1); \ - return; \ - } \ - } - -CWsDisplayEvent::CWsDisplayEvent(RWsSession *aWs): -CActive(EPriorityStandard), iWs(aWs), iConfigSpinner(0), iResListSpinner(0),iReceivedEventCount(0), -iReceivedPointerEventCount(0), iPointerPosTestPass(ETrue) - { - CActiveScheduler::Add(this); - } -CWsDisplayEvent::~CWsDisplayEvent() - { - Cancel(); - } - -void CWsDisplayEvent::DoCancel() - { - iWs->EventReadyCancel(); - } - -void CWsDisplayEvent::Request() - { - iWs->EventReady(&iStatus); - SetActive(); - } - -void CWsDisplayEvent::RunL() - { - TWsEvent event; - iWs->GetEvent(event); - - if(iStatus == KErrNone) - { - switch(event.Type()) - { - case EEventScreenDeviceChanged: - { - iReceivedDeviceEventCount++; - } - case EEventPointer: - { - iReceivedPointerEventCount++; - TPointerEvent* ptEvent = event.Pointer(); - //make 1 pixels distance allowance, as non integer scalling from composition to app may occur - //1 pixels allowance because we never scale greater than 2 times - if(ptEvent->iPosition.iX < iPointerPos.iX - 1 && ptEvent->iPosition.iX > iPointerPos.iX + 1 - && ptEvent->iPosition.iY < iPointerPos.iY - 1 &&ptEvent->iPosition.iY > iPointerPos.iY + 1) - { - iPointerPosTestPass = EFalse; - } - } - case EEventDisplayChanged: - { - iConfigSpinner = event.DisplayChanged()->iConfigurationChangeId; - iResListSpinner = event.DisplayChanged()->iResolutionListChangeId; - iReceivedEventCount++; - } - break; - default: - break; - } - } - else - User::Leave(iStatus.Int()); - - Request(); - } - -CEventTimer* CEventTimer::NewL() - { - CEventTimer* self = new (ELeave) CEventTimer; - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -void CEventTimer::ConstructL() - { - User::LeaveIfError(iTimer.CreateLocal()); - CActiveScheduler::Add(this); - } - -CEventTimer::CEventTimer() : CActive(EPriorityStandard) - { - - } - -CEventTimer::~CEventTimer() - { - Cancel(); - iTimer.Close(); - } - -void CEventTimer::DoCancel() - { - iTimer.Cancel(); - CActiveScheduler::Stop(); - } - -void CEventTimer::RunL() - { - CActiveScheduler::Stop(); - } - -void CEventTimer::Wait(TInt aDelay) - { - iTimer.After(iStatus, aDelay); - SetActive(); - CActiveScheduler::Start(); - } - -//Set display state to normal and to the first decent resolution -//A failed test could leave it in a bad state -void CWsDynamicResBasic::ResetScreens() - { - Pause(1000); -#ifndef MODE_CHANGE_BASE_FUNCTIONALITY_NOT_PRESENT_IN_HEADER - TInt displayState = ENormalResolution; - UserSvr::HalFunction(EHalGroupDisplay | (iScreenDevice->GetScreenNumber()<<16), EDisplayHalSetDisplayState, &displayState, NULL); -#endif - MDisplayControl* interface = static_cast - (iScreenDevice->GetInterface(MDisplayControl::ETypeId)); - ASSERT_TRUE(interface); - - RArray appModeIndexList; - TInt currMode=iScreenDevice->CurrentScreenMode(); - iScreenDevice->GetScreenSizeModeList(&appModeIndexList); - if (appModeIndexList[0]!=currMode) - { - iScreenDevice->SetAppScreenMode(appModeIndexList[0]); - iScreenDevice->SetScreenMode(appModeIndexList[0]); - } - appModeIndexList.Close(); - - TInt resolutions = interface->NumberOfResolutions(); - ASSERT_TRUE (resolutions > 0); - RArray resolutionList1; - TInt error = interface->GetResolutions(resolutionList1); - ASSERT_EQUALS(error,KErrNone); - ASSERT_EQUALS(resolutionList1.Count(), resolutions); - TDisplayConfiguration config; - TInt goodRes=0; - if (resolutionList1[goodRes].iPixelSize==TSize()) - { - goodRes++; - ASSERT_TRUE(resolutions>goodRes); //First res was blank, and no more to choose! - } - config.SetResolution(resolutionList1[goodRes].iPixelSize); - error=interface->SetConfiguration(config); - ASSERT_EQUALS(error,KErrNone); - resolutionList1.Close(); - } - -/** -@SYMTestCaseID GRAPHICS_WSERV_DYNAMICRES_0001L -@SYMTestCaseDesc WSERV Screen Device GetInterface returns known interface -@SYMREQ REQ10325 -@SYMPREQ PREQ2102 -@SYMTestType CT -@SYMTestPriority 1 -@SYMTestPurpose Basic classic behaviour -@SYMTestActions - Call GetInterface with a well known GUID -@SYMTestExpectedResults - Returns a pointer -*/ -void CWsDynamicResBasic::GRAPHICS_WSERV_DYNAMICRES_0001L() - { - LOG_AND_PANIC_IF_NOT_GCE; - MakeTitleAndCompareWindowsL(_L("GRAPHICS_WSERV_DYNAMICRES_0001L"),_L("Basic Dynamic Resolution test")); - - MDisplayControlBase* interface1 = static_cast - (iScreenDevice->GetInterface(MDisplayControlBase::ETypeId)); - ASSERT_TRUE(interface1); - - MDisplayControl* interface2 = static_cast - (iScreenDevice->GetInterface(MDisplayControl::ETypeId)); - ASSERT_TRUE(interface2); - - MDisplayMappingBase* interface3 = static_cast - (iScreenDevice->GetInterface(MDisplayMappingBase::ETypeId)); - ASSERT_TRUE(interface3); - - MDisplayMapping* interface4 = static_cast - (iScreenDevice->GetInterface(MDisplayMapping::ETypeId)); - ASSERT_TRUE(interface4); - } - -/** -@SYMTestCaseID GRAPHICS_WSERV_DYNAMICRES_0002L -@SYMTestCaseDesc Basic test for NumberOfResolutions -@SYMREQ REQ10328 -@SYMPREQ PREQ2102 -@SYMTestType CT -@SYMTestPriority 1 -@SYMTestPurpose NumberOfResolutions returns correctly -@SYMTestActions - GetInterface - then call NumberOfResolutions. -@SYMTestExpectedResults - It shouldn't return KErrNotSupported -*/ -void CWsDynamicResBasic::GRAPHICS_WSERV_DYNAMICRES_0002L() - { - LOG_AND_PANIC_IF_NOT_GCE; - MDisplayControl* interface = static_cast - (iScreenDevice->GetInterface(MDisplayControl::ETypeId)); - ASSERT_TRUE(interface); - TInt resolutions = interface->NumberOfResolutions(); - ASSERT_TRUE (resolutions != KErrNotSupported); - } - -/** -@SYMTestCaseID GRAPHICS_WSERV_DYNAMICRES_0003L -@SYMTestCaseDesc Basic test for GetResolutions -@SYMREQ REQ10328 -@SYMPREQ PREQ2102 -@SYMTestType CT -@SYMTestPriority -@SYMTestPurpose Check GetResolutions returns a valid TSize RArray -@SYMTestActions - GetInterface - Call NumberOfResolutions - Create an array and garbage fill based on amount of resolutions - Call GetResolutions on this array - Create an array (dont garbage fill) - Call GetResolutions on this empty array - Create an array with smaller size than required - Call GetResolutions on this array - Create an array with larger size than required - Call GetResolutions on this array -@SYMTestExpectedResults - For both GetResolutions calls, it should allocate memory if needed, and fill - with correct sizes -*/ -void CWsDynamicResBasic::GRAPHICS_WSERV_DYNAMICRES_0003L() - { - LOG_AND_PANIC_IF_NOT_GCE; - TInt count; - TInt error; - - MDisplayControl* interface = static_cast - (iScreenDevice->GetInterface(MDisplayControl::ETypeId)); - ASSERT_TRUE(interface); - - TInt resolutions = interface->NumberOfResolutions(); - ASSERT_TRUE (resolutions > 0); - - RArray resolutionList1; - for (count=0;countGetResolutions(resolutionList1); - ASSERT_EQUALS(error,KErrNone); - ASSERT_EQUALS(resolutionList1.Count(), resolutions); - - RArray resolutionList2; - error = interface->GetResolutions(resolutionList2); - ASSERT_EQUALS(error,KErrNone); - ASSERT_EQUALS(resolutionList2.Count(), resolutions); - - RArray resolutionList3; - for (count=0;countGetResolutions(resolutionList3); - ASSERT_EQUALS(error,KErrNone); - ASSERT_EQUALS(resolutionList3.Count(), resolutions); - - RArray resolutionList4; - for (count=0;countGetResolutions(resolutionList4); - ASSERT_EQUALS(error,KErrNone); - ASSERT_EQUALS(resolutionList4.Count(), resolutions); - - for (count=0;count - (iScreenDevice->GetInterface(MDisplayControl::ETypeId)); - ASSERT_TRUE(interface); - - TDisplayConfiguration dispConfig; - interface->GetConfiguration(dispConfig); - ASSERT_TRUE(dispConfig.IsDefined(TDisplayConfigurationBase::EResolution)); - TSize size; - TSize twips; - ASSERT_TRUE(dispConfig.GetResolution(size)); - ASSERT_TRUE(dispConfig.GetResolutionTwips(twips)); - - TDisplayConfiguration dispConfig1(TDisplayConfiguration().Version() + 10); - interface->GetConfiguration(dispConfig1); - ASSERT_TRUE(dispConfig1.IsDefined(TDisplayConfigurationBase::EResolution)); - TSize size1; - TSize twips1; - ASSERT_TRUE(dispConfig1.GetResolution(size1)); - ASSERT_TRUE(dispConfig1.GetResolutionTwips(twips1)); - - TDisplayConfiguration dispConfig2(TDisplayConfiguration1().Version()); - interface->GetConfiguration(dispConfig2); - ASSERT_TRUE(dispConfig2.IsDefined(TDisplayConfigurationBase::EResolution)); - TSize size2; - TSize twips2; - ASSERT_TRUE(dispConfig2.GetResolution(size2)); - ASSERT_TRUE(dispConfig2.GetResolutionTwips(twips2)); - - ASSERT_EQUALS(size, size1); - ASSERT_EQUALS(size, size2); - ASSERT_EQUALS(twips, twips1); - ASSERT_EQUALS(twips, twips2); - } - -/** -@SYMTestCaseID GRAPHICS_WSERV_DYNAMICRES_0005L -@SYMTestCaseDesc Test getting display change event from event queue -@SYMREQ REQ10329 REQ10330 -@SYMPREQ PREQ2102 -@SYMTestType CT -@SYMTestPriority 1 -@SYMTestPurpose Verify the correct behaviour of display change notification -@SYMTestActions - Run through various ways of changing resolution - For each, check if event has been received -@SYMTestExpectedResults - Based on type of change, check event -*/ -void CWsDynamicResBasic::GRAPHICS_WSERV_DYNAMICRES_0005L() - { - LOG_AND_PANIC_IF_NOT_GCE; - ResetScreens(); -#ifdef MODE_CHANGE_BASE_FUNCTIONALITY_NOT_PRESENT_IN_HEADER - ASSERT_FALSE("Display connection test not compiled because MODE_CHANGE_BASE_FUNCTIONALITY_NOT_PRESENT_IN_HEADER"); -#else - TInt screenNo = iScreenDevice->GetScreenNumber(); - - MDisplayControl* interface = static_cast - (iScreenDevice->GetInterface(MDisplayControl::ETypeId)); - ASSERT_TRUE(interface); - interface->EnableDisplayChangeEvents(ETrue); - ASSERT_TRUE(interface->DisplayChangeEventsEnabled()); - - CWsDisplayEvent* displayEventAO = new(ELeave) CWsDisplayEvent(&iSession); - CleanupStack::PushL(displayEventAO); - displayEventAO->Request(); - CEventTimer *timer = CEventTimer::NewL(); - CleanupStack::PushL(timer); - TInt dispSpinnerValue = displayEventAO->ResListSpinner(); - TInt configSpinnerValue = displayEventAO->ConfigSpinner(); - - iSession.Flush(); - TInt displayState = EDisconnect; - UserSvr::HalFunction(EHalGroupDisplay | (screenNo<<16), EDisplayHalSetDisplayState, &displayState, NULL); - - timer->Wait(100000); - ASSERT_TRUE(displayEventAO->ConfigSpinner() >= configSpinnerValue); //this is also a config change - ASSERT_TRUE(displayEventAO->ResListSpinner() > dispSpinnerValue); //1st display change event - dispSpinnerValue = displayEventAO->ResListSpinner(); - configSpinnerValue = displayEventAO->ConfigSpinner(); - - - interface->EnableDisplayChangeEvents(ETrue);//enable again - ASSERT_TRUE(interface->DisplayChangeEventsEnabled()); - interface->EnableDisplayChangeEvents(EFalse);//disable - ASSERT_FALSE(interface->DisplayChangeEventsEnabled()); - interface->EnableDisplayChangeEvents(EFalse);//disable again - interface->EnableDisplayChangeEvents(ETrue);//enable again - iSession.Flush(); - - TDisplayConfiguration disconnectedConfig; - disconnectedConfig.SetResolution(TSize(10,11)); - disconnectedConfig.SetResolutionTwips(TSize(12,13)); - disconnectedConfig.SetRotation(TDisplayConfiguration1::ERotationNormal); - interface->GetConfiguration(disconnectedConfig); - ASSERT_FALSE(disconnectedConfig.IsDefined(disconnectedConfig.EResolution)); - ASSERT_FALSE(disconnectedConfig.IsDefined(disconnectedConfig.EResolutionTwips)); - ASSERT_FALSE(disconnectedConfig.IsDefined(disconnectedConfig.ERotation)); - - displayState = ENormalResolution; - UserSvr::HalFunction(EHalGroupDisplay | (screenNo<<16), EDisplayHalSetDisplayState, &displayState, NULL); - - timer->Wait(1000000); - ASSERT_TRUE(displayEventAO->ConfigSpinner() >= configSpinnerValue); //this is a config change if display policy is enabled. not a change otherwise - ASSERT_TRUE(displayEventAO->ResListSpinner() > dispSpinnerValue); //display change event - dispSpinnerValue = displayEventAO->ResListSpinner(); - configSpinnerValue = displayEventAO->ConfigSpinner(); - - TDisplayConfiguration dispConfig, dispConfig2; - TSize resolution,resolution2; - interface->GetConfiguration(dispConfig2); - dispConfig2.GetResolution(resolution2); - RArray resolutions; - TInt err = interface->GetResolutions(resolutions); - ASSERT_EQUALS(err, KErrNone); - dispConfig.SetResolution(resolutions[resolutions.Count()/2].iPixelSize); - err = interface->SetConfiguration(dispConfig); - ASSERT_EQUALS(err, KErrNone); - interface->GetConfiguration(dispConfig); - - timer->Wait(100000); - - if(!(dispConfig2 == dispConfig)) - { - ASSERT_TRUE(displayEventAO->ConfigSpinner() > configSpinnerValue); //a config change, but on screen 0 with DP disabled, as we only have 1 resolution when DP disabled - } - else - { - ASSERT_TRUE(displayEventAO->ConfigSpinner() == configSpinnerValue); - } - ASSERT_EQUALS(displayEventAO->ResListSpinner(), dispSpinnerValue); //this is not a display change event - dispSpinnerValue = displayEventAO->ResListSpinner(); - configSpinnerValue = displayEventAO->ConfigSpinner(); - resolutions.Close(); - - //here we flood the event queue with key events, so the next display change - //can't put event and queue and force the retry AO on server side to kick off - iSession.SetFocusScreen(TGlobalSettings::Instance().iScreen); - for(TInt scanCode = 'a'; scanCode < 't'; scanCode ++) - { - TRawEvent rawEvent; - rawEvent.Set(TRawEvent::EKeyDown,scanCode); - iSession.SimulateRawEvent(rawEvent); - rawEvent.Set(TRawEvent::EKeyUp,scanCode); - iSession.SimulateRawEvent(rawEvent); - } - iSession.Flush(); - - TInt eventCount1 = displayEventAO->ReceivedEventCount(); - //we should still receive this - displayState = EDisconnect; - UserSvr::HalFunction(EHalGroupDisplay | (screenNo<<16), EDisplayHalSetDisplayState, &displayState, NULL); - //let retry AO retry more times before we try to get it - User::After(1000000); - - timer->Wait(10000000); - ASSERT_TRUE(displayEventAO->ConfigSpinner()> configSpinnerValue ); //4th config change - ASSERT_TRUE(displayEventAO->ResListSpinner() > dispSpinnerValue); //4th display change event - - //This part is doomed as well. Now the received event count includes all the pointer, device and display change event - /* - TInt eventCount2 = displayEventAO->ReceivedEventCount(); - //make sure retry AO is stopped - we only receive 1 display event - ASSERT_EQUALS(eventCount1 + 1, eventCount2); - */ - displayState = ENormalResolution; - UserSvr::HalFunction(EHalGroupDisplay | (screenNo<<16), EDisplayHalSetDisplayState, &displayState, NULL); - - CleanupStack::PopAndDestroy(2, displayEventAO); -#endif - } - -//Adds the first rotation defined in the TResolution to the display configuration -void CWsDynamicResBasic::SetRotation (TDisplayConfiguration& aConfig, const MDisplayControl::TResolution& aResolution) - { - if (aResolution.iFlags.IsSet(MDisplayControlBase::TResolution::ERotationNormalSupported)) - { - aConfig.SetRotation(TDisplayConfiguration1::ERotationNormal); - } - else if (aResolution.iFlags.IsSet(MDisplayControlBase::TResolution::ERotation90Supported)) - { - aConfig.SetRotation(TDisplayConfiguration1::ERotation90CW); - } - else if (aResolution.iFlags.IsSet(MDisplayControlBase::TResolution::ERotation180Supported)) - { - aConfig.SetRotation(TDisplayConfiguration1::ERotation180); - } - else if (aResolution.iFlags.IsSet(MDisplayControlBase::TResolution::ERotation270Supported)) - { - aConfig.SetRotation(TDisplayConfiguration1::ERotation270CW); - } - ASSERT_TRUE(aConfig.IsDefined(aConfig.ERotation)); - } - -/** -@SYMTestCaseID GRAPHICS_WSERV_DYNAMICRES_0006L -@SYMTestCaseDesc Set Screen display res -@SYMREQ REQ10326 -@SYMPREQ PREQ2102 -@SYMTestType CT -@SYMTestPriority -@SYMTestPurpose Checking window and layer extents continue working -@SYMTestActions - Get resolution list - For every resolution - Set resolution - Draw many rectangles that shrink to demonstrate scaling issues - Draw surface - Move window around -@SYMTestExpectedResults - Every resolution that is supported by current app mode should successfully be set - All rectangles and surface should be visible - As the window moves, the rectangles and surface should move with it, keeping visible -*/ -void CWsDynamicResBasic::GRAPHICS_WSERV_DYNAMICRES_0006L() - { - LOG_AND_PANIC_IF_NOT_GCE; - ResetScreens(); - TInt error; - MakeTitleAndCompareWindowsL(_L("GFX_WSERV_DYNAMICRES_0006L"),_L("Change Resolution")); - - iTestBack=RWindow(iSession); - ASSERT_EQUALS(iTestBack.Construct(iGroup, ++iWindowHandle), KErrNone); - iTestBack.SetRequiredDisplayMode(iDisplayMode); - iTestBack.SetBackgroundColor(TRgb(255,0,0)); - iTestBack.SetExtent(iTestPos.iTl,iTestPos.Size()); - iTestBack.Activate(); - iTestBack.BeginRedraw(); - ActivateWithWipe(iGc,iTestBack,TRgb(255,0,0)); - iGc->Deactivate(); - iTestBack.EndRedraw(); - iTestBack.SetVisible(ETrue); - - struct DrawCompare - { - static void Draw(CWindowGc* aGc) - { - aGc->SetPenStyle(aGc->ESolidPen); - aGc->SetPenColor(TRgb(255,255,255)); - aGc->SetBrushColor(TRgb(0,0,0)); - TRect r(2,2,82,82); - while(r.Width()>0) - { - aGc->DrawRect(r); - r.Shrink(2,2); - } - } - }; - TSurfaceId surfaceID; - TRAPD(err, surfaceID = iUtility->CreateSurfaceL(TSize(200,200), - KSurfaceFormat, 200 * KBytesPerPixel)); - ASSERT_EQUALS(err,KErrNone); - TRAP(err,iUtility->FanFillSurfaceL(surfaceID,iYellow,iRed,iMagenta)); - ASSERT_EQUALS(err,KErrNone); - TSurfaceConfiguration surfConf; - surfConf.SetSurfaceId(surfaceID); - - surfConf.SetExtent(TRect(2,84,82,166)); - iCompare.SetBackgroundSurface(surfConf,EFalse); - - if (CWindowGc* gc=BeginActivateWithWipe(ETrue,iCompare,TRgb(128,128,128))) - { - DrawCompare::Draw(gc); - gc->Deactivate(); - iCompare.EndRedraw(); - - } - iSession.Finish(ETrue); - Pause(1000); - - MDisplayControl* interface = static_cast - (iScreenDevice->GetInterface(MDisplayControl::ETypeId)); - ASSERT_TRUE(interface); - - TInt resolutions = interface->NumberOfResolutions(); - ASSERT_TRUE (resolutions > 0); - - RArray resolutionList1; - error = interface->GetResolutions(resolutionList1); - ASSERT_EQUALS(error,KErrNone); - ASSERT_EQUALS(resolutionList1.Count(), resolutions); - - TDisplayConfiguration dispConfigBefore; - interface->GetConfiguration(dispConfigBefore); - ASSERT_TRUE(dispConfigBefore.IsDefined(dispConfigBefore.EResolution)) - if (resolutions>1) - { - //Got a mode to change to! - TSize resBefore; - TBool ok=dispConfigBefore.GetResolution(resBefore); - ASSERT_TRUE(ok); //we "know" this should be ok, as we just asserted the flag - TBool foundBeforeRes=EFalse; - for (TInt res=0;resSetConfiguration(dispConfigReq); - //ASSERT_EQUALS(errCode,KErrNone); - if (errCode != KErrNone) - { - //Probably current size mode does not support the rotation of the passed in configuration - - ASSERT_EQUALS(errCode,KErrArgument); //failed to find compatible res in the policy - continue; - } - Pause(300); - TRect outerrect(iTestPos.iTl,resolutionList1[res].iPixelSize.AsPoint()); - iTestBack.SetExtent(outerrect.iTl,outerrect.Size()); - iSession.Finish(ETrue); - Pause(300); - if (CWindowGc* gc=BeginActivateWithWipe(ETrue,iCompare,TRgb(128,128,128))) - { - DrawCompare::Draw(gc); - gc->Deactivate(); - iCompare.EndRedraw(); - } - TBuf16<20> s; - s.AppendNum(res); - UpdateTitleWindowL(s,2); - s.Zero(); - s.AppendNum(resolutionList1[res].iPixelSize.iWidth); - s.Append('x'); - s.AppendNum(resolutionList1[res].iPixelSize.iHeight); - UpdateTitleWindowL(s,3); - - iSession.Finish(ETrue); - Pause(300); - outerrect.iBr.iX-=5; - outerrect.iBr.iY-=5; - iTestBack.SetExtent(outerrect.iTl,outerrect.Size()); - iSession.Finish(ETrue); - Pause(300); - TPoint winpos=iCompare.AbsPosition(); - TSize winsize=iCompare.Size(); -// iInfoScreenDevice->ReleaseTwipsCache(); - RepaintTitleWindowL(); - for (TSize z=TSize(1,1);z!=TSize(-1,-1);) - { - for (TInt i=0;i<15;i++) - { - winpos+=z; - iCompare.SetExtent(winpos,winsize); - iSession.Finish(ETrue); - Pause(100); - } - if (z.iHeight && z.iWidth) - z=TSize(0,-1); - else - if (z.iHeight) - z=TSize(-1,0); - else - z=TSize(-1,-1); - } - TDisplayConfiguration dispConfigAfter; - interface->GetConfiguration(dispConfigAfter); - TSize resAfter; - TBool ok=dispConfigAfter.GetResolution(resAfter); - ASSERT_TRUE(ok); - if (resolutionList1[res].iPixelSize!=resAfter) - { - INFO_PRINTF3(_L("Did not receive expected resolution %ix%i"),resolutionList1[res].iPixelSize.iWidth,resolutionList1[res].iPixelSize.iHeight); - INFO_PRINTF3(_L("Instead got %ix%i"),resAfter.iWidth,resAfter.iHeight); - } - } - } - if (resolutionList1[res].iPixelSize==resBefore) - { - foundBeforeRes=ETrue; - } - } - ASSERT_TRUE(foundBeforeRes); - //restore initial res - interface->SetConfiguration(dispConfigBefore); - Pause(1000); - TDisplayConfiguration dispConfigAfter; - interface->GetConfiguration(dispConfigAfter); - TSize resAfter; - ok=dispConfigAfter.GetResolution(resAfter); - ASSERT_TRUE(ok); - ASSERT_EQUALS(resBefore,resAfter); - } - else - { - INFO_PRINTF1(_L("Only 1 resolution configured on this screen - res change test skipped.")); - } - resolutionList1.Close(); - } - -/** -@SYMTestCaseID GRAPHICS_WSERV_DYNAMICRES_0007L -@SYMTestCaseDesc Coordinates Mapping -@SYMREQ REQ10336 -@SYMPREQ PREQ2102 -@SYMTestType CT -@SYMTestPurpose Basic call to mapcoordinates -@SYMTestActions - Call mapCoordinates -@SYMTestExpectedResults - targetRect should be correctly filled in with same rect as sourceRect -*/ -void CWsDynamicResBasic::GRAPHICS_WSERV_DYNAMICRES_0007L() - { - MDisplayMapping* interface = static_cast - (iScreenDevice->GetInterface(MDisplayMapping::ETypeId)); - ASSERT_TRUE(interface); - TRect sourceRect(10, 10, 30, 50); - TRect targetRect(5,5,10,10); - TInt err = interface->MapCoordinates(EApplicationSpace, sourceRect, EApplicationSpace, targetRect); - ASSERT_EQUALS(err, KErrNone); - ASSERT_EQUALS(sourceRect, targetRect); - } - -/** -@SYMTestCaseID GRAPHICS_WSERV_DYNAMICRES_0008L -@SYMTestCaseDesc SetModes and mapCoordinates -@SYMREQ REQ10336 -@SYMPREQ PREQ2102 -@SYMTestType CT -@SYMTestPurpose Basic SetSizeMode and complex MapCoordinates function -@SYMTestActions - Set a new size mode - Perform many rect conversions using MapCoordinates -@SYMTestExpectedResults - Ensure that through multiple conversions, accuracy is not lost -*/ -void CWsDynamicResBasic::GRAPHICS_WSERV_DYNAMICRES_0008L() - { - LOG_AND_PANIC_IF_NOT_GCE; - ResetScreens(); - TInt error; - MakeTitleAndCompareWindowsL(_L("GFX_WSERV_DYNAMICRES_0008L"),_L("Change Size Mode")); - - iTestBack=RWindow(iSession); - ASSERT_EQUALS(iTestBack.Construct(iGroup, ++iWindowHandle), KErrNone); - iTestBack.SetRequiredDisplayMode(iDisplayMode); - iTestBack.SetBackgroundColor(TRgb(255,0,0)); - iTestBack.SetExtent(iTestPos.iTl,iTestPos.Size()); - iTestBack.Activate(); - iTestBack.BeginRedraw(); - ActivateWithWipe(iGc,iTestBack,TRgb(255,0,0)); - iGc->Deactivate(); - iTestBack.EndRedraw(); - iTestBack.SetVisible(ETrue); - - - if (CWindowGc* gc=BeginActivateWithWipe(ETrue,iCompare,TRgb(128,128,128))) - { - gc->SetPenStyle(gc->ESolidPen); - gc->SetPenColor(TRgb(255,255,255)); - gc->SetBrushColor(TRgb(0,0,0)); - TRect r(2,2,22,22); - while(r.Width()>0) - { - gc->DrawRect(r); - r.Shrink(2,2); - } - gc->Deactivate(); - iCompare.EndRedraw(); - - } - iSession.Finish(ETrue); - Pause(1000); - - MDisplayControl* interface = static_cast - (iScreenDevice->GetInterface(MDisplayControl::ETypeId)); - ASSERT_TRUE(interface); - - TInt resolutions = interface->NumberOfResolutions(); - ASSERT_TRUE (resolutions > 0); - - RArray resolutionList1; - error = interface->GetResolutions(resolutionList1); - ASSERT_EQUALS(error,KErrNone); - ASSERT_EQUALS(resolutionList1.Count(), resolutions); - - TDisplayConfiguration dispConfigBefore; - interface->GetConfiguration(dispConfigBefore); - ASSERT_TRUE(dispConfigBefore.IsDefined(dispConfigBefore.EResolution)); - - RArray screenModeList; - iInfoScreenDevice->GetScreenSizeModeList(&screenModeList); - ASSERT_TRUE (screenModeList.Count() > 1); - iScreenDevice->SetAppScreenMode(screenModeList[1]); - iScreenDevice->SetScreenMode(screenModeList[1]); - iSession.Finish(ETrue); - Pause(1000); - - MDisplayMapping* interfaceM = static_cast - (iScreenDevice->GetInterface(MDisplayMapping::ETypeId)); - TRect appRect(20, 40, 193, 110); - TRect uiRect(1,2,3,4); - TRect compRect(5,6,7,8); - TRect tempRect(10,11,12,13); - TInt err; - while (ETrue) - { - //quick get for a print - err = interfaceM->MapCoordinates(EApplicationSpace, appRect, EFullScreenSpace, uiRect); - err = interfaceM->MapCoordinates(EApplicationSpace, appRect, ECompositionSpace, compRect); - -// print -// INFO_PRINTF5(_L("appRect : %d , %d - %d , %d"),appRect.iTl.iX,appRect.iTl.iY,appRect.iBr.iX,appRect.iBr.iY); -// INFO_PRINTF5(_L("uiRect : %d , %d - %d , %d"),uiRect.iTl.iX,uiRect.iTl.iY,uiRect.iBr.iX,uiRect.iBr.iY); -// INFO_PRINTF5(_L("compRect : %d , %d - %d , %d"),compRect.iTl.iX,compRect.iTl.iY,compRect.iBr.iX,compRect.iBr.iY); -// INFO_PRINTF1(_L(" ")); - - //longer process to insure conversions both ways dont lose accuracy - err = interfaceM->MapCoordinates(EApplicationSpace, appRect, EFullScreenSpace, uiRect); - err = interfaceM->MapCoordinates(EFullScreenSpace, uiRect, EApplicationSpace, tempRect); - ASSERT_EQUALS(tempRect,appRect); - - err = interfaceM->MapCoordinates(EApplicationSpace, appRect, ECompositionSpace, compRect); - err = interfaceM->MapCoordinates(ECompositionSpace, compRect, EApplicationSpace, tempRect); - ASSERT_EQUALS(tempRect,appRect); - - err = interfaceM->MapCoordinates(EApplicationSpace, appRect, EFullScreenSpace, uiRect); - err = interfaceM->MapCoordinates(EFullScreenSpace, uiRect, ECompositionSpace, compRect); - err = interfaceM->MapCoordinates(ECompositionSpace, compRect, EFullScreenSpace, tempRect); - ASSERT_EQUALS(tempRect,uiRect); - - appRect.iBr.iX--; - appRect.iBr.iY--; - if (appRect.IsEmpty()) - { - break; - } - } - - TRect rect1(5,5,10,10); - TRect rect2(15,15,20,20); - TRect rect3(50,50,50,50); - //1 - err = interfaceM->MapCoordinates(ECompositionSpace, rect1, ECompositionSpace, rect2); - err = interfaceM->MapCoordinates(EFullScreenSpace, rect2, ECompositionSpace, rect3); - ASSERT_EQUALS(rect1,rect2); - - err = interfaceM->MapCoordinates(ECompositionSpace, rect1, EFullScreenSpace, rect2); - err = interfaceM->MapCoordinates(EFullScreenSpace, rect2, ECompositionSpace, rect3); - ASSERT_EQUALS(rect1,rect3); - - err = interfaceM->MapCoordinates(ECompositionSpace, rect1, EApplicationSpace, rect2); - err = interfaceM->MapCoordinates(EApplicationSpace, rect2, ECompositionSpace, rect3); - ASSERT_EQUALS(rect1,rect3); - - err = interfaceM->MapCoordinates(ECompositionSpace, rect1, EDirectScreenAccessSpace, rect2); - err = interfaceM->MapCoordinates(EDirectScreenAccessSpace, rect2, ECompositionSpace, rect3); - ASSERT_EQUALS(rect1,rect3); - - //2 - err = interfaceM->MapCoordinates(EFullScreenSpace, rect1, EFullScreenSpace, rect2); - ASSERT_EQUALS(rect1,rect2); - - err = interfaceM->MapCoordinates(EFullScreenSpace, rect1, EApplicationSpace, rect2); - err = interfaceM->MapCoordinates(EApplicationSpace, rect2, EFullScreenSpace, rect3); - ASSERT_EQUALS(rect1,rect3); - - err = interfaceM->MapCoordinates(EFullScreenSpace, rect1, EDirectScreenAccessSpace, rect2); - err = interfaceM->MapCoordinates(EDirectScreenAccessSpace, rect2, EFullScreenSpace, rect3); - ASSERT_EQUALS(rect1,rect3); - - //3 - err = interfaceM->MapCoordinates(EApplicationSpace, rect1, EApplicationSpace, rect2); - ASSERT_EQUALS(rect1,rect2); - - err = interfaceM->MapCoordinates(EApplicationSpace, rect1, EDirectScreenAccessSpace, rect2); - err = interfaceM->MapCoordinates(EDirectScreenAccessSpace, rect2, EApplicationSpace, rect3); - ASSERT_EQUALS(rect1,rect3); - - //4 - err = interfaceM->MapCoordinates(EDirectScreenAccessSpace, rect1, EDirectScreenAccessSpace, rect2); - ASSERT_EQUALS(rect1,rect2); - - //invalid - err = interfaceM->MapCoordinates(ECompositionSpace, rect1, (TCoordinateSpace)0, rect2); - ASSERT_EQUALS(err,KErrNotSupported); - err = interfaceM->MapCoordinates(EFullScreenSpace, rect1, (TCoordinateSpace)0, rect2); - ASSERT_EQUALS(err,KErrNotSupported); - err = interfaceM->MapCoordinates(EApplicationSpace, rect1, (TCoordinateSpace)0, rect2); - ASSERT_EQUALS(err,KErrNotSupported); - err = interfaceM->MapCoordinates(EDirectScreenAccessSpace, rect1, (TCoordinateSpace)0, rect2); - ASSERT_EQUALS(err,KErrNotSupported); - err = interfaceM->MapCoordinates((TCoordinateSpace)0, rect1, EDirectScreenAccessSpace, rect2); - ASSERT_EQUALS(err,KErrNotSupported); - - TDisplayConfiguration dispConfigAfter; - interface->GetConfiguration(dispConfigAfter); - - screenModeList.Close(); - resolutionList1.Close(); - iScreenDevice->SetAppScreenMode(0); - iScreenDevice->SetScreenMode(0); - } - -/** -@SYMTestCaseID GRAPHICS_WSERV_DYNAMICRES_0009L -@SYMTestCaseDesc Set Screen display res using app mode -@SYMREQ REQ10336 -@SYMPREQ PREQ2102 -@SYMTestType CT -@SYMTestPurpose SetScreenMode functions correctly -@SYMTestActions - Similar to 0006, but setting every available screen mode instead of resolution -@SYMTestExpectedResults - Every set should work, including modes that involve a rotation! -*/ -void CWsDynamicResBasic::GRAPHICS_WSERV_DYNAMICRES_0009L() - { - LOG_AND_PANIC_IF_NOT_GCE; - ResetScreens(); - TInt error; - iSession.Finish(ETrue); - MakeTitleAndCompareWindowsL(_L("GFX_WSERV_DYNAMICRES_0009L"),_L("Change Size Mode")); - iSession.Finish(ETrue); - - iTestBack=RWindow(iSession); - ASSERT_EQUALS(iTestBack.Construct(iGroup, ++iWindowHandle), KErrNone); - iTestBack.SetRequiredDisplayMode(iDisplayMode); - iTestBack.SetBackgroundColor(TRgb(255,0,0)); - iTestBack.SetExtent(iTestPos.iTl,iTestPos.Size()); - iTestBack.Activate(); - iTestBack.BeginRedraw(); - ActivateWithWipe(iGc,iTestBack,TRgb(255,0,0)); - iGc->Deactivate(); - iTestBack.EndRedraw(); - iTestBack.SetVisible(ETrue); - iSession.Finish(ETrue); - - struct DrawCompare - { - static void Draw(CWindowGc* aGc) - { - aGc->SetPenStyle(aGc->ESolidPen); - aGc->SetPenColor(TRgb(255,255,255)); - aGc->SetBrushColor(TRgb(0,0,0)); - TRect r(2,2,82,82); - while(r.Width()>0) - { - aGc->DrawRect(r); - r.Shrink(2,2); - } - } - }; - TSurfaceId surfaceID; - TRAPD(err, surfaceID = iUtility->CreateSurfaceL(TSize(200,200), - KSurfaceFormat, 200 * KBytesPerPixel)); - ASSERT_EQUALS(err,KErrNone); - TRAP(err,iUtility->FanFillSurfaceL(surfaceID,iYellow,iRed,iMagenta)); - ASSERT_EQUALS(err,KErrNone); - TSurfaceConfiguration surfConf; - surfConf.SetSurfaceId(surfaceID); - - surfConf.SetExtent(TRect(2,84,82,166)); - iCompare.SetBackgroundSurface(surfConf,EFalse); - - if (CWindowGc* gc=BeginActivateWithWipe(ETrue,iCompare,TRgb(128,128,128))) - { - DrawCompare::Draw(gc); - gc->Deactivate(); - iCompare.EndRedraw(); - - } - iSession.Finish(ETrue); - Pause(1000); - RArray screenModeList; - iInfoScreenDevice->GetScreenSizeModeList(&screenModeList); - MDisplayControl* interface = static_cast - (iScreenDevice->GetInterface(MDisplayControl::ETypeId)); - ASSERT_TRUE(interface); - - TInt resolutions = interface->NumberOfResolutions(); - ASSERT_TRUE (resolutions > 0); - - RArray resolutionList1; - error = interface->GetResolutions(resolutionList1); - ASSERT_EQUALS(error,KErrNone); - ASSERT_EQUALS(resolutionList1.Count(), resolutions); - - TDisplayConfiguration dispConfigBefore; - interface->GetConfiguration(dispConfigBefore); - ASSERT_TRUE(dispConfigBefore.IsDefined(dispConfigBefore.EResolution)) - if (screenModeList.Count()>1) - { - //Got a mode to change to! - TSize resBefore; - TBool ok=dispConfigBefore.GetResolution(resBefore); - ASSERT_TRUE(ok); //we "know" this should be ok, as we just asserted the flag - for (TInt res=0;resSetAppScreenMode(screenModeList[res]); - iInfoScreenDevice->SetScreenMode(screenModeList[res]); - iSession.Finish(ETrue); - Pause(300); - - TPixelsAndRotation pr; - iInfoScreenDevice->GetDefaultScreenSizeAndRotation(pr); - TPoint origin=iInfoScreenDevice->GetDefaultScreenModeOrigin(); - Pause(300); - - if (CWindowGc* gc=BeginActivateWithWipe(ETrue,iCompare,TRgb(128,128,128))) - { - DrawCompare::Draw(gc); - gc->Deactivate(); - iCompare.EndRedraw(); - } - if (iTitle.WsHandle()) - { - TPoint infoWinPos; - TSize infoWinSize; - infoWinPos=iTitle.AbsPosition(); - infoWinSize=iTitle.Size(); - infoWinSize.iHeight=pr.iPixelSize.iHeight-2*infoWinPos.iY; - iTitle.SetSize(infoWinSize); - } - TBuf16<20> s; - s.AppendNum(res); - UpdateTitleWindowL(s,1); - s.Zero(); - s.AppendNum(pr.iPixelSize.iWidth); - s.Append('x'); - s.AppendNum(pr.iPixelSize.iHeight); - UpdateTitleWindowL(s,2); - s.Zero(); - s.AppendNum(origin.iX); - s.Append(','); - s.AppendNum(origin.iY); - UpdateTitleWindowL(s,3); - - iSession.Finish(ETrue); - Pause(300); - - TPoint winpos=iCompare.AbsPosition(); - TSize winsize=iCompare.Size(); - - for (TSize z=TSize(1,1);z!=TSize(-1,-1);) - { - for (TInt i=0;i<15;i++) - { - winpos+=z; - iCompare.SetExtent(winpos,winsize); - iSession.Finish(ETrue); - Pause(100); - } - if (z.iHeight && z.iWidth) - z=TSize(0,-1); - else - if (z.iHeight) - z=TSize(-1,0); - else - z=TSize(-1,-1); - } - } - } - } - //restore initial res - if (screenModeList.Count() > 1) - { //set back to basics - iInfoScreenDevice->SetAppScreenMode(screenModeList[0]); - iInfoScreenDevice->SetScreenMode(screenModeList[0]); - Pause(300); - } - - interface->SetConfiguration(dispConfigBefore); - Pause(1000); - TDisplayConfiguration dispConfigAfter; - interface->GetConfiguration(dispConfigAfter); - TSize resAfter; - ok=dispConfigAfter.GetResolution(resAfter); - ASSERT_TRUE(ok); - ASSERT_EQUALS(resBefore,resAfter); - } - else - { - INFO_PRINTF1(_L("Only 1 screen size mode configured on this screen - res change test skipped.")); - } - - screenModeList.Close(); - resolutionList1.Close(); - } - -/** -@SYMTestCaseID GRAPHICS_WSERV_DYNAMICRES_0010L -@SYMTestCaseDesc Test app mode setting during attach/detach -@SYMREQ REQ10330 -@SYMPREQ PREQ2102 -@SYMTestType CT -@SYMTestPurpose Make sure display resumes last app mode when reattached -@SYMTestActions - Save app mode and display configuration before detach and compare it with those after reattach. - Repeat for a second app mode - If available, repeat with dynamic app mode -@SYMTestExpectedResults - For normal app mode, on reconnect it should re apply the old configuration - For dynamic app mode, on reconnect it should be 0x0 -*/ -void CWsDynamicResBasic::GRAPHICS_WSERV_DYNAMICRES_0010L() - { - LOG_AND_PANIC_IF_NOT_GCE; - ResetScreens(); -#ifdef MODE_CHANGE_BASE_FUNCTIONALITY_NOT_PRESENT_IN_HEADER - ASSERT_FALSE("Test not compiled because MODE_CHANGE_BASE_FUNCTIONALITY_NOT_PRESENT_IN_HEADER"); -#else - TInt error; - iSession.Finish(ETrue); - MakeTitleAndCompareWindowsL(_L("GFX_WSERV_DYNAMICRES_0010L"),_L("detach/attach")); - iSession.Finish(ETrue); - - Pause(1000); - TInt screenNo = iScreenDevice->GetScreenNumber(); - RArray screenModeList; - iInfoScreenDevice->GetScreenSizeModeList(&screenModeList); - - //Find 2 real app modes and 1 dynamic app mode - TInt firstAvailableAppMode = -1; - TInt secondAvailableAppMode = -1; - TInt dynamicAppMode = -1; - for (TInt ii = 0; ii < screenModeList.Count(); ii++) - { - TBool dynamic = iInfoScreenDevice->IsModeDynamic(screenModeList[ii]); - if (dynamic && dynamicAppMode == -1) - { - dynamicAppMode = screenModeList[ii]; - } - if (!dynamic) - { - if (firstAvailableAppMode == -1) - { - firstAvailableAppMode = screenModeList[ii]; - } - else if (secondAvailableAppMode == -1) - { - secondAvailableAppMode = screenModeList[ii]; - } - } - } - ASSERT_TRUE(firstAvailableAppMode!=-1); - ASSERT_TRUE(secondAvailableAppMode!=-1); - - MDisplayControl* interface = static_cast - (iScreenDevice->GetInterface(MDisplayControl::ETypeId)); - ASSERT_TRUE(interface); - - MDisplayMapping* mappingInterface = static_cast - (iScreenDevice->GetInterface(MDisplayMapping::ETypeId)); - ASSERT_TRUE(mappingInterface); - - TInt resolutions = interface->NumberOfResolutions(); - ASSERT_TRUE (resolutions > 0); - - RArray resolutionList1; - error = interface->GetResolutions(resolutionList1); - ASSERT_EQUALS(error,KErrNone); - ASSERT_EQUALS(resolutionList1.Count(), resolutions); - - TDisplayConfiguration configBeforeDetach, configAfterReattach; - TInt appModeBeforeDetach, appModeAfterReattach; - - // - //1st detach - attach sequence - appModeBeforeDetach = firstAvailableAppMode; - iScreenDevice->SetAppScreenMode(appModeBeforeDetach ); - iScreenDevice->SetScreenMode(appModeBeforeDetach ); - Pause(200); - interface->GetConfiguration(configBeforeDetach); - - TInt displayState = EDisconnect; - UserSvr::HalFunction(EHalGroupDisplay | (screenNo<<16), EDisplayHalSetDisplayState, &displayState, NULL); - Pause(300); - - //dummy mapping should return KErrNotReady if display is disconnected - TRect dummyRect(1,2,5,8); - error = mappingInterface->MapCoordinates(ECompositionSpace, dummyRect, EFullScreenSpace, dummyRect); - ASSERT_EQUALS(error, KErrNotReady); - - displayState = ENormalResolution; - UserSvr::HalFunction(EHalGroupDisplay | (screenNo<<16), EDisplayHalSetDisplayState, &displayState, NULL); - Pause(300); - - interface->GetConfiguration(configAfterReattach); - ASSERT_TRUE(configBeforeDetach==configAfterReattach); - appModeAfterReattach = iScreenDevice->CurrentScreenMode(); - ASSERT_EQUALS(appModeBeforeDetach, appModeAfterReattach); - //1st detach - attach sequence ends here - // - - configBeforeDetach.ClearAll(); - configAfterReattach.ClearAll(); - - // - //2nd detach-attach sequence - non dynamic app mode - iScreenDevice->SetAppScreenMode(secondAvailableAppMode); - iScreenDevice->SetScreenMode(secondAvailableAppMode); - Pause(200); - appModeBeforeDetach = iScreenDevice->CurrentScreenMode(); - interface->GetConfiguration(configBeforeDetach); - displayState = EDisconnect; - UserSvr::HalFunction(EHalGroupDisplay | (screenNo<<16), EDisplayHalSetDisplayState, &displayState, NULL); - Pause(300); - //dummy mapping should return KErrNotReady if display is disconnected - error = mappingInterface->MapCoordinates(ECompositionSpace, dummyRect, EFullScreenSpace, dummyRect); - ASSERT_EQUALS(error, KErrNotReady); - - displayState = ENoResolution; - UserSvr::HalFunction(EHalGroupDisplay | (screenNo<<16), EDisplayHalSetDisplayState, &displayState, NULL); - Pause(300); - //dummy mapping should return KErrNotReady if display is disconnected - error = mappingInterface->MapCoordinates(ECompositionSpace, dummyRect, EFullScreenSpace, dummyRect); - ASSERT_EQUALS(error, KErrNotReady); - - displayState = ENormalResolution; - UserSvr::HalFunction(EHalGroupDisplay | (screenNo<<16), EDisplayHalSetDisplayState, &displayState, NULL); - Pause(300); - - interface->GetConfiguration(configAfterReattach); - ASSERT_TRUE(configBeforeDetach==configAfterReattach); - appModeAfterReattach = iScreenDevice->CurrentScreenMode(); - ASSERT_EQUALS(appModeBeforeDetach, appModeAfterReattach); - //2nd detach-attach sequence ends here - // - - configBeforeDetach.ClearAll(); - configAfterReattach.ClearAll(); - - // - //3rd detach-attach sequence - dynamic app mode - if (dynamicAppMode == -1) - { - screenModeList.Close(); - resolutionList1.Close(); - INFO_PRINTF1(_L("No dynamic app mode, end test")); //not a fail if there isn't a dynamic app mode - return; - } - - iScreenDevice->SetAppScreenMode(dynamicAppMode); - iScreenDevice->SetScreenMode(dynamicAppMode); - Pause(200); - appModeBeforeDetach = iScreenDevice->CurrentScreenMode(); - interface->GetConfiguration(configBeforeDetach); - displayState = EDisconnect; - UserSvr::HalFunction(EHalGroupDisplay | (screenNo<<16), EDisplayHalSetDisplayState, &displayState, NULL); - Pause(300); - //dummy mapping should return KErrNotReady if display is disconnected - error = mappingInterface->MapCoordinates(ECompositionSpace, dummyRect, EFullScreenSpace, dummyRect); - ASSERT_EQUALS(error, KErrNotReady); - - displayState = ENoResolution; - UserSvr::HalFunction(EHalGroupDisplay | (screenNo<<16), EDisplayHalSetDisplayState, &displayState, NULL); - Pause(300); - //dummy mapping should return KErrNotReady if display is disconnected - error = mappingInterface->MapCoordinates(ECompositionSpace, dummyRect, EFullScreenSpace, dummyRect); - ASSERT_EQUALS(error, KErrNotReady); - - displayState = ENormalResolution; - UserSvr::HalFunction(EHalGroupDisplay | (screenNo<<16), EDisplayHalSetDisplayState, &displayState, NULL); - Pause(300); - - interface->GetConfiguration(configAfterReattach); - ASSERT_FALSE(configBeforeDetach==configAfterReattach); - TSize afterReattachSize; - ASSERT_TRUE(configAfterReattach.GetResolution(afterReattachSize)); - ASSERT_EQUALS(afterReattachSize,TSize(0,0)); - ASSERT_TRUE(configAfterReattach.GetResolutionTwips(afterReattachSize)); - ASSERT_EQUALS(afterReattachSize,TSize(0,0)); - - appModeAfterReattach = iScreenDevice->CurrentScreenMode(); - ASSERT_EQUALS(appModeBeforeDetach, appModeAfterReattach); - //3rd detach-attach sequence ends here - // - - screenModeList.Close(); - resolutionList1.Close(); -#endif - } - - -CDSATestDrawing::CDSATestDrawing():CTimer(EPriorityStandard) - {} - -CDSATestDrawing::~CDSATestDrawing() - { - Cancel(); - } -CDSATestDrawing* CDSATestDrawing::NewL() - { - CDSATestDrawing *self = new(ELeave) CDSATestDrawing(); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -void CDSATestDrawing::ConstructL() - { - CTimer::ConstructL(); - CActiveScheduler::Add(this); - } - -void CDSATestDrawing::StartDrawingL(CDirectScreenAccess *aDSA) - { - - if(aDSA) - { - iDSA = aDSA; - } - - if(iDSA) - { - iDSA->StartL(); - - iRect = TRect(TPoint(0,0), iDSA->DrawingRegion()->BoundingRect().Size()); - - iWin->Invalidate(); - iWin->BeginRedraw(); - CFbsBitGc* gc = iDSA->Gc(); - gc->SetBrushColor(TRgb(220,220,220)); - gc->SetBrushStyle(CGraphicsContext::ESolidBrush); - gc->Clear(); - iWin->EndRedraw(); - After(500000); - } - - } - -void CDSATestDrawing::RunL() - { - Draw(); - After(500000); - } - -void CDSATestDrawing::Draw() - { - iWin->Invalidate(); - iWin->BeginRedraw(); - CFbsBitGc* gc = iDSA->Gc(); - gc->SetPenStyle(gc->ESolidPen); - gc->SetPenColor(TRgb(255,0,0)); - gc->SetBrushStyle(gc->ENullBrush); - iRect.Shrink(1, 1); - gc->DrawRect(iRect); - iDSA->ScreenDevice()->Update(); - iWin->EndRedraw(); - - } -void CDSATestDrawing::Restart(RDirectScreenAccess::TTerminationReasons /*aReason*/) - { - - StartDrawingL(NULL); - } - -void CDSATestDrawing::AbortNow(RDirectScreenAccess::TTerminationReasons /*aReason*/) - { - Cancel(); - } - -/** -@SYMTestCaseID GRAPHICS_WSERV_DYNAMICRES_0011L -@SYMTestCaseDesc Test DSA drawing in different App Mode -@SYMREQ REQ10332 REQ10336 -@SYMPREQ PREQ2102 -@SYMTestType CT -@SYMTestPurpose Test DSA can restart and draw at correct place when screen mode changes -@SYMTestActions - A rectangle will be drawn 1 pixel inside the DSA drawing region, and continue to shrink before the drawing - time runs out. when screen mode changes, DSA should restart and the rectangle should be reset to 1 pixel inside - the new drawing region. - - note: DSA drawing region is clipped by DSA buffer, App Size and the visible area of the window which it drawns in -@SYMTestExpectedResults - All tests should pass. - -*/ -void CWsDynamicResBasic::GRAPHICS_WSERV_DYNAMICRES_0011L() - { - LOG_AND_PANIC_IF_NOT_GCE; - ResetScreens(); - - Pause(1000); - MakeTitleAndCompareWindowsL(_L("GFX_WSERV_DYNAMICRES_0011L"),_L("DSA drawing")); - CDSATestDrawing *dsaDraw = CDSATestDrawing::NewL(); - CleanupStack::PushL(dsaDraw); - CDirectScreenAccess *dsa = CDirectScreenAccess::NewL(iSession, *iScreenDevice, iCompare, *dsaDraw); - CleanupStack::PushL(dsa); - dsaDraw->SetWindow(iCompare); - dsaDraw->StartDrawingL(dsa); - - CEventTimer *timer = CEventTimer::NewL(); - CleanupStack::PushL(timer); - - RArray screenModeList; - iInfoScreenDevice->GetScreenSizeModeList(&screenModeList); - MDisplayControl* interface = static_cast - (iScreenDevice->GetInterface(MDisplayControl::ETypeId)); - ASSERT_TRUE(interface); - - MDisplayMapping* mappingInterface = static_cast - (iScreenDevice->GetInterface(MDisplayMapping::ETypeId)); - ASSERT_TRUE(mappingInterface); - - CFbsScreenDevice *pixelReadBackDevice = CFbsScreenDevice::NewL(iScreenDevice->GetScreenNumber(), iScreenDevice->DisplayMode()); - CleanupStack::PushL(pixelReadBackDevice); - - for (TInt res=0;resSetAppScreenMode(screenModeList[res]); - iScreenDevice->SetScreenMode(screenModeList[res]); - dsa->ScreenDevice()->Update(); - Pause(300); - //wait for DSA to restart - timer->Wait(500000); - TRect regionRect(dsa->DrawingRegion()->BoundingRect()); - - TPoint winpos = iCompare.AbsPosition(); - TSize winsize = iCompare.Size(); - - TPixelsAndRotation pr; - iInfoScreenDevice->GetDefaultScreenSizeAndRotation(pr); - TPoint origin=iInfoScreenDevice->GetDefaultScreenModeOrigin(); - Pause(300); - if (iTitle.WsHandle()) - { - TPoint infoWinPos; - TSize infoWinSize; - infoWinPos=iTitle.AbsPosition(); - infoWinSize=iTitle.Size(); - infoWinSize.iHeight=pr.iPixelSize.iHeight-2*infoWinPos.iY; - iTitle.SetSize(infoWinSize); - } - TBuf16<20> s; - s.AppendNum(res); - UpdateTitleWindowL(s,1); - s.Zero(); - s.AppendNum(pr.iPixelSize.iWidth); - s.Append('x'); - s.AppendNum(pr.iPixelSize.iHeight); - UpdateTitleWindowL(s,2); - s.Zero(); - s.AppendNum(origin.iX); - s.Append(','); - s.AppendNum(origin.iY); - UpdateTitleWindowL(s,3); - - INFO_PRINTF2(_L("---------test %i---------"), res); - INFO_PRINTF3(_L("resolution %i x %i"), pr.iPixelSize.iWidth, pr.iPixelSize.iHeight); - INFO_PRINTF3(_L("Origin (%i, %i)"), origin.iX, origin.iY); - //INFO_PRINTF3(_L("Test Window Origin (%i, %i)"), iCompare.AbsPosition().iX, iCompare.AbsPosition().iY); - INFO_PRINTF3(_L("DSA drawing region bounding rect origin (%i, %i)"), dsa->DrawingRegion()->BoundingRect().iTl.iX, - dsa->DrawingRegion()->BoundingRect().iTl.iY); - INFO_PRINTF3(_L("DSA drawing region bounding rect size (%i x %i)"), dsa->DrawingRegion()->BoundingRect().Width(), - dsa->DrawingRegion()->BoundingRect().Height()); - //give time so DSA AO can start drawing - timer->Wait(5000000); - - - TRect readBackRect; - mappingInterface->MapCoordinates(EApplicationSpace, TRect(0,0,1,1), EDirectScreenAccessSpace, readBackRect); - pixelReadBackDevice->SetDrawDeviceOffset(readBackRect.iTl); - pixelReadBackDevice->SetDeviceOrientation((TDeviceOrientation)(1 << pr.iRotation)); - readBackRect.SetRect(dsa->DrawingRegion()->BoundingRect().iTl, dsa->DrawingRegion()->BoundingRect().iBr); - - if(readBackRect.IsEmpty()) - { - INFO_PRINTF1(_L("DSA drawing region is empty, skip checking pixel colour")); - continue; - } - - //if my rectangle's iTl is (0,0) and iBr is (100,100). Why does it gives me the rect width and height - //both 100? 0 - 100 is 101 pixels drawn. Or does this indicates iBr is exclusive and iTl is inclusive? - //Ruo: Oh I almost believe iBr is exclusive now - TDisplayConfiguration dispConfigAfter2; - interface->GetConfiguration(dispConfigAfter2); - TSize theSize; - dispConfigAfter2.GetResolution(theSize); - TDisplayConfiguration1::TRotation orient; - dispConfigAfter2.GetRotation(orient); - if (orient == TDisplayConfiguration1::ERotation90CW || orient == TDisplayConfiguration1::ERotation270CW) - { - TInt temp = theSize.iHeight; - theSize.iHeight = theSize.iWidth; - theSize.iWidth = temp; - } - TRect uiSize(TPoint(0,0), theSize); - MDisplayMapping* mappingInterface = static_cast - (iScreenDevice->GetInterface(MDisplayMapping::ETypeId)); - ASSERT_TRUE(mappingInterface); - TRect finalSize; - mappingInterface->MapCoordinates(EApplicationSpace, uiSize, ECompositionSpace, finalSize); - - CFbsBitmap* bmp2 = new (ELeave) CFbsBitmap; - CleanupStack::PushL(bmp2); - User::LeaveIfError(bmp2->Create(finalSize.Size(), EColor16MU)); - MTestScreenCapture - * csc = - static_cast (iScreenDevice->GetInterface(MTestScreenCapture::KUidTestScreenCaptureIf)); - - if (csc) - { - TInt errr = csc->ComposeScreen(*bmp2); - ASSERT_TRUE(errr == KErrNone); - } - else - { - if (!cSCLogged) - { - cSCLogged = ETrue; - _LIT(KNoCSC, "CSC testing not enabled as CSC render stage not defined"); - Logger().LogExtra(((TText8*)__FILE__), __LINE__, ESevrAll, KNoCSC); - } - } - - readBackRect.iBr = readBackRect.iBr - TPoint(1,1); - //check 4 outter corners - TRgb pixelRgb; - TRgb cornerRgb(220, 220, 220); - TRgb innerRgb(255, 0, 0); - readBackRect.Grow(1, 1); - TRect compSpaceReadBackRect; - mappingInterface->MapCoordinates(EApplicationSpace, readBackRect, ECompositionSpace, compSpaceReadBackRect); - - - if (csc) - { - if (finalSize.Contains(compSpaceReadBackRect.iTl)) - { - bmp2->GetPixel(pixelRgb, compSpaceReadBackRect.iTl); - if(!(pixelRgb != cornerRgb)) - { - _LIT(KCompareFailed, "Corner check failed on app mode: %d"); - TBuf<256> x; - x.Format(KCompareFailed, res+1); - Logger().LogExtra(((TText8*)__FILE__), __LINE__, ESevrErr, x); - CleanupStack::PopAndDestroy(bmp2); - continue; - } - } - if (finalSize.Contains(TPoint(compSpaceReadBackRect.iBr.iX, compSpaceReadBackRect.iTl.iY))) - { - bmp2->GetPixel(pixelRgb, TPoint(compSpaceReadBackRect.iBr.iX, compSpaceReadBackRect.iTl.iY)); - if(!(pixelRgb != cornerRgb)) - { - _LIT(KCompareFailed, "Corner check failed on app mode: %d"); - TBuf<256> x; - x.Format(KCompareFailed, res+1); - Logger().LogExtra(((TText8*)__FILE__), __LINE__, ESevrErr, x); - CleanupStack::PopAndDestroy(bmp2); - continue; - } - } - if (finalSize.Contains(compSpaceReadBackRect.iBr)) - { - bmp2->GetPixel(pixelRgb, compSpaceReadBackRect.iBr); - if(!(pixelRgb != cornerRgb)) - { - _LIT(KCompareFailed, "Corner check failed on app mode: %d"); - TBuf<256> x; - x.Format(KCompareFailed, res+1); - Logger().LogExtra(((TText8*)__FILE__), __LINE__, ESevrErr, x); - CleanupStack::PopAndDestroy(bmp2); - continue; - } - } - if (finalSize.Contains(TPoint(compSpaceReadBackRect.iTl.iX, compSpaceReadBackRect.iBr.iY))) - { - bmp2->GetPixel(pixelRgb, TPoint(compSpaceReadBackRect.iTl.iX, compSpaceReadBackRect.iBr.iY)); - if(!(pixelRgb != cornerRgb)) - { - _LIT(KCompareFailed, "Corner check failed on app mode: %d"); - TBuf<256> x; - x.Format(KCompareFailed, res+1); - Logger().LogExtra(((TText8*)__FILE__), __LINE__, ESevrErr, x); - CleanupStack::PopAndDestroy(bmp2); - continue; - } - } - } - - pixelReadBackDevice->GetPixel(pixelRgb, readBackRect.iTl); - ASSERT_TRUE(pixelRgb != cornerRgb); - pixelReadBackDevice->GetPixel(pixelRgb, TPoint(readBackRect.iBr.iX, readBackRect.iTl.iY)); - ASSERT_TRUE(pixelRgb != cornerRgb); - pixelReadBackDevice->GetPixel(pixelRgb, readBackRect.iBr); - ASSERT_TRUE(pixelRgb != cornerRgb); - pixelReadBackDevice->GetPixel(pixelRgb, TPoint(readBackRect.iTl.iX, readBackRect.iBr.iY)); - ASSERT_TRUE(pixelRgb != cornerRgb); - - //check 4 inner corners - readBackRect.Shrink(1,1); - mappingInterface->MapCoordinates(EApplicationSpace, readBackRect, ECompositionSpace, compSpaceReadBackRect); - - if (csc) - { - if (finalSize.Contains(compSpaceReadBackRect.iTl)) - { - bmp2->GetPixel(pixelRgb, compSpaceReadBackRect.iTl); - if(!(pixelRgb == cornerRgb)) - { - _LIT(KCompareFailed, "Corner check failed on app mode: %d"); - TBuf<256> x; - x.Format(KCompareFailed, res+1); - Logger().LogExtra(((TText8*)__FILE__), __LINE__, ESevrErr, x); - CleanupStack::PopAndDestroy(bmp2); - continue; - } - } - if (finalSize.Contains(TPoint(compSpaceReadBackRect.iBr.iX, compSpaceReadBackRect.iTl.iY))) - { - bmp2->GetPixel(pixelRgb, TPoint(compSpaceReadBackRect.iBr.iX, compSpaceReadBackRect.iTl.iY)); - if(!(pixelRgb == cornerRgb)) - { - _LIT(KCompareFailed, "Corner check failed on app mode: %d"); - TBuf<256> x; - x.Format(KCompareFailed, res+1); - Logger().LogExtra(((TText8*)__FILE__), __LINE__, ESevrErr, x); - CleanupStack::PopAndDestroy(bmp2); - continue; - } - } - if (finalSize.Contains(compSpaceReadBackRect.iBr)) - { - bmp2->GetPixel(pixelRgb, compSpaceReadBackRect.iBr); - if(!(pixelRgb == cornerRgb)) - { - _LIT(KCompareFailed, "Corner check failed on app mode: %d"); - TBuf<256> x; - x.Format(KCompareFailed, res+1); - Logger().LogExtra(((TText8*)__FILE__), __LINE__, ESevrErr, x); - CleanupStack::PopAndDestroy(bmp2); - continue; - } - } - if (finalSize.Contains(TPoint(compSpaceReadBackRect.iTl.iX, compSpaceReadBackRect.iBr.iY))) - { - bmp2->GetPixel(pixelRgb, TPoint(compSpaceReadBackRect.iTl.iX, compSpaceReadBackRect.iBr.iY)); - if(!(pixelRgb == cornerRgb)) - { - _LIT(KCompareFailed, "Corner check failed on app mode: %d"); - TBuf<256> x; - x.Format(KCompareFailed, res+1); - Logger().LogExtra(((TText8*)__FILE__), __LINE__, ESevrErr, x); - CleanupStack::PopAndDestroy(bmp2); - continue; - } - } - } - - pixelReadBackDevice->GetPixel(pixelRgb, readBackRect.iTl); - ASSERT_TRUE(pixelRgb == cornerRgb); - pixelReadBackDevice->GetPixel(pixelRgb, TPoint(readBackRect.iBr.iX, readBackRect.iTl.iY)); - ASSERT_TRUE(pixelRgb == cornerRgb); - pixelReadBackDevice->GetPixel(pixelRgb, readBackRect.iBr); - ASSERT_TRUE(pixelRgb == cornerRgb); - pixelReadBackDevice->GetPixel(pixelRgb, TPoint(readBackRect.iTl.iX, readBackRect.iBr.iY)); - ASSERT_TRUE(pixelRgb == cornerRgb); - //check inner colour - if(readBackRect.Width() < 3 || readBackRect.Height() < 3) - { - INFO_PRINTF1(_L("DSA drawing region is too small for drawing inner rectangle skip checking inner colour")); - CleanupStack::PopAndDestroy(bmp2); - continue; - } - - readBackRect.Shrink(1,1); - mappingInterface->MapCoordinates(EApplicationSpace, readBackRect, ECompositionSpace, compSpaceReadBackRect); - - if (csc) - { - if (finalSize.Contains(compSpaceReadBackRect.iTl)) - { - bmp2->GetPixel(pixelRgb, compSpaceReadBackRect.iTl); - if(!(pixelRgb == innerRgb)) - { - _LIT(KCompareFailed, "Corner check failed on app mode: %d"); - TBuf<256> x; - x.Format(KCompareFailed, res+1); - Logger().LogExtra(((TText8*)__FILE__), __LINE__, ESevrErr, x); - CleanupStack::PopAndDestroy(bmp2); - continue; - } - } - if (finalSize.Contains(TPoint(compSpaceReadBackRect.iBr.iX, compSpaceReadBackRect.iTl.iY))) - { - bmp2->GetPixel(pixelRgb, TPoint(compSpaceReadBackRect.iBr.iX, compSpaceReadBackRect.iTl.iY)); - if(!(pixelRgb == innerRgb)) - { - _LIT(KCompareFailed, "Corner check failed on app mode: %d"); - TBuf<256> x; - x.Format(KCompareFailed, res+1); - Logger().LogExtra(((TText8*)__FILE__), __LINE__, ESevrErr, x); - CleanupStack::PopAndDestroy(bmp2); - continue; - } - } - if (finalSize.Contains(compSpaceReadBackRect.iBr)) - { - bmp2->GetPixel(pixelRgb, compSpaceReadBackRect.iBr); - if(!(pixelRgb == innerRgb)) - { - _LIT(KCompareFailed, "Corner check failed on app mode: %d"); - TBuf<256> x; - x.Format(KCompareFailed, res+1); - Logger().LogExtra(((TText8*)__FILE__), __LINE__, ESevrErr, x); - CleanupStack::PopAndDestroy(bmp2); - continue; - } - } - if (finalSize.Contains(TPoint(compSpaceReadBackRect.iTl.iX, compSpaceReadBackRect.iBr.iY))) - { - bmp2->GetPixel(pixelRgb, TPoint(compSpaceReadBackRect.iTl.iX, compSpaceReadBackRect.iBr.iY)); - if(!(pixelRgb == innerRgb)) - { - _LIT(KCompareFailed, "Corner check failed on app mode: %d"); - TBuf<256> x; - x.Format(KCompareFailed, res+1); - Logger().LogExtra(((TText8*)__FILE__), __LINE__, ESevrErr, x); - CleanupStack::PopAndDestroy(bmp2); - continue; - } - } - } - - pixelReadBackDevice->GetPixel(pixelRgb, readBackRect.iTl); - ASSERT_TRUE(pixelRgb == innerRgb); - pixelReadBackDevice->GetPixel(pixelRgb, TPoint(readBackRect.iBr.iX, readBackRect.iTl.iY)); - ASSERT_TRUE(pixelRgb == innerRgb); - pixelReadBackDevice->GetPixel(pixelRgb, readBackRect.iBr); - ASSERT_TRUE(pixelRgb == innerRgb); - pixelReadBackDevice->GetPixel(pixelRgb, TPoint(readBackRect.iTl.iX, readBackRect.iBr.iY)); - ASSERT_TRUE(pixelRgb == innerRgb); - - CleanupStack::PopAndDestroy(bmp2); - } - screenModeList.Close(); - CleanupStack::PopAndDestroy(4, dsaDraw); - } - -/** -@SYMTestCaseID GRAPHICS_WSERV_DYNAMICRES_0012L -@SYMTestCaseDesc Test Pointer event coordinates are correct in different screen modes. -@SYMREQ REQ10336 -@SYMPREQ PREQ2102 -@SYMTestType CT -@SYMTestPriority 1 -@SYMTestPurpose Test Pointer event coordinates are correct in different screen mode -@SYMTestActions - In each screen mode, the simulated pointer event should always at the same relative position - inside iCompare window -@SYMTestExpectedResults - All test should pass - **NOTE Can only be tested in screen 0 ** -*/ -void CWsDynamicResBasic::GRAPHICS_WSERV_DYNAMICRES_0012L() - { - LOG_AND_PANIC_IF_NOT_GCE; - ResetScreens(); - MakeTitleAndCompareWindowsL(_L("GFX_WSERV_DYNAMICRES_0012L"),_L("Pointer coordinates")); - Pause(300); - - CWsDisplayEvent* displayEventAO = new(ELeave) CWsDisplayEvent(&iSession); - CleanupStack::PushL(displayEventAO); - displayEventAO->Request(); - CEventTimer *timer = CEventTimer::NewL(); - CleanupStack::PushL(timer); - - MDisplayMapping* mappingInterface = static_cast - (iScreenDevice->GetInterface(MDisplayMapping::ETypeId)); - ASSERT_TRUE(mappingInterface); - - RArray screenModeList; - iInfoScreenDevice->GetScreenSizeModeList(&screenModeList); - iSession.SetFocusScreen(TGlobalSettings::Instance().iScreen); - - for (TInt res=0;resSetAppScreenMode(screenModeList[res]); - iScreenDevice->SetScreenMode(screenModeList[res]); - Pause(300); - - //win position in app space - TPoint winPos = iCompare.AbsPosition(); - TSize winSize = iCompare.Size(); - - //pointer event at the origin of window - TRect rectNearWinOrigin(winPos+TPoint(1,1), TSize(1,1)); - //the expected pointer position received by client to compare with the actual point received. - //it's (1,1) because it's relative to window - displayEventAO->SetExpectedPointPos(TPoint(1, 1)); - TRect rectInComp, rectBackInApp; - mappingInterface->MapCoordinates(EApplicationSpace, rectNearWinOrigin, ECompositionSpace, rectInComp); - //as we got the physical coordinates at where we simulate pointer event - TRawEvent rawEvent; - rawEvent.Set(TRawEvent::EButton1Down, rectInComp.iTl.iX, rectInComp.iTl.iY); - iSession.SimulateRawEvent(rawEvent); - rawEvent.Set(TRawEvent::EButton1Up, rectInComp.iTl.iX, rectInComp.iTl.iY); - iSession.SimulateRawEvent(rawEvent); - iSession.Flush(); - timer->Wait(1000); - - ASSERT_EQUALS(displayEventAO->ReceivedPointerEventCount(), res*4+2); - ASSERT_TRUE(displayEventAO->PointerTestPassed()); - - //pointer event at 1/2 width and height inside the window - TRect rectAtWinCenter(winPos+TPoint(winSize.iWidth/2, winSize.iHeight/2), TSize(1,1)); - displayEventAO->SetExpectedPointPos(rectAtWinCenter.iTl - winPos); - mappingInterface->MapCoordinates(EApplicationSpace, rectAtWinCenter, ECompositionSpace, rectInComp); - //as we got the physical coordinates at where we simulate pointer event - rawEvent.Set(TRawEvent::EButton1Down, rectInComp.iTl.iX, rectInComp.iTl.iY); - iSession.SimulateRawEvent(rawEvent); - rawEvent.Set(TRawEvent::EButton1Up, rectInComp.iTl.iX, rectInComp.iTl.iY); - iSession.SimulateRawEvent(rawEvent); - iSession.Flush(); - timer->Wait(1000); - - ASSERT_EQUALS(displayEventAO->ReceivedPointerEventCount(), res*4 + 4); - ASSERT_TRUE(displayEventAO->PointerTestPassed()); - } - screenModeList.Close(); - CleanupStack::PopAndDestroy(2, displayEventAO); - } - -/** -@SYMTestCaseID GRAPHICS_WSERV_DYNAMICRES_0013L -@SYMTestCaseDesc Test the twips size after detach -@SYMREQ REQ10329 -@SYMPREQ PREQ2102 -@SYMTestType CT -@SYMTestPurpose Make sure the twips size is undefined after detach. -@SYMTestActions - Save display configuration before detach and compare it with the display configuration after detach. -@SYMTestExpectedResults - all tests should pass -*/ -void CWsDynamicResBasic::GRAPHICS_WSERV_DYNAMICRES_0013L() - { - LOG_AND_PANIC_IF_NOT_GCE; - ResetScreens(); -#ifdef MODE_CHANGE_BASE_FUNCTIONALITY_NOT_PRESENT_IN_HEADER - ASSERT_FALSE("Test not compiled because MODE_CHANGE_BASE_FUNCTIONALITY_NOT_PRESENT_IN_HEADER"); -#else - TInt error; - iSession.Finish(ETrue); - MakeTitleAndCompareWindowsL(_L("GFX_WSERV_DYNAMICRES_0013L"),_L("detach/attach - twips size")); - iSession.Finish(ETrue); - - Pause(1000); - TInt screenNo = iScreenDevice->GetScreenNumber(); - RArray screenModeList; - iInfoScreenDevice->GetScreenSizeModeList(&screenModeList); - MDisplayControl* interface = static_cast - (iScreenDevice->GetInterface(MDisplayControl::ETypeId)); - ASSERT_TRUE(interface); - - MDisplayMapping* mappingInterface = static_cast - (iScreenDevice->GetInterface(MDisplayMapping::ETypeId)); - ASSERT_TRUE(mappingInterface); - - TInt resolutions = interface->NumberOfResolutions(); - ASSERT_TRUE (resolutions > 0); - - RArray resolutionList1; - error = interface->GetResolutions(resolutionList1); - ASSERT_EQUALS(error,KErrNone); - ASSERT_EQUALS(resolutionList1.Count(), resolutions); - - TDisplayConfiguration configBeforeDetach; - - // detach the display - interface->GetConfiguration(configBeforeDetach); - TInt displayState = EDisconnect; - UserSvr::HalFunction(EHalGroupDisplay | (screenNo<<16), EDisplayHalSetDisplayState, &displayState, NULL); - Pause(300); - - // retrieve the display configuration - interface->GetConfiguration(configBeforeDetach); - ASSERT_FALSE(configBeforeDetach.IsDefined(TDisplayConfiguration::EResolutionTwips)); - - error = interface->GetResolutions(resolutionList1); - ASSERT_EQUALS(error,KErrDisconnected); - - configBeforeDetach.ClearAll(); - - screenModeList.Close(); - resolutionList1.Close(); - - displayState = ENormalResolution; - UserSvr::HalFunction(EHalGroupDisplay | (screenNo<<16), EDisplayHalSetDisplayState, &displayState, NULL); -#endif - } - -/** -@SYMTestCaseID GRAPHICS_WSERV_DYNAMICRES_0014L -@SYMTestCaseDesc Test GetConfiguration immediatly after SetConfiguration -@SYMREQ REQ10328 -@SYMPREQ PREQ2102 -@SYMTestType CT -@SYMTestPurpose Make sure the twips size is buffered so immediate GetConfiguration can get correct twip size -@SYMTestActions - successive SetConfiguration/GetConfiguration pair -@SYMTestExpectedResults - all tests should pass -*/ -void CWsDynamicResBasic::GRAPHICS_WSERV_DYNAMICRES_0014L() - { - MDisplayControl* interface = static_cast - (iScreenDevice->GetInterface(MDisplayControl::ETypeId)); - ASSERT_TRUE(interface); - - RArray resolutions; - TInt err = interface->GetResolutions(resolutions); - ASSERT_EQUALS(err, KErrNone); - TDisplayConfiguration configSet, configGet; - TSize twipsGet, resolutionGet; - - TInt screenNo = iScreenDevice->GetScreenNumber(); - iSession.SetFocusScreen(TGlobalSettings::Instance().iScreen); - for(TInt testIndex = 0; testIndex < 2; testIndex++) - {//run twice -#ifdef MODE_CHANGE_BASE_FUNCTIONALITY_NOT_PRESENT_IN_HEADER - INFO_PRINTF1(_L("Test not compiled because MODE_CHANGE_BASE_FUNCTIONALITY_NOT_PRESENT_IN_HEADER")); -#else - TInt displayState; - displayState = ENormalResolution; - UserSvr::HalFunction(EHalGroupDisplay | (screenNo<<16), EDisplayHalSetDisplayState, &displayState, NULL); -#endif - for (TInt i=0;iSetConfiguration(configSet); - if(err != KErrNone) - { - //with scaling, KErrArgument means current config is not compatible with appmode. - //In none scaling, it does mean an error, - //but the purpose of this test is to see if twips size is buffered so we can read it back instantly - //let other tests test the functionality of SetConfiguration. - ASSERT_EQUALS(err, KErrArgument); - - INFO_PRINTF1(_L("this configuration is not compatible with current appmode, skip")); - continue; - } - interface->GetConfiguration(configGet); - ASSERT_TRUE(configGet.IsDefined(TDisplayConfigurationBase::EResolutionTwips)); - ASSERT_TRUE(configGet.IsDefined(TDisplayConfigurationBase::EResolution)); - configGet.GetResolutionTwips(twipsGet); - configGet.GetResolution(resolutionGet); - INFO_PRINTF3(_L("resolution readback: %i x %i"), resolutionGet.iWidth, resolutionGet.iHeight); - INFO_PRINTF3(_L("twips readback: %i x %i"), twipsGet.iWidth, twipsGet.iHeight); - ASSERT_EQUALS(twipsGet, resolutions[i].iTwipsSize); - Pause(300); - } -#ifdef MODE_CHANGE_BASE_FUNCTIONALITY_NOT_PRESENT_IN_HEADER - INFO_PRINTF1(_L("Test not compiled because MODE_CHANGE_BASE_FUNCTIONALITY_NOT_PRESENT_IN_HEADER")); -#else - displayState = EDisconnect; - UserSvr::HalFunction(EHalGroupDisplay | (screenNo<<16), EDisplayHalSetDisplayState, &displayState, NULL); -#endif - } - resolutions.Close(); - - } - -/** -@SYMTestCaseID GRAPHICS_WSERV_DYNAMICRES_0015L -@SYMTestCaseDesc No Scaling doesnt return virtual resolutions -@SYMREQ REQ10336 -@SYMPREQ PREQ2102 -@SYMTestType CT -@SYMTestPriority 1 -@SYMTestPurpose no scaling should mean basic resolution selection -@SYMTestActions - Get resolution list - Should not contain virtual resolutions - Set every app mode - Should not change resolution -@SYMTestExpectedResults - All test should pass - **SENSITIVE TO CHANGES IN EPOC.INI and WSINI.INI** -*/ -void CWsDynamicResBasic::GRAPHICS_WSERV_DYNAMICRES_0015L() - { //ONLY RUN WITH 'NO SCALING' WSINI.INI, can be found in resources - MDisplayControl* interface = static_cast - (iScreenDevice->GetInterface(MDisplayControl::ETypeId)); - ASSERT_TRUE(interface); - - TInt resolutions = interface->NumberOfResolutions(); - TInt screenNumber = iScreenDevice->GetScreenNumber(); - if (screenNumber == 0) - { - ASSERT_EQUALS(resolutions,1); - } - else if (screenNumber == 1) - { - ASSERT_EQUALS(resolutions,4); - } - - RArray resolutionList1; - TInt error = interface->GetResolutions(resolutionList1); - ASSERT_EQUALS(error,KErrNone); - ASSERT_EQUALS(resolutionList1.Count(), resolutions); - - RArray screenModeList; - iInfoScreenDevice->GetScreenSizeModeList(&screenModeList); - - TDisplayConfiguration dispConfig1; - interface->GetConfiguration(dispConfig1); - TSize size1; - ASSERT_TRUE(dispConfig1.GetResolution(size1)); - - for (TInt ii = 0; ii < screenModeList.Count(); ii++) - { - iInfoScreenDevice->SetAppScreenMode(screenModeList[ii]); - iInfoScreenDevice->SetScreenMode(screenModeList[ii]); - iSession.Finish(ETrue); - Pause(300); - - TDisplayConfiguration newConfig; - interface->GetConfiguration(newConfig); - TSize newSize; - ASSERT_TRUE(dispConfig1.GetResolution(newSize)); - ASSERT_EQUALS(size1,newSize); - } - iInfoScreenDevice->SetAppScreenMode(screenModeList[0]); - iInfoScreenDevice->SetScreenMode(screenModeList[0]); - iSession.Finish(ETrue); - Pause(300); - - screenModeList.Close(); - resolutionList1.Close(); - } - -/** -@SYMTestCaseID GRAPHICS_WSERV_DYNAMICRES_0016L -@SYMTestCaseDesc Anisotropic scaling -@SYMREQ REQ10336 -@SYMPREQ PREQ2102 -@SYMTestType CT -@SYMTestPriority 1 -@SYMTestPurpose Check using twips will cause virtual resolutions to possibly be different -@SYMTestActions - Check the virtual resolution for XXX is correctly XXX - Check when setting the appmode, it choses the correct resolution -@SYMTestExpectedResults - Tests should pass - **SENSITIVE TO CHANGES IN EPOC.INI and WSINI.INI** -*/ -void CWsDynamicResBasic::GRAPHICS_WSERV_DYNAMICRES_0016L() - { //ONLY RUN WITH ANISOTROPIC WSINI.INI - - } - -/** -@SYMTestCaseID GRAPHICS_WSERV_DYNAMICRES_0017L -@SYMTestCaseDesc Integer scales correctly in policy -@SYMREQ REQ10336 -@SYMPREQ PREQ2102 -@SYMTestType CT -@SYMTestPriority 1 -@SYMTestPurpose Integer scaling should not create resolutions of non integer value! -@SYMTestActions - For every virtual resolution - Check its an integer size of a real resolution -@SYMTestExpectedResults - All should be integers (1:1 , 1:2 , 1:3 or 1:4 in current policy) - **NOTE ONLY RUN WITH INTEGER WSINI.INI** -*/ -void CWsDynamicResBasic::GRAPHICS_WSERV_DYNAMICRES_0017L() - { //ONLY RUN WITH INTEGER WSINI.INI - MDisplayControl* interface = static_cast - (iScreenDevice->GetInterface(MDisplayControl::ETypeId)); - ASSERT_TRUE(interface); - - TInt resolutions = interface->NumberOfResolutions(); - ASSERT_TRUE(resolutions>1); - - RArray resolutionList1; - TInt error = interface->GetResolutions(resolutionList1); - ASSERT_EQUALS(error,KErrNone); - ASSERT_EQUALS(resolutionList1.Count(), resolutions); - - TInt index; - for (index=0;index - (iScreenDevice->GetInterface(MDisplayControl::ETypeId)); - ASSERT_TRUE(interface); - - MDisplayMapping* mapInterface = static_cast - (iScreenDevice->GetInterface(MDisplayMapping::ETypeId)); - ASSERT_TRUE(mapInterface); - - RArray screenModeList; - iInfoScreenDevice->GetScreenSizeModeList(&screenModeList); - - TRect maxWinExtent, refMaxWinExtent; - TSize surfaceSize, surfaceTwips, refSurfaceSize, refSurfaceTwips; - TRect displayWinExtent, refDisplayWinExtent; - for (TInt i = 0; i < screenModeList.Count(); i++) - { - iInfoScreenDevice->SetAppScreenMode(screenModeList[i]); - iInfoScreenDevice->SetScreenMode(screenModeList[i]); - iSession.Finish(ETrue); - Pause(300); - - INFO_PRINTF1(_L("---------------")); - INFO_PRINTF2(_L("screen mode : %i"), screenModeList[i]); - - mapInterface->GetMaximumWindowExtent(maxWinExtent); - INFO_PRINTF3(_L("MaximumWindowExtent Origin: (%i, %i)"), maxWinExtent.iTl.iX, maxWinExtent.iTl.iY); - INFO_PRINTF3(_L("MaximumWindowExtent Size: %i x %i"), maxWinExtent.Width(), maxWinExtent.Height()); - - - TDisplayConfiguration config; - interface->GetConfiguration(config); - ASSERT_TRUE(config.IsDefined(TDisplayConfigurationBase::EResolution)); - TSize fullUiSize; - config.GetResolution(fullUiSize); - error = mapInterface->MapCoordinates(EFullScreenSpace, fullUiSize, EApplicationSpace, refMaxWinExtent); - ASSERT_EQUALS(error, KErrNone); - INFO_PRINTF3(_L("ref MaximumWindowExtent Origin: (%i, %i)"), refMaxWinExtent.iTl.iX, refMaxWinExtent.iTl.iY); - INFO_PRINTF3(_L("ref MaximumWindowExtent Size: %i x %i"), refMaxWinExtent.Width(), refMaxWinExtent.Height()); - ASSERT_EQUALS(maxWinExtent, refMaxWinExtent); - INFO_PRINTF1(_L("Match")); - - mapInterface->GetMaximumSurfaceSize(surfaceSize, surfaceTwips); - INFO_PRINTF3(_L("MaxSurfaceSize: %i x %i"), surfaceSize.iWidth, surfaceSize.iHeight); - INFO_PRINTF3(_L("MaxSurfaceTwips: %i x %i"), surfaceTwips.iWidth, surfaceSize.iHeight); - TRect compositionRect; - error = mapInterface->MapCoordinates(EFullScreenSpace, fullUiSize, ECompositionSpace, compositionRect); - ASSERT_EQUALS(error, KErrNone); - refSurfaceSize = compositionRect.Size(); - INFO_PRINTF3(_L("RefSurfaceSize: %i x %i"), refSurfaceSize.iWidth, refSurfaceSize.iHeight); - ASSERT_TRUE(config.IsDefined(TDisplayConfigurationBase::EResolutionTwips)); - config.GetResolutionTwips(refSurfaceTwips); - INFO_PRINTF3(_L("RefSurfaceTwips: %i x %i"), refSurfaceTwips.iWidth, refSurfaceTwips.iHeight); - ASSERT_EQUALS(surfaceSize, refSurfaceSize); - ASSERT_EQUALS(surfaceTwips, refSurfaceTwips); - INFO_PRINTF1(_L("Match")); - - mapInterface->GetDisplayExtentOfWindow(iCompare, displayWinExtent); - INFO_PRINTF3(_L("DisplayWin origin: (%i, %i)"), displayWinExtent.iTl.iX, displayWinExtent.iTl.iY); - INFO_PRINTF3(_L("DisplayWin Size: (%i x %i"), displayWinExtent.Width(), displayWinExtent.Height()); - error = mapInterface->MapCoordinates(EApplicationSpace, TRect(TPoint(iCompare.AbsPosition()),iCompare.Size()), ECompositionSpace, refDisplayWinExtent); - ASSERT_EQUALS(error, KErrNone); - INFO_PRINTF3(_L("RefDisplayWin origin: (%i, %i)"), refDisplayWinExtent.iTl.iX, refDisplayWinExtent.iTl.iY); - INFO_PRINTF3(_L("RefDisplayWin Size: (%i x %i"), refDisplayWinExtent.Width(), refDisplayWinExtent.Height()); - ASSERT_EQUALS(displayWinExtent, refDisplayWinExtent); - INFO_PRINTF1(_L("Match")); - } - iInfoScreenDevice->SetAppScreenMode(screenModeList[0]); - iInfoScreenDevice->SetScreenMode(screenModeList[0]); - screenModeList.Close(); - } - -/* -@SYMTestCaseID GRAPHICS_WSERV_DYNAMICRES_0021L -@SYMTestCaseDesc SetResolution negative test -@SYMREQ REQ10326 -@SYMPREQ PREQ2102 -@SYMTestType CT -@SYMTestPriority 1 -@SYMTestPurpose Invalid configurations should return error and change nothing! -@SYMTestActions - Set config with rubbish resolution - Set config with rubbish twips - Set config with valid resolution, rubbish twips - Set config with valid twips, rubbish resolution - Set config with nothing defined -@SYMTestExpectedResults - Should all fail safely and not change any settings. - Config with nothing defined in a scaled mode will reset the resolution to current modes - equivilent virtual resolution - **NOTE ONLY RUN IN SCREEN 1 - we need multiple resolutions available** -*/ -void CWsDynamicResBasic::GRAPHICS_WSERV_DYNAMICRES_0021L(TBool aScaleMode) - { //aScaleMode 0 = no scaling, 1 = integer,isotropic or anisotropic - MDisplayControl* interface = static_cast - (iScreenDevice->GetInterface(MDisplayControl::ETypeId)); - ASSERT_TRUE(interface); - - TInt resolutions = interface->NumberOfResolutions(); - ASSERT_TRUE (resolutions > 1); - - RArray resolutionList1; - TInt error = interface->GetResolutions(resolutionList1); - ASSERT_EQUALS(resolutionList1.Count(), resolutions); - - TDisplayConfiguration original; - original.SetResolution(resolutionList1[0].iPixelSize); - error = interface->SetConfiguration(original); - ASSERT_EQUALS(error,KErrNone); - - TDisplayConfiguration beforeConfig; - TDisplayConfiguration afterConfig; - interface->GetConfiguration(beforeConfig); - - TInt differentRes; - for (differentRes = 1; differentRes < resolutions; differentRes++) - { - if (!(resolutionList1[differentRes].iPixelSize == resolutionList1[0].iPixelSize)) - { - break; - } - } - ASSERT_TRUE(differentRes < resolutions); //otherwise it didnt find a resolution different to the one set - - TDisplayConfiguration test1; - test1.SetResolution(TSize(5,6)); //rubbish resolution! - error = interface->SetConfiguration(test1); - - ASSERT_EQUALS(error,KErrArgument); - - ASSERT_EQUALS(error,KErrArgument); - iSession.Flush(); - interface->GetConfiguration(afterConfig); - ASSERT_TRUE(beforeConfig == afterConfig); - - TDisplayConfiguration test2; - test2.SetResolutionTwips(TSize(7,8)); //rubbish twips! - error = interface->SetConfiguration(test2); - ASSERT_EQUALS(error,KErrArgument); - iSession.Flush(); - interface->GetConfiguration(afterConfig); - ASSERT_TRUE(beforeConfig == afterConfig); - - TDisplayConfiguration test3; - test3.SetResolution(resolutionList1[differentRes].iPixelSize); //ok resolution! - test3.SetResolutionTwips(TSize(9,10)); //rubbish twips! - error = interface->SetConfiguration(test3); - //ASSERT_EQUALS(error,KErrArgument); - if (error != KErrArgument) - { - ASSERT_EQUALS (aScaleMode,0); //if no policy, we currently have issue with confing not being validated - INFO_PRINTF1(_L("config was not honoured!")); - error = interface->SetConfiguration(original); - ASSERT_EQUALS(error,KErrNone); - iSession.Flush(); - Pause(200); - } - else - { - iSession.Flush(); - Pause(200); - interface->GetConfiguration(afterConfig); - ASSERT_TRUE(beforeConfig == afterConfig); - } - - TDisplayConfiguration test4; - test4.SetResolution(TSize(11,12)); //rubbish resolution! - test4.SetResolutionTwips(resolutionList1[differentRes].iTwipsSize); //ok twips! - error = interface->SetConfiguration(test4); - if (error != KErrArgument) - { - ASSERT_EQUALS (aScaleMode,0); //if no policy, we currently have issue with config not being validated - INFO_PRINTF1(_L("config was not honoured!")); - error = interface->SetConfiguration(original); - ASSERT_EQUALS(error,KErrNone); - iSession.Flush(); - Pause(200); - } - else - { - iSession.Flush(); - Pause(200); - interface->GetConfiguration(afterConfig); - ASSERT_TRUE(beforeConfig == afterConfig); - } - - if (aScaleMode) - { - RArray screenModeList; - iInfoScreenDevice->GetScreenSizeModeList(&screenModeList); - ASSERT_TRUE(screenModeList.Count()>1); - //set default screen mode, sets resolution to best fit for this mode - iInfoScreenDevice->SetAppScreenMode(screenModeList[0]); - iInfoScreenDevice->SetScreenMode(screenModeList[0]); //also sets its best resolution - iSession.Finish(ETrue); - Pause(200); - - TDisplayConfiguration newModeConfig; - interface->GetConfiguration(newModeConfig); - //get best fit resolution - TSize newModeRes; - ASSERT_TRUE(newModeConfig.GetResolution(newModeRes)); - - //find a different resolution - TInt i; - for (i = 0; i < resolutions; i++) - { - if (!(resolutionList1[i].iPixelSize == newModeRes)) - { - break; - } - } - ASSERT_TRUE(i < resolutions); //otherwise it didnt find a resolution different to the one set - TDisplayConfiguration newSetConfig; - - //set the different resolution - newSetConfig.SetResolution(resolutionList1[i].iPixelSize); - error = interface->SetConfiguration(newSetConfig); - ASSERT_TRUE(error == KErrNone); - iSession.Flush(); - Pause(200); - TDisplayConfiguration checkConfig; - - //check its set this new resolution - interface->GetConfiguration(checkConfig); - TSize checkSize; - checkConfig.GetResolution(checkSize); - ASSERT_TRUE (checkSize == resolutionList1[i].iPixelSize); - - TDisplayConfiguration emptyConfig; - TDisplayConfiguration newModeConfig2(newModeConfig); - newModeConfig2.Clear(newModeConfig2.EResolutionTwips); - //set empty config, which should reset resolution to current modes default - error = interface->SetConfiguration(emptyConfig);//emptyConfig); - ASSERT_TRUE(error == KErrNone); - iSession.Finish(); - Pause(200); - - interface->GetConfiguration(checkConfig); - ASSERT_TRUE (newModeConfig == checkConfig); //empty config reset res to modes default res - - screenModeList.Close(); - } - else - { - TDisplayConfiguration test5; - error = interface->SetConfiguration(test5); - ASSERT_EQUALS(error,KErrArgument); - } - resolutionList1.Close(); - } - -/** -@SYMTestCaseID GRAPHICS_WSERV_DYNAMICRES_0031L -@SYMTestCaseDesc SetConfiguration in OOM (changing resolution) -@SYMREQ REQ10326 -@SYMPREQ PREQ2102 -@SYMTestType CT -@SYMTestPriority 1 -@SYMTestPurpose Safety check against OOM -@SYMTestActions - Set OOM failure - Set a resolution that will definately cause a change of resolution - Increase length of time to failure, repeat - Finish after 5 successful changes of resolution -@SYMTestExpectedResults - Set resolution should either return a fail and not have cause a change in resolution, - or it should have returned no fail and have set the new resolution -*/ -void CWsDynamicResBasic::GRAPHICS_WSERV_DYNAMICRES_0031L() - { - MDisplayControl* interface = static_cast - (iScreenDevice->GetInterface(MDisplayControl::ETypeId)); - ASSERT_TRUE(interface); - INFO_PRINTF1(_L("Interface obtained sucessfully.")); - - TInt resolutions = interface->NumberOfResolutions(); - ASSERT_TRUE (resolutions > 0); - INFO_PRINTF1(_L("NumberOfResolutions obtained sucessfully.")); - - RArray resolutionList1; - TInt error = interface->GetResolutions(resolutionList1); - ASSERT_EQUALS(error,KErrNone); - ASSERT_EQUALS(resolutionList1.Count(), resolutions); - INFO_PRINTF1(_L("resolutionList1 has correct number of resolutions.")); - - TInt index; - TDisplayConfiguration dispConfigBefore; - TDisplayConfiguration dispConfigAfter; - - dispConfigBefore.SetResolution(resolutionList1[0].iPixelSize); - interface->SetConfiguration(dispConfigBefore); - interface->GetConfiguration(dispConfigBefore); - ASSERT_TRUE(dispConfigBefore.IsDefined(dispConfigBefore.EResolution)); - INFO_PRINTF1(_L("dispConfigBefore is defined.")); - TSize dispResBefore; - TSize dispResAfter; - dispConfigBefore.GetResolution(dispResBefore); - TDisplayConfiguration::TRotation dispRotBefore; - TDisplayConfiguration::TRotation dispRotReq; - dispConfigBefore.GetRotation(dispRotBefore); - - for (index = 0; index < resolutionList1.Count(); index++) - { - INFO_PRINTF2(_L("Starting resolution %d."), index); - if (resolutionList1[index].iPixelSize.iWidth == 0) - { - continue; - } - TInt heapFail = 1; - TBool notComplete = ETrue; - TInt completeCount = 0; - while (notComplete) - { - TDisplayConfiguration dispConfigReq; - dispConfigReq.SetResolution(resolutionList1[index].iPixelSize); - ASSERT_TRUE(dispConfigReq.IsDefined(dispConfigReq.EResolution)); - SetRotation(dispConfigReq,resolutionList1[index]); //set rotation to first defined in res list - dispConfigReq.GetRotation(dispRotReq); - INFO_PRINTF2(_L("Before heap failure, value of heapfail is %d."), heapFail); - - iSession.Finish(ETrue); - iSession.HeapSetFail(RHeap::EDeterministic,heapFail); - TInt errCode=interface->SetConfiguration(dispConfigReq); - iSession.HeapSetFail(RHeap::ENone,0); - INFO_PRINTF1(_L("After Heap Failure.")); - iSession.Finish(ETrue); - Pause (100); - INFO_PRINTF1(_L("After Session Finish.")); - - interface->GetConfiguration(dispConfigAfter); - ASSERT_TRUE(dispConfigAfter.IsDefined(dispConfigAfter.EResolution)); - dispConfigAfter.GetResolution(dispResAfter); - - TBool worked = ETrue; - if (errCode < KErrNone) - { - worked = EFalse; - ASSERT_EQUALS(dispResAfter,dispResBefore); - if (dispRotReq != dispRotBefore) - { //didnt expect it work-KErrGeneral can mean a memory allocation fail - if (errCode == KErrArgument) - { //if it didnt panic, that is a good enough pass in this instance - worked = ETrue; - } - } - } - else - { - ASSERT_EQUALS(dispResAfter,resolutionList1[index].iPixelSize); - } - if (worked) - { - completeCount++; - if (completeCount == 5) - { - notComplete = EFalse; - } - } - else - { - completeCount = 0; - } - interface->SetConfiguration(dispConfigBefore); - INFO_PRINTF1(_L("After Setting Original Configuration.")); - heapFail++; - if (heapFail == 80) - { - ASSERT_TRUE(0); //worrying amount of fails - } - } - } - resolutionList1.Close(); - } - -/** -@SYMTestCaseID GRAPHICS_WSERV_DYNAMICRES_0032L -@SYMTestCaseDesc SetAppMode in OOM -@SYMREQ REQ10326 REQ10336 -@SYMPREQ PREQ2102 -@SYMTestType CT -@SYMTestPriority 1 -@SYMTestPurpose Safety check against OOM -@SYMTestActions - Set OOM failure - Set new app mode - Increase length of time to failure, repeat - Finish after 5 successful changes of mode -@SYMTestExpectedResults - SetAppMode should either return a fail and not have cause a change in resolution, - or it should have returned no fail and have set the new resolution -*/ -void CWsDynamicResBasic::GRAPHICS_WSERV_DYNAMICRES_0032L() - { - MDisplayControl* interface = static_cast - (iScreenDevice->GetInterface(MDisplayControl::ETypeId)); - ASSERT_TRUE(interface); - - TInt resolutions = interface->NumberOfResolutions(); - ASSERT_TRUE (resolutions > 0); - RArray screenModeList; - iInfoScreenDevice->GetScreenSizeModeList(&screenModeList); - ASSERT_TRUE (screenModeList.Count()>0); - - iInfoScreenDevice->SetAppScreenMode(screenModeList[0]); - iInfoScreenDevice->SetScreenMode(screenModeList[0]); - - for (TInt index = 1; index < screenModeList.Count(); index++) - { //skip index 0, as that wouldn't be changing mode - TInt heapFail = 1; - TBool notComplete = ETrue; - TInt completeCount = 0; - while (notComplete) - { - iInfoScreenDevice->SetAppScreenMode(screenModeList[index]); - iSession.Finish(ETrue); - iSession.HeapSetFail(RHeap::EDeterministic,heapFail); - iInfoScreenDevice->SetScreenMode(screenModeList[index]); - iSession.HeapSetFail(RHeap::ENone,0); - iSession.Finish(ETrue); - Pause(50); - TInt newMode = iInfoScreenDevice->CurrentScreenMode(); - - if (screenModeList[index] == newMode) - { - completeCount++; - if (completeCount == 5) - { - INFO_PRINTF2(_L("Succeeded with heapFail = %d"),heapFail); - notComplete = EFalse; - } - iInfoScreenDevice->SetAppScreenMode(screenModeList[0]); - iInfoScreenDevice->SetScreenMode(screenModeList[0]); - iSession.Finish(ETrue); - Pause(50); - } - else - { - completeCount = 0; - } - heapFail++; - if (heapFail == 80) - { - ASSERT_TRUE(0); //worrying amount of fails - } - } - } - screenModeList.Close(); - } - -/** -@SYMTestCaseID GRAPHICS_WSERV_DYNAMICRES_0033L -@SYMTestCaseDesc GetConfiguration in OOM -@SYMREQ REQ10328 -@SYMPREQ PREQ2102 -@SYMTestType CT -@SYMTestPriority 1 -@SYMTestPurpose Safety check against OOM -@SYMTestActions - Set OOM failure - GetConfiguration - Check config - Increase time till failure - Success after 5 completed gets -@SYMTestExpectedResults - Should always succeed -*/ -void CWsDynamicResBasic::GRAPHICS_WSERV_DYNAMICRES_0033L() - { - MDisplayControl* interface = static_cast - (iScreenDevice->GetInterface(MDisplayControl::ETypeId)); - ASSERT_TRUE(interface); - - TInt heapFail = 1; - for (TInt i=0;i<5;i++) - { - TDisplayConfiguration config; - iSession.Finish(ETrue); - iSession.HeapSetFail(RHeap::EDeterministic,heapFail); - interface->GetConfiguration(config); - iSession.HeapSetFail(RHeap::ENone,0); - iSession.Finish(ETrue); - ASSERT_TRUE(config.IsDefined(config.ERotation)); - ASSERT_TRUE(config.IsDefined(config.EResolution)); - ASSERT_TRUE(config.IsDefined(config.EResolutionTwips)); - heapFail++; - } - } - -/** -@SYMTestCaseID GRAPHICS_WSERV_DYNAMICRES_0034L -@SYMTestCaseDesc GetResolutions in OOM -@SYMREQ REQ10328 -@SYMPREQ PREQ2102 -@SYMTestType CT -@SYMTestPriority 1 -@SYMTestPurpose Safety check against OOM -@SYMTestActions - Set OOM failure - GetResolutions - Check resolutions filled in - Success after 5 completed gets -@SYMTestExpectedResults - Should never panic! -*/ -void CWsDynamicResBasic::GRAPHICS_WSERV_DYNAMICRES_0034L() - { - MDisplayControl* interface = static_cast - (iScreenDevice->GetInterface(MDisplayControl::ETypeId)); - ASSERT_TRUE(interface); - - TInt resolutions = interface->NumberOfResolutions(); - ASSERT_TRUE(resolutions>1); - - RArray resolutionList1; - TInt error = interface->GetResolutions(resolutionList1); - ASSERT_EQUALS(error,KErrNone); - ASSERT_TRUE(resolutionList1.Count() > 0); - - TInt heapFail = 1; - TInt completeCount = 0; - TBool notComplete = ETrue; - while (notComplete) - { - RArray resolutionList2; - iSession.Finish(ETrue); - iSession.HeapSetFail(RHeap::EDeterministic,heapFail); - error = interface->GetResolutions(resolutionList2); - iSession.HeapSetFail(RHeap::ENone,0); - iSession.Finish(ETrue); - if (errorSizeInPixels()); - screenSize.Shrink(5,5); - - RBlankWindow testWindow; - if (iInfoGc) - { - testWindow=RBlankWindow(iSession); - ASSERT_EQUALS(testWindow.Construct(*iInfoGroup, ++iWindowHandle), KErrNone); - testWindow.SetColor(iBlue); - testWindow.SetExtent(screenSize.iTl,screenSize.Size()); - testWindow.Activate(); - - if (testWindow.WsHandle()) - { - iSession.Flush(); - iSession.Finish(); - } - testWindow.SetVisible(ETrue); - } - - iSession.Finish(ETrue); - - RArray screenModeList; - iInfoScreenDevice->GetScreenSizeModeList(&screenModeList); - MDisplayControl* interface = static_cast - (iScreenDevice->GetInterface(MDisplayControl::ETypeId)); - ASSERT_TRUE(interface); - - TInt resolutions = interface->NumberOfResolutions(); - ASSERT_TRUE (resolutions > 0); - - RArray resolutionList1; - error = interface->GetResolutions(resolutionList1); - ASSERT_EQUALS(error,KErrNone); - ASSERT_EQUALS(resolutionList1.Count(), resolutions); - - TDisplayConfiguration dispConfigBefore; - interface->GetConfiguration(dispConfigBefore); - ASSERT_TRUE(dispConfigBefore.IsDefined(dispConfigBefore.EResolution)) - if (screenModeList.Count()>1) - { - //Got a mode to change to! - TSize resBefore; - TBool ok=dispConfigBefore.GetResolution(resBefore); - ASSERT_TRUE(ok); //we "know" this should be ok, as we just asserted the flag - for (TInt res=0;resSetAppScreenMode(screenModeList[res]); - iInfoScreenDevice->SetScreenMode(screenModeList[res]); - iSession.Finish(ETrue); - Pause(300); - - - TSize pr = iInfoScreenDevice->SizeInPixels(); - TPoint origin=iInfoScreenDevice->GetDefaultScreenModeOrigin(); - Pause(300); - TSize winpos; - - TSize surfaceSize = pr; - surfaceSize.iWidth /= 2; - surfaceSize.iWidth -= 20; - surfaceSize.iHeight -= 20; - TSurfaceId surfaceID; - TRAPD(err, surfaceID = iUtility->CreateSurfaceL(surfaceSize, - KSurfaceFormat, surfaceSize.iWidth * KBytesPerPixel)); - ASSERT_EQUALS(err,KErrNone); - TRAP(err,iUtility->PatternFillSurfaceL(surfaceID)); - ASSERT_EQUALS(err,KErrNone); - - CFbsBitmap* equivalentBitmap=NULL; - TRAP(err,equivalentBitmap=iUtility->EquivalentBitmapL(surfaceID)); - CleanupStack::PushL(equivalentBitmap); - ASSERT_EQUALS(err,KErrNone); - - screenSize = iInfoScreenDevice->SizeInPixels(); - TSize testSize = iScreenDevice->SizeInPixels(); - screenSize.Shrink(5,5); - - if (iInfoGc) - { - testWindow.SetExtent(screenSize.iTl,screenSize.Size()); - - if (testWindow.WsHandle()) - { - - iSession.Flush(); - iSession.Finish(); - } - testWindow.SetVisible(ETrue); - } - Pause(200); - iSession.Finish(ETrue); - - RWindow surfWindow; - if (iInfoGc) - { - surfWindow=RWindow(iSession); - ASSERT_EQUALS(surfWindow.Construct(*iInfoGroup, ++iWindowHandle), KErrNone); - surfWindow.SetBackgroundSurface(surfaceID); - surfWindow.SetExtent(screenSize.iTl+TPoint( screenSize.Width()/2 +5,5),surfaceSize); - surfWindow.Activate(); - - if (surfWindow.WsHandle()) - { - surfWindow.Invalidate(); - - surfWindow.BeginRedraw(); - ActivateWithWipe(iInfoGc,surfWindow,iRed); - surfWindow.EndRedraw(); - - iSession.Flush(); - iSession.Finish(); - } - surfWindow.SetVisible(ETrue); - iInfoGc->Deactivate(); - } - - iSession.Finish(ETrue); - - TRect bitmapDrawRect; - bitmapDrawRect = surfaceSize; - - RWindow bmpWindow; - if (iInfoGc) - { - bmpWindow=RWindow(iSession); - ASSERT_EQUALS(bmpWindow.Construct(*iInfoGroup, ++iWindowHandle), KErrNone); - bmpWindow.SetBackgroundColor(iRed); - bmpWindow.SetExtent(screenSize.iTl+TPoint(5,5),surfaceSize); - bmpWindow.Activate(); - - if (bmpWindow.WsHandle()) - { - bmpWindow.Invalidate(); - - bmpWindow.BeginRedraw(); - ActivateWithWipe(iInfoGc,bmpWindow,iRed); - // Not drawing, draw twice?? - iInfoGc->DrawBitmap(bitmapDrawRect, equivalentBitmap); - bmpWindow.EndRedraw(); - - iSession.Flush(); - iSession.Finish(); - } - bmpWindow.SetVisible(ETrue); - iInfoGc->Deactivate(); - } - Pause(200); - iSession.Finish(ETrue); - - - if (iInfoGc) - { - - if (bmpWindow.WsHandle()) - { - bmpWindow.Invalidate(); - - bmpWindow.BeginRedraw(); - ActivateWithWipe(iInfoGc,bmpWindow,iRed); - // Not drawing, draw twice?? - iInfoGc->DrawBitmap(bitmapDrawRect, equivalentBitmap); - bmpWindow.EndRedraw(); - - iSession.Flush(); - iSession.Finish(); - } - bmpWindow.SetVisible(ETrue); - iInfoGc->Deactivate(); - } - Pause(200); - iSession.Finish(ETrue); - - if (iInfoGc) - { - - if (bmpWindow.WsHandle()) - { - bmpWindow.Invalidate(); - - bmpWindow.BeginRedraw(); - ActivateWithWipe(iInfoGc,bmpWindow,iRed); - // Not drawing, draw twice?? - iInfoGc->DrawBitmap(bitmapDrawRect, equivalentBitmap); - bmpWindow.EndRedraw(); - iSession.Flush(); - iSession.Finish(); - } - bmpWindow.SetVisible(ETrue); - iInfoGc->Deactivate(); - } - Pause(200); - iSession.Finish(ETrue); - - RArray regionArray; - - RRegion equivRegion; - TBitmapRegionPair bitmap1Region; - bitmap1Region.bitmap = equivalentBitmap; - bitmap1Region.drawRect = TRect(TPoint(0,0),surfaceSize); - equivRegion.AddRect(TRect(TPoint(0,0),surfaceSize)); - bitmap1Region.region = &equivRegion; - - regionArray.Append(bitmap1Region); - - - TDisplayConfiguration dispConfigAfter2; - interface->GetConfiguration(dispConfigAfter2); - TSize theSize; - dispConfigAfter2.GetResolution(theSize); - TDisplayConfiguration1::TRotation orient; - dispConfigAfter2.GetRotation(orient); - if (orient == TDisplayConfiguration1::ERotation90CW || orient == TDisplayConfiguration1::ERotation270CW) - { - TInt temp = theSize.iHeight; - theSize.iHeight = theSize.iWidth; - theSize.iWidth = temp; - } - TRect uiSize(TPoint(0,0), theSize); - MDisplayMapping* mappingInterface = static_cast - (iScreenDevice->GetInterface(MDisplayMapping::ETypeId)); - ASSERT_TRUE(mappingInterface); - TRect finalSize; - mappingInterface->MapCoordinates(EApplicationSpace, uiSize, ECompositionSpace, finalSize); - - - CFbsBitmap* bmp2 = new (ELeave) CFbsBitmap; - CleanupStack::PushL(bmp2); - User::LeaveIfError(bmp2->Create(finalSize.Size(), EColor16MU)); - - MTestScreenCapture - * csc = - static_cast (iScreenDevice->GetInterface(MTestScreenCapture::KUidTestScreenCaptureIf)); - if (csc) - { - TInt errr = csc->ComposeScreen(*bmp2); - ASSERT_TRUE(errr == KErrNone); - } - else - { - if (!cSCLogged) - { - cSCLogged = ETrue; - _LIT(KNoCSC, "CSC testing not enabled as CSC render stage not defined"); - Logger().LogExtra(((TText8*)__FILE__), __LINE__, ESevrAll, KNoCSC); - } - } - - - TRect compareRect(bmpWindow.AbsPosition(), bmpWindow.Size()); - TRect testRect(surfWindow.AbsPosition(), surfWindow.Size()); - - if (csc) - { - if(!Compare(*bmp2, compareRect, testRect, regionArray, aIsSurface)) - { - _LIT(KCompareFailed, "Compare Failed on app mode: %d"); - TBuf<256> x; - x.Format(KCompareFailed, res+1); - Logger().LogExtra(((TText8*)__FILE__), __LINE__, ESevrErr, x); - } - } - - CleanupStack::PopAndDestroy(bmp2); - - equivRegion.Close(); - regionArray.Close(); - - CleanupStack::PopAndDestroy(equivalentBitmap); - surfWindow.Close(); - bmpWindow.Close(); - } - } - } - //restore initial res - if (screenModeList.Count() > 1) - { //set back to basics - iInfoScreenDevice->SetAppScreenMode(screenModeList[0]); - iInfoScreenDevice->SetScreenMode(screenModeList[0]); - Pause(300); - } - - interface->SetConfiguration(dispConfigBefore); - Pause(1000); - TDisplayConfiguration dispConfigAfter; - interface->GetConfiguration(dispConfigAfter); - TSize resAfter; - ok=dispConfigAfter.GetResolution(resAfter); - ASSERT_TRUE(ok); - ASSERT_EQUALS(resBefore,resAfter); - } - else - { - INFO_PRINTF1(_L("Only 1 screen size mode configured on this screen - res change test skipped.")); - } - testWindow.Close(); - screenModeList.Close(); - resolutionList1.Close(); - } - - -/** -@SYMTestCaseID GRAPHICS_WSERV_DYNAMICRES_0042L -@SYMTestCaseDesc Test Drawing of bitmaps (case 0) and surfaces (case 1) in all different resolutions -@SYMREQ REQ10332 -@SYMPREQ PREQ2102 -@SYMTestType CT -@SYMTestPurpose Check to see if Bitmaps and Surfaces are drawn correctly in different resolutions -@SYMTestActions - A Simple pattern will be drawn by a bitmap on the left and a surface on the right, about half the window size each. The Composited Screen Capture code will be used to compare the drawing to a unchanged copy of the bitmap to see if they are drawn correctly - - Note, add .0 to test name to test bitmap drawing and .1 to test surface drawing -@SYMTestExpectedResults - All tests should pass. - -*/ -void CWsDynamicResBasic::GRAPHICS_WSERV_DYNAMICRES_0042L(TBool aIsSurface) - { - LOG_AND_PANIC_IF_NOT_GCE; - ResetScreens(); - TInt error; - iSession.Finish(ETrue); - - TRect screenSize(iInfoScreenDevice->SizeInPixels()); - screenSize.Shrink(5,5); - - RBlankWindow testWindow; - if (iInfoGc) - { - testWindow=RBlankWindow(iSession); - ASSERT_EQUALS(testWindow.Construct(*iInfoGroup, ++iWindowHandle), KErrNone); - testWindow.SetColor(iBlue); - testWindow.SetExtent(screenSize.iTl,screenSize.Size()); - testWindow.Activate(); - - if (testWindow.WsHandle()) - { - iSession.Flush(); - iSession.Finish(); - } - testWindow.SetVisible(ETrue); - } - - iSession.Finish(ETrue); - - RArray screenModeList; - iInfoScreenDevice->GetScreenSizeModeList(&screenModeList); - MDisplayControl* interface = static_cast - (iScreenDevice->GetInterface(MDisplayControl::ETypeId)); - ASSERT_TRUE(interface); - - TInt resolutions = interface->NumberOfResolutions(); - ASSERT_TRUE (resolutions > 0); - - RArray resolutionList1; - error = interface->GetResolutions(resolutionList1); - ASSERT_EQUALS(error,KErrNone); - ASSERT_EQUALS(resolutionList1.Count(), resolutions); - - TDisplayConfiguration dispConfigBefore; - interface->GetConfiguration(dispConfigBefore); - - iInfoScreenDevice->SetAppScreenMode(screenModeList[1]); - iInfoScreenDevice->SetScreenMode(screenModeList[1]); - iSession.Finish(); - Pause(50); - - if (resolutions>1) - { - //Got a mode to change to! - TSize resBefore; - TBool ok=dispConfigBefore.GetResolution(resBefore); - ASSERT_TRUE(ok); //we "know" this should be ok, as we just asserted the flag - for (TInt res=0;resSetConfiguration(dispConfigReq); - //ASSERT_EQUALS(errCode,KErrNone); - if (errCode != KErrNone) - { - //Probably current size mode does not support the rotation of the passed in configuration - - ASSERT_EQUALS(errCode,KErrArgument); //failed to find compatible res in the policy - continue; - } - - - TSize pr = iInfoScreenDevice->SizeInPixels(); - TPoint origin=iInfoScreenDevice->GetDefaultScreenModeOrigin(); - Pause(300); - TSize winpos; - - TSize surfaceSize = pr; - surfaceSize.iWidth /= 2; - surfaceSize.iWidth -= 20; - surfaceSize.iHeight -= 20; - TSurfaceId surfaceID; - TRAPD(err, surfaceID = iUtility->CreateSurfaceL(surfaceSize, - KSurfaceFormat, surfaceSize.iWidth * KBytesPerPixel)); - ASSERT_EQUALS(err,KErrNone); - TRAP(err,iUtility->PatternFillSurfaceL(surfaceID)); - ASSERT_EQUALS(err,KErrNone); - - CFbsBitmap* equivalentBitmap=NULL; - TRAP(err,equivalentBitmap=iUtility->EquivalentBitmapL(surfaceID)); - CleanupStack::PushL(equivalentBitmap); - ASSERT_EQUALS(err,KErrNone); - - screenSize = iInfoScreenDevice->SizeInPixels(); - screenSize.Shrink(5,5); - - if (iInfoGc) - { - testWindow.SetExtent(screenSize.iTl,screenSize.Size()); - - if (testWindow.WsHandle()) - { - - iSession.Flush(); - iSession.Finish(); - } - testWindow.SetVisible(ETrue); - } - Pause(200); - iSession.Finish(ETrue); - - RWindow surfWindow; - if (iInfoGc) - { - surfWindow=RWindow(iSession); - ASSERT_EQUALS(surfWindow.Construct(*iInfoGroup, ++iWindowHandle), KErrNone); - surfWindow.SetBackgroundSurface(surfaceID); - surfWindow.SetExtent(screenSize.iTl+TPoint( screenSize.Width()/2 +5,5),surfaceSize); - surfWindow.Activate(); - - if (surfWindow.WsHandle()) - { - surfWindow.Invalidate(); - - surfWindow.BeginRedraw(); - ActivateWithWipe(iInfoGc,surfWindow,iRed); - surfWindow.EndRedraw(); - - iSession.Flush(); - iSession.Finish(); - } - surfWindow.SetVisible(ETrue); - iInfoGc->Deactivate(); - } - - iSession.Finish(ETrue); - - TRect bitmapDrawRect; - bitmapDrawRect = surfaceSize; - - RWindow bmpWindow; - if (iInfoGc) - { - bmpWindow=RWindow(iSession); - ASSERT_EQUALS(bmpWindow.Construct(*iInfoGroup, ++iWindowHandle), KErrNone); - bmpWindow.SetBackgroundColor(iRed); - bmpWindow.SetExtent(screenSize.iTl+TPoint(5,5),surfaceSize); - bmpWindow.Activate(); - - if (bmpWindow.WsHandle()) - { - bmpWindow.Invalidate(); - - bmpWindow.BeginRedraw(); - ActivateWithWipe(iInfoGc,bmpWindow,iRed); - // Not drawing, draw twice?? - iInfoGc->DrawBitmap(bitmapDrawRect, equivalentBitmap); - bmpWindow.EndRedraw(); - - iSession.Flush(); - iSession.Finish(); - } - bmpWindow.SetVisible(ETrue); - iInfoGc->Deactivate(); - } - Pause(200); - iSession.Finish(ETrue); - - - if (iInfoGc) - { - - if (bmpWindow.WsHandle()) - { - bmpWindow.Invalidate(); - - bmpWindow.BeginRedraw(); - ActivateWithWipe(iInfoGc,bmpWindow,iRed); - // Not drawing, draw twice?? - iInfoGc->DrawBitmap(bitmapDrawRect, equivalentBitmap); - bmpWindow.EndRedraw(); - - iSession.Flush(); - iSession.Finish(); - } - bmpWindow.SetVisible(ETrue); - iInfoGc->Deactivate(); - } - Pause(200); - iSession.Finish(ETrue); - - - - - RArray regionArray; - - RRegion equivRegion; - TBitmapRegionPair bitmap1Region; - bitmap1Region.bitmap = equivalentBitmap; - bitmap1Region.drawRect = TRect(TPoint(0,0),surfaceSize); - equivRegion.AddRect(TRect(TPoint(0,0),surfaceSize)); - bitmap1Region.region = &equivRegion; - - regionArray.Append(bitmap1Region); - - - TDisplayConfiguration dispConfigAfter2; - interface->GetConfiguration(dispConfigAfter2); - TSize theSize; - dispConfigAfter2.GetResolution(theSize); - TDisplayConfiguration1::TRotation orient; - dispConfigAfter2.GetRotation(orient); - if (orient & 0x1) - { - TInt temp = theSize.iHeight; - theSize.iHeight = theSize.iWidth; - theSize.iWidth = temp; - } - TRect uiSize(TPoint(0,0), theSize); - MDisplayMapping* mappingInterface = static_cast - (iScreenDevice->GetInterface(MDisplayMapping::ETypeId)); - ASSERT_TRUE(mappingInterface); - TRect finalSize; - mappingInterface->MapCoordinates(EApplicationSpace, uiSize, ECompositionSpace, finalSize); - - - - - CFbsBitmap* bmp2 = new (ELeave) CFbsBitmap; - CleanupStack::PushL(bmp2); - TInt bmpErr = bmp2->Create(finalSize.Size(), EColor16MU); - ASSERT_EQUALS(bmpErr, KErrNone); - - MTestScreenCapture - * csc = - static_cast (iScreenDevice->GetInterface(MTestScreenCapture::KUidTestScreenCaptureIf)); - if (csc) - { - TInt errr = csc->ComposeScreen(*bmp2); - } - else - { - if (!cSCLogged) - { - cSCLogged = ETrue; - _LIT(KNoCSC, "CSC testing not enabled as CSC render stage not defined"); - Logger().LogExtra(((TText8*)__FILE__), __LINE__, ESevrAll, KNoCSC); - } - } - TRect compareRect(bmpWindow.AbsPosition(), bmpWindow.Size()); - TRect testRect(surfWindow.AbsPosition(), surfWindow.Size()); - - if (csc) - { - if(!Compare(*bmp2, compareRect, testRect, regionArray, aIsSurface)) - { - _LIT(KCompareFailed, "Compare Failed on resolution: %d"); - TBuf<256> x; - x.Format(KCompareFailed, res+1); - Logger().LogExtra(((TText8*)__FILE__), __LINE__, ESevrErr, x); - } - } - CleanupStack::PopAndDestroy(bmp2); - - equivRegion.Close(); - regionArray.Close(); - - CleanupStack::PopAndDestroy(equivalentBitmap); - surfWindow.Close(); - bmpWindow.Close(); - } - } - //restore initial res - iInfoScreenDevice->SetAppScreenMode(0); - iInfoScreenDevice->SetScreenMode(0); - } - else - { - INFO_PRINTF1(_L("Only 1 screen size mode configured on this screen - res change test skipped.")); - } - testWindow.Close(); - screenModeList.Close(); - resolutionList1.Close(); - } - - -/** - Tests to see if the pixels in the bitmap match what should be drawn with regards to the bitmaps and regions in aBitmapRegionPairArray - It does this by in the case of non-scaled bitmaps, performing a pixel by pixel comparison between what has been drawn to the CSC created bitmap and either the pixels of the bitmap if they are contained within the related region or the pixels of the simulation screen. In the case of scalingm only certain pixels are compared from the CSC bitmap to the comparison drawing as the scaling algorithm is hard to replicate. - - - @param aBitmap a bitmap of the entire screen which should be generated using the Composited Screen Capture code - @param aRect1 A rectangle representing the middle window in the comparison triple - @param aRect2 A rectangle represneting the right window in the comparison triple - @param aBitmapRegionPairArray An array of the different regions that are being drawn on the screen. They should be placed in order such that the closest to the foreground is first and the furthest away is last in the queue. Each member of the array is a misleadingly titled TBitmapRegion pair, the bitmap member of this should be the bitmap that is being drawn to the region of the screen, if the region is just a blank color then a blank color bitmap should be drawn. The region should be the region that the bitmap is being drawn to and should be the same as the clipping region which is set jsut before the bitmap is drawn to screen. Finally the draw rect is the basic rectangle the bitmap is being drawn to and is mainly used to test if the bitmap is being scaled - @return True - */ -TBool CWsDynamicResBasic::Compare(const CFbsBitmap& aBitmap, - const TRect& aRect1, const TRect& aRect2, - RArray& aBitmapRegionPairArray, TBool aIsSurface) - { - MDisplayMapping* mappingInterface = static_cast - (iScreenDevice->GetInterface(MDisplayMapping::ETypeId)); - ASSERT_TRUE(mappingInterface); - - - TRgb color1; - TRgb color2; - - TInt errorPixels =0; - TInt diffPixels = 0; - RRegion ignoreDueToResizing; - TInt regionCount = aBitmapRegionPairArray.Count(); - for (TInt i=regionCount-1; i>=0; i--) - { - if (aBitmapRegionPairArray[i].bitmap->SizeInPixels() - != aBitmapRegionPairArray[i].drawRect.Size()) - { - RArray corners; - corners.Append(aBitmapRegionPairArray[i].drawRect.iTl); - corners.Append(TPoint(aBitmapRegionPairArray[i].drawRect.iBr.iX-1, - aBitmapRegionPairArray[i].drawRect.iTl.iY)); - corners.Append(TPoint(aBitmapRegionPairArray[i].drawRect.iTl.iX, - aBitmapRegionPairArray[i].drawRect.iBr.iY-1)); - corners.Append(aBitmapRegionPairArray[i].drawRect.iBr- TPoint(1,1)); - for (TInt j=0; jContains(corners[j])) - { - inOther = ETrue; - } - } - if (inOther) - { - continue; - } - aBitmap.GetPixel(color1, aRect2.iTl + corners[j]); - aBitmap.GetPixel(color2, aRect1.iTl + corners[j]); - TRgb color3 = GreatestColor(color1); - TRgb color4 = GreatestColor(color2); - if (color3 != color4) - { - // Bitmap copy can be off by a pixel on grid filled surface so allow for green and yellow to be treated equally as they are the background colours, this may allow a misfunctioning gce to pass the test though. - if (color4 == TRgb(0, 1, 0) && color3 == TRgb(1, 1, 0)) - { - } - else - if (color4 == TRgb(1, 1, 0) && color3 == TRgb(0, 1, 0)) - { - } - else - { - corners.Close(); - return EFalse; - } - } - - } - // testPoints contains first the pixel within the destRect followed by the pixel in the original position for comparison to - RArray testPoints; - testPoints.Append(aBitmapRegionPairArray[i].drawRect.Center()); - testPoints.Append(TPoint( - aBitmapRegionPairArray[i].bitmap->SizeInPixels().iWidth/2, - aBitmapRegionPairArray[i].bitmap->SizeInPixels().iHeight/2)); - testPoints.Append(TPoint(aBitmapRegionPairArray[i].drawRect.iTl.iX, - aBitmapRegionPairArray[i].drawRect.Center().iY)); - testPoints.Append(TPoint(0, - aBitmapRegionPairArray[i].bitmap->SizeInPixels().iHeight/2)); - testPoints.Append(TPoint(aBitmapRegionPairArray[i].drawRect.iBr.iX - -1, aBitmapRegionPairArray[i].drawRect.Center().iY)); - testPoints.Append(TPoint( - aBitmapRegionPairArray[i].bitmap->SizeInPixels().iWidth-1, - aBitmapRegionPairArray[i].bitmap->SizeInPixels().iHeight/2)); - TSize sizeee = aBitmapRegionPairArray[i].drawRect.Size(); - if (aBitmapRegionPairArray[i].drawRect.Size().iWidth > 11 && aBitmapRegionPairArray[i].drawRect.Size().iHeight > 20) - { - testPoints.Append(TPoint( - aBitmapRegionPairArray[i].drawRect.Center().iX, aBitmapRegionPairArray[i].drawRect.iTl.iY)); - testPoints.Append(TPoint( - aBitmapRegionPairArray[i].bitmap->SizeInPixels().iWidth/2, 0)); - - testPoints.Append(TPoint( - aBitmapRegionPairArray[i].drawRect.Center().iX, aBitmapRegionPairArray[i].drawRect.iBr.iY-1)); - testPoints.Append(TPoint( - aBitmapRegionPairArray[i].bitmap->SizeInPixels().iWidth/2, - aBitmapRegionPairArray[i].bitmap->SizeInPixels().iHeight-1)); - - if (aBitmapRegionPairArray[i].drawRect.Size().iWidth > 34 - && aBitmapRegionPairArray[i].drawRect.Size().iHeight > 43) - { - testPoints.Append(aBitmapRegionPairArray[i].drawRect.iTl - + TPoint(5, 5)); - testPoints.Append(TPoint(5, 5)); - testPoints.Append(TPoint( - aBitmapRegionPairArray[i].drawRect.iBr.iX - 6, - aBitmapRegionPairArray[i].drawRect.iTl.iY + 5)); - testPoints.Append(TPoint( - aBitmapRegionPairArray[i].bitmap->SizeInPixels().iWidth-6, 5)); - testPoints.Append(TPoint( - aBitmapRegionPairArray[i].drawRect.iTl.iX + 5, - aBitmapRegionPairArray[i].drawRect.iBr.iY -6)); - testPoints.Append(TPoint(5, - aBitmapRegionPairArray[i].bitmap->SizeInPixels().iHeight - 6)); - testPoints.Append(aBitmapRegionPairArray[i].drawRect.iBr - - TPoint(6, 6)); - testPoints.Append(TPoint( - aBitmapRegionPairArray[i].bitmap->SizeInPixels().iWidth-6, - aBitmapRegionPairArray[i].bitmap->SizeInPixels().iHeight-6)); - } - else - { - testPoints.Append(aBitmapRegionPairArray[i].drawRect.iTl - + TPoint(2, 3)); - testPoints.Append(TPoint(5, 5)); - testPoints.Append(TPoint( - aBitmapRegionPairArray[i].drawRect.iBr.iX - 3, - aBitmapRegionPairArray[i].drawRect.iTl.iY + 3)); - testPoints.Append(TPoint( - aBitmapRegionPairArray[i].bitmap->SizeInPixels().iWidth-6, 5)); - testPoints.Append(TPoint( - aBitmapRegionPairArray[i].drawRect.iTl.iX + 2, - aBitmapRegionPairArray[i].drawRect.iBr.iY -4)); - testPoints.Append(TPoint(5, - aBitmapRegionPairArray[i].bitmap->SizeInPixels().iHeight - 6)); - testPoints.Append(aBitmapRegionPairArray[i].drawRect.iBr - - TPoint(3, 4)); - testPoints.Append(TPoint( - aBitmapRegionPairArray[i].bitmap->SizeInPixels().iWidth-6, - aBitmapRegionPairArray[i].bitmap->SizeInPixels().iHeight-6)); - } - } - for (int jj=0; jjContains(testPoints[jj])) - { - continue; - } - for (TInt k=0; kContains(testPoints[jj])) - { - inOther = ETrue; - } - } - if (inOther) - { - continue; - } - TPoint currentPoint = testPoints[jj]; - TRect bound = aBitmapRegionPairArray[i].region->BoundingRect(); - TBool - contat = - aBitmapRegionPairArray[i].region->Contains(testPoints[jj]); - aBitmap.GetPixel(color1, aRect2.iTl + testPoints[jj]); - aBitmapRegionPairArray[i].bitmap->GetPixel(color2, - testPoints[jj+1]); - TRgb color5 = GreatestColor(color1); - TRgb color6 = GreatestColor(color2); - if (color5 != color6) - { - // Bitmap copy can be off by a pixel on grid filled surface so allow for green and yellow to be treated equally as they are the background colours, this may allow a misfunctioning gce to pass the test though. - if (color6 == TRgb(0, 1, 0) && color5 == TRgb(1, 1, 0)) - { - } - else - if (color6 == TRgb(1, 1, 0) && color5 == TRgb(0, 1, 0)) - { - } - else - { - testPoints.Close(); - return EFalse; - } - } - } - - testPoints.Close(); - corners.Close(); - ignoreDueToResizing.Union(*aBitmapRegionPairArray[i].region); - aBitmapRegionPairArray.Remove(i); - } - } - - RRegion superRegion; - - regionCount = aBitmapRegionPairArray.Count(); - - for (TInt i=0; i0) - { - for (TInt i=0; iContains(currentPoint)) - { - if (aIsSurface) - { - TPoint checkPoint = currentPoint + aRect2.iTl; - TRect readBackRect; - mappingInterface->MapCoordinates(EApplicationSpace, TRect(checkPoint, TSize(1,1)), ECompositionSpace, readBackRect); - aBitmap.GetPixel(color1, readBackRect.iTl); - } - else - { - TPoint checkPoint = currentPoint + aRect1.iTl; - TRect readBackRect; - mappingInterface->MapCoordinates(EApplicationSpace, TRect(checkPoint, TSize(1,1)), ECompositionSpace, readBackRect); - aBitmap.GetPixel(color1, readBackRect.iTl); - } - - aBitmapRegionPairArray[arrayIndex].bitmap->GetPixel(color2, currentPoint - - aBitmapRegionPairArray[arrayIndex].drawRect.iTl); - - TRgb color7 = GreatestColor(color1); - TRgb color8 = GreatestColor(color2); - - if (color7 != color8) - { - diffPixels++; - //return EFalse; - } - pointInArray = ETrue; - } - arrayIndex++; - } - while (!pointInArray && !(arrayIndex - >= aBitmapRegionPairArray.Count())); - - if (!pointInArray) - { - aBitmap.GetPixel(color1, TPoint(i + aRect2.iTl.iX - + xStart, j +aRect2.iTl.iY +yStart)); - aBitmap.GetPixel(color2, TPoint(i + aRect1.iTl.iX - +xStart, j +aRect1.iTl.iY+yStart)); - // Bitmap copy is duller on first few iterations so just pick the greatest color or two colors and see if they match - TRgb color3 = GreatestColor(color1); - TRgb color4 = GreatestColor(color2); - - if (color3 != color4) - { - // Bitmap copy can be off by a pixel on grid filled surface so allow for green and yellow to be treated equally as they are the background colours, this may allow a misfunctioning gce to pass the test though. - if (GreatestColor(color2) == TRgb(0, 1, 0) - && GreatestColor(color1) == TRgb(1, 1, 0)) - { - continue; - } - else - if (GreatestColor(color2) == TRgb(1, 1, 0) - && GreatestColor(color1) == TRgb(0, 1, - 0)) - { - continue; - } - else - { - errorPixels++; - //return EFalse; - } - } - } - } - } - } - } - ignoreDueToResizing.Close(); - if (errorPixels+diffPixels < 2) - { - return ETrue; - } - else - { - return EFalse; - } - - } - - -/* - Creates a rough apprxoiamtion to the color pass in. This is used because of issues with the bitmap drwaing in the comparison window. If these issues are fixed then this method can be changed to simply return aColor. - - @param aColor the color to be approximated - @return an approximation of aColor. - */ -TRgb CWsDynamicResBasic::GreatestColor(TRgb& aColor) const - { - TInt test = aColor.Difference(TRgb(0, 0, 0)); - // Accounts for a case when Rgb = 20,20,20 due to poor bitmap drawing - if (aColor == TRgb(32, 32, 32)) - { - return TRgb(0, 0, 0); - } - if (aColor == TRgb(0, 0, 0)) - { - return TRgb(0, 0, 0); - } - TRgb test2; - test2.SetInternal(0xFFFEDF01); - if (aColor == test2) - { - return TRgb(1, 1, 0); - } - - if (test < 70) - { - return TRgb(0, 0, 0); - } - if (aColor.Green() > aColor.Blue()) - { - if (aColor.Green() > aColor.Red()) - { - return TRgb(0, 1, 0); - } - else - if (aColor.Green() == aColor.Red()) - { - return TRgb(1, 1, 0); - } - } - if (aColor.Green() > aColor.Red()) - { - if (aColor.Green() > aColor.Blue()) - { - return TRgb(0, 1, 0); - } - else - if (aColor.Green() == aColor.Blue()) - { - return TRgb(0, 1, 1); - } - } - - if (aColor.Red() > aColor.Green()) - { - if (aColor.Red() > aColor.Blue()) - { - return TRgb(1, 0, 0); - } - else - if (aColor.Red() == aColor.Blue()) - { - return TRgb(1, 0, 1); - } - } - if (aColor.Red() > aColor.Blue()) - { - if (aColor.Red() > aColor.Green()) - { - return TRgb(1, 0, 0); - } - else - if (aColor.Red() == aColor.Green()) - { - return TRgb(1, 1, 0); - } - } - - if (aColor.Blue() > aColor.Red()) - { - if (aColor.Blue() > aColor.Green()) - { - return TRgb(0, 0, 1); - } - else - if (aColor.Blue() == aColor.Green()) - { - return TRgb(0, 1, 1); - } - } - if (aColor.Blue() > aColor.Green()) - { - if (aColor.Blue() > aColor.Red()) - { - return TRgb(0, 0, 1); - } - else - if (aColor.Blue() == aColor.Red()) - { - return TRgb(1, 0, 1); - } - } - - // Should never reach here, but the compiler cannot be sure - return TRgb(0, 0, 0); - } - -/* -@SYMTestCaseID GRAPHICS_WSERV_DYNAMICRES_0051L -@SYMTestCaseDesc Getting if a mode is dynamic -@SYMREQ REQ11554 -@SYMPREQ PREQ2102 -@SYMTestType CT -@SYMTestPriority 1 -@SYMTestPurpose Check functions work correctly -@SYMTestActions - Do IsModeDynamic for a wrong mode number - Do IsModeDynamic for a mode that isnt dynamic - Do IsModeDynamic for a mode that is dynamic - Do IsCurrentModeDynamic when current mode is not dynamic - Do IsCurrentModeDynamic when current mode is dynamic - MODE 10 must be dynamic -@SYMTestExpectedResults - All should return as expected. -*/ -void CWsDynamicResBasic::GRAPHICS_WSERV_DYNAMICRES_0051L() - { - RArray screenModeList; - iInfoScreenDevice->GetScreenSizeModeList(&screenModeList); - iInfoScreenDevice->SetAppScreenMode(0); - iInfoScreenDevice->SetScreenMode(0); - iSession.Flush(); - Pause(50); - ASSERT_FALSE(iInfoScreenDevice->IsModeDynamic(25)); - ASSERT_FALSE(iInfoScreenDevice->IsModeDynamic(1)); - ASSERT_TRUE(iInfoScreenDevice->IsModeDynamic(10)); - ASSERT_FALSE(iInfoScreenDevice->IsCurrentModeDynamic()); - iInfoScreenDevice->SetAppScreenMode(10); - iInfoScreenDevice->SetScreenMode(10); - iSession.Flush(); - Pause(50); - ASSERT_TRUE(iInfoScreenDevice->IsCurrentModeDynamic()); - screenModeList.Close(); - iInfoScreenDevice->SetAppScreenMode(0); - iInfoScreenDevice->SetScreenMode(0); - } - -/* Takes any 0x0 resolutions out of the res list, useful for some tests -*/ -void ResListCleanup(RArray& aResList) - { - for (TInt ii=0; ii - (iScreenDevice->GetInterface(MDisplayControl::ETypeId)); - ASSERT_TRUE(interface); - - TInt resolutions = interface->NumberOfResolutions(); - ASSERT_TRUE (resolutions > 1); - - RArray resolutionList1; - TInt error = interface->GetResolutions(resolutionList1); - ASSERT_EQUALS(resolutionList1.Count(), resolutions); - ResListCleanup(resolutionList1); //remove any 0x0 - ASSERT_TRUE (resolutionList1.Count() > 1); //without multiple proper res this test is pointless - - TDisplayConfiguration newResolution; - newResolution.SetResolution(resolutionList1[0].iPixelSize); - error = interface->SetConfiguration(newResolution); - ASSERT_EQUALS(error,KErrNone); - - TSizeMode info; - RArray screenModes; - error = iInfoScreenDevice->GetScreenSizeModeList(&screenModes); - ASSERT_TRUE(error>KErrNone); - TInt dynamicMode1 = -1; - TInt dynamicMode2 = -1; - TPixelsTwipsAndRotation modeAttributes; - - //for every app mode, check calculations update correctly - for (TInt ii=0;iiIsModeDynamic(screenMode)) - { - CArrayFixFlat* rotations=new(ELeave) CArrayFixFlat(1); - CleanupStack::PushL(rotations); - TInt error = iInfoScreenDevice->GetRotationsList(screenMode,rotations); - ASSERT_EQUALS(error,KErrNone); - ASSERT_TRUE(rotations->Count()>0); - for (TInt jj = 0; jj < rotations->Count(); jj++) - { - if ((*rotations)[jj] == (TInt)CFbsBitGc::EGraphicsOrientationNormal || - (*rotations)[jj] == (TInt)CFbsBitGc::EGraphicsOrientationRotated180) - { - dynamicMode1 = screenMode; - } - else if ((*rotations)[jj] == (TInt)CFbsBitGc::EGraphicsOrientationRotated90 || - (*rotations)[jj] == (TInt)CFbsBitGc::EGraphicsOrientationRotated270) - { - dynamicMode2 = screenMode; - } - } - CleanupStack::PopAndDestroy(rotations); - continue; //dont want to test dynamic modes - } - - INFO_PRINTF2(_L("ScreenMode %d"),screenMode); - newResolution.ClearAll(); - - iInfoScreenDevice->SetAppScreenMode(screenMode); - iInfoScreenDevice->SetScreenMode(screenMode); - iSession.Flush(); - Pause(50); - - info = iInfoScreenDevice->GetCurrentScreenModeAttributes(); - //These 2 asserts relate to DEF136304 - disconnect on startup causes invalid - //twips values. They need to be calculated when the screen is connected - ASSERT_TRUE(info.iScreenTwipsSize.iWidth < 40000); - ASSERT_TRUE(info.iScreenTwipsSize.iHeight < 40000); - - //test that conversions correlate to values reported by config - TInt test = iInfoScreenDevice->HorizontalTwipsToPixels( - info.iScreenTwipsSize.iWidth); - ASSERT_EQUALS (test,info.iScreenSize.iWidth); - - test = iInfoScreenDevice->VerticalTwipsToPixels( - info.iScreenTwipsSize.iHeight); - ASSERT_EQUALS (test,info.iScreenSize.iHeight); - - test = iInfoScreenDevice->HorizontalPixelsToTwips( - info.iScreenSize.iWidth); - ASSERT_EQUALS (test,info.iScreenTwipsSize.iWidth); - - test = iInfoScreenDevice->VerticalPixelsToTwips( - info.iScreenSize.iHeight); - ASSERT_EQUALS (test,info.iScreenTwipsSize.iHeight); - } - - if (dynamicMode1 == -1 && dynamicMode2 == -1) //expected to find at least 1 dynamic mode - { - ASSERT_TRUE(0); - } - - for (TInt jj=0;jj<2;jj++) //for dynamic mode 1 and 2 - { - TInt dynMode = (jj == 0) ? dynamicMode1 : dynamicMode2; - if (dynMode == -1) - continue; - //set dynamic app mode - iInfoScreenDevice->SetAppScreenMode(dynMode); - iInfoScreenDevice->SetScreenMode(dynMode); - iSession.Flush(); - Pause(50); - ASSERT_TRUE(iInfoScreenDevice->IsModeDynamic(dynMode)); - ASSERT_TRUE(iInfoScreenDevice->IsCurrentModeDynamic()); - ASSERT_EQUALS(dynMode,iInfoScreenDevice->CurrentScreenMode()); - for (TInt ii=0;iiSetConfiguration(newResolution); - - if (jj == 0) - { - if (tempSetRot == TDisplayConfiguration1::ERotation90CW || - tempSetRot == TDisplayConfiguration1::ERotation270CW) //mode rotation will not work with config rotation - { - ASSERT_EQUALS(error,KErrArgument); - continue; - } - } - else //jj == 1 - { - if (tempSetRot == TDisplayConfiguration1::ERotationNormal || - tempSetRot == TDisplayConfiguration1::ERotation180) //mode rotation will not work with config rotation - { - ASSERT_EQUALS(error,KErrArgument); - continue; - } - } - ASSERT_EQUALS(error,KErrNone); - interface->GetConfiguration(newResolution); - iSession.Flush(); - Pause(50); - - //test that conversions correlate to values reported by config - TInt test = iInfoScreenDevice->HorizontalTwipsToPixels( - resolutionList1[ii].iTwipsSize.iWidth); - ASSERT_EQUALS (test,resolutionList1[ii].iPixelSize.iWidth); - - test = iInfoScreenDevice->VerticalTwipsToPixels( - resolutionList1[ii].iTwipsSize.iHeight); - ASSERT_EQUALS (test,resolutionList1[ii].iPixelSize.iHeight); - - test = iInfoScreenDevice->HorizontalPixelsToTwips( - resolutionList1[ii].iPixelSize.iWidth); - ASSERT_EQUALS (test,resolutionList1[ii].iTwipsSize.iWidth); - - test = iInfoScreenDevice->VerticalPixelsToTwips( - resolutionList1[ii].iPixelSize.iHeight); - ASSERT_EQUALS (test,resolutionList1[ii].iTwipsSize.iHeight); - } - } - - resolutionList1.Close(); - screenModes.Close(); - } - -/* -@SYMTestCaseID GRAPHICS_WSERV_DYNAMICRES_0053L -@SYMTestCaseDesc SetScreenSizeAndRotation -@SYMREQ REQ11554 -@SYMPREQ PREQ2102 -@SYMTestType CT -@SYMTestPriority 1 -@SYMTestPurpose Check functions work correctly -@SYMTestActions - Perform calls to SetScreenSizeAndRotation with the various structure types - MODE 10 must be dynamic -@SYMTestExpectedResults - Cannt fail, used for debugging and coverage. -*/ -void CWsDynamicResBasic::GRAPHICS_WSERV_DYNAMICRES_0053L() - { - MDisplayControl* interface = static_cast - (iScreenDevice->GetInterface(MDisplayControl::ETypeId)); - ASSERT_TRUE(interface); - - TInt resolutions = interface->NumberOfResolutions(); - ASSERT_TRUE (resolutions > 1); - - RArray resolutionList1; - TInt error = interface->GetResolutions(resolutionList1); - ASSERT_EQUALS(resolutionList1.Count(), resolutions); - - //set default app mode and default resolution - iInfoScreenDevice->SetAppScreenMode(0); - iInfoScreenDevice->SetScreenMode(0); - iSession.Flush(); - Pause(50); - TDisplayConfiguration original; - original.SetResolution(resolutionList1[0].iPixelSize); - interface->SetConfiguration(original); - iSession.Flush(); - Pause(50); - - TPixelsAndRotation setup0; - setup0.iPixelSize = TSize(30,40); - setup0.iRotation = CFbsBitGc::EGraphicsOrientationNormal; - - TPixelsTwipsAndRotation setup1; - setup1.iPixelSize = TSize(50,60); - setup1.iTwipsSize = TSize(70,80); - setup1.iRotation = CFbsBitGc::EGraphicsOrientationNormal; - - iInfoScreenDevice->SetScreenSizeAndRotation(setup0); - iInfoScreenDevice->SetScreenSizeAndRotation(setup1); - - //set dynamic app mode - iInfoScreenDevice->SetAppScreenMode(10); - iInfoScreenDevice->SetScreenMode(10); - iSession.Flush(); - Pause(50); - - iInfoScreenDevice->SetScreenSizeAndRotation(setup0); - iInfoScreenDevice->SetScreenSizeAndRotation(setup1); - - const CWsScreenDevice* newDevice = iScreenDevice; - const MDisplayControl* interface2 = (MDisplayControl*) - newDevice->GetInterface(MDisplayControl::ETypeId); - TInt version = interface2->PreferredDisplayVersion(); //for coverage! - (void)version; - - //set default app mode and default resolution - iInfoScreenDevice->SetAppScreenMode(1); - iInfoScreenDevice->SetScreenMode(1); - iSession.Flush(); - Pause(50); - interface->SetConfiguration(original); - iSession.Flush(); - Pause(50); - - resolutionList1.Close(); - } - -/** -@SYMTestCaseID GRAPHICS_WSERV_DYNAMICRES_0101L -@SYMTestCaseDesc Quick demonstration of app modes sizes and positions on screen -@SYMREQ -@SYMPREQ PREQ2102 -@SYMTestType CT (manual visual test) -@SYMTestPurpose To show app modes -@SYMTestActions - For every app mode - Draw a blue box showing the full size and position of the app mode. - Draw thin red lines demonstrating a window can be drawn outside of the app area to fill - the screen. - Green borders at the edge of the appmode, to show we are drawing up to the edges of the - appmode. -@SYMTestExpectedResults - Blue window should represent appmode (with offset and size) - Red windows should be visible across screen - Green border (made of windows) around the appmode (blue window) -*/ -void CWsDynamicResBasic::GRAPHICS_WSERV_DYNAMICRES_0101L() - { - RArray screenModeList; - iInfoScreenDevice->GetScreenSizeModeList(&screenModeList); - - if (screenModeList.Count()>1) - { - //Got modes to change between! - TSize resBefore; - for (TInt res=0;resSetAppScreenMode(screenModeList[res]); - iInfoScreenDevice->SetScreenMode(screenModeList[res]); - iSession.Flush(); - Pause(50); - - TSize appSize = iInfoScreenDevice->SizeInPixels(); - RWindow backWindow(iSession); - ASSERT_EQUALS(backWindow.Construct(iGroup, 123455), KErrNone); - backWindow.SetRequiredDisplayMode(iDisplayMode); - backWindow.SetBackgroundColor(iCyan); - backWindow.SetExtent(TPoint(40,40),appSize-TSize(40,40)); //shows size of the apparea - backWindow.Activate(); - - TSurfaceId surfaceID; - TRAPD(err, surfaceID = iUtility->CreateSurfaceL(TSize(200,200), - KSurfaceFormat, 200 * KBytesPerPixel)); - ASSERT_EQUALS(err,KErrNone); - TRAP(err,iUtility->FanFillSurfaceL(surfaceID,iYellow,iRed,iMagenta)); - ASSERT_EQUALS(err,KErrNone); - TSurfaceConfiguration surfConf; - surfConf.SetSurfaceId(surfaceID); - - backWindow.SetBackgroundSurface(surfaceID); - - DrawPlainUI(backWindow,ETrue,iBlue); - iSession.Flush(); - Pause(200); - - RWindow longWindow1(iSession); - ASSERT_EQUALS(longWindow1.Construct(iGroup, 123456), KErrNone); - longWindow1.SetRequiredDisplayMode(iDisplayMode); - longWindow1.SetBackgroundColor(iRed); - longWindow1.SetExtent(TPoint(-2000,10),TSize(5000,5)); //shows you can draw outside the apparea - longWindow1.Activate(); - DrawPlainUI(longWindow1,ETrue,iRed); - - iBackground.SetColor(TRgb(0x001000*res|0x800000)); - iSession.SetBackgroundColor(TRgb(0x001000*res+0x40)); - iSession.Flush(); - Pause(100); - - RWindow longWindow2(iSession); - ASSERT_EQUALS(longWindow2.Construct(iGroup, 123457), KErrNone); - longWindow2.SetRequiredDisplayMode(iDisplayMode); - longWindow2.SetBackgroundColor(iRed); - longWindow2.SetExtent(TPoint(20,-2000),TSize(5,5000)); //shows you can draw outside the apparea - longWindow2.Activate(); - DrawPlainUI(longWindow2,ETrue,iRed); - - //borders - RWindow borderTop(iSession); - ASSERT_EQUALS(borderTop.Construct(iGroup, 123460), KErrNone); - borderTop.SetRequiredDisplayMode(iDisplayMode); - borderTop.SetBackgroundColor(iGreen); - borderTop.SetExtent(TPoint(0,0),TSize(appSize.iWidth,5)); //border - borderTop.Activate(); - DrawPlainUI(borderTop,ETrue,iGreen); - - RWindow borderLeft(iSession); - ASSERT_EQUALS(borderLeft.Construct(iGroup, 123461), KErrNone); - borderLeft.SetRequiredDisplayMode(iDisplayMode); - borderLeft.SetBackgroundColor(iGreen); - borderLeft.SetExtent(TPoint(0,0),TSize(5,appSize.iHeight)); //border - borderLeft.Activate(); - DrawPlainUI(borderLeft,ETrue,iGreen); - - RWindow borderRight(iSession); - ASSERT_EQUALS(borderRight.Construct(iGroup, 123462), KErrNone); - borderRight.SetRequiredDisplayMode(iDisplayMode); - borderRight.SetBackgroundColor(iGreen); - borderRight.SetExtent(TPoint(appSize.iWidth-5,0),TSize(5,appSize.iHeight)); //border - borderRight.Activate(); - DrawPlainUI(borderRight,ETrue,iGreen); - - RWindow borderBottom(iSession); - ASSERT_EQUALS(borderBottom.Construct(iGroup, 123463), KErrNone); - borderBottom.SetRequiredDisplayMode(iDisplayMode); - borderBottom.SetBackgroundColor(iGreen); - borderBottom.SetExtent(TPoint(0,appSize.iHeight-5),TSize(appSize.iWidth,5)); //border - borderBottom.Activate(); - DrawPlainUI(borderBottom,ETrue,iGreen); - - iSession.Flush(); - Pause(100); - - backWindow.Close(); - longWindow1.Close(); - longWindow2.Close(); - borderTop.Close(); - borderLeft.Close(); - borderRight.Close(); - borderBottom.Close(); - - iSession.Finish(); - Pause(50); - } - } - else - { - INFO_PRINTF1(_L("Only 1 screen size mode configured on this screen - test skipped.")); - } - - screenModeList.Close(); - iInfoScreenDevice->SetAppScreenMode(0); - iInfoScreenDevice->SetScreenMode(0); - iSession.Finish(ETrue); - Pause(100); - INFO_PRINTF1(_L("Drawing to borderBottom completed.")); - } - -/** -@SYMTestCaseID GRAPHICS_WSERV_DYNAMICRES_0102L -@SYMTestCaseDesc Quick demonstration of square app modes in all 4 rotations -@SYMREQ -@SYMPREQ PREQ2102 -@SYMTestType CT (manual visual test) -@SYMTestPurpose To show square app mode in all 4 rotations -@SYMTestActions - Draw a blue box showing the full size and position of the app mode. - Draw thin red lines demonstrating a window can be drawn outside of the app area to fill - the screen. - Green borders at the edge of the appmode, to show we are drawing up to the edges of the - appmode. -@SYMTestExpectedResults - Blue window should represent appmode (with offset and size) - Red windows should be visible across screen - Green border (made of windows) around the appmode (blue window) -*/ -void CWsDynamicResBasic::GRAPHICS_WSERV_DYNAMICRES_0102L() - { - RArray screenModeList; - iInfoScreenDevice->GetScreenSizeModeList(&screenModeList); - - - TSize resBefore; - TInt res; - for (res=0;resSetAppScreenMode(screenModeList[res]); - iInfoScreenDevice->SetScreenMode(screenModeList[res]); - - iSession.Finish(ETrue); - iSession.Flush(); - Pause(50); - - TPixelsAndRotation pr; - iInfoScreenDevice->GetDefaultScreenSizeAndRotation(pr); - if(pr.iPixelSize.iHeight == pr.iPixelSize.iWidth) - { - //found square appmode - break; - } - } - - for(TInt rotation = CFbsBitGc::EGraphicsOrientationNormal; rotation <= CFbsBitGc::EGraphicsOrientationRotated270; rotation++) - { - iScreenDevice->SetCurrentRotations(screenModeList[res], (CFbsBitGc::TGraphicsOrientation)rotation); - iSession.Flush(); - Pause(50); - TDisplayConfiguration dispConfigReq; - TSize appSize = iInfoScreenDevice->SizeInPixels(); - RWindow backWindow(iSession); - ASSERT_EQUALS(backWindow.Construct(iGroup, 123455), KErrNone); - backWindow.SetRequiredDisplayMode(iDisplayMode); - backWindow.SetBackgroundColor(iBlue); - backWindow.SetExtent(TPoint(0,0),appSize); //shows size of the apparea - backWindow.Activate(); - DrawPlainUI(backWindow,ETrue,iBlue); - iSession.Flush(); - Pause(200); - - RWindow longWindow1(iSession); - ASSERT_EQUALS(longWindow1.Construct(iGroup, 123456), KErrNone); - longWindow1.SetRequiredDisplayMode(iDisplayMode); - longWindow1.SetBackgroundColor(iRed); - longWindow1.SetExtent(TPoint(-2000,10),TSize(5000,5)); //shows you can draw outside the apparea - longWindow1.Activate(); - DrawPlainUI(longWindow1,ETrue,iRed); - - iBackground.SetColor(TRgb(0x001000*res|0x800000)); - iSession.SetBackgroundColor(TRgb(0x001000*res+0x40)); - iSession.Flush(); - Pause(100); - - RWindow longWindow2(iSession); - ASSERT_EQUALS(longWindow2.Construct(iGroup, 123457), KErrNone); - longWindow2.SetRequiredDisplayMode(iDisplayMode); - longWindow2.SetBackgroundColor(iRed); - longWindow2.SetExtent(TPoint(20,-2000),TSize(5,5000)); //shows you can draw outside the apparea - longWindow2.Activate(); - DrawPlainUI(longWindow2,ETrue,iRed); - - //borders - RWindow borderTop(iSession); - ASSERT_EQUALS(borderTop.Construct(iGroup, 123460), KErrNone); - borderTop.SetRequiredDisplayMode(iDisplayMode); - borderTop.SetBackgroundColor(iGreen); - borderTop.SetExtent(TPoint(0,0),TSize(appSize.iWidth,5)); //border - borderTop.Activate(); - DrawPlainUI(borderTop,ETrue,iGreen); - - RWindow borderLeft(iSession); - ASSERT_EQUALS(borderLeft.Construct(iGroup, 123461), KErrNone); - borderLeft.SetRequiredDisplayMode(iDisplayMode); - borderLeft.SetBackgroundColor(iGreen); - borderLeft.SetExtent(TPoint(0,0),TSize(5,appSize.iHeight)); //border - borderLeft.Activate(); - DrawPlainUI(borderLeft,ETrue,iGreen); - - RWindow borderRight(iSession); - ASSERT_EQUALS(borderRight.Construct(iGroup, 123462), KErrNone); - borderRight.SetRequiredDisplayMode(iDisplayMode); - borderRight.SetBackgroundColor(iGreen); - borderRight.SetExtent(TPoint(appSize.iWidth-5,0),TSize(5,appSize.iHeight)); //border - borderRight.Activate(); - DrawPlainUI(borderRight,ETrue,iGreen); - - RWindow borderBottom(iSession); - ASSERT_EQUALS(borderBottom.Construct(iGroup, 123463), KErrNone); - borderBottom.SetRequiredDisplayMode(iDisplayMode); - borderBottom.SetBackgroundColor(iGreen); - borderBottom.SetExtent(TPoint(0,appSize.iHeight-5),TSize(appSize.iWidth,5)); //border - borderBottom.Activate(); - DrawPlainUI(borderBottom,ETrue,iGreen); - - iSession.Flush(); - Pause(100); - - backWindow.Close(); - longWindow1.Close(); - longWindow2.Close(); - borderTop.Close(); - borderLeft.Close(); - borderRight.Close(); - borderBottom.Close(); - - iSession.Finish(); - Pause(50); - - } - - - screenModeList.Close(); - iInfoScreenDevice->SetAppScreenMode(0); - iInfoScreenDevice->SetScreenMode(0); - iSession.Finish(ETrue); - Pause(100); - }