--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/uifw/AvKon/src/aknAnimView.cpp Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,227 @@
+/*
+* Copyright (c) 2002 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:
+*
+*/
+
+// AknAnimView.CPP
+//
+// Copyright (c) 1997-1999 Symbian Ltd. All rights reserved.
+//
+
+// Animation View class
+
+
+#include "aknanimview.h"
+#include "aknAnimGc.h"
+#include "aknAnimCtrl.h"
+#include "aknanimdata.h"
+
+#include "aknappui.h"
+#include "AknPanic.h"
+#include <coemain.h>
+#include <eikbtgpc.h>
+#include <e32base.h>
+#include <eikmenub.h>
+#include <eiklbi.h>
+#include <eiklbx.h>
+#include <avkon.hrh>
+#include <AknLayout.lag>
+#include <AknUtils.h>
+// CAknDummyListBoxView
+
+CWindowGc* CAknDummyListBoxView::SwapGraphicsContext(CWindowGc* aGc)
+ {
+ CWindowGc* oldGc = iGc;
+ iGc = aGc;
+ iItemDrawer->SetGc(aGc);
+ return oldGc;
+ }
+
+EXPORT_C TAny* CAknDummyListBoxView::Reserved_1()
+ {
+ return NULL;
+ }
+
+
+// CAknAnimatedView
+
+EXPORT_C CAknAnimatedView::CAknAnimatedView()
+ {
+ }
+
+EXPORT_C CAknAnimatedView::~CAknAnimatedView()
+ {
+ delete iKeyWatcher;
+ delete iTimedDrawer;
+ delete iAnimatedGc;
+ delete iAnimationCtrl;
+ delete iViewBitmapContext;
+ delete iViewBitmapDevice;
+ delete iViewBitmap;
+ delete iOriginalBitmap;
+ }
+
+
+/** Entry point for animation. This function is called by the view architecture when
+ * a new view is activated.
+ */
+EXPORT_C void CAknAnimatedView::AknViewActivatedL(const TVwsViewId& aPrevViewId,TUid aCustomMessageId,const TDesC8& aCustomMessage)
+ {
+ // Check that no existing bitmap or gc exists
+ __ASSERT_DEBUG(!iViewBitmap, Panic(EAknPanicAnimationCorrupt));
+ __ASSERT_DEBUG(!iViewBitmapDevice, Panic(EAknPanicAnimationCorrupt));
+ __ASSERT_DEBUG(!iViewBitmapContext, Panic(EAknPanicAnimationCorrupt));
+ __ASSERT_DEBUG(!iAnimatedGc, Panic(EAknPanicAnimationCorrupt));
+ // Create a blank bitmap for drawing the view to
+ TSize screenSize = iAvkonAppUi->ApplicationRect().Size();
+ //TSize screenSize = TSize(AKN_LAYOUT_WINDOW_screen.iW,AKN_LAYOUT_WINDOW_screen.iH);
+
+ iViewBitmap = new (ELeave) CFbsBitmap();
+ iViewBitmap->Create(screenSize,iCoeEnv->ScreenDevice()->DisplayMode());
+
+ iViewBitmapDevice = CFbsBitmapDevice::NewL(iViewBitmap);
+ iViewBitmapDevice->CreateContext(iViewBitmapContext);
+
+
+ iAnimatedGc = CAknAnimatedGc::NewL(iCoeEnv->SystemGc(), *iViewBitmapContext);
+ iAnimatedGc->SetRootWindow(iCoeEnv->RootWin());
+
+ iEikonEnv->EikAppUi()->StopDisplayingMenuBar();
+ if (MenuBar())
+ MenuBar()->StopDisplayingMenuBar();
+
+ // Get a copy of the existing screen
+
+ iOriginalBitmap = new (ELeave) CFbsBitmap();
+ iOriginalBitmap->Create(screenSize,iCoeEnv->ScreenDevice()->DisplayMode());
+ iCoeEnv->ScreenDevice()->CopyScreenToBitmap(iOriginalBitmap);
+
+ iOldSystemGc = iCoeEnv->SwapSystemGc(iAnimatedGc);
+
+ PreAnimateSetup();
+
+ CAknView::AknViewActivatedL(aPrevViewId, aCustomMessageId, aCustomMessage);
+
+ // Redraw status pane
+ CEikStatusPane *sp = ((CAknAppUi*)iEikonEnv->EikAppUi())->StatusPane();
+ CCoeControl *context = sp->ContainerControlL(TUid::Uid(EEikStatusPaneUidContext));
+ CCoeControl *title = sp->ContainerControlL(TUid::Uid(EEikStatusPaneUidTitle));
+ CCoeControl *navi = sp->ContainerControlL(TUid::Uid(EEikStatusPaneUidNavi));
+ context->DrawNow();
+ title->DrawNow();
+ navi->DrawNow();
+
+ // Start timed drawer, so that view can draw before animation starts
+
+ iTimedDrawer = CPeriodic::NewL(CActive::EPriorityIdle);
+ TCallBack callback(DrawCallback, this);
+ iTimedDrawer->Start(iAnimationData->Interval(),iAnimationData->Interval(),callback);
+
+
+ iKeyWatcher = CAknAnimationKeyWatcher::NewL();
+ }
+
+
+TInt CAknAnimatedView::DrawCallback(TAny* aPtr)
+ {
+ CAknAnimatedView* ptr = (CAknAnimatedView*)aPtr;
+
+ return ptr->DoCallback();
+ }
+
+void CAknAnimatedView::RestoreSystemGc()
+ {
+ if (iOldSystemGc != NULL)
+ {
+ iCoeEnv->SwapSystemGc(iOldSystemGc);
+ }
+ iOldSystemGc = NULL;
+ }
+
+TInt CAknAnimatedView::DoCallback()
+ {
+ if (!iAnimationCtrl)
+ {
+ TRAPD(error,
+ iAnimationCtrl = CAknAnimationCtrl::NewL(*iOldSystemGc, *iViewBitmap, *iOriginalBitmap, iAnimationData);
+ iAnimationCtrl->ActivateL();
+ );
+ if (error)
+ {
+ // Error in creating the control, so just end the callback.
+ // The view is displayed normally, without the animation
+ delete iAnimationCtrl;
+ iAnimationCtrl = NULL;
+ return ETrue;
+ }
+
+
+ iKeyWatcher->SetAnimationControl(iAnimationCtrl);
+ RestoreSystemGc();
+ }
+
+ TBool finished = iAnimationCtrl->DrawStep();
+ if (!finished)
+ return ETrue;
+
+ delete iKeyWatcher;
+ iKeyWatcher = NULL;
+
+ delete iTimedDrawer;
+ iTimedDrawer = NULL;
+
+ PostAnimateSetup();
+ delete iAnimatedGc;
+ iAnimatedGc = NULL;
+
+ delete iViewBitmapContext;
+ iViewBitmapContext = NULL;
+
+ delete iViewBitmapDevice;
+ iViewBitmapDevice = NULL;
+
+ iEikonEnv->EikAppUi()->RemoveFromStack(iAnimationCtrl);
+ delete iAnimationCtrl;
+ iAnimationCtrl = NULL;
+
+ delete iViewBitmap;
+ iViewBitmap = NULL;
+
+ delete iOriginalBitmap;
+ iOriginalBitmap = NULL;
+
+ // return EFlase so that idle object is not called again
+ return EFalse;
+ }
+
+EXPORT_C void CAknAnimatedView::PreAnimateSetup()
+ {
+ }
+
+EXPORT_C void CAknAnimatedView::PostAnimateSetup()
+ {
+ }
+
+EXPORT_C void CAknAnimatedView::SetAnimationData(CAknAnimationData* aAnimationData)
+ {
+ iAnimationData = aAnimationData;
+ }
+
+EXPORT_C CWindowGc* CAknAnimatedView::SwapListBoxGc(CEikListBox* aListBox, CWindowGc* aWindowGc)
+ {
+ CAknDummyListBoxView* dummyView = REINTERPRET_CAST(CAknDummyListBoxView*,aListBox->View());
+ return dummyView->SwapGraphicsContext(aWindowGc);
+ }
+