Prune down surface manager. Interface bit moved to surfacemanager_api. Implementation bit moved to graphics.nokia
// 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));
}