graphicsdeviceinterface/bitgdi/tbit/tmultiplescreens.cpp
branchRCL_3
changeset 163 bbf46f59e123
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsdeviceinterface/bitgdi/tbit/tmultiplescreens.cpp	Tue Aug 31 16:31:06 2010 +0300
@@ -0,0 +1,210 @@
+// Copyright (c) 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:
+//
+
+#include <hal.h>
+#include <graphics/gdi/gdiconsts.h>
+#include "tmultiplescreens.h"
+
+CTMultipleScreens::CTMultipleScreens(CTestStep* aStep):
+	CTGraphicsBase(aStep),
+	iScrDev(NULL),
+	iGc(NULL)
+	{
+	}
+
+CTMultipleScreens::~CTMultipleScreens()
+	{
+	DestroyFont();
+	DeleteGraphicsContext();
+	DeleteScreenDevice();
+	}
+
+void CTMultipleScreens::ConstructL()
+	{
+	}
+
+void CTMultipleScreens::RunTestCaseL(TInt aCurTestCase)
+	{
+	((CTMultipleScreensStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
+	_LIT(KTest1,"SubTest %d: Create multiple screens");
+	switch(aCurTestCase)
+		{
+	case 1:
+		((CTMultipleScreensStep*)iStep)->SetTestStepID(_L("GRAPHICS-BITGDI-0072"));
+		INFO_PRINTF2(KTest1,aCurTestCase);
+		CreateScreenDeviceL();
+		break;
+	case 2:
+		((CTMultipleScreensStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
+		((CTMultipleScreensStep*)iStep)->CloseTMSGraphicsStep();
+		TestComplete();
+		break;
+		}
+	((CTMultipleScreensStep*)iStep)->RecordTestResultL();
+	}
+
+
+/**
+  @SYMTestCaseID GRAPHICS-BITGDI-0072
+ 
+  @SYMDEF             
+
+  @SYMTestCaseDesc Multiple screen test
+   
+  @SYMTestPriority High
+
+  @SYMTestStatus Implemented
+
+  @SYMTestActions creates some screens in different modes then writes some rotated text to them and test.
+ 
+  @SYMTestExpectedResults Test should perform graphics operations succesfully. 
+*/	
+void CTMultipleScreens::CreateScreenDeviceL()
+	{
+	TDisplayMode testMode[] =  {EColor4K, EColor64K, EColor16M, EColor16MU, EColor256, EColor16MA, EColor16MAP};//tested display modes
+	for(TInt ii=0;ii<TInt(sizeof(testMode)/sizeof(testMode[0]));ii++)
+		{
+		TInt screenCnt = 0;
+		TEST(HAL::Get(0, HALData::EDisplayNumberOfScreens, screenCnt) == KErrNone);
+		for(TInt screenNo=0;screenNo<screenCnt;++screenNo)
+			{
+			TInt err = CreateScrDevAndContext(screenNo, testMode[ii]);
+			if(err == KErrNone)
+				{
+				DoRotateMoveTextL();
+				}
+			DeleteGraphicsContext();
+			DeleteScreenDevice();
+			}
+		}
+	}
+
+void CTMultipleScreens::DoRotateMoveTextL()
+	{
+	__ASSERT_ALWAYS(iScrDev, User::Invariant());
+	__ASSERT_ALWAYS(iGc, User::Invariant());
+	
+	CreateFontL();
+
+	const CFbsBitGc::TGraphicsOrientation KOrientation[] = 
+		{
+		CFbsBitGc::EGraphicsOrientationNormal,
+		CFbsBitGc::EGraphicsOrientationRotated90,
+		CFbsBitGc::EGraphicsOrientationRotated180,
+		CFbsBitGc::EGraphicsOrientationRotated270
+		};
+
+	for(TInt ii=0;ii<TInt(sizeof(KOrientation)/sizeof(KOrientation[0]));++ii)
+		{
+		if(!iGc->SetOrientation(KOrientation[ii]))
+			{
+			continue;
+			}
+		_LIT(KRotation,"===EOrientation%S===");
+		INFO_PRINTF2(KRotation,&RotationName(KOrientation[ii]));
+
+		TSize size = iScrDev->SizeInPixels();
+		RDebug::Print(_L("Size: %d, %d\r\n"), size.iWidth, size.iHeight);
+		for(TInt x=-40;x<(size.iWidth+30);x+=27)
+			{
+			for(TInt y=-40;y<(size.iHeight+30);y+=23)
+				{
+				iGc->Clear();
+				iGc->SetPenStyle(CGraphicsContext::ESolidPen);
+				iGc->SetPenColor(TRgb(0x00, 0x00, 0x00));
+				iGc->SetPenSize(TSize(1, 1));
+				
+				iGc->DrawText(_L("Test text"), TPoint(x, y));
+				
+				iScrDev->Update();
+				}
+			}
+		}
+	iGc->SetOrientation(CFbsBitGc::EGraphicsOrientationNormal);
+	DestroyFont();
+	}
+
+
+TInt CTMultipleScreens::CreateScrDevAndContext(TInt aScreenNo, TDisplayMode aDisplayMode)
+	{
+	DeleteGraphicsContext();
+	DeleteScreenDevice();
+	TRAPD(err, iScrDev = CFbsScreenDevice::NewL(aScreenNo, aDisplayMode));
+	if ( !iScrDev )
+		{
+		TESTE( err == KErrNotSupported, err );
+		return err;
+		}
+	TEST(err == KErrNone);
+	TEST(iScrDev->ScreenNo() == aScreenNo);
+	err = iScrDev->CreateContext((CGraphicsContext*&)iGc);
+	if ( !iGc )
+		{
+		return err;
+		}
+	TEST(err == KErrNone);
+	iGc->SetUserDisplayMode(aDisplayMode);
+	iScrDev->ChangeScreenDevice(NULL);
+	iScrDev->SetAutoUpdate(EFalse);
+	return err;
+	}
+
+TInt CTMultipleScreens::CreateScrDevAndContext(TDisplayMode aDisplayMode)
+	{
+	return CreateScrDevAndContext(KDefaultScreenNo,aDisplayMode);
+	}
+
+void CTMultipleScreens::DeleteScreenDevice()
+	{
+	delete iScrDev;
+	iScrDev = NULL;
+	}
+
+void CTMultipleScreens::DeleteGraphicsContext()
+	{
+	delete iGc;
+	iGc = NULL;
+	}
+
+void CTMultipleScreens::CreateFontL()
+	{
+	CFbsFont* font = NULL;
+	TFontSpec fs(_L("Swiss"), 12);
+	User::LeaveIfError(iScrDev->GetNearestFontToDesignHeightInPixels(font, fs));
+	iGc->UseFont(font);
+	}
+
+void CTMultipleScreens::DestroyFont()
+	{
+	if(iGc)
+		{
+		iGc->DiscardFont();
+		}
+	}
+
+
+//
+
+
+//--------------
+__CONSTRUCT_STEP__(MultipleScreens)
+
+void CTMultipleScreensStep::TestSetupL()
+	{
+	}
+	
+void CTMultipleScreensStep::TestClose()
+	{
+	}