diff -r 000000000000 -r 5d03bc08d59c graphicsdeviceinterface/bitgdi/tbit/TCLIP.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graphicsdeviceinterface/bitgdi/tbit/TCLIP.CPP Tue Feb 02 01:47:50 2010 +0200 @@ -0,0 +1,1046 @@ +// Copyright (c) 1997-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: +// + +#include +#include +#include "TBMP.H" +#include "TClip.h" +#include + +//Note: Some display modes will be scaled - see +//CreateTestEnvironment(), SetScalingFactor() call + +//aTestAppNo is a new argument and it is not used yet. +//It can have 0 or 1 value depending on which test app +//uses TestClip functionality - TClip or TClip2. +CTClip::CTClip(CTestStep* aStep, + TInt aTestAppNo, + CFbsScreenDevice* aDev, + CFbsBitGc* aCon, + CFbsBitmap* aBmp, + CFbsFont* aFont, + CFbsFont* aLargeFont): + CTGraphicsBase(aStep), + iTestAppNo(aTestAppNo), + iDev(aDev), + iCon(aCon), + iClientRect(TRect(0,0,0,0)), + iGopNum(EFirstGop), + iClipList(NULL), + iBitmap(aBmp), + iBitmap64K(NULL), + iBitmap16MU(NULL), + iBitmap16MA(NULL), + iBitmapMask(NULL), + iBitmapAlpha(NULL), + iFont(aFont), + iLargeFont(aLargeFont), + iBmpSize(TSize(0,0)) + {} + +void CTClip::ConstructL() + { + iClipList=(TRect*)User::Alloc(sizeof(TRect)*ERegions); + if(!iClipList) + User::Panic(_L("Construct failure"),KErrGeneral); + iBmpSize=iBitmap->SizeInPixels(); + iBitmap64K=new(ELeave) CFbsBitmap(); + iBitmap16MU=new(ELeave) CFbsBitmap(); + iBitmap16MA=new(ELeave) CFbsBitmap(); + iBitmapMask=new(ELeave) CFbsBitmap(); + iBitmapAlpha=new(ELeave) CFbsBitmap(); + } + +TBool CTClip::SetUpTest(TInt &aTestModeIndex) + { + CFbsBitGc::TGraphicsOrientation orientation; + do + { + orientation=(CFbsBitGc::TGraphicsOrientation)(aTestModeIndex/2); + if (orientation>CFbsBitGc::EGraphicsOrientationRotated270) + return(EFalse); + aTestModeIndex++; + TPoint scalingOrigin(0,0); + TInt scale=1; + if ((aTestModeIndex&0x1)==CFbsBitGc::EGraphicsOrientationNormal) + { + scalingOrigin=TPoint(20, 10); + scale=2; + } + iDev->SetScalingFactor(scalingOrigin, scale, scale, 1, 1); + } while(!iCon->SetOrientation(orientation)); + iDev->GetDrawRect(iClientRect); + TInt dims[2*ERegions]={0,0, 1,1, 1,2, 2,1, 2,2, 1,10, 10,1, 2,10, 10,2, 10,10}; + for(TUint count=0;countSetAutoUpdate(ETrue); + iCon->SetPenStyle(CGraphicsContext::ESolidPen); + iCon->SetPenColor(KRgbBlack); + iCon->SetBrushStyle(CGraphicsContext::ESolidBrush); + iCon->SetBrushColor(TRgb(170,170,170)); + Clear(); + iCon->UseBrushPattern(iBitmap); + + TSize halfScreen(iClientRect.Width()/2-2, iClientRect.Height()-2); + User::LeaveIfError(iBitmap64K->Load(_L("z:\\system\\data\\16ram.mbm"),0,EFalse)); + User::LeaveIfError(iBitmap64K->Resize(halfScreen)); + User::LeaveIfError(iBitmap16MU->Load(_L("z:\\system\\data\\32ram.mbm"),0,EFalse)); + User::LeaveIfError(iBitmap16MU->Resize(halfScreen)); + + User::LeaveIfError(iBitmap16MA->Load(_L("z:\\system\\data\\32ram.mbm"),0,EFalse)); + User::LeaveIfError(iBitmap16MA->Resize(halfScreen)); + User::LeaveIfError(iBitmapMask->Create(halfScreen, EGray2)); + User::LeaveIfError(iBitmapAlpha->Create(halfScreen, EGray256)); + return(ETrue); + } + +inline CTClipStep* CTClip::Step() + { + return static_cast(iStep); + } + +void CTClip::Clear() + { + iCon->SetPenStyle(CGraphicsContext::ENullPen); + iCon->SetBrushColor(KRgbWhite); + iCon->DrawRect(iClientRect); + iCon->SetPenStyle(CGraphicsContext::ESolidPen); + iCon->SetBrushColor(TRgb(170,170,170)); + } + +CTClip::~CTClip() + { + for(TInt i=0;iSetTestStepID(KUnknownSYMTestCaseIDName); + switch(aCurTestCase) + { + case 1: + ((CTClipStep*)iStep)->SetTestStepID(_L("GRAPHICS-BITGDI-0042")); + TestComplexRgn(); + INFO_PRINTF1(_L("Complex Rgn Test complete")); + break; + case 2: + ((CTClipStep*)iStep)->SetTestStepID(_L("GRAPHICS-BITGDI-0038")); + TestRectRgn(); + INFO_PRINTF1(_L("Rect Rgn Test complete")); + break; + case 3: +#if !defined(__X86GCC__) //Tests take too long to run and don't test anything useful anyway + ((CTClipStep*)iStep)->SetTestStepID(_L("GRAPHICS-BITGDI-0039")); + TestSimpleRgn(); + INFO_PRINTF1(_L("Simple Rgn Test complete")); + break; + case 4: + ((CTClipStep*)iStep)->SetTestStepID(_L("GRAPHICS-BITGDI-0041")); + TestHoriRgn(); + INFO_PRINTF1(_L("Horizontal Rgn Test complete")); + break; + case 5: + ((CTClipStep*)iStep)->SetTestStepID(_L("GRAPHICS-BITGDI-0040")); + TestVertRgn(); + INFO_PRINTF1(_L("Vertical Rgn Test complete")); + break; + case 6: +#endif //__X86GCC__ + ((CTClipStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName); + ((CTClipStep*)iStep)->CloseTMSGraphicsStep(); + INFO_PRINTF1(_L("Test complete\n")); + TestComplete(); + break; + } + ((CTClipStep*)iStep)->RecordTestResultL(); + } + +/** + @SYMTestCaseID GRAPHICS-BITGDI-0038 + + @SYMDEF + + @SYMTestCaseDesc Tests clipping to a rect region + + @SYMTestPriority High + + @SYMTestStatus Implemented + + @SYMTestActions Iterates through a number of regions and graphic operations testing clipping with each + + @SYMTestExpectedResults Test should perform graphics operations succesfully. +*/ +void CTClip::TestRectRgn() + { + TInt testMode=0; + while(SetUpTest(testMode)) + { + for(TUint j=0;jDes(); + + for (TInt row=0; rowGetScanLine(des,point,length,EColor16MA); + + for(TInt i=0; iDes(); + TPtr8 clDes = clBuf->Des(); + + TInt linesDiffs=0; + for (TUint yy=aClip.iTl.iY; yyGetScanLine(unDes,unPoint,length,EColor16MA); + iDev->GetScanLine(clDes,clPoint,length,EColor16MA); + + TInt different = unDes.Compare(clDes); + if (different) + { + if (linesDiffs++ buf1,buf2; + TInt end=Min(length,KMaxNumBytesToLog); + end*=4; + TInt ii; + TInt matches=ETrue; + for (ii=0; ii buf; + if (!matches) + { + _LIT(KLog,"ClipRect (%d,%d,%d,%d) Row=%d (First %d of %d pixels shown, only differing values shown on comparison line)"); + buf.Format(KLog,aClip.iTl.iX,aClip.iTl.iY,aClip.iBr.iX,aClip.iBr.iY,yy,end,aClip.Width()); + INFO_PRINTF1(buf); + INFO_PRINTF1(buf1); + INFO_PRINTF1(buf2); + } + else + { + _LIT(KLog,"ClipRect (%d,%d,%d,%d) Row=%d (First %d of %d pixels all match)"); + buf.Format(KLog,aClip.iTl.iX,aClip.iTl.iY,aClip.iBr.iX,aClip.iBr.iY,yy,end,aClip.Width()); + INFO_PRINTF1(buf); + } + } + } + } + if (linesDiffs>0) + { + _LIT(KLog,"Clipping failure inside! Graphics operation: %d Lines With Diffs: %d/%d"); + INFO_PRINTF4(KLog,iGopNum,linesDiffs,aClip.iBr.iY-aClip.iTl.iY); + } + if (!Step()->IgnoreDiffs()) + TEST(linesDiffs==0); + + delete unBuf; + delete clBuf; + } + +void CTClip::DrawToScreen(TRegion& clip_reg,TRect r) + { + Clear(); + TRect halfWid(r); + halfWid.iBr.iX=halfWid.iBr.iX/2; + iCon->SetClippingRect(halfWid); + DoDraw(r,EFalse); + iCon->CancelClippingRect(); + iCon->SetClippingRegion(&clip_reg); + iCon->SetOrigin(TPoint(r.iBr.iX/2,0)); + DoDraw(r,ETrue); + iCon->CancelClippingRegion(); + iCon->SetOrigin(TPoint(0,0)); + } + +void CTClip::DrawToScreen(const TRect& cliprect,TRect r) + { + Clear(); + TRect halfWid(r); + halfWid.iBr.iX=halfWid.iBr.iX/2; + iCon->SetClippingRect(halfWid); + DoDraw(r,EFalse); + iCon->SetClippingRect(cliprect); + iCon->SetOrigin(TPoint(r.iBr.iX/2,0)); + DoDraw(r,ETrue); + iCon->CancelClippingRect(); + iCon->SetOrigin(TPoint(0,0)); + } + +void CTClip::DoDraw(TRect r,TBool clipped) + { + TRect sh; + TPoint p,z; + switch(iGopNum) + { + case EPlot: + iCon->Plot(TPoint(r.iBr.iX/6-10,r.iBr.iY/3-10)); + iCon->Plot(TPoint(r.iBr.iX/6,r.iBr.iY/3)); + break; + case EDrawLine: + p.SetXY(r.iBr.iX/2-1,r.iBr.iY+1); + iCon->DrawLine(z,p); + break; + case EDottedLine: + p.SetXY(r.iBr.iX/2-1,r.iBr.iY+1); + iCon->SetPenStyle(CGraphicsContext::EDottedPen); + iCon->DrawLine(z,p); + break; + case EDashedLine: + p.SetXY(r.iBr.iX/2-1,r.iBr.iY+1); + iCon->SetPenStyle(CGraphicsContext::EDashedPen); + iCon->DrawLine(z,p); + break; + case EWideLine: + p.SetXY(r.iBr.iX/2-11,r.iBr.iY-9); + iCon->SetPenSize(TSize(5,5)); + iCon->DrawLine(z,p); + break; + case EDrawArc: + sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY); + p.SetXY(r.iBr.iX/2-1,0); + iCon->DrawArc(sh,z,p); + break; + case EDottedArc: + sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY); + p.SetXY(r.iBr.iX/2-1,0); + iCon->SetPenStyle(CGraphicsContext::EDottedPen); + iCon->DrawArc(sh,z,p); + break; + case EDrawRect: + sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY); + iCon->DrawRect(sh); + break; + case EVerticalHatchRect: + sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY); + iCon->SetBrushStyle(CGraphicsContext::EVerticalHatchBrush); + iCon->DrawRect(sh); + break; + case EForwardDiagonalHatchRect: + sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY); + iCon->SetBrushStyle(CGraphicsContext::EForwardDiagonalHatchBrush); + iCon->DrawRect(sh); + break; + case EHorizontalHatchRect: + sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY); + iCon->SetBrushStyle(CGraphicsContext::EHorizontalHatchBrush); + iCon->DrawRect(sh); + break; + case ERearwardDiagonalHatchRect: + sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY); + iCon->SetBrushStyle(CGraphicsContext::ERearwardDiagonalHatchBrush); + iCon->DrawRect(sh); + break; + case ESquareCrossHatchRect: + sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY); + iCon->SetBrushStyle(CGraphicsContext::ESquareCrossHatchBrush); + iCon->DrawRect(sh); + break; + case EDiamondCrossHatchRect: + sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY); + iCon->SetBrushStyle(CGraphicsContext::EDiamondCrossHatchBrush); + iCon->DrawRect(sh); + break; + case EVerticalHatchEllipse: + sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY); + iCon->SetBrushStyle(CGraphicsContext::EVerticalHatchBrush); + iCon->DrawEllipse(sh); + break; + case EForwardDiagonalHatchEllipse: + sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY); + iCon->SetBrushStyle(CGraphicsContext::EForwardDiagonalHatchBrush); + iCon->DrawEllipse(sh); + break; + case EHorizontalHatchEllipse: + sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY); + iCon->SetBrushStyle(CGraphicsContext::EHorizontalHatchBrush); + iCon->DrawEllipse(sh); + break; + case ERearwardDiagonalHatchEllipse: + sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY); + iCon->SetBrushStyle(CGraphicsContext::ERearwardDiagonalHatchBrush); + iCon->DrawEllipse(sh); + break; + case ESquareCrossHatchEllipse: + sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY); + iCon->SetBrushStyle(CGraphicsContext::ESquareCrossHatchBrush); + iCon->DrawEllipse(sh); + break; + case EDiamondCrossHatchEllipse: + sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY); + iCon->SetBrushStyle(CGraphicsContext::EDiamondCrossHatchBrush); + iCon->DrawEllipse(sh); + break; + case EDottedRect: + sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY); + iCon->SetPenStyle(CGraphicsContext::EDottedPen); + iCon->DrawRect(sh); + break; + case ECopyRect: + sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY); + if(clipped) + { + iCon->SetOrigin(z); + iCon->CopyRect(TPoint(r.iBr.iX/2,0),sh); + } + else + iCon->DrawRect(sh); + break; + case EDrawEllipse: + sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY); + iCon->DrawEllipse(sh); + break; + case EDottedEllipse: + sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY); + iCon->SetPenStyle(CGraphicsContext::EDottedPen); + iCon->DrawEllipse(sh); + break; + case EDrawRoundRect: + sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY); + p.SetXY(r.iBr.iX>>2,r.iBr.iY>>4); + iCon->DrawRoundRect(sh,p.AsSize()); + break; + case EDottedRoundRect: + sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY); + p.SetXY(r.iBr.iX>>2,r.iBr.iY>>4); + iCon->SetPenStyle(CGraphicsContext::EDottedPen); + iCon->DrawRoundRect(sh,p.AsSize()); + break; + case EDrawPie: + sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY); + p.SetXY(r.iBr.iX/2-1,0); + iCon->DrawPie(sh,z,p); + break; + case EDottedPie: + sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY); + p.SetXY(r.iBr.iX/2-1,0); + iCon->SetPenStyle(CGraphicsContext::EDottedPen); + iCon->DrawPie(sh,z,p); + break; + case EDrawPolygon: + { + CArrayFixFlat* t=new CArrayFixFlat(3); + TPoint temp(r.iBr.iX/6,r.iBr.iY/4); + TRAPD(errCode, t->AppendL(temp)); + if(errCode != KErrNone) + { + return; + } + temp.SetXY(r.iBr.iX/12,r.iBr.iY/2); + TRAP(errCode, t->AppendL(temp)); + if(errCode != KErrNone) + { + return; + } + temp.SetXY(r.iBr.iX/4,r.iBr.iY/2); + TRAP(errCode, t->AppendL(temp)); + if(errCode != KErrNone) + { + return; + } + iCon->DrawPolygon(t); + delete t; + } + break; + case EDrawText: + { + iCon->UseFont(iFont); + p.SetXY(r.iTl.iX+1, r.iTl.iY+1); + iCon->DrawText(testtext,p); + } + break; + case EBoxText: + { + iCon->UseFont(iFont); + p.SetXY(r.iTl.iX+1, r.iTl.iY+1); + TInt ascent=iFont->AscentInPixels(); + TInt height=iFont->HeightInPixels(); + TInt width=iFont->TextWidthInPixels(testtext); + TRect box(p.iX,p.iY,p.iX+width,p.iY+height); + iCon->DrawText(testtext,box,ascent); + } + break; + case EDrawTextVertical: + iCon->UseFont(iFont); + p.SetXY(r.iBr.iX/6-13,r.iBr.iY/3+5); + p.iX+=5; + p.iY-=10; + iCon->DrawTextVertical(testtext,p,EFalse); + break; + case ELargeText: + iCon->UseFont(iLargeFont); + p.SetXY(r.iBr.iX/6-13,r.iBr.iY/3+5); + iCon->DrawText(largetesttext,p); + break; + case ELargeBoxText: + { + iCon->UseFont(iLargeFont); + p.SetXY(r.iTl.iX, r.iTl.iY); + TInt ascent=iLargeFont->AscentInPixels(); + TInt height=iLargeFont->HeightInPixels(); + TInt width=iLargeFont->TextWidthInPixels(largetesttext); + TRect box(p.iX, p.iY, p.iX+width, p.iY+height); + iCon->DrawText(largetesttext,box,ascent); + } + break; + case ELargeTextVertical: + iCon->UseFont(iLargeFont); + p.SetXY(r.iTl.iX+1, r.iTl.iY+1); + iCon->DrawTextVertical(largetesttext,p,EFalse); + break; + case EPaintRect: + sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY); + iCon->SetPenStyle(CGraphicsContext::EDottedPen); + iCon->SetBrushStyle(CGraphicsContext::EPatternedBrush); + iCon->DrawRect(sh); + break; + case EBitBltContext: + sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY); + if(clipped) + { + iCon->SetPenStyle(CGraphicsContext::ESolidPen); + iCon->SetBrushStyle(CGraphicsContext::ESolidBrush); + iCon->BitBlt(z,*iCon,sh); + } + else + { + iCon->SetPenStyle(CGraphicsContext::EDottedPen); + iCon->SetBrushStyle(CGraphicsContext::EPatternedBrush); + iCon->DrawRect(sh); + } + break; + case EBitmapLarge: + sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY); + iCon->DrawBitmap(sh,iBitmap); + break; + case EBitmapSmall: + p.SetXY(r.iBr.iX/6-40,r.iBr.iY/3-20); + sh.SetRect(p,TSize(iBitmap->SizeInPixels().iWidth/2,iBitmap->SizeInPixels().iHeight/2)); + iCon->DrawBitmap(sh,iBitmap); + break; + case EBitBltBitmap: + p.SetXY(r.iTl.iX+1, r.iTl.iY+1); + iCon->BitBlt(p,iBitmap64K); + break; + case EDrawBitmap: + p.SetXY(r.iTl.iX+1, r.iTl.iY+1); + sh.SetRect(p,iBitmap64K->SizeInPixels()); + iCon->DrawBitmap(sh,iBitmap); + break; + case EBitBltMasked: + p.SetXY(r.iTl.iX+1, r.iTl.iY+1); + sh.SetRect(TPoint(0,0),iBitmap64K->SizeInPixels()); + iCon->BitBltMasked(p,iBitmap,sh,iBitmap,ETrue); + break; + case EBitBltMaskedBinary: + p.SetXY(r.iTl.iX+1, r.iTl.iY+1); + sh.SetRect(TPoint(0,0),iBitmap64K->SizeInPixels()); + iCon->SetBrushStyle(CGraphicsContext::ENullBrush); + iCon->BitBltMasked(p,iBitmap,sh,iBitmapMask,EFalse); + break; + case EBitBltMaskedBinary64K: + p.SetXY(r.iTl.iX+1, r.iTl.iY+1); + sh.SetRect(TPoint(0,0),iBitmap64K->SizeInPixels()); + iCon->SetBrushStyle(CGraphicsContext::ENullBrush); + iCon->BitBltMasked(p,iBitmap64K,sh,iBitmapMask,EFalse); + break; + case EBitBltMaskedBinary16MU: + p.SetXY(r.iTl.iX+1, r.iTl.iY+1); + sh.SetRect(TPoint(0,0),iBitmap16MU->SizeInPixels()); + iCon->SetBrushStyle(CGraphicsContext::ENullBrush); + iCon->BitBltMasked(p,iBitmap16MU,sh,iBitmapMask,EFalse); + break; + case EBitBltMaskedBinary16MA: + p.SetXY(r.iTl.iX+1, r.iTl.iY+1); + sh.SetRect(TPoint(0,0),iBitmap16MA->SizeInPixels()); + iCon->SetBrushStyle(CGraphicsContext::ENullBrush); + iCon->BitBltMasked(p,iBitmap16MA,sh,iBitmapMask,EFalse); + break; + case EBitBltMaskedAlpha: + p.SetXY(r.iTl.iX+1, r.iTl.iY+1); + sh.SetRect(TPoint(0,0),iBitmap64K->SizeInPixels()); + iCon->SetBrushStyle(CGraphicsContext::ENullBrush); + iCon->BitBltMasked(p,iBitmap,sh,iBitmapAlpha,EFalse); + break; + case EBitBltMaskedAlpha64K: + p.SetXY(r.iTl.iX+1, r.iTl.iY+1); + sh.SetRect(TPoint(0,0),iBitmap64K->SizeInPixels()); + iCon->SetBrushStyle(CGraphicsContext::ENullBrush); + iCon->BitBltMasked(p,iBitmap64K,sh,iBitmapAlpha,EFalse); + break; + case EBitBltMaskedAlpha16MU: + p.SetXY(r.iTl.iX+1, r.iTl.iY+1); + sh.SetRect(TPoint(0,0),iBitmap16MU->SizeInPixels()); + iCon->SetBrushStyle(CGraphicsContext::ENullBrush); + iCon->BitBltMasked(p,iBitmap16MU,sh,iBitmapAlpha,EFalse); + break; + case EBitBltMaskedAlpha16MA: + p.SetXY(r.iTl.iX+1, r.iTl.iY+1); + sh.SetRect(TPoint(0,0),iBitmap16MA->SizeInPixels()); + iCon->SetBrushStyle(CGraphicsContext::ENullBrush); + iCon->BitBltMasked(p,iBitmap16MA,sh,iBitmapAlpha,EFalse); + break; + } + iCon->SetPenStyle(CGraphicsContext::ESolidPen); + iCon->SetPenSize(TSize(1,1)); + iCon->SetBrushStyle(CGraphicsContext::ESolidBrush); + } + +//-------------- +CTClipStep::CTClipStep() :iIgnoreDiffs(EFalse) + { + SetTestStepName(KTClipStep); + } + +CTClipStep::~CTClipStep() + { + DestroyTestEnvironment(); + } + +inline TBool CTClipStep::IgnoreDiffs() + { + return iIgnoreDiffs; + } + +CTGraphicsBase* CTClipStep::CreateTestL() + { + _LIT(KLog,"Create CTClip"); + INFO_PRINTF1(KLog); + return new (ELeave) CTClip(this, iTestAppNo, iDev, iGc, iBmp, iFont, iLargeFont); + } + +void CTClipStep::TestSetupL() + { + FbsStartup(); + RFbsSession::Connect(); + + CreateTestEnvironment(); + } + +void CTClipStep::TestClose() + { + DestroyTestEnvironment(); + RFbsSession::Disconnect(); + } + +TInt CTClipStep::CreateScreenDevice(TDisplayMode aMode) + { + TRAPD(err,iDev=CFbsScreenDevice::NewL(KNullDesC,aMode)); + const TPtrC modeName=CTGraphicsBase::ColorModeName(aMode); + if (err==KErrNone) + { + _LIT(KLog,"Sucessfully created Screen Device, mode %S"); + INFO_PRINTF2(KLog,&modeName); + } + else + { + if (err==KErrNotSupported) + { + _LIT(KLog,"Screen Device with mode %S not available on this device"); + INFO_PRINTF2(KLog,&modeName); + } + else + { + _LIT(KLog,"Failed to created Screen Device with mode %S err=%d"); + INFO_PRINTF3(KLog,&modeName,err); + } + } + return err; + } + +void CTClipStep::CreateTestEnvironment() + { + iDev=NULL; + //This test will fail if any display mode other than EColor64K, EColor256, EGray256 + //is selected + TInt ret=CreateScreenDevice(EColor64K); + if (ret!=KErrNone) + ret=CreateScreenDevice(EColor256); + if (ret!=KErrNone) + ret=CreateScreenDevice(EGray256); + if (ret!=KErrNone) + ret=CreateScreenDevice(EColor16MU); + if (ret!=KErrNone) + ret=CreateScreenDevice(EColor16M); + if (ret!=KErrNone) + ret=CreateScreenDevice(EColor4K); + if (ret!=KErrNone) + { + ret=CreateScreenDevice(EColor16MA); + if (ret==KErrNone) + { + iIgnoreDiffs=ETrue; + _LIT(KLog,"Ignore Diffs set to %d (ETrue?)"); + INFO_PRINTF2(KLog,iIgnoreDiffs); + } + } + if (ret!=KErrNone) + { + ret=CreateScreenDevice(EColor16MAP); + if (ret==KErrNone) + { + iIgnoreDiffs=ETrue; + _LIT(KLog,"Ignore Diffs set to %d (ETrue?)"); + INFO_PRINTF2(KLog,iIgnoreDiffs); + } + } + if(ret!=KErrNone) + User::Panic(_L("Device not created"),ret); + iDev->ChangeScreenDevice(NULL); + iGc=NULL; + ret=iDev->CreateContext(iGc); + if(iGc==NULL) + User::Panic(_L("Context not created"),KErrGeneral); + iGc->Activate(iDev); + iFont=NULL; + TFontSpec fs(_L("Swiss"),12); + ret=iDev->GetNearestFontToDesignHeightInPixels(iFont,fs); + if(ret!=KErrNone) + User::Panic(_L("Font not created"),KErrGeneral); + iLargeFont=NULL; + fs.iHeight=100; + ret=iDev->GetNearestFontToDesignHeightInPixels(iLargeFont,fs); + if(ret!=KErrNone) + User::Panic(_L("Font not created"),KErrGeneral); + + iBmp=new CFbsBitmap; + if(iBmp==NULL) + User::Panic(_L("Bitmap not created"),KErrGeneral); + if(iTestAppNo == 0) + { + // Uncompressed + TInt ret=iBmp->Load(_L("z:\\system\\data\\tbmp.mbm"),EMbmTbmpTbmp,EFalse); + if(ret!=KErrNone) + User::Panic(_L("Bitmap not loaded"),ret); + } + else + { + TInt ret=iBmp->LoadAndCompress(_L("z:\\system\\data\\tbmp.mbm"),EMbmTbmpTbmp,EFalse); + if(ret!=KErrNone) + User::Panic(_L("Bitmap not loaded"),ret); + } + + } + +void CTClipStep::DestroyTestEnvironment() + { + delete iGc; + iGc = NULL; + + delete iBmp; + iBmp = NULL; + + if(iFont) + { + iDev->ReleaseFont(iFont); + iFont = NULL; + } + if(iLargeFont) + { + iDev->ReleaseFont(iLargeFont); + iLargeFont = NULL; + } + + delete iDev; + iDev = NULL; + } + +//-------------- +CTClip2Step::CTClip2Step() : + CTClipStep() + { + iTestAppNo = 1; + SetTestStepName(KTClip2Step); + }