--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/windowing/windowserver/test/tman/TMPNTBUF.CPP Tue Jun 22 15:21:29 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 <e32std.h>
+#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(;index<numPnts;index++)
+ iGc->DrawLineTo(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 <Space> 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 <Esc> if moves not supported or <Space> 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 <Space> 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);
+ }