--- a/windowing/windowserver/tauto/TREDRSTR.CPP Fri Jun 11 14:58:47 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,3947 +0,0 @@
-// 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:
-// Test redraw storing
-// Tests Storing the Redraw command mechanism in the window server.
-// The first time a window is redrawn its commands are stored. When
-// the window needs to be redrawn, the stored commands will be used
-// rather than issue a redraw request to the client.
-// The principle behind this test is to do lots of different types of drawing to a window,
-// invalidate the window and test that no redrawing occurred, instead the stored commands
-// should be used to generate the content of the window.
-//
-//
-
-/**
- @file
- @test
- @internalComponent - Internal Symbian test code
-*/
-
-#include "TREDRSTR.H"
-#include "colorblender.h"
-
-//#define LOGGING on
-
-_LIT(KColorUnmatchedFormat, "Check failed, expected color value: 0x%08x, got: 0x%08x");
-#define TEST_COLOR_MATCH(aExpected, aActual) \
- TEST(aExpected == aActual); \
- if(aExpected != aActual) \
- LOG_MESSAGE3(KColorUnmatchedFormat, aExpected.Value(), aActual.Value())
-
-/*CPartialRedrawWin*/
-void CPartialRedrawWin::Init()
- {
- iClientDrawn = EFalse;
- iClientCanDraw = ETrue;
- Win()->SetRequiredDisplayMode(EColor16MA);
- Win()->SetTransparencyAlphaChannel();
- Win()->SetBackgroundColor(TRgb(127,127,127,0));
- }
-
-void CPartialRedrawWin::Draw()
- {
- DoDraw(*iGc);
- }
-
-void CPartialRedrawWin::DrawToBmp(CGraphicsContext& aGc)
- {
- DoDraw(aGc);
- }
-
-void CPartialRedrawWin::DoDraw(CGraphicsContext& aGc)
- {
- if(!iClientCanDraw) return;
- iClientDrawn = ETrue;
- CPartialRedrawWin::DrawRects(aGc, iSize, TPoint(0,0), ETrue, EPartialRedraw_Unknown);
- }
-
-/*static*/
-void CPartialRedrawWin::DrawRects(CGraphicsContext& aGc, TSize aSize, TPoint aPosition,
- TBool aIsFullRedraw, TPartialRedrawType aPartialRedrawType)
- {
- aGc.SetPenStyle(CGraphicsContext::ESolidPen);
- aGc.SetPenColor(TRgb::Gray256(0));
- aGc.SetBrushStyle(CGraphicsContext::ESolidBrush);
- if(aIsFullRedraw)
- {
- aGc.SetBrushColor(TRgb(200,200,200,127));
- aGc.DrawRect(TRect(aPosition, aSize));
- }
- else if (aPartialRedrawType!=EPartialRedraw_PreserveStoredCmds)
- {
- aGc.SetBrushColor(TRgb(200,200,200,127)); // same color as original background.
- aGc.SetPenStyle(CGraphicsContext::ENullPen);
- aGc.DrawRect(TRect(TPoint(10,10) + aPosition, aSize - TSize(20,20)));
- aGc.SetPenStyle(CGraphicsContext::ESolidPen);
- aGc.SetPenColor(TRgb::Gray256(0));
- }
- TSize r1 = TSize(aSize.iWidth/3, aSize.iHeight/5);
- TSize r2 = TSize(aSize.iWidth/9, 2*aSize.iHeight/3);
- aGc.SetBrushColor(TRgb(255, 0, 0, 127));
- aGc.DrawEllipse(TRect(TPoint(aSize.iWidth/3, aSize.iHeight/5)+aPosition, r1));
- aGc.SetBrushColor(TRgb(0, 255, 0, 127));
- aGc.DrawEllipse(TRect(TPoint(aSize.iWidth/3, 3*aSize.iHeight/5)+aPosition, r1));
- aGc.SetBrushColor(TRgb(0, 0, 255, 127));
- aGc.DrawEllipse(TRect(TPoint(4*aSize.iWidth/9, aSize.iHeight/6)+aPosition, r2));
- }
-
-void CPartialRedrawWin::DrawPartial(TPartialRedrawType aPartialRedrawType)
- {
- TRect rect = TRect(TPoint(10,10), iSize - TSize(20,20));
- Invalidate(rect);
- Win()->BeginRedraw(rect);
- iGc->Activate(*Win());
- CPartialRedrawWin::DrawRects(*iGc, iSize, TPoint(0,0), EFalse, aPartialRedrawType);
- iGc->Deactivate();
- Win()->EndRedraw();
- }
-void CPartialRedrawWin::RedrawSubRectWithBitmapL(TRgb aBitmapColour)
- {
- TInt bitmapWidth = Win()->Size().iWidth - 20;
- TInt bitmapHeight = Win()->Size().iHeight - 20;
- TSize bitmapSize(bitmapWidth, bitmapHeight);
-
- CFbsBitmap* fbsBitmap = new(ELeave) CFbsBitmap();
- CleanupStack::PushL(fbsBitmap);
- User::LeaveIfError(fbsBitmap->Create(bitmapSize, EColor16MU));
-
- // ensure colour is opaque
- aBitmapColour.SetAlpha(255);
-
- // draw on the bitmap
- TBitmapUtil bmpUtil(fbsBitmap);
- bmpUtil.Begin(TPoint(0, 0));
- TInt row, col;
- for(row = 0; row < bitmapWidth; ++row)
- {
- bmpUtil.SetPos(TPoint(row, 0));
- for(col = 0; col < bitmapHeight; ++col)
- { // diagonal stripes
- if ( ((col + row) % 8) < 4 )
- { // colour
- bmpUtil.SetPixel(aBitmapColour.Color16M());
- }
- else
- { // semi-transparent white
- TRgb white(255, 255, 255, 128);
- bmpUtil.SetPixel(white.Color16M());
- }
- bmpUtil.IncYPos();
- }
- }
- bmpUtil.End();
-
- // send bitmap to screen
- TRect rect = TRect(TPoint(10,10), bitmapSize);
- Invalidate(rect);
- Win()->BeginRedraw(rect);
- iGc->Activate(*Win());
- iGc->DrawBitmap(rect, fbsBitmap);
- iGc->Deactivate();
- Win()->EndRedraw();
- CleanupStack::PopAndDestroy(fbsBitmap);
- }
-
-/* CResetRedrawStoreWin */
-
-const TInt KResetRedrawMaxAnimState=4;
-
-void CResetRedrawStoreWin::PreSetSize(const TSize &aSize)
-// Sets the size variable so draw code using it will use the new size
-// before the window has actually been resized
- {
- iSize=aSize;
- }
-
-void CResetRedrawStoreWin::Draw()
- {
- DoDraw(*iGc);
- }
-
-void CResetRedrawStoreWin::DoDraw(CGraphicsContext& aGc) const
- {
- aGc.SetPenStyle(CGraphicsContext::ESolidPen);
- aGc.SetPenColor(KRgbBlack);
- aGc.SetBrushStyle(CGraphicsContext::ESolidBrush);
- aGc.SetBrushColor(TRgb(200,200,200,127));
- aGc.DrawRect(TRect(iSize));
- TSize r1(iSize.iWidth/3, iSize.iHeight/5);
- TSize r2(iSize.iWidth/9, 2*iSize.iHeight/3);
- aGc.SetBrushColor(TRgb(255, 0, 0, 127));
- aGc.DrawEllipse(TRect(TPoint(iSize.iWidth/3, iSize.iHeight/5), r1));
- aGc.SetBrushColor(TRgb(0, 255, 0, 127));
- aGc.DrawEllipse(TRect(TPoint(iSize.iWidth/3, 3*iSize.iHeight/5), r1));
- aGc.SetBrushColor(TRgb(0, 0, 255, 127));
- aGc.DrawEllipse(TRect(TPoint(4*iSize.iWidth/9, iSize.iHeight/6), r2));
- DoDrawAnim(aGc);
- }
-
-TRect CResetRedrawStoreWin::AnimRect() const
- {
- if (iUpdateInRedraw)
- {
- TInt row=iAnimState/iSize.iWidth;
- TInt col=iAnimState-row*iSize.iWidth;
- return(TRect(col,row,col+4,row+4));
- }
- return(TRect(iSize.iWidth/6,iSize.iHeight/4,iSize.iWidth*5/6,iSize.iHeight*3/4));
- }
-
-void CResetRedrawStoreWin::DoDrawAnim(CGraphicsContext& aGc) const
- {
- if (iAnimState>0)
- {
- aGc.SetBrushColor(KRgbBlue);
- aGc.SetPenStyle(CGraphicsContext::ENullPen);
- aGc.SetBrushStyle(CGraphicsContext::ESolidBrush);
- TInt animColState=iAnimState%KResetRedrawMaxAnimState;
- TRgb animCol(255*animColState/KResetRedrawMaxAnimState,0,255*(KResetRedrawMaxAnimState-animColState)/KResetRedrawMaxAnimState);
- aGc.SetBrushColor(animCol);
- aGc.DrawRect(AnimRect());
- }
- }
-
-CResetRedrawStoreWin::~CResetRedrawStoreWin()
- {
- delete iExtraGc;
- }
-
-void CResetRedrawStoreWin::SetUpdateInRedraw(TBool aUpdateInRedraw)
- {
- iUpdateInRedraw=aUpdateInRedraw;
- }
-
-void CResetRedrawStoreWin::SetKeepGcActive(TBool aState)
- {
- if (iKeepGcActive!=aState)
- {
- iKeepGcActive=aState;
- if (iKeepGcActive)
- {
- iExtraGc=new(ELeave) CWindowGc(TheClient->iScreen);
- iExtraGc->Construct();
- iExtraGc->Activate(*Win());
- }
- else
- {
- iExtraGc->Deactivate();
- delete iExtraGc;
- iExtraGc=NULL;
- }
- }
- }
-
-TBool CResetRedrawStoreWin::Failed() const
- {
- return iFailed;
- }
-
-void CResetRedrawStoreWin::UpdateAnim(TInt aSteps)
- {
- TRect oldAnimRect(AnimRect());
- iAnimState+=aSteps;
- if (iUpdateInRedraw)
- {
- if (iAnimState>=(iSize.iWidth*iSize.iHeight))
- {
- iFailed=ETrue;
- }
- }
- else if (iAnimState>KResetRedrawMaxAnimState)
- {
- iAnimState-=KResetRedrawMaxAnimState;
- }
- CWindowGc *gc=Gc();
- if (iUpdateInRedraw)
- {
- Win()->Invalidate(oldAnimRect);
- Win()->BeginRedraw(oldAnimRect);
- if (iKeepGcActive)
- {
- DoDraw(*iExtraGc);
- }
- else
- {
- gc->Activate(*Win());
- DoDraw(*gc);
- gc->Deactivate();
- }
- Win()->EndRedraw();
- TRect animRect=AnimRect();
- Win()->Invalidate(animRect);
- Win()->BeginRedraw(animRect);
- }
- if (iKeepGcActive)
- DoDrawAnim(*iExtraGc);
- else
- {
- gc->Activate(*Win());
- DoDrawAnim(*gc);
- gc->Deactivate();
- }
- if (iUpdateInRedraw)
- Win()->EndRedraw();
- }
-
-void CTRedrawStoring::GetTestWinSizeAndPos(TInt aWinIndex, TPoint& aPos, TSize& aSize) const
- {
- switch(aWinIndex)
- {
- case 0:
- // Centered window half the width of the parent window
- aSize.iWidth=iWinSize.iWidth/2;
- aSize.iHeight=iWinSize.iHeight/2;
- aPos.iX=iWinSize.iWidth/4;
- aPos.iY=iWinSize.iHeight/4;
- break;
- case 1:
- // 1/3rd parent window size window positioned 1/3rd spare size in from the bottom right
- aSize.iWidth=iWinSize.iWidth/3;
- aSize.iHeight=iWinSize.iHeight/3;
- aPos.iX=(iWinSize.iWidth-aSize.iWidth)*2/3;
- aPos.iY=(iWinSize.iHeight-aSize.iHeight)*2/3;
- break;
- }
- }
-
-/*CRedrawStoreWin*/
-
-void CRedrawStoreWin::Draw()
- {
- if (iTest->iQueueTest)
- iDrawOrder=iTest->iDrawOrder++;
- iTest->DoDrawingL(iGc);
- }
-
-
-/*CNoDrawWin*/
-
-void CNoDrawWin::Draw()
- {
- //Deliberately have no drawing
- }
-
-/*CBitmapMaskedWin*/
-CBitmapMaskedWin* CBitmapMaskedWin::NewL(CFbsBitmap* aFbsBitmap,CFbsBitmap* aFbsMaskBitmap,
- CWsBitmap* aWsBitmap,CWsBitmap* aWsMaskBitmap,
- TRgb aBackground,TRect aRect,TBool aInvertMask,TBool aWsFbs)
- {
- CBitmapMaskedWin* self=new(ELeave) CBitmapMaskedWin(aFbsBitmap,aFbsMaskBitmap,aWsBitmap,
- aWsMaskBitmap,aRect,aInvertMask,aWsFbs);
- CleanupStack::PushL(self);
- self->ConstructL(*TheClient->iGroup);
- self->AssignGC(*TheClient->iGc);
- self->BaseWin()->SetRequiredDisplayMode(EColor16MU);
- self->Win()->SetBackgroundColor(aBackground);
- CleanupStack::Pop(self);
- return self;
- }
-
-CBitmapMaskedWin::~CBitmapMaskedWin()
- {
- delete iFbsBitmap;
- delete iFbsMaskBitmap;
- delete iWsBitmap;
- if (!iWsFbs)
- {
- delete iWsMaskBitmap;
- }
- }
-
-void CBitmapMaskedWin::SetDestRectSize(const TSize aSize)
- {
- iRect.SetSize(aSize);
- }
-
-void CBitmapMaskedWin::Draw()
- {
- if (iWsFbs)
- {
- TheClient->iGc->DrawBitmapMasked(iRect,iWsBitmap,TRect(iWsBitmap->SizeInPixels()),iWsMaskBitmap,iInvertMask);
- }
- else
- {
- TheClient->iGc->DrawBitmapMasked(iRect,iFbsBitmap,TRect(iFbsBitmap->SizeInPixels()),iFbsMaskBitmap,iInvertMask);
- }
- }
-
-
-/* TESTCASE: DEF095130
- * TITLE: Redraw store for Alpha Channel Transparency.
- * IMPORTANCE: 1
- *
- * ACTION: a. Creates a window disable the redrawstore. Set the Alpha channel
- * Transparency.
- *
- * RESULT: Redraw store should be enabled and should redraw correctly.
- */
-void CTRedrawStoring::DoRedrawStoreAlphaChannelTransTest()
- {
- // Create testwin and disable the redraw store
- // Set alpha transparency and check if redraw store is enabled
- RWindow win(TheClient->iWs);
- CleanupClosePushL(win);
- User::LeaveIfError(win.Construct(*TheClient->iGroup->GroupWin(), ENullWsHandle));
- win.SetExtent(iWinPos, iWinSize);
- win.SetRequiredDisplayMode(EColor256);
- win.EnableRedrawStore(EFalse);
- win.SetTransparencyAlphaChannel();
- TEST(win.IsRedrawStoreEnabled());
- CleanupStack::PopAndDestroy(&win);
-
- // Create a window and disable the redraw store
- // Set alpha transparency and check if redraw store is enabled
- // and check if redraw storing is done correctly
- RWindow wint(TheClient->iWs);
- CleanupClosePushL(wint);
- User::LeaveIfError(wint.Construct(*TheClient->iGroup->GroupWin(), ENullWsHandle));
- wint.SetExtent(iWinPos, iWinSize);
- wint.SetRequiredDisplayMode(iTestDisplayMode);
- wint.SetBackgroundColor(TRgb(255,255,255));
- wint.SetShadowDisabled(ETrue);
- wint.EnableRedrawStore(EFalse);
- wint.SetTransparencyAlphaChannel();
- wint.Activate();
- wint.BeginRedraw();
- TheClient->iGc->Activate(wint);
- DoDrawingL(23,TheClient->iGc,ETrue);
- TheClient->iGc->Deactivate();
- wint.EndRedraw();
-
- DoDrawingL(23,iCheckGc,EFalse);
- iCheckWin->BackedUpWin()->UpdateScreen();
-
- iBlankWin.SetOrdinalPosition(0);
- iBlankWin.SetVisible(ETrue);
- iBlankWin.SetVisible(EFalse);
-
- TheClient->Flush();
- TheClient->WaitForRedrawsToFinish();
- TInt gap = 5;
- const TSize scrSize(TheClient->iScreen->SizeInPixels());
- TEST(TheClient->iScreen->RectCompare(TRect(TPoint(scrSize.iWidth-2*iWinSize.iWidth-gap,0),iWinSize),TRect(TPoint(scrSize.iWidth-iWinSize.iWidth,0),iWinSize)));
- CleanupStack::PopAndDestroy(&wint);
- }
-
-/* TESTCASE: PDEF091091
- * TITLE: Redraw in between begin and end redraw.
- * IMPORTANCE: 1
- *
- * ACTION: Draws some content to test window in its redraw. Then starts drawing
- * to test window by using BeginRedraw and EndRedraw methods. A blank window in
- * front of test wndow is made visible and invisible in between BeginRedraw and
- * EndRedraw.
- *
- *
- * RESULT: When the window is made visible again redraw should ot happen.
- */
-void CTRedrawStoring::DoBeginEndRedraw()
- {
- // Check whether redrawstoring is working
- RedrawWindows();
- iBlankWin.SetVisible(ETrue);
- iBlankWin.SetVisible(EFalse);
- iClientDidDraw = EFalse;
- CheckWindowsMatch();
- TEST(!iClientDidDraw);
- if(iClientDidDraw != 0)
- INFO_PRINTF3(_L("iClientDidDraw Expected value %d Actual value %d"), 0, iClientDidDraw);
-
- // Change the size and make the blank window visible
- // Then start drawing by BeginRedraw and Activating its gc
- // Now make the blank window visible
- iTestWin->Win()->Invalidate();
- iBlankWin.SetSize(TSize(40,40));
- iBlankWin.SetVisible(ETrue);
-
- CWindowGc* gc = iTestWin->Gc();
- RWindow* win = iTestWin->Win();
- win->BeginRedraw();
- gc->Activate(*win);
- gc->SetPenStyle(CGraphicsContext::ESolidPen);
- gc->SetPenColor(TRgb(0,0,0));
- gc->SetPenSize(TSize(1,1));
- gc->DrawLine(TPoint(iWinSize.iWidth,0), TPoint(0, iWinSize.iHeight));
- iBlankWin.SetVisible(EFalse);
- gc->DrawLine(TPoint(0,0), TPoint(iWinSize.iWidth, iWinSize.iHeight));
- iBlankWin.SetVisible(ETrue);
- gc->DrawLine(TPoint(iWinSize.iWidth/2,0), TPoint(iWinSize.iWidth/2, iWinSize.iHeight));
- gc->DrawLine(TPoint(0,iWinSize.iHeight/2), TPoint(iWinSize.iWidth, iWinSize.iHeight/2));
-
- iCheckGc->Clear();
- iCheckGc->SetPenStyle(CGraphicsContext::ESolidPen);
- iCheckGc->SetPenColor(TRgb(0,0,0));
- iCheckGc->SetPenSize(TSize(1,1));
- iCheckGc->DrawLine(TPoint(iWinSize.iWidth/2,0), TPoint(iWinSize.iWidth/2, iWinSize.iHeight));
- iCheckGc->DrawLine(TPoint(0,iWinSize.iHeight/2), TPoint(iWinSize.iWidth, iWinSize.iHeight/2));
- iCheckGc->DrawLine(TPoint(0,0), TPoint(iWinSize.iWidth, iWinSize.iHeight));
- iCheckGc->DrawLine(TPoint(iWinSize.iWidth,0), TPoint(0, iWinSize.iHeight));
- iCheckWin->BackedUpWin()->UpdateScreen();
-
- iBlankWin.SetVisible(EFalse);
-
- // This is to check if any redraw happened in between Begin and EndRedraw
- /* Andy commented this out. I'm not entirely sure what it's doing. We just redrew a window
- while part of it was hidden, and then revealed the hidden part before calling EndRedraw, and
- this is testing that the new draw commands for the region revealed are not processed, or are not
- processed correctly. In the new window server they are processed and the region checked matches
- the test bitmap. */
-// TInt gap = 5;
-// const TSize scrSize(TheClient->iScreen->SizeInPixels());
-// TBool failed=DoCheckRect(TPoint(scrSize.iWidth-2*iWinSize.iWidth-gap,0),TPoint(scrSize.iWidth-iWinSize.iWidth,0),TSize(40,40));
- gc->Deactivate();
- win->EndRedraw();
-/* if (failed)
- {
- TEST(EFalse);
- return;
- } */
-
- // This is to check redraw is done after EndRedraw has called.
- iBlankWin.SetVisible(ETrue);
- iBlankWin.SetVisible(EFalse);
- CheckRect(iTestWin,iCheckWin,TRect(TSize(40,40)),_L("CTRedrawStoring::DoBeginEndRedraw"));
- // Finally bring every thing to normal
- RedrawWindows();
- CheckWindowsMatch();
- iBlankWin.SetSize(iWinSize);
- }
-/**
-@SYMTestCaseID GRAPHICS-WSERV-00XX-0006
-
-@SYMDEF INC087721
-
-@SYMTestCaseDesc Invisible Redraw Storing Test
- Tests the non-redraw storing commands are stored/executed properly,
- in presence of partial redraw commands.
- When a semi-transparent window ST0 sits on top of an opaque window OW1,
- you want the screen to be drawn as OW1, then alpha-blend ST0 once.
- When ST0 is set to invisible, you want the screen to be drawn as OW1,
- i.e. window server to not issue redraw requests for ST0.
- When an opaque window OW2 sites on top of an opaque window OW1,
- you want the screen to be drawn as OW1, then over-print OW2 once.
- When OW2 is set invisible, you want the screen to be drawn as OW1,
- i.e. window server to not issue redraw requests for OW2.
- The reference document specifies that invisible windows do not receive
- any window server events, i.e. no redraw requests.
-
-@SYMTestPriority High
-
-@SYMTestStatus Implemented
-
-@SYMTestActions Makes invisible a window with an invalid area
-
-@SYMTestExpectedResults When the window is made visible again it should display correctly
- */
-void CTRedrawStoring::DoInvisibleRedrawStoreTestL( TBool aUseTransparency )
- {
- /*
- * Obtain the color of a particular reference pixel which will be used for
- * comparison later on when the blue test window is added covering it.
- */
- const TPoint referencePixel(iWinPos+TPoint(50,50));
- TRgb backgroundReferenceColor;
- TheClient->Flush();
- TheClient->WaitForRedrawsToFinish();
- TheClient->iWs.Finish();
- TheClient->iScreen->GetPixel(backgroundReferenceColor, referencePixel);
- /*
- * Add a blue test window: transparent or opaque given parameter aUseTransparency
- */
- CInvisibleRedrawWin* testWin=new(ELeave) CInvisibleRedrawWin;
- CleanupStack::PushL(testWin);
- testWin->ConstructL(*TheClient->iGroup);
- testWin->AssignGC(*TheClient->iGc);
- testWin->SetExt(iWinPos+TPoint(25,25),TSize(300,200));
- testWin->Win()->SetRequiredDisplayMode(iTestDisplayMode);
- testWin->Win()->SetShadowDisabled(ETrue);
- if (aUseTransparency)
- {
- const TInt err = testWin->MakeTransparent();
- if (err)
- {
- TEST(EFalse);
- _LIT(KLog,"Failed to make the window transparent!");
- LOG_MESSAGE(KLog);
- }
- }
- /*
- * Make the blue testWin window appear on top of the window at iWinPos
- */
- testWin->Win()->Activate();
- testWin->Win()->Invalidate();
- TheClient->iWs.Finish();
- TheClient->WaitForRedrawsToFinish();
- /*
- * By making the blue window invisible and then visible we can check to see if
- * the window gets re-drawn correctly. Redraws should not come in during the
- * invisible phase, because "invisible windows do not receive any window server events"
- * but should come in during the visible phase. The background should have been
- * drawn first and then the blue window alpha blended exactly once.
- */
- testWin->MakeVisible(EFalse);
- testWin->Win()->Invalidate();
- testWin->MakeVisible(ETrue);
- testWin->Win()->Invalidate();
- /*
- * Now check the screen has the desired color at the reference pixel.
- */
- TRgb actualColor;
- TheClient->Flush();
- TheClient->WaitForRedrawsToFinish();
- TheClient->iWs.Finish();
- TheClient->iScreen->GetPixel(actualColor, referencePixel);
- if (aUseTransparency)
- {
- CColorBlender* blender = CColorBlender::NewLC(iTestDisplayMode);
- blender->SetInitialColor(backgroundReferenceColor);
- blender->Blend(TRgb(0, 0, 255, 127)); //the blue background of the window
- const TRgb expectedColor(blender->Color());
- TEST_COLOR_MATCH(expectedColor, actualColor);
- CleanupStack::PopAndDestroy(blender);
- }
- else
- {
- TEST_COLOR_MATCH(KRgbBlue, actualColor);
- }
- CleanupStack::PopAndDestroy(testWin);
- }
-
-/*CInvisibleRedrawWin*/
-CInvisibleRedrawWin::CInvisibleRedrawWin()
- : iVisible( ETrue )
- {}
-
-TInt CInvisibleRedrawWin::MakeTransparent()
- {
- const TInt err = Win()->SetTransparencyAlphaChannel();
- if(!err)
- {
- Win()->SetBackgroundColor(TRgb(0, 0, 0, 0));
- iTransparent = ETrue;
- }
- return err;
- }
-
-void CInvisibleRedrawWin::MakeVisible( TBool aVisible )
- {
- iVisible = aVisible;
- SetVisible( aVisible );
- }
-
-void CInvisibleRedrawWin::Redraw()
- {
- iWin.BeginRedraw();
- DrawIfVisible();
- iWin.EndRedraw();
- }
-
-void CInvisibleRedrawWin::Redraw( const TRect &aRect )
- {
- iWin.BeginRedraw( aRect );
- DrawIfVisible();
- iWin.EndRedraw();
- }
-
-void CInvisibleRedrawWin::DrawIfVisible()
- {
- if (iVisible)
- {
- iGc->Activate( iWin );
- iGc->SetBrushStyle( CGraphicsContext::ESolidBrush );
- if(iTransparent)
- iGc->SetBrushColor( TRgb(0, 0, 255, 127) );
- else
- iGc->SetBrushColor( KRgbBlue );
- iGc->Clear();
- iGc->Deactivate();
- }
- }
-
-/**
-@SYMTestCaseID GRAPHICS-WSERV-0498
-
-@SYMDEF INC135845
-
-@SYMTestCaseDesc UseBrushPattern test
-
-@SYMTestPriority High
-
-@SYMTestStatus Implemented
-
-@SYMTestActions Create a bitmap and use as brush. bitmap deleted immediately to
- prove that wserv retains the handle
-
-@SYMTestExpectedResults No Panic BITGDI 13
- */
-
-void CTRedrawStoring::DoBrushDrawTestL()
- {
- CBrushDrawWin* testWin=new(ELeave) CBrushDrawWin;
- CleanupStack::PushL(testWin);
- testWin->ConstructL(*TheClient->iGroup);
- testWin->AssignGC(*TheClient->iGc);
- testWin->SetExt(iWinPos+TPoint(25,25),TSize(300,200));
- testWin->Win()->SetRequiredDisplayMode(iTestDisplayMode);
- testWin->Win()->SetShadowDisabled(ETrue);
- testWin->Activate();
- testWin->SetVisible(ETrue);
-
- testWin->DrawNow();
-
- TheClient->Flush();
- TheClient->WaitForRedrawsToFinish();
-
- CleanupStack::PopAndDestroy(testWin);
- }
-
-/*CBrushDrawWin*/
-CBrushDrawWin::CBrushDrawWin()
- {}
-
-void CBrushDrawWin::Draw()
- {
- Redraw();
- }
-
-void CBrushDrawWin::Redraw()
- {
- CFbsBitmap *bitmap=new(ELeave) CFbsBitmap();
- User::LeaveIfError(bitmap->Load(TEST_BITMAP_NAME,0));
- TSize bitSize(bitmap->SizeInPixels());
- iGc->UseBrushPattern(bitmap);
- iGc->SetBrushStyle(CGraphicsContext::EPatternedBrush);
- iGc->DrawRect(TRect(TPoint(0, 0), bitSize));
- iGc->DiscardBrushPattern();
- delete bitmap;
- }
-
-/*CTRedrawStoring*/
-CTRedrawStoring::CTRedrawStoring(CTestStep* aStep) : CTWsGraphicsBase(aStep)
- {
- }
-
-CTRedrawStoring::~CTRedrawStoring()
- {
- delete iCheckWin;
- delete iCheckGc;
- delete iCheckDevice;
- delete iCheckBitmap;
- delete iTestWin;
- for(TInt bmp = 0; bmp < 3; ++bmp)
- delete iAlphaBitmap[bmp];
- iBlankWin.Close();
- iRegion.Close();
- iWinTestGc.Close();
- delete iNoDrawWin;
- delete iTestWinCopy;
- delete iCheckWinCopy;
- }
-
-void CTRedrawStoring::ConstructL()
- {
- iState = 0;
- const TInt gap=5;
- iTestDisplayMode = TheClient->iScreen->DisplayMode();
- const TSize scrSize(TheClient->iScreen->SizeInPixels());
- iWinSize=TheClient->iScreen->SizeInPixels();
- iWinSize.iWidth=(scrSize.iWidth-gap)/3;
- CTBackedUpWin* checkWin=new(ELeave) CTBackedUpWin(iTestDisplayMode);
- checkWin->ConstructExtLD(*TheClient->iGroup,TPoint(scrSize.iWidth-iWinSize.iWidth,0),iWinSize);
- iCheckWin=checkWin;
- iCheckWin->Activate();
- RBackedUpWindow& win=*iCheckWin->BackedUpWin();
- win.MaintainBackup();
- iCheckBitmap=new(ELeave) CFbsBitmap();
- iCheckBitmap->Duplicate(win.BitmapHandle());
- iCheckDevice=CFbsBitmapDevice::NewL(iCheckBitmap);
- User::LeaveIfError(iCheckDevice->CreateContext(iCheckGc));
- iCheckGc->SetUserDisplayMode(iTestDisplayMode);
- CRedrawStoreWin* testWin=new(ELeave) CRedrawStoreWin(this);
- iWinPos.SetXY(scrSize.iWidth-2*iWinSize.iWidth-gap,0);
- testWin->ConstructExtLD(*TheClient->iGroup,iWinPos,iWinSize);
- iTestWin=testWin;
- iTestWin->AssignGC(*TheClient->iGc);
- RWindowBase& baseWin=*iTestWin->BaseWin();
- User::LeaveIfError(baseWin.SetRequiredDisplayMode(iTestDisplayMode));
- baseWin.SetShadowHeight(0);
- iTestWin->Activate();
-
- CNoDrawWin* noDrawWin=new(ELeave) CNoDrawWin();
- iWinPos.SetXY(scrSize.iWidth-2*iWinSize.iWidth-gap,0);
- noDrawWin->ConstructExtLD(*TheClient->iGroup,iWinPos,iWinSize);
- iNoDrawWin=noDrawWin;
- iNoDrawWin->AssignGC(*TheClient->iGc);
- RWindowBase& bWin=*iNoDrawWin->BaseWin();
- User::LeaveIfError(bWin.SetRequiredDisplayMode(EColor256));
- bWin.SetShadowHeight(0);
-
- iBlankWin=RBlankWindow(TheClient->iWs);
- User::LeaveIfError(iBlankWin.Construct(*TheClient->iGroup->WinTreeNode(),ENullWsHandle));
- iBlankWin.SetVisible(EFalse);
- User::LeaveIfError(iBlankWin.SetRequiredDisplayMode(EColor256));
- iBlankWin.SetColor(TRgb(48,240,32));
- iBlankWin.Activate();
- iWinTestGc=RWindow(TheClient->iWs);
- User::LeaveIfError(iWinTestGc.Construct(*TheClient->iGroup->WinTreeNode(),ENullWsHandle));
- iWinTestGc.SetVisible(EFalse);
- User::LeaveIfError(iWinTestGc.SetRequiredDisplayMode(EColor256));
-
- iDrawMode=EClientRedrawsNormal;
- iDoScrollTest=EFalse;
- iDrawOrder=0;
- //PeterI Alpha is supported but opacity is not
-// iAlphaSupported=OpacityAndAlphaSupportedL();
- iAlphaSupported =TransparencySupportedL();
- iXPlus = ETrue;
- iYPlus = EFalse;
-
- // Used for fading test
- iTestWinCopy = new (ELeave) CFbsBitmap();
- iTestWinCopy->Create(iTestWin->Size(),TheClient->iScreen->DisplayMode());
- iCheckWinCopy = new (ELeave) CFbsBitmap();
- iCheckWinCopy->Create(iCheckWin->Size(),TheClient->iScreen->DisplayMode());
- }
-
-void CTRedrawStoring::CheckWindowsMatch()
- {
- TheClient->Flush();
- if (iDrawMode==EClientRedrawsNormal || iDrawMode==EClientRedrawsScrolled)
- TheClient->WaitForRedrawsToFinish();
- TheClient->iWs.Finish();
- if(!iWindowsFaded)
- {
- _LIT(KLog,"RedrawStoring SubTest %d");
- TBuf<32> buf;
- buf.AppendFormat(KLog,iTest->iState);
- CheckRect(iTestWin,iCheckWin,TRect(iWinSize),buf);
- }
- else
- {
- TInt res = LossyCompareWindow(*TheClient->iScreen, *iTestWinCopy, *iCheckWinCopy, TRect(iCheckWin->Position(), iCheckWin->Size()));
- TEST(res);
- }
- }
-
-void CTRedrawStoring::CheckWindowsNotMatch()
- {
- TheClient->Flush();
- TheClient->WaitForRedrawsToFinish();
- TheClient->iWs.Finish();
- CheckRectNoMatch(iTestWin,iCheckWin,TRect(iWinSize),_L("CTRedrawStoring::CheckWindowsNotMatch()"));
- }
-
-void CTRedrawStoring::HideRevealTest()
- {
- iBlankWin.SetVisible(ETrue);
- iBlankWin.SetVisible(EFalse);
- CheckWindowsMatch();
- }
-
-void CTRedrawStoring::MultipleHideReveal(TInt aX,TInt aY)
- {
- TInt xInc=(iWinSize.iWidth+aX-1)/aX;
- TInt yInc=(iWinSize.iHeight+aY-1)/aY;
- TInt xEnd=iWinPos.iX+iWinSize.iWidth;
- TInt yEnd=iWinPos.iY+iWinSize.iHeight;
- TInt xx,yy;
- for(xx=iWinPos.iX;xx<xEnd;xx+=xInc)
- {
- for(yy=iWinPos.iY;yy<yEnd;yy+=yInc)
- {
- iBlankWin.SetExtent(TPoint(xx,yy),TSize(xInc,yInc));
- HideRevealTest();
- }
- }
- }
-
-void CTRedrawStoring::RedrawWindows()
- {
- iDrawMode=EClientRedrawsNormal;
- iTestWin->Invalidate();
- CheckWindowsMatch();
- iDrawMode=EServerRedraw;
- }
-
-void CTRedrawStoring::DoDrawingL(CWindowGc* aWinGc)
- {
- iClientDidDraw = ETrue;
- switch (iDrawMode)
- {
- case EServerRedraw:
- TEST(EFalse);
- break;
- case EClientRedrawsNormal:
- if (iState>0)
- {
- DoDrawingL(0,aWinGc,ETrue);
- DoDrawingL(0,iCheckGc,EFalse);
- aWinGc->Deactivate();
- aWinGc->Activate(*iTestWin->DrawableWin());
- }
- DoDrawingL(iState,aWinGc,ETrue);
- DoDrawingL(iState,iCheckGc,EFalse);
- iCheckWin->BackedUpWin()->UpdateScreen();
- break;
- case EClientRedrawsScrolled:
- {
- DoDrawingL(0,aWinGc,ETrue);
- TRegionFix<8> region;
- region.AddRect(TRect(iWinSize));
- region.SubRect(iScrollTarget);
- aWinGc->SetClippingRegion(region);
- DoDrawingL(iState,aWinGc,ETrue);
- aWinGc->CancelClippingRegion();
- aWinGc->SetClippingRect(iScrollTarget);
- aWinGc->SetOrigin(iScrollTarget.iTl-iScrollSource);
- DoDrawingL(iState,aWinGc,ETrue);
- aWinGc->CancelClippingRect();
- break;
- }
- }
- TheClient->Flush();
- }
-
-#define KLastDrawingCase 24 //This should always be the same as the value of last case number in the switch statement of the next function
-void CTRedrawStoring::DoDrawingL(TInt aDraw,CBitmapContext* aGc,TBool aWinGc)
- {
- switch (aDraw)
- {
- case 0:
- case 1:
- aGc->SetBrushColor(TRgb(255,(aDraw==0?255:0),255));
- aGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
- aGc->SetPenStyle(CGraphicsContext::ENullPen);
- aGc->DrawRect(iWinSize);
- iDoScrollTest=EFalse;
- break;
- case 2:
- aGc->SetPenStyle(CGraphicsContext::ESolidPen);
- aGc->SetPenSize(TSize(1,1));
- aGc->SetPenColor(TRgb(0,0,0));
- aGc->DrawLine(TPoint(0,10),TPoint(iWinSize.iWidth,10));
- aGc->SetPenColor(TRgb(128,0,0));
- aGc->DrawLine(TPoint(0,iWinSize.iHeight-10),TPoint(iWinSize.iWidth,iWinSize.iHeight-10));
- aGc->SetPenColor(TRgb(0,128,0));
- aGc->DrawLine(TPoint(10,0),TPoint(10,iWinSize.iHeight));
- aGc->SetPenColor(TRgb(0,0,128));
- aGc->DrawLine(TPoint(iWinSize.iWidth-10,0),TPoint(iWinSize.iWidth-10,iWinSize.iHeight));
- iDoScrollTest=EFalse;
- break;
- case 3:
- //Do various drawing using: MoveTo, MoveBy, Plot, DrawLineTo, DrawLineBy
- aGc->SetPenStyle(CGraphicsContext::ESolidPen);
- aGc->SetPenColor(TRgb(0,0,0));
- aGc->MoveTo(TPoint(iWinSize.iWidth, iWinSize.iHeight));
- aGc->DrawLineTo(TPoint(0, 0));
- aGc->MoveBy(TPoint(iWinSize.iWidth, 0));
- aGc->DrawLineTo(TPoint(0, iWinSize.iHeight));
- aGc->MoveTo(TPoint(0, iWinSize.iHeight/2));
- aGc->DrawLineBy(TPoint(iWinSize.iWidth, 0));
- aGc->SetPenSize(TSize(5,5));
- aGc->Plot(TPoint(iWinSize.iWidth/2, 20));
- aGc->Plot(TPoint(iWinSize.iWidth/2, iWinSize.iHeight/2));
- aGc->Plot(TPoint(iWinSize.iWidth/2, iWinSize.iHeight-20));
- aGc->SetPenSize(TSize(1,1));
- iDoScrollTest=EFalse;
- break;
- case 4:
- //Do various drawing with lines of different widths
- {
- TInt inc=iWinSize.iHeight/8;
- TInt penSize=2;
- TInt yy;
- aGc->SetPenStyle(CGraphicsContext::ESolidPen);
- aGc->SetPenColor(TRgb(0,0,0));
- for (yy=0;yy<iWinSize.iHeight;yy+=inc)
- {
-#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
- if (yy%3==0)
- aGc->SetPenSize(TSize(penSize,penSize));
- else if (yy%3==1)
- aGc->SetPenSize(TSize(penSize,7*penSize/5));
- else
- aGc->SetPenSize(TSize(7*penSize/5,penSize));
-#else
- aGc->SetPenSize(TSize(penSize,penSize));
-#endif
- aGc->DrawLine(TPoint(2,yy),TPoint(iWinSize.iWidth-3,yy));
- penSize+=2;
- }
- aGc->SetPenSize(TSize(1,1));
- }
- iDoScrollTest=ETrue;
- break;
- case 5:
- //Some drawing using fading on the gc
- aGc->SetPenStyle(CGraphicsContext::ESolidPen);
- aGc->SetPenColor(TRgb(0,0,255));
-#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
- aGc->SetFaded(ETrue);
-#endif
- aGc->SetPenSize(TSize(10,10));
- aGc->DrawLine(TPoint(0,iWinSize.iHeight/2-5),TPoint(iWinSize.iWidth,iWinSize.iHeight/2-5));
-#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
- aGc->SetFaded(EFalse);
-#endif
- aGc->DrawLine(TPoint(0,iWinSize.iHeight/2+5),TPoint(iWinSize.iWidth, iWinSize.iHeight/2+5));
- aGc->SetPenStyle(CGraphicsContext::ESolidPen);
- aGc->SetPenColor(TRgb(0,0,255));
-#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
- aGc->SetFaded(ETrue);
- aGc->SetFadingParameters(0,127);
-#endif
- aGc->SetPenSize(TSize(10,10));
- aGc->DrawLine(TPoint(iWinSize.iWidth/2-5,0),TPoint(iWinSize.iWidth/2-5,iWinSize.iHeight));
-#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
- aGc->SetFaded(EFalse);
- // default params
- aGc->SetFadingParameters(128,255);
-#endif
- aGc->DrawLine(TPoint(iWinSize.iWidth/2+5,0),TPoint(iWinSize.iWidth/2+5,iWinSize.iHeight));
-#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
- aGc->SetFaded(EFalse);
-#endif
- iDoScrollTest=ETrue;
- break;
- case 6:
- // Fading on window
- aGc->SetPenStyle(CGraphicsContext::ESolidPen);
- aGc->SetPenColor(TRgb(0,255,0));
- aGc->SetPenSize(TSize(10,10));
- aGc->DrawLine(TPoint(0,iWinSize.iHeight/2),TPoint(iWinSize.iWidth,iWinSize.iHeight/2));
- aGc->DrawLine(TPoint(iWinSize.iWidth/2,0),TPoint(iWinSize.iWidth/2,iWinSize.iHeight));
- iDoScrollTest=EFalse;
- break;
- case 7:
- //Some drawing with text - create and destroy the font as soon as used
- {
- CFbsFont *font;
- TFontSpec fspec(_L("Swiss"),190);
- User::LeaveIfError(TheClient->iScreen->GetNearestFontToDesignHeightInTwips((CFont *&)font,fspec));
- aGc->SetPenColor(TRgb(0,0,0));
- aGc->UseFont(font);
- aGc->DrawText(_L("Hello"), TPoint(20,20));
- aGc->DiscardFont();
- TheClient->iScreen->ReleaseFont(font);
-
- CFbsFont *font2;
- TInt fontSize = 100;
- TInt inc = 10;
- for (TInt i=0; i<20; i++)
- {
- TFontSpec fspec2(_L("Ariel"), fontSize);
- User::LeaveIfError(TheClient->iScreen->GetNearestFontToDesignHeightInTwips((CFont *&)font2,fspec2));
- aGc->SetPenColor(TRgb(0,0,0));
- aGc->UseFont(font2);
- aGc->DrawText(_L("Hello"), TPoint(20,100));
- aGc->DiscardFont();
- TheClient->iScreen->ReleaseFont(font2);
- fontSize+=inc;
- }
- iDoScrollTest=ETrue;
- }
- break;
- case 8:
- //Some drawing with bitmaps - create and destroy the bitmap as soon as used
- {
- CFbsBitmap* testBitmap;
- testBitmap=new(ELeave) CFbsBitmap();
- User::LeaveIfError(testBitmap->Load(TEST_BITMAP_NAME,0));
- aGc->DrawBitmap(TRect(TPoint(10,10), TPoint(150,150)), testBitmap);
- delete testBitmap;
- iDoScrollTest=ETrue;
- }
- break;
- case 9:
- //Some drawing with clipping regions and rects
-
- //clipping rect
-
- aGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
- aGc->SetPenStyle(CGraphicsContext::ENullPen);
- aGc->SetClippingRect(TRect(TPoint(50,0), TSize(iWinSize.iWidth/2,100)));
- aGc->SetBrushColor(TRgb(255,255,0));
- aGc->DrawRect(TRect(TPoint(0,0), TPoint(100,100)));
- aGc->SetBrushColor(TRgb(0,128,128));
- aGc->DrawRect(TRect(TPoint(iWinSize.iWidth/2,0), TSize(iWinSize.iWidth/2,100)));
- aGc->CancelClippingRect();
-
-
- //regions
-
- iRegion.AddRect(TRect(TPoint(0,30), TSize(3*iWinSize.iWidth/4,150)));
- iRegion.AddRect(TRect(TPoint(iWinSize.iWidth/2-20, 0), TSize(70,70)));
-
- aGc->SetClippingRegion(iRegion);
-
- aGc->SetBrushColor(TRgb(0,200,0));
- aGc->DrawRect(TRect(TPoint(5,5), TPoint(iWinSize.iWidth-50,200)));
- aGc->SetBrushColor(TRgb(200,0,0));
- aGc->DrawRect(TRect(TPoint(50,50), TPoint(iWinSize.iWidth/2,150)));
- aGc->SetBrushColor(TRgb(0,0,200));
- aGc->DrawRect(TRect(TPoint(20,10), TPoint(100,100)));
-
- aGc->CancelClippingRegion();
-
- iDoScrollTest=EFalse;
- break;
- case 10:
- //Some drawing with deactivating and reactivating the gc on the window (if it is indeed it is window gc)
-
- aGc->SetBrushColor(TRgb(0,0,255));
- aGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
- aGc->SetPenStyle(CGraphicsContext::ENullPen);
- aGc->DrawRect(TRect(TPoint(20,20), TSize(50,50)));
-
- if (aWinGc)
- {
- static_cast<CWindowGc*>(aGc)->Deactivate();
-
- // Associate gc with another window and change attributes
- static_cast<CWindowGc*>(aGc)->Activate(iWinTestGc);
- aGc->SetPenStyle(CGraphicsContext::ESolidPen);
- aGc->SetPenColor(TRgb(0,0,255));
- static_cast<CWindowGc*>(aGc)->Deactivate();
- static_cast<CWindowGc*>(aGc)->Activate(*iTestWin->DrawableWin());
- }
-
- aGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
- aGc->SetPenStyle(CGraphicsContext::ENullPen);
- aGc->SetBrushColor(TRgb(200,0,0));
- aGc->DrawRect(TRect(TPoint(70,70), TSize(50,50)));
- iDoScrollTest=EFalse;
- break;
- case 11:
- // Some drawing with polygons
- {
- aGc->SetBrushColor(TRgb(0,221,0));
- aGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
- aGc->SetPenStyle(CGraphicsContext::ENullPen);
-
- TPoint point1(iWinSize.iWidth/3,iWinSize.iHeight/4*3);
- TPoint point2(iWinSize.iWidth/2,iWinSize.iHeight/5*4);
- TPoint point3(iWinSize.iWidth/3,iWinSize.iHeight-20);
- TPoint point4(iWinSize.iWidth/4,iWinSize.iHeight-20);
- TPoint point5(iWinSize.iWidth/6,iWinSize.iHeight-60);
-
- CArrayFix<TPoint>* points;
- points = new CArrayFixFlat<TPoint>(5);
- points->AppendL(point1);
- points->AppendL(point2);
- points->AppendL(point3);
- points->AppendL(point4);
- points->AppendL(point5);
- aGc->DrawPolygon(points);
- delete points;
-
- TPoint points2[5];
- points2[0].SetXY(iWinSize.iWidth/2,50);
- points2[1].SetXY(iWinSize.iWidth-50,iWinSize.iHeight/2);
- points2[2].SetXY(iWinSize.iWidth-70,iWinSize.iHeight/2+30);
- points2[3].SetXY(iWinSize.iWidth/3,iWinSize.iHeight/3);
- points2[4].SetXY(iWinSize.iWidth/4,iWinSize.iHeight/4);
- aGc->SetBrushColor(TRgb(221,0,0));
- aGc->DrawPolygon(points2,5);
- iDoScrollTest=ETrue;
- }
- break;
- case 12:
- {
- // Another Fading on Window Test
- aGc->SetPenStyle(CGraphicsContext::ENullPen);
- aGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
- aGc->SetBrushColor(TRgb(51,204,204));
-#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
- if (!iWindowsFaded || aWinGc)
- {
- aGc->SetFaded(ETrue);
- }
-#endif
- aGc->DrawRect(TRect(iWinSize.iWidth/4-1,iWinSize.iHeight/4-1,3*iWinSize.iWidth/4+1,3*iWinSize.iHeight/4+1));
-#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
- aGc->SetFaded(EFalse);
-#endif
- aGc->SetBrushStyle(CGraphicsContext::ENullBrush);
- aGc->SetPenStyle(CGraphicsContext::ESolidPen);
- aGc->SetPenColor(TRgb(34,204,34));
- aGc->SetPenSize(TSize(8,8));
- aGc->DrawLine(TPoint(2,iWinSize.iHeight/2+5),TPoint(iWinSize.iWidth-2,iWinSize.iHeight/2-5));
- aGc->DrawLine(TPoint(iWinSize.iWidth/2+5,2),TPoint(iWinSize.iWidth/2-5,iWinSize.iHeight-2));
-#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
- if (!iWindowsFaded || aWinGc)
- {
- aGc->SetFaded(ETrue);
- }
-#endif
- aGc->SetPenColor(TRgb(51,221,51));
- aGc->SetPenSize(TSize(3,3));
- aGc->SetBrushColor(TRgb(238,34,238));
- aGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
- aGc->DrawRect(TRect(3*iWinSize.iWidth/8-1,3*iWinSize.iHeight/8-1,5*iWinSize.iWidth/8+1,5*iWinSize.iHeight/8+1));
-#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
- aGc->SetFaded(EFalse);
-#endif
- aGc->SetBrushStyle(CGraphicsContext::ENullBrush);
- aGc->SetPenColor(TRgb(238,34,238));
-#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
- aGc->SetPenSize(TSize(8,9));
-#else
- aGc->SetPenSize(TSize(8,8));
-#endif
- aGc->DrawRect(TRect(iWinSize.iWidth/8-1,iWinSize.iHeight/8-1,7*iWinSize.iWidth/8+1,7*iWinSize.iHeight/8+1));
- iDoScrollTest=ETrue;
- }
- break;
- case 15:
- //Some masked drawing with FBS bitmaps - create and destroy the bitmaps as soon as used
- {
- CFbsBitmap* testBitmap;
- CFbsBitmap* maskBitmap;
- testBitmap=new(ELeave) CFbsBitmap();
- CleanupStack::PushL(testBitmap);
- maskBitmap=new(ELeave) CFbsBitmap();
- CleanupStack::PushL(maskBitmap);
- User::LeaveIfError(testBitmap->Load(TEST_BITMAP_NAME,2));
- User::LeaveIfError(maskBitmap->Load(TEST_BITMAP_NAME,4));
- aGc->BitBltMasked(TPoint(10,10), testBitmap, TRect(TPoint(0, 0), testBitmap->SizeInPixels()), maskBitmap, EFalse);
- CleanupStack::PopAndDestroy(2, testBitmap);
- iDoScrollTest=ETrue;
- }
- break;
- case 16:
- //As above, except using Ws bitmaps
- {
- CWsBitmap* testBitmap;
- CWsBitmap* maskBitmap;
- testBitmap=new(ELeave) CWsBitmap(TheClient->iWs);
- CleanupStack::PushL(testBitmap);
- maskBitmap=new(ELeave) CWsBitmap(TheClient->iWs);
- CleanupStack::PushL(maskBitmap);
- User::LeaveIfError(testBitmap->Load(TEST_BITMAP_NAME,3));
- User::LeaveIfError(maskBitmap->Load(TEST_BITMAP_NAME,4));
- // If we don't cast to the window gc we don't see the WS version of the BitBltMasked function:
- if(aWinGc)
- ((CWindowGc*)aGc)->BitBltMasked(TPoint(20,20), testBitmap, TRect(TPoint(0, 0), testBitmap->SizeInPixels()), maskBitmap, EFalse);
- else
- aGc->BitBltMasked(TPoint(20,20), testBitmap, TRect(TPoint(0, 0), testBitmap->SizeInPixels()), maskBitmap, EFalse);
- CleanupStack::PopAndDestroy(2, testBitmap);
- iDoScrollTest=ETrue;
- }
- break;
- case 19:
- //Some drawing with WS bitmaps
- {
- if(!iAlphaBitmap[0])
- {
- for(TInt bmp = 0; bmp < 3; ++bmp)
- {
- iAlphaBitmap[bmp] = new(ELeave) CWsBitmap(TheClient->iWs);
- User::LeaveIfError(iAlphaBitmap[bmp]->Load(TEST_BITMAP_NAME,2 + bmp));
- }
- }
- if(aWinGc)
- ((CWindowGc*)aGc)->BitBlt(TPoint(20,20), iAlphaBitmap[0]);
- else
- aGc->BitBlt(TPoint(20,20), iAlphaBitmap[0]);
- iDoScrollTest=ETrue;
- }
- break;
- case 20:
- //Some drawing with alpha blended bitmaps
- if (iAlphaSupported)
- {
- aGc->SetFaded(EFalse);
- TPoint start(0,0);
- TSize size = iAlphaBitmap[0]->SizeInPixels();
- TPoint alphastart((start.iX + size.iWidth / 4), (start.iY + size.iHeight / 4));
-
- aGc->BitBlt(start, iAlphaBitmap[0], TRect(start, size));
- aGc->AlphaBlendBitmaps(start, iAlphaBitmap[1], TRect(start, size), iAlphaBitmap[2], alphastart);
- iDoScrollTest=ETrue;
- }
- break;
- case 21:
- // As in previous case, except using FBS bitmaps.
- if (iAlphaSupported)
- {
- aGc->SetFaded(EFalse);
- CFbsBitmap* baseBitmap;
- CFbsBitmap* testBitmap;
- CFbsBitmap* alphaBitmap;
- baseBitmap=new(ELeave) CFbsBitmap();
- CleanupStack::PushL(baseBitmap);
- testBitmap=new(ELeave) CFbsBitmap();
- CleanupStack::PushL(testBitmap);
- alphaBitmap=new(ELeave) CFbsBitmap();
- CleanupStack::PushL(alphaBitmap);
- User::LeaveIfError(baseBitmap->Load(TEST_BITMAP_NAME,2));
- User::LeaveIfError(testBitmap->Load(TEST_BITMAP_NAME,3));
- User::LeaveIfError(alphaBitmap->Load(TEST_BITMAP_NAME,4));
- TPoint start(0,0);
- TSize size = baseBitmap->SizeInPixels();
- TPoint alphastart((start.iX + size.iWidth / 4), (start.iY + size.iHeight / 4));
-
- aGc->BitBlt(start, baseBitmap, TRect(start, size));
- aGc->AlphaBlendBitmaps(start, testBitmap, TRect(start, size), alphaBitmap, alphastart);
-
- CleanupStack::PopAndDestroy(3, baseBitmap);
- iDoScrollTest=ETrue;
- }
- break;
- case 22:
- // Some default drawing for Begin EndRedraw test
- aGc->SetPenStyle(CGraphicsContext::ESolidPen);
- aGc->SetPenSize(TSize(2,2));
- aGc->SetPenColor(TRgb(128,0,0));
- aGc->DrawLine(TPoint(10,10),TPoint(20,10));
- aGc->DrawLine(TPoint(20,10),TPoint(20,20));
- aGc->DrawLine(TPoint(20,20),TPoint(10,20));
- aGc->DrawLine(TPoint(10,20),TPoint(10,10));
-
- aGc->SetPenSize(TSize(4,4));
- aGc->SetPenColor(TRgb(0,0,128));
- aGc->DrawLine(TPoint(50,50),TPoint(150,50));
- aGc->DrawLine(TPoint(150,50),TPoint(150,150));
- aGc->DrawLine(TPoint(150,150),TPoint(50,150));
- aGc->DrawLine(TPoint(50,150),TPoint(50,50));
- iDoScrollTest=EFalse;
- break;
- case 23:
- aGc->SetBrushColor(TRgb(244,196,48));
- aGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
- aGc->SetPenStyle(CGraphicsContext::ENullPen);
- aGc->DrawRect(TRect(0,0,iWinSize.iWidth,iWinSize.iHeight/3));
- aGc->SetBrushColor(TRgb(255,255,255));
- aGc->DrawRect(TRect(0,iWinSize.iHeight/3,iWinSize.iWidth,iWinSize.iHeight*2/3));
- aGc->SetBrushColor(TRgb(3,192,60));
- aGc->DrawRect(TRect(0,iWinSize.iHeight*2/3,iWinSize.iWidth,iWinSize.iHeight));
- iDoScrollTest=EFalse;
- break;
- case 24:
- iClientDidDraw=ETrue;
- //Draw some rects to screen
- aGc->Reset();
- aGc->Clear();
- aGc->SetPenStyle(CGraphicsContext::ESolidPen);
- aGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
- aGc->SetBrushColor(TRgb(98,72,172));
- aGc->DrawRect(TRect(20,iYPoz,250,280+iYPoz));
- aGc->SetBrushColor(TRgb(255,0,0));
- aGc->DrawRect(TRect(0,iYPoz,200,200+iYPoz));
- aGc->SetBrushColor(TRgb(0,255,255));
- aGc->DrawRect(TRect(10,15+iYPoz,250,115+iYPoz));
- aGc->SetBrushColor(TRgb(0,255,0));
- aGc->DrawRect(TRect(0,50+iYPoz,100,250+iYPoz));
- aGc->SetBrushColor(TRgb(255,255,0));
- aGc->DrawRect(TRect(50,50+iYPoz,150,150+iYPoz));
- aGc->SetBrushColor(TRgb(5,25,20));
- aGc->DrawRect(TRect(120,170+iYPoz,220,250+iYPoz));
- break;
- }
- }
-
-/**
-@SYMTestCaseID GRAPHICS-WSERV-0085
-
-@SYMDEF DEF081259
-
-@SYMTestCaseDesc Do Draw Test
- REQUIREMENT: REQ2123
- GT0164/Delta/ 1450, 1460, 1470, 1490, 1500, 1510, 1520, 1530
-
-@SYMTestPriority High
-
-@SYMTestStatus Implemented
-
-@SYMTestActions Lots of different type of drawing is done to the test window.
- (Including: normal drawing, fonts, bitmaps, fading on the GC,
- clipping regions and rects).
- A blank window is made visible then invisible above the test window
- The blank window's size and position is also changed many times.
-
-@SYMTestExpectedResults After the initial drawing of the test window, all the draw commands
- should be stored by the window server. When the blank window is made
- visible/invisible above the test window a redraw message will be sent
- to the test window. The window will be redrawn using the draw commands
- stored in the server. Once all the redrawing is complete, the test window
- will be compared with a bitmap that has had the same draw commands applied
- to it.
- The test will fail if the bitmaps don't match or if the test window was
- redrawn not using the stored server side draw commands.
- */
-
-void CTRedrawStoring::DoDrawTest()
- {
- RedrawWindows();
- HideRevealTest();
- iTestWin->SetVisible(EFalse);
- iTestWin->SetVisible(ETrue);
- CheckWindowsMatch();
- MultipleHideReveal(2,3);
- MultipleHideReveal(5,4);
- iBlankWin.SetExtent(iWinPos,iWinSize);
- HideRevealTest();
- CheckWindowsMatch();
- }
-
-/**
-@SYMTestCaseID GRAPHICS-WSERV-0086
-
-@SYMDEF DEF081259
-
-@SYMTestCaseDesc Fade Window Test
- REQUIREMENT: REQ2123
- GT0164/Delta/ 1480
-
-@SYMTestPriority High
-
-@SYMTestStatus Implemented
-
-@SYMTestActions The test window is faded and the GC associated with the bitmap used
- to check the test window is faded. The Draw Test in TestCase 1 is then
- applied.
-
-@SYMTestExpectedResults The test window and the check bitmap should both be faded and contain
- the same drawing. The test will fail if the bitmaps don't match or if the
- test window was redrawn not using the stored server side draw commands.
-
- */
-void CTRedrawStoring::FadeWindowTest()
- {
- iWindowsFaded = ETrue;
- iTestWin->Win()->SetFaded(ETrue,RWindowTreeNode::EFadeWindowOnly);
- iCheckGc->SetFaded(ETrue);
- DoDrawTest();
- iDrawMode=EClientRedrawsNormal;
- iTestWin->Win()->SetFaded(EFalse,RWindowTreeNode::EFadeWindowOnly);
- iCheckGc->SetFaded(EFalse);
- TheClient->Flush();
- TheClient->WaitForRedrawsToFinish();
- iWindowsFaded = EFalse;
- }
-
-/**
-@SYMTestCaseID GRAPHICS-WSERV-0087
-
-@SYMDEF DEF081259
-
-@SYMTestCaseDesc Fade Window Test 2
- REQUIREMENT: REQ2123
- GT0164/Delta/ 1480
-
-@SYMTestPriority High
-
-@SYMTestStatus Implemented
-
-@SYMTestActions The test window is faded and the check window that uses the check bitmap
- is faded. A blank window is made visbible/invisible above the test window.
- Fading is switched off on both windows, they are redrawn and then compared.
-
-@SYMTestExpectedResults The test window and the check bitmap should both be faded. After showing
- the blank window the test window will contain a couple of rectangles faded due to
- Gc fade apart from the overall window fade (will look similar to double fading), whereas
- check window will have simply the overall window fade. Once both windows have been
- redrawn with the fading switched off, they should not look the same for the same
- reason explained above.
-
- */
-void CTRedrawStoring::FadeWindowTest2L()
- {
- DoDrawTest();
- iWindowsFaded=ETrue;
- iTestWin->BaseWin()->SetFaded(ETrue,RWindowTreeNode::EFadeWindowOnly);
- iCheckWin->BaseWin()->SetFaded(ETrue,RWindowTreeNode::EFadeWindowOnly);
- CheckWindowsMatch();
-
-#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
- //perform RedrawWindows() with CheckWindowsNotMatch()
- iDrawMode=EClientRedrawsNormal;
- iTestWin->Invalidate();
- CheckWindowsNotMatch();
- iDrawMode=EServerRedraw;
-
- //perform HideRevealTest() with CheckWindowsNotMatch()
- iBlankWin.SetVisible(ETrue);
- iBlankWin.SetVisible(EFalse);
- CheckWindowsNotMatch();
-#endif
-
- iWindowsFaded=EFalse;
- iTestWin->BaseWin()->SetFaded(EFalse,RWindowTreeNode::EFadeWindowOnly);
- iCheckWin->BaseWin()->SetFaded(EFalse,RWindowTreeNode::EFadeWindowOnly);
- iDrawMode=EClientRedrawsNormal;
- DoDrawingL(0,iCheckGc,EFalse);
- DoDrawingL(iState,iCheckGc,EFalse);
- iCheckWin->BackedUpWin()->UpdateScreen();
- iDrawMode=EServerRedraw;
- CheckWindowsMatch();
- HideRevealTest();
- }
-
-/**
-@SYMTestCaseID GRAPHICS-WSERV-0088
-
-@SYMDEF DEF081259
-
-@SYMTestCaseDesc Scroll Test
- REQUIREMENT: REQ2123
- GT0164/Delta/ 1540
-
-@SYMTestPriority High
-
-@SYMTestStatus Implemented
-
-@SYMTestActions Different areas of the test window are scrolled, the check bitmap
- window is also adjusted to reflect this scrolling. The blank window is
- then made visible/invisible above the test window
-
-@SYMTestExpectedResults The test will fail if the bitmaps don't match or if the test window was
- redrawn not using the stored server side draw commands.
-
- */
-void CTRedrawStoring::ScrollTest()
- {
- CheckWindowsMatch();
- TInt x=iWinSize.iWidth/3;
- TInt w=iWinSize.iWidth/4;
- SetScrolling(TPoint(10,20),TRect(x,100,x+w,160));
- DoScrollTest();
- x=iWinSize.iWidth/2;
- w=iWinSize.iWidth/3;
- SetScrolling(TPoint(48,100),TRect(x,10,x+w,80));
- DoScrollTest();
- x=iWinSize.iWidth/10;
- w=iWinSize.iWidth/5;
- SetScrolling(TPoint(iWinSize.iWidth/2,20),TRect(x,100,x+w,150));
- DoScrollTest();
- }
-
-void CTRedrawStoring::DoScrollTest()
- {
- TheClient->Flush();
- iDrawMode=EClientRedrawsScrolled;
- CheckWindowsMatch();
- iDrawMode=EServerRedraw;
- HideRevealTest();
- RedrawWindows();
- CheckWindowsMatch();
- }
-
-void CTRedrawStoring::SetScrolling(TPoint aScrollSource, TRect aScrollTarget)
- {
- iScrollSource=aScrollSource;
- iScrollTarget=aScrollTarget;
- iTestWin->DrawableWin()->Scroll(iScrollTarget.iTl-iScrollSource,TRect(iScrollSource,iScrollTarget.Size()));
- iCheckWin->DrawableWin()->Scroll(iScrollTarget.iTl-iScrollSource,TRect(iScrollSource,iScrollTarget.Size()));
- }
-
-/**
-@SYMTestCaseID GRAPHICS-WSERV-0090
-
-@SYMDEF DEF081259
-
-@SYMTestCaseDesc Do Nothing in Redraw Test
- REQUIREMENT: REQ2123
- GT0164/Delta/ 1570
-
-@SYMTestPriority High
-
-@SYMTestStatus Implemented
-
-@SYMTestActions A window is created that contains no drawing code. A blank window is
- made visible/invisible above this window.
-
-@SYMTestExpectedResults No buffer will be created server side because there are no draw commands
- to store. The server should be able to cope with an empty buffer when the
- redraw is issued, caused by the blank win.
-
- */
-void CTRedrawStoring::DoNothingInRedrawTest()
- {
- // iNoDrawWin contains no drawing code, therefore no server side
- // redraw store buffer will be created in a redraw.
- // When a redraw occurs because the blank win is made visible/invisible,
- // the server will try and access the non existant buffer, all being well
- // nothing should happen because the server can cope with an empty redraw
- // buffer.
-
- iTestWin->SetVisible(EFalse);
- iNoDrawWin->Activate();
- TheClient->Flush();
- TheClient->WaitForRedrawsToFinish();
- iDrawMode=EServerRedraw;
- iBlankWin.SetOrdinalPosition(0);
- iBlankWin.SetVisible(ETrue);
- iBlankWin.SetVisible(EFalse);
- TheClient->Flush();
-
- //return to normal testing state
- iNoDrawWin->SetVisible(EFalse);
- iTestWin->SetVisible(ETrue);
- RedrawWindows();
- }
-
-/**
-@SYMTestCaseID GRAPHICS-WSERV-0091
-
-@SYMDEF DEF081259
-
-@SYMTestCaseDesc Disable Redraw Store Test
-
-@SYMTestPriority High
-
-@SYMTestStatus Implemented
-
-@SYMTestActions A windows redraw store is disabled and enabled, and the window is exposed.
-
-@SYMTestExpectedResults When the redraw store is disabled, a client redraw should occur when the window
- is exposed. When it is enabled, no client redraw should occur. However, the
- first time it is exposed after enabling the store it will need a client redraw
- in order to fill the store.
-
- */
-void CTRedrawStoring::DoDisableRedrawStoreTest()
- {
- _LIT(KLog1,"Redraw storing not enabled when expected to be");
- _LIT(KLog2,"No client redraw was done when it was expected");
- RedrawWindows();
- CheckWindowsMatch();
-
- iDrawMode=EServerRedraw;
- HideRevealTest();
-
- iClientDidDraw=EFalse;
- TBool isEnabled=iTestWin->Win()->IsRedrawStoreEnabled();
- TEST(isEnabled);
- if (!isEnabled)
- LOG_MESSAGE(KLog1);
-
- /*iTestWin->Win()->EnableRedrawStore(EFalse);
- isEnabled=iTestWin->Win()->IsRedrawStoreEnabled();
- TEST(!isEnabled);
- if (isEnabled)
- {
- _LIT(KLog,"Redraw storing enabled when expected not to be");
- LOG_MESSAGE(KLog);
- }
-
- iDrawMode=EClientRedrawsNormal;
- HideRevealTest();
- TEST(iClientDidDraw);
- if (!iClientDidDraw)
- {
- LOG_MESSAGE(KLog2);
- TheClient->WaitForRedrawsToFinish();
- if (iClientDidDraw)
- {
- _LIT(KLog,"After Waiting Redraws had taken place");
- LOG_MESSAGE(KLog);
- }
- }*/
-
- iTestWin->Win()->EnableRedrawStore(ETrue);
- isEnabled=iTestWin->Win()->IsRedrawStoreEnabled();
- TEST(isEnabled);
- if (!isEnabled)
- LOG_MESSAGE(KLog1);
-
- HideRevealTest();
- iDrawMode=EServerRedraw;
- HideRevealTest();
-
- iClientDidDraw=EFalse;
- TheClient->iWs.ClearAllRedrawStores();
- iDrawMode=EClientRedrawsNormal;
- HideRevealTest();
- TEST(iClientDidDraw);
- if (!iClientDidDraw)
- {
- LOG_MESSAGE(KLog2);
- TheClient->WaitForRedrawsToFinish();
- if (iClientDidDraw)
- {
- _LIT(KLog,"After Waiting Redraws had taken place");
- LOG_MESSAGE(KLog);
- }
- }
-
- HideRevealTest();
- iDrawMode=EServerRedraw;
- HideRevealTest();
- }
-
-/**
-@SYMTestCaseID GRAPHICS-WSERV-0092
-
-@SYMDEF DEF081259
-
-@SYMTestCaseDesc Resize Redraws
-
-@SYMTestPriority High
-
-@SYMTestStatus Implemented
-
-@SYMTestActions A window is resized.
-
-@SYMTestExpectedResults When the window decreases in size, the server should be able to
- redraw it from the store. When it increases in size, a client redraw
- should occur.
-
- */
-void CTRedrawStoring::DoResizeTest()
- {
- RedrawWindows();
-
- TSize oldsize = iTestWin->Win()->Size();
-
- iDrawMode=EServerRedraw;
- iTestWin->Win()->SetSize(TSize(8, 8));
- TheClient->Flush();
- TheClient->WaitForRedrawsToFinish();
-
- iClientDidDraw=EFalse;
- iDrawMode=EClientRedrawsNormal;
- iTestWin->Win()->SetSize(oldsize);
- TheClient->Flush();
- TheClient->WaitForRedrawsToFinish();
- TEST(iClientDidDraw);
- if (!iClientDidDraw)
- INFO_PRINTF3(_L("iClientDidDraw - Expected: %d, Actual: %d"), ETrue, iClientDidDraw);
-
- }
-
-/* TESTCASE: 9
- * TITLE: Font Cache Overflow
- * IMPORTANCE: 1
- * REQUIREMENT: DEF065463
- *
- *
- * API:
- * #
- *
- * ACTION:
- * The Font Cache is overflowed
- *
- * RESULT:
- * If the font cache overflows or under out of memory conditions,
- * there should be no leaves, panics or incorrect behaviour of the
- * local array of font handles.
- */
-
- void CTRedrawStoring::DoFontCacheOverflowTestL()
- {
- RWindow window(TheClient->iWs);
- User::LeaveIfError(window.Construct(*TheClient->iGroup->WinTreeNode(), ENullWsHandle));
- CleanupClosePushL(window);
- window.Activate();
- // Display mode is set after window.Activate() purposely to check that drawing
- // is done in the right mode, in order to test fix for DEF083327
- User::LeaveIfError(window.SetRequiredDisplayMode(EColor256));
-
- // run test using a single gc
- FontCacheOverflowDrawingTestL(EFalse, window);
- // reset for next test
- window.Invalidate();
- iXPlus = ETrue;
- iYPlus = EFalse;
- // run test using multiple gcs
- FontCacheOverflowDrawingTestL(ETrue, window);
-
- CleanupStack::PopAndDestroy(&window);
- }
-
-/* TESTCASE: 22
-* TITLE: Scroll Window
-* IMPORTANCE:
-* REQUIREMENT:
-*
-*
-* API:
-* #
-*
-* ACTION:
-* A window is scrolled then a blank window is popped up, made visible and then
-* invisible in order to test that partial redraw storing is drawing window
-* contents properly after hiding the blank window.
-*
-* Before the fix, the contents used to disappear as partial redraw storing was
-* not storing the commands to draw areas outside the defined clipping rect, in
-* this case the area covered by the popped window. Now, the fix makes sure that
-* full redraw to the window is applied when there are atored commands but the
-* changes are performed only in the covered area.
-*
-* RESULT:
-* When the blank window is hidden, the covered area will be redrawn and will
-* contain the original contents before poping the blank window.
-*
-*/
-void CTRedrawStoring::ScrollWinTest()
- {
- iDrawMode=EClientRedrawsNormal;
-
- // Drawing the contents first before scrolling
- iTestWin->DrawNow();
-
- // Scrolling the test window and updating its y position
- iTestWin->DrawableWin()->Scroll(TPoint(0, 25));
- iYPoz += 25;
-
- // Invalidating and redrawing the area that should be updated
- TRect invalidRect(0,25, iWinSize.iWidth, 25*2);
- iTestWin->Invalidate(invalidRect);
- iTestWin->Redraw(invalidRect); // Redraw is used instead of DrawNow becuase the later calls Invalidate on the whole window
-
- // Displaying and then hiding the popup blank window
- iBlankWin.SetExtent(TPoint(iWinSize.iWidth+40,30), TSize(120, 100));
- iBlankWin.SetVisible(ETrue);
- iBlankWin.SetVisible(EFalse);
- TheClient->Flush();
- TheClient->WaitForRedrawsToFinish();
-
- // Resetting iBlankWin to its original size and position for future use
- // by other test cases
- iBlankWin.SetExtent(iWinPos, iWinSize);
- CheckWindowsMatch();
- iYPoz=0;
- }
-
-
-TPoint CTRedrawStoring::ComputeTextPosition(TPoint aPoint)
- {
- // Bounces text around the screen
- const TInt KSpacing = 30;
-
- if(iXPlus)
- {
- aPoint.iX += KSpacing;
- }
- else
- {
- aPoint.iX -= KSpacing;
- }
- if(aPoint.iX > iWinSize.iWidth)
- {
- aPoint.iX = iWinSize.iWidth - (aPoint.iX - iWinSize.iWidth);
- iXPlus = EFalse;
- }
- else if(aPoint.iX < 0)
- {
- aPoint.iX = -1*aPoint.iX;
- iXPlus = ETrue;
- }
-
- if(iYPlus)
- {
- aPoint.iY += KSpacing;
- }
- else
- {
- aPoint.iY -= KSpacing;
- }
- if(aPoint.iY > iWinSize.iHeight)
- {
- aPoint.iY = iWinSize.iHeight - (aPoint.iY - iWinSize.iHeight);
- iYPlus = EFalse;
- }
- else if(aPoint.iY < 0)
- {
- aPoint.iY = -1*aPoint.iY;
- iYPlus = ETrue;
- }
- return aPoint;
- }
-
-void CTRedrawStoring::FontCacheOverflowDrawingTestL(TBool aDiffGc, RWindow& aWindow)
- {
- const TInt KNumFonts = 250;
- const TInt KNumFontTypes = TheClient->iScreen->NumTypefaces();
- const TInt KMaxFontSize = 21; // font sizes to be tested in range 1 to 21
- const TInt KNumTestStyles = 4;
- const TInt KNumSizes = KNumFonts/(KNumFontTypes * KNumTestStyles) + 1; // chooses a number of font sizes to overflow cache, rounded up
- TInt textStyle = 0; //determines whether text is not changed (0), bold (1), bold and italic (2) or italic (3)
- TInt fontType = 0; //increment for different font types
- TInt currentSize = 1; // start with a font size of 1
- TInt fontSizeIncrement = KMaxFontSize - currentSize; //defaults to 20
- if(KNumSizes>2)
- {
- fontSizeIncrement = KMaxFontSize/(KNumSizes-1);
- }
- TInt numGcs = 1;
- if(aDiffGc)
- {
- numGcs = KNumFonts;
- }
- _LIT(KTestText,"b8-/+.,*:");
- const TSize KScrSize(TheClient->iScreen->SizeInPixels());
- TSize fontCacheWinSize(KScrSize.iWidth/2,KScrSize.iHeight);
- iTestWinPoint.SetXY(fontCacheWinSize.iWidth/2, fontCacheWinSize.iHeight/2); //draw initially near the middle of the screen
-
- CWindowGc* winGc = NULL;
- RArray<CWindowGc*> winGcList;
- CleanupClosePushL(winGcList);
-
- aWindow.BeginRedraw();
-
- // fill an array with fonts of different styles (see textStyle comment), types, and sizes
- RArray<CFont*> fontArray;
- CleanupClosePushL(fontArray);
- for(TInt ii = 0; ii < KNumFonts; ii++)
- {
- if(ii && !(ii % (KNumTestStyles * KNumSizes)))
- {
- fontType++;
- textStyle = 0;
- currentSize = 1;
- }
- else if(ii && !(ii % KNumTestStyles))
- {
- currentSize += fontSizeIncrement;
- textStyle = 0;
- }
- TTypefaceSupport support;
- TheClient->iScreen->TypefaceSupport(support, fontType);
- TFontSpec fspec(support.iTypeface.iName.Des(), currentSize);
- switch(textStyle++)
- {
- case 0:
- fspec.iFontStyle.SetPosture(EPostureUpright);
- break;
- case 1:
- fspec.iFontStyle.SetStrokeWeight(EStrokeWeightBold);
- break;
- case 2:
- fspec.iFontStyle.SetPosture(EPostureItalic);
- break;
- case 3:
- fspec.iFontStyle.SetStrokeWeight(EStrokeWeightNormal);
- break;
- }
- CFont* font = NULL;
- User::LeaveIfError(TheClient->iScreen->GetNearestFontToDesignHeightInPixels(font, fspec));
- User::LeaveIfError(fontArray.Append(font));
- font = NULL;
-
- // Draw to left half of screen using either one gc for all fonts, or using a font per gc, dependent on value of aDiffGc
- if(ii<numGcs)
- {
- winGc = new(ELeave) CWindowGc(TheClient->iScreen);
- CleanupStack::PushL(winGc);
- User::LeaveIfError(winGc->Construct());
- winGc->Activate(aWindow);
- User::LeaveIfError(winGcList.Append(winGc));
- }
- winGc->UseFont(fontArray[ii]);
- winGc->SetPenColor(TRgb::Color256(ii));
- winGc->DrawText(KTestText, iTestWinPoint = ComputeTextPosition(iTestWinPoint));
- }
-
- aWindow.EndRedraw();
- TheClient->Flush();
-
- // Copy the drawing to a bitmap and redraw to the right half of the screen
- CFbsBitmap* bitmap = new (ELeave) CFbsBitmap;
- CleanupStack::PushL(bitmap);
- bitmap->Create(TSize(fontCacheWinSize.iWidth, fontCacheWinSize.iHeight), EColor256);
- User::LeaveIfError(TheClient->iScreen->CopyScreenToBitmap(bitmap, TRect(fontCacheWinSize)));
- TPoint copiedBitmapOrigin(fontCacheWinSize.iWidth, 0);
- TRect bitmapArea(copiedBitmapOrigin, bitmap->SizeInPixels());
- aWindow.Invalidate(bitmapArea);
- aWindow.BeginRedraw(bitmapArea);
- winGc->BitBlt(copiedBitmapOrigin, bitmap);
- aWindow.EndRedraw();
- CleanupStack::PopAndDestroy(bitmap);
-
- // Trigger a redraw (left half of screen)
- RBlankWindow blankWindow(TheClient->iWs);
- CleanupClosePushL(blankWindow);
- User::LeaveIfError(blankWindow.Construct(*TheClient->iGroup->WinTreeNode(), ENullWsHandle));
- blankWindow.SetSize(TSize(fontCacheWinSize.iWidth, fontCacheWinSize.iHeight));
- blankWindow.Activate();
- TheClient->Flush();
- blankWindow.SetVisible(EFalse);
- TheClient->Flush();
- CleanupStack::PopAndDestroy(&blankWindow);
- TheClient->WaitForRedrawsToFinish();
- // Compare what is redrawn with copy of original drawing
- TEST(TheClient->iScreen->RectCompare(TRect(fontCacheWinSize),TRect(copiedBitmapOrigin,fontCacheWinSize)));
- // Clean up all memory
- for(TInt kk = 0; kk < KNumFonts; kk++)
- {
- if(kk < numGcs)
- {
- winGcList[kk]->Deactivate();
- }
- TheClient->iScreen->ReleaseFont(fontArray[kk]);
- }
- CleanupStack::PopAndDestroy(2+numGcs, &winGcList);
- }
-
-// As a full fledged test code is written for this implementation.
-// so this test code checks whether this defect is fixed.
-void CTRedrawStoring::DoTestDrawBitmapMaskedL(TInt aWsBitmap/*=EFalse*/)
- {
- // Create a source bitmap with display mode EColor16MU and Fill RGB lines successively
- TInt bitmapWidth=iWinSize.iWidth-40;
- TInt bitmapHeight=80;
- TSize bitmapSize(bitmapWidth,bitmapHeight);
- CFbsBitmap* fbsBitmap=NULL;
- CWsBitmap* wsBitmap=NULL;
- if (aWsBitmap)
- {
- wsBitmap=new(ELeave) CWsBitmap(TheClient->iWs);
- CleanupStack::PushL(wsBitmap);
- User::LeaveIfError(wsBitmap->Create(bitmapSize,EColor16MU));
- }
- else
- {
- fbsBitmap=new(ELeave) CFbsBitmap();
- CleanupStack::PushL(fbsBitmap);
- User::LeaveIfError(fbsBitmap->Create(bitmapSize,EColor16MU));
- }
-
- TBitmapUtil bmpUtil(aWsBitmap ? wsBitmap : fbsBitmap);
- bmpUtil.Begin(TPoint(0,0));
- TInt row,col;
- for(row=0;row<bitmapWidth;++row)
- {
- bmpUtil.SetPos(TPoint(row,0));
- for(col=0;col<bitmapHeight;++col)
- {
- if (row%3==0)
- {
- TRgb rgb(255,0,0);
- bmpUtil.SetPixel(rgb.Color16M());
- }
- else if (row%3==1)
- {
- TRgb rgb(0,255,0);
- bmpUtil.SetPixel(rgb.Color16M());
- }
- else
- {
- TRgb rgb(0,0,255);
- bmpUtil.SetPixel(rgb.Color16M());
- }
- bmpUtil.IncYPos();
- }
- }
- bmpUtil.End();
-
- // Create mask bitmap with display mode EGray256 and Fill white and black lines successively
- CFbsBitmap* fbsBitmapMask=NULL;
- CWsBitmap* wsBitmapMask=NULL;
- if (aWsBitmap)
- {
- wsBitmapMask=new(ELeave) CWsBitmap(TheClient->iWs);
- CleanupStack::PushL(wsBitmapMask);
- User::LeaveIfError(wsBitmapMask->Create(bitmapSize,EGray256));
- }
- else
- {
- fbsBitmapMask=new(ELeave) CFbsBitmap();
- CleanupStack::PushL(fbsBitmapMask);
- User::LeaveIfError(fbsBitmapMask->Create(bitmapSize,EGray256));
- }
-
- TBitmapUtil bmpUtilMask(aWsBitmap ? wsBitmapMask : fbsBitmapMask);
- bmpUtilMask.Begin(TPoint(0,0));
- for(row=0;row<bitmapWidth;++row)
- {
- bmpUtilMask.SetPos(TPoint(row,0));
- for(col=0;col<bitmapHeight;++col)
- {
- if (row%2==0)
- {
- bmpUtilMask.SetPixel(0xff000000);
- }
- else
- {
- bmpUtilMask.SetPixel(0xffffffff);
- }
- bmpUtilMask.IncYPos();
- }
- }
- bmpUtilMask.End();
- CleanupStack::Pop(2); // wsBitmap or fbsBitmap and fbsBitmapMask or wsBitmapMask
-
- // Create window and draw the content of it by using DrawBitmapMasked
- // Background to be red
- TSize screenSize=TheClient->iScreen->SizeInPixels();
- iWinRect.SetRect(screenSize.iWidth/3,0,2*screenSize.iWidth/3,screenSize.iHeight);
- iBitmapMaskedWin=CBitmapMaskedWin::NewL(fbsBitmap,fbsBitmapMask,wsBitmap,wsBitmapMask,KRgbRed,bitmapSize,EFalse,aWsBitmap);
- CleanupStack::PushL(iBitmapMaskedWin);
- iBitmapMaskedWin->SetExt(TPoint(screenSize.iWidth/3,0),iWinRect.Size());
- iBitmapMaskedWin->Activate();
- TheClient->Flush();
- TheClient->WaitForRedrawsToFinish();
-
- // Create a bitmap window which in its draw function it just bitblts its content
- // First fill that bitmap with red color
- iTestWinPoint.SetXY(2*screenSize.iWidth/3,0);
- iTestBitmap=CBitmap::NewL(iWinRect.Size(),EColor16MU);
- CleanupStack::PushL(iTestBitmap);
- iTestBitmap->Gc().SetBrushColor(TRgb(255,0,0));
- iTestBitmap->Gc().SetBrushStyle(CGraphicsContext::ESolidBrush);
- iTestBitmap->Gc().SetPenStyle(CGraphicsContext::ENullPen);
- iTestBitmap->Gc().DrawRect(iWinRect.Size());
- iTestBitmap->Gc().Reset();
- iTestBitmapWin=new(ELeave) CBitMapWin(iTestBitmap);
- CleanupStack::PushL(iTestBitmapWin);
- iTestBitmapWin->ConstructExtLD(*TheClient->iGroup,iTestWinPoint,iWinRect.Size());
- iTestBitmapWin->BaseWin()->SetRequiredDisplayMode(EColor16MU);
- iTestBitmapWin->BaseWin()->SetShadowDisabled(ETrue);
- iTestBitmapWin->BaseWin()->SetShadowHeight(0);
- iTestBitmapWin->AssignGC(*TheClient->iGc);
- iTestBitmapWin->Activate();
-
- // This if for testing with Invertmask as EFalse
- TSize tempSize=bitmapSize;
- DrawBitmapAndCheckL(tempSize,EColor16MU,(aWsBitmap ? wsBitmap : fbsBitmap),(aWsBitmap ? wsBitmapMask : fbsBitmapMask),EFalse);
-
- tempSize.SetSize(bitmapSize.iWidth*11/10,bitmapSize.iHeight*11/10);
- iBitmapMaskedWin->SetDestRectSize(tempSize);
- iBitmapMaskedWin->DrawNow();
- TheClient->WaitForRedrawsToFinish();
- DrawBitmapAndCheckL(tempSize,EColor16MU,(aWsBitmap ? wsBitmap : fbsBitmap),(aWsBitmap ? wsBitmapMask : fbsBitmapMask),EFalse);
-
- tempSize.SetSize(bitmapSize.iWidth*2/3,bitmapSize.iHeight*2/3);
- iBitmapMaskedWin->SetDestRectSize(tempSize);
- iBitmapMaskedWin->DrawNow();
- TheClient->WaitForRedrawsToFinish();
- DrawBitmapAndCheckL(tempSize,EColor16MU,(aWsBitmap ? wsBitmap : fbsBitmap),(aWsBitmap ? wsBitmapMask : fbsBitmapMask),EFalse);
-
- // This if for testing with Invertmask as ETrue
- tempSize=bitmapSize;
- iBitmapMaskedWin->SetInvertMask(ETrue);
- iBitmapMaskedWin->SetDestRectSize(tempSize);
- iBitmapMaskedWin->DrawNow();
- TheClient->WaitForRedrawsToFinish();
- DrawBitmapAndCheckL(tempSize,EColor16MU,(aWsBitmap ? wsBitmap : fbsBitmap),(aWsBitmap ? wsBitmapMask : fbsBitmapMask),ETrue);
-
- tempSize.SetSize(bitmapSize.iWidth*11/10,bitmapSize.iHeight*11/10);
- iBitmapMaskedWin->SetDestRectSize(tempSize);
- iBitmapMaskedWin->DrawNow();
- TheClient->WaitForRedrawsToFinish();
- DrawBitmapAndCheckL(tempSize,EColor16MU,(aWsBitmap ? wsBitmap : fbsBitmap),(aWsBitmap ? wsBitmapMask : fbsBitmapMask),ETrue);
-
- tempSize.SetSize(bitmapSize.iWidth*2/3,bitmapSize.iHeight*2/3);
- iBitmapMaskedWin->SetDestRectSize(tempSize);
- iBitmapMaskedWin->DrawNow();
- TheClient->WaitForRedrawsToFinish();
- DrawBitmapAndCheckL(tempSize,EColor16MU,(aWsBitmap ? wsBitmap : fbsBitmap),(aWsBitmap ? wsBitmapMask : fbsBitmapMask),ETrue);
-
- // With bitmap's display mode as EColor256 and invertmask EFalse
- if (aWsBitmap)
- {
- wsBitmap->SetDisplayMode(EColor256);
- }
- else
- {
- fbsBitmap->SetDisplayMode(EColor256);
- }
- iBitmapMaskedWin->BaseWin()->SetRequiredDisplayMode(EColor256);
- TheClient->Flush();
- TheClient->WaitForRedrawsToFinish();
-
- // Delete the tempbitmap and tempbitmapwin and recreate once again.
- CleanupStack::PopAndDestroy(2); // iTestBitmap, iTestBitmapWin
- iTestBitmap=NULL;
- iTestBitmapWin=NULL;
- iTestBitmap=CBitmap::NewL(iWinRect.Size(),EColor256);
- CleanupStack::PushL(iTestBitmap);
- iTestBitmap->Gc().SetBrushColor(TRgb(255,0,0));
- iTestBitmap->Gc().SetBrushStyle(CGraphicsContext::ESolidBrush);
- iTestBitmap->Gc().SetPenStyle(CGraphicsContext::ENullPen);
- iTestBitmap->Gc().DrawRect(iWinRect.Size());
- iTestBitmap->Gc().Reset();
- iTestBitmapWin=new(ELeave) CBitMapWin(iTestBitmap);
- CleanupStack::PushL(iTestBitmapWin);
- iTestBitmapWin->ConstructExtLD(*TheClient->iGroup,iTestWinPoint,iWinRect.Size());
- iTestBitmapWin->BaseWin()->SetRequiredDisplayMode(EColor256);
- iTestBitmapWin->BaseWin()->SetShadowDisabled(ETrue);
- iTestBitmapWin->BaseWin()->SetShadowHeight(0);
- iTestBitmapWin->AssignGC(*TheClient->iGc);
- iTestBitmapWin->Activate();
- TheClient->Flush();
- TheClient->WaitForRedrawsToFinish();
-
- tempSize=bitmapSize;
- iBitmapMaskedWin->SetInvertMask(EFalse);
- iBitmapMaskedWin->SetDestRectSize(tempSize);
- iBitmapMaskedWin->DrawNow();
- TheClient->WaitForRedrawsToFinish();
- DrawBitmapAndCheckL(tempSize,EColor256,(aWsBitmap ? wsBitmap : fbsBitmap),(aWsBitmap ? wsBitmapMask : fbsBitmapMask),EFalse);
-
- tempSize.SetSize(bitmapSize.iWidth*11/10,bitmapSize.iHeight*11/10);
- iBitmapMaskedWin->SetDestRectSize(tempSize);
- iBitmapMaskedWin->DrawNow();
- TheClient->WaitForRedrawsToFinish();
- DrawBitmapAndCheckL(tempSize,EColor256,(aWsBitmap ? wsBitmap : fbsBitmap),(aWsBitmap ? wsBitmapMask : fbsBitmapMask),EFalse);
-
- tempSize.SetSize(bitmapSize.iWidth*2/3,bitmapSize.iHeight*2/3);
- iBitmapMaskedWin->SetDestRectSize(tempSize);
- iBitmapMaskedWin->DrawNow();
- TheClient->WaitForRedrawsToFinish();
- DrawBitmapAndCheckL(tempSize,EColor256,(aWsBitmap ? wsBitmap : fbsBitmap),(aWsBitmap ? wsBitmapMask : fbsBitmapMask),EFalse);
-
- // With bitmap's display mode as EColor256 and invertmask ETrue
- tempSize=bitmapSize;
- iBitmapMaskedWin->SetInvertMask(ETrue);
- iBitmapMaskedWin->SetDestRectSize(tempSize);
- iBitmapMaskedWin->DrawNow();
- TheClient->WaitForRedrawsToFinish();
- DrawBitmapAndCheckL(tempSize,EColor256,(aWsBitmap ? wsBitmap : fbsBitmap),(aWsBitmap ? wsBitmapMask : fbsBitmapMask),ETrue);
-
- tempSize.SetSize(bitmapSize.iWidth*11/10,bitmapSize.iHeight*11/10);
- iBitmapMaskedWin->SetDestRectSize(tempSize);
- iBitmapMaskedWin->DrawNow();
- TheClient->WaitForRedrawsToFinish();
- DrawBitmapAndCheckL(tempSize,EColor256,(aWsBitmap ? wsBitmap : fbsBitmap),(aWsBitmap ? wsBitmapMask : fbsBitmapMask),ETrue);
-
- tempSize.SetSize(bitmapSize.iWidth*2/3,bitmapSize.iHeight*2/3);
- iBitmapMaskedWin->SetDestRectSize(tempSize);
- iBitmapMaskedWin->DrawNow();
- TheClient->WaitForRedrawsToFinish();
- DrawBitmapAndCheckL(tempSize,EColor256,(aWsBitmap ? wsBitmap : fbsBitmap),(aWsBitmap ? wsBitmapMask : fbsBitmapMask),ETrue);
-
- //To test if DrawBitmapMask uses stored commands when called to redraw the bitmap.
- if (aWsBitmap)
- {
- delete wsBitmapMask; //deleting the bitmap
- wsBitmapMask=NULL;
- DrawBitmapAndCheckL(tempSize,EColor256,(aWsBitmap ? wsBitmap : fbsBitmap),(aWsBitmap ? wsBitmapMask : fbsBitmapMask),ETrue);
- }
- CleanupStack::PopAndDestroy(3,iBitmapMaskedWin); // iBitmapMaskedWin,iTestBitmap,iTestBitmapWin
- }
-
-void CTRedrawStoring::DrawBitmapAndCheckL(const TSize aSize,TDisplayMode aDisplayMode,CFbsBitmap* aSrceBitmap,CFbsBitmap* aMaskBitmap,TBool aInvertMask)
- {
- TBool retVal;
- if (aMaskBitmap)
- {
- TRect srceRect(aSrceBitmap->SizeInPixels());
- TRect destRect(aSize);
- CBitmap* srcTempBitmap=CBitmap::NewL(aSize,aDisplayMode);
- CleanupStack::PushL(srcTempBitmap);
- srcTempBitmap->Gc().DrawBitmap(destRect,aSrceBitmap,srceRect);
- CBitmap* maskTempBitmap=CBitmap::NewL(aSize,EGray256);
- CleanupStack::PushL(maskTempBitmap);
- maskTempBitmap->Gc().DrawBitmap(destRect,aMaskBitmap,srceRect);
- iTestBitmap->Gc().SetPenStyle(CGraphicsContext::ENullPen);
- iTestBitmap->Gc().SetBrushColor(TRgb(255,0,0));
- iTestBitmap->Gc().SetBrushStyle(CGraphicsContext::ESolidBrush);
- iTestBitmap->Gc().DrawRect(iWinRect.Size());
- iTestBitmap->Gc().BitBltMasked(TPoint(),&srcTempBitmap->Bitmap(),destRect,&maskTempBitmap->Bitmap(),aInvertMask);
- iTestBitmap->Gc().Reset();
- iTestBitmapWin->DrawNow();
- TheClient->iWs.Finish();
- TheClient->WaitForRedrawsToFinish();
- retVal = TheClient->iScreen->RectCompare(TRect(iWinRect.iTl,aSize),TRect(iTestWinPoint,aSize));
- TEST(retVal);
- if (!retVal)
- INFO_PRINTF3(_L("TheClient->iScreen->RectCompare() return value - Expected: %d, Actual: %d"), ETrue, retVal);
- CleanupStack::PopAndDestroy(2,srcTempBitmap);
- }
- else
- //To test if DrawBitmapMask uses stored commands, when called to redraw the bitmap.
- //After the bitmap "wsBitmapMask" is being deleted, the window "iBitmapMaskWin" is first made invisible
- //and then visible on the screen. This operation invokes draw function which redraws the bitmap by using the stored commands.
- {
- iBitmapMaskedWin->SetVisible(EFalse);
- iBitmapMaskedWin->SetVisible(ETrue);
- retVal = TheClient->iScreen->RectCompare(TRect(iWinRect.iTl,aSize),TRect(iTestWinPoint,aSize));
- TEST(retVal);
- if (!retVal)
- INFO_PRINTF3(_L("TheClient->iScreen->RectCompare() return value - Expected: %d, Actual: %d"), ETrue, retVal);
- }
- }
-
-
-/**
- @SYMTestCaseID GRAPHICS-CODEBASE-WSERV-0052-0001
- @SYMPREQ PGM027
-
- @SYMTestCaseDesc Tests CWsBitmap::BitBltMasked and CFbsBitmap::BitBltMasked API's with \n
- By passing Null and unexpected values.
-
- @SYMTestPriority 1
-
- @SYMTestStatus Implemented
-
- @SYMTestActions Call BitBltMasked with different ways
- Source Bitpmap as NULL and MaskBitmap
- Source Bitmap and MaskBitmap as NULL (For both CFbsBitmap, CWsBitmap)
-
- @SYMTestExpectedResults Should not panic even if the passed bitmaps are NULL.
-
- */
-void CTRedrawStoring::DoBitBltAndMaskedNegTestsL()
- {
- CWsBitmap* testBitmap=NULL;
- CWsBitmap* maskBitmap=NULL;
- // Passing null Masked bitmap
- (TheClient->iGc)->BitBltMasked(TPoint(20,20), testBitmap, TRect(TPoint(0, 0), TSize(20,20)), maskBitmap, EFalse);
- testBitmap=new(ELeave) CWsBitmap(TheClient->iWs);
- CleanupStack::PushL(testBitmap);
- User::LeaveIfError(testBitmap->Load(TEST_BITMAP_NAME,3));
- (TheClient->iGc)->BitBltMasked(TPoint(20,20), testBitmap, TRect(TPoint(0, 0), TSize(20,20)), maskBitmap, EFalse);
- CleanupStack::PopAndDestroy(testBitmap);
- testBitmap=NULL;
- maskBitmap=new(ELeave) CWsBitmap(TheClient->iWs);
- CleanupStack::PushL(maskBitmap);
- User::LeaveIfError(maskBitmap->Load(TEST_BITMAP_NAME,4));
- // Passing null source bitmap
- (TheClient->iGc)->BitBltMasked(TPoint(20,20), testBitmap, TRect(TPoint(0, 0), TSize(20,20)), maskBitmap, EFalse);
- CleanupStack::PopAndDestroy(maskBitmap);
- CFbsBitmap* samBitmap=NULL;
- CFbsBitmap* mskBitmap=NULL;
- // Passing null Masked bitmap
- (TheClient->iGc)->BitBltMasked(TPoint(20,20), samBitmap, TRect(TPoint(0, 0), TSize(20,20)), mskBitmap, EFalse);
- samBitmap=new(ELeave) CWsBitmap(TheClient->iWs);
- CleanupStack::PushL(samBitmap);
- User::LeaveIfError(samBitmap->Load(TEST_BITMAP_NAME,3));
- (TheClient->iGc)->BitBltMasked(TPoint(20,20), samBitmap, TRect(TPoint(0, 0), TSize(20,20)), mskBitmap, EFalse);
- CleanupStack::PopAndDestroy(samBitmap);
- samBitmap=NULL;
- mskBitmap=new(ELeave) CWsBitmap(TheClient->iWs);
- CleanupStack::PushL(mskBitmap);
- User::LeaveIfError(mskBitmap->Load(TEST_BITMAP_NAME,4));
- // Passing null source bitmap
- (TheClient->iGc)->BitBltMasked(TPoint(20,20), testBitmap, TRect(TPoint(0, 0), TSize(20,20)), mskBitmap, EFalse);
- CleanupStack::PopAndDestroy(mskBitmap);
- CWsBitmap* cwBitmap=NULL;
- TPoint pos(0,0);
- // Passing null CWsBitmap
- TheClient->iGc->BitBlt(pos,cwBitmap);
- TheClient->iGc->BitBlt(pos,cwBitmap,TRect(0,0,10,10));
- // Passing null CFbsBitmap
- CFbsBitmap* fbsBitmap=NULL;
- TheClient->iGc->BitBlt(pos,fbsBitmap);
- TheClient->iGc->BitBlt(pos,fbsBitmap,TRect(0,0,10,10));
- }
-
-/* TESTCASE: INC095798
- * TITLE: Partial Draw Now Test
- * IMPORTANCE: 1
- *
- * ACTION: Changes the color of a rectangle inside a window to simulate CCoeControl::DrawNow()
- * for an embedded control that does not own a window.
- *
- * RESULT: The rectangle should change color immediately, without waiting for a redraw event
- * from the Window Server, and this should work with or without partial redraw storing and
- * with or without transparency.
- */
-void CTRedrawStoring::DoPartialDrawNowTestL( TBool aUseTransparency )
- {
- /*
- * Obtain the color of a particular reference pixel which will be used for
- * comparison later on when the test window is added covering it.
- */
- const TPoint referencePixel(iWinPos+TPoint(50,50));
- TRgb backgroundReferenceColor;
- TheClient->Flush();
- TheClient->WaitForRedrawsToFinish();
- TheClient->iWs.Finish();
- TheClient->iScreen->GetPixel(backgroundReferenceColor, referencePixel);
- /*
- * Add a test window which emulates a CONE control with a lodger.
- * The window is transparent according to parameter aUseTransparency
- */
- CPartialDrawNowWin* testWin=new(ELeave) CPartialDrawNowWin;
- CleanupStack::PushL(testWin);
- testWin->ConstructL(*TheClient->iGroup);
- testWin->AssignGC(*TheClient->iGc);
- testWin->SetExt(iWinPos+TPoint(25,25),TSize(300,200));
- testWin->Win()->SetRequiredDisplayMode(iTestDisplayMode);
- testWin->Win()->SetShadowDisabled(ETrue);
- if (aUseTransparency)
- TEST(testWin->MakeTransparent() == KErrNone);
- testWin->Win()->Activate();
- testWin->Redraw();
- testWin->SetLodger(TRect(20,20,30,30));
- TheClient->Flush();
- TheClient->WaitForRedrawsToFinish();
- TheClient->iWs.Finish();
- TRgb actualColor;
- TheClient->iScreen->GetPixel(actualColor,iWinPos+TPoint(50,50));
- if (aUseTransparency)
- {
- CColorBlender* blender = CColorBlender::NewLC(iTestDisplayMode);
- blender->SetInitialColor(backgroundReferenceColor);
- blender->Blend(TRgb(0, 0, 255, 127)); //the blue background of the window
- blender->Blend(TRgb(0, 255, 0, 127)); //the green color of the lodger
- const TRgb expectedColor = blender->Color();
- TEST_COLOR_MATCH(expectedColor, actualColor);
- CleanupStack::PopAndDestroy(blender);
- }
- else
- {
- TEST_COLOR_MATCH(KRgbGreen, actualColor);
- }
- CleanupStack::PopAndDestroy(testWin);
- }
-
-/*CPartialDrawNowWin*/
-CPartialDrawNowWin::CPartialDrawNowWin()
- : iLodger( 0, 0, 0, 0 )
- {}
-
-TInt CPartialDrawNowWin::MakeTransparent()
- {
- const TInt err = iWin.SetTransparencyAlphaChannel();
- if(!err)
- {
- iWin.SetBackgroundColor(TRgb(0, 0, 0, 0));
- iTransparent = ETrue;
- }
- return err;
- }
-
-void CPartialDrawNowWin::SetLodger( const TRect &aLodger )
- {
- iLodger = aLodger;
- iWin.Invalidate( aLodger );
- Redraw( aLodger );
- }
-
-void CPartialDrawNowWin::Redraw()
- {
- iWin.BeginRedraw();
- DrawWindowAndLodger();
- iWin.EndRedraw();
- }
-
-void CPartialDrawNowWin::Redraw( const TRect &aRect )
- {
- iWin.BeginRedraw( aRect );
- DrawWindowAndLodger();
- iWin.EndRedraw();
- }
-
-void CPartialDrawNowWin::DrawWindowAndLodger()
- {
- iGc->Activate( iWin );
- iGc->SetPenStyle( CGraphicsContext::ENullPen );
- iGc->SetBrushStyle( CGraphicsContext::ESolidBrush );
- iGc->SetBrushColor( iTransparent ? TRgb(0, 0, 255, 127) : KRgbBlue );
- iGc->Clear();
- if (!iLodger.IsEmpty())
- {
- iGc->SetBrushColor( iTransparent ? TRgb(0, 255, 0, 127) : KRgbGreen );
- iGc->DrawRect( iLodger );
- }
- iGc->Deactivate();
- }
-
-
-
-/* TESTCASE: PDEF101789
- TITLE: Expose Window Test for PDEF101789: WServ does not perform well in 9.2 release.
-
- ACTION: Draws a base window followed by a top window that completly covers the base window.
- The base window has an area invalidated and the top window is then moved out of the
- way to expose the bottom window. The invalid are is then drawn to within a begin/end redraw
-
- RESULT: The invalid area on the base window should be redrawn correctly betweeen the begin/end
- redraw pair after the base window has been exposed. The invalid area is drawn in a different
- colour to the base window.
- */
-void CTRedrawStoring::DoExposeTestL(TInt aIteration)
- {
- _LIT(KErrorMessage,"Expected colour value does not match actual value : Windows not drawn correctly");
-
- TPartialRedrawType type = iTest->RedrawStoreTypeL();
- if(type==EPartialRedraw_FullRedrawSupport)
- {
- //draw a green coloured base window
- CPartialRedrawBottomWin* bottomWin = new (ELeave) CPartialRedrawBottomWin();
- CleanupStack::PushL(bottomWin);
- bottomWin->ConstructL(*TheClient->iGroup);
- bottomWin->Init();
- bottomWin->AssignGC(*TheClient->iGc);
- bottomWin->BaseWin()->SetShadowDisabled(ETrue);
- bottomWin->BaseWin()->SetShadowHeight(0);
- bottomWin->SetExt(iWinPos+TPoint(10,10), iTest->StdTestWindowSize());
- bottomWin->Win()->Activate();
- bottomWin->DrawPartial(TRect(TPoint(0,0), iTest->StdTestWindowSize()));
- TheClient->Flush();
-
- //draw a red coloured top window that completely covers the base window
- CPartialRedrawTopWin* topWin = new (ELeave) CPartialRedrawTopWin();
- CleanupStack::PushL(topWin);
- topWin->ConstructL(*TheClient->iGroup);
- topWin->Init();
- topWin->AssignGC(*TheClient->iGc);
- topWin->BaseWin()->SetShadowDisabled(ETrue);
- topWin->BaseWin()->SetShadowHeight(0);
- topWin->SetExt(iWinPos+TPoint(10,10),iTest->StdTestWindowSize());
- topWin->Win()->Activate();
- topWin->DrawPartial(TRect(TPoint(0,0), iTest->StdTestWindowSize()));
- TheClient->Flush();
-
- //Invalidate the an area on the bottom window.
- TRect rect(TPoint(10,10), TSize(iTest->StdTestWindowSize().iWidth/4, iTest->StdTestWindowSize().iHeight/4));
- bottomWin->Win()->Invalidate(rect);
-
- //Now expose the bottom window by moving the top window out of the way
- //using one of the methods below
- switch(aIteration)
- {
- case 0:
- topWin->Win()->SetOrdinalPosition(-10);
- break;
- case 1:
- topWin->SetPos(iWinPos + TPoint(150,150));
- break;
- case 2:
- topWin->SetVisible(EFalse);
- break;
- }
-
- //now do a begin/end redraw to draw a blue rect to the invalid area on the bottom window
- bottomWin->Win()->BeginRedraw(rect);
- bottomWin->Gc()->Activate(*bottomWin->Win());
- bottomWin->Gc()->SetBrushStyle(CGraphicsContext::ESolidBrush);
- bottomWin->Gc()->SetBrushColor(TRgb(0,0,255,255));
- bottomWin->Gc()->SetPenStyle(CGraphicsContext::ESolidPen);
- bottomWin->Gc()->SetPenColor(0);
- bottomWin->Gc()->DrawRect(rect);
- bottomWin->Gc()->Deactivate();
- bottomWin->Win()->EndRedraw();
- TheClient->Flush();
-
- //get the color of a pixel within the invalid area that should be coloured
- //blue if the window is redrawn correctly. In the defect this blue area is NOT drawn
- TPoint point =iWinPos + TPoint(30,30);
- TRgb colour;
- TheClient->iScreen->GetPixel(colour,point);
- TRgb expectedColour=TRgb(0,0,255,255);
- TEST(colour == expectedColour);
- if (colour!=expectedColour)
- INFO_PRINTF1(KErrorMessage);
-
- CleanupStack::PopAndDestroy(2, bottomWin);
- }
- }
-/*CPartialRedrawTopWin*/
-void CPartialRedrawTopWin::Init()
- {
- Win()->SetRequiredDisplayMode(EColor16MA);
- Win()->SetTransparencyAlphaChannel();
- Win()->SetBackgroundColor(TRgb(255,255,255,255));
- }
-
-void CPartialRedrawTopWin::Draw()
- {
- DoDraw();
- }
-
-void CPartialRedrawTopWin::DoDraw()
- {
- DrawFullWindowRect();
- }
-
-void CPartialRedrawTopWin::DrawFullWindowRect()
- {
- TRect rect = TRect(TPoint(0,0),iSize);
- iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
- iGc->SetBrushColor(TRgb(255,0,0,255));
- iGc->DrawRect(rect);
- }
-
-void CPartialRedrawTopWin::DrawPartial(TRect aRect)
- {
- Invalidate(aRect);
- Win()->BeginRedraw(aRect);
- iGc->Activate(*Win());
- DrawFullWindowRect();
- iGc->Deactivate();
- Win()->EndRedraw();
- }
-
-/*CPartialRedrawBottomWin*/
-void CPartialRedrawBottomWin::Init()
- {
- Win()->SetRequiredDisplayMode(EColor16MA);
- Win()->SetTransparencyAlphaChannel();
- Win()->SetBackgroundColor(TRgb(255,255,255,255));
- }
-
-void CPartialRedrawBottomWin::Draw()
- {
- DoDraw();
- }
-
-void CPartialRedrawBottomWin::DoDraw()
- {
- DrawFullWindowRect();
- }
-
-void CPartialRedrawBottomWin::DrawFullWindowRect()
- {
- TRect rect = TRect(TPoint(0,0),iSize);
- iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
- iGc->SetBrushColor(TRgb(0,255,0,255));
- iGc->DrawRect(rect);
- }
-
-void CPartialRedrawBottomWin::DrawPartial(TRect aRect)
- {
- Invalidate(aRect);
- Win()->BeginRedraw(aRect);
- iGc->Activate(*Win());
- DrawFullWindowRect();
- iGc->Deactivate();
- Win()->EndRedraw();
- }
-
-//CPartialRedrawTiledWin
-
-void CPartialRedrawTiledWin::Init(TRgb aColour,TBool aTransparent)
- {
- iColour=aColour;
- Win()->SetRequiredDisplayMode(EColor16MA);
- if(aTransparent)
- {
- Win()->SetTransparencyAlphaChannel();
- }
- Win()->SetBackgroundColor(iColour);
- }
-
-void CPartialRedrawTiledWin::Draw()
- {
- DoDraw();
- }
-
-void CPartialRedrawTiledWin::DoDraw()
- {
- DrawFullWindowRect();
- }
-
-void CPartialRedrawTiledWin::DrawFullWindowRect()
- {
- TRect rect = TRect(TPoint(0,0),iSize);
- iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
- iGc->SetBrushColor(iColour);
- iGc->DrawRect(rect);
- }
-
-void CPartialRedrawTiledWin::DrawPartial(TRect aRect)
- {
- Invalidate(aRect);
- Win()->BeginRedraw(aRect);
- iGc->Activate(*Win());
- DrawFullWindowRect();
- iGc->Deactivate();
- Win()->EndRedraw();
- }
-
-/* TESTCASE: DEF101889
- TITLE: Expose Window Test for DEF101889 Windows tiled by opaque children do not redraw correctly
- under certain use cases
-
- ACTION: Draws a base window then a further window over it that is tiled by opaque children.
- This window is then, either completely or partially, covered by a transparent window.
- The tiled window is then set invisible. Drawing is then performed to the base window.
-
- RESULT: The windows should be correctly drawn. More specifically the transparent top window should draw
- the correct window underneath it. i.e. after the setinvisible command the base window should be
- drawn
- */
-void CTRedrawStoring::DoExposeTest2L(TInt aIteration)
- {
- //This test reproduces problems found during the fixing of DEF096874: WServ does not perform well in 9.2 release.
- //The issues (described later) only exhbit themselves when there are no shadows present in the system.
- //Unfortunatly there is no direct way of disabling shadows from the test code so under normal running the
- //following tests will never hit the defect and always pass.
- //To disable shadows the WSERV source code has to be manually altered by editing the CWsClientWindow::CommandL
- //method in clwin.cpp. In the EWsWinOpSetShadowHeight case alter the SetHeightDiff(*pData.Int); function call
- //to read SetHeightDiff(0);
- //The use cases are related to DEF096874 in that the problem occurs when we have 2 windows overlaying each other
- //where the top window is completely tiled by child windows. DEF096874 occurs when the window that is tiled is made
- //invisible, with the result that the windows are not redrawn correctly.
- //The use cases reproduced by this test are when the two windows are either fully or partially obscured by a
- //further transparent window laid over the both of them. When the tiled window is made invisible then
- //the windows are not updated properly resulting in either transparency problems or the windows not being drawn
- //correctly.
- //There are further use cases not addressed here i.e. tiled windows becoming visible underneath a transparent window
- //that relate to the same fundamental problem but are correctlly addressed by the defect fix.
-
- TPartialRedrawType type=iTest->RedrawStoreTypeL();
- if(type!=EPartialRedraw_FullRedrawSupport)
- return;
-
- _LIT(KErrorMessage,"Pixel expected to have colour 0x%x has color 0x%x");
- const TSize winSize=iTest->StdTestWindowSize();
- const TInt offset=winSize.iWidth/2;
-
- //draw a green coloured base window
- CPartialRedrawBottomWin* underWin = new(ELeave) CPartialRedrawBottomWin();
- CleanupStack::PushL(underWin);
- underWin->ConstructL(*TheClient->iGroup);
- underWin->Init();
- underWin->AssignGC(*TheClient->iGc);
- underWin->BaseWin()->SetShadowDisabled(ETrue);
- underWin->SetExt(iWinPos+TPoint(10,10),winSize);
- underWin->Win()->Activate();
- underWin->DrawPartial(TRect(winSize));
- if (TDisplayModeUtils::NumDisplayModeColors(underWin->BaseWin()->DisplayMode())<=4096)
- {
- CleanupStack::PopAndDestroy(underWin);
- _LIT(KLog,"Cannot run test without more than 4K colors");
- LOG_MESSAGE(KLog);
- return;
- }
-
- //draw a red coloured top window that completly covers the base window
- CPartialRedrawTopWin* overWin = new (ELeave) CPartialRedrawTopWin();
- CleanupStack::PushL(overWin);
- overWin->ConstructL(*TheClient->iGroup);
- overWin->Init();
- overWin->AssignGC(*TheClient->iGc);
- overWin->BaseWin()->SetShadowDisabled(ETrue);
- overWin->SetExt(iWinPos+TPoint(10,10),winSize);
- overWin->Win()->Activate();
- overWin->DrawPartial(TRect(winSize));
-
- //create the two tiles to attach to the top window
- CPartialRedrawTiledWin* tile = new (ELeave) CPartialRedrawTiledWin();
- CleanupStack::PushL(tile);
- tile->ConstructL(*overWin);
- tile->Init(TRgb(255,255,0,255),EFalse);
- tile->AssignGC(*TheClient->iGc);
- tile->BaseWin()->SetShadowDisabled(ETrue);
- tile->SetSize(winSize);
- tile->Win()->Activate();
- tile->DrawPartial(TRect(winSize));
-
- //create a transparent window overlaying the whole arrangement
- CPartialRedrawTiledWin* transparentWin = new (ELeave) CPartialRedrawTiledWin();
- CleanupStack::PushL(transparentWin);
- transparentWin->ConstructL(*TheClient->iGroup);
- transparentWin->Init(TRgb(255,255,255,0),ETrue);
- transparentWin->AssignGC(*TheClient->iGc);
- transparentWin->BaseWin()->SetShadowDisabled(ETrue);
- //for the first iteration have the transparent window fully covering the other windows
- //for the second iteration have the tansparent window partially covering the other windows.
- transparentWin->SetExt(iWinPos+TPoint(10+(aIteration==0?0:offset),10),winSize);
- transparentWin->Win()->Activate();
- transparentWin->DrawPartial(TRect(winSize));
-
- //Now expose the bottom window (underWin) by setting the top window (overWin) invisible
- //the opaque child window (tile) should also go invisible
- overWin->SetVisible(EFalse);
- TheClient->Flush();
- TheClient->WaitForRedrawsToFinish();
- //get the color of a pixel within the window. If everything has been drawn correctly the
- //pixel should be green ( the colour of the base window, underWin)
- TPoint point =iWinPos + TPoint(30,30);
- TRgb colour;
- TheClient->iScreen->GetPixel(colour,point);
- TRgb expectedColour=TRgb(0,255,0,255);
- TEST(colour == expectedColour);
- if (colour!=expectedColour)
- LOG_MESSAGE3(KErrorMessage,expectedColour.Value(),colour.Value());
- //for partially covered windows the above code tests the uncovered region so an additional test
- //is needed on a pixel in the covered region.
- if (aIteration!=0)
- {
- point+=TPoint(offset,0);
- TheClient->iScreen->GetPixel(colour,point);
- TEST(colour==expectedColour);
- if (colour!=expectedColour)
- LOG_MESSAGE3(KErrorMessage,expectedColour.Value(),colour.Value());
- }
- CleanupStack::PopAndDestroy(4, underWin); //tile,topWin,transparentWin
- }
-
-/* Test automatically purging the redraw store */
-
-CResetRedrawStoreWin* CTRedrawStoring::CreatePartialRedrawWinLC(const TPoint &aPos, const TSize &aSize, CTWin *aParent)
- {
- CResetRedrawStoreWin* testWin = new (ELeave) CResetRedrawStoreWin();
- CleanupStack::PushL(testWin);
- if (aParent)
- testWin->ConstructL(*aParent);
- else
- testWin->ConstructL(*TheClient->iGroup);
- testWin->Init();
- testWin->AssignGC(*TheClient->iGc);
- testWin->BaseWin()->SetShadowDisabled(ETrue);
- testWin->BaseWin()->SetShadowHeight(0);
- testWin->Win()->SetVisible(EFalse);
- testWin->Win()->Activate();
- testWin->SetExt(aPos,aSize);
- testWin->SetVisible(ETrue);
- return(testWin);
- }
-
-CNoDrawWin* CTRedrawStoring::CreateNoDrawWinLC(const TPoint &aPos, const TSize &aSize)
- {
- CNoDrawWin* noDrawWin=new (ELeave) CNoDrawWin();
- CleanupStack::PushL(noDrawWin);
- noDrawWin->ConstructExtLD(*TheClient->iGroup, aPos, aSize);
- noDrawWin->AssignGC(*TheClient->iGc);
- noDrawWin->Win()->SetRequiredDisplayMode(iTestDisplayMode);
- noDrawWin->Win()->SetTransparencyAlphaChannel();
- noDrawWin->Win()->SetBackgroundColor(TRgb(127,127,127,127));
- noDrawWin->BaseWin()->SetShadowDisabled(ETrue);
- noDrawWin->BaseWin()->SetShadowHeight(0);
- noDrawWin->Win()->SetVisible(ETrue);
- noDrawWin->Activate();
- noDrawWin->Win()->BeginRedraw();
- noDrawWin->Gc()->Activate(*noDrawWin->Win());
- CPartialRedrawWin::DrawRects(*noDrawWin->Gc(), aSize,
- TPoint(0,0), ETrue, EPartialRedraw_Unknown);
- noDrawWin->Gc()->Deactivate();
- noDrawWin->Win()->EndRedraw();
- return(noDrawWin);
- }
-
-void CTRedrawStoring::AutoResetRedrawStoreTestsL()
- {
- //PeterI This tests redraw store resetting by monitoring the wserv heap.
- //It currently fails as it performs too many iterations of the test i.e. it doesn't reset as frequently
- //as the orignal werv. Needs investigation to determine what the expected number of resets should be for
- //the Mk3 wserv.
- /*
- if (iPartialRedrawType==EPartialRedraw_FullRedrawSupport)
- {
- const TInt startWsHeapCount=TheClient->iWs.HeapCount();
- const TInt KNumFlagsToTest=4;
- const TInt KNumFlagStatesToTest=1<<KNumFlagsToTest;
- for(TUint flags=0;flags<KNumFlagStatesToTest;flags++)
- {
- #if defined(LOGGING)
- _LIT(KLog,"AutoResetRedrawStoreTestsL, running test with flags 0x%x");
- LOG_MESSAGE2(KLog,flags);
- #endif
- DoAutoResetRedrawStoreTestL(flags&0x01,flags&0x02,flags&0x04,flags&0x08);
- }
- // Granularity of buffers can leave odd extra cells, hard to specify an exact amount
- // This may need tweaking again future, should hand verify any gains are not cumulative
- // by running this test multiple times and making sure the total does not keep
- // rising everytime around.
- const TInt KHeapTotalSafetyMargin=16;
- const TInt endHeapCount=TheClient->iWs.HeapCount();
- TEST((startWsHeapCount+KHeapTotalSafetyMargin)>=endHeapCount);
- }
- */
- }
-
-void CTRedrawStoring::DoAutoResetRedrawStoreTestL(TBool aTwoWins, TBool aAnimateBothWins, TBool aKeepGcActive, TBool aUpdateInRedraw)
- {
- TRect testRect1(iTestWin->BaseWin()->InquireOffset(*TheClient->iGroup->WinTreeNode()),iWinSize);
- TRect testRect2(iCheckWin->BaseWin()->InquireOffset(*TheClient->iGroup->WinTreeNode()),iWinSize);
-//
- TSize testWinSize1(iWinSize.iWidth/3,iWinSize.iHeight/3);
- TSize testWinSize2(iWinSize.iWidth/2,iWinSize.iHeight/2);
- TPoint topLeft=iWinPos+TPoint(100,100);
- TInt tooBig=topLeft.iX+testWinSize1.iWidth-testRect1.iBr.iX;
- if (tooBig>0)
- topLeft.iX-=tooBig;
-
- CResetRedrawStoreWin* testWin1=CreatePartialRedrawWinLC(topLeft,testWinSize1);
- CResetRedrawStoreWin* testWin2=CreatePartialRedrawWinLC(topLeft-TPoint(50,50),testWinSize2);
- testWin1->SetUpdateInRedraw(aUpdateInRedraw);
- testWin2->SetUpdateInRedraw(aUpdateInRedraw);
-//
- topLeft+=iCheckWin->Position()-iWinPos;
- CResetRedrawStoreWin* tW1=CreatePartialRedrawWinLC(topLeft,testWinSize1);
- CResetRedrawStoreWin* tW2=CreatePartialRedrawWinLC(topLeft-TPoint(50,50),testWinSize2);
- tW1->SetUpdateInRedraw(aUpdateInRedraw);
- tW2->SetUpdateInRedraw(aUpdateInRedraw);
-//
- TheClient->Flush();
- TheClient->WaitForRedrawsToFinish();
-//
- const TInt KNumTestResets1=5;
- const TInt KNumTestResets2=15;
- const TInt KMaxIterationsPerReset=20;
- const TInt numTestResets=aTwoWins?KNumTestResets2:KNumTestResets1;
- const TInt maxTotalIterations=numTestResets*KMaxIterationsPerReset;
- TInt resets=0;
-//
- const TInt startWsHeapCount=TheClient->iWs.HeapCount();
- TInt baseWsHeapCount=startWsHeapCount;
- TInt prevWsHeapCount=0;
- TInt totalIterations=0;
- testWin1->SetKeepGcActive(aKeepGcActive);
- if (aAnimateBothWins)
- testWin2->SetKeepGcActive(aKeepGcActive);
- do
- {
- testWin1->UpdateAnim(1);
- testWin1->UpdateAnim(1);
- testWin1->UpdateAnim(1);
- if (aAnimateBothWins)
- testWin2->UpdateAnim(3);
- if (aTwoWins)
- {
- tW1->UpdateAnim(1);
- tW1->UpdateAnim(2);
- if (aAnimateBothWins)
- {
- tW2->UpdateAnim(1);
- tW2->UpdateAnim(1);
- tW2->UpdateAnim(1);
- }
- }
- TBool failed=testWin1->Failed();
- TEST(!failed);
- if (failed)
- {
- _LIT(KLog,"Window had fail flag set");
- LOG_MESSAGE(KLog);
- }
-//
- TheClient->Flush();
- TheClient->WaitForRedrawsToFinish();
- if (aTwoWins && !aUpdateInRedraw)
- {
- TBool match=TheClient->iScreen->RectCompare(testRect1,testRect2);
- TEST(match);
- if (!match)
- {
- _LIT(KLog,"Rectangle Area doesn't match, resets=%d (TwoWins=%d,AnimateBoth=%d,KeepActive=%d,InRedraw=%d)");
- LOG_MESSAGE6(KLog,resets,aTwoWins,aAnimateBothWins,aKeepGcActive,aUpdateInRedraw);
- }
- }
- const TInt wsHeapCount=TheClient->iWs.HeapCount();
- TInt lowGap=wsHeapCount-baseWsHeapCount;
- TInt highGap=prevWsHeapCount-wsHeapCount;
- if (prevWsHeapCount>0 && ((aAnimateBothWins || aTwoWins)?highGap>0:lowGap<highGap))
- {
- baseWsHeapCount=wsHeapCount;
- resets++;
- }
- totalIterations++;
- if (totalIterations>=maxTotalIterations)
- {
- TEST(EFalse);
- _LIT(KLog,"Too many iterations, number %d, max expect %d");
- LOG_MESSAGE3(KLog,totalIterations,maxTotalIterations);
- break;
- }
- prevWsHeapCount=wsHeapCount;
- } while(resets<numTestResets);
- if (!aTwoWins && !aAnimateBothWins)
- { // With two wins resetting of the redraw store will be out of sync, so heap won't be reset
- if (aTwoWins || aAnimateBothWins || aKeepGcActive || !aUpdateInRedraw)
- { // First time around with aUpdateInRedraw causes extra redraw store buffer allocation
- const TInt endHeapCount=TheClient->iWs.HeapCount();
- const TInt KHeapSafetyMargin=4; // Granularity of buffers can leave odd extra cells, hard to specify an exact amount
- TBool heapUsageError=(startWsHeapCount+KHeapSafetyMargin>=endHeapCount);
- TEST(heapUsageError);
- if (!heapUsageError)
- {
- _LIT(KLog,"Memory Allocation Error, Before=%d, After=%d (Allowable Margin=%d)");
- LOG_MESSAGE4(KLog,startWsHeapCount,endHeapCount,KHeapSafetyMargin);
- }
- }
- }
-//
- CleanupStack::PopAndDestroy(4, testWin1);
- }
-
-void CTRedrawStoring::RedrawStoreWithSetExtentL()
-/* Test how the redraw store deals with windows changing their extent
-*/
- {
- TSize testSize(4*iWinSize.iWidth/7, iWinSize.iHeight);
- TRect testRect1(iTestWin->BaseWin()->InquireOffset(*TheClient->iGroup->WinTreeNode()),testSize);
- TRect testRect2(iCheckWin->BaseWin()->InquireOffset(*TheClient->iGroup->WinTreeNode()),testSize);
- TSize testWinSize1a;
- TSize testWinSize2;
- TPoint winOffset1;
- TPoint winOffset2;
- GetTestWinSizeAndPos(1,winOffset1,testWinSize1a);
- GetTestWinSizeAndPos(0,winOffset2,testWinSize2);
- TPoint winPos1(iWinPos + winOffset1);
- enum TSetExtentTestMode {ESetExtentTestModeExpandXY,ESetExtentTestModeExpandY,ESetExtentTestModeShrinkXY,ESetExtentTestModeShrinkY,ESetExtentTestModeShrinkXExpandY,ESetExtentTestModeCount};
- for(TInt extMode=ESetExtentTestModeExpandXY;extMode<ESetExtentTestModeCount;extMode++)
- {
- enum TSetExtentInvalidateTestMode {ESetExtentInvalidateTestModeBefore,ESetExtentInvalidateTestModeAfter,ESetExtentInvalidateTestModeBeforeWithRedraw,ESetExtentInvalidateTestModeCount};
- for(TInt invalidateMode=ESetExtentInvalidateTestModeBefore;invalidateMode<ESetExtentInvalidateTestModeCount;invalidateMode++)
- {
- TSize testWinSize1b(testWinSize1a);
- switch(extMode)
- {
- case ESetExtentTestModeExpandXY:
- testWinSize1b.iWidth=iWinSize.iWidth/4;
- testWinSize1b.iHeight=iWinSize.iHeight/4;
- break;
- case ESetExtentTestModeExpandY:
- testWinSize1b.iHeight=iWinSize.iHeight/4;
- break;
- case ESetExtentTestModeShrinkXY:
- testWinSize1b.iWidth=iWinSize.iWidth/2;
- testWinSize1b.iHeight=iWinSize.iHeight/2;
- break;
- case ESetExtentTestModeShrinkY:
- testWinSize1b.iHeight=iWinSize.iHeight/2;
- break;
- case ESetExtentTestModeShrinkXExpandY:
- testWinSize1b.iWidth=iWinSize.iWidth/2;
- testWinSize1b.iHeight=iWinSize.iHeight/4;
- break;
- }
-
- CResetRedrawStoreWin* testWin1=CreatePartialRedrawWinLC(winPos1, testWinSize1b);
- CResetRedrawStoreWin* testWin2=CreatePartialRedrawWinLC(iWinPos + winOffset2, testWinSize2);
- CResetRedrawStoreWin* tW1=CreatePartialRedrawWinLC(iCheckWin->Position() + winOffset1, testWinSize1a);
- CResetRedrawStoreWin* tW2=CreatePartialRedrawWinLC(iCheckWin->Position() + winOffset2, testWinSize2);
- TheClient->Flush();
- TheClient->WaitForRedrawsToFinish();
-//
- if (invalidateMode==ESetExtentInvalidateTestModeBeforeWithRedraw)
- {
- testWin1->PreSetSize(testWinSize1a);
- testWin1->DrawNow();
- }
- if (invalidateMode==ESetExtentInvalidateTestModeBefore)
- testWin1->Invalidate();
- testWin1->SetExt(winPos1,testWinSize1a);
- if (invalidateMode==ESetExtentInvalidateTestModeAfter)
- testWin1->Invalidate();
- TheClient->Flush();
- TBool redrawWaiting=TheClient->WaitUntilRedrawPending();
- TheClient->WaitForRedrawsToFinish();
- TInt testRet=TheClient->iScreen->RectCompare(testRect1,testRect2);
- if (!testRet)
- {
- TEST(EFalse);
- _LIT(KRedrawStoreSetExtentFail,"Fade Regions fail: extMode=%d, invalidateMode=%d");
- LOG_MESSAGE3(KRedrawStoreSetExtentFail,extMode,invalidateMode);
- }
-//
- CleanupStack::PopAndDestroy(4, testWin1);
- }
- }
- }
-
-void CTRedrawStoring::PartialRedrawWithEmptyRedrawStoreL()
- {
- for(TInt numWins=1;numWins<4;numWins++)
- {
- const TInt KNumTestFlags=3;
- for(TUint flags=0;flags<(1<<KNumTestFlags);flags++)
- DoPartialRedrawWithEmptyRedrawStoreL(numWins,flags&0x1,flags&0x2,flags&0x4);
- }
- }
-
-void CTRedrawStoring::DoPartialRedrawWithEmptyRedrawStoreL(TInt aNumWins, TBool aDoWinOnTop, TBool aRedrawWindow, TBool aChildWindows)
-/* This code has been written to verify how the partial redraw store deals with the
-case where it gets a partial redraw at a time when the redraw store is empty and awaiting
-a replacement set of commands using low priority redraws.
-*/
- {
- if (aChildWindows && aNumWins<2)
- return; // No point in this one, same as without flag set
- TSize testWinSize1(iWinSize.iWidth/3, iWinSize.iHeight/3);
- TSize testWinSize2(iWinSize.iWidth/2, iWinSize.iHeight/2);
- TSize testWinSize3(iWinSize.iWidth*2/3, iWinSize.iHeight/4);
- TPoint winOffset1(iWinSize.iWidth/2,iWinSize.iHeight/2);
- TPoint nullPos;
- if (aChildWindows)
- {
- testWinSize1.iWidth*=2;
- testWinSize1.iHeight*=2;
- winOffset1.iX=Min(50,iWinSize.iWidth-testWinSize1.iWidth);
- winOffset1.iY=50;
- }
- CResetRedrawStoreWin* testWin1=CreatePartialRedrawWinLC(iWinPos + winOffset1, testWinSize1);
- CResetRedrawStoreWin* tW1=CreatePartialRedrawWinLC(iCheckWin->Position() + winOffset1, testWinSize1);
- CResetRedrawStoreWin* testWin2=NULL;
- CResetRedrawStoreWin* testWin3=NULL;
- if (aChildWindows)
- {
- TPoint winOffset2(TPoint(testWinSize1.iWidth/4,testWinSize1.iHeight/3));
- testWin2=CreatePartialRedrawWinLC(winOffset2, testWinSize2, aChildWindows?testWin1:NULL);
- CreatePartialRedrawWinLC(winOffset2, testWinSize2, aChildWindows?tW1:NULL);
- if (aNumWins>2)
- {
- TPoint winOffset3(TPoint(testWinSize1.iWidth/2,testWinSize1.iHeight*2/3));
- testWin3=CreatePartialRedrawWinLC(winOffset3, testWinSize3, aChildWindows?testWin1:NULL);
- CreatePartialRedrawWinLC(winOffset3, testWinSize3, aChildWindows?tW1:NULL);
- }
- }
- else
- {
- if (aNumWins>1)
- {
- TPoint winOffset2(TPoint(50,50));
- testWin2=CreatePartialRedrawWinLC(iWinPos + winOffset2, testWinSize2, aChildWindows?testWin1:NULL);
- CreatePartialRedrawWinLC(iCheckWin->Position() + winOffset2, testWinSize2, aChildWindows?tW1:NULL);
- if (aNumWins>2)
- {
- TPoint winOffset3(TPoint(iWinSize.iWidth/6,iWinSize.iHeight/3));
- testWin3=CreatePartialRedrawWinLC(iWinPos + winOffset3, testWinSize3, aChildWindows?testWin1:NULL);
- CreatePartialRedrawWinLC(iCheckWin->Position() + winOffset3, testWinSize3, aChildWindows?tW1:NULL);
- }
- }
- }
- TheClient->Flush();
- TheClient->WaitForRedrawsToFinish();
- iDrawMode=EClientRedrawsNormal;
-//
- TSize testSize(4*iWinSize.iWidth/7, iWinSize.iHeight);
- TRect testRect1(iTestWin->BaseWin()->InquireOffset(*TheClient->iGroup->WinTreeNode()),testSize);
- TRect testRect2(iCheckWin->BaseWin()->InquireOffset(*TheClient->iGroup->WinTreeNode()),testSize);
- TRect partialRedrawRect1(0,testWinSize1.iHeight/4,testWinSize1.iWidth,testWinSize1.iHeight*3/4);
- TRect partialRedrawRect2(0,testWinSize2.iHeight/4,testWinSize1.iWidth,testWinSize2.iHeight*3/4);
- TRect partialRedrawRect3(testWinSize3.iWidth/4,0,testWinSize3.iWidth*3/4,testWinSize3.iHeight);
- iBlankWin.SetExtent(iWinPos+winOffset1+partialRedrawRect1.iTl, partialRedrawRect1.Size());
- const TInt KDoWindow1=0x01;
- const TInt KDoWindow2=0x02;
- const TInt KDoWindow3=0x04;
- TInt numWinModes=1<<aNumWins;
- for(TInt invalidateWindowFlags=0;invalidateWindowFlags<numWinModes;invalidateWindowFlags++)
- {
- TheClient->iWs.ClearAllRedrawStores();
- if (invalidateWindowFlags&KDoWindow1)
- testWin1->Invalidate(partialRedrawRect1);
- if (invalidateWindowFlags&KDoWindow2)
- testWin2->Invalidate(partialRedrawRect2);
- if (invalidateWindowFlags&KDoWindow3)
- testWin3->Invalidate(partialRedrawRect3);
- if (aRedrawWindow)
- {
- if (invalidateWindowFlags&KDoWindow1)
- testWin1->Redraw(partialRedrawRect1);
- if (invalidateWindowFlags&KDoWindow2)
- testWin1->Redraw(partialRedrawRect2);
- if (invalidateWindowFlags&KDoWindow3)
- testWin1->Redraw(partialRedrawRect3);
- }
- if (aDoWinOnTop)
- {
- iBlankWin.SetOrdinalPosition(0);
- iBlankWin.SetVisible(ETrue);
- iBlankWin.SetVisible(EFalse);
- }
- TheClient->Flush();
- TheClient->WaitForRedrawsToFinish();
- //
- TBool match=TheClient->iScreen->RectCompare(testRect1,testRect2);
- TEST(match);
- if (!match)
- {
- _LIT(KLog,"Rectangle area doesn't match, windows=%d, flags=%d,%d,%d");
- LOG_MESSAGE5(KLog,aNumWins,aDoWinOnTop,aRedrawWindow,aChildWindows);
- }
- }
- // Resetting iBlankWin to its original size and position for future use
- // by other test cases
- iBlankWin.SetExtent(iWinPos,iWinSize);
- // window handles which are pushed onto cleanup stack, shall be deleted here
- CleanupStack::PopAndDestroy(aNumWins*2,testWin1);
- }
-
-/**
-@SYMTestCaseID GRAPHICS-WSERV-103713-0001
-
-@SYMDEF PDEF106998
-
-@SYMTestCaseDesc Empty Draw Test
-
-@SYMTestPriority
-
-@SYMTestStatus Implemented
-
-@SYMTestActions Draws an empty base window followed by an empty top window.
- The top window is drawn in one of two cases:
- completely covering the bottom window or
- only covering the area that will be drawn to
-
- A red rectangle is drawn to the bottom window and the top window is made invisible.
-
-@SYMTestExpectedResults The tested pixel colour should be red. Test will fail if the red rectangle
- is not drawn or if an infinite loop is detected.
-
-*/
-void CTRedrawStoring::DoEmptyDrawTestL(TInt aTestMode)
- {
- _LIT(KErrorMessage,"Infinite Loop");
-
- TPartialRedrawType type = iTest->RedrawStoreTypeL();
- if(type==EPartialRedraw_FullRedrawSupport)
- {
- TBool testStatus = EFalse;
-
- //draw an empty, green base window
- CPartialRedrawEmptyWin* bottomWin = new (ELeave) CPartialRedrawEmptyWin();
- CleanupStack::PushL(bottomWin);
- bottomWin->ConstructL(*TheClient->iGroup);
- bottomWin->Init(KRgbGreen);
- bottomWin->AssignGC(*TheClient->iGc);
- bottomWin->BaseWin()->SetShadowDisabled(ETrue);
- bottomWin->BaseWin()->SetShadowHeight(0);
- bottomWin->SetExt(iWinPos+TPoint(10,10), iWinSize);
- bottomWin->Win()->Activate();
- bottomWin->DrawPartial(TRect(TPoint(0,0), iWinSize));
- TheClient->Flush();
-
- //draw an empty, blue top window
- CPartialRedrawEmptyWin* topWin = new (ELeave) CPartialRedrawEmptyWin();
- CleanupStack::PushL(topWin);
- topWin->ConstructL(*TheClient->iGroup);
- topWin->Init(KRgbBlue);
- topWin->AssignGC(*TheClient->iGc);
- topWin->BaseWin()->SetShadowDisabled(ETrue);
- topWin->BaseWin()->SetShadowHeight(0);
-
- switch(aTestMode)
- {
- case 0:
- // top window is completely covering the base window
- topWin->SetExt(iWinPos+TPoint(10,10), iWinSize);
- break;
- case 1:
- // top window only covers the upper left hand corner,
- // over where the red rectangle will be drawn
- topWin->SetExt(iWinPos+TPoint(-5,-5), iWinSize);
- break;
- }
-
- topWin->Win()->Activate();
- topWin->DrawPartial(TRect(TPoint(0,0), iWinSize));
- TheClient->Flush();
-
- //Invalidate the an area on the top window.
- TRect smallrect(TPoint(10,10), TSize(iWinSize.iWidth/4, iWinSize.iHeight/4));
- topWin->Win()->Invalidate(smallrect);
-
- //draw a small red rectangle on the bottom window
- bottomWin->Win()->BeginRedraw(smallrect);
- bottomWin->Gc()->Activate(*bottomWin->Win());
- bottomWin->Gc()->SetBrushStyle(CGraphicsContext::ESolidBrush);
- bottomWin->Gc()->SetBrushColor(KRgbRed);
- bottomWin->Gc()->SetPenStyle(CGraphicsContext::ESolidPen);
- bottomWin->Gc()->SetPenColor(0);
- bottomWin->Gc()->DrawRect(smallrect);
- bottomWin->Gc()->Deactivate();
- bottomWin->Win()->EndRedraw();
- TheClient->Flush();
- TheClient->WaitForRedrawsToFinish();
-
- // hide the top window, so that the bottom window will be redrawn
- topWin->SetVisible(EFalse);
- TheClient->Flush();
- TheClient->WaitForRedrawsToFinish();
-
- // check to see if an 'infinite' loop occured
- if ((topWin->ReturnCount() > KEmptyLoopThreshold) || (bottomWin->ReturnCount() > KEmptyLoopThreshold))
- INFO_PRINTF1(KErrorMessage);
-
- //get the color of a pixel within the invalid area that should be coloured
- //red if the window is redrawn correctly.
- TPoint point =iWinPos + TPoint(30,30);
- TRgb colour;
- TheClient->iScreen->GetPixel(colour,point);
- TRgb expectedColour = KRgbRed;
-
- if ((colour == expectedColour) && (topWin->ReturnCount() < KEmptyLoopThreshold) && (bottomWin->ReturnCount() < KEmptyLoopThreshold))
- testStatus = ETrue;
-
- TEST(testStatus);
-
- CleanupStack::PopAndDestroy(2, bottomWin);
- }
- }
-
-void CTRedrawStoring::DoPolygonRedrawTestSetL()
- {
- _LIT(KRedrawStoringPolygon0,"Test polygon redraw in opaque window");
- _LIT(KRedrawStoringPolygon1,"Test polygon low priority redraw in opaque window");
- _LIT(KRedrawStoringPolygon2,"Test polygon redraw in transparent window");
- _LIT(KRedrawStoringPolygon3,"Test polygon low priority redraw in transparent window");
- INFO_PRINTF1(KRedrawStoringPolygon0);
- DoPolygonRedrawTestL(0,0); // Polygon redraw in opaque window
- INFO_PRINTF1(KRedrawStoringPolygon1);
- DoPolygonRedrawTestL(0,1); // Polygon low priority redraw in opaque window
- INFO_PRINTF1(KRedrawStoringPolygon2);
- DoPolygonRedrawTestL(1,0); // Polygon redraw in transparent window
- INFO_PRINTF1(KRedrawStoringPolygon3);
- DoPolygonRedrawTestL(1,1); // Polygon low priority redraw in transparent window
- }
-
-void CTRedrawStoring::DoPolygonRedrawTestL(TInt aWindowMode, TInt aTestMode)
- {
- //Used to place windows.
- TInt gap = 5;
- const TSize scrSize(TheClient->iScreen->SizeInPixels());
- TheClient->iWs.SetBufferSizeL(640);
-
- CPartialRedrawPolygonWin* polyTestWin = NULL;
- if (aTestMode == 0) //If polygon redraw test.
- {
- //Draw a green test window with a polygon in it.
- polyTestWin = new (ELeave) CPartialRedrawPolygonWin();
- CleanupStack::PushL(polyTestWin);
- polyTestWin->ConstructL(*TheClient->iGroup);
- polyTestWin->Init(aWindowMode, KRgbGreen); //aWindowMode 0=opaque 1=transparent
- polyTestWin->AssignGC(*TheClient->iGc);
- polyTestWin->BaseWin()->SetShadowDisabled(ETrue);
- polyTestWin->BaseWin()->SetShadowHeight(0);
- polyTestWin->SetExt(TPoint(scrSize.iWidth-iWinSize.iWidth,0), iWinSize);
- polyTestWin->Win()->Activate();
- polyTestWin->DrawPartial();
- TheClient->Flush();
- }
-
- //Draw a green base window with a polygon in it.
- CPartialRedrawPolygonWin* bottomWin = new (ELeave) CPartialRedrawPolygonWin();
- CleanupStack::PushL(bottomWin);
- bottomWin->ConstructL(*TheClient->iGroup);
- bottomWin->Init(aWindowMode, KRgbGreen); //aWindowMode 0=opaque 1=transparent
- bottomWin->AssignGC(*TheClient->iGc);
- bottomWin->BaseWin()->SetShadowDisabled(ETrue);
- bottomWin->BaseWin()->SetShadowHeight(0);
- bottomWin->SetExt(TPoint(scrSize.iWidth-(2*iWinSize.iWidth)-gap,0), iWinSize);
- bottomWin->Win()->Activate();
- bottomWin->DrawPartial();
- TheClient->Flush();
-
- //Draw an empty, blue transparent top window.
- CPartialRedrawEmptyWin* topWin = new (ELeave) CPartialRedrawEmptyWin();
- CleanupStack::PushL(topWin);
- topWin->ConstructL(*TheClient->iGroup);
- topWin->Init(KRgbBlue);
- topWin->AssignGC(*TheClient->iGc);
- topWin->BaseWin()->SetShadowDisabled(ETrue);
- topWin->BaseWin()->SetShadowHeight(0);
- topWin->SetExt(TPoint(scrSize.iWidth-(2*iWinSize.iWidth)-gap,0), iWinSize);
- topWin->Win()->Activate();
- topWin->DrawPartial(TRect(TPoint(0,0), iWinSize));
- TheClient->Flush();
-
- if (aTestMode == 1) //If polygon low priority redraw test.
- {
- //Clear all redraw stores.
- TheClient->iWs.ClearAllRedrawStores();
- TheClient->Flush();
- TheClient->WaitForRedrawsToFinish();
- }
-
- //Hide the top window, so the bottom window will be redrawn.
- topWin->SetVisible(EFalse);
- TheClient->Flush();
- TheClient->WaitForRedrawsToFinish();
-
- if (aTestMode==0) //If polygon redraw test.
- {
- //Compare bottomWin against polyTestWin.
- TEST(TheClient->iScreen->RectCompare(TRect(TPoint(scrSize.iWidth-2*iWinSize.iWidth-gap,0),iWinSize),TRect(TPoint(scrSize.iWidth-iWinSize.iWidth,0),iWinSize)));
- CleanupStack::PopAndDestroy(3,polyTestWin);
- }
- else //If polygon low priority redraw test.
- {
- //Test bottomWin has only called DoDraw once.
- TEST(bottomWin->ReturnCount()==1);
- if (bottomWin->ReturnCount()!=1)
- {
- _LIT(KLog,"Number of redraws of bottom window %d, 1 expected (windowMode %d)");
- LOG_MESSAGE3(KLog,bottomWin->ReturnCount(),aWindowMode);
- }
- CleanupStack::PopAndDestroy(2,bottomWin);
- }
- }
-
-void CTRedrawStoring::DoRedrawOOMTestL()
- {
- _LIT(KFailedTestInfo,"Failure information: redrawCount=%d failRate=%d");
- _LIT(KCompletedTest,"OOM test started succeeding at failRate = %d");
- const TInt KConsecutiveSuccessfulRedraws = 20;
-
- //draw a white test window
- CRedrawRectWin* testWin = new (ELeave) CRedrawRectWin();
- CleanupStack::PushL(testWin);
- testWin->ConstructL(*TheClient->iGroup);
- testWin->Init();
- testWin->AssignGC(*TheClient->iGc);
- testWin->BaseWin()->SetShadowDisabled(ETrue);
- testWin->BaseWin()->SetShadowHeight(0);
- testWin->SetExt(iWinPos+TPoint(0,0), iWinSize);
- testWin->Win()->Activate();
- testWin->DrawNow();
- TheClient->Flush();
- TheClient->WaitForRedrawsToFinish();
-
- TPoint pointTest = iWinPos + TPoint(30,30);
- TRgb colourTest;
- TRgb expectedColour = KRgbGreen;
- TInt numberOfSuccessfulRedraws = 0;
- TInt failRate = 1;
- do
- {
- expectedColour=((expectedColour==KRgbGreen)?KRgbRed:KRgbGreen);
- testWin->ResetWindow(expectedColour);
- testWin->SetLogging(failRate<3?this:NULL);
- testWin->Win()->Invalidate();
- TheClient->iWs.HeapSetFail(RHeap::EDeterministic,failRate);
- TheClient->WaitForRedrawsToFinish();
- TheClient->iWs.HeapSetFail(RHeap::ENone,0);
- TheClient->iScreen->GetPixel(colourTest,pointTest);
- const TInt redrawCount = testWin->RedrawCount();
-
- if (redrawCount>2) //If DoDraw called too often:
- {
- TBool passed=(failRate<3 && redrawCount<9); //For a failrate of 2 allow upto 8 redraws
- TEST(passed); //Fail.
- LOG_MESSAGE3(KFailedTestInfo,redrawCount,failRate);
- if (!passed)
- {
- CleanupStack::PopAndDestroy(testWin);
- return;
- }
- }
- else if (colourTest==expectedColour && redrawCount==1) //If drawn correctly.
- {
- #if defined(LOGGING)
- _LIT(KLog,"FailRate %d Drawing Corect RedrawCount %d");
- LOG_MESSAGE3(KLog,failRate,redrawCount);
- #endif
- numberOfSuccessfulRedraws++;
- }
- else //If not drawn.
- {
- #if defined(LOGGING)
- _LIT(KLog,"FailRate %d Drawing Wrong RedrawCount %d");
- LOG_MESSAGE3(KLog,failRate,redrawCount);
- #endif
- numberOfSuccessfulRedraws=0;
- }
- failRate++;
- } while (numberOfSuccessfulRedraws<KConsecutiveSuccessfulRedraws);
- LOG_MESSAGE2(KCompletedTest,(failRate-KConsecutiveSuccessfulRedraws-1));
- CleanupStack::PopAndDestroy(testWin);
- }
-
-void CTRedrawStoring::RedrawStoreWithBadRectL()
- {
- RWindow win(TheClient->iWs);
- CleanupClosePushL(win);
- User::LeaveIfError(win.Construct(*TheClient->iGroup->GroupWin(),ENullWsHandle));
- win.SetRequiredDisplayMode(EColor64K);
- TPoint winPos(270,70);
- win.SetExtent(winPos, TSize(100,100));
- win.SetBackgroundColor( KRgbRed );
- win.Activate();
-
- TheGc->Activate(win);
- win.BeginRedraw();
- TheGc->SetBrushColor(KRgbGreen);
- TheGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
- TheGc->DrawRect(TRect(0,0,100,40));
- win.EndRedraw();
-
- win.BeginRedraw(TRect(10,20,20,0));
- TheGc->SetBrushColor(KRgbBlue);
- TheGc->DrawRect(TRect(0,0,40,100));
- win.EndRedraw();
-
- win.SetVisible(EFalse);
- win.SetVisible(ETrue);
- TheGc->Deactivate();
- TheClient->Flush();
-
- TRgb color;
- TheClient->iScreen->GetPixel(color,winPos+TPoint(20,20));
- TBool passed=(color==KRgbGreen);
- TEST(passed);
-
- CleanupStack::Pop(&win);
- win.Close();
- }
-
-
-/*CPartialRedrawEmptyWin*/
-
-void CPartialRedrawEmptyWin::Init(TRgb aColor)
- {
- Win()->SetRequiredDisplayMode(EColor16MA);
- Win()->SetTransparencyAlphaChannel();
- Win()->SetBackgroundColor(aColor);
- iCount = 0;
- }
-
-void CPartialRedrawEmptyWin::Draw()
- {
- DoDraw();
- iCount++;
- }
-
-void CPartialRedrawEmptyWin::DoDraw()
- {
- DrawFullWindowRect();
- }
-
-void CPartialRedrawEmptyWin::DrawFullWindowRect()
- {
- // Only draw when we've looped too many times
- if (ReturnCount() > KEmptyLoopThreshold)
- {
- TRect rect = TRect(TPoint(0,0),iSize);
- iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
- iGc->SetBrushColor(KRgbBlack);
- iGc->DrawRect(rect);
- }
- }
-
-void CPartialRedrawEmptyWin::DrawPartial(TRect aRect)
- {
- Invalidate(aRect);
- Win()->BeginRedraw(aRect);
- iGc->Activate(*Win());
- DrawFullWindowRect();
- iGc->Deactivate();
- Win()->EndRedraw();
- }
-
-inline TInt CPartialRedrawEmptyWin::ReturnCount()
- {
- return iCount;
- }
-
-
-/*CPartialRedrawPolygonWin*/
-
-void CPartialRedrawPolygonWin::Init(TInt aWindowMode, TRgb aColor)
- {
- Win()->SetRequiredDisplayMode(EColor16MA);
- if (aWindowMode == 1)
- {
- Win()->SetTransparencyAlphaChannel();
- }
- Win()->SetBackgroundColor(aColor);
- iCount = 0;
- }
-
-void CPartialRedrawPolygonWin::Draw()
- {
- DoDraw();
- iCount++;
- }
-
-void CPartialRedrawPolygonWin::DoDraw()
- {
- DrawFullWindowPolygonL();
- }
-
-void CPartialRedrawPolygonWin::DrawFullWindowPolygonL()
- {
- iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
- iGc->SetBrushColor(KRgbBlack);
- CArrayFixFlat<TPoint>* longPolygon = new CArrayFixFlat<TPoint>(84);
- CleanupStack::PushL(longPolygon);
- TInt forLoop = 0, loopValue = 0;
- TInt tempX=18, tempY=49;
- TPoint polygonPoint(tempX, tempY);
-
- //Create jagged line for the polygon
- for (forLoop=0; forLoop<81; forLoop++)
- {
- tempX += 2;
- if (loopValue==0)
- {
- tempY +=2;
- loopValue = 1;
- }
- else
- {
- tempY -=2;
- loopValue = 0;
- }
- polygonPoint.SetXY(tempX, tempY);
- longPolygon->AppendL(polygonPoint);
- }
- polygonPoint.SetXY(tempX,70);
- longPolygon->AppendL(polygonPoint);
- polygonPoint.SetXY(20,70);
- longPolygon->AppendL(polygonPoint);
- iGc->DrawPolygon(longPolygon);
- CleanupStack::PopAndDestroy(longPolygon);
- }
-
-void CPartialRedrawPolygonWin::DrawPartial()
- {
- Invalidate();
- Win()->BeginRedraw();
- iGc->Activate(*Win());
- DrawFullWindowPolygonL();
- iGc->Deactivate();
- Win()->EndRedraw();
- }
-
-inline TInt CPartialRedrawPolygonWin::ReturnCount()
- {
- return iCount;
- }
-
-
-/*CRedrawRectWin*/
-
-void CRedrawRectWin::Init()
- {
- Win()->SetRequiredDisplayMode(EColor16MA);
- Win()->SetTransparencyAlphaChannel();
- Win()->SetBackgroundColor(KRgbWhite);
- iRedrawCount = 0;
- iRectColour = KRgbGreen;
- }
-
-void CRedrawRectWin::Draw()
- {
- DoDraw();
- iRedrawCount++;
- }
-
-void CRedrawRectWin::DoDraw()
- {
- DrawFullWindowRect();
- }
-
-void CRedrawRectWin::DrawFullWindowRect()
- {
- TRect Rect(TPoint(10,10), TSize(30, 30));
- Gc()->SetBrushStyle(CGraphicsContext::ESolidBrush);
- Gc()->SetBrushColor(iRectColour);
- Gc()->SetPenStyle(CGraphicsContext::ESolidPen);
- Gc()->SetPenColor(0);
- Gc()->DrawRect(Rect);
- }
-
-void CRedrawRectWin::DrawNow()
- {
- Win()->Invalidate();
- Win()->BeginRedraw();
- Gc()->Activate(*Win());
- DrawFullWindowRect();
- Gc()->Deactivate();
- Win()->EndRedraw();
- }
-
-inline TInt CRedrawRectWin::RedrawCount()
- {
- return iRedrawCount;
- }
-
-void CRedrawRectWin::ResetWindow(TRgb aColour)
- {
- iRectColour = aColour;
- iRedrawCount = 0;
- }
-
-inline void CRedrawRectWin::SetLogging(CTWsGraphicsBase* aTest)
- {
- iLog=aTest;
- }
-
-void CRedrawRectWin::Redraw(const TRect& aRect)
- {
- if (iLog)
- {
- _LIT(KLog,"Redraw Count %d Rect=(%d,%d,%d,%d)");
- iLog->LOG_MESSAGE6(KLog,RedrawCount(),aRect.iTl.iX,aRect.iTl.iY,aRect.iBr.iX,aRect.iBr.iY);
- }
- CTWin::Redraw(aRect);
- }
-
-
-//
-
-void CTRedrawStoring::RunTestCaseL(TInt /*aCurTestCase*/)
- {
- _LIT(KNormalDrawing,"Normal Draw Test");
- _LIT(KFadeWindow1,"Fade Window1");
- _LIT(KFadeWindow2,"Fade Window2");
- _LIT(KRedrawQueue2,"Empty Redraw Queue");
- _LIT(KDisableRedrawStore,"Disable redraw store");
- _LIT(KResizeRedraws,"Redraw on Resize event");
- _LIT(KFontCacheOverflow,"Font Cache Overflow test");
- _LIT(KDrawBitmapMask,"Test DrawBitmapMasked");
- _LIT(KInvisibleRedrawStore,"Test invisible window redraw storing");
- _LIT(KBrushDraw,"Test UseBrushPattern storing");
- _LIT(KInvisibleRedrawStoreTransparent,"Test invisible transparent window redraw storing");
- _LIT(KPartialDrawNow,"Test partial DrawNow");
- _LIT(KPartialDrawNowTransparent,"Test partial transparent DrawNow");
- _LIT(KBeginEndRedraw,"Redraw in between Begin and EndRedraw");
- _LIT(KRedrawStoreAlphaChannelTransparency,"Redraw store for Alpha Channel Transparency");
- _LIT(KDrawBitBltAndMaskedNegTestsL,"Test BitBltMasked by passing Neg,UnExpected Values");
- _LIT(KRedrawStoringExposeWindow,"Redraw Storing Window Exposed");
- _LIT(KRedrawStoringExposeWindow2,"Redraw Storing Window behind Transparent Exposed");
- _LIT(KAutoResetRedrawStore,"Test automatic redraw store reset");
- _LIT(KRedrawStoreWithSetExtent,"Redraw store with set extent");
- _LIT(KPartialRedrawWithEmptyRedrawStore,"Partial redraw with empty redraw store");
- _LIT(KScrollingWin,"Test scrolling when partial redraw is enabled");
- _LIT(KRedrawStoringEmptyDrawWindow0,"Empty window under redraw storing - full case");
- _LIT(KRedrawStoringEmptyDrawWindow1,"Empty window under redraw storing - corner case");
- _LIT(KRedrawOOMTest,"Testing OOM redraw");
- _LIT(KRedrawWithBadRect, "Redraw storing when BeginRedraw with bad rect");
- if (iState==0)
- {
- // Check to see if Transparency is enabled before running tests
- if (TransparencySupportedL()==KErrNotSupported)
- {
- _LIT(KLog,"Transparency is not enabled");
- LOG_MESSAGE(KLog);
- TestComplete();
- return;
- }
- }
- TInt err=KErrNone;
- //if (iTest->iState==1) iTest->iState=KLastDrawingCase+2; //Set one less that the test you want to run
- iState=++iTest->iState;
- ((CTRedrawStoringStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
- switch(iTest->iState)
- {
- case 6:
- ((CTRedrawStoringStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0086"));
- // Special case handled seperately because unfading the
- // window requires a redraw
- iTest->LogSubTest(KFadeWindow1);
- FadeWindowTest();
- break;
- case 12:
- ((CTRedrawStoringStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0087"));
- iTest->LogSubTest(KFadeWindow2);
- FadeWindowTest2L();
- break;
- case 14:
- ((CTRedrawStoringStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0090"));
- iTest->LogSubTest(KRedrawQueue2);
- DoNothingInRedrawTest();
- break;
- case 17:
- ((CTRedrawStoringStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0091"));
- iTest->LogSubTest(KDisableRedrawStore);
- DoDisableRedrawStoreTest();
- break;
- case 18:
- ((CTRedrawStoringStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0092"));
- iTest->LogSubTest(KResizeRedraws);
- DoResizeTest();
- break;
- case 22:
-/**
- @SYMTestCaseID GRAPHICS-WSERV-0508
-*/
- ((CTRedrawStoringStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0508"));
- iTest->LogSubTest(KBeginEndRedraw);
- DoBeginEndRedraw();
- break;
- case 23:
-/**
- @SYMTestCaseID GRAPHICS-WSERV-0509
-*/
- ((CTRedrawStoringStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0509"));
- iTest->LogSubTest(KRedrawStoreAlphaChannelTransparency);
- DoRedrawStoreAlphaChannelTransTest();
- break;
- case 24:
-/**
- @SYMTestCaseID GRAPHICS-WSERV-0510
-*/
- ((CTRedrawStoringStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0510"));
- iTest->LogSubTest(KScrollingWin);
- ScrollWinTest();
- break;
- case KLastDrawingCase + 1:
-/**
- @SYMTestCaseID GRAPHICS-WSERV-0511
-*/
- ((CTRedrawStoringStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0511"));
- iTest->LogSubTest(KDrawBitmapMask);
- TRAP(err,DoTestDrawBitmapMaskedL());
- break;
- case KLastDrawingCase + 2:
-
- ((CTRedrawStoringStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0511"));
- iTest->LogSubTest(KDrawBitmapMask);
- TRAP(err,DoTestDrawBitmapMaskedL(ETrue));
- break;
- case KLastDrawingCase + 3:
-/**
- @SYMTestCaseID GRAPHICS-WSERV-0512
-*/
- ((CTRedrawStoringStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0512"));
- iTest->LogSubTest(KFontCacheOverflow);
- DoFontCacheOverflowTestL();
- break;
- case KLastDrawingCase + 4:
- ((CTRedrawStoringStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-00XX-0006"));
- iTest->LogSubTest(KInvisibleRedrawStore);
- TRAP(err,DoInvisibleRedrawStoreTestL( EFalse ));
- break;
- case KLastDrawingCase + 5:
- ((CTRedrawStoringStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-00XX-0006"));
- iTest->LogSubTest(KInvisibleRedrawStoreTransparent);
- TRAP(err,DoInvisibleRedrawStoreTestL( ETrue ));
- break;
- case KLastDrawingCase + 6:
- ((CTRedrawStoringStep*)iStep)->SetTestStepID(_L("GRAPHICS-CODEBASE-WSERV-0052-0001"));
- iTest->LogSubTest(KDrawBitBltAndMaskedNegTestsL);
- TRAP(err,DoBitBltAndMaskedNegTestsL());
- break;
- case KLastDrawingCase + 7:
-/**
- @SYMTestCaseID GRAPHICS-WSERV-0513
-*/
- ((CTRedrawStoringStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0513"));
- iTest->LogSubTest(KPartialDrawNow);
- TRAP(err,DoPartialDrawNowTestL(EFalse));
- break;
- case KLastDrawingCase + 8:
-/**
- @SYMTestCaseID GRAPHICS-WSERV-0514
-*/
- ((CTRedrawStoringStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0514"));
- iTest->LogSubTest(KPartialDrawNowTransparent);
- TRAP(err,DoPartialDrawNowTestL(ETrue));
- break;
- case KLastDrawingCase + 9:
-/**
- @SYMTestCaseID GRAPHICS-WSERV-0515
-*/
- ((CTRedrawStoringStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0515"));
- TInt iteration;
- for(iteration=0;iteration<3 && err==KErrNone;iteration++)
- {
- iTest->LogSubTest(KRedrawStoringExposeWindow);
- TRAP(err,DoExposeTestL(iteration));
- }
- break;
- case KLastDrawingCase + 10:
- {
-/**
- @SYMTestCaseID GRAPHICS-WSERV-0516
-*/
- ((CTRedrawStoringStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0516"));
- TInt iteration;
- for(iteration=0;iteration<2 && err==KErrNone;iteration++)
- {
- iTest->LogSubTest(KRedrawStoringExposeWindow2);
- TRAP(err,DoExposeTest2L(iteration));
- }
- break;
- }
- case KLastDrawingCase + 11:
- ((CTRedrawStoringStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
- iTest->LogSubTest(KAutoResetRedrawStore);
- AutoResetRedrawStoreTestsL();
- break;
- case KLastDrawingCase + 12:
-/**
- @SYMTestCaseID GRAPHICS-WSERV-0517
-*/
- ((CTRedrawStoringStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0517"));
- iTest->LogSubTest(KRedrawStoreWithSetExtent);
- RedrawStoreWithSetExtentL();
- break;
- case KLastDrawingCase + 13:
-/**
- @SYMTestCaseID GRAPHICS-WSERV-0518
-*/
- ((CTRedrawStoringStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0518"));
- iTest->LogSubTest(KPartialRedrawWithEmptyRedrawStore);
- PartialRedrawWithEmptyRedrawStoreL();
- break;
- case KLastDrawingCase + 14:
- ((CTRedrawStoringStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-103713-0001"));
- iTest->LogSubTest(KRedrawStoringEmptyDrawWindow0);
- TRAP(err,DoEmptyDrawTestL(0)); // Completely covered case
- if (err!=KErrNone)
- break;
- iTest->LogSubTest(KRedrawStoringEmptyDrawWindow1);
- TRAP(err,DoEmptyDrawTestL(1)); // Quarter covered case
- break;
-
-/**
-@SYMTestCaseID GRAPHICS-WSERV-0439
-
-@SYMDEF DEF107817
-
-@SYMTestCaseDesc Drawing polygons with many points panics WServ (redraw store enabled)
-
-@SYMTestPriority Normal
-
-@SYMTestStatus Implemented
-
-@SYMTestActions Draw a polygon in opaque and transparent windows testing redraw and low priority redraw
-
-@SYMTestExpectedResults Redraw tests display correctly, low priority redraw tests call DoDraw only once
-*/
- case KLastDrawingCase + 15:
- ((CTRedrawStoringStep*)iStep)->SetTestStepID(_L(" GRAPHICS-WSERV-0439"));
- TRAP(err,DoPolygonRedrawTestSetL());
- break;
-
-/**
-@SYMTestCaseID GRAPHICS-WSERV-0442
-
-@SYMDEF DEF107984
-
-@SYMTestCaseDesc OOM causing infinite redraw loop
-
-@SYMTestPriority Normal
-
-@SYMTestStatus Implemented
-
-@SYMTestActions Redraw rectangles in OOM situations
-
-@SYMTestExpectedResults There are no extended redraw loops
-*/
- case KLastDrawingCase + 16:
- ((CTRedrawStoringStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0442"));
- iTest->LogSubTest(KRedrawOOMTest);
- TRAP(err,DoRedrawOOMTestL());
- break;
- case KLastDrawingCase + 17:
-/**
- @SYMTestCaseID GRAPHICS-WSERV-0519
-*/
- ((CTRedrawStoringStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0519"));
- iTest->LogSubTest(KRedrawWithBadRect);
- TRAP(err,RedrawStoreWithBadRectL());
- break;
- case KLastDrawingCase + 18:
- ((CTRedrawStoringStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0498"));
- iTest->LogSubTest(KBrushDraw);
- TRAP(err,DoBrushDrawTestL());
- break;
- case KLastDrawingCase + 19:
- ((CTRedrawStoringStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
- ((CTRedrawStoringStep*)iStep)->CloseTMSGraphicsStep();
- TestComplete();
- break;
- default:
- iTest->LogSubTest(KNormalDrawing);
- ((CTRedrawStoringStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0085"));
- DoDrawTest();
- if (iDoScrollTest)
- ScrollTest();
- }
- ((CTRedrawStoringStep*)iStep)->RecordTestResultL();
- if (err!=KErrNone)
- {
- TEST(EFalse);
- _LIT(KLog,"Sub-Test[%d] left with error code %d");
- LOG_MESSAGE3(KLog,iState,err);
- }
- }
-
-
-__WS_CONSTRUCT_STEP__(RedrawStoring)