graphicsdeviceinterface/bitgdi/tbit/tmultiplescreens.cpp
author hgs
Fri, 30 Jul 2010 11:41:40 +0300
changeset 136 62bb7c97884c
permissions -rw-r--r--
201030_2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
136
62bb7c97884c 201030_2
hgs
parents:
diff changeset
     1
// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
62bb7c97884c 201030_2
hgs
parents:
diff changeset
     2
// All rights reserved.
62bb7c97884c 201030_2
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
62bb7c97884c 201030_2
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
62bb7c97884c 201030_2
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
62bb7c97884c 201030_2
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
62bb7c97884c 201030_2
hgs
parents:
diff changeset
     7
//
62bb7c97884c 201030_2
hgs
parents:
diff changeset
     8
// Initial Contributors:
62bb7c97884c 201030_2
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    10
//
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    11
// Contributors:
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    12
//
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    13
// Description:
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    14
//
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    15
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    16
#include <hal.h>
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    17
#include <graphics/gdi/gdiconsts.h>
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    18
#include "tmultiplescreens.h"
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    19
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    20
CTMultipleScreens::CTMultipleScreens(CTestStep* aStep):
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    21
	CTGraphicsBase(aStep),
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    22
	iScrDev(NULL),
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    23
	iGc(NULL)
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    24
	{
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    25
	}
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    26
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    27
CTMultipleScreens::~CTMultipleScreens()
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    28
	{
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    29
	DestroyFont();
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    30
	DeleteGraphicsContext();
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    31
	DeleteScreenDevice();
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    32
	}
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    33
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    34
void CTMultipleScreens::ConstructL()
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    35
	{
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    36
	}
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    37
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    38
void CTMultipleScreens::RunTestCaseL(TInt aCurTestCase)
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    39
	{
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    40
	((CTMultipleScreensStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    41
	_LIT(KTest1,"SubTest %d: Create multiple screens");
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    42
	switch(aCurTestCase)
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    43
		{
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    44
	case 1:
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    45
		((CTMultipleScreensStep*)iStep)->SetTestStepID(_L("GRAPHICS-BITGDI-0072"));
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    46
		INFO_PRINTF2(KTest1,aCurTestCase);
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    47
		CreateScreenDeviceL();
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    48
		break;
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    49
	case 2:
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    50
		((CTMultipleScreensStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    51
		((CTMultipleScreensStep*)iStep)->CloseTMSGraphicsStep();
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    52
		TestComplete();
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    53
		break;
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    54
		}
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    55
	((CTMultipleScreensStep*)iStep)->RecordTestResultL();
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    56
	}
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    57
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    58
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    59
/**
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    60
  @SYMTestCaseID GRAPHICS-BITGDI-0072
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    61
 
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    62
  @SYMDEF             
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    63
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    64
  @SYMTestCaseDesc Multiple screen test
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    65
   
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    66
  @SYMTestPriority High
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    67
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    68
  @SYMTestStatus Implemented
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    69
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    70
  @SYMTestActions creates some screens in different modes then writes some rotated text to them and test.
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    71
 
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    72
  @SYMTestExpectedResults Test should perform graphics operations succesfully. 
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    73
*/	
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    74
void CTMultipleScreens::CreateScreenDeviceL()
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    75
	{
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    76
	TDisplayMode testMode[] =  {EColor4K, EColor64K, EColor16M, EColor16MU, EColor256, EColor16MA, EColor16MAP};//tested display modes
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    77
	for(TInt ii=0;ii<TInt(sizeof(testMode)/sizeof(testMode[0]));ii++)
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    78
		{
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    79
		TInt screenCnt = 0;
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    80
		TEST(HAL::Get(0, HALData::EDisplayNumberOfScreens, screenCnt) == KErrNone);
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    81
		for(TInt screenNo=0;screenNo<screenCnt;++screenNo)
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    82
			{
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    83
			TInt err = CreateScrDevAndContext(screenNo, testMode[ii]);
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    84
			if(err == KErrNone)
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    85
				{
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    86
				DoRotateMoveTextL();
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    87
				}
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    88
			DeleteGraphicsContext();
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    89
			DeleteScreenDevice();
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    90
			}
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    91
		}
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    92
	}
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    93
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    94
void CTMultipleScreens::DoRotateMoveTextL()
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    95
	{
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    96
	__ASSERT_ALWAYS(iScrDev, User::Invariant());
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    97
	__ASSERT_ALWAYS(iGc, User::Invariant());
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    98
	
62bb7c97884c 201030_2
hgs
parents:
diff changeset
    99
	CreateFontL();
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   100
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   101
	const CFbsBitGc::TGraphicsOrientation KOrientation[] = 
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   102
		{
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   103
		CFbsBitGc::EGraphicsOrientationNormal,
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   104
		CFbsBitGc::EGraphicsOrientationRotated90,
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   105
		CFbsBitGc::EGraphicsOrientationRotated180,
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   106
		CFbsBitGc::EGraphicsOrientationRotated270
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   107
		};
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   108
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   109
	for(TInt ii=0;ii<TInt(sizeof(KOrientation)/sizeof(KOrientation[0]));++ii)
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   110
		{
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   111
		if(!iGc->SetOrientation(KOrientation[ii]))
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   112
			{
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   113
			continue;
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   114
			}
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   115
		_LIT(KRotation,"===EOrientation%S===");
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   116
		INFO_PRINTF2(KRotation,&RotationName(KOrientation[ii]));
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   117
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   118
		TSize size = iScrDev->SizeInPixels();
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   119
		RDebug::Print(_L("Size: %d, %d\r\n"), size.iWidth, size.iHeight);
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   120
		for(TInt x=-40;x<(size.iWidth+30);x+=27)
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   121
			{
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   122
			for(TInt y=-40;y<(size.iHeight+30);y+=23)
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   123
				{
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   124
				iGc->Clear();
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   125
				iGc->SetPenStyle(CGraphicsContext::ESolidPen);
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   126
				iGc->SetPenColor(TRgb(0x00, 0x00, 0x00));
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   127
				iGc->SetPenSize(TSize(1, 1));
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   128
				
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   129
				iGc->DrawText(_L("Test text"), TPoint(x, y));
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   130
				
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   131
				iScrDev->Update();
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   132
				}
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   133
			}
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   134
		}
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   135
	iGc->SetOrientation(CFbsBitGc::EGraphicsOrientationNormal);
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   136
	DestroyFont();
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   137
	}
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   138
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   139
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   140
TInt CTMultipleScreens::CreateScrDevAndContext(TInt aScreenNo, TDisplayMode aDisplayMode)
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   141
	{
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   142
	DeleteGraphicsContext();
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   143
	DeleteScreenDevice();
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   144
	TRAPD(err, iScrDev = CFbsScreenDevice::NewL(aScreenNo, aDisplayMode));
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   145
	if ( !iScrDev )
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   146
		{
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   147
		TESTE( err == KErrNotSupported, err );
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   148
		return err;
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   149
		}
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   150
	TEST(err == KErrNone);
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   151
	TEST(iScrDev->ScreenNo() == aScreenNo);
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   152
	err = iScrDev->CreateContext((CGraphicsContext*&)iGc);
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   153
	if ( !iGc )
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   154
		{
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   155
		return err;
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   156
		}
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   157
	TEST(err == KErrNone);
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   158
	iGc->SetUserDisplayMode(aDisplayMode);
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   159
	iScrDev->ChangeScreenDevice(NULL);
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   160
	iScrDev->SetAutoUpdate(EFalse);
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   161
	return err;
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   162
	}
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   163
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   164
TInt CTMultipleScreens::CreateScrDevAndContext(TDisplayMode aDisplayMode)
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   165
	{
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   166
	return CreateScrDevAndContext(KDefaultScreenNo,aDisplayMode);
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   167
	}
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   168
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   169
void CTMultipleScreens::DeleteScreenDevice()
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   170
	{
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   171
	delete iScrDev;
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   172
	iScrDev = NULL;
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   173
	}
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   174
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   175
void CTMultipleScreens::DeleteGraphicsContext()
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   176
	{
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   177
	delete iGc;
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   178
	iGc = NULL;
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   179
	}
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   180
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   181
void CTMultipleScreens::CreateFontL()
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   182
	{
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   183
	CFbsFont* font = NULL;
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   184
	TFontSpec fs(_L("Swiss"), 12);
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   185
	User::LeaveIfError(iScrDev->GetNearestFontToDesignHeightInPixels(font, fs));
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   186
	iGc->UseFont(font);
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   187
	}
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   188
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   189
void CTMultipleScreens::DestroyFont()
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   190
	{
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   191
	if(iGc)
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   192
		{
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   193
		iGc->DiscardFont();
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   194
		}
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   195
	}
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   196
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   197
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   198
//
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   199
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   200
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   201
//--------------
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   202
__CONSTRUCT_STEP__(MultipleScreens)
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   203
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   204
void CTMultipleScreensStep::TestSetupL()
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   205
	{
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   206
	}
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   207
	
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   208
void CTMultipleScreensStep::TestClose()
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   209
	{
62bb7c97884c 201030_2
hgs
parents:
diff changeset
   210
	}