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