--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/windowing/windowserver/tanim/TANIMDLL.CPP Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,317 @@
+// 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 Animated DLL
+//
+//
+
+#include <e32std.h>
+#include <w32std.h>
+#include <w32adll.h>
+#include <bitstd.h>
+#include "ANIMDLL.H"
+
+#define ANIM_TEST_TEXT _L("Testing 123")
+
+class CTestAnim : public CWindowAnim
+ {
+ enum {ENumPolyPoints=9};
+public:
+ ~CTestAnim();
+ virtual void ConstructL(TAny *aArgs, TBool aHasFocus);
+ virtual void Animate(TDateTime *aDateTime);
+ virtual void Redraw();
+ virtual void Command(TInt aOpcode, TAny *aArgs);
+ virtual TInt CommandReplyL(TInt aOpcode, TAny *aArgs);
+ void SetPolyList(const TRect &aRect);
+ void DrawPolyLine();
+ void DrawBitmap();
+ void DrawText();
+ void TweakPolyList(TInt aState);
+ void FocusChanged(TBool aState);
+ void InvalidateText();
+ void InvalidateBitmap();
+ //Pure virtual function from MEventHandler
+ virtual TBool OfferRawEvent(const TRawEvent &aRawEvent);
+private:
+ void AppendTime(TDes& aTimeText,const TTime& aTime) const;
+private:
+ TPoint iPos;
+ TSize iSize;
+ TInt iColor;
+ TBool iMasked;
+ TRect iPolyRect;
+ TInt iPolyState;
+ TInt iWiggleSize;
+ TPoint iTextPos;
+ TBool iHasFocus;
+ CArrayFixFlat<TPoint> *iPolyList;
+ CFbsBitmap iBitmap1;
+ CFbsBitmap iBitmap2;
+ CFbsBitmap iMask;
+ CFbsFont *iFont;
+ };
+
+class CTestAnimDll : public CAnimDll
+ {
+public:
+ CAnim *CreateInstanceL(TInt aType);
+private:
+ };
+
+/*#if defined(__WINS__)
+#pragma data_seg(".E32_UID")
+__WINS_UID(0, KWservAnimDllUidValue, 0)
+#pragma data_seg()
+#endif*/
+
+EXPORT_C CAnimDll *CreateCAnimDllL()
+ {
+ return(new(ELeave) CTestAnimDll());
+ }
+
+// Instance code //
+
+void CTestAnim::Animate(TDateTime *)
+ {
+ if (!iWindowFunctions->IsHidden())
+ {
+ iWindowFunctions->ActivateGc();
+ if (iPolyList)
+ DrawPolyLine();
+ }
+ if (iPolyList)
+ {
+ iPolyState=(iPolyState+1)%4;
+ TweakPolyList(iPolyState);
+ }
+ if (!iWindowFunctions->IsHidden())
+ {
+ if (iPolyList)
+ DrawPolyLine();
+ DrawText();
+ DrawBitmap();
+ }
+ iColor=(iColor+16)&0xFF;
+ }
+
+void CTestAnim::DrawPolyLine()
+ {
+ iGc->SetDrawMode(CGraphicsContext::EDrawModeXOR);
+ iGc->SetPenColor(TRgb(255,255,255));
+ iGc->DrawPolyLine(iPolyList);
+ iGc->SetDrawMode(CGraphicsContext::EDrawModePEN);
+ iGc->SetPenColor(TRgb(0,0,0));
+ }
+
+void CTestAnim::DrawBitmap()
+ {
+ iGc->SetClippingRegion(TRegionFix<1>(TRect(iPos,iSize)));
+ CFbsBitmap *bitmap=iFunctions->FlashStateOn() ? &iBitmap1 : &iBitmap2;
+ if (iMasked)
+ iGc->BitBltMasked(iPos,bitmap, TRect(iSize), &iMask,EFalse);
+ else
+ iGc->BitBlt(iPos,bitmap);
+ iGc->CancelClippingRegion();
+ }
+
+void CTestAnim::AppendTime(TDes& aTimeText,const TTime& aTime) const
+ {
+ _LIT(TimeFormat,"%:0%H%:1%T%:2%S");
+ TRAPD(err,aTime.FormatL(aTimeText,TimeFormat));
+ if (err!=KErrNone)
+ {
+ _LIT(DummyTime,"######");
+ aTimeText.Append(DummyTime);
+ }
+ }
+
+void CTestAnim::DrawText()
+ {
+ if (iHasFocus)
+ {
+ iGc->UseFont(iFont);
+ TBuf<0x20> timebuf;
+ TTime time(iFunctions->SystemTime());
+ AppendTime(timebuf,time);
+ TRect rect(iTextPos.iX,iTextPos.iY-iFont->AscentInPixels(),iTextPos.iX+iFont->TextWidthInPixels(timebuf),iTextPos.iY-iFont->AscentInPixels()+iFont->HeightInPixels());
+ iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
+ iGc->DrawText(timebuf,rect,iFont->AscentInPixels());
+ time.UniversalTime();
+ AppendTime(timebuf,time);
+ rect.Move(0,iFont->HeightInPixels());
+ iGc->DrawText(timebuf,rect,iFont->AscentInPixels());
+ }
+ }
+
+void CTestAnim::Redraw()
+ {
+ DrawText();
+ DrawBitmap();
+ if (iPolyList)
+ DrawPolyLine();
+ }
+
+void CTestAnim::ConstructL(TAny *aArgs, TBool aHasFocus)
+ {
+ iHasFocus=aHasFocus;
+ iPos=((CTAParams *)aArgs)->pos;
+ iFunctions->SetInterval(((CTAParams *)aArgs)->interval);
+ if (iBitmap1.Duplicate(((CTAParams *)aArgs)->bit1)!=KErrNone ||
+ iBitmap2.Duplicate(((CTAParams *)aArgs)->bit2)!=KErrNone ||
+ iMask.Duplicate(((CTAParams *)aArgs)->mask)!=KErrNone)
+ iFunctions->Panic();
+ iSize.iWidth=Min(iBitmap1.SizeInPixels().iWidth,iBitmap2.SizeInPixels().iWidth);
+ iSize.iHeight=Min(iBitmap1.SizeInPixels().iHeight,iBitmap2.SizeInPixels().iHeight);
+ iWiggleSize=10;
+ iFont=iFunctions->DuplicateFontL(((CTAParams *)aArgs)->font);
+ }
+
+void CTestAnim::SetPolyList(const TRect &aRect)
+ {
+ iPolyRect=aRect;
+ TSize halfsize=aRect.Size();
+ halfsize.iWidth>>=1;
+ halfsize.iHeight>>=1;
+ (*iPolyList)[0]=aRect.iTl;
+ (*iPolyList)[1]=TPoint(aRect.iTl.iX+iWiggleSize,aRect.iTl.iY+halfsize.iHeight);
+ (*iPolyList)[2]=TPoint(aRect.iTl.iX,aRect.iBr.iY);
+ (*iPolyList)[3]=TPoint(aRect.iTl.iX+halfsize.iWidth,aRect.iBr.iY-iWiggleSize);
+ (*iPolyList)[4]=aRect.iBr;
+ (*iPolyList)[5]=TPoint(aRect.iBr.iX-iWiggleSize,aRect.iTl.iY+halfsize.iHeight);
+ (*iPolyList)[6]=TPoint(aRect.iBr.iX,aRect.iTl.iY);
+ (*iPolyList)[7]=TPoint(aRect.iTl.iX+halfsize.iWidth,aRect.iTl.iY+iWiggleSize);
+ (*iPolyList)[8]=aRect.iTl;
+ TweakPolyList(iPolyState);
+ }
+
+void CTestAnim::TweakPolyList(TInt aState)
+ {
+ TSize halfsize=iPolyRect.Size();
+ halfsize.iWidth>>=1;
+ halfsize.iHeight>>=1;
+ switch(aState)
+ {
+ case 0:
+ (*iPolyList)[7]=TPoint(iPolyRect.iTl.iX+halfsize.iWidth,iPolyRect.iTl.iY+iWiggleSize);
+ (*iPolyList)[1]=TPoint(iPolyRect.iTl.iX,iPolyRect.iTl.iY+halfsize.iHeight);
+ break;
+ case 1:
+ (*iPolyList)[1]=TPoint(iPolyRect.iTl.iX+iWiggleSize,iPolyRect.iTl.iY+halfsize.iHeight);
+ (*iPolyList)[3]=TPoint(iPolyRect.iTl.iX+halfsize.iWidth,iPolyRect.iBr.iY);
+ break;
+ case 2:
+ (*iPolyList)[3]=TPoint(iPolyRect.iTl.iX+halfsize.iWidth,iPolyRect.iBr.iY-iWiggleSize);
+ (*iPolyList)[5]=TPoint(iPolyRect.iBr.iX,iPolyRect.iTl.iY+halfsize.iHeight);
+ break;
+ case 3:
+ (*iPolyList)[5]=TPoint(iPolyRect.iBr.iX-iWiggleSize,iPolyRect.iTl.iY+halfsize.iHeight);
+ (*iPolyList)[7]=TPoint(iPolyRect.iTl.iX+halfsize.iWidth,iPolyRect.iTl.iY);
+ break;
+ }
+ }
+
+void CTestAnim::InvalidateText()
+ {
+ TRect invalidate;
+ invalidate.iTl.iX=iTextPos.iX;
+ invalidate.iTl.iY=iTextPos.iY-iFont->AscentInPixels();
+ invalidate.iBr.iX=iTextPos.iX+iFont->TextWidthInPixels(ANIM_TEST_TEXT);
+ invalidate.iBr.iY=iTextPos.iY+iFont->DescentInPixels();
+ iWindowFunctions->Invalidate(invalidate);
+ }
+
+void CTestAnim::InvalidateBitmap()
+ {
+ iWindowFunctions->Invalidate(TRect(iPos,iSize));
+ }
+
+void CTestAnim::Command(TInt aOpcode, TAny *aArgs)
+ {
+ switch(aOpcode)
+ {
+ case EADllOpcodeMove:
+ {
+ InvalidateBitmap();
+ iPos=((CTAParams *)aArgs)->pos;
+ iWindowFunctions->ActivateGc();
+ DrawBitmap();
+ iFunctions->SetInterval(((CTAParams *)aArgs)->interval);
+ }
+ break;
+ case EADllTextPos:
+ {
+ InvalidateText();
+ iTextPos=((CTAParams *)aArgs)->pos;
+ iWindowFunctions->ActivateGc();
+ DrawText();
+ }
+ break;
+ case EADllToggleBitmapMask:
+ iMasked=!iMasked;
+ InvalidateBitmap();
+ break;
+ }
+ }
+
+TInt CTestAnim::CommandReplyL(TInt aOpcode, TAny *aArgs)
+ {
+ switch(aOpcode)
+ {
+ case EADllOpcodePolyLineRect:
+ iWindowFunctions->ActivateGc();
+ if (!iPolyList)
+ {
+ iPolyList=new(ELeave) CArrayFixFlat<TPoint>(ENumPolyPoints);
+ TPoint zeropoint;
+ for(TInt i=0;i<ENumPolyPoints;i++)
+ iPolyList->AppendL(zeropoint);
+ }
+ else
+ DrawPolyLine();
+ SetPolyList(*((TRect *)aArgs));
+ DrawPolyLine();
+ break;
+ default:
+ iFunctions->Panic();
+ }
+ return(KErrNone);
+ }
+
+CTestAnim::~CTestAnim()
+ {
+ delete iPolyList;
+ iFunctions->CloseFont(iFont);
+ }
+
+void CTestAnim::FocusChanged(TBool aNewState)
+ {
+ iHasFocus=aNewState;
+ InvalidateText();
+ InvalidateBitmap();
+ }
+
+TBool CTestAnim::OfferRawEvent(const TRawEvent &/*aRawEvent*/)
+ {
+ return EFalse;
+ }
+
+// DLL code //
+
+CAnim *CTestAnimDll::CreateInstanceL(TInt )
+ {
+ return(new(ELeave) CTestAnim());
+ }
+
+// Dummy E32Dll needed by E32 to build //
+