sl@0: // Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // sl@0: sl@0: /** sl@0: @file sl@0: @test sl@0: @internalComponent - Internal Symbian test code sl@0: */ sl@0: sl@0: #ifndef __TREDRAW_H__ sl@0: #define __TREDRAW_H__ sl@0: sl@0: #include sl@0: #include sl@0: #include "../tlib/testbase.h" sl@0: #include "AUTO.H" sl@0: #include "TScreenModeScaling.h" sl@0: #include "TGraphicsHarness.h" sl@0: sl@0: class CTRedrawTest; sl@0: sl@0: /** sl@0: * Abstract base class to draw a pattern into a window. sl@0: * sl@0: * This provides a default Draw() implementation which sl@0: * DOES NOT set the clipping region before drawing. sl@0: */ sl@0: class CRedrawWindow : public CTWin sl@0: { sl@0: friend class CTRedrawTest; sl@0: public: sl@0: enum TDrawPattern sl@0: { sl@0: EDrawGraphPaperlHatched = 0, sl@0: EDrawSlantingHatched, sl@0: EDrawCenteredRectangle sl@0: }; sl@0: public: sl@0: CRedrawWindow(CTRedrawTest* aTest); sl@0: ~CRedrawWindow(); sl@0: public: sl@0: /* sl@0: * Draw the window, counting the number of calls. sl@0: * @post DrawRequests() returns a value increased by 1. sl@0: */ sl@0: virtual void Reset(); sl@0: virtual void PrepareInvalidation(const TRect& aRect) = 0; sl@0: virtual void PerformInvalidation() = 0; sl@0: //Virtual function from CTBaseWin sl@0: void Draw(); sl@0: public: sl@0: void ActivateAndDraw(TInt aPattern); sl@0: void DrawPattern(TInt aPattern); sl@0: void VisibleRegion(RRegion& aRegion); sl@0: void ValidateAndClear(); sl@0: void ActivateAndDraw(TInt aPattern,TRegion* aRegion); sl@0: TInt DrawRequests() const; sl@0: protected: sl@0: void ReceivedDrawRequest(); sl@0: TPoint iOffset; sl@0: RRegion iInvalid; sl@0: CTRedrawTest *iTest; sl@0: private: sl@0: TInt iDrawRequests; sl@0: }; sl@0: sl@0: /** sl@0: * Concrete class to draw a pattern into a window. sl@0: * sl@0: */ sl@0: class CReferenceComparisonRedrawWindow : public CRedrawWindow sl@0: { sl@0: public: sl@0: CReferenceComparisonRedrawWindow(CTRedrawTest* aTest); sl@0: public: sl@0: // from CRedrawWindow sl@0: void PrepareInvalidation(const TRect& aRect); sl@0: void PerformInvalidation(); sl@0: }; sl@0: sl@0: class CRedrawWindow2 : public CRedrawWindow sl@0: { sl@0: public: sl@0: CRedrawWindow2(CTRedrawTest* aTest); sl@0: public: sl@0: //Virtual function from CTBaseWin overridden in CRedrawWindow sl@0: void Draw(); sl@0: //Virtual function from CRedrawWindow sl@0: void Reset(); sl@0: // from CRedrawWindow sl@0: void PrepareInvalidation(const TRect& aRect); sl@0: void PerformInvalidation(); sl@0: private: sl@0: TBool iClipped; sl@0: }; sl@0: sl@0: class CRedrawWindow3 : public CRedrawWindow sl@0: { sl@0: public: sl@0: CRedrawWindow3(CTRedrawTest* aTest); sl@0: public: sl@0: //Virtual function from CTBaseWin overridden in CRedrawWindow sl@0: void Draw(); sl@0: // from CRedrawWindow sl@0: void PrepareInvalidation(const TRect& aRect); sl@0: void PerformInvalidation(); sl@0: public: sl@0: void SetUp1L(TPoint pos,TSize size,CTWinBase* parent,CWindowGc& aGc); sl@0: void Activate(); sl@0: void Redraw(const TRect& aRect); sl@0: protected: sl@0: TBool isActive; sl@0: }; sl@0: sl@0: class CTRedrawOrderWindow : public CTWin sl@0: { sl@0: public: sl@0: CTRedrawOrderWindow(TInt aOrder, CTRedrawTest *aTest); sl@0: static CTRedrawOrderWindow* NewLC(TInt aOrder,CTWinBase* aParent,const TPoint& aPos,const TSize& aSize,CTRedrawTest* aTest); sl@0: inline static TInt RedrawNumber() {return iRedrawNumber;} sl@0: static void ResetRedrawNumber(); sl@0: void Redraw(const TRect& aRect); sl@0: void Draw(); sl@0: private: sl@0: CTRedrawTest* iTest; sl@0: TInt iOrder; sl@0: static TInt iRedrawNumber; sl@0: }; sl@0: sl@0: class CTCheckDefectWin : public CBasicWin sl@0: { sl@0: public: sl@0: static CTCheckDefectWin *NewL(TPoint aPos,TSize aWinSize); sl@0: private: sl@0: CTCheckDefectWin(){} sl@0: }; sl@0: sl@0: class CInvalidRegionChecker : public CBase sl@0: { sl@0: public: sl@0: CInvalidRegionChecker(const CTRedrawTest& aGraphicsTest); sl@0: ~CInvalidRegionChecker(); sl@0: sl@0: TInt CheckInvalidRegions(const CTWindowGroup* aGroup); sl@0: TBool ExcludedWindow(const CTWinBase* aTWinBase) const; sl@0: TInt AddExcludedWindow(const CTWinBase* aExcludedWindow); sl@0: void RemoveExcludedWindow(const CTWinBase* aExcludedWindow); sl@0: private: sl@0: void ProcessWindowGroup(const CTWinBase* aTWinBase); sl@0: void ProcessChildWindow(const CTWinBase* aTWinBase); sl@0: void ProcessWindow(const CTWinBase* aTWinBase); sl@0: private: sl@0: TInt iInvalidRegionCount; sl@0: RPointerArray iExcludedWindowArray; sl@0: const CTRedrawTest& iGraphicsTest; sl@0: }; sl@0: sl@0: class CTRedrawTest : public CTWsGraphicsBase sl@0: { sl@0: public: sl@0: CTRedrawTest(CTestStep* aStep); sl@0: ~CTRedrawTest(); sl@0: void doDestruct(); sl@0: void ConstructL(); sl@0: void CheckRedrawWindows(); sl@0: void ProcessBaseInvalidate(); sl@0: void SetBackground(const TRgb& aRgb); sl@0: void DumpRegion(const TRegion& aRegion); sl@0: inline TInt WinContent(); sl@0: void InvalidateTestWins(const TRect& aRect); sl@0: void MoveInvalidAreaL(); sl@0: void TestGetInvalidRegionL(const CArrayFixFlat* aRectList); sl@0: void GetInvalidRegionTestsL(); sl@0: void CompareRegionsL(const TRegion& aRegion1,const TRegion& aRegion2); sl@0: void Failed(TInt aOrder); sl@0: void CheckOrderL(); sl@0: void TestRect(); sl@0: void CheckDefectINC049554L(); sl@0: void CheckDefectPDEF099892L(); sl@0: void CheckOrdinalPositionDefectL(); sl@0: void CheckDefectPDEF117784L(); sl@0: void CheckMMSDefectL(TBool aMoveBlankWindow); sl@0: void ConstructAndSetBlankWinLC(RBlankWindow& aWindow, TSize aSize, TPoint aPoint=TPoint(), sl@0: TRgb aBackgroundColor=TRgb(0,0,0)); sl@0: void ConstructWindowLC(RWindow& aWindow, TSize aSize, TPoint aPoint=TPoint(), sl@0: TRgb aBackgroundColor=TRgb(255,255,255), TBool aTransparencyByAlpha=EFalse, sl@0: TDisplayMode aDisplayMode=EColor64K); sl@0: void ActivateAndSetGc(CWindowGc& aGc, RWindow& aWindow, CGraphicsContext::TBrushStyle aBrushStyle=CGraphicsContext::ESolidBrush, TRgb aBrushColor=TRgb(0,0,0), sl@0: CGraphicsContext::TPenStyle aPenStyle=CGraphicsContext::ENullPen, TRgb aPenColor=TRgb(0,0,0)); sl@0: void DrawWin(CWindowGc& aGc, RWindow& aWin, TSize winSize, TRgb aRectColor1, TRgb aRectColor2, TInt aNewOrdinalPos=0, RWindow* aWinToMove=NULL, TBool aDrawAllPixels=EFalse); sl@0: enum TRedrawCheckType sl@0: { sl@0: ECheckRedrawActiveObjectOnly, sl@0: ECheckRedrawActiveObjectAndInvalidRegions sl@0: }; sl@0: TInt WaitForRedrawsToFinish(TRedrawCheckType aRedrawCheckType); sl@0: protected: sl@0: //from CTGraphicsStep sl@0: virtual void RunTestCaseL(TInt aCurTestCase); sl@0: private: sl@0: void ValidateAndClear(TestWindow *aWin); sl@0: private: sl@0: TSize iWinSize; sl@0: TBool iDoCheck; sl@0: TInt iRedrawNo; sl@0: CReferenceComparisonRedrawWindow *iBaseRedrawWin; sl@0: CRedrawWindow2 *iTestRedrawWin; sl@0: CBlankWindow *iBaseChildWin; sl@0: CBlankWindow *iTestChildWin; sl@0: TInt iDrawRequestsFromTestWindow; sl@0: TInt iWinContent; sl@0: CInvalidRegionChecker *iInvalidRegionChecker; sl@0: }; sl@0: sl@0: class CTRedrawTestStep : public CTGraphicsStep sl@0: { sl@0: public: sl@0: CTRedrawTestStep(); sl@0: protected: sl@0: //from CTGraphicsStep sl@0: virtual CTGraphicsBase* CreateTestL(); sl@0: }; sl@0: sl@0: _LIT(KTRedrawTestStep,"TRedrawTest"); sl@0: sl@0: sl@0: #endif