--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/windowing/windowserver/tanim/ANIM.CPP Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,438 @@
+// Copyright (c) 1995-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:
+// Test code to tun ANIMDLL.DLL
+//
+//
+
+#include <e32std.h>
+#include <w32std.h>
+#include <e32svr.h>
+#include "../tlib/testbase.h"
+#include "TANIM.H"
+#include "ANIMDLL.H"
+
+#define NONEXISTENT_DLL_NAME _L("Z:\\NONEXISTENT.DLL")
+#define ANIM_BITMAP _L("Z:\\WSTEST\\TANIM.MBM")
+#define ANIM_DLL_NAME _L("ANIDLL.DLL")
+
+enum TAnimPanic
+ {
+ EAnimPanicBadLoadFailed,
+ };
+
+class CTAnimClient;
+
+class TestAnim : public RAnim
+ {
+public:
+ TestAnim(RAnimDll &aDll);
+ TInt Construct(RWindowBase &aWin,const TPoint &aPos,CFbsBitmap *aBit1,CFbsBitmap *aBit2,CFbsBitmap *aMask,TInt aInterval, CFbsFont *aFont);
+ void Set(const TPoint &aPos, TInt aInterval);
+ void TextPos(const TPoint &aPos);
+ void SetPolyRectL(const TRect &aRect);
+ void ToggleMask();
+ };
+
+class CTAnimWindow2 : public CTBlankWindow
+ {
+public:
+ CTAnimWindow2(RAnimDll &aAnimDll);
+ ~CTAnimWindow2();
+ void ConstructL(CTWinBase &parent, const TPoint &aPos, const TSize &aSize);
+ void ConstructExtLD(CTWinBase &aParent, const TPoint &aPos, const TSize &aSize);
+private:
+ TestAnim iAnim;
+ CFbsBitmap iAnimBitmap1;
+ CFbsBitmap iAnimBitmap2;
+ };
+
+class CTAnimWindow1 : public CTTitledWindow
+ {
+public:
+ CTAnimWindow1(RAnimDll &aAnimDll);
+ ~CTAnimWindow1();
+ void ConstructL(CTWinBase &parent);
+ void Draw();
+ void AdjustAnimRect(TInt xMove,TInt yMove,TInt modifiers);
+ void AdjustPolyRectL(TInt xMove,TInt yMove,TInt modifiers);
+ void ToggleMask();
+ TInt SubType();
+private:
+ TestAnim iAnim;
+ TPoint iAnimPos;
+ TRect iAnimPolyRect;
+ CFbsBitmap iAnimBitmap1;
+ CFbsBitmap iAnimBitmap2;
+ CFbsBitmap iMask;
+ };
+
+class CTAnimWindowGroup : public CTWindowGroup
+ {
+public:
+ CTAnimWindowGroup(CTClient *aClient);
+ void CursorKeyL(TInt xMove,TInt yMove,TInt modifiers);
+ void KeyL(const TKeyEvent &aKey, const TTime &aTime);
+ TInt iCursorMode;
+ };
+
+class CTAnimClient : public CTClient
+ {
+public:
+ CTAnimClient();
+ ~CTAnimClient();
+ void ConstructL();
+ void KeyL(const TKeyEvent &aKey,const TTime &aTime);
+ void ExitL();
+ void ErrorTests();
+ CTBaseWin *CreateTestWindowL(TPoint pos,TSize size,CTWinBase *parent, TInt aType);
+private:
+ TInt iNum;
+ RAnimDll iAnimDll;
+ };
+
+const TInt Xmove=8;
+const TInt Ymove=6;
+
+void AnimPanic(TInt aPanic)
+ {
+ User::Panic(_L("ANIM"),aPanic);
+ }
+
+//
+// Anim class
+//
+
+TestAnim::TestAnim(RAnimDll &aDll) : RAnim(aDll)
+ {
+ }
+
+TInt TestAnim::Construct(RWindowBase &aWin, const TPoint &aPos, CFbsBitmap *aBit1,CFbsBitmap *aBit2,CFbsBitmap *aMask, TInt aInterval, CFbsFont *aFont)
+ {
+ TPckgBuf<CTAParams> params;
+ params().pos=aPos;
+ params().interval=aInterval;
+ params().bit1=aBit1->Handle();
+ params().bit2=aBit2->Handle();
+ params().mask=aMask->Handle();
+ params().font=aFont->Handle();
+ return(RAnim::Construct(aWin,0,params));
+ }
+
+void TestAnim::Set(const TPoint &aPos, TInt aInterval)
+ {
+ TPckgBuf<CTAParams> params;
+ params().pos=aPos;
+ params().interval=aInterval;
+ Command(EADllOpcodeMove,params);
+ }
+
+void TestAnim::TextPos(const TPoint &aPos)
+ {
+ TPckgBuf<TPoint> params;
+ params()=aPos;
+ Command(EADllTextPos,params);
+ }
+
+void TestAnim::SetPolyRectL(const TRect &aRect)
+ {
+ TPckgC<TRect> params(aRect);
+ User::LeaveIfError(CommandReply(EADllOpcodePolyLineRect,params));
+ }
+
+void TestAnim::ToggleMask()
+ {
+ Command(EADllToggleBitmapMask);
+ }
+
+//
+// Individual window sub-classes
+//
+
+CTAnimWindow1::CTAnimWindow1(RAnimDll &aAnimDll) : CTTitledWindow(),
+ iAnim(aAnimDll)
+ {
+ }
+
+CTAnimWindow1::~CTAnimWindow1()
+ {
+ iAnim.Close();
+ }
+
+void CTAnimWindow1::ConstructL(CTWinBase &parent)
+ {
+ CTTitledWindow::ConstructL(parent);
+ User::LeaveIfError(iAnimBitmap1.Load(ANIM_BITMAP,EMbmTanimAnim1));
+ User::LeaveIfError(iAnimBitmap2.Load(ANIM_BITMAP,EMbmTanimAnim2));
+ User::LeaveIfError(iMask.Load(ANIM_BITMAP,EMbmTanimMask));
+ iAnimPos=TPoint(10,10);
+ User::LeaveIfError(iAnim.Construct(iWin, iAnimPos,&iAnimBitmap1,&iAnimBitmap2,&iMask,1,iFont));
+ iAnimPolyRect=TRect(TPoint(10,40),TSize(50,50));
+ iAnim.SetPolyRectL(iAnimPolyRect);
+ iAnim.TextPos(TPoint(20,50));
+ }
+
+void CTAnimWindow1::Draw()
+ {
+ TInt i;
+
+ CTTitledWindow::Draw();
+ iGc->SetPenColor(TRgb::Gray16(8));
+ TInt hgt=iSize.iHeight-iTitleHeight;
+ for(i=0;i<iSize.iWidth;i+=30)
+ {
+ iGc->DrawLine(TPoint(i,iTitleHeight),TPoint(iSize.iWidth,iTitleHeight+(hgt*i)/iSize.iWidth));
+ iGc->DrawLine(TPoint(iSize.iWidth-i,iTitleHeight+hgt),TPoint(iSize.iWidth,iTitleHeight+(hgt*i)/iSize.iWidth));
+ iGc->DrawLine(TPoint(iSize.iWidth-i,iTitleHeight+hgt),TPoint(0,iTitleHeight+hgt-(hgt*i)/iSize.iWidth));
+ iGc->DrawLine(TPoint(i,iTitleHeight),TPoint(0,iTitleHeight+hgt-(hgt*i)/iSize.iWidth));
+ }
+ }
+
+void CTAnimWindow1::AdjustAnimRect(TInt xMove,TInt yMove,TInt modifiers)
+ {
+ if (modifiers&EModifierCtrl) // 4 times the movement
+ {
+ xMove<<=2;
+ yMove<<=2;
+ }
+ iAnimPos+=TPoint(xMove,yMove);
+ iAnim.Set(iAnimPos,5);
+ }
+
+void CTAnimWindow1::AdjustPolyRectL(TInt xMove,TInt yMove,TInt modifiers)
+ {
+ if (modifiers&EModifierCtrl) // 4 times the movement
+ {
+ xMove<<=2;
+ yMove<<=2;
+ }
+ if (modifiers&EModifierShift) // 4 times the movement
+ iAnimPolyRect.Grow(xMove,yMove);
+ else
+ iAnimPolyRect.Move(TPoint(xMove,yMove));
+ iAnim.SetPolyRectL(iAnimPolyRect);
+ }
+
+void CTAnimWindow1::ToggleMask()
+ {
+ iAnim.ToggleMask();
+ }
+
+TInt CTAnimWindow1::SubType()
+ {
+ return(69);
+ }
+
+// CTAnimWindow2 //
+
+CTAnimWindow2::CTAnimWindow2(RAnimDll &aAnimDll) : CTBlankWindow(),
+ iAnim(aAnimDll)
+ {
+ }
+
+CTAnimWindow2::~CTAnimWindow2()
+ {
+ iAnim.Close();
+ }
+
+void CTAnimWindow2::ConstructL(CTWinBase &parent, const TPoint &aPos, const TSize &aSize)
+ {
+ CTBlankWindow::ConstructL(parent);
+ iWin.SetColor(TRgb(128,128,128));
+ iWin.SetVisible(EFalse);
+ SetExt(aPos,aSize);
+ iWin.Activate();
+ User::LeaveIfError(iAnimBitmap1.Load(ANIM_BITMAP,EMbmTanimAnim1));
+ User::LeaveIfError(iAnimBitmap2.Load(ANIM_BITMAP,EMbmTanimAnim2));
+ User::LeaveIfError(iAnim.Construct(iWin, TPoint(10,10), &iAnimBitmap1, &iAnimBitmap2, &iAnimBitmap1, 1, iFont));
+ iWin.SetVisible(ETrue);
+ }
+
+void CTAnimWindow2::ConstructExtLD(CTWinBase &aParent, const TPoint &aPos, const TSize &aSize)
+//
+// Call ConstructL, SetExt and either of these fail destroy this and leave
+//
+ {
+ TRAPD(err,ConstructL(aParent, aPos, aSize));
+ if (err!=KErrNone)
+ {
+ delete this;
+ User::Leave(err);
+ }
+ }
+
+//
+// End of CTAnimWindow class //
+//
+
+CTAnimWindowGroup::CTAnimWindowGroup(CTClient *aClient) : CTWindowGroup(aClient)
+ {
+ }
+
+void CTAnimWindowGroup::CursorKeyL(TInt xMove,TInt yMove,TInt modifiers)
+ {
+ if (iCursorMode==0)
+ iCurWin->AdjustSizeL(xMove,yMove,modifiers);
+ else if (iCurWin->SubType()==69)
+ {
+ if (iCursorMode==1)
+ ((CTAnimWindow1 *)iCurWin)->AdjustAnimRect(xMove,yMove,modifiers);
+ else
+ ((CTAnimWindow1 *)iCurWin)->AdjustPolyRectL(xMove,yMove,modifiers);
+ }
+ }
+
+void CTAnimWindowGroup::KeyL(const TKeyEvent &aKey,const TTime &aTime)
+ {
+ if (aKey.iModifiers&EModifierCtrl)
+ {
+ TInt type=0;
+ switch(aKey.iCode)
+ {
+ case 1:
+ type=1;
+ break;
+ case 2:
+ type=2;
+ break;
+ }
+ if (type!=0)
+ {
+ TPoint pos;
+ TSize size;
+ pos.iX=iCurWin->Size().iWidth>>2;
+ pos.iY=iCurWin->Size().iHeight>>2;
+ size.iWidth=iCurWin->Size().iWidth>>1;
+ size.iHeight=iCurWin->Size().iHeight>>1;
+ SetCurrentWindow(((CTAnimClient *)iClient)->CreateTestWindowL(pos,size,iCurWin,type));
+ return;
+ }
+ }
+ if (aKey.iModifiers&EModifierFunc)
+ {
+ switch(aKey.iCode)
+ {
+ case 'x':
+ ((CTAnimClient *)iClient)->ExitL();
+ break;
+ }
+ }
+ else switch(aKey.iCode)
+ {
+ case ' ':
+ iCursorMode=(iCursorMode+1)%3;
+ break;
+ case 8:
+ CTWin::Delete(iCurWin);
+ break;
+ case 9:
+ if (aKey.iModifiers&EModifierShift)
+ SetCurrentWindow(iCurWin->Prev());
+ else
+ SetCurrentWindow(iCurWin->Next());
+ break;
+ case 13:
+ if (iCurWin->SubType()==69)
+ ((CTAnimWindow1 *)iCurWin)->ToggleMask();
+ break;
+ case EKeyLeftArrow:
+ CursorKeyL(-Xmove,0,aKey.iModifiers);
+ break;
+ case EKeyRightArrow:
+ CursorKeyL(Xmove,0,aKey.iModifiers);
+ break;
+ case EKeyUpArrow:
+ CursorKeyL(0,-Ymove,aKey.iModifiers);
+ break;
+ case EKeyDownArrow:
+ CursorKeyL(0,Ymove,aKey.iModifiers);
+ break;
+ default:
+ iCurWin->WinKeyL(aKey,aTime);
+ break;
+ }
+ }
+
+//
+
+CTAnimClient::CTAnimClient()
+ {
+ }
+
+CTBaseWin *CTAnimClient::CreateTestWindowL(TPoint pos,TSize size,CTWinBase *parent, TInt type)
+ {
+ CTBaseWin *win;
+ if (type==1)
+ {
+ win=new(ELeave) CTAnimWindow1(iAnimDll);
+ win->ConstructExtLD(*parent,pos,size);
+ win->Activate();
+ }
+ else
+ {
+ win=new(ELeave) CTAnimWindow2(iAnimDll);
+ win->ConstructExtLD(*parent,pos,size);
+ }
+ win->AssignGC(*iGc);
+ return(win);
+ }
+
+CTAnimClient::~CTAnimClient()
+ {
+ DestroyWindows();
+ iAnimDll.Close();
+ }
+
+void CTAnimClient::ErrorTests()
+ {
+ RAnimDll animDll=RAnimDll(iWs);
+ if (animDll.Load(NONEXISTENT_DLL_NAME)!=KErrNotFound)
+ AnimPanic(EAnimPanicBadLoadFailed);
+ animDll.Close(); // Close should be harmless, but unnecassary
+ RAnimDll animDll2=RAnimDll(iWs);
+ if (animDll2.Load(NONEXISTENT_DLL_NAME)!=KErrNotFound)
+ AnimPanic(EAnimPanicBadLoadFailed);
+ }
+
+void CTAnimClient::ConstructL()
+ {
+ CTClient::ConstructL();
+
+ iGroup=new(ELeave) CTAnimWindowGroup(this);
+ iGroup->ConstructL();
+
+ ErrorTests();
+
+ iAnimDll=RAnimDll(iWs);
+ User::LeaveIfError(iAnimDll.Load(ANIM_DLL_NAME));
+
+ CreateTestWindowL(TPoint(30,20),TSize(220,140),iGroup, 1);
+ CreateTestWindowL(TPoint(260,60),TSize(60,40),iGroup, 2);
+ iGroup->SetCurrentWindow(iGroup->Child());
+ }
+
+void CTAnimClient::ExitL()
+ {
+ CActiveScheduler::Stop();
+ User::Leave(0); // Signals RunL not to do another Request()
+ }
+
+GLDEF_C CTClient *CreateClientL()
+ {
+ return(new(ELeave) CTAnimClient());
+ }
+
+GLDEF_C TInt E32Main()
+ {
+ return(TestLibStartUp(CreateClientL));
+ }