diff -r 000000000000 -r 5d03bc08d59c windowing/windowserver/nonnga/SERVER/window.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/windowing/windowserver/nonnga/SERVER/window.h Tue Feb 02 01:47:50 2010 +0200 @@ -0,0 +1,286 @@ +// Copyright (c) 2006-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: +// CWsWindow and associated classes definitions +// +// + +#ifndef __WINDOW_H__ +#define __WINDOW_H__ + +#include "server.h" +#include "winbase.h" + +class CWsWindow : public CWsWindowBase, public MWsWindow + { + friend class TWalkWindowTreeDisconnect; + friend class CWsRootWindow; + friend class TWalkWindowTreeFindWithFlag; +public: + CWsWindow(CWsClient* aOwner,WH_HANDLES aType, CScreen* aScreen); + ~CWsWindow(); + void Construct(); + inline const TRect& Rel() const; + inline const TRect& Abs() const; + inline CWsWindow *PrevSiblingMultiParent() const; + inline CWsWindow *NextSiblingMultiParent() const; + inline TUint PointerFilter() const; + inline TBool HasPointerGrab() const; + inline TBool ShutDownInProgress() const; + inline TRgb BackColor() const; + virtual const TRegion& WindowArea() const = 0; + const TRegion* VisibleRegionIfValid() const; + const TRegion& VisibleRegion() const; + void ClearVisibleRegion(); + void SetVisibleRegion(const TRegion& aRegion, const TRegion* aTop, TRegion& aNewFadableRegion); + virtual void GenerateWindowRegion(RWsRegion &aRegion) const=0; + TRect FullRect() const; + inline TBool ClientSetInvisible() const; + inline TBool IsVisible() const; + inline TBool DragDropCapture() const; + inline CWsBackedUpWindow *Backup() const; + TDisplayMode DisplayMode() const; + inline TInt UsingPointerBuffer() const; + virtual TDblQue *PointerKeyList() const; + inline CWsWindowRedraw *Redraw() const; + inline TBool IsTopClientWindow() const; + inline TBool IsActive() const; + inline void AddDSA(CWsDirectScreenAccess& aDirect); + inline void RemoveDSA(CWsDirectScreenAccess& aDirect); + void AbortAllDSAs(); +#if defined(_DEBUG) + inline const TSglQue& DSAs() const; +#endif + void PossibleVisibilityChangedEvent(TBool aForceSend); + void SetNonFading(TBool aNonFading); + void SetFadeBehind(TBool aFade); + inline void GetFadingParams(TUint8& aBlackMap,TUint8& aWhiteMap) const; + inline TBool IsTranslucent() const; + inline TBool HasAlpha() const; + inline TBool HasBeenDrawnToScreen() const; + inline void SetDrawnToScreen(TBool aDrawn); + void FocusChanged(TBool aNewFocusState); + void ClipRectToViewport(TRect& aRect) const; + void SetNextScheduled(CWsWindow * aWin); + CWsWindow * NextScheduled() const; + inline const RWsRegion * ScheduledRegion() const; + TBool SetScheduledRegion(const RWsRegion& aRegion); + void ClearScheduledRegion(); + static TBool ReleaseMemory(MWsMemoryRelease::TMemoryReleaseLevel aLevel); + TBool ReadyToDraw() const; + virtual void Render(CFbsBitGc * aGc, const TRegion& aRegion); + void AddSprite(CWsSpriteBase * aSprite); + void RemoveSprite(CWsSpriteBase * aSprite); + void Accessed(); + + inline TBool IsNonFading() const; + const TRegion& FadableRegion() const; + inline TBool HasSprite() const; + inline TBool HasAnimation() const; + +public: // from CWsWindowBase + TBool IsDSAHost() const; + +public: // from MWsWindow + virtual TPoint Origin() const; + virtual TRect AbsRect() const; + virtual TSize Size() const; + virtual TUint32 Handle() const; + virtual MWsScreen * WsScreen() const; + virtual void Invalidate(const TRect *) {} + virtual MWsWindow * FindChildByHandle(TUint32 aHandle); + virtual TInt OrdinalPriority() const; + +protected: +// Shadow generation + TPoint InquireOffset(TUint32 aHandle) const; +// + void Shutdown(); // Part of two phase destruction + void FocusChangedL(TBool aNewFocusState); + void RemoveFromAccessList(); + void InsertIntoAccessListOldestEnd(); + void InsertIntoAccessListRecentEnd(); + void DeactivateAllSprites(); +private: + void StatusDump(TDes &aBuf); + void ResetVisibleRegion(); + void AbortDsaIfRequired(const TRegion& aNewRegion, const TRegion* aTop); +#if defined (_DEBUG) +public: + TBool iInteresting; // Often useful while debugging for conditional breakpoints. +#endif +protected: + TRect iRel; + TRect iAbs; + TPoint iOrigin; + RWsRegion iVisibleRegion; + TUint iPointerFilter; + TInt iPointerCapturePriority; + TUint iFlags; + CWsWindowRedraw *iRedraw; + TSglQue iDSAs; + CWsWindow * iNextScheduled; + RWsRegion iScheduledRegion; + // The access list is a "most recently drawn" ordering list of all redraw msg windows. + static CWsWindow * iAccessListRecentEnd; + static CWsWindow * iAccessListOldestEnd; + CWsWindow * iAccessListPrev; + CWsWindow * iAccessListNext; + TUint8 iBlackMap; + TUint8 iWhiteMap; + RWsRegion iFadableRegion; // Region which can be faded (Visible region minus already faded regions) +public: + /** The list of graphic contexts associated with this window. The list is managed by calling the + GcActivated() and GcDeactivated() functions. + This is a linked list. The CWsGc class contains a pointer to the next item: CWsGc::iNextWinGc. + */ + CWsGc *iWinGcList; + CWsAnim *iAnimList; // Start of linked list of animated objects attached to the window + CWsSpriteBase *iSpriteList; // Start of linked list of sprites attached to the window + }; + +#include "wnredraw.h" + +inline TBool CWsWindow::IsVisible() const + { + return(!(iFlags&EFlagHidden)); + } + +inline TBool CWsWindow::ClientSetInvisible() const + { + return(iFlags&EFlagInvisible); + } + +inline TBool CWsWindow::DragDropCapture() const + { + return(iFlags&EFlagPointerCaptureDragDrop); + } + +inline TRgb CWsWindow::BackColor() const + { + return(iRedraw->BackColor()); + } + +inline TInt CWsWindow::UsingPointerBuffer() const + { + return(iFlags&EFlagUsingPointerBuffer); + } + +inline CWsWindowRedraw *CWsWindow::Redraw() const + { + return iRedraw; + } + +inline const TRect& CWsWindow::Rel() const + { + return iRel; + } + +inline const TRect& CWsWindow::Abs() const + { + return iAbs; + } + +inline TBool CWsWindow::IsTopClientWindow() const + { + return (WinType() == EWinTypeClient && iParent->WinType() == EWinTypeGroup); + } + +inline TUint CWsWindow::PointerFilter() const + { + return(iPointerFilter); + } + +inline TBool CWsWindow::HasPointerGrab() const + { + return(iFlags&EFlagPointerGrab); + } + +inline TBool CWsWindow::ShutDownInProgress() const + { + return(iFlags&EFlagShutDownInProgress); + } + +inline CWsBackedUpWindow *CWsWindow::Backup() const + { + return(iRedraw->Backup()); + } + +inline TBool CWsWindow::IsActive() const + { + return iFlags&EFlagActive; + } + +inline void CWsWindow::AddDSA(CWsDirectScreenAccess& aDirect) + { + iDSAs.AddLast(aDirect); + } + +inline void CWsWindow::RemoveDSA(CWsDirectScreenAccess& aDirect) + { + iDSAs.Remove(aDirect); + } + +inline TBool CWsWindow::IsTranslucent() const + { + return (iFlags & static_cast(EFlagHasAlpha)) != 0; + } + +inline TBool CWsWindow::HasAlpha() const + { + return (iFlags & static_cast(EFlagHasAlpha)) !=0; + } + +inline TBool CWsWindow::HasBeenDrawnToScreen() const + { + return (iFlags & static_cast(EFlagDrawnToScreen)) != 0; + } + +inline void CWsWindow::SetDrawnToScreen(TBool aDrawn) + { + if (aDrawn) + iFlags |= static_cast(EFlagDrawnToScreen); + else + iFlags &= ~static_cast(EFlagDrawnToScreen); + } + +inline const RWsRegion * CWsWindow::ScheduledRegion() const + { + return &iScheduledRegion; + } + +#if defined(_DEBUG) +inline const TSglQue& CWsWindow::DSAs() const + { + return iDSAs; + } +#endif + +inline TBool CWsWindow::IsNonFading() const + { + return (iFlags&EFlagNonFadingWindow); + } + +inline void CWsWindow::GetFadingParams(TUint8& aBlackMap,TUint8& aWhiteMap) const + {aBlackMap=iBlackMap;aWhiteMap=iWhiteMap;} + +inline TBool CWsWindow::HasSprite() const + { + return (NULL != iSpriteList); + } + +inline TBool CWsWindow::HasAnimation() const + { + return (NULL != iAnimList); + } +#endif