windowing/windowserver/tlib/testbase.h
author Faisal Memon <faisal.memon@nokia.com>
Fri, 14 May 2010 15:41:33 +0100
branchNewGraphicsArchitecture
changeset 64 5c983aa672ea
parent 0 5d03bc08d59c
permissions -rw-r--r--
Merge 1. Pull in cpp files in the performance enhanced Khronos RI OVG files which are newly added. I've ignored platform-specific cpp files for linux, macosx, and null operating systems because this local solution has its own platform glue (i.e. facility to target Bitmaps but no full windowing support). I've ignored sfEGLInterface.cpp because this is used as a bridge to go from EGL to Nokia's Platsim which offers an EGL service. That's not relevant to this implementation because this is ARM side code, not Intel side. I just left a comment to sfEGLInterface.cpp in case we need to pick up this later on. The current code compiles on winscw. Prior to this fix, the code works on winscw, and can launch the SVG tiger (tiger.exe). That takes about 20 seconds to render. I hope to always be able to show this icon on each commit, and the plan is for the render time to reduce with this series of submissions. On this commit, the tiger renders ok in 20 seconds.

// Copyright (c) 1995-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:
// Base classes definitions used for building window server test code
// 
//

#ifndef __TESTBASE_H__
#define __TESTBASE_H__

enum TTlibActivePriorities
	{
	ETlibRedrawActivePriority=-10,
	ETlibWsEventActivePriority=0,
	};

const TInt KDefaultScreen = 0;

//enum {ENullWsHandle=0xFFFFFFFF};	// Events delivered to this handle are thrown away
const TUint32 ENullWsHandle=0xFFFFFFFF;	// Events delivered to this handle are thrown away

typedef TBuf<KMaxFullName> TWindowTitle;
typedef TBuf<0x100> TWinCommand;

const TUid KUidWServSecurityTesting={0x10205152};
enum TWServSecTest
	{
	EWServSecTestBufferSecurity
	};

class CTClient;	// Forward reference
class CTWindowGroup;
class CTBaseWin;
class CTWin;

typedef CTClient *(*TCreateClientFunc)();

IMPORT_C TBool CheckBlankWindow(TRect aArea,TRgb aColor,const CWsScreenDevice* aScreen);

class CTWinBase : public CBase
	{
protected:
public:
	IMPORT_C CTWinBase(TInt aType);
	IMPORT_C virtual TPoint Position() const;
	IMPORT_C virtual void PointerEnter(const TTime &aTime);
	IMPORT_C virtual void PointerExit(const TTime &aTime);
	IMPORT_C virtual void PointerBufferReady(const TTime &aTime);
	IMPORT_C virtual void PointerL(const TPointerEvent &aPointer,const TTime &aTime);
	IMPORT_C virtual void SwitchOn(const TTime &aTime);
	IMPORT_C virtual void ModifiersChanged(const TModifiersChangedEvent &aModifiersChanged ,const TTime &aTime);
	IMPORT_C virtual void ErrorMessage(const TWsErrorMessage &aErrorMessage, const TTime &aTime);
	IMPORT_C virtual void SetVisible(TBool aState);
	IMPORT_C CTWinBase *Parent() const;
	IMPORT_C CTWinBase *NextSibling() const;
	IMPORT_C CTWinBase *PrevSibling() const;
	IMPORT_C CTBaseWin *Child() const;
	IMPORT_C virtual void AdjustOrdinal(TInt adjust);
	IMPORT_C virtual void AdjustShadow(TInt aAdjust);
	IMPORT_C virtual TInt SubType();
// Pure virtual definitions
	virtual void WinKeyL(const TKeyEvent &aKey,const TTime &aTime)=0;
	virtual TSize Size() const=0;
	virtual RWindowTreeNode *WinTreeNode()=0;
	virtual const RWindowTreeNode *WinTreeNode() const=0;
	IMPORT_C virtual CTClient *Client() const;
	virtual CTWindowGroup *Group() const=0;
	CTWindowGroup *iOwnerWin;
public:
	TInt iType;
	__DECLARE_TEST;
	};

class CTBaseWin : public CTWinBase
	{
public:
	IMPORT_C CTBaseWin(TInt aType);
	IMPORT_C ~CTBaseWin();
	IMPORT_C virtual void ConstructL(CTWinBase &parent);
	IMPORT_C virtual void ConstructExtLD(CTWinBase &aParent, const TPoint &aPos, const TSize &aSize);
	virtual TInt ConstructWin(const CTWinBase &aWs)=0;
	IMPORT_C virtual void InitWin();
	IMPORT_C virtual void PointerL(const TPointerEvent &aPointer,const TTime &aTime);
	IMPORT_C virtual void DragDropL(const TPointerEvent &aPointer,const TTime &aTime);
	IMPORT_C virtual void RelinquishFocus();
	IMPORT_C void Activate();
	IMPORT_C virtual void AssignGC(CWindowGc &aGc);
	IMPORT_C CTBaseWin *Next();
	IMPORT_C CTBaseWin *Prev();
	IMPORT_C virtual void SetExtL(const TPoint &aPos, const TSize &aSize);
	IMPORT_C virtual void SetSizeL(const TSize &aSize);
	IMPORT_C virtual void SetPos(const TPoint &aPos);
	IMPORT_C void SetInitialPos(const TPoint &aPos);
	IMPORT_C virtual void SetDefaultExtL();
	IMPORT_C virtual void SetFullScreenExtL();
	IMPORT_C virtual void AdjustSizeL(TInt xMove,TInt yMove,TInt resize);
	IMPORT_C virtual TSize Size() const;
	IMPORT_C virtual void Draw();
	IMPORT_C void DrawBorder();
//	void FillWindow(TInt inset);
	IMPORT_C virtual TPoint Position() const;
	IMPORT_C static void Delete(CTBaseWin *aWin);
	IMPORT_C void AdjustOrdinal(TInt aAdjust);
	IMPORT_C virtual void AdjustShadow(TInt aAdjust);
	IMPORT_C void SetVisible(TBool aState);
	IMPORT_C RWindowTreeNode *WinTreeNode();
	IMPORT_C const RWindowTreeNode *WinTreeNode() const;
	IMPORT_C virtual void WinKeyL(const TKeyEvent &aKey,const TTime &aTime);
	IMPORT_C virtual void KeyUpL(const TKeyEvent &aKey,const TTime &aTime);
	IMPORT_C virtual void KeyDownL(const TKeyEvent &aKey,const TTime &aTime);
	IMPORT_C virtual void SetUpL(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc);
	IMPORT_C virtual void SetUpL(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc, TDisplayMode *aMode);
	IMPORT_C void SetUpL(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc,TBool aVisible);
	enum 
		{
		ENoTransparency=0x100
		};
	IMPORT_C virtual void SetUpL(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc, TDisplayMode *aMode,TBool aVisible,TInt aTransparency=ENoTransparency);
	IMPORT_C void SetDragRect(const TRect &aRect);
	IMPORT_C virtual void Resized(const TSize &aSize);
	IMPORT_C virtual void FocusChanged(TBool aState);
	IMPORT_C virtual CTWindowGroup *Group() const;
	virtual RWindowBase *BaseWin()=0;
	virtual const RWindowBase *BaseWin() const=0;
	inline CWindowGc *Gc();
protected:
	TSize iSize;
	CWindowGc *iGc;		   	// Not owned by the window, just using it
	TPoint iPos;
	TInt iShadow;
	TRect iDragRect;
	TBool iDragging;
	TPoint iDragPos;
	CFbsFont *iFont;
	__DECLARE_TEST;
	};

class CTDrawableWin : public CTBaseWin
	{
public:
	IMPORT_C CTDrawableWin(TInt aType);
	virtual RDrawableWindow *DrawableWin()=0;
	virtual const RDrawableWindow *DrawableWin() const=0;
	};

class CTWin : public CTDrawableWin
	{
public:
	IMPORT_C CTWin();
	IMPORT_C ~CTWin();
	inline RWindow *Win() const;
	IMPORT_C virtual TInt ConstructWin(const CTWinBase &aWs);
	IMPORT_C void Invalidate();
	IMPORT_C void Invalidate(const TRect &rect);
	IMPORT_C virtual void Redraw();
	IMPORT_C virtual void Redraw(const TRect &aRect);
	IMPORT_C void DrawNow();
	IMPORT_C void SetExt(const TPoint &aPos, const TSize &aSize);
	IMPORT_C void SetSize(const TSize &aSize);
	IMPORT_C void SetDefaultExt();
	IMPORT_C void AdjustSize(TInt xMove,TInt yMove,TInt resize);
	IMPORT_C virtual RWindowBase *BaseWin();
	IMPORT_C virtual const RWindowBase *BaseWin() const;
	IMPORT_C virtual RDrawableWindow *DrawableWin();
	IMPORT_C virtual const RDrawableWindow *DrawableWin() const;
protected:
	RWindow iWin;
	__DECLARE_TEST;
	};

class CTBackedUpWin : public CTDrawableWin
	{
public:
	IMPORT_C CTBackedUpWin(TDisplayMode aDisplayMode);
	IMPORT_C ~CTBackedUpWin();
	IMPORT_C virtual TInt ConstructWin(const CTWinBase &aWs);
	IMPORT_C virtual RWindowBase *BaseWin();
	IMPORT_C virtual const RWindowBase *BaseWin() const;
	IMPORT_C virtual RDrawableWindow *DrawableWin();
	IMPORT_C virtual const RDrawableWindow *DrawableWin() const;
	IMPORT_C RBackedUpWindow *BackedUpWin();
	IMPORT_C const RBackedUpWindow *BackedUpWin() const;
protected:
	RBackedUpWindow iWin;
	TDisplayMode iDisplayMode;
	__DECLARE_TEST;
	};

class CTTitledWindow : public CTWin
	{
public:
	IMPORT_C CTTitledWindow();
	IMPORT_C ~CTTitledWindow();
	IMPORT_C void ConstructL(CTWinBase &parent);
	IMPORT_C void Draw();
	IMPORT_C void FocusChanged(TBool aState);
	IMPORT_C void SetTitle(const TWindowTitle &aTitle);
	IMPORT_C void SetColor(TRgb aRgb);
	inline TRgb Color();
private:
	IMPORT_C void Resized(const TSize &aSize);
protected:
	TWindowTitle iTitle;
	TInt iTitleHeight;
	TBool iFocus;
	TRgb iWinColor;
	TRgb iPenColor;
	};

class CTBlankWindow : public CTBaseWin
	{
public:
	IMPORT_C CTBlankWindow();
	IMPORT_C ~CTBlankWindow();
	IMPORT_C void ConstructL(CTWinBase &aParent);
	IMPORT_C void SetColor(const TRgb &aRgb);
	IMPORT_C virtual TInt ConstructWin(const class CTWinBase&);
	IMPORT_C virtual const RWindowBase *BaseWin()const;
	IMPORT_C virtual RWindowBase *BaseWin();
	inline const RBlankWindow *BlankWin()const;
	inline RBlankWindow *BlankWin();
	IMPORT_C void SetExt(const TPoint &aPos, const TSize &aSize);
	IMPORT_C void SetSize(const TSize &aSize);
protected:
	RBlankWindow iWin;
	};

class CTWindowGroup : public CTWinBase
	{
public:
	IMPORT_C CTWindowGroup(CTClient *aClient);
	IMPORT_C ~CTWindowGroup();
	IMPORT_C virtual void ConstructL();
	IMPORT_C void WinKeyL(const TKeyEvent &aKey,const TTime &aTime);
	IMPORT_C virtual TSize Size() const;
	IMPORT_C RWindowTreeNode *WinTreeNode();
	IMPORT_C const RWindowTreeNode *WinTreeNode() const;
	inline RWindowGroup *GroupWin();
	IMPORT_C virtual void KeyL(const TKeyEvent &aKey,const TTime &aTime);
	IMPORT_C virtual void KeyUpL(const TKeyEvent &aKey,const TTime &aTime);
	IMPORT_C virtual void KeyDownL(const TKeyEvent &aKey,const TTime &aTime);
	IMPORT_C virtual void PasswordL(const TTime &aTime);
	IMPORT_C virtual void MessageReady(const TWsEvent &aTime);
	IMPORT_C virtual void ScreenDeviceChanged();
	IMPORT_C virtual void UserEvent(TInt aEventType);
	IMPORT_C void SetCurrentWindow(CTBaseWin *aWindow);
	IMPORT_C void SetCurrentWindow(CTBaseWin *aWindow,TBool aLocked);
	IMPORT_C CTBaseWin *CurWin(void) const;
	IMPORT_C void FocusLost();
	IMPORT_C void FocusGained();
	IMPORT_C TBool HasFocus(CTBaseWin *aWin) const;
	IMPORT_C virtual CTWindowGroup *Group() const;
	IMPORT_C virtual CTClient *Client() const;
	IMPORT_C void ClearCurrentWindow();
protected:
	CTClient *iClient;
	CTBaseWin *iCurWin;
	RWindowGroup iGroupWin;
	TBool iLocked;
	TBool iFocus;
	};

inline RWindowGroup *CTWindowGroup::GroupWin()
	{return(&iGroupWin);}

class CTEventBase : public CActive
	{
public:
	IMPORT_C CTEventBase(RWsSession *aWs, TInt aPriority);
	IMPORT_C ~CTEventBase();
	IMPORT_C void Construct();
	void SetCancelFunction(const TCallBack &aCallBack);
	virtual void Request()=0;
	inline TInt Count() {return iCount;}
protected:
	virtual void doRunL()=0;
	IMPORT_C void RunL();
	IMPORT_C void CancelHandler();
protected:
	TBool iCancelRequested;
	TCallBack iCancelCallBack;
	RWsSession *iWs;
	TInt iCount;
	};

class CTRedraw : public CTEventBase
	{
public:
	IMPORT_C CTRedraw(RWsSession *aWs);
	IMPORT_C ~CTRedraw();
	IMPORT_C void Request();
protected:
	IMPORT_C void DoCancel();
	IMPORT_C void doRunL();
	};

class TlibWsEvent : public TWsEvent
	{
public:
	IMPORT_C CTWindowGroup *WindowGroup();
	IMPORT_C CTBaseWin *BaseWin();
	};

class CTEvent : public CTEventBase
	{
public:
	IMPORT_C CTEvent(RWsSession *aWs);
	IMPORT_C ~CTEvent();
	IMPORT_C void Request();
	IMPORT_C virtual void LogEvent(const TWsEvent &aEvent);
protected:
	IMPORT_C void DoCancel();
	IMPORT_C void doRunL();
	};

class CTClient : public CBase
	{
public:
	IMPORT_C CTClient();
	IMPORT_C ~CTClient();
	IMPORT_C virtual void ConstructL();
	IMPORT_C virtual void ConstructEventHandlerL();
	IMPORT_C void DestroyWindows();
	IMPORT_C TWindowTitle *Title();
	IMPORT_C void ResetFocus();
	IMPORT_C TBool QueueRead();
	IMPORT_C void CancelRead();
	IMPORT_C void CancelRedrawRead();
	IMPORT_C void SetCancelFunction(const TCallBack &aCallBack);
	IMPORT_C void SetRedrawCancelFunction(const TCallBack &aCallBack);
	IMPORT_C void RequestRedraw();
	IMPORT_C void LogMessage(const TLogMessageText &aMessage);
	inline void Flush() {iWs.Flush();}
	inline void SetScreenNumber(TInt aScreenNumber);
	IMPORT_C TBool IsEventWaiting();
	IMPORT_C TBool WaitUntilEventPending();
	IMPORT_C TBool WaitUntilRedrawPending();
	inline CTEvent* EventHandler();
	inline CTRedraw* RedrawHandler();
	IMPORT_C TInt WaitForRedrawsToFinish();
	IMPORT_C TInt WaitForAllEventProcessingToFinish();
private:
	TBool WaitUntilEventPending(const TRequestStatus& aStatus);
	TInt WaitForEventsToFinish(TBool aAll);
protected:
	CTEvent *iEventHandler;
	CTRedraw *iRedrawEventHandler;
public:
	CWindowGc *iGc;
	CTWindowGroup *iGroup;
	RWsSession iWs;
	CWsScreenDevice *iScreen;
protected:
	TWindowTitle iTitle;
	TInt iScreenNumber;
	};

class CTAutoKey;
class CTDialog : public CTTitledWindow
	{
public:
	enum
		{
		EDialogWaitForButtonUp=0x0001,
		EDialogDisplayAtBottom=0x0002,
		EDialogDisplayAtLeft=0x0008,
		};
public:
	IMPORT_C CTDialog();
	IMPORT_C ~CTDialog();
	IMPORT_C void ConstructLD(CTWinBase &aParent, CWindowGc &aGc);
	IMPORT_C void Draw();
	IMPORT_C void WinKeyL(const TKeyEvent &aKey,const TTime &aTime);
	IMPORT_C void PointerL(const TPointerEvent &aPointer,const TTime &aTime);
	IMPORT_C virtual void ButtonPressL(TInt aButton);
	IMPORT_C void SetLine1(const TDesC &aLine1);
	IMPORT_C void SetLine2(const TDesC &aLine2);
	IMPORT_C void SetNumButtons(TInt aNum);
	IMPORT_C void SetButtonText(TInt aNum,const TDesC &aButton);
	IMPORT_C void SetWindowSize();
	IMPORT_C void RelinquishFocus();
	IMPORT_C TInt Display();
	IMPORT_C void SetFlags(TUint aFlags);
protected:
	void SetResult(TInt aButton);
	inline void SetTakeFocus() {iTakeFocus=ETrue;}
private:
	void SetMaxWid(TInt &aMax, TInt aWid);
	TRect ButtonRect(TInt aIndex) const;
private:
	TBool iIsActive;
	TBool iActivated;
	TBool iWinActive;
	TBool iTakeFocus;
	TInt iNumButtons;
	TInt iButWid;
	CTBaseWin *iOldFocus;
	TInt *iResultPtr;
	TBuf<0x40> iLine1;
	TBuf<0x40> iLine2;
	TBuf<0x20> iButton[3];
	TInt iButtonClickOn;
	TUint iFlags;
	CTAutoKey* iAutoKey;
	};

class CInfoDialog : public CTDialog
	{		  
private:
	enum
		{
		eSeconds=1000000,
		eTimes=6,
		};
public:
	IMPORT_C CInfoDialog(CTWindowGroup *aGroupWin,CWindowGc *aGc);
	IMPORT_C void ConstructLD();
	IMPORT_C void TimerResults();
	//Virtual function from CTDialog
	IMPORT_C void ButtonPressL(TInt aButton);
private:
	void AppendProfileTime(TDes &aDes, TInt aNum);
	void AppendProfileCount(TDes &aDes, TInt aNum);
	void AddComma(TDes &aDes);
private:
	CTWindowGroup *iGroupWin;
	CWindowGc *iGc;
	};

class CEventWindow : public CTWin
	{
public:
	IMPORT_C CEventWindow(TInt aLogSize);
	IMPORT_C ~CEventWindow();
	IMPORT_C void ConstructL(CTWinBase &parent);
	IMPORT_C void SetUpL(const TPoint &pos, CTWinBase *parent, CWindowGc &aGc);
	IMPORT_C void Draw();
	IMPORT_C void WinKeyL(const TKeyEvent &,const TTime &aTime);
	IMPORT_C void LogEvent(const TWsEvent &aEvent);
private:
	void DrawLine(TInt aLine, const TDesC &aText);
	void LogEvent(TInt aLogNum, const TWsEvent &aEvent);
private:
	TInt iLineHeight;
	TInt iCount;
	TInt iLogSize;
	TInt iNumLogged;
	TWsEvent *iLoggedEvents;
	};

class CBlankWindow : public CTWin
	{
public:
	IMPORT_C CBlankWindow(TRgb aCol);
	IMPORT_C CBlankWindow();
	IMPORT_C void ConstructL(CTWinBase &parent);
	IMPORT_C void SetColor(TRgb aColor);
	IMPORT_C void RealDraw(TBool aRealDraw);
	IMPORT_C virtual void Draw();
	IMPORT_C void DrawNow();
	IMPORT_C void DrawNow(TRect& aRect);
	IMPORT_C TBool Check(const CTClient& aClient);
protected:
	TRgb iCol;
	TBool iRealDraw;
	};

struct TSpriteCreateParams;

class CTSpriteBase : public CBase
	{
public:
	typedef void (*TSpriteDrawFunction)(CBitmapContext *aGc,TInt aIndex, const TSize &aSize, TBool aDoMask, TAny *aParam);
protected:
	virtual RWsSpriteBase &SpriteBase()=0;
	void CreateBitmapL(CFbsBitmap *&aBitmap, CFbsBitmapDevice *&aBitmapDevice, TSpriteCreateParams *aParams, TBool aDoMask);
public:
	IMPORT_C void UpdateL(TInt aIndex, TSpriteCreateParams *aParams);
	IMPORT_C void RedrawL(CFbsBitmap *&aBitmap, CFbsBitmap *&aMaskBitmap, TSpriteCreateParams *aParams);
	};

class CTSprite : public CTSpriteBase
	{
public:
	IMPORT_C CTSprite(RWsSession &aWs);
	IMPORT_C ~CTSprite();
	IMPORT_C void ConstructL(RWindowTreeNode &aWindow, const TPoint &aPos, TInt aCount, TSpriteCreateParams *aParams, TInt aFlags);
	IMPORT_C RWsSpriteBase &SpriteBase();
	IMPORT_C RWsSprite &Sprite();
private:
	RWsSprite iSprite;
	};

class CTPointerCursor : public CTSpriteBase
	{
public:
	IMPORT_C CTPointerCursor(RWsSession &aWs);
	IMPORT_C ~CTPointerCursor();
	IMPORT_C void ConstructL(TInt aFlags);
	IMPORT_C void ConstructL(TInt aCount, TSpriteCreateParams *aParams, TInt aFlags, CFbsBitmap *&aBitmap, CFbsBitmap *&aMaskBitmap);
	IMPORT_C void ConstructL(TInt aCount, TSpriteCreateParams *aParams, TInt aFlags);
	IMPORT_C RWsSpriteBase &SpriteBase();
	IMPORT_C RWsPointerCursor &PointerCursor();
private:
	RWsPointerCursor iCursor;
	};

struct TSpriteCreateParams
	{
public:
	IMPORT_C TSpriteCreateParams(TSize aSize,TPoint aOffset,CTSpriteBase::TSpriteDrawFunction aDrawFunc,TAny *aDrawFuncParam=NULL, TBool aMask=ETrue,CGraphicsContext::TDrawMode aDrawMode=CGraphicsContext::EDrawModePEN);
	IMPORT_C TSpriteCreateParams();
public:
	TSize iSize;
	TPoint iOffset;
	CTSpriteBase::TSpriteDrawFunction iDrawFunc;
	TAny *iDrawFuncParam;
	TBool iMask;
	CGraphicsContext::TDrawMode iDrawMode;
	TTimeIntervalMicroSeconds32 iInterval;
	};

class CTUser
	{
public:
	IMPORT_C static void Splat(CTClient *aClient, const TRect &aRect, const TRgb &aRgb);
	};

IMPORT_C void DisplayDialog(const TWindowTitle &aTitle, const TDesC &aLine1, const TDesC &aLine2, const RWindowGroup *aGroup=NULL);
IMPORT_C void DisplayDialog(TInt aScreenNumber,const TWindowTitle &aTitle, const TDesC &aLine1, const TDesC &aLine2, const RWindowGroup *aGroup=NULL);
IMPORT_C void DisplayDialog(CTClient *aClient, const TWindowTitle &aTitle, const TDesC &aLine1, const TDesC &aLine2);
IMPORT_C TInt TestLibStartUp(TCreateClientFunc aFunc);
IMPORT_C TInt TestLibStartUp(TCreateClientFunc aFunc,TInt aScreenNumber);


inline TRgb CTTitledWindow::Color()
	{return(iWinColor);}
inline CWindowGc *CTBaseWin::Gc()
	{return(iGc);}
inline RWindow *CTWin::Win() const
	{return((RWindow *)BaseWin());}
inline const RBlankWindow *CTBlankWindow::BlankWin()const
	{return(&iWin);}
inline RBlankWindow *CTBlankWindow::BlankWin()
	{return(&iWin);}
inline void CTClient::SetScreenNumber(TInt aScreenNumber)
	{iScreenNumber=aScreenNumber;}
inline CTEvent* CTClient::EventHandler()
	{return iEventHandler;}
inline CTRedraw* CTClient::RedrawHandler()
	{return iRedrawEventHandler;}
#endif