diff -r b01126ce0bec -r ba63c83f4716 idlehomescreen/xmluirendering/uiengine/src/xnviewswitcher.cpp --- a/idlehomescreen/xmluirendering/uiengine/src/xnviewswitcher.cpp Wed Sep 15 12:00:00 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,994 +0,0 @@ -/* - * Copyright (c) 2002-2004 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: Implementation for wrapper for a box - * - */ - -// System includes -#include -#include - -#include -#include - -#ifdef RD_TACTILE_FEEDBACK -#include -#endif // RD_TACTILE_FEEDBACK - -// User includes -#include "xnappuiadapter.h" -#include "xnuiengine.h" -#include "xnproperty.h" -#include "xnviewmanager.h" -#include "xnviewdata.h" -#include "xndomnode.h" -#include "xnnode.h" -#include "xnviewcontroladapter.h" -#include "xneffectmanager.h" -#include "xnrootdata.h" -#include "xnviewadapter.h" -#include "xnbackgroundmanager.h" - -#include "xnviewswitcher.h" - -// Constants -const TInt KDrawDelay( 25000 ); // 16100 = 62 fps -const TInt KDragTreshold( 30 ); -const TInt KMaxScrollSpeed( 150 ); -const TInt KMinScrollSpeed( 20 ); -const TInt KAnimationDuration( 500000 ); -const TInt KDragOffsetForBackground( 100 ); -const TInt KDragOffsetForPageSwitch( 50 ); - -enum TViewPosition - { - KCurrentView, KNextView, KPreviousView - }; - -// ============================= LOCAL FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void HideAdapter( CXnControlAdapter* aAdapter ) - { - if( aAdapter ) - { - aAdapter->Window().SetOrdinalPosition( -1 ); - } - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void ShowAdapter( CXnControlAdapter* aAdapter ) - { - if( aAdapter ) - { - aAdapter->Window().SetOrdinalPosition( 1 ); - } - } - -// ----------------------------------------------------------------------------- -// Changes window position -// ----------------------------------------------------------------------------- -// -void SetWindowPosition( CXnControlAdapter* aAdapter, const TPoint& aPos ) - { - if( aAdapter ) - { - aAdapter->Window().SetPosition( aPos ); - } - } - -// ----------------------------------------------------------------------------- -// Hide/Show control -// ----------------------------------------------------------------------------- -// -void SetVisible( CCoeControl* aControl, TBool aVisible ) - { - if( aControl ) - { - aControl->MakeVisible( aVisible ); - } - } - -// ----------------------------------------------------------------------------- -// ShowNodes -// ----------------------------------------------------------------------------- -// -void ShowNodesL( CXnNode& aNode, TBool aShow ) - { - CXnDomStringPool* sp( aNode.DomNode()->StringPool() ); - - CXnProperty* prop( NULL ); - if( aShow ) - { - prop = CXnProperty::NewL( - XnPropertyNames::style::common::KDisplay, - XnPropertyNames::style::common::display::KBlock, - CXnDomPropertyValue::EString, *sp ); - } - else - { - prop = CXnProperty::NewL( - XnPropertyNames::style::common::KDisplay, - XnPropertyNames::style::common::display::KNone, - CXnDomPropertyValue::EString, *sp ); - } - CleanupStack::PushL( prop ); - - aNode.SetPropertyWithoutNotificationL( prop ); - CleanupStack::Pop( prop ); - } - -// ----------------------------------------------------------------------------- -// IsNodeVisible -// ----------------------------------------------------------------------------- -// -TBool IsNodeVisibleL( CXnNode& aNode ) - { - CXnProperty* displayProp( aNode.DisplayL() ); - - if ( displayProp ) - { - const TDesC8& display( displayProp->StringValue() ); - - if ( display == XnPropertyNames::style::common::display::KBlock ) - { - return ETrue; - } - } - return EFalse; - } - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CXnViewSwitcher::NewL -// Symbian static 1st phase constructor -// ----------------------------------------------------------------------------- -// -CXnViewSwitcher* CXnViewSwitcher::NewL() - { - CXnViewSwitcher* self = new (ELeave) CXnViewSwitcher(); - - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - - return self; - } - -// ----------------------------------------------------------------------------- -// CXnViewSwitcher::ConstructL -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void CXnViewSwitcher::ConstructL() - { - iFingerFollowSupported = IsFingerFollowSupportedL(); - iTimer = CPeriodic::NewL( CActive::EPriorityUserInput ); - iViewSwitchState = KViewSwitchIdle; - } - -// ----------------------------------------------------------------------------- -// CXnViewSwitcher::CXnViewSwitcher -// C++ default constructor -// ----------------------------------------------------------------------------- -// -CXnViewSwitcher::CXnViewSwitcher() : - iAppUi(static_cast (*iAvkonAppUi)) - { - } - -// ----------------------------------------------------------------------------- -// CXnViewSwitcher::~CXnViewSwitcher -// C++ destructor -// ----------------------------------------------------------------------------- -// -CXnViewSwitcher::~CXnViewSwitcher() - { - if (iTimer->IsActive()) - { - iTimer->Cancel(); - } - delete iTimer; - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -TBool CXnViewSwitcher::FingerFollowSupported() const - { - return iFingerFollowSupported; - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -TBool CXnViewSwitcher::ProcessPointerEventL(const TPointerEvent& aPointerEvent ) - { - TBool consumed(EFalse); - - if ( FingerFollowSupported() ) - { - TPoint parentPos = aPointerEvent.iParentPosition; - - switch (aPointerEvent.iType) - { - case TPointerEvent::EButton1Down: - { - if ( iViewSwitchState == KViewSwitchBegin || iViewSwitchState - == KViewSwitchIdle ) - { - if (iTimer->IsActive()) - { - iTimer->Cancel(); - } - if( SetupViewsL() ) - { - iViewSwitchState = KViewSwitchBegin; - iStartPosition = parentPos; - iScrollSpeed = KMaxScrollSpeed; - iTickAmount = 0; - iDirection = KCurrentView; - iScrollDistance = 0; - iScrollDirectionDistance = 0; - } - } - else if( iViewSwitchState == KViewSwitchDragOngoing ) - { - consumed = ETrue; - } - else if( iViewSwitchState == KViewSwitchScroll ) - { - consumed = ETrue; - - if( iActivateView == KCurrentView ) - { - if (iTimer->IsActive()) - { - iTimer->Cancel(); - } - - iViewSwitchState = KViewSwitchDragOngoing; - consumed = ETrue; - iViewStartPosition = iViewPosition; - iScrollDistance = 0; - iScrollDirectionDistance = 0; - iStartPosition = parentPos; - - iTimer->Start( 0, KDrawDelay, TCallBack( - TimerCallback, this ) ); - } - else if( iActivateView == KNextView ) - { - if( iCurrentView.iAdapter && iNextView.iAdapter && - iPreviousView.iAdapter ) - { - if (iTimer->IsActive()) - { - iTimer->Cancel(); - } - - iViewSwitchState = KViewSwitchDragOngoing; - iActivateView = KCurrentView; - - if( iPreviousView.iAdapter == iNextView.iAdapter ) - { - iPreviousView = iCurrentView; - iCurrentView = iNextView; - iNextView = iPreviousView; - } - else - { - iPreviousView = iCurrentView; - - iCurrentView = iNextView; - - iNextView.iReadyToDraw = EFalse; - CXnViewData* nextViewData( - ViewData( *iCurrentView.iViewData, KNextView ) ); - CXnNode* nextViewNode( nextViewData->ViewNode() ); - if( nextViewNode ) - { - iNextView.iAdapter = nextViewNode->Control(); - iNextView.iViewData = nextViewData; - iNextView.iBgDrawn = EFalse; - } - } - - iViewStartPosition = iCurrentView.iAdapter->Window().Position(); - iScrollDistance = 0; - iScrollDirectionDistance = 0; - iStartPosition = parentPos; - - iScrollSpeed = KMaxScrollSpeed; - iTickAmount = 0; - iTimer->Start( 0, KDrawDelay, TCallBack( - TimerCallback, this ) ); - } - consumed = ETrue; - } - else if( iActivateView == KPreviousView ) - { - if( iCurrentView.iAdapter && iNextView.iAdapter && - iPreviousView.iAdapter ) - { - if (iTimer->IsActive()) - { - iTimer->Cancel(); - } - - iViewSwitchState = KViewSwitchDragOngoing; - iActivateView = KCurrentView; - - if( iPreviousView.iAdapter == iNextView.iAdapter ) - { - iNextView = iCurrentView; - iCurrentView = iPreviousView; - iPreviousView = iNextView; - } - else - { - iNextView = iCurrentView; - - iCurrentView = iPreviousView; - - iPreviousView.iReadyToDraw = EFalse; - CXnViewData* prevViewData( - ViewData( *iCurrentView.iViewData, KPreviousView ) ); - CXnNode* prevViewNode( prevViewData->ViewNode() ); - if( prevViewNode ) - { - iPreviousView.iAdapter = prevViewNode->Control(); - iPreviousView.iViewData = prevViewData; - iPreviousView.iBgDrawn = EFalse; - } - } - - iViewStartPosition = iCurrentView.iAdapter->Window().Position(); - iScrollDistance = 0; - iScrollDirectionDistance = 0; - iStartPosition = parentPos; - - iScrollSpeed = KMaxScrollSpeed; - iTickAmount = 0; - iTimer->Start( 0, KDrawDelay, TCallBack( - TimerCallback, this ) ); - } - consumed = ETrue; - } - } - } - break; - case TPointerEvent::EDrag: - { - if( iViewSwitchState == KViewSwitchIdle ) - { - consumed = EFalse; - } - else if( iViewSwitchState == KViewSwitchBegin ) - { - TPoint delta = parentPos - iStartPosition; - - if( Abs(delta.iX) > KDragTreshold || Abs(delta.iY) > KDragTreshold ) - { -#ifdef RD_TACTILE_FEEDBACK - MTouchFeedback* feedback( MTouchFeedback::Instance() ); - - if ( feedback ) - { - feedback->InstantFeedback( ETouchFeedbackBasic ); - } -#endif - - iViewSwitchState = KViewSwitchDragOngoing; - iActivateView = KCurrentView; - iViewPosition.iY = iCurrentView.iAdapter->Position().iY; - iViewPosition.iX = 0; - iStartPosition = parentPos; - - StartViewDraggingL(); - - iTimer->Start( 0, KDrawDelay, TCallBack( - TimerCallback, this ) ); - } - consumed = ETrue; - } - else if( iViewSwitchState == KViewSwitchDragOngoing ) - { - iScrollDistance = parentPos.iX - iStartPosition.iX; - consumed = ETrue; - } - else - { - consumed = EFalse; - } - } - break; - case TPointerEvent::EButton1Up: - { - if( iViewSwitchState == KViewSwitchBegin ) - { - iViewSwitchState = KViewSwitchIdle; - } - else if( iViewSwitchState == KViewSwitchDragOngoing ) - { - if (iTimer->IsActive()) - { - iTimer->Cancel(); - } - -#ifdef RD_TACTILE_FEEDBACK -/* - MTouchFeedback* feedback( MTouchFeedback::Instance() ); - - if ( feedback ) - { - feedback->InstantFeedback( ETouchFeedbackBasic ); - } -*/ -#endif - - consumed = ETrue; - - StartViewScrolling(); - iViewSwitchState = KViewSwitchScroll; - } - else if( iViewSwitchState == KViewSwitchScroll ) - { - consumed = ETrue; - } - } - break; - default: - break; - } - } - - return consumed; - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void CXnViewSwitcher::TouchGesture( TAknTouchGestureFwType& /*aTouchGesture*/ ) - { - } - -// ----------------------------------------------------------------------------- -// CXnViewSwitcher::SizeChanged -// ----------------------------------------------------------------------------- -// -void CXnViewSwitcher::SizeChanged( TRect aRect ) - { - iRect = aRect; - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -TBool CXnViewSwitcher::SetupViewsL() - { - TBool ret = EFalse; - - CXnViewManager& wManager = iAppUi.ViewManager(); - iCurrentView.iViewData = &wManager.ActiveViewData(); - iCurrentView.iAdapter = iCurrentView.iViewData->ViewNode()->Control(); - iCurrentView.iReadyToDraw = ETrue; - iCurrentView.iBgDrawn = ETrue; - - iViewStartPosition = TPoint( 0, iCurrentView.iAdapter->Window().Position().iY ); - - if ( wManager.ViewAmount() > 1 ) - { - ret = ETrue; - - CXnNode* nextViewNode( wManager.NextViewData().ViewNode() ); - if( nextViewNode ) - { - iNextView.iAdapter = nextViewNode->Control(); - iNextView.iViewData = &wManager.NextViewData(); - } - - CXnNode* prevViewNode( wManager.PreviousViewData().ViewNode() ); - if( prevViewNode && prevViewNode == nextViewNode ) - { - // Only 2 views in Homesceern -> previous = next - iPreviousView = iNextView; - } - else if( prevViewNode ) - { - iPreviousView.iAdapter = prevViewNode->Control(); - iPreviousView.iViewData = &wManager.PreviousViewData(); - } - } - return ret; - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void CXnViewSwitcher::PrepareViewL( CXnViewSwitcher::TViewInformation& aView ) - { - if( !aView.iAdapter || !aView.iViewData ) - { - return; - } - - CXnControlAdapter& adapter = *aView.iAdapter; - RWindow& win( adapter.Window() ); - win.SetOrdinalPosition( -1 ); - adapter.MakeVisible( ETrue ); - - CXnNode* viewNode( aView.iViewData->ViewNode() ); - TBool nodesVisible( IsNodeVisibleL( *viewNode ) ); - if( !nodesVisible ) - { - // Set visible temporarily - ShowNodesL( *viewNode, ETrue ); - } - - iAppUi.ViewAdapter().EnterEditStateL( *aView.iViewData, EFalse ); - - viewNode->UiEngine()->RenderUIL( viewNode ); - aView.iReadyToDraw = ETrue; - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void CXnViewSwitcher::StartViewDraggingL() - { - // Remove focused node, in order to prevent activate triggers - CXnNode* currentViewNode = - iAppUi.ViewManager().ActiveViewData(). Node()->LayoutNode(); - CXnUiEngine* engine(currentViewNode->UiEngine()); - - CXnNode* focusedNode = engine->FocusedNode(); - if (focusedNode) - { - focusedNode->UnsetStateL(XnPropertyNames::style::common::KPressedDown); - focusedNode->UnsetStateL(XnPropertyNames::style::common::KFocus); - } - - // Send button up to prevent long tapping - TPointerEvent pointerEvent; - pointerEvent.iType = TPointerEvent::EButton1Up; - if ( iCurrentView.iAdapter ) - { - iCurrentView.iAdapter->CXnControlAdapter::HandlePointerEventL( - pointerEvent); - } - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void CXnViewSwitcher::StartViewScrolling() - { - TInt screenWidth = iCurrentView.iAdapter->Window().Size().iWidth; - - UpdateViewToBeActivated( KDragOffsetForPageSwitch ); - - switch (iActivateView) - { - case KPreviousView: - { - iScrollDistance = screenWidth - iViewPosition.iX; - } - break; - case KNextView: - { - iScrollDistance = -screenWidth - iViewPosition.iX; - } - break; - default: // KCurrentView - { - iScrollDistance = -iViewPosition.iX; - } - break; - } - - TInt minSpeed = Abs( iScrollDistance / ( KAnimationDuration / KDrawDelay ) ); - iScrollSpeed = Abs( iScrollSpeed ); - if( iScrollSpeed < minSpeed ) - { - iScrollSpeed = minSpeed; - } - if( iScrollSpeed < KMinScrollSpeed ) - { - iScrollSpeed = KMinScrollSpeed; - } - if (iTimer->IsActive()) - { - iTimer->Cancel(); - } - - iTimer->Start(KDrawDelay, KDrawDelay, TCallBack( - TimerCallback, this)); - } - - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void CXnViewSwitcher::ViewSwitchEndedL() - { - iViewSwitchState = KViewSwitchIdle; - - if (iTimer->IsActive()) - { - iTimer->Cancel(); - } - - iViewPosition.iX = 0; - - if ( iCurrentView.iAdapter ) - { - CXnViewManager& wManager( iAppUi.ViewManager() ); - CXnViewData* activeViewData( &wManager.ActiveViewData() ); - - switch( iActivateView ) - { - case KCurrentView: - SetVisible( iNextView.iAdapter, EFalse ); - SetVisible( iPreviousView.iAdapter, EFalse ); - - if( iCurrentView.iViewData && activeViewData != iCurrentView.iViewData ) - { - wManager.ActivateViewL( *iCurrentView.iViewData, TUid::Null(), EFalse ); - } - break; - case KPreviousView: - if ( iPreviousView.iAdapter ) - { - SetVisible( iCurrentView.iAdapter, EFalse ); - if( iPreviousView.iAdapter != iNextView.iAdapter ) - { - SetVisible( iNextView.iAdapter, EFalse ); - } - - CXnViewData* prevViewData( ViewData( *iCurrentView.iViewData, KPreviousView ) ); - if( prevViewData && activeViewData != prevViewData ) - { - wManager.ActivateViewL( *prevViewData, TUid::Null(), EFalse ); - } - } - break; - case KNextView: - if ( iNextView.iAdapter ) - { - SetVisible( iCurrentView.iAdapter, EFalse ); - if( iPreviousView.iAdapter != iNextView.iAdapter ) - { - SetVisible( iPreviousView.iAdapter, EFalse ); - } - - CXnViewData* nextViewData( ViewData( *iCurrentView.iViewData, KNextView ) ); - if( nextViewData && activeViewData != nextViewData ) - { - wManager.ActivateViewL( *nextViewData, TUid::Null(), EFalse ); - } - } - break; - } - - ClearViews(); - } - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void CXnViewSwitcher::Scroll() - { - TInt scrollStep = iScrollDistance / 1.5; - - if( Abs( scrollStep ) > Abs( iScrollSpeed ) ) - { - scrollStep = ( scrollStep > 0 ) ? iScrollSpeed : -iScrollSpeed; - } - - iViewPosition.iX += scrollStep; - iScrollDistance -= scrollStep; - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void CXnViewSwitcher::DoScroll() - { - SetWindowPosition( iCurrentView.iAdapter, iViewPosition ); - - if( iViewPosition.iX < 0 && iNextView.iAdapter ) - { - // next view shown - if( !iNextView.iReadyToDraw ) - { - TRAP_IGNORE( PrepareViewL( iNextView ) ); - if( iPreviousView.iAdapter == iNextView.iAdapter ) - { - iPreviousView.iReadyToDraw = ETrue; - } - } - - ShowAdapter( iNextView.iAdapter ); - if( iPreviousView.iAdapter != iNextView.iAdapter ) - { - HideAdapter( iPreviousView.iAdapter ); - } - - TPoint pos( TPoint( iViewPosition.iX + iRect.Width(), iViewPosition.iY ) ); - SetWindowPosition( iNextView.iAdapter, pos ); - } - - else if( iViewPosition.iX > 0 && iPreviousView.iAdapter ) - { - // previous view shown - if( !iPreviousView.iReadyToDraw ) - { - TRAP_IGNORE( PrepareViewL( iPreviousView ) ); - } - - ShowAdapter( iPreviousView.iAdapter ); - if( iPreviousView.iAdapter != iNextView.iAdapter ) - { - HideAdapter( iNextView.iAdapter ); - } - TPoint pos( TPoint( iViewPosition.iX - iRect.Width(), iViewPosition.iY ) ); - SetWindowPosition( iPreviousView.iAdapter, pos ); - } - - else - { - HideAdapter( iPreviousView.iAdapter ); - HideAdapter( iNextView.iAdapter ); - } - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -TInt CXnViewSwitcher::TimerCallback(TAny *aPtr) - { - CXnViewSwitcher* self = reinterpret_cast (aPtr); - - if( self->iViewSwitchState == KViewSwitchDragOngoing ) - { - TInt prevViewPos( self->iViewPosition.iX ); - self->iViewPosition.iX = self->iViewStartPosition.iX + self->iScrollDistance; - self->DoScroll(); - - self->UpdateViewToBeActivated( KDragOffsetForBackground ); - - // Hack for informing NGA to draw. - self->iAppUi.ViewAdapter().BgManager().DrawNow(TRect(0,0,1,1)); - - // Scroll speed is average drag delta between timer callbacks. - self->iTickAmount++; - - TInt scrollDistance = self->iViewPosition.iX - prevViewPos; - - if( ( scrollDistance < 0 && self->iScrollDirectionDistance > 0 ) || - ( scrollDistance > 0 && self->iScrollDirectionDistance < 0 ) ) - { - // Scroll direction has been changed - self->iScrollDirectionDistance = scrollDistance; - self->iScrollSpeed = scrollDistance; - self->iTickAmount = 1; - } - else - { - self->iScrollDirectionDistance += scrollDistance; - self->iScrollSpeed = self->iScrollDistance / self->iTickAmount; - } - - if( scrollDistance < 0 ) - { - self->iDirection = KNextView; - } - else if( scrollDistance > 0 ) - { - self->iDirection = KPreviousView; - } - - return 0; - } - - if ( Abs( self->iScrollDistance ) <= 2 ) - { - TRAP_IGNORE( self->ViewSwitchEndedL() ); - } - else - { - self->Scroll(); - self->DoScroll(); - - // Hack for inforing NGA to draw. - self->iAppUi.ViewAdapter().BgManager().DrawNow(TRect(0,0,1,1)); - } - return 0; - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -TBool CXnViewSwitcher::IsFingerFollowSupportedL() const - { - CRepository* repository = - CRepository::NewL(TUid::Uid(KCRUidActiveIdleLV)); - TBool value(EFalse); - TInt err(repository->Get(KAIFingerFollowSupport, value)); - delete repository; - - return value && (KErrNone == err); - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -CXnViewData* CXnViewSwitcher::ViewData( CXnViewData& aCurrentViewData, - TInt aView ) - { - CXnRootData& rootData = iAppUi.ViewManager().ActiveAppData(); - RPointerArray& rootDataArr = rootData.PluginData(); - - CXnViewData* ret( NULL ); - - TInt viewAmount( rootDataArr.Count() ); - for( TInt i = 0; i < viewAmount; i++ ) - { - CXnViewData* viewData = static_cast( rootDataArr[i] ); - if( &aCurrentViewData == viewData ) - { - if( aView == KNextView ) - { - if( i < viewAmount - 1 ) - { - ret = static_cast( rootDataArr[i + 1] ); - } - else - { - ret = static_cast( rootDataArr[0] ); - } - break; - } - else if( aView == KPreviousView ) - { - if( i == 0 ) - { - ret = static_cast( rootDataArr[viewAmount - 1] ); - } - else - { - ret = static_cast( rootDataArr[i - 1] ); - } - break; - } - } - } - - return ret; - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void CXnViewSwitcher::ClearViews() - { - TPoint p( 0, iCurrentView.iAdapter->Window().Position().iY ); - SetWindowPosition( iCurrentView.iAdapter, p ); - SetWindowPosition( iPreviousView.iAdapter, p ); - SetWindowPosition( iNextView.iAdapter, p ); - ShowAdapter( iPreviousView.iAdapter ); - ShowAdapter( iNextView.iAdapter ); - ShowAdapter( iCurrentView.iAdapter ); - iCurrentView.iAdapter = NULL; - iCurrentView.iViewData = NULL; - iCurrentView.iReadyToDraw = EFalse; - iCurrentView.iBgDrawn = EFalse; - iNextView.iAdapter = NULL; - iNextView.iViewData = NULL; - iNextView.iReadyToDraw = EFalse; - iNextView.iBgDrawn = EFalse; - iPreviousView.iAdapter = NULL; - iPreviousView.iViewData = NULL; - iPreviousView.iReadyToDraw = EFalse; - iPreviousView.iBgDrawn = EFalse; - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void CXnViewSwitcher::UpdateViewToBeActivated( TInt aOffset ) - { - if ( iViewPosition.iX > aOffset && iDirection == KPreviousView && - iScrollDirectionDistance > aOffset / 2) - { - if( iActivateView != KPreviousView && - iPreviousView.iViewData && iCurrentView.iViewData ) - { - iActivateView = KPreviousView; - if( !iPreviousView.iBgDrawn ) - { - ChangeBackground( *iCurrentView.iViewData, - *iPreviousView.iViewData ); - iPreviousView.iBgDrawn = ETrue; - iNextView.iBgDrawn = EFalse; - iCurrentView.iBgDrawn = EFalse; - } - } - } - else if ( iViewPosition.iX < -aOffset && iDirection == KNextView && - iScrollDirectionDistance < -aOffset / 2 ) - { - if( iActivateView != KNextView && - iNextView.iViewData && iCurrentView.iViewData ) - { - iActivateView = KNextView; - if( !iNextView.iBgDrawn ) - { - ChangeBackground( *iCurrentView.iViewData, - *iNextView.iViewData ); - iPreviousView.iBgDrawn = EFalse; - iNextView.iBgDrawn = ETrue; - iCurrentView.iBgDrawn = EFalse; - } - } - } - else if( iActivateView != KCurrentView && - iPreviousView.iViewData && iNextView.iViewData && iCurrentView.iViewData ) - { - if( Abs( iScrollDirectionDistance ) > aOffset / 2 ) - { - iActivateView = KCurrentView; - if( !iCurrentView.iBgDrawn ) - { - ChangeBackground( ( iPreviousView.iBgDrawn ) ? *iPreviousView.iViewData : - *iNextView.iViewData, *iCurrentView.iViewData ); - iPreviousView.iBgDrawn = EFalse; - iNextView.iBgDrawn = EFalse; - iCurrentView.iBgDrawn = ETrue; - } - } - } - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void CXnViewSwitcher::ChangeBackground( CXnViewData& aCurrent, CXnViewData& aNext ) - { - CXnBackgroundManager& bg( iAppUi.ViewAdapter().BgManager() ); - - GfxTransEffect::Begin( &bg, KGfxControlActionBgImgToImgAppear ); - - bg.ChangeWallpaper( aCurrent, aNext, EFalse ); - - GfxTransEffect::SetDemarcation( &bg, bg.Position() ); - GfxTransEffect::End( &bg ); - } - -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- -// -void CXnViewSwitcher::StopViewSwitchL() - { - ViewSwitchEndedL(); - } - -// End of file