diff -r 000000000000 -r 2f259fa3e83a lafagnosticuifoundation/graphicseffects/ClientInc/TransitionControl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lafagnosticuifoundation/graphicseffects/ClientInc/TransitionControl.h Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,171 @@ +// 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: +// + +#ifndef _TRANSITIONCONTROL_H +#define _TRANSITIONCONTROL_H + +#include +#include +#include + +#include "TransitionParticipant.h" +#include "GfxTransDataType.h" + + +class CRegisteredControl; +class CTransitionControl; +class CCoeControl; +class CTransitionParticipant; + +/** +stack for controls that has got a begin, but not yet an end. + +@internalTechnology +*/ +class RActiveStack : public RPointerArray + { +public: + TInt Push(CTransitionControl* aTransControl); + TInt PushLC(CTransitionControl* aTransControl); + CTransitionControl* Pop(); + CTransitionControl* Top(); + + TInt ClearAbove(TInt aIndex); + TInt Find(const CCoeControl* aControl) const; + TInt Find(const CRegisteredControl* aRegControl) const; + TInt FindView(TVwsViewId const &aView) const; + TInt Find(TInt aHandle) const; +private: + static void CleanupOperation(TAny* aAny); + }; + +/** +list of controls currently transitioning/animating. +*/ +class RInTransitionList : public RPointerArray + { +public: + TInt Append(CTransitionControl* aTransControl); + void Remove(TInt aIndex); + + TInt Find(const CRegisteredControl* aRegControl) const; + TInt Find(TInt aHandle) const; + }; + +class MTransitionControlObserver + { +public: + virtual void ParticipantUpdated(CTransitionControl* aTransControl, CTransitionParticipant* aParticipant, + RWsGraphicMsgBuf* aCommandBuffer, const TRect& aDrawRect, const TRect& aBoundingRect) = 0; + }; + +/** +keeps the data defining a specific transition instance. +*/ +NONSHARABLE_CLASS(CTransitionControl) : public CBase + { +public: + friend class RActiveStack; + + static CTransitionControl* New( CRegisteredControl* aRegControl, MTransitionControlObserver* aObserver, + TUint aAction, TPolicy aPolicy, TInt aHandle); + ~CTransitionControl(); + void Reset(); + //getters + inline CRegisteredControl* RegControl() const; + inline TUint Action() const; + inline TInt Handle() const; + inline TBool Failed() const; + inline TPolicy Policy() const; + inline CWsScreenDevice* ScreenDevice(); + + //capture + void CaptureBegin(); + void CaptureEnd(); + //demarcation + void DoSetDemarcation(const CCoeControl* aKey, TRect aDemarcation); + void DoSetDemarcation(const CCoeControl* aKey, const CCoeControl* aSrc, TRect aDemarcation); + void DoSetBeginDemarcation(const CCoeControl* aKey, TRect aDemarcation); + void DoSetEndDemarcation(const CCoeControl* aKey, TRect aDemarcation); + // hints + void Invalidate(const CCoeControl* aKey); + void SetHints(const CCoeControl* aKey, TUid aLayerType); + void SetHints(const CCoeControl* aKey, TUint aFlags); + TUint GetHints(const CCoeControl* aKey); + // + void SetTransitionData(TUint aType, const TDesC8& aData); + void GetTransitionData(const CTransitionData*& aTransData); + TInt GetUpdatedRegion(RRegion& aRegion); + + //participant callback + void ParticipantUpdated(CTransitionParticipant* aParticipant, RWsGraphicMsgBuf* aCommandBuffer, + const TRect& aDrawRect, const TRect& aBoundingRect); + void SetListenForUpdates(TBool aListen); +private: + MTransitionControlObserver* iObserver; + //private functions + CTransitionControl(CRegisteredControl* aRegControl, MTransitionControlObserver* aObserver, TInt aHandle); + void Fallback(); + TInt FindParticipant(const CCoeControl* aKey); + CTransitionParticipant* CreateSubControl(const CCoeControl* aKey, TUint aFlags); + //data + CTransitionData* iData; + CRegisteredControl* iRegControl; //not owning + CTransitionParticipant* iBaseControl; + RPointerArray iSubControls; + + //transition info + TInt iHandle; + + CWsScreenDevice* iScreenDevice; //not owning + friend class RActiveStack; + friend class RInTransitionList; + //helpers + TBool iHasBeginWOPos; + TBool iOnCleanupStack; +}; + +//getters/setters. +CRegisteredControl* CTransitionControl::RegControl() const + { + return iRegControl; + } +TUint CTransitionControl::Action() const + { + return iData->iAction; + } + +TInt CTransitionControl::Handle() const + { + return iHandle; + } + +TBool CTransitionControl::Failed() const + { + return iData->iFailed; + } + +TPolicy CTransitionControl::Policy() const + { + return iData->iPolicy; + } + +CWsScreenDevice* CTransitionControl::ScreenDevice() + { + return iScreenDevice; + } + +#endif +