--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/windowing/windowserver/tauto/AUTODLL.CPP Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,2858 @@
+// Copyright (c) 1996-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:
+// Auto test Animated DLL functions
+//
+//
+
+#include <e32std.h>
+#include <w32std.h>
+#include <w32adll.h>
+#include <bitstd.h>
+#include "AUTODLL.H"
+#include "TAnimDraw.h"
+#include "eventdd.h"
+#include <gdi.h>
+#include <fbs.h>
+
+union TAnimArgUnion
+ {
+ const TAny* any;
+ const TBool* Bool;
+ const TInt* Int;
+ const TPoint* Point;
+ const TSize* Size;
+ const TRect* Rect;
+ const TSpriteMemberInfo* SpriteMemberInfo;
+ const TShadowDrawTest* ShadowDrawTest;
+ const TDrawTestScreen* DrawTestScreen;
+ const TSyncTests* SyncTests;
+ const TTimeChangeTest* TimeChangeTest;
+ const TAnimRawEvent* AnimRawEvent;
+ const TWindowGroupInfoParms* WindowGroupInfoParms;
+ const TSetOrdinalParms* SetOrdinalParms;
+ const TFrameData* FrameData;
+ const TRawEvent* RawEvent;
+ };
+
+class CPanicAnim : public CWindowAnim
+ {
+ enum TSyncState
+ {
+ ESyncStateNull,
+ ESyncStateStarting,
+ ESyncStateCounting,
+ ESyncLeave,
+ ESyncStateTimeChange1,
+ ESyncStateTimeChange2,
+ ESyncStateTimeChange3
+ };
+ enum {ESyncCount=8};
+public:
+ ~CPanicAnim();
+ virtual void ConstructL(TAny *aArgs, TBool aHasFocus);
+ virtual void Animate(TDateTime *aDateTime);
+ virtual void Redraw();
+ virtual void Command(TInt aOpcode, TAny *aArgs);
+ virtual TInt CommandReplyL(TInt aOpcode, TAny *aArgs);
+ virtual void FocusChanged(TBool aState);
+ //Pure virtual function from MEventHandler
+ virtual TBool OfferRawEvent(const TRawEvent &aRawEvent);
+private:
+ void StartSyncTest(MAnimGeneralFunctions::TAnimSync aSync);
+ void StartTimeChangeTest();
+ void DoLeaveInActiveCallback();
+ static TInt LeaveInActiveCallback(TAny *aThis);
+private:
+ TRequestStatus *iStatusPtr;
+ TRequestStatus *iStatusPtr2;
+ TTime iTime;
+ TInt iSyncCount;
+ TSyncState iSyncState;
+ MAnimGeneralFunctions::TAnimSync iSyncMode;
+ TBool iLeaveInRedraw;
+ CIdle* iActivePanicIdle;
+ };
+
+class CPanicAnim2 : public CWindowAnim
+//
+// Simply panics in the ConstructL()
+//
+ {
+public:
+ virtual void ConstructL(TAny *aArgs, TBool aHasFocus);
+ virtual void Animate(TDateTime *aDateTime);
+ virtual void Redraw();
+ virtual void Command(TInt aOpcode, TAny *aArgs);
+ virtual TInt CommandReplyL(TInt aOpcode, TAny *aArgs);
+ virtual void FocusChanged(TBool aState);
+ //Pure virtual function from MEventHandler
+ virtual TBool OfferRawEvent(const TRawEvent &aRawEvent);
+ };
+
+class CAutoAnim3 : public CWindowAnim
+//
+// test drawing/redrawing
+//
+ {
+public:
+ virtual void ConstructL(TAny *aArgs, TBool aHasFocus);
+ virtual void Animate(TDateTime *aDateTime);
+ virtual void Redraw();
+ virtual void Command(TInt aOpcode, TAny *aArgs);
+ virtual TInt CommandReplyL(TInt aOpcode, TAny *aArgs);
+ virtual void FocusChanged(TBool aState);
+ void Draw(const TRect &aRect);
+ void DrawTestScreenL(const TDrawTestScreen* aParams);
+ //Pure virtual function from MEventHandler
+ virtual TBool OfferRawEvent(const TRawEvent &aRawEvent);
+private:
+ TRequestStatus *iStatusPtr;
+ CFbsFont *iFont;
+ TRect iRect;
+ TRect iBaseRect;
+ TInt iMode;
+ };
+
+class CAutoAnimScrBack : public CWindowAnim
+//
+// test anim drawing behind a backed up window
+//
+ {
+public:
+ virtual void ConstructL(TAny *aArgs, TBool aHasFocus);
+ virtual void Animate(TDateTime *aDateTime);
+ virtual void Redraw();
+ virtual void Command(TInt aOpcode, TAny *aArgs);
+ virtual TInt CommandReplyL(TInt aOpcode, TAny *aArgs);
+ virtual void FocusChanged(TBool aState);
+ void Draw();
+ //Pure virtual function from MEventHandler
+ virtual TBool OfferRawEvent(const TRawEvent &aRawEvent);
+private:
+ TRect iRect;
+ TInt iMode;
+ };
+
+class CTestSpriteAnim : public CSpriteAnim
+ {
+public:
+ virtual void ConstructL(TAny *aArgs);
+ virtual void Animate(TDateTime *aDateTime);
+ virtual void Command(TInt aOpcode, TAny *aArgs);
+ virtual TInt CommandReplyL(TInt aOpcode, TAny *aArgs);
+ //Pure virtual function from MEventHandler
+ virtual TBool OfferRawEvent(const TRawEvent &aRawEvent);
+private:
+ TBool CheckMember(const TSpriteMemberInfo& aMemInfo);
+ void DrawMemberL(TInt aMember);
+ void DrawMemberL();
+ };
+
+/**
+Used by CAnimTimer below
+*/
+class MAnimTimerObserver
+ {
+public:
+ virtual void DisplayNextFrameL()=0;
+ };
+
+/**
+This class is used by CTestFreeTimerAnim to determine when to swap the current frame with the next one.
+*/
+class CAnimTimer : public CTimer
+ {
+public:
+ ~CAnimTimer();
+ static CAnimTimer* NewL(MAnimTimerObserver& aObserver);
+ void RunL();
+private:
+ CAnimTimer(MAnimTimerObserver& aObserver);
+ void ConstructL();
+private:
+ MAnimTimerObserver& iAnim;
+ };
+
+class CTestFreeTimerAnim : public CFreeTimerWindowAnim, public MAnimTimerObserver
+ {
+public:
+ //from CBase
+ ~CTestFreeTimerAnim();
+ //from CAnim
+ void Animate(TDateTime *aDateTime);
+ void Command(TInt aOpcode, TAny *aArgs);
+ TInt CommandReplyL(TInt aOpcode, TAny *aArgs);
+ //from CWindowAnim
+ void ConstructL(TAny *aArgs, TBool aHasFocus);
+ void Redraw();
+ void FocusChanged(TBool aState);
+ //from MEventHandler
+ TBool OfferRawEvent(const TRawEvent &aRawEvent);
+private:
+ void DisplayNextFrameL();
+private:
+ CAnimTimer* iTimer;
+ TInt iFrameTime;
+ TRgb iColour;
+ TRect iRect;
+ };
+
+class CEventTestAnimBase : public CWindowAnim
+ {
+ enum {EEventBufferSize=40};
+public:
+ virtual ~CEventTestAnimBase();
+ //Pure virtual functions from CAnim
+ virtual void Animate(TDateTime *aDateTime);
+ virtual void Command(TInt aOpcode, TAny *aArgs);
+ virtual TInt CommandReplyL(TInt aOpcode, TAny *aArgs);
+ //Pure virtual functions from CWindowAnim
+ virtual void ConstructL(TAny *aArgs, TBool aHasFocus);
+ virtual void Redraw();
+ virtual void FocusChanged(TBool aState);
+ //Pure virtual function from MEventHandler
+ virtual TBool OfferRawEvent(const TRawEvent &aRawEvent);
+protected:
+ void Fail();
+ TBool IsIgnorableEvent(const TRawEvent& aRawEvent) const;
+ TBool GetNextExpectedEvent(TAnimRawEvent& aRawEvent);
+ TBool CompareEvents(const TRawEvent& aExpectedEvent, const TRawEvent& aActualEvent) const;
+ TBool HandleRecursiveEvent(const TRawEvent& aRawEvent);
+
+ TInt Error() const;
+ TInt EventCount() const;
+ void ResetEventCount();
+ TInt TotalExpectedEvents() const;
+ TInt AddEvent(const TAnimRawEvent* event);
+private:
+ virtual TInt AddExpectedEvent(const TAnimRawEvent* event)=0;
+private:
+ CCirBuf<TAnimRawEvent> iExpectedEvents;
+ TInt iError;
+ TInt iEventCount;
+ };
+
+class CEventTestAnim : public CEventTestAnimBase
+ {
+public:
+ ~CEventTestAnim();
+ //Pure virtual functions from CWindowAnim overridden in CEventTestAnimBase
+ void ConstructL(TAny* aArgs,TBool aHasFocus);
+ //Pure virtual functions from CAnim overridden in CEventTestAnimBase
+ TInt CommandReplyL(TInt aOpcode,TAny* aArgs);
+ void Command(TInt aOpcode,TAny* aArgs);
+private:
+ TInt UnloadDeviceDriver();
+ //Pure virtual function from CEventTestAnimBase
+ TInt AddExpectedEvent(const TAnimRawEvent* event);
+private:
+ TBool iDevDriverLoaded;
+ REventDD iLdd;
+ };
+
+class CEventPostingAnim : public CEventTestAnimBase
+ {
+public:
+ ~CEventPostingAnim();
+ //Virtual functions from CEventTestAnimBase
+ virtual void ConstructL(TAny *aArgs, TBool aHasFocus);
+ //Virtual function from MEventHandler
+ virtual TBool OfferRawEvent(const TRawEvent &aRawEvent);
+private:
+ //Pure virtual function from CEventTestAnimBase
+ virtual TInt AddExpectedEvent(const TAnimRawEvent* event);
+ };
+
+class CRemovableAnim : public CEventTestAnimBase
+ {
+public:
+ ~CRemovableAnim();
+ //Virtual functions from CEventTestAnimBase
+ virtual TInt CommandReplyL(TInt aOpcode, TAny *aArgs);
+ virtual TBool OfferRawEvent(const TRawEvent &aRawEvent);
+private:
+ //Pure virtual function from CEventTestAnimBase
+ virtual TInt AddExpectedEvent(const TAnimRawEvent* event);
+private:
+ TInt iLifetime;
+ };
+
+class CTimerTestAnim : public CWindowAnim
+ {
+public:
+ ~CTimerTestAnim();
+ //Pure virtual functions from CAnim
+ virtual void Animate(TDateTime *aDateTime);
+ virtual void Command(TInt aOpcode, TAny *aArgs);
+ virtual TInt CommandReplyL(TInt aOpcode, TAny *aArgs);
+ //Pure virtual functions from CWindowAnim
+ virtual void ConstructL(TAny *aArgs, TBool aHasFocus);
+ virtual void Redraw();
+ virtual void FocusChanged(TBool aState);
+ //Pure virtual function from MEventHandler
+ virtual TBool OfferRawEvent(const TRawEvent &aRawEvent);
+private:
+ TInt iTimerCount;
+ TBool iExpectingTicks;
+ TBool iFail;
+ };
+
+class CWinFunctionTestAnim : public CWindowAnim
+ {
+ //enum {EEventBufferSize=40};
+public:
+ ~CWinFunctionTestAnim();
+ //Pure virtual functions from CAnim
+ virtual void Animate(TDateTime *aDateTime);
+ virtual void Command(TInt aOpcode, TAny *aArgs);
+ virtual TInt CommandReplyL(TInt aOpcode, TAny *aArgs);
+ //Pure virtual functions from CWindowAnim
+ virtual void ConstructL(TAny *aArgs, TBool aHasFocus);
+ virtual void Redraw();
+ virtual void FocusChanged(TBool aState);
+ //Pure virtual function from MEventHandler
+ virtual TBool OfferRawEvent(const TRawEvent &aRawEvent);
+private:
+ MAnimGeneralFunctionsWindowExtension* iWinFunctions;
+ };
+
+class CNotificationTestAnim : public CWindowAnim
+ {
+public:
+ CNotificationTestAnim();
+ ~CNotificationTestAnim();
+ //Pure virtual functions from CAnim
+ virtual void HandleNotification(const TWsEvent& aEvent);
+ virtual void Animate(TDateTime *aDateTime);
+ virtual void Command(TInt aOpcode, TAny *aArgs);
+ virtual TInt CommandReplyL(TInt aOpcode, TAny *aArgs);
+ //Pure virtual functions from CWindowAnim
+ virtual void ConstructL(TAny *aArgs, TBool aHasFocus);
+ virtual void Redraw();
+ virtual void FocusChanged(TBool aState);
+ //Pure virtual function from MEventHandler
+ virtual TBool OfferRawEvent(const TRawEvent &aRawEvent);
+private:
+ TFixedArray<TBool,2> iDSA;
+ TBool iHeartbeatState;
+ TBool iScreenDeviceChanged;
+ TTime iLastAnimTime;
+ };
+
+class CTransAnim : public CWindowAnim
+//
+// Test drawing/redrawing in Transparent window.
+//
+ {
+public:
+ //Implementaion for pure virtual functions from CAnim
+ void ConstructL(TAny* aArgs, TBool aHasFocus);
+ void Animate(TDateTime* aDateTime);
+ void Redraw();
+ void Command(TInt aOpcode, TAny* aArgs);
+ TInt CommandReplyL(TInt aOpcode, TAny* aArgs);
+ void FocusChanged(TBool aState);
+ TBool OfferRawEvent(const TRawEvent &aRawEvent);
+private:
+ CFbsFont* iFont;
+ TRect iRect;
+ TInt iMode;
+ TInt iDraw;
+ TRgb iColor;
+ TInt iCount;
+ };
+
+class CTestHandlerAnim : public CWindowAnim
+ {
+ public:
+ ~CTestHandlerAnim();
+ void ConstructL(TAny* aArgs, TBool aHasFocus);
+ void Redraw();
+ void FocusChanged(TBool aState);
+ TInt CommandReplyL(TInt aOpcode, TAny* aArgs);
+ void Command(TInt aOpcode, TAny* aArgs);
+ void Animate(TDateTime* aDateTime);
+ TBool OfferRawEvent(const TRawEvent &aRawEvent);
+ private:
+ };
+
+class CCoverageAnim : public CWindowAnim
+/**
+ This class adds functional coverage to CWsAnimGc.
+ The actual work is handled by the 'Draw' method which calls
+ each method in turn.
+ Mostly copied from CAutoAnimScrBack and CAutoAnim3.
+ @SYMTestCaseID
+ @SYMPREQ 1841 Add Coverage tests.
+ @SYMTestCaseDesc Functional coverage.
+ @SYMTestActions Run functional coverage test on CWsAnimGc.
+ */
+ {
+public:
+ ~CCoverageAnim();
+ virtual void ConstructL(TAny *aArgs, TBool aHasFocus);
+ virtual void Animate(TDateTime *aDateTime);
+ virtual void Redraw();
+ virtual void Command(TInt aOpcode, TAny *aArgs);
+ virtual TInt CommandReplyL(TInt aOpcode, TAny *aArgs);
+ virtual void FocusChanged(TBool aState);
+ void Draw();
+ //Pure virtual function from MEventHandler
+ virtual TBool OfferRawEvent(const TRawEvent &aRawEvent);
+private:
+ TRect iRect; /** rectangle used for all draw ops that require one */
+ CFbsFont* iFont;
+ };
+
+class CMultiPointerAnim : public CWindowAnim
+ {
+ enum {EEventBufferSize=40};
+public:
+ virtual ~CMultiPointerAnim();
+ //Pure virtual functions from CAnim
+ virtual void Animate(TDateTime *aDateTime);
+ virtual void Command(TInt aOpcode, TAny *aArgs);
+ virtual TInt CommandReplyL(TInt aOpcode, TAny *aArgs);
+ //Pure virtual functions from CWindowAnim
+ virtual void ConstructL(TAny *aArgs, TBool aHasFocus);
+ virtual void Redraw();
+ virtual void FocusChanged(TBool aState);
+ //Pure virtual function from MEventHandler
+ virtual TBool OfferRawEvent(const TRawEvent &aRawEvent);
+protected:
+ TInt AddEvent(const TAnimRawEvent* aEvent);
+ TBool CompareEvents(const TRawEvent& aExpectedEvent, const TRawEvent& aActualEvent);
+private:
+ CCirBuf<TAnimRawEvent> iExpectedEvents;
+ TBuf<255> iErrorDes;
+ TInt iEventCount;
+ TInt iError;
+ };
+
+class CTestAnimDll : public CAnimDll
+ {
+public:
+ CAnim *CreateInstanceL(TInt aType);
+private:
+ };
+
+/*#if defined(__WINS__)
+#pragma data_seg(".E32_UID")
+__WINS_UID(0, KWservAnimDllUidValue, 0)
+#pragma data_seg()
+#endif*/
+
+EXPORT_C CAnimDll *CreateCAnimDllL()
+ {
+ return(new(ELeave) CTestAnimDll());
+ }
+
+
+// Panic Tests //
+void CPanicAnim::ConstructL(TAny *, TBool )
+ {
+ iWindowFunctions->SetRect(TRect(0,0,1,1));
+ iFunctions->SetSync(MAnimGeneralFunctions::ESyncSecond);
+ if (iFunctions->Sync()!=MAnimGeneralFunctions::ESyncSecond)
+ User::Leave(KErrGeneral);
+// Check the anim time is not ahead of and not more than 2 secs behind the system time
+ TTime now;
+ now.UniversalTime();
+ TDateTime dt=now.DateTime();
+ TDateTime adt=iFunctions->SystemTime();
+ if (adt.Day()!=dt.Day())
+ User::Leave(KErrGeneral);
+
+ iFunctions->SetSync(MAnimGeneralFunctions::ESyncNone);
+ if (iFunctions->Sync()!=MAnimGeneralFunctions::ESyncNone)
+ User::Leave(KErrGeneral);
+ }
+
+CPanicAnim::~CPanicAnim()
+ {
+ delete iActivePanicIdle;
+ }
+
+void CPanicAnim::Animate(TDateTime *aDateTime)
+ {
+ switch(iSyncState)
+ {
+ case ESyncStateNull:
+ break;
+ case ESyncStateStarting:
+ iTime=iFunctions->SystemTime();
+ iSyncState=ESyncStateCounting;
+ iSyncCount=0;
+ break;
+ case ESyncStateCounting:
+ if (aDateTime)
+ {
+ TTimeIntervalSeconds interval;
+ TTime(*aDateTime).SecondsFrom(iTime, interval);
+ iSyncCount=interval.Int();
+ }
+ else
+ iSyncCount++;
+ if (iSyncCount==ESyncCount)
+ {
+ TTimeIntervalMicroSeconds minInterval(0);
+ TTimeIntervalMicroSeconds maxInterval(0);
+ iSyncState=ESyncStateNull;
+ switch(iSyncMode)
+ {
+ case MAnimGeneralFunctions::ESyncSecond:
+ minInterval=iSyncCount*1000000-100000;
+ maxInterval=iSyncCount*1000000+100000;
+ break;
+ default:;
+ }
+ TTime time(iFunctions->SystemTime());
+ TTimeIntervalMicroSeconds interval=time.MicroSecondsFrom(iTime);
+ TInt ret=KErrNone;
+ if (interval<minInterval || interval>maxInterval)
+ ret=KErrGeneral;
+ iFunctions->Client().RequestComplete(iStatusPtr,ret);
+ }
+ break;
+ case ESyncLeave:
+ User::Leave(KErrGeneral); // Test: Not allowed to leave, will cause a panic
+ break;
+ case ESyncStateTimeChange1:
+ if (!aDateTime)
+ {
+ iFunctions->Client().RequestComplete(iStatusPtr,KErrNone);
+ iSyncState=ESyncStateTimeChange2;
+ }
+ break;
+ case ESyncStateTimeChange2:
+ if (!aDateTime)
+ {
+ iSyncState=ESyncStateTimeChange3;
+ break;
+ }
+ case ESyncStateTimeChange3:
+ iFunctions->Client().RequestComplete(iStatusPtr2,aDateTime ? KErrNone : KErrGeneral);
+ iSyncState=ESyncStateNull;
+ break;
+ }
+ }
+
+void CPanicAnim::Redraw()
+ {
+ if (iLeaveInRedraw)
+ User::Leave(KErrGeneral); //Test: Not allowed to leave, will cause a panic
+ }
+
+void CPanicAnim::Command(TInt aOpcode, TAny *)
+ {
+ switch(aOpcode)
+ {
+ case EADllPanicCallPanic:
+ iFunctions->Panic();
+ break;
+ case EADllPanicSetInterval:
+ iFunctions->SetSync(MAnimGeneralFunctions::ESyncSecond);
+ iFunctions->SetInterval(1);
+ break;
+ case EADllPanicSetNextInterval:
+ iFunctions->SetSync(MAnimGeneralFunctions::ESyncMinute);
+ iFunctions->SetNextInterval(1);
+ break;
+ case EADllPanicDoubleActivateGC:
+ iWindowFunctions->ActivateGc();
+ iWindowFunctions->ActivateGc();
+ break;
+ case EADllPanicDrawRectWithNoGc:
+ iGc->DrawRect(TRect(0,0,10,10));
+ break;
+ case EADllPanicDrawTextWithNoFont:
+ iWindowFunctions->ActivateGc();
+ iGc->DrawText(_L("Panic"),TPoint(20,20));
+ break;
+ case EADllPanicLeaveInAnimate:
+ iFunctions->SetSync(MAnimGeneralFunctions::ESyncFlash);
+ iSyncState=ESyncLeave;
+ break;
+ case EADllPanicLeaveInRedraw:
+ iLeaveInRedraw=ETrue;
+ iWindowFunctions->Invalidate(TRect(0,0,10,10));
+ break;
+ case EADllPanicLeave:
+ //tests a leaving function in a non-leaving function and should not be moved to CommandReplyL as it leaves
+ User::Leave(KErrGeneral); //LeaveScan: intentional test
+ break;
+ case EADllPanicSetVisWithGcActive:
+ iWindowFunctions->ActivateGc();
+ iWindowFunctions->SetVisible(EFalse);
+ iWindowFunctions->SetVisible(ETrue);
+ break;
+ case EADllPanicLeaveInActiveCallback:
+ iActivePanicIdle=CIdle::NewL(EPriorityHigh);
+ iActivePanicIdle->Start(TCallBack(CPanicAnim::LeaveInActiveCallback,this));
+ break;
+ case EADllPanicSetClippingRectWithNoGc:
+ {
+ // currently this test fails because when deactivated iWin is also NULL and is deferenced in function
+ TRect rect(20,20,20,20);
+ iGc->SetClippingRect(rect);
+ }
+ break;
+ case EADllPanicCancelClippingRegionWithNoGc:
+ // currently this test fails because when deactivated iWin is NULL and function leaves
+ iGc->CancelClippingRegion();
+ break;
+ case EADllPanicCancelClippingRectWithNoGc:
+ // currently this test fails because when deactivated iWin is also NULL and is deferenced in function
+ iGc->CancelClippingRect();
+ break;
+ case EADllPanicSetDrawModeWithNoGc:
+ iGc->SetDrawMode(CGraphicsContext::EDrawModeAND);
+ break;
+ case EADllPanicUseFontWithNoGc:
+ {
+ // currently this test fails because does not check for NULL font
+ CFbsFont* font = NULL;
+ iGc->UseFont(font);
+ }
+ break;
+ case EADllPanicDiscardFontWithNoGc:
+ iGc->DiscardFont();
+ break;
+ case EADllPanicSetUnderlineStyleWithNoGc:
+ iGc->SetUnderlineStyle(EUnderlineOff);
+ break;
+ case EADllPanicSetStrikeThoughStyleWithNoGc:
+ iGc->SetStrikethroughStyle(EStrikethroughOff);
+ break;
+ case EADllPanicSetWordJustificationWithNoGc:
+ iGc->SetWordJustification(0,0);
+ break;
+ case EADllPanicSetCharJustificationWithNoGc:
+ iGc->SetCharJustification(0,0);
+ break;
+ case EADllPanicSetPenColorWithNoGc:
+ {
+ TRgb rgbs;
+ iGc->SetPenColor(rgbs);
+ }
+ break;
+ case EADllPanicSetPenStyleWithNoGc:
+ iGc->SetPenStyle(CGraphicsContext::ESolidPen);
+ break;
+ case EADllPanicSetPenSizeWithNoGc:
+ {
+ const TSize size;
+ iGc->SetPenSize(size);
+ }
+ break;
+ case EADllPanicSetBrushColorWithNoGc:
+ {
+ TRgb rgbs;
+ iGc->SetBrushColor(rgbs);
+ }
+ break;
+ case EADllPanicSetBrushStyleWithNoGc:
+ iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
+ break;
+ case EADllPanicSetBrushOriginWithNoGc:
+ {
+ TPoint point;
+ iGc->SetBrushOrigin(point);
+ }
+ break;
+ case EADllPanicUseBrushPatterWithNoGc:
+ {
+ CFbsBitmap* bitmap = new(ELeave) CFbsBitmap();
+ CleanupStack::PushL(bitmap);
+ User::LeaveIfError(bitmap->Create(TSize(16,16),EGray4));
+ iGc->UseBrushPattern(bitmap);
+ CleanupStack::PopAndDestroy(bitmap);
+ }
+ break;
+ case EADllPanicDiscardBrushPatternWithNoGc:
+ iGc->DiscardBrushPattern();
+ break;
+ case EADllPanicSetFadedWithNoGc:
+ iGc->SetFaded(EFalse);
+ break;
+ case EADllPanicSetFadingParametersWithNoGc:
+ iGc->SetFadingParameters(1,1);
+ break;
+ case EADllPanicDrawArcWithNoGc:
+ {
+ TRect rect;
+ iGc->DrawArc(rect,
+ TPoint(rect.Center().iX, rect.iTl.iY),
+ TPoint(rect.iBr.iX, rect.Center().iY));
+ }
+ break;
+ case EADllPanicDrawPieWithNoGc:
+ {
+ TRect rect;
+ iGc->DrawPie(rect, TPoint(rect.Center().iX, rect.iTl.iY), TPoint(rect.iBr.iX, rect.Center().iY));
+ }
+ break;
+ case EADllPanicDrawLineWithNoGc:
+ {
+ const TPoint point1;
+ const TPoint point2;
+ iGc->DrawLine(point1, point2);
+ }
+ break;
+ case EADllPanicDrawLineToWithNoGc:
+ {
+ const TPoint point;
+ iGc->DrawLineTo(point);
+ }
+ break;
+ case EADllPanicDrawLineByWithNoGc:
+ {
+ const TPoint point;
+ iGc->DrawLineBy(point);
+ }
+ break;
+ case EADllPanicDrawEllipseWithNoGc:
+ {
+ TRect rect(20,20,20,20);
+ iGc->DrawEllipse(rect);
+ }
+ break;
+ case EADllPanicDrawRoundedRecWithNoGc:
+ {
+ TRect rect;
+ iGc->DrawRoundRect(rect, TSize(rect.Width()/8, rect.Height()/8));
+ }
+ break;
+ case EADllPanicClearWithRectWithNoGc:
+ {
+ TRect rect(20,20,20,20);
+ iGc->Clear(rect);
+ }
+ break;
+ case EADllPanicClearWithNoGc:
+ iGc->Clear();
+ break;
+ case EADllPanicBitBltWithNoGc:
+ {
+ CFbsBitmap* bitmap = new(ELeave) CFbsBitmap();
+ CleanupStack::PushL(bitmap);
+ User::LeaveIfError(bitmap->Create(TSize(16,16),EGray4));
+ iGc->BitBlt(TPoint(0, 0), bitmap);
+ CleanupStack::PopAndDestroy(bitmap);
+ }
+ break;
+ case EADllPanicBitBltWithRectWithNoGc:
+ {
+ CFbsBitmap* bitmap = new(ELeave) CFbsBitmap();
+ TRect rect;
+ CleanupStack::PushL(bitmap);
+ User::LeaveIfError(bitmap->Create(TSize(16,16),EGray4));
+ iGc->BitBlt(TPoint(0, 0), bitmap, rect);
+ CleanupStack::PopAndDestroy(bitmap);
+ }
+ break;
+ case EADllPanicBitBltMaskedWithNoGc:
+ {
+ CFbsBitmap* bitmap = new(ELeave) CFbsBitmap();
+ TRect rect;
+ CleanupStack::PushL(bitmap);
+ User::LeaveIfError(bitmap->Create(TSize(16,16),EGray4));
+ iGc->BitBltMasked(TPoint(0, 0), bitmap, rect, bitmap, EFalse);
+ CleanupStack::PopAndDestroy(bitmap);
+ }
+ break;
+ case EADllPanicDrawBitmapMaskedFbsBitmapWithNoGc:
+ {
+ CFbsBitmap* bitmap = new(ELeave) CFbsBitmap();
+ TRect rect;
+ CleanupStack::PushL(bitmap);
+ User::LeaveIfError(bitmap->Create(TSize(16,16),EGray4));
+ iGc->DrawBitmapMasked(rect, bitmap, rect, bitmap, ETrue);
+ CleanupStack::PopAndDestroy(bitmap);
+ }
+ break;
+ case EADllPanicDrawBitmapMaskedWsBitmapWithNoGc:
+ {
+ CWsBitmap* bitmap = NULL;
+ TRect rect;
+ iGc->DrawBitmapMasked(rect, bitmap, rect, bitmap, ETrue);
+ }
+ break;
+ case EADllPanicDrawBitmapPointWithNoGc:
+ {
+ CWsBitmap* bitmap = NULL;
+ TRect rect;
+ iGc->DrawBitmap(rect.iTl, bitmap);
+ }
+ break;
+ case EADllPanicDrawBitmapWithNoGc:
+ {
+ CWsBitmap* bitmap = NULL;
+ TRect rect;
+ iGc->DrawBitmap(rect, bitmap);
+ }
+ break;
+ case EADllPanicDrawBitmapRectWithNoGc:
+ {
+ CWsBitmap* bitmap = NULL;
+ TRect rect;
+ iGc->DrawBitmap(rect, bitmap, TRect(0, 0, 16, 16));
+ }
+ break;
+ case EADllPanicDrawPolyLinePointsWithNoGc:
+ {
+ TRect rect;
+ CArrayFixFlat<TPoint>* polyPoints = new(ELeave) CArrayFixFlat<TPoint>(3); //CArrayFixFlat
+ CleanupStack::PushL(polyPoints);
+ polyPoints->AppendL(rect.iTl);
+ polyPoints->AppendL(rect.Center());
+ polyPoints->AppendL(TPoint(rect.iBr.iX, rect.iTl.iY));
+ iGc->DrawPolyLine(&polyPoints->At(0), 3);
+ CleanupStack::PopAndDestroy(polyPoints);
+ }
+ break;
+ case EADllPanicDrawPolyLineArrayWithNoGc:
+ {
+ TRect rect;
+ CArrayFixFlat<TPoint>* polyPoints = new(ELeave) CArrayFixFlat<TPoint>(3); //CArrayFixFlat
+ CleanupStack::PushL(polyPoints);
+ polyPoints->AppendL(rect.iTl);
+ polyPoints->AppendL(rect.Center());
+ polyPoints->AppendL(TPoint(rect.iBr.iX, rect.iTl.iY));
+ iGc->DrawPolyLine(polyPoints);
+ CleanupStack::PopAndDestroy(polyPoints);
+ }
+ break;
+ case EADllPanicMoveToWithNoGc:
+ {
+ TPoint point;
+ iGc->MoveTo(point);
+ }
+ break;
+ case EADllPanicMoveByWithNoGc:
+ {
+ TPoint point;
+ iGc->MoveBy(point);
+ }
+ break;
+ case EADllPanicPlotWithNoGc:
+ {
+ TPoint point;
+ iGc->Plot(point);
+ }
+ break;
+ case EADllPanicSetOriginWithNoGc:
+ {
+ TPoint point;
+ iGc->SetOrigin(point);
+ }
+ break;
+ case EADllPanicCopyRectWithNoGc:
+ {
+ TPoint point;
+ TRect rect;
+ iGc->CopyRect(point, rect);
+ }
+ break;
+ case EADllPanicResetWithNoGc:
+ iGc->Reset();
+ break;
+ case EADllPanicMapColorsWithNoGc:
+ {
+ TRgb rgbs[2];
+ TRect rect;
+ iGc->MapColors(rect, rgbs, 1, ETrue);
+ }
+ break;
+ case EADllPanicDrawTextWithRectWithNoFont:
+ iWindowFunctions->ActivateGc();
+ iGc->DrawText(_L("Panic"),TRect(20,20,20,20),0);
+ break;
+ case EADllPanicDrawTextVerticalWithNoFont:
+ iWindowFunctions->ActivateGc();
+ iGc->DrawTextVertical(_L("Panic"),TPoint(20,20), EFalse);
+ break;
+ case EADllPanicDrawTextVerticalWithRectWithNoFont:
+ iWindowFunctions->ActivateGc();
+ iGc->DrawTextVertical(_L("Panic"),TRect(20,20,20,20), 0, EFalse);
+ break;
+ case EADllPanicInvalidFocusScreenTooBig:
+ (static_cast<MAnimGeneralFunctionsWindowExtension*>(iFunctions->ExtendedInterface(MAnimGeneralFunctions::EWindowExtensionInterface)))->SetFocusScreen(3000);
+ break;
+ case EADllPanicInvalidFocusScreenNegative:
+ (static_cast<MAnimGeneralFunctionsWindowExtension*>(iFunctions->ExtendedInterface(MAnimGeneralFunctions::EWindowExtensionInterface)))->SetFocusScreen(-1);
+ break;
+ default:
+ iFunctions->Panic();
+ }
+ }
+
+void CPanicAnim::DoLeaveInActiveCallback()
+ {
+ iWindowFunctions->ActivateGc();
+ User::Leave(KErrUnknown);
+ }
+
+TInt CPanicAnim::LeaveInActiveCallback(TAny *aThis)
+ {
+ CPanicAnim* panicAnim=(CPanicAnim*)aThis;
+ panicAnim->DoLeaveInActiveCallback();
+ return(KErrNone);
+ }
+
+void CPanicAnim::StartSyncTest(MAnimGeneralFunctions::TAnimSync aSync)
+ {
+ iFunctions->SetSync(aSync);
+ iSyncMode=aSync;
+ iSyncState=ESyncStateStarting;
+ }
+
+void CPanicAnim::StartTimeChangeTest()
+ {
+ iFunctions->SetSync(MAnimGeneralFunctions::ESyncSecond);
+ iSyncMode=MAnimGeneralFunctions::ESyncSecond;
+ iSyncState=ESyncStateTimeChange1;
+ }
+
+TInt CPanicAnim::CommandReplyL(TInt aOpcode,TAny* aParams)
+ {
+ TAnimArgUnion pData;
+ pData.any=aParams;
+ switch(aOpcode)
+ {
+ case EADllPanicBadFont:
+ iFunctions->DuplicateFontL(123);
+ break;
+ case EADllPanicBadBitmap:
+ iFunctions->DuplicateBitmapL(123);
+ break;
+ case EADllPanicCallPanic:
+ iFunctions->Panic();
+ break;
+ case EADllReadRemoteDescriptor:
+ {
+ TInt ret=0;
+ const RMessagePtr2& message=*iFunctions->Message();
+ TInt bufLength = message.GetDesLength(KIpcSlot);
+ TUint16* heapCell=static_cast<TUint16*>(User::AllocL(bufLength*2));
+ TPtr buf(heapCell,bufLength*2,bufLength*2);
+ const TInt theError=message.Read(KIpcSlot,buf);
+ if(theError == KErrNone)
+ {
+ for (TInt index=0;index<bufLength;index++)
+ {
+ ret+=buf[index];
+ }
+ }
+ User::Free(heapCell);
+ return(ret);
+ }
+ case EADllTestWindowSize:
+ return(*pData.Size==iWindowFunctions->WindowSize());
+ case EADllSyncTests:
+ iStatusPtr=pData.SyncTests->status;
+ StartSyncTest(pData.SyncTests->syncMode);
+ break;
+ case EADllTimeChangedTest:
+ iStatusPtr=pData.TimeChangeTest->status;
+ iStatusPtr2=pData.TimeChangeTest->status2;
+ StartTimeChangeTest();
+ break;
+ case EADllTestSetVisible:
+ if (iWindowFunctions->IsHidden())
+ goto setVisFailed;
+ iWindowFunctions->SetVisible(EFalse);
+ if (!iWindowFunctions->IsHidden())
+ goto setVisFailed;
+ iWindowFunctions->SetVisible(ETrue);
+ if (iWindowFunctions->IsHidden())
+setVisFailed: return(EFalse);
+ return(ETrue);
+ case EADllPanicSetVisWithGcActiveReply:
+ iWindowFunctions->ActivateGc();
+ iWindowFunctions->SetVisible(EFalse);
+ iWindowFunctions->SetVisible(ETrue);
+ break;
+ case EADllPanicSetClippingRegionWithNoGc:
+ {
+ // currently this test fails because when deactivated iWin is also NULL and is deferenced in function
+ RRegion region;
+ TBool err = iGc->SetClippingRegion(region);
+ }
+ break;
+ case EADllPanicDrawPolygonPointsWithNoGc:
+ {
+ TRect rect(20,20,20,20);
+ CArrayFixFlat<TPoint>* polyPoints = new(ELeave) CArrayFixFlat<TPoint>(3); //CArrayFixFlat
+ CleanupStack::PushL(polyPoints);
+ polyPoints->AppendL(rect.iTl);
+ polyPoints->AppendL(rect.Center());
+ polyPoints->AppendL(TPoint(rect.iBr.iX, rect.iTl.iY));
+ iGc->DrawPolygon(polyPoints, CGraphicsContext::EWinding);
+ CleanupStack::PopAndDestroy(polyPoints);
+ }
+ break;
+ case EADllPanicDrawPolygonArrayWithNoGc:
+ {
+ TRect rect(20,20,20,20);
+ CArrayFixFlat<TPoint>* polyPoints = new(ELeave) CArrayFixFlat<TPoint>(3); //CArrayFixFlat
+ CleanupStack::PushL(polyPoints);
+ polyPoints->AppendL(rect.iTl);
+ polyPoints->AppendL(rect.Center());
+ polyPoints->AppendL(TPoint(rect.iBr.iX, rect.iTl.iY));
+ iGc->DrawPolygon(&polyPoints->At(0), 3, CGraphicsContext::EAlternate);
+ CleanupStack::PopAndDestroy(polyPoints);
+ }
+ break;
+ case EADllPanicAlphaBlendingBitmapsFbsBitmapWithNoGc:
+ {
+ TRect rect(20,20,20,20);
+ CFbsBitmap* bitmap = new(ELeave) CFbsBitmap();
+ CleanupStack::PushL(bitmap);
+ User::LeaveIfError(bitmap->Create(TSize(16,16),EGray4));
+ iGc->AlphaBlendBitmaps(TPoint(0, 0), bitmap, rect, bitmap, TPoint(0,0));
+ CleanupStack::PopAndDestroy(bitmap);
+ }
+ break;
+ case EADllPanicDevice:
+ {
+ CGraphicsDevice *device = iGc->Device();
+ }
+ break;
+ default:
+ iFunctions->Panic();
+ }
+ return(KErrNone);
+ }
+
+void CPanicAnim::FocusChanged(TBool )
+ {
+ }
+
+TBool CPanicAnim::OfferRawEvent(const TRawEvent &/*aRawEvent*/)
+ {
+ return EFalse;
+ }
+
+
+// CPanicAnim2 simply panics in the construct //
+void CPanicAnim2::ConstructL(TAny *, TBool )
+ {
+ iFunctions->Panic();
+ }
+
+void CPanicAnim2::Animate(TDateTime *)
+ {}
+
+void CPanicAnim2::Redraw()
+ {}
+
+void CPanicAnim2::Command(TInt , TAny *)
+ {}
+
+TInt CPanicAnim2::CommandReplyL(TInt , TAny *)
+ {return(0);}
+
+void CPanicAnim2::FocusChanged(TBool )
+ {}
+
+TBool CPanicAnim2::OfferRawEvent(const TRawEvent &/*aRawEvent*/)
+ {
+ return EFalse;
+ }
+
+
+// CAutoAnim3 test drawing/redrawing //
+void CAutoAnim3::ConstructL(TAny *aParam, TBool )
+ {
+ iRect=*((TRect *)aParam);
+ iWindowFunctions->SetRect(iRect);
+ iMode=0;
+ iWindowFunctions->Invalidate(iRect);
+ iFunctions->SetSync(MAnimGeneralFunctions::ESyncSecond);
+ }
+
+void CAutoAnim3::Animate(TDateTime *)
+ {
+ iWindowFunctions->ActivateGc();
+ if (iMode==1)
+ {
+ Draw(iRect);
+ if (iRect.Width()>20 && iRect.Height()>20)
+ iRect.Shrink(TSize(20,20));
+ else
+ iRect=iBaseRect;
+ Draw(iRect);
+ }
+ else if (iMode==2)
+ {
+ Draw(iRect);
+ iFunctions->Client().RequestComplete(iStatusPtr,KErrNone);
+ iFunctions->SetSync(MAnimGeneralFunctions::ESyncNone);
+ }
+ else if (iMode==3)
+ {
+ // flip between two sizes
+ if (iRect.iTl.iX == 10)
+ iRect.SetRect(40,40,80,80);
+ else
+ iRect.SetRect(10,10,110,110);
+ Draw(iRect);
+ }
+ }
+
+void CAutoAnim3::Draw(const TRect &aRect)
+ {
+ switch(iMode)
+ {
+ case 0:
+ iGc->SetDrawMode(CGraphicsContext::EDrawModeXOR);
+ iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
+ iGc->SetBrushColor(TRgb::Gray256(85));
+ iGc->SetPenColor(TRgb::Gray256(170));
+ iGc->DrawEllipse(aRect);
+ iGc->SetBrushStyle(CGraphicsContext::ENullBrush);
+ break;
+ case 1: // Shrinking box
+ iGc->SetDrawMode(CGraphicsContext::EDrawModeXOR);
+ iGc->SetPenColor(TRgb::Gray256(255));
+ iGc->DrawRect(aRect);
+ break;
+ case 2:
+ case 3:
+ iGc->SetDrawMode(CGraphicsContext::EDrawModePEN);
+ iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
+ iGc->SetBrushColor(TRgb::Gray256(85));
+ iGc->SetPenColor(TRgb::Gray256(170));
+ iGc->DrawEllipse(aRect);
+ iGc->SetBrushStyle(CGraphicsContext::ENullBrush);
+ break;
+ default:
+ break;
+ }
+ }
+
+void CAutoAnim3::Redraw()
+ {
+ Draw(iRect);
+ }
+
+void CAutoAnim3::Command(TInt aOpcode,TAny* aParam)
+ {
+ TAnimArgUnion pData;
+ pData.any=aParam;
+ switch(aOpcode)
+ {
+ case EADllSetRect:
+ iWindowFunctions->ActivateGc();
+ Draw(iRect);
+ iRect=*pData.Rect;
+ iWindowFunctions->SetRect(iRect);
+ Draw(iRect);
+ { //Do more extensive testing
+ TWindowInfo data;
+ iWindowFunctions->Parameters(data);
+ }
+ break;
+ case EADllStartAnimate:
+ iWindowFunctions->ActivateGc();
+ Draw(iRect);
+ iMode=1;
+ iBaseRect=*pData.Rect;
+ iRect=iBaseRect;
+ iWindowFunctions->SetRect(iRect);
+ iFunctions->SetSync(MAnimGeneralFunctions::ESyncFlash);
+ Draw(iRect);
+ break;
+ case EADllCancelAnimate:
+ iFunctions->SetSync(MAnimGeneralFunctions::ESyncNone);
+ iWindowFunctions->ActivateGc();
+ Draw(iRect);
+ iMode=-1;
+ break;
+ case EADllSetVisible:
+ iWindowFunctions->SetVisible(*pData.Bool);
+ break;
+ case EADllSetShadowDrawMode:
+ iMode=2;
+ break;
+ case EADllDrawTestScreen:
+ DrawTestScreenL(pData.DrawTestScreen); //Should move to CommandReplyL as it leaves
+ break;
+ case EADllSetMode:
+ iMode = *pData.Int;
+ break;
+ }
+ }
+
+TInt CAutoAnim3::CommandReplyL(TInt aOpcode, TAny *aParam)
+ {
+ TAnimArgUnion pData;
+ pData.any = aParam;
+ TInt ret=0;
+ switch(aOpcode)
+ {
+ case EADllShadowAnimTest:
+ iFunctions->SetSync(MAnimGeneralFunctions::ESyncFlash);
+ iStatusPtr=((TShadowDrawTest *)aParam)->status;
+ break;
+ case EADllParameterRectValueTest:
+ {
+ TWindowInfo wininf;
+ iWindowFunctions->Parameters(wininf);
+ TRect comp = *(pData.Rect);
+ ret=(comp==wininf.iScreenPos);
+ }
+ break;
+ case EADllDoSetSync:
+ iFunctions->SetSync(static_cast<MAnimGeneralFunctions::TAnimSync>(*pData.Int));
+ break;
+ case EADllSetInterval:
+ iFunctions->SetInterval(*pData.Int);
+ break;
+ }
+ return(ret);
+ }
+
+void CAutoAnim3::FocusChanged(TBool )
+ {}
+
+//void CAutoAnim3::DrawTestScreen(TDrawTestScreen *aParams)
+//Function now at bottom of file
+
+TBool CAutoAnim3::OfferRawEvent(const TRawEvent &/*aRawEvent*/)
+ {
+ return EFalse;
+ }
+
+
+// CAutoAnimScrBack test drawing/redrawing //
+void CAutoAnimScrBack::ConstructL(TAny *aParam, TBool )
+ {
+ iRect=*((TRect *)aParam);
+ iWindowFunctions->SetRect(iRect);
+ iMode=1;
+ iFunctions->SetSync(MAnimGeneralFunctions::ESyncFlash);
+ }
+
+void CAutoAnimScrBack::Animate(TDateTime *)
+ {
+ iWindowFunctions->ActivateGc();
+ Draw();
+ iFunctions->SetSync(MAnimGeneralFunctions::ESyncNone);
+ }
+
+void CAutoAnimScrBack::Draw()
+ {
+ iGc->SetDrawMode(CGraphicsContext::EDrawModePEN);
+ if (iMode==2)
+ iGc->SetPenSize(TSize(3,3));
+ iGc->SetPenColor(TRgb::Gray4(iMode==1 ? 2 : 3));
+ iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
+ iGc->SetBrushColor(TRgb::Gray4(iMode==1 ? 1 : 0));
+ iGc->DrawRect(iRect);
+ }
+
+void CAutoAnimScrBack::Redraw()
+ {
+ Draw();
+ }
+
+void CAutoAnimScrBack::Command(TInt aOpcode,TAny* aParam)
+ {
+ TAnimArgUnion pData;
+ pData.any=aParam;
+ switch(aOpcode)
+ {
+ case EADllDrawOtherRect:
+ {
+ TRect oldRect(iRect);
+ if (iMode==2)
+ oldRect.Grow(1,1); // To allow for 3x3 pen size
+ iMode=2;
+ iRect=*pData.Rect;
+ TRect fullRect(iRect);
+ fullRect.Grow(1,1); // To allow for 3x3 pen size
+ iWindowFunctions->Invalidate(oldRect);
+ iWindowFunctions->SetRect(fullRect);
+ iWindowFunctions->Invalidate(fullRect);
+ }
+// iFunctions->ActivateGc();
+// Draw();
+ break;
+ }
+ }
+
+TInt CAutoAnimScrBack::CommandReplyL(TInt aOpcode, TAny *)
+ {
+ switch(aOpcode)
+ {
+ case EADllIsHidden:
+ return iWindowFunctions->IsHidden();
+ }
+ return(0);
+ }
+
+void CAutoAnimScrBack::FocusChanged(TBool )
+ {}
+
+TBool CAutoAnimScrBack::OfferRawEvent(const TRawEvent &/*aRawEvent*/)
+ {
+ return EFalse;
+ }
+
+
+// CTestSpriteAnim test sprite access //
+void CTestSpriteAnim::ConstructL(TAny* /*aParam*/)
+ {
+ iSpriteFunctions->SizeChangedL();
+ iSpriteFunctions->Activate(ETrue);
+ }
+
+void CTestSpriteAnim::Animate(TDateTime*)
+ {
+ }
+
+void CTestSpriteAnim::Command(TInt aOpcode,TAny* aParam)
+ {
+ TAnimArgUnion pData;
+ pData.any=aParam;
+ switch (aOpcode)
+ {
+ case EADllSizeChanged:
+ iSpriteFunctions->Activate(EFalse);
+ iSpriteFunctions->SizeChangedL(); //Should move to CommandReplyL as it leaves
+ case EADllActivate:
+ iSpriteFunctions->Activate(ETrue);
+ break;
+ case EADllDeactivate:
+ iSpriteFunctions->Activate(EFalse);
+ break;
+ case EADllSetPos:
+ iSpriteFunctions->SetPosition(*pData.Point);
+ break;
+ case EADllDraw1:
+ case EADllDraw2:
+ case EADllDraw3:
+ DrawMemberL(aOpcode-EADllDraw1); //Should move to CommandReplyL as it leaves
+ break;
+ case EADllIncDraw:
+ DrawMemberL(); //Should move to CommandReplyL as it leaves
+ break;
+ default:;
+ }
+ }
+
+TInt CTestSpriteAnim::CommandReplyL(TInt aOpcode,TAny* aParam)
+ {
+ TAnimArgUnion pData;
+ pData.any=aParam;
+ switch (aOpcode)
+ {
+ case EADllCheckMember:
+ return CheckMember(*pData.SpriteMemberInfo);
+ default:;
+ }
+ return(KErrNone);
+ }
+
+TBool CTestSpriteAnim::OfferRawEvent(const TRawEvent& /*aRawEvent*/)
+ {
+ return EFalse;
+ }
+
+TBool CTestSpriteAnim::CheckMember(const TSpriteMemberInfo& aMemInfo)
+ {
+ TSpriteMember spriteMember=*iSpriteFunctions->GetSpriteMember(aMemInfo.iMember);
+ if (spriteMember.iBitmap->Handle()!=aMemInfo.iBitmapHandle)
+ return EFalse;
+ if (aMemInfo.iMaskBitmapHandle==0)
+ {
+ if (spriteMember.iMaskBitmap!=NULL)
+ return EFalse;
+ }
+ else
+ {
+ if (spriteMember.iMaskBitmap->Handle()!=aMemInfo.iMaskBitmapHandle)
+ return EFalse;
+ }
+ if (spriteMember.iInvertMask!=aMemInfo.iInvertMask)
+ return EFalse;
+ if (spriteMember.iDrawMode!=aMemInfo.iDrawMode)
+ return EFalse;
+ if (spriteMember.iOffset!=aMemInfo.iOffset)
+ return EFalse;
+ if (spriteMember.iInterval!=aMemInfo.iInterval)
+ return EFalse;
+ return ETrue;
+ }
+
+void CTestSpriteAnim::DrawMemberL(TInt aMember)
+ {
+ CFbsBitmap *bitmap=iSpriteFunctions->GetSpriteMember(aMember)->iBitmap;
+ CFbsBitmapDevice *device=CFbsBitmapDevice::NewL(bitmap);
+ CleanupStack::PushL(device);
+ CFbsBitGc *gc;
+ User::LeaveIfError(device->CreateContext(gc));
+ CleanupStack::PushL(gc);
+ //gc->SetBrushColor(TRgb::Gray4((aMember+1)%3));
+ gc->SetBrushStyle(CGraphicsContext::ESolidBrush);
+ gc->SetPenSize(TSize());
+ TSize size=bitmap->SizeInPixels();
+ size.SetSize(size.iWidth/2,size.iHeight/2);
+ TPoint point=size.AsPoint();
+ gc->SetBrushColor(TRgb::Gray4(0));
+ //TRect rect=bitmap->SizeInPixels();
+ gc->DrawRect(TRect(TPoint(),size));
+ gc->SetBrushColor(TRgb::Gray4(1));
+ gc->DrawRect(TRect(TPoint(point.iX,0),size));
+ gc->SetBrushColor(TRgb::Gray4(2));
+ gc->DrawRect(TRect(TPoint(0,point.iY),size));
+ gc->SetBrushColor(TRgb::Gray4(3));
+ gc->DrawRect(TRect(point,size));
+ iSpriteFunctions->UpdateMember(aMember,TRect(bitmap->SizeInPixels()),ETrue);
+ CleanupStack::PopAndDestroy(2);
+ }
+
+void CTestSpriteAnim::DrawMemberL()
+ {
+ CFbsBitmap *bitmap=iSpriteFunctions->GetSpriteMember(0)->iBitmap;
+ CFbsBitmapDevice *device=CFbsBitmapDevice::NewL(bitmap);
+ CleanupStack::PushL(device);
+ CFbsBitGc *gc;
+ User::LeaveIfError(device->CreateContext(gc));
+ CleanupStack::PushL(gc);
+ gc->SetPenSize(TSize(3,3));
+ gc->SetPenColor(TRgb::Gray4(1));
+ TPoint corner=bitmap->SizeInPixels().AsPoint();
+ gc->DrawLine(TPoint(),corner);
+ gc->DrawLine(TPoint(0,corner.iY),TPoint(corner.iX,0));
+ iSpriteFunctions->UpdateMember(0,TRect(bitmap->SizeInPixels()),EFalse);
+ CleanupStack::PopAndDestroy(2);
+ }
+
+
+// CTestFreeTimerAnim test drawing off own timer //
+CTestFreeTimerAnim::~CTestFreeTimerAnim()
+ {
+ iTimer->Cancel();
+ delete iTimer;
+ }
+
+void CTestFreeTimerAnim::ConstructL(TAny* /*aParam*/, TBool )
+ {
+ User::LeaveIfNull(iFunctions);
+ User::LeaveIfNull(iWindowFunctions);
+
+ //Configure free-timer anim (these values should be the default ones)
+ iFunctions->SetSync( MAnimGeneralFunctions::ESyncNone );
+ iFunctions->SetInterval(0);
+
+ iFrameTime = 100000; //default frametime 0.1s
+ iTimer = CAnimTimer::NewL(*this);
+ iRect = iWindowFunctions->WindowSize();
+ }
+
+#define MAX(a,b) (((a)>(b))?(a):(b))
+
+void CTestFreeTimerAnim::Animate(TDateTime*)
+ {
+ TInt max = MAX(iRect.Width(), iRect.Height());
+ if(max <= 0)
+ {
+ iRect = iWindowFunctions->WindowSize();
+ }
+ else
+ {
+ iRect.Shrink(1,1);
+ }
+
+ //change colour
+ switch(iColour.Value())
+ {
+ case 0x000000: //black
+ case 0xffffff: //white
+ iColour = KRgbRed;
+ break;
+ case 0x0000ff: //red
+ iColour = KRgbGreen;
+ break;
+ case 0x00ff00: //green
+ iColour = KRgbBlue;
+ break;
+ case 0xff0000: //blue
+ iColour = KRgbBlack;
+ break;
+ }
+ }
+
+void CTestFreeTimerAnim::Redraw()
+ {
+ //draw something in the animated colour
+ iGc->SetBrushColor(iColour);
+ iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
+ iGc->SetPenColor(KRgbBlack);
+ iGc->DrawRect(iRect);
+ }
+
+void CTestFreeTimerAnim::Command(TInt aOpcode, TAny* aArgs)
+ {
+ switch(aOpcode)
+ {
+ case EStartAnimation:
+ DisplayNextFrameL();
+ break;
+ case EStopAnimation:
+ iTimer->Cancel();
+ break;
+ case ESetFrameTime:
+ ASSERT(aArgs);
+ iFrameTime = *reinterpret_cast<TInt*>(aArgs);
+ break;
+ default:
+ ASSERT(0);
+ }
+ }
+
+TInt CTestFreeTimerAnim::CommandReplyL(TInt aOpcode, TAny* aArgs)
+ {
+ switch(aOpcode)
+ {
+ case EStartAnimation:
+ DisplayNextFrameL();
+ break;
+ case EStopAnimation:
+ iTimer->Cancel();
+ break;
+ case ESetFrameTime:
+ ASSERT(aArgs);
+ iFrameTime = *reinterpret_cast<TInt*>(aArgs);
+ break;
+ default:
+ ASSERT(0);
+ }
+ return(KErrNone);
+ }
+
+void CTestFreeTimerAnim::FocusChanged(TBool /*aState*/)
+ {
+ }
+
+TBool CTestFreeTimerAnim::OfferRawEvent(const TRawEvent& /*aRawEvent*/)
+ {
+ return EFalse;
+ }
+
+
+void CTestFreeTimerAnim::DisplayNextFrameL()
+ {
+ //Reschedule timer callback
+ iTimer->Cancel();
+ iTimer->After(iFrameTime);
+
+ Animate(NULL); //wserv don't animate free-timer animations
+
+ //Schedule wserv redraw
+ MAnimFreeTimerWindowFunctions* windowFunctions = WindowFunctions();
+ ASSERT(windowFunctions);
+ windowFunctions->ActivateGc();
+ windowFunctions->DeactivateGc();
+ windowFunctions->Update();
+ }
+
+//
+// CAnimTimer class
+//
+
+/**
+ Constructs a new bitmap animation timer object,and adds the specified active object to the current active scheduler.
+
+@param aObserver a pointer to MAnimTimerObserver
+*/
+CAnimTimer::CAnimTimer(MAnimTimerObserver& aObserver)
+ :CTimer(EPriorityStandard),
+ iAnim(aObserver)
+ {
+ CActiveScheduler::Add(this);
+ }
+
+/**
+ Frees resources owned by the object prior to deletion.
+*/
+CAnimTimer::~CAnimTimer()
+ {
+ }
+
+/**
+ Creates a new bitmap animation timer object.
+
+@param aObserver A pointer to the MAnimTimerObserver
+@return A pointer to the new bitmap animation timer object.
+*/
+CAnimTimer* CAnimTimer::NewL(MAnimTimerObserver& aObserver)
+ {
+ CAnimTimer* timer=new(ELeave) CAnimTimer(aObserver);
+ CleanupStack::PushL(timer);
+ timer->ConstructL();
+ CleanupStack::Pop();
+ return timer;
+ }
+
+/**
+ Completes construction of the bitmap animation timer object and
+ constructs a new asynchronous timer.
+*/
+void CAnimTimer::ConstructL()
+ {
+ CTimer::ConstructL();
+ }
+
+/**
+ Handles an active object's request completion event.
+ Invokes the function to draw the next frame
+*/
+void CAnimTimer::RunL()
+ {
+ iAnim.DisplayNextFrameL();
+ }
+
+// CEventTestAnimBase base class for event test anims //
+CEventTestAnimBase::~CEventTestAnimBase()
+ {
+ iFunctions->GetRawEvents(EFalse);
+ }
+
+void CEventTestAnimBase::ConstructL(TAny* /*aParam*/, TBool )
+ {
+ iExpectedEvents.SetLengthL(EEventBufferSize);
+ }
+
+void CEventTestAnimBase::Animate(TDateTime*)
+ {
+ }
+
+void CEventTestAnimBase::Redraw()
+ {
+ }
+
+void CEventTestAnimBase::Command(TInt /*aOpcode*/, TAny* /*aParam*/)
+ {
+ /*switch (aOpcode)
+ {
+ default:;
+ }*/
+ }
+
+void CEventTestAnimBase::FocusChanged(TBool /*aState*/)
+ {
+ }
+
+// Base class common client server interface
+TInt CEventTestAnimBase::CommandReplyL(TInt aOpcode,TAny* aParam)
+ {
+ TAnimArgUnion pData;
+ pData.any=aParam;
+ switch (aOpcode)
+ {
+ case EADllAddExpectedEvent:
+ return AddExpectedEvent(pData.AnimRawEvent);
+ case EADllNumberOfEventsReceived:
+ return iEventCount;
+ case EADllErrorCode:
+ return iError;
+ case EADllReset:
+ iExpectedEvents.Reset();
+ iError = 0;
+ iEventCount = 0;
+ return KErrNone;
+ default:;
+ }
+ return(KErrNone);
+ }
+
+TBool CEventTestAnimBase::HandleRecursiveEvent(const TRawEvent& aRawEvent)
+ {
+ if (aRawEvent.ScanCode() == 60)
+ {
+ TRawEvent rawEvent;
+ rawEvent.Set(TRawEvent::EKeyUp, 34);
+ iFunctions->PostRawEvent(rawEvent);
+ rawEvent.Set(TRawEvent::EKeyUp, 35);
+ iFunctions->PostRawEvent(rawEvent);
+ return ETrue;
+ }
+ return EFalse;
+ }
+
+TBool CEventTestAnimBase::OfferRawEvent(const TRawEvent& aRawEvent)
+ {
+ // Do not consume the following types of events
+ if (IsIgnorableEvent(aRawEvent))
+ {
+ return EFalse;
+ }
+
+ // Increment event count if not in an error state
+ if (!Error())
+ {
+ iEventCount++;
+ }
+
+ // For anim which generates recursive events
+ if (aRawEvent.Type() == TRawEvent::EKeyDown && aRawEvent.ScanCode() == 60)
+ {
+ return HandleRecursiveEvent(aRawEvent);
+ }
+
+ TAnimRawEvent event;
+
+ if (!GetNextExpectedEvent(event))
+ {
+ Fail();
+ return EFalse;
+ }
+
+ // Fail if wrong event type
+ if (!CompareEvents(event.iRawEvent, aRawEvent))
+ {
+ Fail();
+ }
+
+ return event.iEat;
+ }
+
+TBool CEventTestAnimBase::GetNextExpectedEvent(TAnimRawEvent& aRawEvent)
+ {
+ // Get next expected event
+ if (iExpectedEvents.Remove(&aRawEvent)<1)
+ {
+ Fail();
+ return EFalse;
+ }
+ else
+ {
+ return ETrue;
+ }
+ }
+
+TBool CEventTestAnimBase::IsIgnorableEvent(const TRawEvent& aRawEvent) const
+ {
+ TRawEvent::TType aType=aRawEvent.Type();
+ TBool result = (aType==TRawEvent::EActive || aType==TRawEvent::EInactive || aType==TRawEvent::ERedraw
+ || (iExpectedEvents.Count()==0 && aType==TRawEvent::EPointerMove));
+
+ return result;
+ }
+
+TBool CEventTestAnimBase::CompareEvents(const TRawEvent& aExpectedEvent, const TRawEvent& aActualEvent) const
+ {
+ TRawEvent::TType eType=aExpectedEvent.Type();
+ TRawEvent::TType aType=aActualEvent.Type();
+ if (eType!=aType)
+ {
+ return EFalse;
+ }
+ else
+ {
+ switch (aType)
+ {
+ case TRawEvent::EUpdateModifiers:
+ {
+ TInt eMod=aExpectedEvent.Modifiers(),aMod=aActualEvent.Modifiers();
+ if (eMod!=aMod)
+ {
+ return EFalse;
+ }
+ break;
+ }
+ case TRawEvent::EKeyDown:
+ case TRawEvent::EKeyUp:
+ {
+ TInt eScan=aExpectedEvent.ScanCode(),aScan=aActualEvent.ScanCode();
+ if (eScan!=aScan)
+ {
+ return EFalse;
+ }
+ break;
+ }
+ case TRawEvent::EPointerMove:
+ case TRawEvent::EPointerSwitchOn:
+ case TRawEvent::EButton1Down:
+ case TRawEvent::EButton1Up:
+ case TRawEvent::EButton2Down:
+ case TRawEvent::EButton2Up:
+ case TRawEvent::EButton3Down:
+ case TRawEvent::EButton3Up:
+ {
+ TPoint ePoint=aExpectedEvent.Pos(),aPoint=aActualEvent.Pos();
+ if (ePoint!=aPoint)
+ {
+ return EFalse;
+ }
+ break;
+ }
+ default:;
+ }
+ }
+ return ETrue;
+ }
+
+void CEventTestAnimBase::Fail()
+ {
+ if (iError==0)
+ {
+ iError=iEventCount;
+ }
+ }
+
+inline TInt CEventTestAnimBase::Error() const
+ {
+ return iError;
+ }
+
+inline TInt CEventTestAnimBase::EventCount() const
+ {
+ return iEventCount;
+ }
+
+inline void CEventTestAnimBase::ResetEventCount()
+ {
+ iEventCount = 0;
+ }
+
+inline TInt CEventTestAnimBase::TotalExpectedEvents() const
+ {
+ return iExpectedEvents.Count();
+ }
+
+inline TInt CEventTestAnimBase::AddEvent(const TAnimRawEvent* aEvent)
+ {
+ return iExpectedEvents.Add(aEvent);
+ }
+
+// CEventTestAnim test drawing off own timer //
+CEventTestAnim::~CEventTestAnim()
+ {
+ UnloadDeviceDriver();
+ }
+
+void CEventTestAnim::ConstructL(TAny* aParam, TBool aBool)
+ {
+ CEventTestAnimBase::ConstructL(aParam, aBool);
+ iFunctions->GetRawEvents(ETrue);
+ iDevDriverLoaded=EFalse;
+ }
+
+TInt CEventTestAnim::UnloadDeviceDriver()
+ {
+ TInt err=KErrNone;
+ iLdd.Close();
+ if (iDevDriverLoaded)
+ {
+ err=User::FreeLogicalDevice(REventDD::BinaryName());
+ if (err==KErrNone)
+ iDevDriverLoaded=EFalse;
+ }
+ return err;
+ }
+
+TInt CEventTestAnim::AddExpectedEvent(const TAnimRawEvent* aEvent)
+ {
+ return (AddEvent(aEvent) ? KErrNone : KErrOverflow);
+ }
+
+TInt CEventTestAnim::CommandReplyL(TInt aOpcode,TAny* aParam)
+ {
+ switch (aOpcode)
+ {
+ case EADllNoEventsAndReset:
+ {
+ TInt events=EventCount();
+ ResetEventCount();
+ return events;
+ }
+ case EADllLoadDeviceDriver:
+ {
+ TInt err=User::LoadLogicalDevice(REventDD::BinaryName());
+ if (err==KErrNone || err==KErrAlreadyExists)
+ {
+ TInt err2=iLdd.Open();
+ if (err==KErrNone)
+ {
+ if (err2==KErrNone)
+ iDevDriverLoaded=ETrue;
+ else //Only unload if we loaded it
+ User::FreeLogicalDevice(REventDD::BinaryName());
+ }
+ err=err2;
+ }
+ return err;
+ }
+ case EADllUnloadDeviceDriver:
+ return UnloadDeviceDriver();
+ case EADllSendEvent:
+ {
+ TAnimRawEvent event;
+ TInt events=*static_cast<TInt*>(aParam);
+ TInt err=KErrNone;
+ TInt ii;
+ for (ii=events;ii>0;--ii)
+ {
+ event.iRawEvent.Set(ii/2==0 ? TRawEvent::ECaseOpen : TRawEvent::ECaseClose);
+ //TInt err=UserSvr::AddEvent(event.iRawEvent);
+ //Need to do the above line here, but don't have enough capability
+ //so call a device driver to do it instead
+ err=iLdd.SendEvent(event.iRawEvent);
+ if (err!=KErrNone)
+ return err;
+ event.iEat=ETrue;
+ AddExpectedEvent(&event);
+ }
+ return KErrNone;
+ }
+ default:;
+ return CEventTestAnimBase::CommandReplyL(aOpcode, aParam);
+ }
+ }
+
+void CEventTestAnim::Command(TInt aOpcode,TAny* /*aParam*/)
+ {
+ switch (aOpcode)
+ {
+ case EADllAfterEvent:
+ if (TotalExpectedEvents()>0)
+ Fail();
+ break;
+ default:;
+ }
+ }
+
+// CEventPostingAnim test posting of anim events //
+CEventPostingAnim::~CEventPostingAnim()
+ {
+ }
+
+void CEventPostingAnim::ConstructL(TAny* aParam, TBool aBool)
+ {
+ CEventTestAnimBase::ConstructL(aParam, aBool);
+ iFunctions->GetRawEvents(ETrue);
+ }
+
+TInt CEventPostingAnim::AddExpectedEvent(const TAnimRawEvent* aEvent)
+ {
+ return (AddEvent(aEvent) ? KErrNone : KErrOverflow);
+ }
+
+TBool CEventPostingAnim::OfferRawEvent(const TRawEvent &aRawEvent)
+ {
+ // Call PostRawEvent or PostKeyEvent according to type of the event
+ TBool ret = CEventTestAnimBase::OfferRawEvent(aRawEvent);
+ if (ret)
+ {
+ if (aRawEvent.Type() == TRawEvent::EKeyDown && aRawEvent.ScanCode() == 45)
+ {
+ TKeyEvent event;
+ event.iCode='J';
+ event.iScanCode=0;
+ event.iModifiers=0;
+
+ // This is to check the normal PostKeyEvent API
+ iFunctions->PostKeyEvent(event);
+
+ // This is to check the newly added API
+ iFunctions->EventExtension()->PostKeyEvent(event, 2);
+ }
+ else
+ {
+ iFunctions->PostRawEvent(aRawEvent);
+ }
+ }
+ return ret;
+ }
+
+// CTimerTestAnim check that timer events stop //
+CTimerTestAnim::~CTimerTestAnim()
+ {
+ }
+
+void CTimerTestAnim::ConstructL(TAny* /*aParam*/, TBool )
+ {
+ iWindowFunctions->SetRect(TRect(0,0,1,1));
+ iFunctions->SetSync(MAnimGeneralFunctions::ESyncSecond);
+ iExpectingTicks=ETrue;
+ iFail=EFalse;
+ }
+
+void CTimerTestAnim::Animate(TDateTime*)
+ {
+ ++iTimerCount;
+ if (!iExpectingTicks)
+ iFail=iTimerCount;
+ }
+
+void CTimerTestAnim::Redraw()
+ {
+ }
+
+void CTimerTestAnim::Command(TInt aOpcode, TAny* /*aParam*/)
+ {
+ switch (aOpcode)
+ {
+ case EADllResetCount:
+ iTimerCount=0;
+ break;
+ case EADllNoTimer:
+ iExpectingTicks=EFalse;
+ iFunctions->SetSync(MAnimGeneralFunctions::ESyncNone);
+ break;
+ case EADllTimerStarted:
+ iExpectingTicks=ETrue;
+ iFunctions->SetSync(MAnimGeneralFunctions::ESyncSecond);
+ break;
+ default:;
+ }
+ }
+
+TInt CTimerTestAnim::CommandReplyL(TInt aOpcode, TAny* /*aParam*/)
+ {
+ switch (aOpcode)
+ {
+ case EADllCurrentCount:
+ return iTimerCount;
+ case EADllFailed:
+ return iFail;
+ default:;
+ }
+ return(KErrNone);
+ }
+
+void CTimerTestAnim::FocusChanged(TBool /*aState*/)
+ {
+ }
+
+TBool CTimerTestAnim::OfferRawEvent(const TRawEvent& /*aRawEvent*/)
+ {
+ return EFalse;
+ }
+
+
+// CWinFunctionTestAnim test drawing off own timer //
+CWinFunctionTestAnim::~CWinFunctionTestAnim()
+ {}
+
+void CWinFunctionTestAnim::ConstructL(TAny* /*aParam*/,TBool)
+ {
+ iWinFunctions=static_cast<MAnimGeneralFunctionsWindowExtension*>
+ (iFunctions->ExtendedInterface(MAnimGeneralFunctions::EWindowExtensionInterface));
+ }
+
+void CWinFunctionTestAnim::Animate(TDateTime*)
+ {}
+
+void CWinFunctionTestAnim::Redraw()
+ {}
+
+void CWinFunctionTestAnim::Command(TInt /*aOpcode*/,TAny* /*aParam*/)
+ {
+ /*switch (aOpcode)
+ {
+ default:;
+ }*/
+ }
+
+TInt CWinFunctionTestAnim::CommandReplyL(TInt aOpcode,TAny* aParam)
+ {
+ TAnimArgUnion pData;
+ pData.any=aParam;
+ switch (aOpcode)
+ {
+ case EADllScreen:
+ return iWinFunctions->Screens();
+ case EADllFocusScreen:
+ return iWinFunctions->FocusScreens();
+ case EADllWindowGroups:
+ return iWinFunctions->WindowGroups(*pData.Int);
+ case EADllWindowGroupInfo:
+ {
+ const TWindowGroupInfoParms& params=*pData.WindowGroupInfoParms;
+ TPckgBuf<MAnimGeneralFunctionsWindowExtension::TWindowGroupInfo> info;
+ TBool ret=iWinFunctions->WindowGroupInfo(info(),params.iScreen,params.iOrdinalPosition);
+ /*const TInt theError=*/(*iFunctions->Message()).Write(KIpcSlot,info);
+ return ret;
+ }
+ case EADllWindowGroupName:
+ {
+ const TWindowGroupInfoParms& params=*pData.WindowGroupInfoParms;
+ TPtrC name;
+ TBool ret=iWinFunctions->WindowGroupName(name,params.iScreen,params.iOrdinalPosition);
+ /*const TInt theError=*/(*iFunctions->Message()).Write(KIpcSlot,name);
+ return ret;
+ }
+ case EADllSetOrdinalPosition:
+ {
+ const TSetOrdinalParms& params=*pData.SetOrdinalParms;
+ return iWinFunctions->SetOrdinalPosition(params.iIdentifier,params.iOrdinalPosition,params.iOrdinalPriority);
+ }
+ case EADllSetFocusScreen:
+ {
+ const TInt& params=*pData.Int;
+ iWinFunctions->SetFocusScreen(params);
+ break;
+ }
+ default:;
+ }
+ return(KErrNone);
+ }
+
+void CWinFunctionTestAnim::FocusChanged(TBool /*aState*/)
+ {}
+
+TBool CWinFunctionTestAnim::OfferRawEvent(const TRawEvent& /*aRawEvent*/)
+ {
+ return EFalse;
+ }
+
+
+// CNotificationTestAnim
+CNotificationTestAnim::CNotificationTestAnim() : iHeartbeatState(EFalse) , iScreenDeviceChanged(ETrue)
+ {
+ }
+
+CNotificationTestAnim::~CNotificationTestAnim()
+ {
+// Removed for test case GRAPHICS-WSERV-0139 for DEF12220
+// iFunctions->RegisterForNotifications(EFalse);
+ }
+
+void CNotificationTestAnim::ConstructL(TAny* /*aParam*/, TBool )
+ {
+ iWindowFunctions->SetRect(TRect(0,0,1,1));
+ iFunctions->RegisterForNotifications(EDirectScreenAccess|EHeartbeatTimer|EScreenDeviceChange);
+ iFunctions->SetSync(MAnimGeneralFunctions::ESyncSecond);
+ iLastAnimTime.UniversalTime();
+ }
+
+void CNotificationTestAnim::HandleNotification(const TWsEvent& aEvent)
+ {
+ switch (aEvent.Type())
+ {
+ case EEventDirectScreenAccessBegin:
+ {
+ TInt screenNum = *(aEvent.Int());
+ iDSA[screenNum] = ETrue;
+ }
+ break;
+ case EEventDirectScreenAccessEnd:
+ {
+ TInt screenNum = *(aEvent.Int());
+ iDSA[screenNum] = EFalse;
+ }
+ break;
+ case EEventHeartbeatTimerStateChange:
+ {
+ iHeartbeatState=*aEvent.Int();
+ }
+ break;
+ case EEventScreenDeviceChanged:
+ {
+ iScreenDeviceChanged=!iScreenDeviceChanged;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+void CNotificationTestAnim::Animate(TDateTime*)
+ {
+ iLastAnimTime.UniversalTime();
+ }
+
+void CNotificationTestAnim::Redraw()
+ {
+ }
+
+void CNotificationTestAnim::Command(TInt /*aOpcode*/, TAny* /*aParam*/)
+ {
+ }
+
+TInt CNotificationTestAnim::CommandReplyL(TInt aOpcode,TAny* aParam)
+ {
+ TAnimArgUnion pData;
+ pData.any=aParam;
+ switch (aOpcode)
+ {
+ case EADllQueryDSA:
+ {
+ TInt screenNum = *pData.Int;
+ return iDSA[screenNum];
+ }
+ case EADllQueryHeartbeatState:
+ {
+ return iHeartbeatState;
+ }
+ case EADllIsAnimating:
+ {
+ // Check if the anim DLL is currently animating by comparing
+ // the current time with the last anim time - if this is greater than a second
+ // then we are not animating
+ TTime timeNow;
+ timeNow.UniversalTime();
+ TTimeIntervalMicroSeconds microSecs = timeNow.MicroSecondsFrom(iLastAnimTime);
+ if(microSecs > TTimeIntervalMicroSeconds(1200000)) // 1 sec plus 0.2 secs to cope with any latency
+ {
+ return EFalse;
+ }
+ else
+ {
+ return ETrue;
+ }
+ }
+ default:;
+ }
+ return(KErrNone);
+ }
+
+void CNotificationTestAnim::FocusChanged(TBool /*aState*/)
+ {
+ }
+
+TBool CNotificationTestAnim::OfferRawEvent(const TRawEvent& /*aRawEvent*/)
+ {
+ return EFalse;
+ }
+
+// CTransAnim test drawing//
+void CTransAnim::ConstructL(TAny* aParam, TBool)
+ {
+ iRect=*static_cast<TRect*>(aParam);//Assigns the animation area
+ iWindowFunctions->SetRect(iRect);
+ iFunctions->SetSync(MAnimGeneralFunctions::ESyncFlash);
+ iFont=NULL;
+ iColor=TRgb(0,0,0);
+ }
+
+void CTransAnim::Animate(TDateTime*)
+ {
+ iWindowFunctions->ActivateGc();
+ if(iMode==1) //Draw line mode
+ {
+ DoDraw(iDraw,*iGc,iColor,iRect);
+ }
+ else if(iMode==2) //Draw text mode
+ {
+ DoDraw(iDraw,*iGc,iColor,iRect,iFont,iCount);
+ }
+ }
+
+void CTransAnim::Redraw()
+ {
+ DoDraw(iDraw,*iGc,iColor,iRect,iFont,iCount);
+ }
+
+void CTransAnim::Command(TInt aOpcode,TAny* aParam)
+ {
+ TAnimArgUnion pData;
+ pData.any=aParam;
+ switch(aOpcode)
+ {
+ case EADllDrawNow: //Used to draw a single frame
+ iWindowFunctions->ActivateGc();
+ iMode=1;
+ iDraw=36;
+ iColor=TRgb(0,0,0);
+ DoDraw(iDraw,*iGc,iColor,iRect);
+ break;
+ case EADllNextFrame: //Used to draw a continous frame
+ iMode=2;
+ iColor=pData.FrameData->color;
+ iDraw=pData.FrameData->draw;
+ iCount=pData.FrameData->text;
+ break;
+ case EADllStartAnimText: //Used to start text animate
+ iWindowFunctions->ActivateGc();
+ iMode=2;
+ iDraw=37;
+ iFont=iFunctions->DuplicateFontL(pData.FrameData->font);
+ iColor=pData.FrameData->color;
+ iCount=pData.FrameData->text;
+ if(pData.FrameData->sync==EStateFlash)
+ iFunctions->SetSync(MAnimGeneralFunctions::ESyncFlash);
+ else if(pData.FrameData->sync==EStateSecond)
+ iFunctions->SetSync(MAnimGeneralFunctions::ESyncSecond);
+ DoDraw(iDraw,*iGc,iColor,iRect,iFont,iCount);
+ break;
+ case EADllEndAnimText: //Used to end text animate
+ iFunctions->SetSync(MAnimGeneralFunctions::ESyncNone);
+ iWindowFunctions->ActivateGc();
+ iCount=0;
+ iMode=0;
+ iFunctions->CloseFont(iFont);
+ iFont=NULL;
+ break;
+ }
+ }
+
+TInt CTransAnim::CommandReplyL(TInt /*aOpcode*/, TAny* /*aParam*/)
+ {
+ return(0);
+ }
+
+void CTransAnim::FocusChanged(TBool /*aState*/)
+ {}
+
+TBool CTransAnim::OfferRawEvent(const TRawEvent& /*aRawEvent*/)
+ {
+ return EFalse;
+ }
+
+// an anim dll that doesn't remove itself from the event handler list
+CTestHandlerAnim::~CTestHandlerAnim()
+ {
+ }
+
+void CTestHandlerAnim::ConstructL(TAny* /*aArgs*/, TBool /*aHasFocus*/)
+ {
+ iFunctions->GetRawEvents(ETrue);
+ }
+
+void CTestHandlerAnim::Redraw()
+ {
+ }
+
+void CTestHandlerAnim::FocusChanged(TBool /*aState*/)
+ {
+ }
+
+TInt CTestHandlerAnim::CommandReplyL(TInt /*aOpcode*/, TAny* /*aArgs*/)
+ {
+ return KErrNone;
+ }
+
+void CTestHandlerAnim::Command(TInt /*aOpcode*/, TAny* /*aArgs*/)
+ {
+ }
+
+void CTestHandlerAnim::Animate(TDateTime* /*aDateTime*/)
+ {
+ }
+
+TBool CTestHandlerAnim::OfferRawEvent(const TRawEvent &/*aRawEvent*/)
+ {
+ return EFalse;
+ }
+
+// CRemovableAnim Test removal of anim during event handling //
+CRemovableAnim::~CRemovableAnim()
+ {
+ }
+
+TInt CRemovableAnim::AddExpectedEvent(const TAnimRawEvent* aEvent)
+ {
+ if (TotalExpectedEvents() + EventCount() < iLifetime)
+ {
+ return (AddEvent(aEvent) ? KErrNone : KErrOverflow);
+ }
+ else
+ {
+ return KErrNone;
+ }
+ }
+
+TInt CRemovableAnim::CommandReplyL(TInt aOpcode,TAny* aParam)
+ {
+ TAnimArgUnion pData;
+ pData.any=aParam;
+ switch (aOpcode)
+ {
+ case EADllSetEventHandlerLifetime:
+ iLifetime = *pData.Int;
+ return iLifetime;
+ case EADllEventHandlerLifetime:
+ return iLifetime;
+ case EADllAddToEventHandlers:
+ iFunctions->GetRawEvents(ETrue);
+ return KErrNone;
+ case EADllRemoveFromEventHandlers:
+ iFunctions->GetRawEvents(EFalse);
+ return KErrNone;
+ case EADllTestPassed:
+ {
+ // If any unexpected events are received, then Error() > 0
+ // If fewer than the number of expected events are received, then TotalExpectedEvents() > 0
+ TBool passed = (Error() == 0) && (TotalExpectedEvents() == 0);
+ return passed;
+ }
+ default:
+ return CEventTestAnimBase::CommandReplyL(aOpcode, aParam);
+ }
+ }
+
+
+TBool CRemovableAnim::OfferRawEvent(const TRawEvent& aRawEvent)
+ {
+ TBool eat = CEventTestAnimBase::OfferRawEvent(aRawEvent);
+
+ // Remove anim from event handlers if lifetime has been exceeded
+ if (EventCount() >= iLifetime)
+ {
+ iFunctions->GetRawEvents(EFalse);
+ }
+ return eat;
+ }
+
+// CMultiPointerAnim for Testing multipointerevents for anims //
+CMultiPointerAnim::~CMultiPointerAnim()
+ {
+ iFunctions->GetRawEvents(EFalse);
+ }
+
+// Important thing here is to call GetRawEvents() which Switches animation raw event handling on
+void CMultiPointerAnim::ConstructL(TAny */*aArgs*/, TBool /*aHasFocus*/)
+ {
+ iExpectedEvents.SetLengthL(EEventBufferSize);
+ iFunctions->GetRawEvents(ETrue);
+ }
+
+void CMultiPointerAnim::Animate(TDateTime */*aDateTime*/)
+ {
+ }
+
+void CMultiPointerAnim::Command(TInt /*aOpcode*/, TAny */*aArgs*/)
+ {
+ }
+
+TInt CMultiPointerAnim::CommandReplyL(TInt aOpcode, TAny *aArgs)
+ {
+ TAnimArgUnion pData;
+ pData.any=aArgs;
+ switch (aOpcode)
+ {
+ case EADllAddExpectedMultiPtrEvent:
+ return AddEvent(pData.AnimRawEvent);
+ case EADllMultiPtrEventError:
+ return iError;
+ case EADllMultiPtrEventErrorDesc:
+ if (iError != KErrNone)
+ {
+ // returns the error description which gets displayed in logs if test failed
+ const RMessagePtr2& message=*iFunctions->Message();
+ const TInt error=message.Write(KIpcSlot, iErrorDes);
+ if (error != KErrNone)
+ {
+ return error;
+ }
+ }
+ break;
+ case EADllMultiPtrEventReset:
+ iExpectedEvents.Reset();
+ iError = 0;
+ iEventCount = 0;
+ break;
+ default:;
+ }
+ return(KErrNone);
+ }
+
+void CMultiPointerAnim::Redraw()
+ {
+ }
+
+void CMultiPointerAnim::FocusChanged(TBool /*aState*/)
+ {
+ }
+
+TBool CMultiPointerAnim::OfferRawEvent(const TRawEvent &aRawEvent)
+ {
+ // Ignore following raw events
+ TRawEvent::TType aType=aRawEvent.Type();
+ if (aType==TRawEvent::EActive || aType==TRawEvent::EInactive || aType==TRawEvent::ERedraw
+ || aType==TRawEvent::EPointerSwitchOn || aType==TRawEvent::EUpdateModifiers)
+ {
+ return EFalse;
+ }
+
+ // If it has already failed then do not test other events becasue the error value
+ // and its descriptor will be over written
+ if (iError)
+ {
+ return EFalse;;
+ }
+
+ TAnimRawEvent expectedEvent;
+ if (iExpectedEvents.Remove(&expectedEvent)<1)
+ {
+ return EFalse;
+ }
+
+ // Increment event count
+ iEventCount++;
+
+ // Call compare events function passing in both the events
+ if (!CompareEvents(expectedEvent.iRawEvent, aRawEvent))
+ {
+ iError = iEventCount;
+ }
+
+ return expectedEvent.iEat;
+ }
+
+TInt CMultiPointerAnim::AddEvent(const TAnimRawEvent* aEvent)
+ {
+ return iExpectedEvents.Add(aEvent);
+ }
+
+TBool CMultiPointerAnim::CompareEvents(const TRawEvent& aExpectedEvent, const TRawEvent& aActualEvent)
+ {
+ // Check pointer type
+ if (aExpectedEvent.Type() != aActualEvent.Type())
+ {
+ _LIT(KEventType, "Actual Event type = %d Expected Event Type = %d ");
+ iErrorDes.Format(KEventType, aActualEvent.Type(), aExpectedEvent.Type());
+ return EFalse;
+ }
+
+ // Here for EOutOfRange we cannot query Pos or Pos3D...
+ if (aExpectedEvent.Type() != TRawEvent::EPointer3DOutOfRange)
+ {
+ // Check 3d position
+ TPoint3D expected3DPos = aExpectedEvent.Pos3D();
+ TPoint3D actual3DPos = aActualEvent.Pos3D();
+ if (expected3DPos.iX != actual3DPos.iX)
+ {
+ _LIT(KXPosition, "Actual X coordinate = %d Expected X coordinate = %d ");
+ iErrorDes.Format(KXPosition, actual3DPos.iX, expected3DPos.iX);
+ return EFalse;
+ }
+ if (expected3DPos.iY != actual3DPos.iY)
+ {
+ _LIT(KYPosition, "Actual Y coordinate = %d Expected Y coordinate = %d ");
+ iErrorDes.Format(KYPosition, actual3DPos.iY, expected3DPos.iY);
+ return EFalse;
+ }
+ if (expected3DPos.iZ != actual3DPos.iZ)
+ {
+ _LIT(KZPosition, "Actual Z coordinate = %d Expected Z coordinate = %d ");
+ iErrorDes.Format(KZPosition, actual3DPos.iZ, expected3DPos.iZ);
+ return EFalse;
+ }
+ }
+
+ // Check pointer number
+ if (aExpectedEvent.PointerNumber() != aActualEvent.PointerNumber())
+ {
+ _LIT(KPointerNumber, "Actual Pointer number = %d Expected Pointer number = %d ");
+ iErrorDes.Copy(KPointerNumber);
+ iErrorDes.Format(KPointerNumber, aActualEvent.PointerNumber(), aExpectedEvent.PointerNumber());
+ return EFalse;
+ }
+ return ETrue;
+ }
+
+// CCoverageAnim test drawing/redrawing //
+CCoverageAnim::~CCoverageAnim()
+ {
+ if(iFont && iFunctions)
+ iFunctions->CloseFont(iFont);
+ }
+
+/**
+ Initializes members.
+ */
+void CCoverageAnim::ConstructL(TAny *aParam, TBool )
+ {
+ iRect=*static_cast<TRect*>(aParam);
+ iWindowFunctions->SetRect(iRect);
+ iWindowFunctions->Invalidate(iRect);
+
+ iFunctions->SetSync(MAnimGeneralFunctions::ESyncDay);
+ if (iFunctions->Sync() != MAnimGeneralFunctions::ESyncDay)
+ User::Leave(KErrGeneral);
+
+ iFunctions->SetSync(MAnimGeneralFunctions::ESyncMinute);
+ if (iFunctions->Sync() != MAnimGeneralFunctions::ESyncMinute)
+ User::Leave(KErrGeneral);
+
+ iFunctions->SetSync(MAnimGeneralFunctions::ESyncSecond);
+ if (iFunctions->Sync() != MAnimGeneralFunctions::ESyncSecond)
+ User::Leave(KErrGeneral);
+
+ iFunctions->SetSync(MAnimGeneralFunctions::ESyncFlash);
+ if (iFunctions->Sync() != MAnimGeneralFunctions::ESyncFlash)
+ User::Leave(KErrGeneral);
+
+ iFunctions->SetSync(MAnimGeneralFunctions::ESyncNone);
+ if (iFunctions->Sync() != MAnimGeneralFunctions::ESyncNone)
+ User::Leave(KErrGeneral);
+
+ iFunctions->SetInterval(1);
+ iFunctions->SetInterval(0);
+ iFunctions->SetNextInterval(0);
+
+ User::LeaveIfNull(iFunctions->ExtendedInterface(MAnimGeneralFunctions::ENumberOfExtendedInterfaces));
+ User::LeaveIfNull(iFunctions->ExtendedInterface(MAnimGeneralFunctions::EWindowExtensionInterface));
+ User::LeaveIfNull(iFunctions->ExtendedInterface(MAnimGeneralFunctions::EEventExtentionInterface));
+ User::LeaveIfError(iFunctions->ExtendedInterface(MAnimGeneralFunctions::EInterfaceCount) != NULL);
+
+ #if !defined(SYMBIAN_GRAPHICS_GCE)
+ // Deprecated in NGA but needs to be tested in NONNGA
+ User::LeaveIfNull((TAny*)iFunctions->ScreenDevice());
+ #endif
+
+ iFunctions->Client();
+ }
+
+/**
+ Copied from CAutoAnimScrBack.
+ */
+void CCoverageAnim::Animate(TDateTime *)
+ {
+ iWindowFunctions->ActivateGc();
+ Draw();
+ }
+
+/**
+ All methods of the graphic-context are executed one by one.
+ */
+void CCoverageAnim::Draw()
+ {
+ iGc->SetClippingRect(iRect);
+ iGc->Clear();
+ iGc->Clear(iRect);
+
+ iGc->SetDrawMode(CGraphicsContext::EDrawModeAND);
+ iGc->SetBrushStyle(CGraphicsContext::ENullBrush);
+ iGc->SetBrushColor(TRgb::Gray256(85));
+ iGc->SetBrushOrigin(TPoint(0,0));
+ iGc->SetPenColor(TRgb::Gray256(170));
+
+ //primitive method calls
+ iGc->SetFaded(ETrue);
+ iGc->SetFadingParameters(1, 1);
+
+ iGc->SetPenStyle(CGraphicsContext::ESolidPen);
+ iGc->SetStrikethroughStyle(EStrikethroughOff);
+ iGc->SetUnderlineStyle(EUnderlineOff);
+ iGc->SetWordJustification(2, 1);
+
+ if(iFont)
+ iGc->UseFont(iFont);
+
+ iGc->DrawArc(iRect,
+ TPoint(iRect.Center().iX, iRect.iTl.iY),
+ TPoint(iRect.iBr.iX, iRect.Center().iY));
+ iGc->DrawLine(iRect.iTl,iRect.Center());
+ iGc->DrawLineTo(TPoint(iRect.iBr.iX, iRect.iTl.iY));
+
+ iGc->DrawLineBy(TPoint(iRect.iTl.iX, iRect.iBr.iY));
+ iGc->MoveBy(iRect.iTl + TPoint(1,1));
+ iGc->MoveTo(iRect.iTl + TPoint(0,0));
+ iGc->SetPenSize(TSize(10,10));
+ iGc->Plot(iRect.iTl + TPoint(2,2));
+ iGc->SetPenSize(TSize(1,1));
+
+ CArrayFixFlat<TPoint>* polyPoints = new(ELeave) CArrayFixFlat<TPoint>(3); //CArrayFixFlat
+ CleanupStack::PushL(polyPoints);
+ polyPoints->AppendL(iRect.iTl);
+ polyPoints->AppendL(iRect.Center());
+ polyPoints->AppendL(TPoint(iRect.iBr.iX, iRect.iTl.iY));
+
+ iGc->DrawPolyLine(polyPoints);
+ iGc->DrawPolyLine(&polyPoints->At(0), 3);
+ iGc->DrawPolygon(polyPoints, CGraphicsContext::EWinding);
+ iGc->DrawPolygon(&polyPoints->At(0), 3, CGraphicsContext::EAlternate);
+
+ iGc->DrawPie(iRect, TPoint(iRect.Center().iX, iRect.iTl.iY), TPoint(iRect.iBr.iX, iRect.Center().iY));
+ iGc->DrawEllipse(iRect);
+ iGc->DrawRect(iRect);
+ iGc->DrawRoundRect(iRect, TSize(iRect.Width()/8, iRect.Height()/8));
+
+ CleanupStack::PopAndDestroy(polyPoints);
+
+ iGc->CopyRect(TPoint(10, 10), iRect);
+
+ CFbsBitmap* bitmap = new(ELeave) CFbsBitmap();
+ CleanupStack::PushL(bitmap);
+ User::LeaveIfError(bitmap->Create(TSize(16,16),EGray4));
+
+ iGc->UseBrushPattern(bitmap);
+ iGc->DrawBitmap(iRect.iTl, bitmap);
+ iGc->DrawBitmap(iRect, bitmap);
+ iGc->DrawBitmap(iRect, bitmap, TRect(0, 0, 16, 16));
+ iGc->DrawBitmapMasked(iRect, bitmap, TRect(0, 0, 16, 16), bitmap, ETrue);
+
+ iGc->BitBlt(TPoint(0, 0), bitmap);
+ iGc->BitBlt(TPoint(0, 0), bitmap, iRect);
+ iGc->BitBltMasked(TPoint(0, 0), bitmap, iRect, bitmap, ETrue);
+ iGc->AlphaBlendBitmaps(TPoint(0, 0), bitmap, iRect, bitmap, TPoint(0,0));
+
+ CleanupStack::PopAndDestroy(bitmap);
+
+ iGc->SetCharJustification(1,1);
+ iGc->SetClippingRect(iRect);
+ if(iFont)
+ {
+ _LIT(KHelloWorld,"Hello World");
+ iGc->DrawText(*&KHelloWorld, iRect.iTl);
+ iGc->DrawText(*&KHelloWorld, iRect, 0, CGraphicsContext::ELeft, 0);
+ iGc->DrawTextVertical(*&KHelloWorld, iRect.iBr, ETrue);
+ iGc->DrawTextVertical(*&KHelloWorld, iRect, 0, ETrue, CGraphicsContext::ELeft, 0);
+ }
+
+ TRgb rgbs[2];
+ iGc->MapColors(iRect, rgbs, 1, ETrue);
+ iGc->DiscardBrushPattern();
+
+ if(iFont)
+ iGc->DiscardFont();
+
+ iFunctions->CloseFont(0);
+
+ TDateTime dt = iFunctions->SystemTime();
+ }
+
+/**
+ Copied from CAutoAnim3.
+ */
+void CCoverageAnim::Redraw()
+ {
+ Draw();
+ }
+
+/**
+ Copied from CAutoAnim3.
+ */
+void CCoverageAnim::Command(TInt ,TAny*)
+ {
+ }
+
+/**
+ Copied from CAutoAnim3.
+ */
+TInt CCoverageAnim::CommandReplyL(TInt aOpcode , TAny* aParam)
+ {
+ TAnimArgUnion pData;
+ pData.any=aParam;
+ switch(aOpcode)
+ {
+ case EADllDrawNow:
+ iFunctions->SetSync(MAnimGeneralFunctions::ESyncFlash);
+ break;
+ case EADllSetFont:
+ if(iFont)
+ {
+ iFunctions->CloseFont(iFont);
+ iFont = NULL;
+ }
+ iFont = iFunctions->DuplicateFontL(*pData.Int);
+ break;
+ }
+ return(KErrNone);
+ }
+
+/**
+ Copied from CAutoAnim3.
+ */
+void CCoverageAnim::FocusChanged(TBool )
+ {}
+
+/**
+ Copied from CAutoAnim3.
+ */
+TBool CCoverageAnim::OfferRawEvent(const TRawEvent &/*aRawEvent*/)
+ {
+ return EFalse;
+ }
+
+
+// DLL code //
+
+CAnim *CTestAnimDll::CreateInstanceL(TInt aType)
+ {
+ CAnim *anim=NULL;
+ switch(aType)
+ {
+ case EAnimTypeTest1:
+ anim=new(ELeave) CPanicAnim();
+ break;
+ case EAnimTypeTest2:
+ anim=new(ELeave) CPanicAnim2();
+ break;
+ case EAnimTypeTest3:
+ anim=new(ELeave) CAutoAnim3();
+ break;
+ case EAnimTypeScrBackTest:
+ anim=new(ELeave) CAutoAnimScrBack();
+ break;
+ case EAnimTypeSprite:
+ anim=new(ELeave) CTestSpriteAnim();
+ break;
+ case EAnimTypeFreeTimer:
+ anim=new(ELeave) CTestFreeTimerAnim();
+ break;
+ case EAnimTypeEventTest:
+ anim=new(ELeave) CEventTestAnim();
+ break;
+ case EAnimTypeNotificationTest:
+ anim=new(ELeave) CNotificationTestAnim();
+ break;
+ case EAnimTypeTimer:
+ anim=new(ELeave) CTimerTestAnim();
+ break;
+ case EAnimTypeWindowFunctions:
+ anim=new(ELeave) CWinFunctionTestAnim();
+ break;
+ case EAnimTypeTrans:
+ anim=new(ELeave) CTransAnim();
+ break;
+ case EAnimTypeEventHandler:
+ anim = new (ELeave) CTestHandlerAnim();
+ break;
+ case EAnimTypeRemovableAnim:
+ anim=new(ELeave) CRemovableAnim();
+ break;
+ case EAnimTypeEventPostingTest:
+ anim=new(ELeave) CEventPostingAnim();
+ break;
+ case EAnimTypeCoverage:
+ anim=new(ELeave) CCoverageAnim();
+ break;
+ case EAnimTypeMultiPointer:
+ anim=new(ELeave) CMultiPointerAnim();
+ break;
+ }
+ return(anim);
+ }
+
+// Dummy E32Dll needed by E32 to build //
+
+void CAutoAnim3::DrawTestScreenL(const TDrawTestScreen* aParams)
+//Moved here as the include messes up the debugging of the rest of the file.
+ {
+ CFbsBitmap *aBitmap=iFunctions->DuplicateBitmapL(aParams->bitmap);
+ CleanupStack::PushL(aBitmap);
+ CFbsBitmap *aMaskBitmap=iFunctions->DuplicateBitmapL(aParams->maskBitmap);
+ CleanupStack::PushL(aMaskBitmap);
+ CFbsFont *aFont=iFont=iFunctions->DuplicateFontL(aParams->font);
+ TSize size(iWindowFunctions->WindowSize());
+ iWindowFunctions->ActivateGc();
+ CBitmapContext *gc=iGc;
+ TBool aExtraDrawBitMap=ETrue;
+//
+#include "DLLDRAW.H"
+//
+ iFunctions->CloseFont(iFont);
+ iFont=NULL;
+ CleanupStack::PopAndDestroy(2);
+ }