os/graphics/graphicsdeviceinterface/bitgdi/tbit/TAccelerator.cpp
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
sl@0
     1
// Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0
     2
// All rights reserved.
sl@0
     3
// This component and the accompanying materials are made available
sl@0
     4
// under the terms of "Eclipse Public License v1.0"
sl@0
     5
// which accompanies this distribution, and is available
sl@0
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0
     7
//
sl@0
     8
// Initial Contributors:
sl@0
     9
// Nokia Corporation - initial contribution.
sl@0
    10
//
sl@0
    11
// Contributors:
sl@0
    12
//
sl@0
    13
// Description:
sl@0
    14
//
sl@0
    15
sl@0
    16
#include <graphicsaccelerator.h>
sl@0
    17
#include "TAccelerator.h"
sl@0
    18
#include <graphics/fbsdefs.h>
sl@0
    19
sl@0
    20
class TAcceleratedBitmapSpecTest : public TAcceleratedBitmapSpec
sl@0
    21
	{
sl@0
    22
// Provides public access to TAcceleratedBitmapSpec
sl@0
    23
public:
sl@0
    24
	inline TAcceleratedBitmapSpecTest() : TAcceleratedBitmapSpec() {}
sl@0
    25
	inline TAcceleratedBitmapSpecTest(CFbsBitmap* aBitmap) : TAcceleratedBitmapSpec(aBitmap) {}
sl@0
    26
	inline TAcceleratedBitmapSpecTest(RHardwareBitmap aBitmap) : TAcceleratedBitmapSpec(aBitmap) {}
sl@0
    27
	// 
sl@0
    28
	inline TInt GetInfo(TAcceleratedBitmapInfo& aInfo) const { return TAcceleratedBitmapSpec::GetInfo(aInfo); }
sl@0
    29
	inline void Lock(TBitmapLockCount& aCount) { TAcceleratedBitmapSpec::Lock(aCount); }
sl@0
    30
	inline void Lock(TBitmapLockCount& aCount,TAcceleratedBitmapInfo& aInfo) { TAcceleratedBitmapSpec::Lock(aCount,aInfo); }
sl@0
    31
	inline void	Unlock(TBitmapLockCount& aCount)  { TAcceleratedBitmapSpec::Unlock(aCount); }
sl@0
    32
	};
sl@0
    33
sl@0
    34
const TInt KNumDisplayModes = 13;
sl@0
    35
static struct 
sl@0
    36
	{
sl@0
    37
	TDisplayMode iMode;
sl@0
    38
	TBool iEnabled;
sl@0
    39
	TInt iPixelShift;
sl@0
    40
	} TestDisplayModes[KNumDisplayModes] =	
sl@0
    41
   {  
sl@0
    42
		{EGray2,EFalse,0},
sl@0
    43
		{EGray4,EFalse,1},
sl@0
    44
		{EGray16,EFalse,2},
sl@0
    45
		{EGray256,EFalse,3},
sl@0
    46
		{EColor16,EFalse,2},
sl@0
    47
		{EColor256,EFalse,3},
sl@0
    48
		{EColor64K,EFalse,4},
sl@0
    49
		{EColor16M,EFalse,5},
sl@0
    50
		{ERgb,EFalse,5},
sl@0
    51
		{EColor4K,EFalse,4},
sl@0
    52
		{EColor16MU,EFalse,5},
sl@0
    53
		{EColor16MA,EFalse,5},
sl@0
    54
		{EColor16MAP,EFalse,5}
sl@0
    55
	};
sl@0
    56
sl@0
    57
_LIT(KRam32BitmapOnZ, "z:\\system\\data\\32RAM.mbm");
sl@0
    58
_LIT(KRamC24BitmapOnZ, "z:\\system\\data\\24RAMC.mbm");
sl@0
    59
_LIT(KRomC24Bitmap, "z:\\system\\data\\24ROMC.mbm");
sl@0
    60
sl@0
    61
//
sl@0
    62
// CTestBitmap
sl@0
    63
//
sl@0
    64
sl@0
    65
TInt CTestBitmap::ConstructL(TDisplayMode aDisplayMode,TSize aSize,TBool aHWBitmap)
sl@0
    66
	{
sl@0
    67
	Reset();
sl@0
    68
sl@0
    69
	iBitmap = new CFbsBitmap;
sl@0
    70
	if(iBitmap==NULL)
sl@0
    71
		User::Panic(_L("Bitmap not created"),KErrGeneral);
sl@0
    72
sl@0
    73
	TInt ret;
sl@0
    74
	if(aHWBitmap)
sl@0
    75
		ret = iBitmap->CreateHardwareBitmap(aSize,aDisplayMode,TUid());
sl@0
    76
	else
sl@0
    77
		ret = iBitmap->Create(aSize,aDisplayMode);
sl@0
    78
sl@0
    79
	if (ret == KErrNotSupported)
sl@0
    80
		{
sl@0
    81
		Reset();
sl@0
    82
		return ret;
sl@0
    83
		}
sl@0
    84
sl@0
    85
	User::LeaveIfError(ret);
sl@0
    86
sl@0
    87
	TRAPD(err,iDevice = CFbsBitmapDevice::NewL(iBitmap));
sl@0
    88
	if(err)
sl@0
    89
		User::Panic(_L("BitmapDevice not created"),err);
sl@0
    90
sl@0
    91
	err = iDevice->CreateContext(iGc);
sl@0
    92
	if(err)
sl@0
    93
		User::Panic(_L("BitmapDevice not created"),err);
sl@0
    94
sl@0
    95
	return KErrNone;
sl@0
    96
	}
sl@0
    97
sl@0
    98
void CTestBitmap::Reset()
sl@0
    99
	{
sl@0
   100
	delete iGc;
sl@0
   101
	iGc = 0;
sl@0
   102
	delete iDevice;
sl@0
   103
	iDevice = 0;
sl@0
   104
	delete iBitmap;
sl@0
   105
	iBitmap = 0;
sl@0
   106
	}
sl@0
   107
sl@0
   108
CTestBitmap::~CTestBitmap()
sl@0
   109
	{
sl@0
   110
	Reset();
sl@0
   111
	}
sl@0
   112
sl@0
   113
TBool CTestBitmap::Compare(CTestBitmap* aBitmap2)
sl@0
   114
	{	
sl@0
   115
	TInt width=iBitmap->SizeInPixels().iWidth;
sl@0
   116
	TInt pitch = iBitmap->DataStride();
sl@0
   117
	TInt height=iBitmap->SizeInPixels().iHeight;
sl@0
   118
sl@0
   119
	for(TInt yLoop=0;yLoop<height;yLoop++)
sl@0
   120
		{
sl@0
   121
		TInt offset=yLoop*pitch;
sl@0
   122
		TUint8* data1 = ((TUint8*)iBitmap->DataAddress())+offset;
sl@0
   123
		TUint8* data2 = ((TUint8*)aBitmap2->iBitmap->DataAddress())+offset;
sl@0
   124
		TUint8* dataLimit = data1 + CFbsBitmap::ScanLineLength(width, iBitmap->DisplayMode());
sl@0
   125
		while(data1<dataLimit)
sl@0
   126
			{
sl@0
   127
			if(*(data1++)!=*(data2++))
sl@0
   128
				{
sl@0
   129
				iBitmap->Save(_L("C:\\Compare1.mbm"));
sl@0
   130
				aBitmap2->iBitmap->Save(_L("C:\\Compare2.mbm"));
sl@0
   131
				return EFalse;
sl@0
   132
				}
sl@0
   133
			}
sl@0
   134
		}
sl@0
   135
	return(ETrue);
sl@0
   136
	}
sl@0
   137
sl@0
   138
//
sl@0
   139
// CTAccelerator
sl@0
   140
//
sl@0
   141
sl@0
   142
CTAccelerator::CTAccelerator(CTestStep* aStep):
sl@0
   143
	CTGraphicsBase(aStep), 
sl@0
   144
	iRandomSeed(1),
sl@0
   145
	iGraphicsAccelerator1(0),
sl@0
   146
	iGraphicsAccelerator2(0),
sl@0
   147
	iHwScreenDevice(0),
sl@0
   148
	iScreenGc(0)
sl@0
   149
	{
sl@0
   150
	TInt i;
sl@0
   151
	for(i=0;i<9;i++) 
sl@0
   152
		iFixedRegion.AddRect(TRect(i*16,i*8,i*16+32,i*8+32));
sl@0
   153
	for(i=0;i<9;i++) 
sl@0
   154
		iFixedRegion.AddRect(TRect(183-(i*16),i*8,199-(i*16),i*8+32));
sl@0
   155
sl@0
   156
	iDefaultRegion.AddRect(TRect(0,0,199,99));
sl@0
   157
	INFO_PRINTF1(_L("Graphics Accelerator Testing"));
sl@0
   158
	}
sl@0
   159
sl@0
   160
void CTAccelerator::Cleanup()
sl@0
   161
	{
sl@0
   162
	delete iGraphicsAccelerator1;
sl@0
   163
	iGraphicsAccelerator1 = 0;
sl@0
   164
	delete iGraphicsAccelerator2;
sl@0
   165
	iGraphicsAccelerator2 = 0;
sl@0
   166
	if(iHwScreenDevice)
sl@0
   167
		{
sl@0
   168
		delete iHwScreenDevice;
sl@0
   169
		iHwScreenDevice = 0;
sl@0
   170
		}
sl@0
   171
	if(iScreenGc)
sl@0
   172
		{
sl@0
   173
		delete iScreenGc;
sl@0
   174
		iScreenGc = 0;
sl@0
   175
		}
sl@0
   176
	iBitmap1.Reset();
sl@0
   177
	iBitmap2.Reset();
sl@0
   178
	iBitmap3.Reset();
sl@0
   179
	iBitmap4.Reset();
sl@0
   180
	iBitmap5.Reset();
sl@0
   181
	iBitmap6.Reset();
sl@0
   182
	iBitmap7.Reset();
sl@0
   183
	iTileBitmap.Reset();
sl@0
   184
	iAlphaBitmap.Reset();
sl@0
   185
	}
sl@0
   186
sl@0
   187
TInt CTAccelerator::Random(TInt aMax)	// aMax <= 0xFFFF
sl@0
   188
	{
sl@0
   189
	iRandomSeed *= 69069;
sl@0
   190
	TUint r = ((iRandomSeed>>16)*aMax)>>16;
sl@0
   191
	return r;
sl@0
   192
	}
sl@0
   193
sl@0
   194
void CTAccelerator::RunTestCaseL(TInt aCurTestCase)
sl@0
   195
	{
sl@0
   196
	TInt i;
sl@0
   197
	((CTAcceleratorStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
sl@0
   198
	
sl@0
   199
	switch(aCurTestCase)
sl@0
   200
		{
sl@0
   201
	case 1:
sl@0
   202
		((CTAcceleratorStep*)iStep)->SetTestStepID(_L("GRAPHICS-BITGDI-0021"));
sl@0
   203
		INFO_PRINTF1(_L("Testing TAcceleratedBitmapSpec with software bitmaps."));
sl@0
   204
		for(i=0; i<KNumDisplayModes; i++)
sl@0
   205
			if (TestDisplayModes[i].iEnabled)
sl@0
   206
				{
sl@0
   207
				TestAcceleratedBitmapSpecL(TestDisplayModes[i].iMode,EFalse);
sl@0
   208
				}
sl@0
   209
		break;
sl@0
   210
	case 2:
sl@0
   211
		((CTAcceleratorStep*)iStep)->SetTestStepID(_L("GRAPHICS-BITGDI-0022"));
sl@0
   212
		INFO_PRINTF1(_L("Testing graphics operations with software bitmaps."));
sl@0
   213
		for(i=0; i<KNumDisplayModes; i++)
sl@0
   214
			if (TestDisplayModes[i].iEnabled)
sl@0
   215
				{
sl@0
   216
				TestGraphicsOperations(TestDisplayModes[i].iMode,EFalse);
sl@0
   217
				}
sl@0
   218
		break;
sl@0
   219
	case 3:
sl@0
   220
		((CTAcceleratorStep*)iStep)->SetTestStepID(_L("GRAPHICS-BITGDI-0021"));
sl@0
   221
		INFO_PRINTF1(_L("Testing TAcceleratedBitmapSpec with hardware bitmaps."));
sl@0
   222
		for(i=0; i<KNumDisplayModes; i++)
sl@0
   223
			if (TestDisplayModes[i].iEnabled)
sl@0
   224
				{
sl@0
   225
				TestAcceleratedBitmapSpecL(TestDisplayModes[i].iMode,ETrue);
sl@0
   226
				}
sl@0
   227
		break;
sl@0
   228
	case 4:
sl@0
   229
		((CTAcceleratorStep*)iStep)->SetTestStepID(_L("GRAPHICS-BITGDI-0022"));
sl@0
   230
		INFO_PRINTF1(_L("Testing graphics operations with hardware bitmaps."));
sl@0
   231
		for(i=0; i<KNumDisplayModes; i++)
sl@0
   232
			if (TestDisplayModes[i].iEnabled)
sl@0
   233
				{
sl@0
   234
				TestGraphicsOperations(TestDisplayModes[i].iMode,ETrue);
sl@0
   235
				}
sl@0
   236
		break;
sl@0
   237
	case 5:
sl@0
   238
		((CTAcceleratorStep*)iStep)->SetTestStepID(_L("GRAPHICS-BITGDI-0023"));
sl@0
   239
		INFO_PRINTF1(_L("Testing graphics operations with hardware bitmap as screen."));
sl@0
   240
		for(i=0; i<KNumDisplayModes; i++)
sl@0
   241
			if (TestDisplayModes[i].iEnabled)	
sl@0
   242
				{
sl@0
   243
				TestGraphicsOperationsWithScreenL(TestDisplayModes[i].iMode,ETrue);
sl@0
   244
				}
sl@0
   245
		break;
sl@0
   246
	case 6:
sl@0
   247
sl@0
   248
/**
sl@0
   249
 @SYMTestCaseID          GRAPHICS-BITGDI-0112
sl@0
   250
*/
sl@0
   251
		((CTAcceleratorStep*)iStep)->SetTestStepID(_L("GRAPHICS-BITGDI-0112"));
sl@0
   252
		INFO_PRINTF1(_L("Testing passing of compressed info to accelerator"));
sl@0
   253
		TestAcceleratorInfo();
sl@0
   254
		break;
sl@0
   255
	case 7:
sl@0
   256
/**
sl@0
   257
 @SYMTestCaseID          GRAPHICS-BITGDI-0113
sl@0
   258
*/
sl@0
   259
		((CTAcceleratorStep*)iStep)->SetTestStepID(_L("GRAPHICS-BITGDI-0113"));
sl@0
   260
		INFO_PRINTF1(_L("Testing GetInfo() with an extended bitmap"));
sl@0
   261
		TestAcceleratorInfoForExtendedBitmapL();
sl@0
   262
		break;
sl@0
   263
sl@0
   264
	case 8:
sl@0
   265
		((CTAcceleratorStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
sl@0
   266
		((CTAcceleratorStep*)iStep)->CloseTMSGraphicsStep();
sl@0
   267
		TestComplete();
sl@0
   268
		break;
sl@0
   269
		}
sl@0
   270
	((CTAcceleratorStep*)iStep)->RecordTestResultL();
sl@0
   271
 	}
sl@0
   272
sl@0
   273
const TSize TestBitmapSize = TSize(199,99);
sl@0
   274
TSize TestScreenSize;
sl@0
   275
const TSize TestBitmapSize1 = TSize(165,53);
sl@0
   276
sl@0
   277
sl@0
   278
/**
sl@0
   279
 @SYMTestCaseID          GRAPHICS-BITGDI-0021
sl@0
   280
 @SYMCreationDate        21/11/2008
sl@0
   281
 @SYMAuthor              douglashetherington
sl@0
   282
 @SYMTestStatus          3. Released
sl@0
   283
 @SYMTestPriority        High
sl@0
   284
 @SYMTestCaseDesc        Checks that TAcceleratedBitmapSpec does not change the underlaying bitmaps data
sl@0
   285
 @SYMTestExpectedResults The bitmap data is not changed
sl@0
   286
 @SYMTestActions         Creates a bitmap, puts it into a TAcceleratedBitmapSpec then checks the pixel data is unchanged
sl@0
   287
 @SYMDEF                 
sl@0
   288
*/
sl@0
   289
void CTAccelerator::TestAcceleratedBitmapSpecL(TDisplayMode aDisplayMode,TBool aHWBitmap)
sl@0
   290
	{
sl@0
   291
	TInt ret=0; 
sl@0
   292
	
sl@0
   293
	INFO_PRINTF2(_L("  DisplayMode=%d"),aDisplayMode);
sl@0
   294
sl@0
   295
	// Create bitmap
sl@0
   296
	ret = iBitmap1.ConstructL(aDisplayMode,TestBitmapSize,aHWBitmap);
sl@0
   297
	INFO_PRINTF2(_L(" TestAcceleratedBitmapSpecL ret=%d"),ret);
sl@0
   298
	if(ret!=KErrNone)
sl@0
   299
		{
sl@0
   300
		WARN_PRINTF1(_L("  Not Supported."));
sl@0
   301
		return;
sl@0
   302
		}
sl@0
   303
sl@0
   304
	TAcceleratedBitmapSpecTest bitmapSpec(iBitmap1.iBitmap);
sl@0
   305
	TAcceleratedBitmapInfo info;
sl@0
   306
sl@0
   307
	// Check correct size	
sl@0
   308
	bitmapSpec.Lock(iBitmapLockCount);
sl@0
   309
	User::LeaveIfError(bitmapSpec.GetInfo(info));
sl@0
   310
	TEST(info.iSize==iBitmap1.iBitmap->SizeInPixels());
sl@0
   311
	INFO_PRINTF3(_L("Test Display Modes , Expected iPixelShift : %d, Actual iPixelShift: %d"),TestDisplayModes[aDisplayMode-1].iPixelShift,info.iPixelShift);
sl@0
   312
	TEST(info.iPixelShift == TestDisplayModes[aDisplayMode-1].iPixelShift);
sl@0
   313
	bitmapSpec.Unlock(iBitmapLockCount);
sl@0
   314
sl@0
   315
	TInt scanLineLength = iBitmap1.iBitmap->ScanLineLength(TestBitmapSize.iWidth,aDisplayMode);
sl@0
   316
	HBufC8* scanLineBuffer = HBufC8::NewMaxLC(scanLineLength);
sl@0
   317
	TPtr8 scanLine(scanLineBuffer->Des());
sl@0
   318
sl@0
   319
	TInt y,x;
sl@0
   320
sl@0
   321
	// fill bitmap with test data
sl@0
   322
	for(y=info.iSize.iHeight-1; y>=0; y--)
sl@0
   323
		{
sl@0
   324
		TUint8* ptr = &(scanLine)[0];
sl@0
   325
		TUint8* ptrLimit = ptr+scanLineLength;
sl@0
   326
		x = 42;
sl@0
   327
		while(ptr<ptrLimit)
sl@0
   328
			*(ptr++) = (TUint8)(y^(x++));
sl@0
   329
		iBitmap1.iBitmap->SetScanLine(scanLine,y);
sl@0
   330
		}
sl@0
   331
	
sl@0
   332
	// use TAcceleratedBitmapSpec to check contents
sl@0
   333
	bitmapSpec.Lock(iBitmapLockCount,info);
sl@0
   334
	for(y=0; y<info.iSize.iHeight; y++)
sl@0
   335
		{
sl@0
   336
		TUint8* ptr = info.iAddress+y*info.iLinePitch;
sl@0
   337
		TUint8* ptrLimit = ptr+scanLineLength;
sl@0
   338
		x = 42;
sl@0
   339
		while(ptr<ptrLimit)
sl@0
   340
			if(*(ptr++) != (TUint8)(y^(x++)))
sl@0
   341
				{
sl@0
   342
				ERR_PRINTF2(_L("!!!  Failed at compare A, line %d"),y);
sl@0
   343
				User::Leave(KErrGeneral);
sl@0
   344
				}
sl@0
   345
		}
sl@0
   346
	bitmapSpec.Unlock(iBitmapLockCount);
sl@0
   347
sl@0
   348
	// fill bitmap with test data (inverse of previous)
sl@0
   349
	for(y=info.iSize.iHeight-1; y>=0; y--)
sl@0
   350
		{
sl@0
   351
		TUint8* ptr = &(scanLine)[0];
sl@0
   352
		TUint8* ptrLimit = ptr+scanLineLength;
sl@0
   353
		x = 42;
sl@0
   354
		while(ptr<ptrLimit)
sl@0
   355
			*(ptr++) = (TUint8)~(y^(x++));
sl@0
   356
		iBitmap1.iBitmap->SetScanLine(scanLine,y);
sl@0
   357
		}
sl@0
   358
	
sl@0
   359
	// use TAcceleratedBitmapSpec to check contents
sl@0
   360
	bitmapSpec.Lock(iBitmapLockCount,info);
sl@0
   361
	for(y=0; y<info.iSize.iHeight; y++)
sl@0
   362
		{
sl@0
   363
		TUint8* ptr = info.iAddress+y*info.iLinePitch;
sl@0
   364
		TUint8* ptrLimit = ptr+scanLineLength;
sl@0
   365
		x = 42;
sl@0
   366
		while(ptr<ptrLimit)
sl@0
   367
			if(*(ptr++) != (TUint8)~(y^(x++)))
sl@0
   368
				{
sl@0
   369
				ERR_PRINTF2(_L("!!!  Failed at compare B, line %d"),y);
sl@0
   370
				User::Leave(KErrGeneral);
sl@0
   371
				}
sl@0
   372
		}
sl@0
   373
	bitmapSpec.Unlock(iBitmapLockCount);
sl@0
   374
sl@0
   375
	// End
sl@0
   376
	CleanupStack::PopAndDestroy();	//scanLineBuffer
sl@0
   377
sl@0
   378
	Cleanup();
sl@0
   379
sl@0
   380
	INFO_PRINTF1(_L("  OK"));
sl@0
   381
	}
sl@0
   382
sl@0
   383
class CTestFbsDevice : public CFbsDevice
sl@0
   384
	{
sl@0
   385
public:
sl@0
   386
	inline CGraphicsAccelerator* StealGraphicsAccelerator()
sl@0
   387
		{ CGraphicsAccelerator* acc = iGraphicsAccelerator; iGraphicsAccelerator = 0; return acc; };
sl@0
   388
	};
sl@0
   389
sl@0
   390
sl@0
   391
/**
sl@0
   392
 @SYMTestCaseID          GRAPHICS-BITGDI-0022
sl@0
   393
 @SYMCreationDate        21/11/2008
sl@0
   394
 @SYMAuthor              douglashetherington
sl@0
   395
 @SYMTestStatus          3. Released
sl@0
   396
 @SYMTestPriority        High
sl@0
   397
 @SYMTestCaseDesc        Tests various basic graphic operations
sl@0
   398
 @SYMTestExpectedResults Tests should perform graphics operations succesfully.
sl@0
   399
 @SYMTestActions         Creates a number of bitmaps then uses them in various graphic operations
sl@0
   400
 @SYMDEF                 
sl@0
   401
*/
sl@0
   402
void CTAccelerator::TestGraphicsOperations(TDisplayMode aDisplayMode,TBool aHWBitmap)
sl@0
   403
	{
sl@0
   404
	TInt ret=0;
sl@0
   405
	
sl@0
   406
	INFO_PRINTF2(_L("  DisplayMode=%d"),aDisplayMode);
sl@0
   407
	TRAPD(errCode, ret = iBitmap1.ConstructL(aDisplayMode,TestBitmapSize,aHWBitmap));
sl@0
   408
	if((ret!=KErrNone) || (errCode !=KErrNone) || (!iBitmap1.iDevice->GraphicsAccelerator()))
sl@0
   409
		{
sl@0
   410
		WARN_PRINTF1(_L("  Not Supported."));
sl@0
   411
		return;
sl@0
   412
		}
sl@0
   413
sl@0
   414
	iGraphicsAccelerator1 = ((CTestFbsDevice*)iBitmap1.iDevice)->StealGraphicsAccelerator();
sl@0
   415
	delete iGraphicsAccelerator1;
sl@0
   416
	iGraphicsAccelerator1 = 0;
sl@0
   417
	
sl@0
   418
	if(!iSubRegion.IsEmpty())
sl@0
   419
		iSubRegion.Clear();
sl@0
   420
	iSubRegion.AddRect(iBitmap1.iBitmap->SizeInPixels());
sl@0
   421
	iSubRegion.SubRegion(iFixedRegion);
sl@0
   422
	iSubRegionPtr = &iSubRegion;
sl@0
   423
	
sl@0
   424
	TRAP(errCode, ret = iBitmap2.ConstructL(aDisplayMode,TestBitmapSize,aHWBitmap));
sl@0
   425
	TEST(errCode== KErrNone);
sl@0
   426
	if(ret!=KErrNone)
sl@0
   427
		User::Panic(_L("Bitmap not created"),ret);
sl@0
   428
sl@0
   429
	TRAP(errCode, ret = iBitmap3.ConstructL(aDisplayMode,TestBitmapSize,aHWBitmap));
sl@0
   430
	TEST(errCode== KErrNone);
sl@0
   431
	if(ret!=KErrNone)
sl@0
   432
		User::Panic(_L("Bitmap not created"),ret);
sl@0
   433
sl@0
   434
	iGraphicsAccelerator1 = ((CTestFbsDevice*)iBitmap3.iDevice)->StealGraphicsAccelerator();
sl@0
   435
sl@0
   436
	TRAP(errCode, ret = iBitmap4.ConstructL(aDisplayMode,TestBitmapSize,aHWBitmap));
sl@0
   437
	TEST(errCode== KErrNone);
sl@0
   438
	if(ret!=KErrNone)
sl@0
   439
		User::Panic(_L("Bitmap not created"),ret);
sl@0
   440
sl@0
   441
	TRAP(errCode, ret = iBitmap5.ConstructL(aDisplayMode,TestBitmapSize1,aHWBitmap));
sl@0
   442
	TEST(errCode== KErrNone);
sl@0
   443
	if(ret!=KErrNone)
sl@0
   444
		User::Panic(_L("Bitmap not created"),ret);
sl@0
   445
sl@0
   446
	TRAP(errCode, ret = iBitmap6.ConstructL(aDisplayMode,TestBitmapSize,aHWBitmap));
sl@0
   447
	TEST(errCode== KErrNone);
sl@0
   448
	if(ret!=KErrNone)
sl@0
   449
		User::Panic(_L("Bitmap not created"),ret);
sl@0
   450
sl@0
   451
	TRAP(errCode, ret = iBitmap7.ConstructL(aDisplayMode,TestBitmapSize,aHWBitmap));
sl@0
   452
	TEST(errCode== KErrNone);
sl@0
   453
	if(ret!=KErrNone)
sl@0
   454
		User::Panic(_L("Bitmap not created"),ret);
sl@0
   455
	
sl@0
   456
	TRAP(errCode, ret = iBitmap8.ConstructL(aDisplayMode,TestBitmapSize,aHWBitmap));
sl@0
   457
	TEST(errCode== KErrNone);
sl@0
   458
	if(ret!=KErrNone)
sl@0
   459
		User::Panic(_L("Bitmap not created"),ret);
sl@0
   460
sl@0
   461
	//BrushBitmap
sl@0
   462
    CFbsBitmap* iTile = new CFbsBitmap();
sl@0
   463
	TEST(iTile!=NULL);
sl@0
   464
	ret = iTile->Load(_L("z:\\system\\data\\tile.mbm"),0,aHWBitmap);
sl@0
   465
    TEST(ret==KErrNone);
sl@0
   466
sl@0
   467
	TSize tileSize = iTile->SizeInPixels();
sl@0
   468
	TDisplayMode tileDisplayMode = iTile->DisplayMode();
sl@0
   469
sl@0
   470
	TRAP(errCode, ret = iTileBitmap.ConstructL(tileDisplayMode,tileSize,aHWBitmap));
sl@0
   471
	TEST(errCode== KErrNone);
sl@0
   472
	if(ret== KErrNotSupported)
sl@0
   473
		{
sl@0
   474
		WARN_PRINTF1(_L("  Not Supported."));
sl@0
   475
		delete iTile;
sl@0
   476
		iTile = NULL;
sl@0
   477
		return;
sl@0
   478
		}
sl@0
   479
	iTileBitmap.iGc->BitBlt(TPoint(0,0),iTile);
sl@0
   480
	delete iTile;
sl@0
   481
	iTile = NULL;
sl@0
   482
sl@0
   483
	//Alpha bitmap
sl@0
   484
	TRAP(errCode, ret = iAlphaBitmap.ConstructL(EGray256,TestBitmapSize,aHWBitmap));
sl@0
   485
	TEST(errCode== KErrNone);
sl@0
   486
	if(ret!=KErrNone)
sl@0
   487
		User::Panic(_L("Bitmap not created"),ret);
sl@0
   488
sl@0
   489
	iGraphicsAccelerator2 = ((CTestFbsDevice*)iBitmap4.iDevice)->StealGraphicsAccelerator();
sl@0
   490
sl@0
   491
	INFO_PRINTF1(_L("FilledRect"));
sl@0
   492
	TestFilledRect();
sl@0
   493
sl@0
   494
	resetColorBitmaps();
sl@0
   495
sl@0
   496
	INFO_PRINTF1(_L("FilledRectWithPattern "));
sl@0
   497
	TestFilledRectWithPattern();
sl@0
   498
	
sl@0
   499
	resetColorBitmaps();
sl@0
   500
sl@0
   501
	INFO_PRINTF1(_L("InvertRect")); 
sl@0
   502
	TestInvertRect();
sl@0
   503
	
sl@0
   504
	resetColorBitmaps();
sl@0
   505
sl@0
   506
	INFO_PRINTF1(_L("FadeRect "));
sl@0
   507
	TestFadeRect();
sl@0
   508
	
sl@0
   509
	resetColorBitmaps();
sl@0
   510
sl@0
   511
	INFO_PRINTF1(_L("BitBlt "));
sl@0
   512
	TestBitBlt();
sl@0
   513
	
sl@0
   514
	resetColorBitmaps();
sl@0
   515
sl@0
   516
	INFO_PRINTF1(_L("BitBltMasked "));
sl@0
   517
	TestBitBltMasked();
sl@0
   518
	
sl@0
   519
	resetColorBitmaps();
sl@0
   520
sl@0
   521
	INFO_PRINTF1(_L("BitBltAlphaBitmap"));
sl@0
   522
	TestBitBltAlphaBitmap();
sl@0
   523
sl@0
   524
	resetColorBitmaps();
sl@0
   525
	
sl@0
   526
	INFO_PRINTF1(_L("AlphaBlendTwoBitmaps "));
sl@0
   527
	TestAlphaBlendTwoBitmaps();
sl@0
   528
	
sl@0
   529
	resetColorBitmaps();
sl@0
   530
	
sl@0
   531
	INFO_PRINTF1(_L("AlphaBlendOneBitmap "));
sl@0
   532
	TestAlphaBlendOneBitmap();
sl@0
   533
	
sl@0
   534
	resetColorBitmaps();
sl@0
   535
sl@0
   536
	Cleanup();
sl@0
   537
	}
sl@0
   538
sl@0
   539
sl@0
   540
/**
sl@0
   541
 @SYMTestCaseID          GRAPHICS-BITGDI-0023
sl@0
   542
 @SYMCreationDate        21/11/2008
sl@0
   543
 @SYMAuthor              douglashetherington
sl@0
   544
 @SYMTestStatus          3. Released
sl@0
   545
 @SYMTestPriority        High
sl@0
   546
 @SYMTestCaseDesc        Tests various basic graphic operations draw directly to the screen device
sl@0
   547
 @SYMTestExpectedResults Tests should perform graphics operations succesfully.
sl@0
   548
 @SYMTestActions         Creates a number of bitmaps then uses them in various graphic operations drawing directly to the screen gc
sl@0
   549
 @SYMDEF                 
sl@0
   550
*/
sl@0
   551
void CTAccelerator::TestGraphicsOperationsWithScreenL(TDisplayMode aDisplayMode,TBool aHWBitmap)
sl@0
   552
	{
sl@0
   553
	TInt ret;
sl@0
   554
sl@0
   555
	INFO_PRINTF2(_L("  DisplayMode=%d."),aDisplayMode);
sl@0
   556
sl@0
   557
	ret = iBitmap1.ConstructL(aDisplayMode,TestBitmapSize,aHWBitmap);
sl@0
   558
	if((ret!=KErrNone) || (!iBitmap1.iDevice->GraphicsAccelerator()))
sl@0
   559
		{
sl@0
   560
		WARN_PRINTF1(_L("  Not Supported."));
sl@0
   561
		return;
sl@0
   562
		}
sl@0
   563
sl@0
   564
	TRAPD(err,iHwScreenDevice = CFbsScreenDevice::NewL(_L(""),aDisplayMode));
sl@0
   565
	if(err)
sl@0
   566
		User::Panic(_L("BitmapDevice not created"),err);
sl@0
   567
	iHwScreenDevice->ChangeScreenDevice(NULL);
sl@0
   568
	err = iHwScreenDevice->CreateContext(iScreenGc);
sl@0
   569
	if(err)
sl@0
   570
		User::Panic(_L("BitmapDevice not created"),err);
sl@0
   571
sl@0
   572
	TestScreenSize.SetSize(iHwScreenDevice->SizeInPixels().iWidth,iHwScreenDevice->SizeInPixels().iHeight);
sl@0
   573
	iDefaultScreenRegion.AddRect(TestScreenSize);
sl@0
   574
sl@0
   575
	iBitmap1.Reset();
sl@0
   576
	iBitmap1.ConstructL(aDisplayMode,TestScreenSize,aHWBitmap);
sl@0
   577
	iGraphicsAccelerator1 = ((CTestFbsDevice*)iBitmap1.iDevice)->StealGraphicsAccelerator();
sl@0
   578
	delete iGraphicsAccelerator1;
sl@0
   579
	iGraphicsAccelerator1 = 0;
sl@0
   580
	
sl@0
   581
	if(!iSubRegion.IsEmpty())
sl@0
   582
		iSubRegion.Clear();
sl@0
   583
	iSubRegion.AddRect(iBitmap1.iBitmap->SizeInPixels());
sl@0
   584
	iSubRegion.SubRegion(iFixedRegion);
sl@0
   585
	iSubRegionPtr = &iSubRegion;
sl@0
   586
sl@0
   587
	ret = iBitmap2.ConstructL(aDisplayMode,TestScreenSize,aHWBitmap);
sl@0
   588
	if(ret!=KErrNone)
sl@0
   589
		User::Panic(_L("Bitmap not created"),ret);
sl@0
   590
sl@0
   591
	ret = iBitmap3.ConstructL(aDisplayMode,TestScreenSize,aHWBitmap);
sl@0
   592
	if(ret!=KErrNone)
sl@0
   593
		User::Panic(_L("Bitmap not created"),ret);
sl@0
   594
sl@0
   595
	iGraphicsAccelerator1 = ((CTestFbsDevice*)iBitmap3.iDevice)->StealGraphicsAccelerator();
sl@0
   596
sl@0
   597
	ret = iBitmap4.ConstructL(aDisplayMode,TestScreenSize,aHWBitmap);
sl@0
   598
	if(ret!=KErrNone)
sl@0
   599
		User::Panic(_L("Bitmap not created"),ret);
sl@0
   600
sl@0
   601
	ret = iBitmap5.ConstructL(aDisplayMode,TestBitmapSize1,aHWBitmap);
sl@0
   602
	if(ret!=KErrNone)
sl@0
   603
		User::Panic(_L("Bitmap not created"),ret);
sl@0
   604
sl@0
   605
	ret = iBitmap6.ConstructL(aDisplayMode,TestScreenSize,aHWBitmap);
sl@0
   606
	if(ret!=KErrNone)
sl@0
   607
		User::Panic(_L("Bitmap not created"),ret);
sl@0
   608
sl@0
   609
	ret = iBitmap7.ConstructL(aDisplayMode,TestScreenSize,aHWBitmap);
sl@0
   610
	if(ret!=KErrNone)
sl@0
   611
		User::Panic(_L("Bitmap not created"),ret);
sl@0
   612
sl@0
   613
	//BrushBitmap
sl@0
   614
    CFbsBitmap* iTile = new CFbsBitmap();
sl@0
   615
	TEST(iTile!=NULL);
sl@0
   616
	ret = iTile->Load(_L("z:\\system\\data\\tile.mbm"),0,aHWBitmap);
sl@0
   617
    TEST(ret==KErrNone);
sl@0
   618
sl@0
   619
	TSize tileSize = iTile->SizeInPixels();
sl@0
   620
	TDisplayMode tileDisplayMode = iTile->DisplayMode();
sl@0
   621
sl@0
   622
	ret= iTileBitmap.ConstructL(tileDisplayMode,tileSize,aHWBitmap);
sl@0
   623
	if(ret == KErrNotSupported)
sl@0
   624
		{
sl@0
   625
		WARN_PRINTF1(_L("  Not Supported."));
sl@0
   626
		delete iTile;
sl@0
   627
		iTile = NULL;
sl@0
   628
		return;
sl@0
   629
		}
sl@0
   630
	iTileBitmap.iGc->BitBlt(TPoint(0,0),iTile);
sl@0
   631
	delete iTile;
sl@0
   632
	iTile = NULL;
sl@0
   633
sl@0
   634
	//Alpha bitmap
sl@0
   635
	ret = iAlphaBitmap.ConstructL(EGray256,TestBitmapSize,aHWBitmap);
sl@0
   636
	if(ret!=KErrNone)
sl@0
   637
		User::Panic(_L("Bitmap not created"),ret);
sl@0
   638
sl@0
   639
	iGraphicsAccelerator2 = ((CTestFbsDevice*)iBitmap4.iDevice)->StealGraphicsAccelerator();
sl@0
   640
	resetColorBitmaps();
sl@0
   641
sl@0
   642
	INFO_PRINTF1(_L("FilledRect in the screen"));
sl@0
   643
	TestScreenFilledRect();
sl@0
   644
sl@0
   645
	resetColorBitmaps();
sl@0
   646
sl@0
   647
	INFO_PRINTF1(_L("FilledRectWithPattern in the screen"));
sl@0
   648
	TestScreenFilledRectWithPattern();
sl@0
   649
	
sl@0
   650
	resetColorBitmaps();
sl@0
   651
sl@0
   652
	INFO_PRINTF1(_L("InvertRect in the screen")); 
sl@0
   653
	TestScreenInvertRect();
sl@0
   654
	
sl@0
   655
	resetColorBitmaps();
sl@0
   656
sl@0
   657
	INFO_PRINTF1(_L("FadeRect in the screen"));
sl@0
   658
	TestScreenFadeRect();
sl@0
   659
	
sl@0
   660
	resetColorBitmaps();
sl@0
   661
sl@0
   662
	INFO_PRINTF1(_L("BitBlt in the screen"));
sl@0
   663
	TestScreenBitBlt();
sl@0
   664
	
sl@0
   665
	resetColorBitmaps();
sl@0
   666
sl@0
   667
	INFO_PRINTF1(_L("BitBltMasked in the screen"));
sl@0
   668
	TestScreenBitBltMasked();
sl@0
   669
	
sl@0
   670
	resetColorBitmaps();
sl@0
   671
sl@0
   672
	INFO_PRINTF1(_L("BitBltAlphaBitmap in the screen"));
sl@0
   673
	TestScreenBitBltAlphaBitmap();
sl@0
   674
sl@0
   675
	resetColorBitmaps();
sl@0
   676
sl@0
   677
	INFO_PRINTF1(_L("AlphaBlendTwoBitmaps in the screen"));
sl@0
   678
	TestScreenAlphaBlendTwoBitmaps();
sl@0
   679
sl@0
   680
	resetColorBitmaps();
sl@0
   681
	
sl@0
   682
	
sl@0
   683
	INFO_PRINTF1(_L("AlphaBlendOneBitmap in the screen"));
sl@0
   684
	TestScreenAlphaBlendOneBitmap();
sl@0
   685
sl@0
   686
	resetColorBitmaps();
sl@0
   687
	
sl@0
   688
	INFO_PRINTF1(_L("Rotating the screen"));
sl@0
   689
	TestScreenRotation();
sl@0
   690
sl@0
   691
	resetColorBitmaps();
sl@0
   692
sl@0
   693
	INFO_PRINTF1(_L("Changing user display mode"));
sl@0
   694
	TestUserDisplayMode();
sl@0
   695
sl@0
   696
	resetColorBitmaps();
sl@0
   697
sl@0
   698
	Cleanup();
sl@0
   699
	}
sl@0
   700
sl@0
   701
void CTAccelerator::TestAcceleratorInfo()
sl@0
   702
	{
sl@0
   703
	TInt errCode;
sl@0
   704
	TInt ret=0;
sl@0
   705
sl@0
   706
	iBitmap5.iBitmap=new CFbsBitmap();
sl@0
   707
	TRAP(errCode, ret=iBitmap5.iBitmap->Load(KRam32BitmapOnZ,0));
sl@0
   708
	TEST(errCode==KErrNone);
sl@0
   709
	TEST(ret==KErrNone);
sl@0
   710
	TAcceleratedBitmapSpec spec(iBitmap5.iBitmap);
sl@0
   711
	TAcceleratedBitmapInfo info;
sl@0
   712
	iBitmap5.iBitmap->LockHeap();
sl@0
   713
	spec.GetInfo(info);
sl@0
   714
	iBitmap5.iBitmap->UnlockHeap();
sl@0
   715
	TEST(info.iLinePitch==iBitmap5.iBitmap->Header().iSizeInPixels.iWidth*iBitmap5.iBitmap->Header().iBitsPerPixel/8);
sl@0
   716
sl@0
   717
	TRAP(errCode, ret=iBitmap5.iBitmap->Compress());
sl@0
   718
	TEST(errCode==KErrNone);
sl@0
   719
	TEST(ret==KErrNone);
sl@0
   720
	iBitmap5.iBitmap->LockHeap();
sl@0
   721
	spec.GetInfo(info);
sl@0
   722
	iBitmap5.iBitmap->UnlockHeap();
sl@0
   723
	TEST(info.iLinePitch==-iBitmap5.iBitmap->Header().iCompression);
sl@0
   724
sl@0
   725
	TUint32* romAddress = NULL;
sl@0
   726
	if(CFbsBitmap::IsFileInRom(KRomC24Bitmap, romAddress))
sl@0
   727
		{
sl@0
   728
		TRAP(errCode, ret=iBitmap5.iBitmap->Load(KRomC24Bitmap,0));
sl@0
   729
		TEST(errCode==KErrNone);
sl@0
   730
		TEST(ret==KErrNone);
sl@0
   731
		iBitmap5.iBitmap->LockHeap();
sl@0
   732
		spec.GetInfo(info);
sl@0
   733
		iBitmap5.iBitmap->UnlockHeap();
sl@0
   734
		TEST(info.iLinePitch==-iBitmap5.iBitmap->Header().iCompression);
sl@0
   735
		}
sl@0
   736
	else
sl@0
   737
		{
sl@0
   738
		INFO_PRINTF2(_L("Skipping ROM bitmap test since file \"%S\" is reported to not be a ROM bitmap."),
sl@0
   739
				&KRomC24Bitmap);
sl@0
   740
		INFO_PRINTF1(_L("This should only occur on non-XIP ROMs, e.g. NAND ROMs, where ROM bitmaps aren't supported."));
sl@0
   741
		}
sl@0
   742
sl@0
   743
	TRAP(errCode, ret=iBitmap5.iBitmap->LoadAndCompress(KRamC24BitmapOnZ,0));
sl@0
   744
	TEST(errCode==KErrNone);
sl@0
   745
	TEST(ret==KErrNone);
sl@0
   746
	iBitmap5.iBitmap->LockHeap();
sl@0
   747
	spec.GetInfo(info);
sl@0
   748
	iBitmap5.iBitmap->UnlockHeap();
sl@0
   749
	TEST(info.iLinePitch==-iBitmap5.iBitmap->Header().iCompression);
sl@0
   750
sl@0
   751
	Cleanup();
sl@0
   752
	}
sl@0
   753
sl@0
   754
void CTAccelerator::TestAcceleratorInfoForExtendedBitmapL()
sl@0
   755
	{	
sl@0
   756
	const TSize KSizeInPixels(64,65);
sl@0
   757
	const TDisplayMode KDisplayMode	= EColor64K;
sl@0
   758
	const TUid KExtendedBitmapUid = {0x87654321};
sl@0
   759
	const TUint8 KTestData[] = "Extended bitmap test data 123456";
sl@0
   760
	const TInt KTestDataSize = sizeof(KTestData);
sl@0
   761
	
sl@0
   762
	CFbsBitmap* exBmp = new (ELeave) CFbsBitmap;
sl@0
   763
	CleanupStack::PushL(exBmp);
sl@0
   764
	TInt err = exBmp->CreateExtendedBitmap(KSizeInPixels, KDisplayMode, KExtendedBitmapUid, KTestData, KTestDataSize);
sl@0
   765
	TEST(err == KErrNone);
sl@0
   766
	
sl@0
   767
	TAcceleratedBitmapSpec exSpec(exBmp);
sl@0
   768
	TAcceleratedBitmapInfo info;
sl@0
   769
	exBmp->LockHeap();
sl@0
   770
	err = exSpec.GetInfo(info);
sl@0
   771
	TEST(err == KErrNone);
sl@0
   772
	exBmp->UnlockHeap();
sl@0
   773
	
sl@0
   774
	TEST(info.iDisplayMode == KDisplayMode);	
sl@0
   775
	TEST(info.iSize == KSizeInPixels);
sl@0
   776
	TEST(info.iLinePitch == -EProprietaryCompression);
sl@0
   777
	TEST(info.iPixelShift == KExtendedBitmapUid.iUid);
sl@0
   778
	TEST(info.iDataSize == KTestDataSize);
sl@0
   779
	
sl@0
   780
	CleanupStack::PopAndDestroy(exBmp);
sl@0
   781
	}
sl@0
   782
sl@0
   783
const TInt KNumTestFilledRect = 100;
sl@0
   784
const TInt KNumTestInvertRect = 100;
sl@0
   785
const TInt KNumTestBitBlt = 100;
sl@0
   786
const TInt KNumTestFadeRect= 1000;
sl@0
   787
const TInt KNumTestBitBltMasked= 100;
sl@0
   788
const TInt KNumTestBitBltAlphaBitmap= 100;
sl@0
   789
const TInt KNumTestAlphaBlendBitmaps= 100;
sl@0
   790
sl@0
   791
void CTAccelerator::TestFilledRect()
sl@0
   792
	{
sl@0
   793
	TInt gopBufferSize = KNumTestFilledRect*sizeof(TGopFilledRect);
sl@0
   794
	TUint8* gopBuffer = new TUint8[gopBufferSize];
sl@0
   795
	TPtr8 gopDes = TPtr8(gopBuffer,0,gopBufferSize);
sl@0
   796
sl@0
   797
	TRect bitmapRect(0,0,TestBitmapSize.iWidth,TestBitmapSize.iHeight);
sl@0
   798
	TRect rect;
sl@0
   799
sl@0
   800
	iFixedRegionPtr = &iFixedRegion;
sl@0
   801
sl@0
   802
	iBitmap1.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
   803
	iBitmap1.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
   804
	iBitmap1.iGc->SetClippingRegion(iFixedRegionPtr);
sl@0
   805
sl@0
   806
	iBitmap2.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
   807
	iBitmap2.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
   808
	iBitmap2.iGc->SetClippingRegion(iFixedRegionPtr);
sl@0
   809
sl@0
   810
	TRgb white;
sl@0
   811
	iBitmap3.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
   812
	iBitmap3.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
   813
	iBitmap3.iGc->SetBrushColor(white);
sl@0
   814
	iBitmap3.iGc->SetClippingRegion(iSubRegionPtr);
sl@0
   815
sl@0
   816
	iBitmap4.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
   817
	iBitmap4.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
   818
	iBitmap4.iGc->SetBrushColor(white);
sl@0
   819
	iBitmap4.iGc->SetClippingRegion(iSubRegionPtr);
sl@0
   820
sl@0
   821
	for(TInt n=0; n<100; n++)
sl@0
   822
		{
sl@0
   823
		rect.iTl.iX = Random(TestBitmapSize.iWidth+20)-10;
sl@0
   824
		rect.iTl.iY = Random(TestBitmapSize.iHeight+20)-10;
sl@0
   825
		rect.iBr.iX = rect.iTl.iX+1+Random(TestBitmapSize.iWidth+20);
sl@0
   826
		rect.iBr.iY = rect.iTl.iY+1+Random(TestBitmapSize.iHeight+20);
sl@0
   827
sl@0
   828
		
sl@0
   829
		TRgb colorRect(Random(256),Random(256),Random(256));
sl@0
   830
sl@0
   831
		iBitmap1.iGc->SetBrushColor(colorRect);
sl@0
   832
		iBitmap1.iGc->DrawRect(rect);
sl@0
   833
sl@0
   834
		iBitmap2.iGc->SetBrushColor(colorRect);
sl@0
   835
		iBitmap2.iGc->DrawRect(rect);
sl@0
   836
sl@0
   837
		TEST(iBitmap1.Compare(&iBitmap2));
sl@0
   838
sl@0
   839
		rect.Intersection(bitmapRect);
sl@0
   840
		if( (rect.iBr.iX>rect.iTl.iX) && (rect.iBr.iY>rect.iTl.iY))
sl@0
   841
			{
sl@0
   842
			TGopFilledRect gop(rect,colorRect);
sl@0
   843
			gopDes.Append((TUint8*)&gop,sizeof(gop));
sl@0
   844
			TInt error = iGraphicsAccelerator1->Operation(gop);
sl@0
   845
			if(error == KErrNotSupported)
sl@0
   846
				{
sl@0
   847
				delete gopBuffer;
sl@0
   848
				WARN_PRINTF1(_L("  Not Supported."));
sl@0
   849
				return;
sl@0
   850
				}
sl@0
   851
			}
sl@0
   852
		iBitmap3.iGc->DrawRect(iBitmap3.iBitmap->SizeInPixels());
sl@0
   853
	
sl@0
   854
		TEST(iBitmap2.Compare(&iBitmap3));
sl@0
   855
		}
sl@0
   856
sl@0
   857
	iGraphicsAccelerator2->Operation(gopDes);
sl@0
   858
	iBitmap4.iGc->DrawRect(iBitmap4.iBitmap->SizeInPixels());
sl@0
   859
	TEST(iBitmap3.Compare(&iBitmap4));
sl@0
   860
	delete gopBuffer;
sl@0
   861
	}
sl@0
   862
sl@0
   863
void CTAccelerator::TestFilledRectWithPattern()
sl@0
   864
	{
sl@0
   865
	TInt gopBufferSize = KNumTestInvertRect*sizeof(TGopFilledRectWithPattern);
sl@0
   866
	TUint8* gopBuffer = new TUint8[gopBufferSize];
sl@0
   867
	TPtr8 gopDes = TPtr8(gopBuffer,0,gopBufferSize);
sl@0
   868
sl@0
   869
	TRect bitmapRect(0,0,TestBitmapSize.iWidth,TestBitmapSize.iHeight);
sl@0
   870
	TRect rect;
sl@0
   871
sl@0
   872
	iFixedRegionPtr = &iFixedRegion;
sl@0
   873
sl@0
   874
	iBitmap1.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
   875
	iBitmap1.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
   876
	iBitmap1.iGc->SetBrushStyle(CGraphicsContext::EPatternedBrush);
sl@0
   877
	iBitmap1.iGc->UseBrushPattern(iTileBitmap.iBitmap);
sl@0
   878
	iBitmap1.iGc->SetClippingRegion(iFixedRegionPtr);
sl@0
   879
	   
sl@0
   880
	iBitmap2.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
   881
	iBitmap2.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
   882
	iBitmap2.iGc->SetBrushStyle(CGraphicsContext::EPatternedBrush);
sl@0
   883
	iBitmap2.iGc->UseBrushPattern(iTileBitmap.iBitmap);
sl@0
   884
	iBitmap2.iGc->SetClippingRegion(iFixedRegionPtr);
sl@0
   885
sl@0
   886
	TRgb white;
sl@0
   887
	iBitmap3.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
   888
	iBitmap3.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
   889
	iBitmap3.iGc->SetBrushColor(white);
sl@0
   890
	iBitmap3.iGc->SetClippingRegion(iSubRegionPtr);
sl@0
   891
sl@0
   892
	iBitmap4.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
   893
	iBitmap4.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
   894
	iBitmap4.iGc->SetBrushColor(white);
sl@0
   895
	iBitmap4.iGc->SetClippingRegion(iSubRegionPtr);
sl@0
   896
sl@0
   897
	TAcceleratedBitmapSpec patternBitmapSpec(iTileBitmap.iBitmap);
sl@0
   898
	TGopFillPattern gopFillPattern;
sl@0
   899
	gopFillPattern.iBitmap = patternBitmapSpec;
sl@0
   900
sl@0
   901
	for(TInt n=0; n<100; n++)
sl@0
   902
		{
sl@0
   903
		rect.iTl.iX = Random(TestBitmapSize.iWidth);
sl@0
   904
		rect.iTl.iY = Random(TestBitmapSize.iHeight);
sl@0
   905
		rect.iBr.iX = rect.iTl.iX+1+Random(TestBitmapSize.iWidth);
sl@0
   906
		rect.iBr.iY = rect.iTl.iY+1+Random(TestBitmapSize.iHeight);
sl@0
   907
sl@0
   908
		TPoint brushOrigin(Random(TestBitmapSize.iWidth -5),Random(TestBitmapSize.iHeight-5));
sl@0
   909
sl@0
   910
		iBitmap1.iGc->SetBrushOrigin(brushOrigin);
sl@0
   911
		iBitmap1.iGc->DrawRect(rect);
sl@0
   912
sl@0
   913
		iBitmap2.iGc->SetBrushOrigin(brushOrigin);
sl@0
   914
		iBitmap2.iGc->DrawRect(rect);
sl@0
   915
sl@0
   916
		TEST(iBitmap1.Compare(&iBitmap2));
sl@0
   917
		
sl@0
   918
		rect.Intersection(bitmapRect);
sl@0
   919
		if( (rect.iBr.iX>rect.iTl.iX) && (rect.iBr.iY>rect.iTl.iY))
sl@0
   920
			{
sl@0
   921
			gopFillPattern.iOrigin = brushOrigin;
sl@0
   922
			TGopFilledRectWithPattern gop(rect,gopFillPattern);
sl@0
   923
			gopDes.Append((TUint8*)&gop,sizeof(gop));
sl@0
   924
			TInt error = iGraphicsAccelerator1->Operation(gop);
sl@0
   925
			if(error == KErrNotSupported)
sl@0
   926
				{
sl@0
   927
				delete gopBuffer;
sl@0
   928
				WARN_PRINTF1(_L("  Not Supported."));
sl@0
   929
				return;
sl@0
   930
				}
sl@0
   931
			}
sl@0
   932
		iBitmap3.iGc->DrawRect(iBitmap3.iBitmap->SizeInPixels());
sl@0
   933
		TEST(iBitmap2.Compare(&iBitmap3));
sl@0
   934
		}
sl@0
   935
	iGraphicsAccelerator2->Operation(gopDes);
sl@0
   936
	iBitmap4.iGc->DrawRect(iBitmap4.iBitmap->SizeInPixels());
sl@0
   937
	TEST(iBitmap3.Compare(&iBitmap4));
sl@0
   938
	iBitmap1.iGc->DiscardBrushPattern();
sl@0
   939
	delete gopBuffer;
sl@0
   940
	}
sl@0
   941
sl@0
   942
void CTAccelerator::TestInvertRect()
sl@0
   943
	{
sl@0
   944
	TInt gopBufferSize = KNumTestInvertRect*sizeof(TGopInvertRect);
sl@0
   945
	TUint8* gopBuffer = new TUint8[gopBufferSize];
sl@0
   946
	TPtr8 gopDes = TPtr8(gopBuffer,0,gopBufferSize);
sl@0
   947
sl@0
   948
	TRect bitmapRect(0,0,TestBitmapSize.iWidth,TestBitmapSize.iHeight);
sl@0
   949
	TRect rect;
sl@0
   950
sl@0
   951
	iFixedRegionPtr = &iFixedRegion;
sl@0
   952
sl@0
   953
	iBitmap1.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
   954
	iBitmap1.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
   955
    iBitmap1.iGc->SetDrawMode(CGraphicsContext::EDrawModeNOTSCREEN);
sl@0
   956
	iBitmap1.iGc->SetClippingRegion(iFixedRegionPtr);
sl@0
   957
sl@0
   958
	iBitmap2.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
   959
	iBitmap2.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
   960
    iBitmap2.iGc->SetDrawMode(CGraphicsContext::EDrawModeNOTSCREEN);
sl@0
   961
	iBitmap2.iGc->SetClippingRegion(iFixedRegionPtr);
sl@0
   962
sl@0
   963
	TRgb white;
sl@0
   964
	iBitmap3.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
   965
	iBitmap3.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
   966
	iBitmap3.iGc->SetBrushColor(white);
sl@0
   967
	iBitmap3.iGc->SetClippingRegion(iSubRegionPtr);
sl@0
   968
sl@0
   969
	iBitmap4.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
   970
	iBitmap4.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
   971
	iBitmap4.iGc->SetBrushColor(white);
sl@0
   972
	iBitmap4.iGc->SetClippingRegion(iSubRegionPtr);
sl@0
   973
sl@0
   974
	for(TInt n=0; n<100; n++)
sl@0
   975
		{
sl@0
   976
		rect.iTl.iX = Random(TestBitmapSize.iWidth+20)-10;
sl@0
   977
		rect.iTl.iY = Random(TestBitmapSize.iHeight+20)-10;
sl@0
   978
		rect.iBr.iX = rect.iTl.iX+1+Random(TestBitmapSize.iWidth+20);
sl@0
   979
		rect.iBr.iY = rect.iTl.iY+1+Random(TestBitmapSize.iHeight+20);
sl@0
   980
sl@0
   981
		iBitmap1.iGc->DrawRect(rect);
sl@0
   982
		iBitmap2.iGc->DrawRect(rect);
sl@0
   983
sl@0
   984
		TEST(iBitmap1.Compare(&iBitmap2));
sl@0
   985
sl@0
   986
		rect.Intersection(bitmapRect);
sl@0
   987
		if((rect.iBr.iX>rect.iTl.iX) && (rect.iBr.iY>rect.iTl.iY))
sl@0
   988
			{
sl@0
   989
			TGopInvertRect gop(rect);
sl@0
   990
			gopDes.Append((TUint8*)&gop,sizeof(gop));
sl@0
   991
			TInt error = iGraphicsAccelerator1->Operation(gop);
sl@0
   992
			if(error == KErrNotSupported)
sl@0
   993
				{
sl@0
   994
				delete gopBuffer;
sl@0
   995
				WARN_PRINTF1(_L("  Not Supported."));
sl@0
   996
				return;
sl@0
   997
				}
sl@0
   998
			}
sl@0
   999
		iBitmap3.iGc->DrawRect(iBitmap3.iBitmap->SizeInPixels());
sl@0
  1000
		TEST(iBitmap2.Compare(&iBitmap3));
sl@0
  1001
		}
sl@0
  1002
	iGraphicsAccelerator2->Operation(gopDes);
sl@0
  1003
	iBitmap4.iGc->DrawRect(iBitmap4.iBitmap->SizeInPixels());
sl@0
  1004
	TEST(iBitmap3.Compare(&iBitmap4));
sl@0
  1005
	delete gopBuffer;
sl@0
  1006
	}
sl@0
  1007
sl@0
  1008
void CTAccelerator::TestFadeRect()
sl@0
  1009
	{
sl@0
  1010
	TInt gopBufferSize = KNumTestFadeRect*sizeof(TGopFadeRect);
sl@0
  1011
	TUint8* gopBuffer = new TUint8[gopBufferSize];
sl@0
  1012
	TPtr8 gopDes = TPtr8(gopBuffer,0,gopBufferSize);
sl@0
  1013
sl@0
  1014
	TRect bitmapRect(0,0,TestBitmapSize.iWidth,TestBitmapSize.iHeight);
sl@0
  1015
    TRect rect;
sl@0
  1016
	
sl@0
  1017
	iFixedRegionPtr = &iFixedRegion;
sl@0
  1018
sl@0
  1019
	iBitmap1.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1020
	iBitmap1.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1021
    iBitmap1.iGc->SetDrawMode(CGraphicsContext::EDrawModePEN);
sl@0
  1022
	iBitmap1.iGc->SetClippingRegion(iFixedRegionPtr);
sl@0
  1023
sl@0
  1024
	iBitmap2.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1025
	iBitmap2.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1026
    iBitmap2.iGc->SetDrawMode(CGraphicsContext::EDrawModePEN);
sl@0
  1027
	iBitmap2.iGc->SetClippingRegion(iFixedRegionPtr);
sl@0
  1028
sl@0
  1029
	for(TInt n=0; n<100; n++)
sl@0
  1030
		{
sl@0
  1031
		rect.iTl.iX = Random(TestBitmapSize.iWidth);
sl@0
  1032
		rect.iTl.iY = Random(TestBitmapSize.iHeight);
sl@0
  1033
		rect.iBr.iX = rect.iTl.iX+1+Random(TestBitmapSize.iWidth);
sl@0
  1034
		rect.iBr.iY = rect.iTl.iY+1+Random(TestBitmapSize.iHeight);
sl@0
  1035
sl@0
  1036
		TUint8 blackMap = (TUint8)Random(256);
sl@0
  1037
		TUint8 whiteMap = (TUint8)Random(256);
sl@0
  1038
sl@0
  1039
		RRegion region(rect);
sl@0
  1040
sl@0
  1041
		iBitmap1.iGc->SetFaded(ETrue);
sl@0
  1042
		iBitmap1.iGc->SetFadingParameters(blackMap,whiteMap);
sl@0
  1043
		iBitmap1.iGc->FadeArea((TRegion*)&region);
sl@0
  1044
sl@0
  1045
		iBitmap2.iGc->SetFaded(ETrue);
sl@0
  1046
		iBitmap2.iGc->SetFadingParameters(blackMap,whiteMap);
sl@0
  1047
		iBitmap2.iGc->FadeArea((TRegion*)&region);
sl@0
  1048
sl@0
  1049
		region.Close();
sl@0
  1050
sl@0
  1051
		TEST(iBitmap1.Compare(&iBitmap2));
sl@0
  1052
		
sl@0
  1053
		TGopFadeParams fadeParams;
sl@0
  1054
		fadeParams.iScale = whiteMap - blackMap + 1;
sl@0
  1055
		fadeParams.iOffset = blackMap;
sl@0
  1056
		rect.Intersection(bitmapRect);
sl@0
  1057
sl@0
  1058
		if( (rect.iBr.iX>rect.iTl.iX) && (rect.iBr.iY>rect.iTl.iY))
sl@0
  1059
			{
sl@0
  1060
			TGopFadeRect gop(rect,fadeParams);
sl@0
  1061
			gopDes.Append((TUint8*)&gop,sizeof(gop));
sl@0
  1062
			TInt error = iGraphicsAccelerator1->Operation(gop);
sl@0
  1063
			if(error == KErrNotSupported)
sl@0
  1064
				{
sl@0
  1065
				WARN_PRINTF1(_L("  Not Supported."));
sl@0
  1066
				goto quitFade2;
sl@0
  1067
				}
sl@0
  1068
			}
sl@0
  1069
		TEST(iBitmap2.Compare(&iBitmap3));
sl@0
  1070
		}
sl@0
  1071
sl@0
  1072
	iGraphicsAccelerator2->Operation(gopDes);
sl@0
  1073
	TEST(iBitmap3.Compare(&iBitmap4));
sl@0
  1074
quitFade2:
sl@0
  1075
	delete gopBuffer;
sl@0
  1076
	iBitmap1.iGc->SetFaded(EFalse);
sl@0
  1077
	iBitmap2.iGc->SetFaded(EFalse);
sl@0
  1078
	}
sl@0
  1079
sl@0
  1080
void CTAccelerator::TestBitBlt()
sl@0
  1081
	{
sl@0
  1082
	TInt gopBufferSize = KNumTestBitBlt*sizeof(TGopBitBlt);
sl@0
  1083
	TUint8* gopBuffer = new TUint8[gopBufferSize];
sl@0
  1084
	TPtr8 gopDes = TPtr8(gopBuffer,0,gopBufferSize);
sl@0
  1085
sl@0
  1086
	//dest bitmap has different size
sl@0
  1087
	TRect bitmapRect1(0,0,TestBitmapSize1.iWidth,TestBitmapSize1.iHeight);
sl@0
  1088
sl@0
  1089
	TRect rect;
sl@0
  1090
	iFixedRegionPtr = &iFixedRegion;
sl@0
  1091
sl@0
  1092
	iBitmap1.iGc->SetClippingRegion(iFixedRegionPtr);
sl@0
  1093
	iBitmap2.iGc->SetClippingRegion(iFixedRegionPtr);
sl@0
  1094
sl@0
  1095
	TRgb white;
sl@0
  1096
	iBitmap3.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1097
	iBitmap3.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1098
	iBitmap3.iGc->SetBrushColor(white);
sl@0
  1099
	iBitmap3.iGc->SetClippingRegion(iSubRegionPtr);
sl@0
  1100
sl@0
  1101
	iBitmap4.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1102
	iBitmap4.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1103
	iBitmap4.iGc->SetBrushColor(white);
sl@0
  1104
	iBitmap4.iGc->SetClippingRegion(iSubRegionPtr);
sl@0
  1105
sl@0
  1106
	TRgb color1(Random(256),Random(256),Random(256));
sl@0
  1107
sl@0
  1108
	iBitmap5.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1109
	iBitmap5.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1110
	iBitmap5.iGc->SetBrushColor(color1);
sl@0
  1111
	iBitmap5.iGc->DrawRect(bitmapRect1);
sl@0
  1112
sl@0
  1113
sl@0
  1114
	for(TInt n=0; n<100; n++)
sl@0
  1115
		{
sl@0
  1116
		rect.iTl.iX = Random(TestBitmapSize1.iWidth);
sl@0
  1117
		rect.iTl.iY = Random(TestBitmapSize1.iHeight);
sl@0
  1118
		rect.iBr.iX = rect.iTl.iX+1+Random(TestBitmapSize1.iWidth);
sl@0
  1119
		rect.iBr.iY = rect.iTl.iY+1+Random(TestBitmapSize1.iHeight);
sl@0
  1120
sl@0
  1121
        TPoint pointDest(Random(TestBitmapSize.iWidth),Random(TestBitmapSize.iHeight));
sl@0
  1122
sl@0
  1123
		//bitblt with GC
sl@0
  1124
		iBitmap1.iGc->BitBlt(pointDest,iBitmap5.iBitmap,rect);
sl@0
  1125
		iBitmap2.iGc->BitBlt(pointDest,iBitmap5.iBitmap,rect);
sl@0
  1126
sl@0
  1127
		TEST(iBitmap1.Compare(&iBitmap2));
sl@0
  1128
sl@0
  1129
		rect.Intersection(bitmapRect1);
sl@0
  1130
		TSize maxSize=TestBitmapSize-pointDest;
sl@0
  1131
		if (rect.Width()>maxSize.iWidth)
sl@0
  1132
			rect.iBr.iX=rect.iTl.iX+maxSize.iWidth;
sl@0
  1133
		if (rect.Height()>maxSize.iHeight)
sl@0
  1134
			rect.iBr.iY=rect.iTl.iY+maxSize.iHeight;
sl@0
  1135
		if(rect.IsEmpty())
sl@0
  1136
			continue;
sl@0
  1137
sl@0
  1138
		if( (rect.iBr.iX>rect.iTl.iX) && (rect.iBr.iY>rect.iTl.iY))
sl@0
  1139
			{
sl@0
  1140
			TAcceleratedBitmapSpec bitmap5Spec(iBitmap5.iBitmap);
sl@0
  1141
			TGopBitBlt gopBitBlt(pointDest,bitmap5Spec,rect);
sl@0
  1142
			gopDes.Append((TUint8*)&gopBitBlt,sizeof(gopBitBlt));
sl@0
  1143
			TInt error = iGraphicsAccelerator1->Operation(gopBitBlt);
sl@0
  1144
			if(error == KErrNotSupported)
sl@0
  1145
				{
sl@0
  1146
				delete gopBuffer;
sl@0
  1147
				WARN_PRINTF1(_L("  Not Supported."));
sl@0
  1148
				return;
sl@0
  1149
				}
sl@0
  1150
			}
sl@0
  1151
		iBitmap3.iGc->DrawRect(iBitmap3.iBitmap->SizeInPixels());
sl@0
  1152
		TEST(iBitmap2.Compare(&iBitmap3));
sl@0
  1153
		}
sl@0
  1154
	iGraphicsAccelerator2->Operation(gopDes);
sl@0
  1155
	iBitmap4.iGc->DrawRect(iBitmap4.iBitmap->SizeInPixels());
sl@0
  1156
	TEST(iBitmap3.Compare(&iBitmap4));
sl@0
  1157
	delete gopBuffer;
sl@0
  1158
	}
sl@0
  1159
sl@0
  1160
void CTAccelerator::TestBitBltMasked()
sl@0
  1161
	{
sl@0
  1162
	TInt gopBufferSize = KNumTestBitBltMasked*sizeof(TGopBitBltMasked);
sl@0
  1163
	TUint8* gopBuffer = new TUint8[gopBufferSize];
sl@0
  1164
	TPtr8 gopDes = TPtr8(gopBuffer,0,gopBufferSize);
sl@0
  1165
sl@0
  1166
	TRect bitmapRect(0,0,TestBitmapSize.iWidth,TestBitmapSize.iHeight);
sl@0
  1167
sl@0
  1168
	TRect rect;
sl@0
  1169
	iFixedRegionPtr = &iFixedRegion;
sl@0
  1170
sl@0
  1171
	iBitmap1.iGc->SetClippingRegion(iFixedRegionPtr);
sl@0
  1172
	iBitmap2.iGc->SetClippingRegion(iFixedRegionPtr);
sl@0
  1173
sl@0
  1174
	TRgb white;
sl@0
  1175
	iBitmap3.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1176
	iBitmap3.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1177
	iBitmap3.iGc->SetBrushColor(white);
sl@0
  1178
	iBitmap3.iGc->SetClippingRegion(iSubRegionPtr);
sl@0
  1179
sl@0
  1180
	iBitmap4.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1181
	iBitmap4.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1182
	iBitmap4.iGc->SetBrushColor(white);
sl@0
  1183
	iBitmap4.iGc->SetClippingRegion(iSubRegionPtr);
sl@0
  1184
sl@0
  1185
	//Mask bitmap
sl@0
  1186
	iBitmap6.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1187
	iBitmap6.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1188
sl@0
  1189
	TRgb color1(Random(256),Random(256),Random(256));
sl@0
  1190
sl@0
  1191
	//Source bitmap
sl@0
  1192
	iBitmap7.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1193
	iBitmap7.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1194
	iBitmap7.iGc->SetBrushColor(color1);
sl@0
  1195
	iBitmap7.iGc->DrawRect(bitmapRect);
sl@0
  1196
	iBitmap7.iGc->SetBrushStyle(CGraphicsContext::ENullBrush);
sl@0
  1197
sl@0
  1198
	TAcceleratedBitmapSpec bitmap7Spec(iBitmap7.iBitmap);
sl@0
  1199
	TAcceleratedBitmapSpec bitmap6Spec(iBitmap6.iBitmap);
sl@0
  1200
sl@0
  1201
	TPoint dest;
sl@0
  1202
	TRect rectMask;
sl@0
  1203
sl@0
  1204
	//clear the mask bitmap with white
sl@0
  1205
	iBitmap6.iGc->SetBrushColor(TRgb(255,255,255));
sl@0
  1206
	iBitmap6.iGc->DrawRect(bitmapRect);
sl@0
  1207
sl@0
  1208
	//Put randomly in the Bitmap Mask a numbers of black rects
sl@0
  1209
	iBitmap6.iGc->SetBrushColor(TRgb(0,0,0));
sl@0
  1210
sl@0
  1211
	for(TInt n=0; n<10; n++)
sl@0
  1212
		{
sl@0
  1213
		rectMask.iTl.iX = Random(TestBitmapSize1.iWidth);
sl@0
  1214
		rectMask.iTl.iY = Random(TestBitmapSize1.iHeight);
sl@0
  1215
		rectMask.iBr.iX = rectMask.iTl.iX+1+Random(TestBitmapSize1.iWidth);
sl@0
  1216
		rectMask.iBr.iY = rectMask.iTl.iY+1+Random(TestBitmapSize1.iHeight);
sl@0
  1217
		iBitmap6.iGc->DrawRect(rectMask);
sl@0
  1218
		}
sl@0
  1219
sl@0
  1220
	for(TInt i=0; i<100; i++)
sl@0
  1221
		{
sl@0
  1222
	    //random rect to blit
sl@0
  1223
		rect.iTl.iX = Random(TestBitmapSize1.iWidth);
sl@0
  1224
		rect.iTl.iY = Random(TestBitmapSize1.iHeight);
sl@0
  1225
		rect.iBr.iX = rect.iTl.iX+1+Random(TestBitmapSize1.iWidth);
sl@0
  1226
		rect.iBr.iY = rect.iTl.iY+1+Random(TestBitmapSize1.iHeight);
sl@0
  1227
sl@0
  1228
		//random point destination
sl@0
  1229
		dest.iX = Random(TestBitmapSize1.iWidth);
sl@0
  1230
		dest.iY = Random(TestBitmapSize1.iHeight);
sl@0
  1231
sl@0
  1232
		//do BitBltMasked with graphics contex
sl@0
  1233
        iBitmap1.iGc->BitBltMasked(dest,iBitmap7.iBitmap,rect,iBitmap6.iBitmap,ETrue);
sl@0
  1234
        iBitmap2.iGc->BitBltMasked(dest,iBitmap7.iBitmap,rect,iBitmap6.iBitmap,ETrue);
sl@0
  1235
		TEST(iBitmap1.Compare(&iBitmap2));
sl@0
  1236
sl@0
  1237
		rect.Intersection(bitmapRect);
sl@0
  1238
		if(rect.IsEmpty())
sl@0
  1239
			continue;
sl@0
  1240
sl@0
  1241
		if((rect.iBr.iX>rect.iTl.iX) && (rect.iBr.iY>rect.iTl.iY))
sl@0
  1242
			{
sl@0
  1243
			TGopBitBltMasked gopBitBltMasked(dest,bitmap7Spec,rect,bitmap6Spec);
sl@0
  1244
			gopDes.Append((TUint8*)&gopBitBltMasked,sizeof(gopBitBltMasked));
sl@0
  1245
			TInt error = iGraphicsAccelerator1->Operation(gopBitBltMasked);
sl@0
  1246
			if(error == KErrNotSupported)
sl@0
  1247
				{
sl@0
  1248
				delete gopBuffer;
sl@0
  1249
				WARN_PRINTF1(_L("  Not Supported."));
sl@0
  1250
				return;
sl@0
  1251
				}
sl@0
  1252
			}
sl@0
  1253
		iBitmap3.iGc->DrawRect(iBitmap3.iBitmap->SizeInPixels());
sl@0
  1254
		TEST(iBitmap2.Compare(&iBitmap3));
sl@0
  1255
		}	
sl@0
  1256
	iGraphicsAccelerator2->Operation(gopDes);
sl@0
  1257
	iBitmap4.iGc->DrawRect(iBitmap4.iBitmap->SizeInPixels());
sl@0
  1258
	TEST(iBitmap3.Compare(&iBitmap4));
sl@0
  1259
	delete gopBuffer;
sl@0
  1260
	}
sl@0
  1261
sl@0
  1262
void CTAccelerator::TestBitBltAlphaBitmap()
sl@0
  1263
	{
sl@0
  1264
	TInt gopBufferSize = KNumTestBitBltAlphaBitmap*sizeof(TGopBitBltAlphaBitmap);
sl@0
  1265
	TUint8* gopBuffer = new TUint8[gopBufferSize];
sl@0
  1266
	TPtr8 gopDes = TPtr8(gopBuffer,0,gopBufferSize);
sl@0
  1267
sl@0
  1268
	TRect bitmapRect(0,0,TestBitmapSize.iWidth,TestBitmapSize.iHeight);
sl@0
  1269
sl@0
  1270
    TRect rect;
sl@0
  1271
	iFixedRegionPtr = &iFixedRegion;
sl@0
  1272
	
sl@0
  1273
	iBitmap1.iGc->SetClippingRegion(iFixedRegionPtr);
sl@0
  1274
	iBitmap2.iGc->SetClippingRegion(iFixedRegionPtr);
sl@0
  1275
sl@0
  1276
	TRgb white;
sl@0
  1277
	iBitmap3.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1278
	iBitmap3.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1279
	iBitmap3.iGc->SetBrushColor(white);
sl@0
  1280
	iBitmap3.iGc->SetClippingRegion(iSubRegionPtr);
sl@0
  1281
sl@0
  1282
	iBitmap4.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1283
	iBitmap4.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1284
	iBitmap4.iGc->SetBrushColor(white);
sl@0
  1285
	iBitmap4.iGc->SetClippingRegion(iSubRegionPtr);
sl@0
  1286
sl@0
  1287
	TRgb color = TRgb(Random(256),Random(256),Random(256));
sl@0
  1288
sl@0
  1289
	//Source bitmap
sl@0
  1290
	iBitmap7.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1291
	iBitmap7.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1292
	iBitmap7.iGc->SetBrushColor(color);
sl@0
  1293
	iBitmap7.iGc->DrawRect(bitmapRect);
sl@0
  1294
	iBitmap7.iGc->SetBrushStyle(CGraphicsContext::ENullBrush);
sl@0
  1295
sl@0
  1296
	iAlphaBitmap.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1297
	iAlphaBitmap.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1298
sl@0
  1299
	//create 10 gray level for the alpha bitmap
sl@0
  1300
    for(TInt i=0; i<10;i++)
sl@0
  1301
		{
sl@0
  1302
		TRect tmpRect(0,10*i,200,10+10*i);
sl@0
  1303
		TInt index = 255-(20*i);
sl@0
  1304
		TRgb tmpRgb;
sl@0
  1305
        iAlphaBitmap.iGc->SetBrushColor(tmpRgb.Gray256(index));
sl@0
  1306
        iAlphaBitmap.iGc->DrawRect(tmpRect);
sl@0
  1307
		}
sl@0
  1308
    
sl@0
  1309
	TAcceleratedBitmapSpec bitmap7Spec(iBitmap7.iBitmap);
sl@0
  1310
	TAcceleratedBitmapSpec alphaBitmapSpec(iAlphaBitmap.iBitmap);
sl@0
  1311
sl@0
  1312
	iAlphaBitmap.iGc->SetBrushStyle(CGraphicsContext::ENullBrush);
sl@0
  1313
sl@0
  1314
	for(TInt n=0; n<100; n++)
sl@0
  1315
		{
sl@0
  1316
		rect.iTl.iX = Random(TestBitmapSize.iWidth);
sl@0
  1317
		rect.iTl.iY = Random(TestBitmapSize.iHeight);
sl@0
  1318
		rect.iBr.iX = rect.iTl.iX+1+Random(TestBitmapSize.iWidth);
sl@0
  1319
		rect.iBr.iY = rect.iTl.iY+1+Random(TestBitmapSize.iHeight);
sl@0
  1320
sl@0
  1321
		//Random destination point
sl@0
  1322
		TPoint pointDest(Random(TestBitmapSize.iWidth),Random(TestBitmapSize.iHeight));
sl@0
  1323
sl@0
  1324
		//alpha blitting with Graphics Contex
sl@0
  1325
		iBitmap1.iGc->BitBltMasked(pointDest,iBitmap7.iBitmap,rect,iAlphaBitmap.iBitmap,ETrue);
sl@0
  1326
		iBitmap2.iGc->BitBltMasked(pointDest,iBitmap7.iBitmap,rect,iAlphaBitmap.iBitmap,ETrue);
sl@0
  1327
sl@0
  1328
		TEST(iBitmap1.Compare(&iBitmap2));
sl@0
  1329
sl@0
  1330
		rect.Intersection(bitmapRect);
sl@0
  1331
		//alpha blitting with Graphics accelerator
sl@0
  1332
		TGopBitBltAlphaBitmap gopBitBltAlphaBitmap(pointDest,bitmap7Spec,rect,alphaBitmapSpec);
sl@0
  1333
		gopDes.Append((TUint8*)&gopBitBltAlphaBitmap,sizeof(gopBitBltAlphaBitmap));
sl@0
  1334
		TInt error = iGraphicsAccelerator1->Operation(gopBitBltAlphaBitmap);
sl@0
  1335
		if(error == KErrNotSupported)
sl@0
  1336
			{
sl@0
  1337
			WARN_PRINTF1(_L("  Not Supported."));
sl@0
  1338
			goto done;
sl@0
  1339
			}
sl@0
  1340
		iBitmap3.iGc->DrawRect(iBitmap3.iBitmap->SizeInPixels());
sl@0
  1341
		TEST(iBitmap2.Compare(&iBitmap3));
sl@0
  1342
		}
sl@0
  1343
	iGraphicsAccelerator2->Operation(gopDes);
sl@0
  1344
	iBitmap4.iGc->DrawRect(iBitmap4.iBitmap->SizeInPixels());
sl@0
  1345
	TEST(iBitmap3.Compare(&iBitmap4));
sl@0
  1346
done:
sl@0
  1347
	delete gopBuffer;
sl@0
  1348
	}
sl@0
  1349
	
sl@0
  1350
void CTAccelerator::TestAlphaBlendTwoBitmaps()
sl@0
  1351
	{
sl@0
  1352
	TInt gopBufferSize = KNumTestAlphaBlendBitmaps*sizeof(TGopAlphaBlendTwoBitmaps);
sl@0
  1353
	TUint8* gopBuffer = new TUint8[gopBufferSize];
sl@0
  1354
	TPtr8 gopDes = TPtr8(gopBuffer,0,gopBufferSize);
sl@0
  1355
sl@0
  1356
	TRect bitmapRect(0,0,TestBitmapSize.iWidth,TestBitmapSize.iHeight);
sl@0
  1357
sl@0
  1358
	TRect rect;
sl@0
  1359
	iFixedRegionPtr = &iFixedRegion;
sl@0
  1360
	
sl@0
  1361
	iBitmap1.iGc->SetClippingRegion(iFixedRegionPtr);
sl@0
  1362
	iBitmap2.iGc->SetClippingRegion(iFixedRegionPtr);
sl@0
  1363
sl@0
  1364
	TRgb white;
sl@0
  1365
	iBitmap3.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1366
	iBitmap3.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1367
	iBitmap3.iGc->SetBrushColor(white);
sl@0
  1368
	iBitmap3.iGc->SetClippingRegion(iSubRegionPtr);
sl@0
  1369
sl@0
  1370
	iBitmap4.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1371
	iBitmap4.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1372
	iBitmap4.iGc->SetBrushColor(white);
sl@0
  1373
	iBitmap4.iGc->SetClippingRegion(iSubRegionPtr);
sl@0
  1374
sl@0
  1375
	TRgb color = TRgb(Random(256),Random(256),Random(256));
sl@0
  1376
sl@0
  1377
	// First Source bitmap
sl@0
  1378
	iBitmap7.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1379
	iBitmap7.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1380
	iBitmap7.iGc->SetBrushColor(color);
sl@0
  1381
	iBitmap7.iGc->DrawRect(bitmapRect);
sl@0
  1382
	iBitmap7.iGc->SetBrushStyle(CGraphicsContext::ENullBrush);
sl@0
  1383
	
sl@0
  1384
	// Get a new random color
sl@0
  1385
	color = TRgb(Random(256),Random(256),Random(256));
sl@0
  1386
	
sl@0
  1387
	// Second Source bitmap
sl@0
  1388
	iBitmap8.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1389
	iBitmap8.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1390
	iBitmap8.iGc->SetBrushColor(color);
sl@0
  1391
	iBitmap8.iGc->DrawRect(bitmapRect);
sl@0
  1392
	iBitmap8.iGc->SetBrushStyle(CGraphicsContext::ENullBrush);
sl@0
  1393
sl@0
  1394
	iAlphaBitmap.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1395
	iAlphaBitmap.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1396
sl@0
  1397
	//create 10 gray level for the alpha bitmap
sl@0
  1398
	for(TInt i=0; i<10;i++)
sl@0
  1399
		{
sl@0
  1400
		TRect tmpRect(0,10*i,200,10+10*i);
sl@0
  1401
		TInt index = 255-(20*i);
sl@0
  1402
		TRgb tmpRgb;
sl@0
  1403
		iAlphaBitmap.iGc->SetBrushColor(tmpRgb.Gray256(index));
sl@0
  1404
		iAlphaBitmap.iGc->DrawRect(tmpRect);
sl@0
  1405
		}
sl@0
  1406
    
sl@0
  1407
	TAcceleratedBitmapSpec bitmap7Spec(iBitmap7.iBitmap);
sl@0
  1408
	TAcceleratedBitmapSpec bitmap8Spec(iBitmap8.iBitmap);
sl@0
  1409
	TAcceleratedBitmapSpec alphaBitmapSpec(iAlphaBitmap.iBitmap);
sl@0
  1410
sl@0
  1411
	iAlphaBitmap.iGc->SetBrushStyle(CGraphicsContext::ENullBrush);
sl@0
  1412
sl@0
  1413
	for(TInt n=0; n<100; n++)
sl@0
  1414
		{
sl@0
  1415
		rect.iTl.iX = Random(TestBitmapSize.iWidth - 1); 
sl@0
  1416
		rect.iTl.iY = Random(TestBitmapSize.iHeight - 1);
sl@0
  1417
		rect.iBr.iX = rect.iTl.iX+1+Random(TestBitmapSize.iWidth - rect.iTl.iX);
sl@0
  1418
		rect.iBr.iY = rect.iTl.iY+1+Random(TestBitmapSize.iHeight - rect.iTl.iY);
sl@0
  1419
sl@0
  1420
		TPoint pointDest(Random(TestBitmapSize.iWidth),Random(TestBitmapSize.iHeight));
sl@0
  1421
		TPoint pointSource(Random(TestBitmapSize.iWidth),Random(TestBitmapSize.iHeight));
sl@0
  1422
		TPoint pointAlpha(Random(TestBitmapSize.iWidth - rect.Width() - 1),Random(TestBitmapSize.iHeight - rect.Height() - 1));
sl@0
  1423
sl@0
  1424
		//alpha blending Graphics Context - invalid parameter causes skip to next test
sl@0
  1425
		TInt rc = iBitmap1.iGc->AlphaBlendBitmaps(pointDest,iBitmap7.iBitmap,iBitmap8.iBitmap,rect,pointSource,iAlphaBitmap.iBitmap,pointAlpha);
sl@0
  1426
		if(rc!=KErrNone)
sl@0
  1427
			{
sl@0
  1428
			continue;
sl@0
  1429
			}
sl@0
  1430
		iBitmap2.iGc->AlphaBlendBitmaps(pointDest,iBitmap7.iBitmap,iBitmap8.iBitmap,rect,pointSource,iAlphaBitmap.iBitmap,pointAlpha);
sl@0
  1431
		TEST(iBitmap1.Compare(&iBitmap2));
sl@0
  1432
sl@0
  1433
		rect.Intersection(bitmapRect);
sl@0
  1434
		//alpha blending with Graphics accelerator
sl@0
  1435
		TGopAlphaBlendTwoBitmaps gopAlphaBlendTwoBitmaps(pointDest,bitmap7Spec,bitmap8Spec,rect,pointSource,alphaBitmapSpec,pointAlpha);
sl@0
  1436
		gopDes.Append((TUint8*)&gopAlphaBlendTwoBitmaps,sizeof(gopAlphaBlendTwoBitmaps));
sl@0
  1437
		TInt error = iGraphicsAccelerator1->Operation(gopAlphaBlendTwoBitmaps);
sl@0
  1438
		if(error == KErrNotSupported)
sl@0
  1439
			{
sl@0
  1440
			WARN_PRINTF1(_L("  Not Supported."));
sl@0
  1441
			goto done;
sl@0
  1442
			}
sl@0
  1443
		iBitmap3.iGc->DrawRect(iBitmap3.iBitmap->SizeInPixels());
sl@0
  1444
		TEST(iBitmap2.Compare(&iBitmap3));
sl@0
  1445
		}
sl@0
  1446
	iGraphicsAccelerator2->Operation(gopDes);
sl@0
  1447
	iBitmap4.iGc->DrawRect(iBitmap4.iBitmap->SizeInPixels());
sl@0
  1448
	TEST(iBitmap3.Compare(&iBitmap4));
sl@0
  1449
done:
sl@0
  1450
	delete gopBuffer;
sl@0
  1451
	}
sl@0
  1452
	
sl@0
  1453
void CTAccelerator::TestAlphaBlendOneBitmap()
sl@0
  1454
	{
sl@0
  1455
	TInt gopBufferSize = KNumTestAlphaBlendBitmaps*sizeof(TGopAlphaBlendOneBitmap);
sl@0
  1456
	TUint8* gopBuffer = new TUint8[gopBufferSize];
sl@0
  1457
	TPtr8 gopDes = TPtr8(gopBuffer,0,gopBufferSize);
sl@0
  1458
sl@0
  1459
	TRect bitmapRect(0,0,TestBitmapSize.iWidth,TestBitmapSize.iHeight);
sl@0
  1460
sl@0
  1461
	TRect rect;
sl@0
  1462
	iFixedRegionPtr = &iFixedRegion;
sl@0
  1463
	
sl@0
  1464
	iBitmap1.iGc->SetClippingRegion(iFixedRegionPtr);
sl@0
  1465
	iBitmap2.iGc->SetClippingRegion(iFixedRegionPtr);
sl@0
  1466
sl@0
  1467
	TRgb white;
sl@0
  1468
	iBitmap3.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1469
	iBitmap3.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1470
	iBitmap3.iGc->SetBrushColor(white);
sl@0
  1471
	iBitmap3.iGc->SetClippingRegion(iSubRegionPtr);
sl@0
  1472
sl@0
  1473
	iBitmap4.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1474
	iBitmap4.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1475
	iBitmap4.iGc->SetBrushColor(white);
sl@0
  1476
	iBitmap4.iGc->SetClippingRegion(iSubRegionPtr);
sl@0
  1477
sl@0
  1478
	TRgb color = TRgb(Random(256),Random(256),Random(256));
sl@0
  1479
sl@0
  1480
	// First Source bitmap
sl@0
  1481
	iBitmap7.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1482
	iBitmap7.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1483
	iBitmap7.iGc->SetBrushColor(color);
sl@0
  1484
	iBitmap7.iGc->DrawRect(bitmapRect);
sl@0
  1485
	iBitmap7.iGc->SetBrushStyle(CGraphicsContext::ENullBrush);
sl@0
  1486
	
sl@0
  1487
	// Get a new random color
sl@0
  1488
	color = TRgb(Random(256),Random(256),Random(256));
sl@0
  1489
sl@0
  1490
	iAlphaBitmap.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1491
	iAlphaBitmap.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1492
sl@0
  1493
	//create 10 gray level for the alpha bitmap
sl@0
  1494
	for(TInt i=0; i<10;i++)
sl@0
  1495
		{
sl@0
  1496
		TRect tmpRect(0,10*i,200,10+10*i);
sl@0
  1497
		TInt index = 255-(20*i);
sl@0
  1498
		TRgb tmpRgb;
sl@0
  1499
		iAlphaBitmap.iGc->SetBrushColor(tmpRgb.Gray256(index));
sl@0
  1500
		iAlphaBitmap.iGc->DrawRect(tmpRect);
sl@0
  1501
		}
sl@0
  1502
		  
sl@0
  1503
 	TAcceleratedBitmapSpec bitmap7Spec(iBitmap7.iBitmap);
sl@0
  1504
	TAcceleratedBitmapSpec alphaBitmapSpec(iAlphaBitmap.iBitmap);
sl@0
  1505
sl@0
  1506
	iAlphaBitmap.iGc->SetBrushStyle(CGraphicsContext::ENullBrush);
sl@0
  1507
sl@0
  1508
	for(TInt n=0; n<100; n++)
sl@0
  1509
		{
sl@0
  1510
		rect.iTl.iX = Random(TestBitmapSize.iWidth - 1); 
sl@0
  1511
		rect.iTl.iY = Random(TestBitmapSize.iHeight - 1);
sl@0
  1512
		rect.iBr.iX = rect.iTl.iX+1+Random(TestBitmapSize.iWidth - rect.iTl.iX);
sl@0
  1513
		rect.iBr.iY = rect.iTl.iY+1+Random(TestBitmapSize.iHeight - rect.iTl.iY);
sl@0
  1514
sl@0
  1515
		TPoint pointDest(Random(TestBitmapSize.iWidth),Random(TestBitmapSize.iHeight));
sl@0
  1516
		TPoint pointAlpha(Random(TestBitmapSize.iWidth - rect.Width()),Random(TestBitmapSize.iHeight - rect.Height()));
sl@0
  1517
		
sl@0
  1518
		iBitmap1.iGc->DrawRect(iBitmap1.iBitmap->SizeInPixels());
sl@0
  1519
		//alpha blending Graphics Context - wrong argument cause skip to next test
sl@0
  1520
		TInt rc = iBitmap1.iGc->AlphaBlendBitmaps(pointDest,iBitmap7.iBitmap,rect,iAlphaBitmap.iBitmap,pointAlpha);
sl@0
  1521
		if(rc!=KErrNone)
sl@0
  1522
			{
sl@0
  1523
			continue;
sl@0
  1524
			}
sl@0
  1525
		iBitmap2.iGc->AlphaBlendBitmaps(pointDest,iBitmap7.iBitmap,rect,iAlphaBitmap.iBitmap,pointAlpha);
sl@0
  1526
		TEST(iBitmap1.Compare(&iBitmap2));
sl@0
  1527
sl@0
  1528
		rect.Intersection(bitmapRect);
sl@0
  1529
		//alpha blending with Graphics accelerator
sl@0
  1530
		TGopAlphaBlendOneBitmap gopAlphaBlendOneBitmap(pointDest,iBitmap7.iBitmap,rect,iAlphaBitmap.iBitmap,pointAlpha);
sl@0
  1531
		gopDes.Append((TUint8*)&gopAlphaBlendOneBitmap,sizeof(gopAlphaBlendOneBitmap));
sl@0
  1532
		TInt error = iGraphicsAccelerator1->Operation(gopAlphaBlendOneBitmap);
sl@0
  1533
		if(error == KErrNotSupported)
sl@0
  1534
			{
sl@0
  1535
			WARN_PRINTF1(_L("  Not Supported."));
sl@0
  1536
			goto done;
sl@0
  1537
			}
sl@0
  1538
		iBitmap3.iGc->DrawRect(iBitmap3.iBitmap->SizeInPixels());
sl@0
  1539
		TEST(iBitmap2.Compare(&iBitmap3));
sl@0
  1540
		}
sl@0
  1541
	iGraphicsAccelerator2->Operation(gopDes);
sl@0
  1542
	iBitmap4.iGc->DrawRect(iBitmap4.iBitmap->SizeInPixels());
sl@0
  1543
	TEST(iBitmap3.Compare(&iBitmap4));
sl@0
  1544
done:
sl@0
  1545
	delete gopBuffer;
sl@0
  1546
	}
sl@0
  1547
sl@0
  1548
void CTAccelerator::TestScreenFilledRect()
sl@0
  1549
	{
sl@0
  1550
	TInt gopBufferSize = KNumTestFilledRect*sizeof(TGopFilledRect);
sl@0
  1551
	TUint8* gopBuffer = new TUint8[gopBufferSize];
sl@0
  1552
	TPtr8 gopDes = TPtr8(gopBuffer,0,gopBufferSize);
sl@0
  1553
sl@0
  1554
	TRect screenRect(0,0,TestScreenSize.iWidth,TestScreenSize.iHeight);
sl@0
  1555
sl@0
  1556
	TRect rect;
sl@0
  1557
	iFixedRegionPtr = &iFixedRegion;
sl@0
  1558
sl@0
  1559
	//used with GC
sl@0
  1560
	iBitmap1.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1561
	iBitmap1.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1562
	iBitmap1.iGc->SetClippingRegion(iFixedRegionPtr);
sl@0
  1563
sl@0
  1564
	iScreenGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1565
	iScreenGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1566
	iScreenGc->SetClippingRegion(iFixedRegionPtr);
sl@0
  1567
sl@0
  1568
	TRgb white;
sl@0
  1569
	iBitmap3.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1570
	iBitmap3.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1571
	iBitmap3.iGc->SetBrushColor(white);
sl@0
  1572
	iBitmap3.iGc->SetClippingRegion(iSubRegionPtr);
sl@0
  1573
sl@0
  1574
	iBitmap4.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1575
	iBitmap4.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1576
	iBitmap4.iGc->SetBrushColor(white);
sl@0
  1577
	iBitmap4.iGc->SetClippingRegion(iSubRegionPtr);
sl@0
  1578
sl@0
  1579
	for(TInt n=0; n<100; n++)
sl@0
  1580
		{
sl@0
  1581
		rect.iTl.iX = Random(TestScreenSize.iWidth+20)-10;
sl@0
  1582
		rect.iTl.iY = Random(TestScreenSize.iHeight+20)-10;
sl@0
  1583
		rect.iBr.iX = rect.iTl.iX+1+Random(TestScreenSize.iWidth+20);
sl@0
  1584
		rect.iBr.iY = rect.iTl.iY+1+Random(TestScreenSize.iHeight+20);
sl@0
  1585
sl@0
  1586
		TRgb colorRect(Random(256),Random(256),Random(256));
sl@0
  1587
sl@0
  1588
		iBitmap1.iGc->SetBrushColor(colorRect);
sl@0
  1589
		iBitmap1.iGc->DrawRect(rect);
sl@0
  1590
sl@0
  1591
		iScreenGc->SetBrushColor(colorRect);
sl@0
  1592
		iScreenGc->DrawRect(rect);
sl@0
  1593
sl@0
  1594
		iBitmap2.iGc->BitBlt(TPoint(0,0),*iScreenGc,screenRect);
sl@0
  1595
		TEST(iBitmap1.Compare(&iBitmap2));
sl@0
  1596
sl@0
  1597
		rect.Intersection(screenRect);
sl@0
  1598
		if( (rect.iBr.iX>rect.iTl.iX) && (rect.iBr.iY>rect.iTl.iY))
sl@0
  1599
			{
sl@0
  1600
			TGopFilledRect gop(rect,colorRect);
sl@0
  1601
			gopDes.Append((TUint8*)&gop,sizeof(gop));
sl@0
  1602
			TInt error = iGraphicsAccelerator1->Operation(gop);
sl@0
  1603
			if(error == KErrNotSupported)
sl@0
  1604
				{
sl@0
  1605
				delete gopBuffer;
sl@0
  1606
				WARN_PRINTF1(_L("  Not Supported."));
sl@0
  1607
				return;
sl@0
  1608
				}
sl@0
  1609
			}
sl@0
  1610
		iBitmap3.iGc->DrawRect(iBitmap3.iBitmap->SizeInPixels());	
sl@0
  1611
		TEST(iBitmap2.Compare(&iBitmap3));
sl@0
  1612
		}
sl@0
  1613
	iGraphicsAccelerator2->Operation(gopDes);
sl@0
  1614
	iBitmap4.iGc->DrawRect(iBitmap4.iBitmap->SizeInPixels());
sl@0
  1615
	TEST(iBitmap3.Compare(&iBitmap4));
sl@0
  1616
	delete gopBuffer;
sl@0
  1617
	}
sl@0
  1618
sl@0
  1619
void CTAccelerator::TestScreenFilledRectWithPattern()
sl@0
  1620
	{
sl@0
  1621
	TInt gopBufferSize = KNumTestInvertRect*sizeof(TGopFilledRectWithPattern);
sl@0
  1622
	TUint8* gopBuffer = new TUint8[gopBufferSize];
sl@0
  1623
	TPtr8 gopDes = TPtr8(gopBuffer,0,gopBufferSize);
sl@0
  1624
sl@0
  1625
	TRect screenRect(0,0,TestScreenSize.iWidth,TestScreenSize.iHeight);
sl@0
  1626
sl@0
  1627
	TRect rect;
sl@0
  1628
	iFixedRegionPtr = &iFixedRegion;
sl@0
  1629
sl@0
  1630
	//used with GC
sl@0
  1631
	iBitmap1.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1632
	iBitmap1.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1633
	iBitmap1.iGc->UseBrushPattern(iTileBitmap.iBitmap);
sl@0
  1634
	iBitmap1.iGc->SetBrushStyle(CGraphicsContext::EPatternedBrush);
sl@0
  1635
	iBitmap1.iGc->SetClippingRegion(iFixedRegionPtr);
sl@0
  1636
	   
sl@0
  1637
	iScreenGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1638
	iScreenGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1639
	iScreenGc->UseBrushPattern(iTileBitmap.iBitmap);
sl@0
  1640
	iScreenGc->SetBrushStyle(CGraphicsContext::EPatternedBrush);
sl@0
  1641
	iScreenGc->SetClippingRegion(iFixedRegionPtr);
sl@0
  1642
sl@0
  1643
	TRgb white;
sl@0
  1644
	iBitmap3.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1645
	iBitmap3.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1646
	iBitmap3.iGc->SetBrushColor(white);
sl@0
  1647
	iBitmap3.iGc->SetClippingRegion(iSubRegionPtr);
sl@0
  1648
sl@0
  1649
	iBitmap4.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1650
	iBitmap4.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1651
	iBitmap4.iGc->SetBrushColor(white);
sl@0
  1652
	iBitmap4.iGc->SetClippingRegion(iSubRegionPtr);
sl@0
  1653
sl@0
  1654
	TAcceleratedBitmapSpec patternBitmapSpec(iTileBitmap.iBitmap);
sl@0
  1655
	TGopFillPattern gopFillPattern;
sl@0
  1656
	gopFillPattern.iBitmap = patternBitmapSpec;
sl@0
  1657
sl@0
  1658
	for(TInt n=0; n<100; n++)
sl@0
  1659
		{
sl@0
  1660
		rect.iTl.iX = Random(TestScreenSize.iWidth);
sl@0
  1661
		rect.iTl.iY = Random(TestScreenSize.iHeight);
sl@0
  1662
		rect.iBr.iX = rect.iTl.iX+1+Random(TestScreenSize.iWidth);
sl@0
  1663
		rect.iBr.iY = rect.iTl.iY+1+Random(TestScreenSize.iHeight);
sl@0
  1664
sl@0
  1665
		TPoint brushOrigin(Random(TestScreenSize.iWidth -5),Random(TestScreenSize.iHeight-5));
sl@0
  1666
sl@0
  1667
		iBitmap1.iGc->SetBrushOrigin(brushOrigin);
sl@0
  1668
		iBitmap1.iGc->DrawRect(rect);
sl@0
  1669
sl@0
  1670
		iScreenGc->SetBrushOrigin(brushOrigin);
sl@0
  1671
		iScreenGc->DrawRect(rect);
sl@0
  1672
sl@0
  1673
		iBitmap2.iGc->BitBlt(TPoint(0,0),*iScreenGc,screenRect);
sl@0
  1674
		TEST(iBitmap1.Compare(&iBitmap2));
sl@0
  1675
sl@0
  1676
		rect.Intersection(screenRect);
sl@0
  1677
		if( (rect.iBr.iX>rect.iTl.iX) && (rect.iBr.iY>rect.iTl.iY))
sl@0
  1678
			{
sl@0
  1679
			gopFillPattern.iOrigin = brushOrigin;
sl@0
  1680
			TGopFilledRectWithPattern gop(rect,gopFillPattern);
sl@0
  1681
			gopDes.Append((TUint8*)&gop,sizeof(gop));
sl@0
  1682
			TInt error = iGraphicsAccelerator1->Operation(gop);
sl@0
  1683
			if(error == KErrNotSupported)
sl@0
  1684
				{
sl@0
  1685
				delete gopBuffer;
sl@0
  1686
				WARN_PRINTF1(_L("  Not Supported."));
sl@0
  1687
				return;
sl@0
  1688
				}
sl@0
  1689
			}
sl@0
  1690
		iBitmap3.iGc->DrawRect(iBitmap3.iBitmap->SizeInPixels());
sl@0
  1691
		TEST(iBitmap2.Compare(&iBitmap3));
sl@0
  1692
		}
sl@0
  1693
sl@0
  1694
	iGraphicsAccelerator2->Operation(gopDes);
sl@0
  1695
	iBitmap4.iGc->DrawRect(iBitmap4.iBitmap->SizeInPixels());
sl@0
  1696
	TEST(iBitmap3.Compare(&iBitmap4));
sl@0
  1697
	iBitmap1.iGc->DiscardBrushPattern();
sl@0
  1698
	delete gopBuffer;
sl@0
  1699
	}
sl@0
  1700
sl@0
  1701
void CTAccelerator::TestScreenInvertRect()
sl@0
  1702
	{
sl@0
  1703
	TInt gopBufferSize = KNumTestInvertRect*sizeof(TGopInvertRect);
sl@0
  1704
	TUint8* gopBuffer = new TUint8[gopBufferSize];
sl@0
  1705
	TPtr8 gopDes = TPtr8(gopBuffer,0,gopBufferSize);
sl@0
  1706
sl@0
  1707
	TRect screenRect(0,0,TestScreenSize.iWidth,TestScreenSize.iHeight);
sl@0
  1708
sl@0
  1709
	TRect rect;
sl@0
  1710
	iFixedRegionPtr = &iFixedRegion;
sl@0
  1711
sl@0
  1712
	iBitmap1.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1713
	iBitmap1.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1714
    iBitmap1.iGc->SetDrawMode(CGraphicsContext::EDrawModeNOTSCREEN);
sl@0
  1715
	iBitmap1.iGc->SetClippingRegion(iFixedRegionPtr);
sl@0
  1716
sl@0
  1717
	iScreenGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1718
	iScreenGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1719
    iScreenGc->SetDrawMode(CGraphicsContext::EDrawModeNOTSCREEN);
sl@0
  1720
	iScreenGc->SetClippingRegion(iFixedRegionPtr);
sl@0
  1721
sl@0
  1722
	TRgb white;
sl@0
  1723
	iBitmap3.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1724
	iBitmap3.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1725
	iBitmap3.iGc->SetBrushColor(white);
sl@0
  1726
	iBitmap3.iGc->SetClippingRegion(iSubRegionPtr);
sl@0
  1727
sl@0
  1728
	iBitmap4.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1729
	iBitmap4.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1730
	iBitmap4.iGc->SetBrushColor(white);
sl@0
  1731
	iBitmap4.iGc->SetClippingRegion(iSubRegionPtr);
sl@0
  1732
sl@0
  1733
	for(TInt n=0; n<100; n++)
sl@0
  1734
		{
sl@0
  1735
		rect.iTl.iX = Random(TestScreenSize.iWidth+20)-10;
sl@0
  1736
		rect.iTl.iY = Random(TestScreenSize.iHeight+20)-10;
sl@0
  1737
		rect.iBr.iX = rect.iTl.iX+1+Random(TestScreenSize.iWidth+20);
sl@0
  1738
		rect.iBr.iY = rect.iTl.iY+1+Random(TestScreenSize.iHeight+20);
sl@0
  1739
sl@0
  1740
		iBitmap1.iGc->DrawRect(rect);
sl@0
  1741
		iScreenGc->DrawRect(rect);
sl@0
  1742
sl@0
  1743
		iBitmap2.iGc->BitBlt(TPoint(0,0),*iScreenGc,screenRect);
sl@0
  1744
		TEST(iBitmap1.Compare(&iBitmap2));
sl@0
  1745
sl@0
  1746
		rect.Intersection(screenRect);
sl@0
  1747
		if((rect.iBr.iX>rect.iTl.iX) && (rect.iBr.iY>rect.iTl.iY))
sl@0
  1748
			{
sl@0
  1749
			TGopInvertRect gop(rect);
sl@0
  1750
			gopDes.Append((TUint8*)&gop,sizeof(gop));
sl@0
  1751
			TInt error = iGraphicsAccelerator1->Operation(gop);
sl@0
  1752
			if(error == KErrNotSupported)
sl@0
  1753
				{
sl@0
  1754
				delete gopBuffer;
sl@0
  1755
				WARN_PRINTF1(_L("  Not Supported."));
sl@0
  1756
				return;
sl@0
  1757
				}
sl@0
  1758
			}
sl@0
  1759
		iBitmap3.iGc->DrawRect(iBitmap3.iBitmap->SizeInPixels());
sl@0
  1760
		TEST(iBitmap2.Compare(&iBitmap3));
sl@0
  1761
		}
sl@0
  1762
	iGraphicsAccelerator2->Operation(gopDes);
sl@0
  1763
	iBitmap4.iGc->DrawRect(iBitmap4.iBitmap->SizeInPixels());
sl@0
  1764
	TEST(iBitmap3.Compare(&iBitmap4));
sl@0
  1765
	delete gopBuffer;
sl@0
  1766
	}
sl@0
  1767
sl@0
  1768
void CTAccelerator::TestScreenFadeRect()
sl@0
  1769
	{
sl@0
  1770
	TInt gopBufferSize = KNumTestFadeRect*sizeof(TGopFadeRect);
sl@0
  1771
	TUint8* gopBuffer = new TUint8[gopBufferSize];
sl@0
  1772
	TPtr8 gopDes = TPtr8(gopBuffer,0,gopBufferSize);
sl@0
  1773
sl@0
  1774
	TRect screenRect(0,0,TestScreenSize.iWidth,TestScreenSize.iHeight);
sl@0
  1775
sl@0
  1776
	TRect rect;
sl@0
  1777
	iFixedRegionPtr = &iFixedRegion;
sl@0
  1778
sl@0
  1779
	iBitmap1.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1780
	iBitmap1.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1781
    iBitmap1.iGc->SetDrawMode(CGraphicsContext::EDrawModePEN);
sl@0
  1782
	iBitmap1.iGc->SetClippingRegion(iFixedRegionPtr);
sl@0
  1783
sl@0
  1784
	iScreenGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1785
	iScreenGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1786
    iScreenGc->SetDrawMode(CGraphicsContext::EDrawModePEN);
sl@0
  1787
	iScreenGc->SetClippingRegion(iFixedRegionPtr);
sl@0
  1788
sl@0
  1789
	for(TInt n=0; n<100; n++)
sl@0
  1790
		{
sl@0
  1791
		rect.iTl.iX = Random(TestScreenSize.iWidth);
sl@0
  1792
		rect.iTl.iY = Random(TestScreenSize.iHeight);
sl@0
  1793
		rect.iBr.iX = rect.iTl.iX+1+Random(TestScreenSize.iWidth);
sl@0
  1794
		rect.iBr.iY = rect.iTl.iY+1+Random(TestScreenSize.iHeight);
sl@0
  1795
sl@0
  1796
		TUint8 blackMap = (TUint8)Random(256);
sl@0
  1797
		TUint8 whiteMap = (TUint8)Random(256);
sl@0
  1798
sl@0
  1799
		RRegion region(rect);
sl@0
  1800
sl@0
  1801
		iBitmap1.iGc->SetFaded(ETrue);
sl@0
  1802
		iBitmap1.iGc->SetFadingParameters(blackMap,whiteMap);
sl@0
  1803
		iBitmap1.iGc->FadeArea((TRegion*)&region);
sl@0
  1804
sl@0
  1805
		iScreenGc->SetFaded(ETrue);
sl@0
  1806
		iScreenGc->SetFadingParameters(blackMap,whiteMap);
sl@0
  1807
		iScreenGc->FadeArea((TRegion*)&region);
sl@0
  1808
sl@0
  1809
		iBitmap2.iGc->BitBlt(TPoint(0,0),*iScreenGc,screenRect);
sl@0
  1810
sl@0
  1811
		region.Close();
sl@0
  1812
		TEST(iBitmap1.Compare(&iBitmap2));
sl@0
  1813
sl@0
  1814
		TGopFadeParams fadeParams;
sl@0
  1815
		fadeParams.iScale = whiteMap - blackMap + 1;
sl@0
  1816
		fadeParams.iOffset = blackMap;
sl@0
  1817
		rect.Intersection(screenRect);
sl@0
  1818
sl@0
  1819
		if( (rect.iBr.iX>rect.iTl.iX) && (rect.iBr.iY>rect.iTl.iY))
sl@0
  1820
			{
sl@0
  1821
			TGopFadeRect gop(rect,fadeParams);
sl@0
  1822
			gopDes.Append((TUint8*)&gop,sizeof(gop));
sl@0
  1823
			TInt error = iGraphicsAccelerator1->Operation(gop);
sl@0
  1824
			if(error == KErrNotSupported)
sl@0
  1825
				{
sl@0
  1826
				WARN_PRINTF1(_L("  Not Supported."));
sl@0
  1827
				goto quitFade;
sl@0
  1828
				}
sl@0
  1829
			}
sl@0
  1830
		TEST(iBitmap2.Compare(&iBitmap3));
sl@0
  1831
		}
sl@0
  1832
	iGraphicsAccelerator2->Operation(gopDes);
sl@0
  1833
	TEST(iBitmap3.Compare(&iBitmap4));
sl@0
  1834
quitFade:
sl@0
  1835
	delete gopBuffer;
sl@0
  1836
	iBitmap1.iGc->SetFaded(EFalse);
sl@0
  1837
	iScreenGc->SetFaded(EFalse);
sl@0
  1838
	}
sl@0
  1839
sl@0
  1840
void CTAccelerator::TestScreenBitBlt()
sl@0
  1841
	{
sl@0
  1842
	TInt gopBufferSize = KNumTestBitBlt*sizeof(TGopBitBlt);
sl@0
  1843
	TUint8* gopBuffer = new TUint8[gopBufferSize];
sl@0
  1844
	TPtr8 gopDes = TPtr8(gopBuffer,0,gopBufferSize);
sl@0
  1845
sl@0
  1846
	TRect screenRect(0,0,TestScreenSize.iWidth,TestScreenSize.iHeight);
sl@0
  1847
	//dest bitmap has different size
sl@0
  1848
	TRect bitmapRect1(0,0,TestBitmapSize1.iWidth,TestBitmapSize1.iHeight);
sl@0
  1849
sl@0
  1850
	TRect rect;
sl@0
  1851
	iFixedRegionPtr = &iFixedRegion;
sl@0
  1852
sl@0
  1853
	iBitmap1.iGc->SetClippingRegion(iFixedRegionPtr);
sl@0
  1854
	iScreenGc->SetClippingRegion(iFixedRegionPtr);
sl@0
  1855
sl@0
  1856
	TRgb white;
sl@0
  1857
	iBitmap3.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1858
	iBitmap3.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1859
	iBitmap3.iGc->SetBrushColor(white);
sl@0
  1860
	iBitmap3.iGc->SetClippingRegion(iSubRegionPtr);
sl@0
  1861
sl@0
  1862
	iBitmap4.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1863
	iBitmap4.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1864
	iBitmap4.iGc->SetBrushColor(white);
sl@0
  1865
	iBitmap4.iGc->SetClippingRegion(iSubRegionPtr);
sl@0
  1866
sl@0
  1867
	TRgb color1(Random(256),Random(256),Random(256));
sl@0
  1868
sl@0
  1869
	iBitmap5.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1870
	iBitmap5.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1871
	iBitmap5.iGc->SetBrushColor(color1);
sl@0
  1872
	iBitmap5.iGc->DrawRect(bitmapRect1);
sl@0
  1873
sl@0
  1874
sl@0
  1875
	for(TInt n=0; n<100; n++)
sl@0
  1876
		{
sl@0
  1877
		rect.iTl.iX = Random(TestBitmapSize1.iWidth);
sl@0
  1878
		rect.iTl.iY = Random(TestBitmapSize1.iHeight);
sl@0
  1879
		rect.iBr.iX = rect.iTl.iX+1+Random(TestBitmapSize1.iWidth);
sl@0
  1880
		rect.iBr.iY = rect.iTl.iY+1+Random(TestBitmapSize1.iHeight);
sl@0
  1881
sl@0
  1882
        TPoint pointDest(Random(TestScreenSize.iWidth),Random(TestScreenSize.iHeight));
sl@0
  1883
sl@0
  1884
		//bitblt with GC
sl@0
  1885
		iBitmap1.iGc->BitBlt(pointDest,iBitmap5.iBitmap,rect);
sl@0
  1886
		iScreenGc->BitBlt(pointDest,iBitmap5.iBitmap,rect);
sl@0
  1887
sl@0
  1888
		iBitmap2.iGc->BitBlt(TPoint(0,0),*iScreenGc,screenRect);
sl@0
  1889
		TEST(iBitmap1.Compare(&iBitmap2));
sl@0
  1890
sl@0
  1891
		TInt extraWidth=(pointDest.iX+rect.Width())-TestScreenSize.iWidth;
sl@0
  1892
		if (extraWidth>0)
sl@0
  1893
			rect.iBr.iX-=extraWidth;
sl@0
  1894
		TInt extraHeight=(pointDest.iY+rect.Height())-TestScreenSize.iHeight;
sl@0
  1895
		if (extraHeight>0)
sl@0
  1896
			rect.iBr.iY-=extraHeight;
sl@0
  1897
		rect.Intersection(bitmapRect1);
sl@0
  1898
		TSize maxSize=TestBitmapSize-pointDest;
sl@0
  1899
		if (rect.Width()>maxSize.iWidth)
sl@0
  1900
			rect.iBr.iX=rect.iTl.iX+maxSize.iWidth;
sl@0
  1901
		if (rect.Height()>maxSize.iHeight)
sl@0
  1902
			rect.iBr.iY=rect.iTl.iY+maxSize.iHeight;
sl@0
  1903
		if(rect.IsEmpty())
sl@0
  1904
			continue;
sl@0
  1905
sl@0
  1906
		if( (rect.iBr.iX>rect.iTl.iX) && (rect.iBr.iY>rect.iTl.iY))
sl@0
  1907
			{
sl@0
  1908
			TAcceleratedBitmapSpec bitmap5Spec(iBitmap5.iBitmap);
sl@0
  1909
			TGopBitBlt gopBitBlt(pointDest,bitmap5Spec,rect);
sl@0
  1910
			gopDes.Append((TUint8*)&gopBitBlt,sizeof(gopBitBlt));
sl@0
  1911
			TInt error = iGraphicsAccelerator1->Operation(gopBitBlt);
sl@0
  1912
			if(error == KErrNotSupported)
sl@0
  1913
				{
sl@0
  1914
				delete gopBuffer;
sl@0
  1915
				WARN_PRINTF1(_L("  Not Supported."));
sl@0
  1916
				return;
sl@0
  1917
				}
sl@0
  1918
			}
sl@0
  1919
		iBitmap3.iGc->DrawRect(iBitmap3.iBitmap->SizeInPixels());
sl@0
  1920
		TEST(iBitmap2.Compare(&iBitmap3));
sl@0
  1921
		}
sl@0
  1922
	iGraphicsAccelerator2->Operation(gopDes);
sl@0
  1923
	iBitmap4.iGc->DrawRect(iBitmap4.iBitmap->SizeInPixels());
sl@0
  1924
	TEST(iBitmap3.Compare(&iBitmap4));
sl@0
  1925
	delete gopBuffer;
sl@0
  1926
	}
sl@0
  1927
sl@0
  1928
void CTAccelerator::TestScreenBitBltMasked()
sl@0
  1929
	{
sl@0
  1930
	TInt gopBufferSize = KNumTestBitBltMasked*sizeof(TGopBitBltMasked);
sl@0
  1931
	TUint8* gopBuffer = new TUint8[gopBufferSize];
sl@0
  1932
	TPtr8 gopDes = TPtr8(gopBuffer,0,gopBufferSize);
sl@0
  1933
sl@0
  1934
	TRect screenRect(0,0,TestScreenSize.iWidth,TestScreenSize.iHeight);
sl@0
  1935
sl@0
  1936
	TRect rect;
sl@0
  1937
	iFixedRegionPtr = &iFixedRegion;
sl@0
  1938
sl@0
  1939
	iBitmap1.iGc->SetClippingRegion(iFixedRegionPtr);
sl@0
  1940
	iScreenGc->SetClippingRegion(iFixedRegionPtr);
sl@0
  1941
sl@0
  1942
	TRgb white;
sl@0
  1943
	iBitmap3.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1944
	iBitmap3.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1945
	iBitmap3.iGc->SetBrushColor(white);
sl@0
  1946
	iBitmap3.iGc->SetClippingRegion(iSubRegionPtr);
sl@0
  1947
sl@0
  1948
	iBitmap4.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1949
	iBitmap4.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1950
	iBitmap4.iGc->SetBrushColor(white);
sl@0
  1951
	iBitmap4.iGc->SetClippingRegion(iSubRegionPtr);
sl@0
  1952
sl@0
  1953
	//Mask bitmap
sl@0
  1954
	iBitmap6.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1955
	iBitmap6.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1956
sl@0
  1957
	TRgb color1(Random(256),Random(256),Random(256));
sl@0
  1958
sl@0
  1959
	//Source bitmap
sl@0
  1960
	iBitmap7.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  1961
	iBitmap7.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  1962
	iBitmap7.iGc->SetBrushColor(color1);
sl@0
  1963
	iBitmap7.iGc->DrawRect(iBitmap7.iBitmap->SizeInPixels());
sl@0
  1964
	iBitmap7.iGc->SetBrushStyle(CGraphicsContext::ENullBrush);
sl@0
  1965
sl@0
  1966
	TAcceleratedBitmapSpec bitmap7Spec(iBitmap7.iBitmap);
sl@0
  1967
	TAcceleratedBitmapSpec bitmap6Spec(iBitmap6.iBitmap);
sl@0
  1968
sl@0
  1969
	TPoint dest;
sl@0
  1970
	TRect rectMask;
sl@0
  1971
sl@0
  1972
	//Put randomly in the Bitmap Mask a numbers of black rects
sl@0
  1973
	iBitmap6.iGc->SetBrushColor(TRgb(0,0,0));
sl@0
  1974
sl@0
  1975
	for(TInt n=0; n<3; n++)
sl@0
  1976
		{
sl@0
  1977
		rectMask.iTl.iX = Random(TestScreenSize.iWidth);
sl@0
  1978
		rectMask.iTl.iY = Random(TestScreenSize.iHeight);
sl@0
  1979
		rectMask.iBr.iX = rectMask.iTl.iX+1+Random(TestScreenSize.iWidth);
sl@0
  1980
		rectMask.iBr.iY = rectMask.iTl.iY+1+Random(TestScreenSize.iHeight);
sl@0
  1981
		iBitmap6.iGc->DrawRect(rectMask);
sl@0
  1982
		}
sl@0
  1983
sl@0
  1984
	for(TInt i=0; i<100; i++)
sl@0
  1985
		{
sl@0
  1986
	    //random rect to blit
sl@0
  1987
		rect.iTl.iX = Random(TestScreenSize.iWidth);
sl@0
  1988
		rect.iTl.iY = Random(TestScreenSize.iHeight);
sl@0
  1989
		rect.iBr.iX = rect.iTl.iX+1+Random(TestScreenSize.iWidth);
sl@0
  1990
		rect.iBr.iY = rect.iTl.iY+1+Random(TestScreenSize.iHeight);
sl@0
  1991
sl@0
  1992
		//random point destination
sl@0
  1993
		dest.iX = Random(TestScreenSize.iWidth);
sl@0
  1994
		dest.iY = Random(TestScreenSize.iHeight);
sl@0
  1995
sl@0
  1996
        iBitmap1.iGc->BitBltMasked(dest,iBitmap7.iBitmap,rect,iBitmap6.iBitmap,ETrue);
sl@0
  1997
        iScreenGc->BitBltMasked(dest,iBitmap7.iBitmap,rect,iBitmap6.iBitmap,ETrue);
sl@0
  1998
		iBitmap2.iGc->BitBlt(TPoint(0,0),*iScreenGc,screenRect);
sl@0
  1999
		TEST(iBitmap1.Compare(&iBitmap2));
sl@0
  2000
sl@0
  2001
		rect.Intersection(screenRect);
sl@0
  2002
		if(rect.IsEmpty())
sl@0
  2003
			continue;
sl@0
  2004
sl@0
  2005
		if((rect.iBr.iX>rect.iTl.iX) && (rect.iBr.iY>rect.iTl.iY))
sl@0
  2006
			{
sl@0
  2007
			TGopBitBltMasked gopBitBltMasked(dest,bitmap7Spec,rect,bitmap6Spec);
sl@0
  2008
			gopDes.Append((TUint8*)&gopBitBltMasked,sizeof(gopBitBltMasked));
sl@0
  2009
			TInt error = iGraphicsAccelerator1->Operation(gopBitBltMasked);
sl@0
  2010
			if(error == KErrNotSupported)
sl@0
  2011
				{
sl@0
  2012
				delete gopBuffer;
sl@0
  2013
				WARN_PRINTF1(_L("  Not Supported."));
sl@0
  2014
				return;
sl@0
  2015
				}
sl@0
  2016
			}
sl@0
  2017
		iBitmap3.iGc->DrawRect(iBitmap3.iBitmap->SizeInPixels());
sl@0
  2018
		TEST(iBitmap2.Compare(&iBitmap3));
sl@0
  2019
		}	
sl@0
  2020
	iGraphicsAccelerator2->Operation(gopDes);
sl@0
  2021
	iBitmap4.iGc->DrawRect(iBitmap4.iBitmap->SizeInPixels());
sl@0
  2022
	TEST(iBitmap3.Compare(&iBitmap4));
sl@0
  2023
	delete gopBuffer;
sl@0
  2024
	}
sl@0
  2025
sl@0
  2026
void CTAccelerator::TestScreenBitBltAlphaBitmap()
sl@0
  2027
	{
sl@0
  2028
	TInt gopBufferSize = KNumTestBitBltAlphaBitmap*sizeof(TGopBitBltAlphaBitmap);
sl@0
  2029
	TUint8* gopBuffer = new TUint8[gopBufferSize];
sl@0
  2030
	TPtr8 gopDes = TPtr8(gopBuffer,0,gopBufferSize);
sl@0
  2031
sl@0
  2032
	TRect screenRect(0,0,TestScreenSize.iWidth,TestScreenSize.iHeight);
sl@0
  2033
sl@0
  2034
    TRect rect;
sl@0
  2035
	iFixedRegionPtr = &iFixedRegion;
sl@0
  2036
	
sl@0
  2037
	iBitmap1.iGc->SetClippingRegion(iFixedRegionPtr);
sl@0
  2038
	iScreenGc->SetClippingRegion(iFixedRegionPtr);
sl@0
  2039
sl@0
  2040
	TRgb white;
sl@0
  2041
	iBitmap3.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  2042
	iBitmap3.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  2043
	iBitmap3.iGc->SetBrushColor(white);
sl@0
  2044
	iBitmap3.iGc->SetClippingRegion(iSubRegionPtr);
sl@0
  2045
sl@0
  2046
	iBitmap4.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  2047
	iBitmap4.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  2048
	iBitmap4.iGc->SetBrushColor(white);
sl@0
  2049
	iBitmap4.iGc->SetClippingRegion(iSubRegionPtr);
sl@0
  2050
sl@0
  2051
	TRgb color = TRgb(Random(256),Random(256),Random(256));
sl@0
  2052
sl@0
  2053
	//Source bitmap
sl@0
  2054
	iBitmap7.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  2055
	iBitmap7.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  2056
	iBitmap7.iGc->SetBrushColor(color);
sl@0
  2057
	iBitmap7.iGc->DrawRect(iBitmap7.iBitmap->SizeInPixels());
sl@0
  2058
	iBitmap7.iGc->SetBrushStyle(CGraphicsContext::ENullBrush);
sl@0
  2059
sl@0
  2060
	
sl@0
  2061
	iAlphaBitmap.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  2062
	iAlphaBitmap.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  2063
sl@0
  2064
sl@0
  2065
    //create 10 gray level for the alpha bitmap
sl@0
  2066
    for(TInt i=0; i<10;i++)
sl@0
  2067
		{
sl@0
  2068
		TRect tmpRect(0,10*i,200,10+10*i);
sl@0
  2069
		TInt index = 255-(20*i);
sl@0
  2070
		TRgb tmpRgb;
sl@0
  2071
        iAlphaBitmap.iGc->SetBrushColor(tmpRgb.Gray256(index));
sl@0
  2072
        iAlphaBitmap.iGc->DrawRect(tmpRect);
sl@0
  2073
		}
sl@0
  2074
sl@0
  2075
	TAcceleratedBitmapSpec bitmap7Spec(iBitmap7.iBitmap);
sl@0
  2076
	TAcceleratedBitmapSpec alphaBitmapSpec(iAlphaBitmap.iBitmap);
sl@0
  2077
sl@0
  2078
   	iAlphaBitmap.iGc->SetBrushStyle(CGraphicsContext::ENullBrush);
sl@0
  2079
sl@0
  2080
	for(TInt n=0; n<100; n++)
sl@0
  2081
		{
sl@0
  2082
		rect.iTl.iX = Random(TestBitmapSize.iWidth);
sl@0
  2083
		rect.iTl.iY = Random(TestBitmapSize.iHeight);
sl@0
  2084
		rect.iBr.iX = rect.iTl.iX+1+Random(TestBitmapSize.iWidth);
sl@0
  2085
		rect.iBr.iY = rect.iTl.iY+1+Random(TestBitmapSize.iHeight);
sl@0
  2086
sl@0
  2087
		//Random destination point
sl@0
  2088
		TPoint pointDest(Random(TestScreenSize.iWidth),Random(TestScreenSize.iHeight));
sl@0
  2089
sl@0
  2090
		//alpha blitting with Graphics Contex
sl@0
  2091
		iBitmap1.iGc->BitBltMasked(pointDest,iBitmap7.iBitmap,rect,iAlphaBitmap.iBitmap,ETrue);
sl@0
  2092
		iScreenGc->BitBltMasked(pointDest,iBitmap7.iBitmap,rect,iAlphaBitmap.iBitmap,ETrue);
sl@0
  2093
		iBitmap2.iGc->BitBlt(TPoint(0,0),*iScreenGc,screenRect);
sl@0
  2094
sl@0
  2095
		TEST(iBitmap1.Compare(&iBitmap2));
sl@0
  2096
sl@0
  2097
		rect.Intersection(screenRect);
sl@0
  2098
		//alpha blitting with Graphics accelerator
sl@0
  2099
		TGopBitBltAlphaBitmap gopBitBltAlphaBitmap(pointDest,bitmap7Spec,rect,alphaBitmapSpec);
sl@0
  2100
		gopDes.Append((TUint8*)&gopBitBltAlphaBitmap,sizeof(gopBitBltAlphaBitmap));
sl@0
  2101
		TInt error = iGraphicsAccelerator1->Operation(gopBitBltAlphaBitmap);
sl@0
  2102
		if(error == KErrNotSupported)
sl@0
  2103
			{
sl@0
  2104
			WARN_PRINTF1(_L("  Not Supported."));
sl@0
  2105
			goto done;
sl@0
  2106
			}
sl@0
  2107
		iBitmap3.iGc->DrawRect(iBitmap3.iBitmap->SizeInPixels());
sl@0
  2108
		TEST(iBitmap2.Compare(&iBitmap3));
sl@0
  2109
		}
sl@0
  2110
	iGraphicsAccelerator2->Operation(gopDes);
sl@0
  2111
	iBitmap4.iGc->DrawRect(iBitmap4.iBitmap->SizeInPixels());
sl@0
  2112
	TEST(iBitmap3.Compare(&iBitmap4));
sl@0
  2113
done:
sl@0
  2114
	delete gopBuffer;
sl@0
  2115
	}
sl@0
  2116
	
sl@0
  2117
void CTAccelerator::TestScreenAlphaBlendTwoBitmaps()
sl@0
  2118
	{
sl@0
  2119
	TRect screenRect(0,0,TestBitmapSize.iWidth,TestBitmapSize.iHeight);
sl@0
  2120
sl@0
  2121
	TRect rect;
sl@0
  2122
	iFixedRegionPtr = &iFixedRegion;
sl@0
  2123
	
sl@0
  2124
	iBitmap1.iGc->SetClippingRegion(iFixedRegionPtr);
sl@0
  2125
	iBitmap2.iGc->SetClippingRegion(iFixedRegionPtr);
sl@0
  2126
sl@0
  2127
	TRgb color = TRgb(Random(256),Random(256),Random(256));
sl@0
  2128
sl@0
  2129
	// First Source bitmap
sl@0
  2130
	iBitmap7.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  2131
	iBitmap7.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  2132
	iBitmap7.iGc->SetBrushColor(color);
sl@0
  2133
	iBitmap7.iGc->DrawRect(screenRect);
sl@0
  2134
	iBitmap7.iGc->SetBrushStyle(CGraphicsContext::ENullBrush);
sl@0
  2135
	
sl@0
  2136
	// Get a new random color
sl@0
  2137
	color = TRgb(Random(256),Random(256),Random(256));
sl@0
  2138
	
sl@0
  2139
	// Second Source bitmap
sl@0
  2140
	iBitmap8.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  2141
	iBitmap8.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  2142
	iBitmap8.iGc->SetBrushColor(color);
sl@0
  2143
	iBitmap8.iGc->DrawRect(screenRect);
sl@0
  2144
	iBitmap8.iGc->SetBrushStyle(CGraphicsContext::ENullBrush);
sl@0
  2145
sl@0
  2146
	iAlphaBitmap.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  2147
	iAlphaBitmap.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  2148
sl@0
  2149
	//create 10 gray level for the alpha bitmap
sl@0
  2150
	for(TInt i=0; i<10;i++)
sl@0
  2151
		{
sl@0
  2152
		TRect tmpRect(0,10*i,200,10+10*i);
sl@0
  2153
		TInt index = 255-(20*i);
sl@0
  2154
		TRgb tmpRgb;
sl@0
  2155
		iAlphaBitmap.iGc->SetBrushColor(tmpRgb.Gray256(index));
sl@0
  2156
		iAlphaBitmap.iGc->DrawRect(tmpRect);
sl@0
  2157
		}
sl@0
  2158
    
sl@0
  2159
	TAcceleratedBitmapSpec bitmap7Spec(iBitmap7.iBitmap);
sl@0
  2160
	TAcceleratedBitmapSpec bitmap8Spec(iBitmap8.iBitmap);
sl@0
  2161
	TAcceleratedBitmapSpec alphaBitmapSpec(iAlphaBitmap.iBitmap);
sl@0
  2162
sl@0
  2163
	iAlphaBitmap.iGc->SetBrushStyle(CGraphicsContext::ENullBrush);
sl@0
  2164
sl@0
  2165
	for(TInt n=0; n<100; n++)
sl@0
  2166
		{
sl@0
  2167
		rect.iTl.iX = Random(TestBitmapSize.iWidth - 1); 
sl@0
  2168
		rect.iTl.iY = Random(TestBitmapSize.iHeight - 1);
sl@0
  2169
		rect.iBr.iX = rect.iTl.iX+1+Random(TestBitmapSize.iWidth - rect.iTl.iX);
sl@0
  2170
		rect.iBr.iY = rect.iTl.iY+1+Random(TestBitmapSize.iHeight - rect.iTl.iY);
sl@0
  2171
sl@0
  2172
		TPoint pointDest(Random(TestBitmapSize.iWidth),Random(TestBitmapSize.iHeight));
sl@0
  2173
		TPoint pointSource(Random(TestBitmapSize.iWidth),Random(TestBitmapSize.iHeight));
sl@0
  2174
		TPoint pointAlpha(Random(TestBitmapSize.iWidth - rect.Width()),Random(TestBitmapSize.iHeight - rect.Height()));
sl@0
  2175
sl@0
  2176
		//alpha blending Graphics Context - wrong argument cause skip to next test
sl@0
  2177
		TInt error = iBitmap1.iGc->AlphaBlendBitmaps(pointDest,iBitmap7.iBitmap,iBitmap8.iBitmap,rect,pointSource,iAlphaBitmap.iBitmap,pointAlpha);
sl@0
  2178
		// AlphaBlendBitmaps can return KErrArgument based on the input data - in that case, continue
sl@0
  2179
		if(error!=KErrNone)
sl@0
  2180
			{
sl@0
  2181
			continue;
sl@0
  2182
			}
sl@0
  2183
		iScreenGc->AlphaBlendBitmaps(pointDest,iBitmap7.iBitmap,iBitmap8.iBitmap,rect,pointSource,iAlphaBitmap.iBitmap,pointAlpha);
sl@0
  2184
		iBitmap2.iGc->BitBlt(TPoint(0,0),*iScreenGc,screenRect);
sl@0
  2185
		TEST(iBitmap1.Compare(&iBitmap2));
sl@0
  2186
		}
sl@0
  2187
	}
sl@0
  2188
sl@0
  2189
void CTAccelerator::TestScreenAlphaBlendOneBitmap()
sl@0
  2190
	{
sl@0
  2191
	TRect screenRect(0,0,TestBitmapSize.iWidth,TestBitmapSize.iHeight);
sl@0
  2192
sl@0
  2193
	TRect rect;
sl@0
  2194
	iFixedRegionPtr = &iFixedRegion;
sl@0
  2195
	
sl@0
  2196
	iBitmap1.iGc->SetClippingRegion(iFixedRegionPtr);
sl@0
  2197
	iBitmap2.iGc->SetClippingRegion(iFixedRegionPtr);
sl@0
  2198
sl@0
  2199
	TRgb color = TRgb(Random(256),Random(256),Random(256));
sl@0
  2200
sl@0
  2201
	// First Source bitmap
sl@0
  2202
	iBitmap7.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  2203
	iBitmap7.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  2204
	iBitmap7.iGc->SetBrushColor(color);
sl@0
  2205
	iBitmap7.iGc->DrawRect(screenRect);
sl@0
  2206
	iBitmap7.iGc->SetBrushStyle(CGraphicsContext::ENullBrush);
sl@0
  2207
	
sl@0
  2208
	// Get a new random color
sl@0
  2209
	color = TRgb(Random(256),Random(256),Random(256));
sl@0
  2210
sl@0
  2211
	iAlphaBitmap.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  2212
	iAlphaBitmap.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  2213
sl@0
  2214
	//create 10 gray level for the alpha bitmap
sl@0
  2215
	for(TInt i=0; i<10;i++)
sl@0
  2216
		{
sl@0
  2217
		TRect tmpRect(0,10*i,200,10+10*i);
sl@0
  2218
		TInt index = 255-(20*i);
sl@0
  2219
		TRgb tmpRgb;
sl@0
  2220
		iAlphaBitmap.iGc->SetBrushColor(tmpRgb.Gray256(index));
sl@0
  2221
		iAlphaBitmap.iGc->DrawRect(tmpRect);
sl@0
  2222
		}
sl@0
  2223
    
sl@0
  2224
	TAcceleratedBitmapSpec bitmap7Spec(iBitmap7.iBitmap);
sl@0
  2225
	TAcceleratedBitmapSpec alphaBitmapSpec(iAlphaBitmap.iBitmap);
sl@0
  2226
sl@0
  2227
	iAlphaBitmap.iGc->SetBrushStyle(CGraphicsContext::ENullBrush);
sl@0
  2228
sl@0
  2229
	for(TInt n=0; n<100; n++)
sl@0
  2230
		{
sl@0
  2231
		if(n==0) continue;
sl@0
  2232
		rect.iTl.iX = Random(TestBitmapSize.iWidth - 1); 
sl@0
  2233
		rect.iTl.iY = Random(TestBitmapSize.iHeight - 1);
sl@0
  2234
		rect.iBr.iX = rect.iTl.iX+1+Random(TestBitmapSize.iWidth - rect.iTl.iX);
sl@0
  2235
		rect.iBr.iY = rect.iTl.iY+1+Random(TestBitmapSize.iHeight - rect.iTl.iY);
sl@0
  2236
sl@0
  2237
		TPoint pointDest(Random(TestBitmapSize.iWidth),Random(TestBitmapSize.iHeight));
sl@0
  2238
		TPoint pointAlpha(Random(TestBitmapSize.iWidth - rect.Width() - 1),Random(TestBitmapSize.iHeight - rect.Height() - 1));
sl@0
  2239
sl@0
  2240
		//alpha blending Graphics Context - wrong argument cause skip to next test
sl@0
  2241
		TInt rc = iBitmap1.iGc->AlphaBlendBitmaps(pointDest,iBitmap7.iBitmap,rect,iAlphaBitmap.iBitmap,pointAlpha);
sl@0
  2242
		if(rc!=KErrNone)
sl@0
  2243
			{
sl@0
  2244
			continue;
sl@0
  2245
			}
sl@0
  2246
		iScreenGc->AlphaBlendBitmaps(pointDest,iBitmap7.iBitmap,rect,iAlphaBitmap.iBitmap,pointAlpha);
sl@0
  2247
		iBitmap2.iGc->BitBlt(TPoint(0,0),*iScreenGc,screenRect);
sl@0
  2248
		TEST(iBitmap1.Compare(&iBitmap2));
sl@0
  2249
		}
sl@0
  2250
	}
sl@0
  2251
sl@0
  2252
void CTAccelerator::resetColorBitmaps()
sl@0
  2253
	{
sl@0
  2254
	TRgb color;
sl@0
  2255
	iFixedRegionPtr = &iDefaultRegion;
sl@0
  2256
sl@0
  2257
	if(iHwScreenDevice)
sl@0
  2258
		{
sl@0
  2259
		iFixedRegionPtr = &iDefaultScreenRegion;
sl@0
  2260
		iScreenGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  2261
		iScreenGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  2262
		iScreenGc->SetDrawMode(CGraphicsContext::EDrawModePEN);
sl@0
  2263
		iScreenGc->SetClippingRegion(iFixedRegionPtr);
sl@0
  2264
		iScreenGc->SetBrushColor(color);
sl@0
  2265
		iScreenGc->DrawRect(TestScreenSize);
sl@0
  2266
		iScreenGc->SetBrushStyle(CGraphicsContext::ENullBrush);
sl@0
  2267
		}
sl@0
  2268
sl@0
  2269
	iBitmap1.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  2270
	iBitmap1.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  2271
    iBitmap1.iGc->SetDrawMode(CGraphicsContext::EDrawModePEN);
sl@0
  2272
	iBitmap1.iGc->SetClippingRegion(iFixedRegionPtr);
sl@0
  2273
	iBitmap1.iGc->SetBrushColor(color);
sl@0
  2274
	TRect rect1(iBitmap1.iBitmap->SizeInPixels());
sl@0
  2275
	iBitmap1.iGc->DrawRect(rect1);
sl@0
  2276
	iBitmap1.iGc->SetBrushStyle(CGraphicsContext::ENullBrush);
sl@0
  2277
sl@0
  2278
	iBitmap2.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  2279
	iBitmap2.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  2280
	iBitmap2.iGc->SetDrawMode(CGraphicsContext::EDrawModePEN);
sl@0
  2281
	iBitmap2.iGc->SetClippingRegion(iFixedRegionPtr);
sl@0
  2282
	iBitmap2.iGc->SetBrushColor(color);
sl@0
  2283
	TRect rect2(iBitmap2.iBitmap->SizeInPixels());
sl@0
  2284
	iBitmap2.iGc->DrawRect(rect2);
sl@0
  2285
	iBitmap2.iGc->SetBrushStyle(CGraphicsContext::ENullBrush);
sl@0
  2286
sl@0
  2287
	//GA1
sl@0
  2288
	iBitmap3.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  2289
	iBitmap3.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  2290
    iBitmap3.iGc->SetDrawMode(CGraphicsContext::EDrawModePEN);
sl@0
  2291
	iBitmap3.iGc->SetClippingRegion(iFixedRegionPtr);
sl@0
  2292
	iBitmap3.iGc->SetBrushColor(color);
sl@0
  2293
	TRect rect3(iBitmap3.iBitmap->SizeInPixels());
sl@0
  2294
	iBitmap3.iGc->DrawRect(rect3);
sl@0
  2295
	iBitmap3.iGc->SetBrushStyle(CGraphicsContext::ENullBrush);
sl@0
  2296
sl@0
  2297
	//GA2
sl@0
  2298
	iBitmap4.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  2299
	iBitmap4.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  2300
    iBitmap4.iGc->SetDrawMode(CGraphicsContext::EDrawModePEN);
sl@0
  2301
	iBitmap4.iGc->SetClippingRegion(iFixedRegionPtr);
sl@0
  2302
	iBitmap4.iGc->SetBrushColor(color);
sl@0
  2303
	TRect rect4(iBitmap4.iBitmap->SizeInPixels());
sl@0
  2304
	iBitmap4.iGc->DrawRect(rect4);
sl@0
  2305
	iBitmap4.iGc->SetBrushStyle(CGraphicsContext::ENullBrush);
sl@0
  2306
sl@0
  2307
	iBitmap5.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  2308
	iBitmap5.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  2309
    iBitmap5.iGc->SetDrawMode(CGraphicsContext::EDrawModePEN);
sl@0
  2310
	iBitmap5.iGc->SetBrushColor(color);
sl@0
  2311
	TRect rect5(iBitmap5.iBitmap->SizeInPixels());
sl@0
  2312
	iBitmap5.iGc->DrawRect(rect5);
sl@0
  2313
	iBitmap5.iGc->SetBrushStyle(CGraphicsContext::ENullBrush);
sl@0
  2314
sl@0
  2315
	iBitmap6.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  2316
	iBitmap6.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  2317
    iBitmap6.iGc->SetDrawMode(CGraphicsContext::EDrawModePEN);
sl@0
  2318
	iBitmap6.iGc->SetBrushColor(color);
sl@0
  2319
	TRect rect6(iBitmap6.iBitmap->SizeInPixels());
sl@0
  2320
	iBitmap6.iGc->DrawRect(rect6);
sl@0
  2321
	iBitmap6.iGc->SetBrushStyle(CGraphicsContext::ENullBrush);
sl@0
  2322
sl@0
  2323
	iBitmap7.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  2324
	iBitmap7.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  2325
    iBitmap7.iGc->SetDrawMode(CGraphicsContext::EDrawModePEN);
sl@0
  2326
	iBitmap7.iGc->SetBrushColor(color);
sl@0
  2327
	TRect rect7(iBitmap7.iBitmap->SizeInPixels());
sl@0
  2328
	iBitmap7.iGc->DrawRect(rect7);
sl@0
  2329
	iBitmap7.iGc->SetBrushStyle(CGraphicsContext::ENullBrush);
sl@0
  2330
	
sl@0
  2331
	iBitmap8.iGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
  2332
	iBitmap8.iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
  2333
	iBitmap8.iGc->SetDrawMode(CGraphicsContext::EDrawModePEN);
sl@0
  2334
	iBitmap8.iGc->SetBrushColor(color);
sl@0
  2335
	TRect rect8(iBitmap8.iBitmap->SizeInPixels());
sl@0
  2336
	iBitmap8.iGc->DrawRect(rect8);
sl@0
  2337
	iBitmap8.iGc->SetBrushStyle(CGraphicsContext::ENullBrush);
sl@0
  2338
	}
sl@0
  2339
sl@0
  2340
void CTAccelerator::TestScreenRotation()
sl@0
  2341
	{
sl@0
  2342
	// Checks that clearing a rotated screen doesn't blow-up
sl@0
  2343
	iScreenGc->SetOrientation(CFbsBitGc::EGraphicsOrientationRotated90);
sl@0
  2344
sl@0
  2345
	iScreenGc->Reset();
sl@0
  2346
	// fill screen using graphics accelerator
sl@0
  2347
	iScreenGc->SetBrushStyle(CFbsBitGc::ESolidBrush);
sl@0
  2348
	iScreenGc->SetPenStyle(CFbsBitGc::ENullPen);
sl@0
  2349
	iScreenGc->DrawRect(TRect(0,0,KMaxTInt/2,KMaxTInt/2));
sl@0
  2350
sl@0
  2351
	// restore orientation
sl@0
  2352
	iScreenGc->SetOrientation(CFbsBitGc::EGraphicsOrientationNormal);
sl@0
  2353
	iScreenGc->Reset();
sl@0
  2354
	}
sl@0
  2355
sl@0
  2356
void CTAccelerator::TestUserDisplayMode()
sl@0
  2357
	{
sl@0
  2358
	iScreenGc->Reset();
sl@0
  2359
	// Change to Gray4 mode
sl@0
  2360
	iScreenGc->SetUserDisplayMode(EGray4);
sl@0
  2361
	// fill screen using graphics accelerator
sl@0
  2362
	iScreenGc->SetBrushStyle(CFbsBitGc::ESolidBrush);
sl@0
  2363
	iScreenGc->SetBrushColor(TRgb(0x44,0x44,0x44)); // should get 'rounded up' to 0x55,0x55,0x55 when drawn
sl@0
  2364
	iScreenGc->SetPenStyle(CFbsBitGc::ENullPen);
sl@0
  2365
	iScreenGc->DrawRect(TRect(0,0,KMaxTInt/2,KMaxTInt/2));
sl@0
  2366
sl@0
  2367
	TRgb pixel;
sl@0
  2368
	iHwScreenDevice->GetPixel(pixel,TPoint(0,0));
sl@0
  2369
	TRgb checkValue(0x555555,0xff);
sl@0
  2370
	if (iHwScreenDevice->DisplayMode()==EColor64K)
sl@0
  2371
		checkValue=TRgb::Color64K(checkValue.Color64K());
sl@0
  2372
	TEST(pixel==checkValue);  // check pixel color is that of a Gray4 one
sl@0
  2373
sl@0
  2374
	// Restore user display mode
sl@0
  2375
	iScreenGc->Reset();
sl@0
  2376
	}
sl@0
  2377
sl@0
  2378
static void CheckDisplayMode()
sl@0
  2379
	{
sl@0
  2380
	TInt i;
sl@0
  2381
	for(i=0; i<KNumDisplayModes; ++i)
sl@0
  2382
		{
sl@0
  2383
		TDisplayMode mode = TestDisplayModes[i].iMode;
sl@0
  2384
		CFbsScreenDevice* device = NULL;
sl@0
  2385
		TInt err = KErrNone;
sl@0
  2386
		TRAP(err, device = CFbsScreenDevice::NewL(_L("scdv"), mode));
sl@0
  2387
		if (err == KErrNone)
sl@0
  2388
			{
sl@0
  2389
			TestDisplayModes[i].iEnabled = ETrue;
sl@0
  2390
			delete device;
sl@0
  2391
			}
sl@0
  2392
		}
sl@0
  2393
	}
sl@0
  2394
	
sl@0
  2395
//--------------
sl@0
  2396
__CONSTRUCT_STEP__(Accelerator)
sl@0
  2397
sl@0
  2398
void CTAcceleratorStep::TestSetupL()
sl@0
  2399
	{
sl@0
  2400
	FbsStartup();
sl@0
  2401
	User::LeaveIfError(RFbsSession::Connect());
sl@0
  2402
	
sl@0
  2403
	CheckDisplayMode();
sl@0
  2404
	}
sl@0
  2405
	
sl@0
  2406
void CTAcceleratorStep::TestClose()
sl@0
  2407
	{
sl@0
  2408
	RFbsSession::Disconnect();
sl@0
  2409
	}
sl@0
  2410
sl@0
  2411
sl@0
  2412
sl@0
  2413
sl@0
  2414