Fix def files so that the implementation agnostic interface definition has no non-standards defined entry points, and change the eglrefimpl specific implementation to place its private entry points high up in the ordinal order space in the implementation region, not the standards based entrypoints region.
// 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);
}