diff -r 000000000000 -r a41df078684a kernel/eka/include/ws_std.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kernel/eka/include/ws_std.h Mon Oct 19 15:55:17 2009 +0100 @@ -0,0 +1,387 @@ +// 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 the License "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: +// e32\include\ws_std.h +// +// + +/** + @file + @internalTechnology +*/ + +#ifndef __WS_STD_H__ +#define __WS_STD_H__ + +#include +#include +#include +#include +#include +#include +#include +#include +// +#include +// +const TInt KW32MajorVersionNumber=1; +const TInt KW32MinorVersionNumber=0; +const TInt KMessageSlots=3; +// + +typedef TUint8 TColorIndex; + +enum TConsolePanic + { + EConsServerFailed, + EConsNotSupportedYet + }; +// +enum TWsPanic + { + EPrematureOperation, + ETooManyWindowsOpen, + EWindowTooWide, + EWindowTooThin, + EWindowTooHigh, + EWindowTooShort, + EWindowOutOfMemory, + EDoubleReadRequest, + }; +// +enum TWsFault + { + ECreateScheduler, + ECreateServer, + EStartServer, + ECreateEvent, + ECreateShell, + ESchedulerError, + EWindowsInitialisation, + ENoKeyboardTranslator, + ECreateNotifierSemaphore, + ECreateNotifierThread, + ELocaleDll, + EChangeLocale, + }; +// +struct SWsKey + { + TKeyData iKeyData; + TInt iType; + TPoint iMousePos; + TSglQueLink iLink; + }; + +struct ColorInformation + { + TColorIndex iFg; + TColorIndex iBg; + }; +// +class CScreenDriver; +class CWsWindow : public CBase + { + friend class CEvent; + friend class CWsSession; + friend class CNotifierSession; + friend class CKeyRepeat; +private: + enum + { + EBackgroundNumber=0, + EMaxOpenWindows=64, + ENormalAttribute=7, + EMouseCharacter=219, + ECursorPeriodicPriority=2000 + }; +public: + CWsWindow(); + static void New(); + inline static void WaitOnService() {ServiceMutex.Wait();} + inline static void SignalService() {ServiceMutex.Signal();} + static TBool RawEventMode(); + static void QueueRawEvent(TRawEvent& anEvent); + void CreateL(const TSize &aSize); + +private: + ~CWsWindow(); + void Display(); + TBool IsTop() const; + void MakeTopWindow(); + void SetClip(); + void Clear(); + void WriteCharacter(const TText *aCharacter); + void CarriageReturn(); + void LineFeed(); + void Write(const TDesC &aBuffer); + void Refresh(); + void SaveEdges(); + void RestoreEdges(); + void SetWiew(); + TBool IsInClippedTextArea(const TPoint& aPoint) const; + void SetCursor(); + static void TextFill(TText *aBuffer, TInt aLength, const TText *aValue); + static TInt Offset(const TPoint &aPosition,const TSize &aSize); + static void RotateWindowsForwards(); + static void RotateWindowsBackwards(); + static void BeginUpdateScreen(); + static void EndUpdateScreen(); + static void DrainAllReadRequests(); + static void ControlInformAllMouse(TBool anIndicator); +#if defined(_UNICODE) + static TInt IsHankaku(const TText aCode); + static TInt FitInWidth(TText* aDest,TInt aWidth,TInt aAsciiCol,TText aCode); + static TInt OffsetHZa(const TText* aDest,const TPoint& aPosition,const TSize& aSize,TInt& aX); + static TInt OffsetHZwP(const TText* aDest,const TPoint& aPosition,const TSize& aSize,TPoint& aP); + static TInt OffsetHZ(const TText* aDest,const TPoint& aPosition,const TSize& aSize); + static TText GetCharFromOffset(const TText* aDest,const TPoint& aPosition,const TSize& aSize); + static TText *GetCpFromOffset(const TText* aDest,const TPoint& aPosition,const TSize& aSize); +#endif + void ScrollUp(); + void Left(); + void Right(); + void FormFeed(); + void BackSpace(); + void HorizontalTab(); + TBool IsRectVisible(TRect& aRect) const; + void SetFrame(); + void DrainReadRequest(); + TBool EnqueReadRequest(const RMessage2& aMessage); + void DequeReadRequest(); + void InformMouse(TPoint aPos); + void QueueWindowKey(TKeyData &aKeystroke); + void DoMouseLeftButton(); + void ControlMaximised(TBool anIndicator); + void ControlOnTop(TBool anIndicator); + static void Delete(); + static CWsWindow *TopWindow(); + static CWsWindow *BottomWindow(); + static TInt8 NewNumberL(); + static void ReleaseNumber(TInt8 aNumber); + static void Redraw(); + static void KeyPress(TKeyData& aKeystroke); + static void QueueTopWindowKey(TKeyData& aKeystroke); + static void InformTopMouse(TPoint aPos); + static TInt ChangeTopWindowSize(TSize aGrowth); + static TInt SlideTopWindowRelative(TPoint aDirection); + static TInt MoveTopWindowRelative(TPoint aDirection); + static void ControlTopWindowMaximised(TBool anIndicator); + static TInt FlashCursor(TAny *aParameter); + static void ResetVisibilityMap(); + static void UpdateScreen(TPoint &aPosition,TInt aLength,TInt8 aNumber,TText *aTextBuffer,ColorInformation *anAttributeBuffer); + static void Background(); + static void TurnMouseOff(); + static void TurnMouseOn(); + static void MouseMove(TPoint aGraphicsPosition); + static void MouseLeftButton(); + static void MouseLeftButtonUp(); + static CWsWindow *MouseWindow(); + static void ChangeUIColors(); + static TInt SetMode(TVideoMode aMode); + TSize Size(); + TPoint CursorPosition(); + void WriteDone(); + void SetView(); + void SetFull(); + void ClearToEndOfLine(); + void NewLine(); + void SetCursorHeight(TInt aPercentage); + void SetTitle(const TDesC &aName); + void SetSize(const TSize &aSize); + void SetWindowPosAbs(const TPoint &aPosition); + void SetCursorPosAbs(const TPoint &aPosition); + void SetCursorPosRel(const TPoint &aPosition); + void ControlScrollBars(TBool anIndicator); + void ControlWrapLock(TBool anIndicator); + void ControlPointerEvents(TBool anIndicator); + void ControlScrollLock(TBool anIndicator); + void ControlVisibility(TBool anIndicator); + void ControlAllowResize(TBool anIndicator); + void ControlCursorRequired(TBool anIndicator); + void ControlNewLineMode(TBool anIndicator); + void ControlRawEventMode(TBool anIndicator); + void QueueWindowRawEvent(TRawEvent& anEvent); + void MouseSlide(); + void SetTextAttribute(TTextAttribute anAttribute); + +private: + TInt8 iNumber; + TSize iCurrentSize; + TSize iClippedSize; + TBool iIsVisible; + TPoint iViewOrigin; + TSize iViewSize; + TPoint iCurrentOffset; + TText *iTextBuffer; + ColorInformation *iAttributeBuffer; + TUint8 iFillAttribute; + TBool iCursorRequired; + TBool iCursorIsOn; + TPoint iCursorPos; + TPoint iLastCursorPos; + TText iCursor; + TBool iScrollLock; + TBool iWrapLock; + TBool iNewLineMode; + TBool iOnTop; + TBool iAllowResize; + TBool iAllowSlide; + TBool iReadIsValid; + TDblQueLink iLink; + static TSize ScreenSize; + static CScreenDriver *ScreenDriver; + static TDblQue WQueue; + static TInt8 *VisibilityMap; + static TPoint MousePos; + static TSize FontSize; + static CBitMapAllocator *Numbers; + static CPeriodic *CursorPeriodic; + static TText *BlankLineText; + static ColorInformation *BlankLineAttributes; + static TBool MouseIsCaptured; + static RMutex MouseMutex; + static RMutex ServiceMutex; + static TInt Count; + static const TText Cursors[101]; + static CWsWindow* RawEventWindow; + static TPoint ScrollWithMouse; + static TPoint MoveWithMouse; + static TPoint ResizeWithMouse; + static TInt ScrollSpeed; + static TColorIndex ScreenColor; + static TColorIndex WindowBgColor; + static TColorIndex BorderColor; + static TColorIndex IndexOf[8]; + TSglQue iKQueue; + RMessage2 iReadRequest; + TPoint iMaximumOrigin; + TSize iMaximumSize; + TPoint iMinimumOrigin; + TSize iMinimumSize; + TBool iHasScrollBars; + TBool iPointerEvents; + TFileName iTitle; + RMessage2 iMessage; + TColorIndex iFgColor; + TColorIndex iBgColor; + }; + +class CWsSession : public CSession2 + { +public: + enum + { + EConsoleCreate, + EConsoleSet, + EConsoleClearScreen, + EConsoleClearToEndOfLine, + EConsoleSetWindowPosAbs, + EConsoleSetCursorHeight, + EConsoleSetCursorPosAbs, + EConsoleSetCursorPosRel, + EConsoleCursorPos, + EConsoleControl, + EConsoleWrite, + EConsoleRead, + EConsoleReadCancel, + EConsoleDestroy, + EConsoleSetTitle, + EConsoleSetSize, + EConsoleSize, + EConsoleScreenSize, + EConsoleSetMode, + EConsoleSetPaletteEntry, + EConsoleGetPaletteEntry, + EConsoleSetTextColors, + EConsoleSetUIColors, + EConsoleSetTextAttribute + }; +public: + CWsSession(); + ~CWsSession(); + void Attach(CWsWindow* aWindow); + virtual void ServiceL(const RMessage2& aMessage); + virtual void ServiceError(const RMessage2& aMessage,TInt aError); +private: + CWsWindow* iWindow; + RMessagePtr2 iCurMsg; + TInt iTestFast; + }; +// +class CWsServer : public CServer2 + { +public: + enum {EPriority=1000}; +public: + static void New(); + ~CWsServer(); + virtual CSession2* NewSessionL(const TVersion& aVersion,const RMessage2& aMessage) const; +private: + CWsServer(TInt aPriority); + }; +// +class CKeyRepeat : public CTimer + { +public: + enum { EKeyRepeatPriority=1990 }; + + CKeyRepeat(TInt aPriority); + void ConstructL(); + void Request(TKeyData& aKeyData); + virtual void RunL(); + void SetRepeatTime(TInt aDelay,TInt aRate); + void RepeatTime(TInt& aDelay,TInt& aRate); + + TKeyData iKeyData; +private: + enum { EDefaultKeyRepeatDelay=500000, EDefaultKeyRepeatRate=30000 }; + + TInt iDelay; + TInt iRate; + }; +// +class CEvent : public CActive + { +public: + enum {EPriority=2000}; +public: + static void New(); + ~CEvent(); + void Request(); + virtual void DoCancel(); + virtual void RunL(); +protected: + CEvent(TInt aPriority); +private: + TRawEventBuf iEvent; + static CCaptureKeys *CaptureKeys; + TInt iRepeatScanCode; + }; +// +class CWsActiveScheduler : public CActiveScheduler + { +public: + static void New(); + virtual void Error(TInt anError) const; + }; +// +#include "w32disp.h" +// +GLREF_C TInt WindowServerThread(TAny *anArg); +GLREF_C void Panic(TWsPanic aPanic); +GLREF_C void Fault(TWsFault aFault); +// +IMPORT_C void Panic(TConsolePanic aPanic); + +#endif // __WS_STD_H__