author | Gareth Stockwell <gareth.stockwell@accenture.com> |
Fri, 22 Oct 2010 11:38:29 +0100 | |
branch | bug235_bringup_0 |
changeset 206 | c170e304623f |
parent 0 | 5d03bc08d59c |
permissions | -rw-r--r-- |
// Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies). // All rights reserved. // This component and the accompanying materials are made available // under the terms of "Eclipse Public License v1.0" // which accompanies this distribution, and is available // at the URL "http://www.eclipse.org/legal/epl-v10.html". // // Initial Contributors: // Nokia Corporation - initial contribution. // // Contributors: // // Description: // used for timing graphics // // #include "TTIME.H" #define TEST_BITMAP_NAME _L("Z:\\WSTEST\\TEST.MBM") GLREF_C void Panic(TInt aPanic); enum TFuncType { EBitmapTest, EXorTest, ESmallClearTest, ERectCompareTest, EUseFontTest, EBitBltTest, EFullScreenBitBltTest, EMaskedBitBltTest, EFillPatternTest, EBackupWindowDrawingTest, }; class TGraphicsTest : public CBase { public: void DoTestL(TInt aOwningGroup, TFuncType aFunc, TInt aParam1, TAny *aParam2); void DrawBitmapTestL(TInt aParam1, TAny *aParam2); void XorTest(TInt aParam1, TAny *aParam2); void SmallClearTest(TInt , TAny *); void RectCompareTest(TInt , TAny *); void UseFontTestL(TInt , TAny *); void BitBltTestL(TInt , TAny *); void FullScreenBitBltTestL(TInt , TAny *); void MaskedBitBltTestL(TInt , TAny *); void FillPatternTestL(TInt , TAny *); void BackedUpWindowDrawingL(TInt aMode, TAny *); private: RWsSession iWs; CWsScreenDevice *iDevice; RWindowGroup iGroup; RWindow iWindow; RBackedUpWindow iBackedUpWindow; RDrawableWindow *iWindowPtr; CWindowGc *iGc; }; TInt CreateGraphicsTest(TInt aOwningGroup, TFuncType aFunc, TInt aParam1, TAny *aParam2) { TGraphicsTest *iTest=NULL; TRAPD(err,iTest=new(ELeave) TGraphicsTest()); if (err==KErrNone) { TRAP(err,iTest->DoTestL(aOwningGroup, aFunc, aParam1, aParam2)); delete iTest; } return(err); } void TGraphicsTest::DoTestL(TInt aOwningGroup, TFuncType aFunc, TInt aParam1, TAny *aParam2) { iWs.Connect(); iDevice=new(ELeave) CWsScreenDevice(iWs); iDevice->Construct(); iGroup=RWindowGroup(iWs); iGroup.Construct(ENullWsHandle); iGroup.SetOwningWindowGroup(aOwningGroup); // if (aFunc==EBackupWindowDrawingTest) { iBackedUpWindow=RBackedUpWindow(iWs); iWindowPtr=&iBackedUpWindow; iBackedUpWindow.Construct(iGroup,EGray4,ENullWsHandle); } else { iWindow=RWindow(iWs); iWindowPtr=&iWindow; iWindow.Construct(iGroup,ENullWsHandle); } User::LeaveIfError(iWindowPtr->SetExtentErr(TPoint(), iDevice->SizeInPixels())); iWindowPtr->Activate(); // iDevice->CreateContext(iGc); iGc->Activate(*iWindowPtr); if (iWindowPtr==&iWindow) { iWindow.BeginRedraw(); iGc->Clear(); iWindow.EndRedraw(); } switch(aFunc) { case EBitmapTest: DrawBitmapTestL(aParam1, aParam2); break; case EXorTest: XorTest(aParam1, aParam2); break; case ESmallClearTest: SmallClearTest(aParam1, aParam2); break; case ERectCompareTest: RectCompareTest(aParam1, aParam2); break; case EUseFontTest: UseFontTestL(aParam1, aParam2); break; case EBitBltTest: BitBltTestL(aParam1, aParam2); break; case EFullScreenBitBltTest: FullScreenBitBltTestL(aParam1, aParam2); break; case EMaskedBitBltTest: MaskedBitBltTestL(aParam1, aParam2); break; case EFillPatternTest: FillPatternTestL(aParam1, aParam2); break; case EBackupWindowDrawingTest: BackedUpWindowDrawingL(aParam1, aParam2); break; default:; } // delete iGc; iWindowPtr->Close(); iGroup.Close(); delete iDevice; iWs.Close(); } // Draw bitmap // void TGraphicsTest::DrawBitmapTestL(TInt , TAny *) { CFbsBitmap *bitmap=new(ELeave) CFbsBitmap; User::LeaveIfError(bitmap->Load(TEST_BITMAP_NAME,0)); for(TInt nTimes=0;nTimes<10;nTimes++) { iGc->Clear(); TSize size(iDevice->SizeInPixels()); iGc->DrawBitmap(TRect(-size.iWidth,-size.iHeight,size.iWidth<<1,size.iHeight<<1),bitmap); iWs.Flush(); } delete bitmap; } TInt DrawBitmapTestFunc(TInt aOwningGroup) { return(CreateGraphicsTest(aOwningGroup, EBitmapTest, 0, NULL)); } GLDEF_D TTimeTestHeader DrawBitmapTest={_S("Draw bitmap"),DrawBitmapTestFunc}; // XOR Test // void TGraphicsTest::XorTest(TInt , TAny *) { iGc->SetDrawMode(CGraphicsContext::EDrawModeXOR); iGc->SetBrushColor(TRgb::Gray256(255)); iGc->SetPenStyle(CGraphicsContext::ENullPen); iGc->SetBrushStyle(CGraphicsContext::ESolidBrush); for(TInt count=0;count<10;count++) { for(TInt wid=1;wid<320;wid+=3) { iGc->DrawRect(TRect(10,10,10+wid,150)); // iWs.Flush(); } } } TInt XorIngTestFunc(TInt aOwningGroup) { return(CreateGraphicsTest(aOwningGroup, EXorTest, 0, NULL)); } GLDEF_D TTimeTestHeader XorIngTest={_S("Xor'ing"),XorIngTestFunc}; // XOR Test // void TGraphicsTest::SmallClearTest(TInt , TAny *) { iGc->SetBrushColor(TRgb::Gray256(255)); iGc->SetPenStyle(CGraphicsContext::ENullPen); iGc->SetBrushStyle(CGraphicsContext::ESolidBrush); for(TInt count=0;count<500;count++) { for(TInt wid=1;wid<30;wid++) { iGc->DrawRect(TRect(1,0,10+wid,100)); // iWs.Flush(); } } } TInt SmallClearTestFunc(TInt aOwningGroup) { return(CreateGraphicsTest(aOwningGroup, ESmallClearTest, 0, NULL)); } GLDEF_D TTimeTestHeader SmallClearTest={_S("Small clear rect"),SmallClearTestFunc}; // XOR Test // enum {EMaxWidth=100}; void TGraphicsTest::RectCompareTest(TInt , TAny *) { TSize size(iDevice->SizeInPixels()); for(TInt count=0;count<10;count++) iDevice->RectCompare(TRect(0,0,size.iWidth>>1,size.iHeight),TRect(size.iWidth>>1,0,size.iWidth,size.iHeight)); } TInt RectCompareTestFunc(TInt aOwningGroup) { return(CreateGraphicsTest(aOwningGroup, ERectCompareTest, 0, NULL)); } GLDEF_D TTimeTestHeader RectCompareTest={_S("RectCompare"),RectCompareTestFunc}; // Use Font // void TGraphicsTest::UseFontTestL(TInt , TAny *) { CFbsFont *font; TFontSpec fspec(KTestFontTypefaceName,200); User::LeaveIfError(iDevice->GetNearestFontToDesignHeightInTwips((CFont *&)font, fspec)); for(TInt count=0;count<1000;count++) iGc->UseFont(font); iDevice->ReleaseFont(font); } TInt UseFontTestFunc(TInt aOwningGroup) { return(CreateGraphicsTest(aOwningGroup, EUseFontTest, 0, NULL)); } GLDEF_D TTimeTestHeader UseFontTest={_S("UseFont(x1000)"),UseFontTestFunc}; // Small BitBlt // void TGraphicsTest::BitBltTestL(TInt , TAny *) { CWsBitmap *bitmap=new(ELeave) CWsBitmap(iWs); TSize size(25,50); bitmap->Create(size,EGray4); CFbsDevice *bitmapDevice=CFbsBitmapDevice::NewL(bitmap); CFbsBitGc *gc=CFbsBitGc::NewL(); gc->Activate(bitmapDevice); gc->DrawEllipse(TRect(size)); delete gc; delete bitmapDevice; for(TInt count=0;count<10;count++) { iGc->Clear(); TPoint pos(0,0); for(TInt xcount=0;xcount<25;xcount++,pos.iX+=size.iWidth) { pos.iY=0; for(TInt ycount=0;ycount<4;ycount++,pos.iY+=size.iHeight) iGc->BitBlt(pos,bitmap); } } delete bitmap; } TInt BitBltTestFunc(TInt aOwningGroup) { return(CreateGraphicsTest(aOwningGroup, EBitBltTest, 0, NULL)); } GLDEF_D TTimeTestHeader BitBltTest={_S("BitBlt"),BitBltTestFunc}; // Full Screen BitBlt // void TGraphicsTest::FullScreenBitBltTestL(TInt , TAny *) { CWsBitmap *bitmap=new(ELeave) CWsBitmap(iWs); TSize size(640,240); User::LeaveIfError(bitmap->Create(size,EGray4)); CFbsDevice *bitmapDevice=CFbsBitmapDevice::NewL(bitmap); CFbsBitGc *gc=CFbsBitGc::NewL(); gc->Activate(bitmapDevice); for(TInt pos=0;pos<size.iWidth;pos+=8) { gc->DrawRect(TRect(pos,0,pos+16,size.iHeight)); iGc->BitBlt(TPoint(0,0),bitmap); iWs.Flush(); } delete gc; delete bitmapDevice; delete bitmap; } TInt FullScreenBitBltTestFunc(TInt aOwningGroup) { return(CreateGraphicsTest(aOwningGroup, EFullScreenBitBltTest, 0, NULL)); } GLDEF_D TTimeTestHeader FullScreenBitBltTest={_S("FullScreenBitBlt"),FullScreenBitBltTestFunc}; // Masked BitBlt // void TGraphicsTest::MaskedBitBltTestL(TInt , TAny *) { TSize size(24,48); CWsBitmap *bitmap=new(ELeave) CWsBitmap(iWs); bitmap->Create(size,EGray4); CFbsDevice *bitmapDevice=CFbsBitmapDevice::NewL(bitmap); CFbsBitGc *gc=CFbsBitGc::NewL(); gc->Activate(bitmapDevice); gc->DrawEllipse(TRect(size)); delete bitmapDevice; // Now do the mask CWsBitmap *mask=new(ELeave) CWsBitmap(iWs); mask->Create(size,EGray4); bitmapDevice=CFbsBitmapDevice::NewL(mask); gc->Activate(bitmapDevice); gc->SetPenColor(TRgb::Gray4(3)); gc->DrawEllipse(TRect(size)); delete bitmapDevice; // delete gc; for(TInt count=0;count<10;count++) { iGc->Clear(); TPoint pos(0,0); for(TInt xcount=0;xcount<25;xcount++,pos.iX+=size.iWidth+1) { pos.iY=0; for(TInt ycount=0;ycount<4;ycount++,pos.iY+=size.iHeight) iGc->BitBltMasked(pos,bitmap,TRect(size),mask,EFalse); } } delete bitmap; delete mask; } TInt MaskedBitBltTestFunc(TInt aOwningGroup) { return(CreateGraphicsTest(aOwningGroup, EMaskedBitBltTest, 0, NULL)); } GLDEF_D TTimeTestHeader MaskedBitBltTest={_S("MaskedBitBlt"),MaskedBitBltTestFunc}; // Fill Pattern // void TGraphicsTest::FillPatternTestL(TInt , TAny *) { TSize scrSize(iDevice->SizeInPixels()); TSize rectSize(scrSize.iWidth/5-1,scrSize.iHeight/2); CWsBitmap *bitmap=new(ELeave) CWsBitmap(iWs); TSize bitmapSize(50,40); bitmap->Create(bitmapSize,EGray4); CFbsDevice *bitmapDevice=CFbsBitmapDevice::NewL(bitmap); CFbsBitGc *gc=CFbsBitGc::NewL(); gc->Activate(bitmapDevice); gc->SetBrushColor(TRgb::Gray4(2)); gc->SetBrushStyle(CGraphicsContext::ESolidBrush); gc->DrawEllipse(TRect(bitmapSize)); delete bitmapDevice; delete gc; // iGc->UseBrushPattern(bitmap); iGc->SetBrushStyle(CGraphicsContext::EPatternedBrush); iGc->SetPenStyle(CGraphicsContext::ESolidPen); for(TInt count=0;count<50;count++) { iGc->Clear(); TPoint pos(0,0); for(TInt xcount=0;xcount<5;xcount++,pos.iX+=rectSize.iWidth) { pos.iY=0; for(TInt ycount=0;ycount<2;ycount++,pos.iY+=rectSize.iHeight) iGc->DrawRect(TRect(pos,rectSize)); } } delete bitmap; } TInt FillPatternTestFunc(TInt aOwningGroup) { return(CreateGraphicsTest(aOwningGroup, EFillPatternTest, 0, NULL)); } GLDEF_D TTimeTestHeader FillPatternTest={_S("FillPattern"),FillPatternTestFunc}; // Backup Window Drawing // void TGraphicsTest::BackedUpWindowDrawingL(TInt aMode, TAny *) { TSize scrSize(iDevice->SizeInPixels()); CFbsFont *font=NULL; if (aMode==1) { TFontSpec fspec(KTestFontTypefaceName,200); User::LeaveIfError(iDevice->GetNearestFontToDesignHeightInTwips((CFont *&)font, fspec)); iGc->UseFont(font); } iGc->SetPenStyle(CGraphicsContext::ESolidPen); TPoint pos; for(TInt count=0;count<10;count++) { iGc->Clear(); for(pos.iY=0;pos.iY<scrSize.iHeight;pos.iY++) iGc->DrawLine(pos,pos+TSize(scrSize.iWidth,0)); } if (aMode==1) iDevice->ReleaseFont(font); } TInt BackupWindowDrawingFunc1(TInt aOwningGroup) { return(CreateGraphicsTest(aOwningGroup, EBackupWindowDrawingTest, 0, NULL)); } GLDEF_D TTimeTestHeader BackupWindowDrawingCreate1={_S("BackupWindowDrawing 1"),BackupWindowDrawingFunc1}; TInt BackupWindowDrawingFunc2(TInt aOwningGroup) { return(CreateGraphicsTest(aOwningGroup, EBackupWindowDrawingTest, 1, NULL)); } GLDEF_D TTimeTestHeader BackupWindowDrawingCreate2={_S("BackupWindowDrawing 2"),BackupWindowDrawingFunc2};