diff -r bf7481649c98 -r 7f25ef56562d windowing/windowserver/test/tman/TMPNTBUF.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/windowing/windowserver/test/tman/TMPNTBUF.CPP Wed Jun 23 19:41:15 2010 +0300 @@ -0,0 +1,283 @@ +// 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 Pointer move/drag buffer +// +// + +#include +#include "W32STD.H" +#include "../tlib/testbase.h" +#include "TMAN.H" + +class CTPntBufTest; + +class CPntBufWindow : public CTBackedUpWin + { +private: + enum {KPointerMoveBufferSize=32}; +public: + CPntBufWindow(CTPntBufTest *aTest); + ~CPntBufWindow(); + void SetUpLD(TPoint pos,TSize size,CTWinBase *parent); + void PointerBufferReady(const TTime &aTime); + void PointerL(const TPointerEvent &pointer,const TTime &aTime); + void SetUpState(); + void NextTest(); + void WinKeyL(const TKeyEvent &aKey,const TTime &aTime); + void ErrorL(); +private: + //Virtual functions from CTWinBase + void PointerEnter(const TTime&); + void PointerExit(const TTime&); +private: + CTPntBufTest *iTest; + TBool iDragging; + TBool iErrorNest; + TBool iDisabled; + TBool iDiscard; + TInt iMode; + TBool iIgnorNextPoint; + }; + +class CTPntBufTest : public CTestBase + { +public: + CTPntBufTest(); + ~CTPntBufTest(); + TestState DoTestL(); + void FinishedTests(); + void ConstructL(); +private: + CPntBufWindow *iWin; + TSize iWinSize; + TInt iState; + }; + +GLDEF_C CTestBase *CreatePointerBufferTest() + { + return(new(ELeave) CTPntBufTest()); + } + +CPntBufWindow::CPntBufWindow(CTPntBufTest *aTest) : CTBackedUpWin(EGray4), iTest(aTest) + {} + +CPntBufWindow::~CPntBufWindow() + { + delete iGc; + } + +void CPntBufWindow::SetUpLD(TPoint pos,TSize size,CTWinBase *parent) + { + ConstructExtLD(*parent,pos,size); + User::LeaveIfError(iWin.AllocPointerMoveBuffer(KPointerMoveBufferSize,0)); + iWin.SetPointerGrab(ETrue); + iWin.PointerFilter(EPointerFilterEnterExit,0); + Activate(); + User::LeaveIfError(Client()->iScreen->CreateContext(iGc)); + iGc->Activate(iWin); + SetUpState(); + } + +void CPntBufWindow::PointerBufferReady(const TTime &) + { + if (iDiscard) + iWin.DiscardPointerMoveBuffer(); + iGc->SetPenColor(iDragging ? TRgb::Gray4(0) : TRgb::Gray4(1)); + iGc->SetPenSize(iDragging ? TSize(2,2) : TSize(1,1)); + TPoint pnts[KPointerMoveBufferSize]; + TPtr8 ptr((TUint8 *)&pnts,sizeof(pnts)); + TInt numPnts=iWin.RetrievePointerMoveBuffer(ptr); + TInt index=0; + if (iIgnorNextPoint) + { + iGc->MoveTo(pnts[index]); + index=1; + iIgnorNextPoint=EFalse; + } + for(;indexDrawLineTo(pnts[index]); + } + +void CPntBufWindow::ErrorL() + { + if (!iErrorNest) + { + iErrorNest=ETrue; + iTest->TestL(EFalse); + } + } + +void CPntBufWindow::PointerL(const TPointerEvent &pointer,const TTime &) + { + switch(pointer.iType) + { + case TPointerEvent::EButton1Down: + iDragging=ETrue; + iGc->MoveTo(pointer.iPosition); + if (iMode==2) + { + if (pointer.iModifiers&EModifierShift) + { + iDisabled=ETrue; + iWin.DisablePointerMoveBuffer(); + } + else if (pointer.iModifiers&EModifierCtrl) + iDiscard=ETrue; + } + break; + case TPointerEvent::EButton1Up: + if (iDisabled) + { + iDisabled=EFalse; + iWin.EnablePointerMoveBuffer(); + } + iDiscard=EFalse; + iGc->MoveTo(pointer.iPosition); + iDragging=EFalse; + break; + case TPointerEvent::EDrag: + if (iDragging && !iDisabled) + ErrorL(); + break; + case TPointerEvent::EMove: + if (iDragging && !iDisabled) + ErrorL(); + break; + default:; + } + } + +void CPntBufWindow::SetUpState() + { + + iGc->Reset(); + iGc->UseFont((CFont *)iFont); + iGc->Clear(); + switch(iMode) + { + case 0: + iWin.PointerFilter(EPointerFilterMove,EPointerFilterMove); + iGc->DrawText(_L("Drag the pointer around the window and check"), TPoint(10,20)); + iGc->DrawText(_L("a line is drawn following the pointer when"), TPoint(10,40)); + iGc->DrawText(_L("dragging but not when moving"), TPoint(10,60)); + iGc->DrawText(_L("Press when checked"), TPoint(10,90)); + break; + case 1: + iWin.PointerFilter(EPointerFilterMove|EPointerFilterDrag,EPointerFilterDrag); + iGc->DrawText(_L("If pointer moves are supported move the pointer around the "), TPoint(10,20)); + iGc->DrawText(_L("window and check a line is drawn following the pointer"), TPoint(10,40)); + iGc->DrawText(_L("when it is up, and no lines are drawn when dragging"), TPoint(10,60)); + iGc->DrawText(_L("Press if moves not supported or when checked"), TPoint(10,90)); + break; + case 2: + iWin.PointerFilter(EPointerFilterMove|EPointerFilterDrag,0); + iGc->DrawText(_L("Drag and move the pointer around the window and check a"), TPoint(10,20)); + iGc->DrawText(_L("line is drawn following the pointer during both dragging and"), TPoint(10,40)); + iGc->DrawText(_L("moving, also check drag with the shift or control key down doesn't draw"), TPoint(10,60)); + iGc->DrawText(_L("Press when checked"), TPoint(10,90)); + break; + } + } + +void CPntBufWindow::NextTest() + { + if (iMode++==2) + iTest->FinishedTests(); + else + SetUpState(); + } + +void CPntBufWindow::WinKeyL(const TKeyEvent &aKey,const TTime &) + { + switch(aKey.iCode) + { + case ' ': + NextTest(); + break; + case EKeyEscape: + iTest->FinishedTests(); + break; + case '0': + SetUpState(); + break; + case '1': + case '2': + case '3': + { + TInt mode=aKey.iCode-'1'; + if (mode!=iMode) + { + iMode=mode; + SetUpState(); + } + } + break; + } + } + +void CPntBufWindow::PointerEnter(const TTime&) + { + if (iMode==0) + iDragging=ETrue; + else if (iMode==1) + iDragging=EFalse; + iIgnorNextPoint=ETrue; + } + +void CPntBufWindow::PointerExit(const TTime&) + {} + + +/*CTPntBufTest*/ + +CTPntBufTest::CTPntBufTest() : CTestBase(_L("Scale")) + {} + +CTPntBufTest::~CTPntBufTest() + { +#if defined(__WINS__) + Client()->iWs.SimulateXyInputType(EXYInputPointer); +#endif + CTWin::Delete(iWin); + } + +void CTPntBufTest::FinishedTests() + { + Request(); + } + +void CTPntBufTest::ConstructL() + { + CPntBufWindow *win=new(ELeave) CPntBufWindow(this); + win->SetUpLD(TPoint(0,0),Client()->iScreen->SizeInPixels(),Client()->iGroup); + iWin=win; + Client()->iGroup->SetCurrentWindow(iWin); +#if defined(__WINS__) + Client()->iWs.SimulateXyInputType(EXYInputMouse); +#endif + } + +TestState CTPntBufTest::DoTestL() + { + switch(iState) + { + case 0: + LogSubTest(_L("Scale 1"),1); + iState++; + return(EContinue); + default: + return(EFinished); + } +// return(ENext); + }