Update contrib.
1 // Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
2 // All rights reserved.
3 // This component and the accompanying materials are made available
4 // under the terms of "Eclipse Public License v1.0"
5 // which accompanies this distribution, and is available
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
8 // Initial Contributors:
9 // Nokia Corporation - initial contribution.
20 #include <graphics/fbsdefs.h>
22 //Note: Some display modes will be scaled - see
23 //CreateTestEnvironment(), SetScalingFactor() call
25 //aTestAppNo is a new argument and it is not used yet.
26 //It can have 0 or 1 value depending on which test app
27 //uses TestClip functionality - TClip or TClip2.
28 CTClip::CTClip(CTestStep* aStep,
30 CFbsScreenDevice* aDev,
34 CFbsFont* aLargeFont):
35 CTGraphicsBase(aStep),
36 iTestAppNo(aTestAppNo),
39 iClientRect(TRect(0,0,0,0)),
49 iLargeFont(aLargeFont),
53 void CTClip::ConstructL()
55 iClipList=(TRect*)User::Alloc(sizeof(TRect)*ERegions);
57 User::Panic(_L("Construct failure"),KErrGeneral);
58 iBmpSize=iBitmap->SizeInPixels();
59 iBitmap64K=new(ELeave) CFbsBitmap();
60 iBitmap16MU=new(ELeave) CFbsBitmap();
61 iBitmap16MA=new(ELeave) CFbsBitmap();
62 iBitmapMask=new(ELeave) CFbsBitmap();
63 iBitmapAlpha=new(ELeave) CFbsBitmap();
66 TBool CTClip::SetUpTest(TInt &aTestModeIndex)
68 CFbsBitGc::TGraphicsOrientation orientation;
71 orientation=(CFbsBitGc::TGraphicsOrientation)(aTestModeIndex/2);
72 if (orientation>CFbsBitGc::EGraphicsOrientationRotated270)
75 TPoint scalingOrigin(0,0);
77 if ((aTestModeIndex&0x1)==CFbsBitGc::EGraphicsOrientationNormal)
79 scalingOrigin=TPoint(20, 10);
82 iDev->SetScalingFactor(scalingOrigin, scale, scale, 1, 1);
83 } while(!iCon->SetOrientation(orientation));
84 iDev->GetDrawRect(iClientRect);
85 TInt dims[2*ERegions]={0,0, 1,1, 1,2, 2,1, 2,2, 1,10, 10,1, 2,10, 10,2, 10,10};
86 for(TUint count=0;count<ERegions;count++)
88 iClipList[count].iTl.iX=iClientRect.iBr.iX*2/3;
89 iClipList[count].iTl.iY=iClientRect.iBr.iY/3;
90 iClipList[count].iBr.iX=iClipList[count].iTl.iX+dims[count*2];
91 iClipList[count].iBr.iY=iClipList[count].iTl.iY+dims[count*2+1];
93 iDev->SetAutoUpdate(ETrue);
94 iCon->SetPenStyle(CGraphicsContext::ESolidPen);
95 iCon->SetPenColor(KRgbBlack);
96 iCon->SetBrushStyle(CGraphicsContext::ESolidBrush);
97 iCon->SetBrushColor(TRgb(170,170,170));
99 iCon->UseBrushPattern(iBitmap);
101 TSize halfScreen(iClientRect.Width()/2-2, iClientRect.Height()-2);
102 User::LeaveIfError(iBitmap64K->Load(_L("z:\\system\\data\\16ram.mbm"),0,EFalse));
103 User::LeaveIfError(iBitmap64K->Resize(halfScreen));
104 User::LeaveIfError(iBitmap16MU->Load(_L("z:\\system\\data\\32ram.mbm"),0,EFalse));
105 User::LeaveIfError(iBitmap16MU->Resize(halfScreen));
107 User::LeaveIfError(iBitmap16MA->Load(_L("z:\\system\\data\\32ram.mbm"),0,EFalse));
108 User::LeaveIfError(iBitmap16MA->Resize(halfScreen));
109 User::LeaveIfError(iBitmapMask->Create(halfScreen, EGray2));
110 User::LeaveIfError(iBitmapAlpha->Create(halfScreen, EGray256));
114 inline CTClipStep* CTClip::Step()
116 return static_cast<CTClipStep*>(iStep);
121 iCon->SetPenStyle(CGraphicsContext::ENullPen);
122 iCon->SetBrushColor(KRgbWhite);
123 iCon->DrawRect(iClientRect);
124 iCon->SetPenStyle(CGraphicsContext::ESolidPen);
125 iCon->SetBrushColor(TRgb(170,170,170));
130 for(TInt i=0;i<ERegions;i++)
132 iClipList[i].~TRect();
134 User::Free(iClipList);
142 void CTClip::RunTestCaseL(const TInt aCurTestCase)
144 ((CTClipStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
148 ((CTClipStep*)iStep)->SetTestStepID(_L("GRAPHICS-BITGDI-0042"));
150 INFO_PRINTF1(_L("Complex Rgn Test complete"));
153 ((CTClipStep*)iStep)->SetTestStepID(_L("GRAPHICS-BITGDI-0038"));
155 INFO_PRINTF1(_L("Rect Rgn Test complete"));
158 #if !defined(__X86GCC__) //Tests take too long to run and don't test anything useful anyway
159 ((CTClipStep*)iStep)->SetTestStepID(_L("GRAPHICS-BITGDI-0039"));
161 INFO_PRINTF1(_L("Simple Rgn Test complete"));
164 ((CTClipStep*)iStep)->SetTestStepID(_L("GRAPHICS-BITGDI-0041"));
166 INFO_PRINTF1(_L("Horizontal Rgn Test complete"));
169 ((CTClipStep*)iStep)->SetTestStepID(_L("GRAPHICS-BITGDI-0040"));
171 INFO_PRINTF1(_L("Vertical Rgn Test complete"));
175 ((CTClipStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
176 ((CTClipStep*)iStep)->CloseTMSGraphicsStep();
177 INFO_PRINTF1(_L("Test complete\n"));
181 ((CTClipStep*)iStep)->RecordTestResultL();
185 @SYMTestCaseID GRAPHICS-BITGDI-0038
189 @SYMTestCaseDesc Tests clipping to a rect region
191 @SYMTestPriority High
193 @SYMTestStatus Implemented
195 @SYMTestActions Iterates through a number of regions and graphic operations testing clipping with each
197 @SYMTestExpectedResults Test should perform graphics operations succesfully.
199 void CTClip::TestRectRgn()
202 while(SetUpTest(testMode))
204 for(TUint j=0;j<ERegions;j++)
206 TRect reg=iClipList[j];
207 for(iGopNum=EFirstGop+1;iGopNum<EGraphicsOps;iGopNum++)
209 RRegion rectreg(reg);
210 DrawToScreen(rectreg,iClientRect);
212 ScanArea(iClientRect.iBr.iX/2,iClientRect.iTl.iY,iClientRect.iBr.iX/2,reg.iTl.iY-iClientRect.iTl.iY); // above
213 ScanArea(iClientRect.iBr.iX/2,reg.iTl.iY,reg.iTl.iX-iClientRect.iBr.iX/2,reg.Height()); // left
214 ScanArea(reg.iBr.iX,reg.iTl.iY,iClientRect.iBr.iX-reg.iBr.iX,reg.Height()); // right
215 ScanArea(iClientRect.iBr.iX/2,reg.iBr.iY,iClientRect.iBr.iX/2,iClientRect.iBr.iY-reg.iBr.iY); // below
216 CheckInside(reg,iClientRect);
223 @SYMTestCaseID GRAPHICS-BITGDI-0039
227 @SYMTestCaseDesc Tests clipping to a simple region
229 @SYMTestPriority High
231 @SYMTestStatus Implemented
233 @SYMTestActions Iterates through a number of simple regions and graphic operations testing clipping with each
235 @SYMTestExpectedResults Test should perform graphics operations succesfully.
237 void CTClip::TestSimpleRgn()
240 while(SetUpTest(testMode))
242 for(TUint j=0;j<ERegions;j++)
244 TRect reg=iClipList[j];
245 for(iGopNum=EFirstGop+1;iGopNum<EGraphicsOps;iGopNum++)
247 DrawToScreen(reg,iClientRect);
248 ScanArea(iClientRect.iBr.iX/2,iClientRect.iTl.iY,iClientRect.iBr.iX/2,reg.iTl.iY); // above
249 ScanArea(iClientRect.iBr.iX/2,reg.iTl.iY,reg.iTl.iX-iClientRect.iBr.iX/2,reg.Height()); // left
250 ScanArea(reg.iBr.iX,reg.iTl.iY,iClientRect.iBr.iX-reg.iBr.iX,reg.Height()); // right
251 ScanArea(iClientRect.iBr.iX/2,reg.iBr.iY,iClientRect.iBr.iX/2,iClientRect.iBr.iY-reg.iBr.iY); // below
252 CheckInside(reg,iClientRect);
259 @SYMTestCaseID GRAPHICS-BITGDI-0040
263 @SYMTestCaseDesc Tests clipping to a vertical region
265 @SYMTestPriority High
267 @SYMTestStatus Implemented
269 @SYMTestActions Iterates through a number of regions of different widths and graphic operations testing clipping with each
271 @SYMTestExpectedResults Test should perform graphics operations succesfully.
273 void CTClip::TestVertRgn()
275 TInt widths[3]={1,2,5};
277 while(SetUpTest(testMode))
279 for(TInt count=0;count<3;count++) // check vertical strips
281 TInt i=widths[count];
282 for(iGopNum=EFirstGop+1;iGopNum<EGraphicsOps;iGopNum++)
284 for(TInt j=0;j<iClientRect.iBr.iX/2-i;j+=35)
286 TRect reg=TRect(iClientRect.iBr.iX/2+j,iClientRect.iTl.iY,iClientRect.iBr.iX/2+j+i,iClientRect.iBr.iY);
287 RRegion rectreg(reg);
288 DrawToScreen(rectreg,iClientRect);
290 ScanArea(iClientRect.iBr.iX/2,reg.iTl.iY,reg.iTl.iX-iClientRect.iBr.iX/2,reg.Height()); // left
291 ScanArea(reg.iBr.iX,reg.iTl.iY,iClientRect.iBr.iX-reg.iBr.iX,reg.Height()); // right
292 CheckInside(reg,iClientRect);
300 @SYMTestCaseID GRAPHICS-BITGDI-0041
304 @SYMTestCaseDesc Tests clipping to a horizontal region
306 @SYMTestPriority High
308 @SYMTestStatus Implemented
310 @SYMTestActions Iterates through a number of regions of different widths and graphic operations testing clipping with each
312 @SYMTestExpectedResults Test should perform graphics operations succesfully.
314 void CTClip::TestHoriRgn()
316 TInt widths[3]={1,2,5};
318 while(SetUpTest(testMode))
320 for(TInt count=0;count<3;count++) // check horizontal strips
322 TInt i=widths[count];
323 for(iGopNum=EFirstGop+1;iGopNum<EGraphicsOps;iGopNum++)
325 for(TInt j=0;j<iClientRect.iBr.iY;j+=35)
327 TRect reg=TRect(iClientRect.iBr.iX/2,j,iClientRect.iBr.iX,j+i);
328 RRegion rectreg(reg);
329 DrawToScreen(rectreg,iClientRect);
331 ScanArea(iClientRect.iBr.iX/2,iClientRect.iTl.iY,iClientRect.iBr.iX/2,reg.iTl.iY); // above
332 ScanArea(iClientRect.iBr.iX/2,reg.iBr.iY,iClientRect.iBr.iX/2,iClientRect.iBr.iY-reg.iBr.iY); // below
333 CheckInside(reg,iClientRect);
341 @SYMTestCaseID GRAPHICS-BITGDI-0042
345 @SYMTestCaseDesc Tests clipping to a complex region
347 @SYMTestPriority High
349 @SYMTestStatus Implemented
351 @SYMTestActions Creates a complex region then iterates through graphic operations testing clipping with each
353 @SYMTestExpectedResults Test should perform graphics operations succesfully.
355 void CTClip::TestComplexRgn()
358 while(SetUpTest(testMode))
361 rect[0].SetRect(iClientRect.iBr.iX*12/20,0,iClientRect.iBr.iX*15/20,iClientRect.iBr.iY/4);
362 rect[1].SetRect(iClientRect.iBr.iX*11/20,iClientRect.iBr.iY/8,iClientRect.iBr.iX*13/20,iClientRect.iBr.iY/2);
363 rect[2].SetRect(iClientRect.iBr.iX*14/20,iClientRect.iBr.iY/8,iClientRect.iBr.iX*17/20,iClientRect.iBr.iY/2);
364 rect[3].SetRect(iClientRect.iBr.iX*12/20,iClientRect.iBr.iY*3/8,iClientRect.iBr.iX*18/20,iClientRect.iBr.iY*5/8);
365 rect[4].SetRect(iClientRect.iBr.iX*13/20,iClientRect.iBr.iY*9/16,iClientRect.iBr.iX*19/20,iClientRect.iBr.iY*7/8);
366 rect[5].SetRect(iClientRect.iBr.iX*17/20,iClientRect.iBr.iY*3/4,iClientRect.iBr.iX,iClientRect.iBr.iY);
367 rect[6].SetRect(iClientRect.iBr.iX*11/20,iClientRect.iBr.iY*5/8,iClientRect.iBr.iX*11/20+1,iClientRect.iBr.iY*5/8+1);
368 rect[7].SetRect(iClientRect.iBr.iX*18/20,iClientRect.iBr.iY/8,iClientRect.iBr.iX*18/20,iClientRect.iBr.iY/8);
370 space[0].SetRect(iClientRect.iBr.iX/2,0,rect[1].iTl.iX,rect[1].iBr.iY);
371 space[1].SetRect(space[0].iBr.iX,0,rect[0].iTl.iX,rect[1].iTl.iY);
372 space[2].SetRect(rect[0].iBr.iX,0,rect[2].iBr.iX,rect[2].iTl.iY);
373 space[3].SetRect(rect[2].iBr.iX,0,iClientRect.iBr.iX,rect[3].iTl.iY);
374 space[4].SetRect(rect[1].iBr.iX,rect[0].iBr.iY,rect[2].iTl.iX,rect[3].iTl.iY);
375 space[5].SetRect(iClientRect.iBr.iX/2,rect[1].iBr.iY,rect[3].iTl.iX,rect[6].iTl.iY);
376 space[6].SetRect(iClientRect.iBr.iX/2,rect[6].iTl.iY,rect[6].iTl.iX,rect[6].iBr.iY);
377 space[7].SetRect(iClientRect.iBr.iX/2,rect[6].iBr.iY,rect[6].iBr.iX,iClientRect.iBr.iY);
378 space[8].SetRect(rect[6].iBr.iX,rect[6].iTl.iY,rect[4].iTl.iX,iClientRect.iBr.iY);
379 space[9].SetRect(rect[4].iTl.iX,rect[4].iBr.iY,rect[5].iTl.iX,iClientRect.iBr.iY);
380 space[10].SetRect(rect[4].iBr.iX,rect[4].iTl.iY,iClientRect.iBr.iX,rect[5].iTl.iY);
381 space[11].SetRect(rect[3].iBr.iX,rect[3].iTl.iY,iClientRect.iBr.iX,rect[4].iTl.iY);
382 RRegion creg(rect[0],8);
383 creg.AddRect(rect[1]);
384 creg.AddRect(rect[2]);
385 creg.AddRect(rect[3]);
386 creg.AddRect(rect[4]);
387 creg.AddRect(rect[5]);
388 creg.AddRect(rect[6]);
389 creg.AddRect(rect[7]);
390 for(iGopNum=EFirstGop+1;iGopNum<EGraphicsOps;iGopNum++)
392 DrawToScreen(creg,iClientRect);
394 for(;count<8;count++)
395 CheckInside(rect[count],iClientRect);
396 for(count=0;count<12;count++)
397 ScanArea(space[count].iTl.iX,space[count].iTl.iY,space[count].iBr.iX-space[count].iTl.iX,space[count].iBr.iY-space[count].iTl.iY);
403 void CTClip::ScanArea(TInt x,TInt y,TInt length,TInt height)
405 if (length<1 || height<1)
410 HBufC8* buf = HBufC8::NewL(length * 4);
411 TPtr8 des = buf->Des();
413 for (TInt row=0; row<height; row++)
415 TPoint point(x, y+row);
418 iDev->GetScanLine(des,point,length,EColor16MA);
420 for(TInt i=0; i<des.Length(); i++)
424 INFO_PRINTF1(_L("Clipping failure outside!\n"));
425 INFO_PRINTF2(_L("Graphics operation: %d\n"),iGopNum);
426 INFO_PRINTF5(_L("x=%d, y=%d, length=%d, height=%d\n"),x,y,length,height);
427 INFO_PRINTF3(_L("Index=%d, Found=%x, Expected=0xFF\n"),i,des[i]);
438 void CTClip::CheckInside(const TRect& aClip,const TRect& aRect)
440 const TInt length=aClip.Width();
441 const TInt unOffsetX=-(aRect.iBr.iX/2);
442 #if defined(__X86GCC__) || defined(__MARM__)
443 const TInt KMaxLinesToPrint=2;
445 const TInt KMaxLinesToPrint=10;
448 HBufC8* unBuf = HBufC8::NewL(length * 4);
449 HBufC8* clBuf = HBufC8::NewL(length * 4);
451 TPtr8 unDes = unBuf->Des();
452 TPtr8 clDes = clBuf->Des();
455 for (TUint yy=aClip.iTl.iY; yy<aClip.iBr.iY; yy++)
457 TPoint unPoint(aClip.iTl.iX+unOffsetX, yy);
458 TPoint clPoint(aClip.iTl.iX, yy);
462 iDev->GetScanLine(unDes,unPoint,length,EColor16MA);
463 iDev->GetScanLine(clDes,clPoint,length,EColor16MA);
465 TInt different = unDes.Compare(clDes);
468 if (linesDiffs++<KMaxLinesToPrint)
473 const TInt KMaxNumBytesToLog=14;
474 TBuf<8*KMaxNumBytesToLog> buf1,buf2;
475 TInt end=Min(length,KMaxNumBytesToLog);
479 for (ii=0; ii<end; ++ii)
482 buf1.AppendFormat(KHex,unDes[ii]);
483 if (unDes[ii]!=clDes[ii])
485 buf2.AppendFormat(KHex,clDes[ii]);
489 { //Show each pixel as |......| on the 2nd line if it matches
506 _LIT(KLog,"ClipRect (%d,%d,%d,%d) Row=%d (First %d of %d pixels shown, only differing values shown on comparison line)");
507 buf.Format(KLog,aClip.iTl.iX,aClip.iTl.iY,aClip.iBr.iX,aClip.iBr.iY,yy,end,aClip.Width());
514 _LIT(KLog,"ClipRect (%d,%d,%d,%d) Row=%d (First %d of %d pixels all match)");
515 buf.Format(KLog,aClip.iTl.iX,aClip.iTl.iY,aClip.iBr.iX,aClip.iBr.iY,yy,end,aClip.Width());
523 _LIT(KLog,"Clipping failure inside! Graphics operation: %d Lines With Diffs: %d/%d");
524 INFO_PRINTF4(KLog,iGopNum,linesDiffs,aClip.iBr.iY-aClip.iTl.iY);
526 if (!Step()->IgnoreDiffs())
533 void CTClip::DrawToScreen(TRegion& clip_reg,TRect r)
537 halfWid.iBr.iX=halfWid.iBr.iX/2;
538 iCon->SetClippingRect(halfWid);
540 iCon->CancelClippingRect();
541 iCon->SetClippingRegion(&clip_reg);
542 iCon->SetOrigin(TPoint(r.iBr.iX/2,0));
544 iCon->CancelClippingRegion();
545 iCon->SetOrigin(TPoint(0,0));
548 void CTClip::DrawToScreen(const TRect& cliprect,TRect r)
552 halfWid.iBr.iX=halfWid.iBr.iX/2;
553 iCon->SetClippingRect(halfWid);
555 iCon->SetClippingRect(cliprect);
556 iCon->SetOrigin(TPoint(r.iBr.iX/2,0));
558 iCon->CancelClippingRect();
559 iCon->SetOrigin(TPoint(0,0));
562 void CTClip::DoDraw(TRect r,TBool clipped)
569 iCon->Plot(TPoint(r.iBr.iX/6-10,r.iBr.iY/3-10));
570 iCon->Plot(TPoint(r.iBr.iX/6,r.iBr.iY/3));
573 p.SetXY(r.iBr.iX/2-1,r.iBr.iY+1);
577 p.SetXY(r.iBr.iX/2-1,r.iBr.iY+1);
578 iCon->SetPenStyle(CGraphicsContext::EDottedPen);
582 p.SetXY(r.iBr.iX/2-1,r.iBr.iY+1);
583 iCon->SetPenStyle(CGraphicsContext::EDashedPen);
587 p.SetXY(r.iBr.iX/2-11,r.iBr.iY-9);
588 iCon->SetPenSize(TSize(5,5));
592 sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY);
593 p.SetXY(r.iBr.iX/2-1,0);
594 iCon->DrawArc(sh,z,p);
597 sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY);
598 p.SetXY(r.iBr.iX/2-1,0);
599 iCon->SetPenStyle(CGraphicsContext::EDottedPen);
600 iCon->DrawArc(sh,z,p);
603 sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY);
606 case EVerticalHatchRect:
607 sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY);
608 iCon->SetBrushStyle(CGraphicsContext::EVerticalHatchBrush);
611 case EForwardDiagonalHatchRect:
612 sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY);
613 iCon->SetBrushStyle(CGraphicsContext::EForwardDiagonalHatchBrush);
616 case EHorizontalHatchRect:
617 sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY);
618 iCon->SetBrushStyle(CGraphicsContext::EHorizontalHatchBrush);
621 case ERearwardDiagonalHatchRect:
622 sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY);
623 iCon->SetBrushStyle(CGraphicsContext::ERearwardDiagonalHatchBrush);
626 case ESquareCrossHatchRect:
627 sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY);
628 iCon->SetBrushStyle(CGraphicsContext::ESquareCrossHatchBrush);
631 case EDiamondCrossHatchRect:
632 sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY);
633 iCon->SetBrushStyle(CGraphicsContext::EDiamondCrossHatchBrush);
636 case EVerticalHatchEllipse:
637 sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY);
638 iCon->SetBrushStyle(CGraphicsContext::EVerticalHatchBrush);
639 iCon->DrawEllipse(sh);
641 case EForwardDiagonalHatchEllipse:
642 sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY);
643 iCon->SetBrushStyle(CGraphicsContext::EForwardDiagonalHatchBrush);
644 iCon->DrawEllipse(sh);
646 case EHorizontalHatchEllipse:
647 sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY);
648 iCon->SetBrushStyle(CGraphicsContext::EHorizontalHatchBrush);
649 iCon->DrawEllipse(sh);
651 case ERearwardDiagonalHatchEllipse:
652 sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY);
653 iCon->SetBrushStyle(CGraphicsContext::ERearwardDiagonalHatchBrush);
654 iCon->DrawEllipse(sh);
656 case ESquareCrossHatchEllipse:
657 sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY);
658 iCon->SetBrushStyle(CGraphicsContext::ESquareCrossHatchBrush);
659 iCon->DrawEllipse(sh);
661 case EDiamondCrossHatchEllipse:
662 sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY);
663 iCon->SetBrushStyle(CGraphicsContext::EDiamondCrossHatchBrush);
664 iCon->DrawEllipse(sh);
667 sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY);
668 iCon->SetPenStyle(CGraphicsContext::EDottedPen);
672 sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY);
676 iCon->CopyRect(TPoint(r.iBr.iX/2,0),sh);
682 sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY);
683 iCon->DrawEllipse(sh);
686 sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY);
687 iCon->SetPenStyle(CGraphicsContext::EDottedPen);
688 iCon->DrawEllipse(sh);
691 sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY);
692 p.SetXY(r.iBr.iX>>2,r.iBr.iY>>4);
693 iCon->DrawRoundRect(sh,p.AsSize());
695 case EDottedRoundRect:
696 sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY);
697 p.SetXY(r.iBr.iX>>2,r.iBr.iY>>4);
698 iCon->SetPenStyle(CGraphicsContext::EDottedPen);
699 iCon->DrawRoundRect(sh,p.AsSize());
702 sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY);
703 p.SetXY(r.iBr.iX/2-1,0);
704 iCon->DrawPie(sh,z,p);
707 sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY);
708 p.SetXY(r.iBr.iX/2-1,0);
709 iCon->SetPenStyle(CGraphicsContext::EDottedPen);
710 iCon->DrawPie(sh,z,p);
714 CArrayFixFlat<TPoint>* t=new CArrayFixFlat<TPoint>(3);
715 TPoint temp(r.iBr.iX/6,r.iBr.iY/4);
716 TRAPD(errCode, t->AppendL(temp));
717 if(errCode != KErrNone)
721 temp.SetXY(r.iBr.iX/12,r.iBr.iY/2);
722 TRAP(errCode, t->AppendL(temp));
723 if(errCode != KErrNone)
727 temp.SetXY(r.iBr.iX/4,r.iBr.iY/2);
728 TRAP(errCode, t->AppendL(temp));
729 if(errCode != KErrNone)
733 iCon->DrawPolygon(t);
739 iCon->UseFont(iFont);
740 p.SetXY(r.iTl.iX+1, r.iTl.iY+1);
741 iCon->DrawText(testtext,p);
746 iCon->UseFont(iFont);
747 p.SetXY(r.iTl.iX+1, r.iTl.iY+1);
748 TInt ascent=iFont->AscentInPixels();
749 TInt height=iFont->HeightInPixels();
750 TInt width=iFont->TextWidthInPixels(testtext);
751 TRect box(p.iX,p.iY,p.iX+width,p.iY+height);
752 iCon->DrawText(testtext,box,ascent);
755 case EDrawTextVertical:
756 iCon->UseFont(iFont);
757 p.SetXY(r.iBr.iX/6-13,r.iBr.iY/3+5);
760 iCon->DrawTextVertical(testtext,p,EFalse);
763 iCon->UseFont(iLargeFont);
764 p.SetXY(r.iBr.iX/6-13,r.iBr.iY/3+5);
765 iCon->DrawText(largetesttext,p);
769 iCon->UseFont(iLargeFont);
770 p.SetXY(r.iTl.iX, r.iTl.iY);
771 TInt ascent=iLargeFont->AscentInPixels();
772 TInt height=iLargeFont->HeightInPixels();
773 TInt width=iLargeFont->TextWidthInPixels(largetesttext);
774 TRect box(p.iX, p.iY, p.iX+width, p.iY+height);
775 iCon->DrawText(largetesttext,box,ascent);
778 case ELargeTextVertical:
779 iCon->UseFont(iLargeFont);
780 p.SetXY(r.iTl.iX+1, r.iTl.iY+1);
781 iCon->DrawTextVertical(largetesttext,p,EFalse);
784 sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY);
785 iCon->SetPenStyle(CGraphicsContext::EDottedPen);
786 iCon->SetBrushStyle(CGraphicsContext::EPatternedBrush);
790 sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY);
793 iCon->SetPenStyle(CGraphicsContext::ESolidPen);
794 iCon->SetBrushStyle(CGraphicsContext::ESolidBrush);
795 iCon->BitBlt(z,*iCon,sh);
799 iCon->SetPenStyle(CGraphicsContext::EDottedPen);
800 iCon->SetBrushStyle(CGraphicsContext::EPatternedBrush);
805 sh.SetRect(0,0,r.iBr.iX/2-1,r.iBr.iY);
806 iCon->DrawBitmap(sh,iBitmap);
809 p.SetXY(r.iBr.iX/6-40,r.iBr.iY/3-20);
810 sh.SetRect(p,TSize(iBitmap->SizeInPixels().iWidth/2,iBitmap->SizeInPixels().iHeight/2));
811 iCon->DrawBitmap(sh,iBitmap);
814 p.SetXY(r.iTl.iX+1, r.iTl.iY+1);
815 iCon->BitBlt(p,iBitmap64K);
818 p.SetXY(r.iTl.iX+1, r.iTl.iY+1);
819 sh.SetRect(p,iBitmap64K->SizeInPixels());
820 iCon->DrawBitmap(sh,iBitmap);
823 p.SetXY(r.iTl.iX+1, r.iTl.iY+1);
824 sh.SetRect(TPoint(0,0),iBitmap64K->SizeInPixels());
825 iCon->BitBltMasked(p,iBitmap,sh,iBitmap,ETrue);
827 case EBitBltMaskedBinary:
828 p.SetXY(r.iTl.iX+1, r.iTl.iY+1);
829 sh.SetRect(TPoint(0,0),iBitmap64K->SizeInPixels());
830 iCon->SetBrushStyle(CGraphicsContext::ENullBrush);
831 iCon->BitBltMasked(p,iBitmap,sh,iBitmapMask,EFalse);
833 case EBitBltMaskedBinary64K:
834 p.SetXY(r.iTl.iX+1, r.iTl.iY+1);
835 sh.SetRect(TPoint(0,0),iBitmap64K->SizeInPixels());
836 iCon->SetBrushStyle(CGraphicsContext::ENullBrush);
837 iCon->BitBltMasked(p,iBitmap64K,sh,iBitmapMask,EFalse);
839 case EBitBltMaskedBinary16MU:
840 p.SetXY(r.iTl.iX+1, r.iTl.iY+1);
841 sh.SetRect(TPoint(0,0),iBitmap16MU->SizeInPixels());
842 iCon->SetBrushStyle(CGraphicsContext::ENullBrush);
843 iCon->BitBltMasked(p,iBitmap16MU,sh,iBitmapMask,EFalse);
845 case EBitBltMaskedBinary16MA:
846 p.SetXY(r.iTl.iX+1, r.iTl.iY+1);
847 sh.SetRect(TPoint(0,0),iBitmap16MA->SizeInPixels());
848 iCon->SetBrushStyle(CGraphicsContext::ENullBrush);
849 iCon->BitBltMasked(p,iBitmap16MA,sh,iBitmapMask,EFalse);
851 case EBitBltMaskedAlpha:
852 p.SetXY(r.iTl.iX+1, r.iTl.iY+1);
853 sh.SetRect(TPoint(0,0),iBitmap64K->SizeInPixels());
854 iCon->SetBrushStyle(CGraphicsContext::ENullBrush);
855 iCon->BitBltMasked(p,iBitmap,sh,iBitmapAlpha,EFalse);
857 case EBitBltMaskedAlpha64K:
858 p.SetXY(r.iTl.iX+1, r.iTl.iY+1);
859 sh.SetRect(TPoint(0,0),iBitmap64K->SizeInPixels());
860 iCon->SetBrushStyle(CGraphicsContext::ENullBrush);
861 iCon->BitBltMasked(p,iBitmap64K,sh,iBitmapAlpha,EFalse);
863 case EBitBltMaskedAlpha16MU:
864 p.SetXY(r.iTl.iX+1, r.iTl.iY+1);
865 sh.SetRect(TPoint(0,0),iBitmap16MU->SizeInPixels());
866 iCon->SetBrushStyle(CGraphicsContext::ENullBrush);
867 iCon->BitBltMasked(p,iBitmap16MU,sh,iBitmapAlpha,EFalse);
869 case EBitBltMaskedAlpha16MA:
870 p.SetXY(r.iTl.iX+1, r.iTl.iY+1);
871 sh.SetRect(TPoint(0,0),iBitmap16MA->SizeInPixels());
872 iCon->SetBrushStyle(CGraphicsContext::ENullBrush);
873 iCon->BitBltMasked(p,iBitmap16MA,sh,iBitmapAlpha,EFalse);
876 iCon->SetPenStyle(CGraphicsContext::ESolidPen);
877 iCon->SetPenSize(TSize(1,1));
878 iCon->SetBrushStyle(CGraphicsContext::ESolidBrush);
882 CTClipStep::CTClipStep() :iIgnoreDiffs(EFalse)
884 SetTestStepName(KTClipStep);
887 CTClipStep::~CTClipStep()
889 DestroyTestEnvironment();
892 inline TBool CTClipStep::IgnoreDiffs()
897 CTGraphicsBase* CTClipStep::CreateTestL()
899 _LIT(KLog,"Create CTClip");
901 return new (ELeave) CTClip(this, iTestAppNo, iDev, iGc, iBmp, iFont, iLargeFont);
904 void CTClipStep::TestSetupL()
907 RFbsSession::Connect();
909 CreateTestEnvironment();
912 void CTClipStep::TestClose()
914 DestroyTestEnvironment();
915 RFbsSession::Disconnect();
918 TInt CTClipStep::CreateScreenDevice(TDisplayMode aMode)
920 TRAPD(err,iDev=CFbsScreenDevice::NewL(KNullDesC,aMode));
921 const TPtrC modeName=CTGraphicsBase::ColorModeName(aMode);
924 _LIT(KLog,"Sucessfully created Screen Device, mode %S");
925 INFO_PRINTF2(KLog,&modeName);
929 if (err==KErrNotSupported)
931 _LIT(KLog,"Screen Device with mode %S not available on this device");
932 INFO_PRINTF2(KLog,&modeName);
936 _LIT(KLog,"Failed to created Screen Device with mode %S err=%d");
937 INFO_PRINTF3(KLog,&modeName,err);
943 void CTClipStep::CreateTestEnvironment()
946 //This test will fail if any display mode other than EColor64K, EColor256, EGray256
948 TInt ret=CreateScreenDevice(EColor64K);
950 ret=CreateScreenDevice(EColor256);
952 ret=CreateScreenDevice(EGray256);
954 ret=CreateScreenDevice(EColor16MU);
956 ret=CreateScreenDevice(EColor16M);
958 ret=CreateScreenDevice(EColor4K);
961 ret=CreateScreenDevice(EColor16MA);
965 _LIT(KLog,"Ignore Diffs set to %d (ETrue?)");
966 INFO_PRINTF2(KLog,iIgnoreDiffs);
971 ret=CreateScreenDevice(EColor16MAP);
975 _LIT(KLog,"Ignore Diffs set to %d (ETrue?)");
976 INFO_PRINTF2(KLog,iIgnoreDiffs);
980 User::Panic(_L("Device not created"),ret);
981 iDev->ChangeScreenDevice(NULL);
983 ret=iDev->CreateContext(iGc);
985 User::Panic(_L("Context not created"),KErrGeneral);
988 TFontSpec fs(_L("Swiss"),12);
989 ret=iDev->GetNearestFontToDesignHeightInPixels(iFont,fs);
991 User::Panic(_L("Font not created"),KErrGeneral);
994 ret=iDev->GetNearestFontToDesignHeightInPixels(iLargeFont,fs);
996 User::Panic(_L("Font not created"),KErrGeneral);
1000 User::Panic(_L("Bitmap not created"),KErrGeneral);
1004 TInt ret=iBmp->Load(_L("z:\\system\\data\\tbmp.mbm"),EMbmTbmpTbmp,EFalse);
1006 User::Panic(_L("Bitmap not loaded"),ret);
1010 TInt ret=iBmp->LoadAndCompress(_L("z:\\system\\data\\tbmp.mbm"),EMbmTbmpTbmp,EFalse);
1012 User::Panic(_L("Bitmap not loaded"),ret);
1017 void CTClipStep::DestroyTestEnvironment()
1027 iDev->ReleaseFont(iFont);
1032 iDev->ReleaseFont(iLargeFont);
1041 CTClip2Step::CTClip2Step() :
1045 SetTestStepName(KTClip2Step);