--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/windowing/windowserver/test/CONNECT.CPP Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,1956 @@
+// Copyright (c) 1994-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:
+// Very simple test program to connect to the window server
+//
+//
+
+#include <e32std.h>
+#include "W32STD.H"
+#include <e32svr.h>
+#include "../SERVER/w32cmd.h"
+#include "../tlib/testbase.h"
+#include "ANIMWIN.H"
+#include "HNDLODR.H"
+
+#define TEST_BITMAP_NAME _L("Z:\\WSTEST\\TEST.MBM")
+_LIT(KTestFontTypefaceName,"DejaVu Sans Condensed");
+
+//
+// TestWindow class
+//
+
+class TestClient; // Forward reference
+
+class TestWindow1 : public CTWin
+ {
+public:
+ TestWindow1();
+ void Resized(const TSize &aNewSize);
+ void Draw();
+ void WinKeyL(const TKeyEvent &aKey,const TTime &);
+private:
+ TBool iDrawPolygon;
+ };
+
+class TestWindow2 : public CTWin
+ {
+ enum EPointerState
+ {
+ EPointerIn,
+ EPointerOut,
+ EPointerUndefined,
+ };
+public:
+ TestWindow2();
+ ~TestWindow2();
+ void InitWinL();
+ void Draw();
+ void PointerL(const TPointerEvent &aPointer,const TTime &aTime);
+ void WinKeyL(const TKeyEvent &aKey,const TTime &aTime);
+ void NewText(TPoint &pos,TInt &width,TDes &des);
+ void PointerState(EPointerState aState);
+ void PointerEnter(const TTime &aTime);
+ void PointerExit(const TTime &aTime);
+ void SetBufBits();
+ void RequestPointerRepeat();
+private:
+ void SwitchOn(const TTime &aTime);
+private:
+ TBuf<0x40> iBuf;
+ TBuf<0x40> iBufBits;
+ TBuf<0x40> iBufMem;
+ TPoint iPos;
+ TPoint iPosBits;
+ TPoint iPosMem;
+ TInt iWid;
+ TInt iWidBits;
+ TInt iWidMem;
+ TInt iFontHeight;
+ EPointerState iPointerState;
+ TUint32 iFilter;
+ TBool iCapture;
+ TBool iGrab;
+ TRgb iBackColor;
+ TInt iRepeatCount;
+ TRect iRepeatRect;
+ };
+
+class TestWindow3 : public CTWin
+ {
+public:
+ TestWindow3();
+ ~TestWindow3();
+ void Draw();
+ void InitWinL();
+ void WinKeyL(const TKeyEvent &aKey,const TTime &aTime);
+ void Resized(const TSize &aNewSize);
+ void SetShape(TInt aShapeNum);
+ void ScreenDeviceChangedL();
+private:
+ CWsBitmap *iBitmap;
+ TInt iShapeNum;
+ TInt iCornerFlags;
+ TCornerType iCornerType;
+ };
+
+class TestWindow4 : public CTWin
+ {
+public:
+ TestWindow4();
+ void InitWin();
+ void WinKeyL(const TKeyEvent &aKey,const TTime &aTime);
+ void Resized(const TSize &aSize);
+ void Draw();
+ void Draw(TBool aSetCursor);
+private:
+ void SetSwappedSize();
+ void SetCursor(const TPoint &aPos);
+private:
+ TBuf<300> TxtBuf;
+ TPoint iBasePos;
+ TBool iVertical;
+ TSize iSwappedSize;
+ //TInt iTemp;
+ };
+
+class TestWindow5 : public CTBackedUpWin
+ {
+public:
+ TestWindow5(TBool aGrey2);
+ void Draw();
+ void InitWinL();
+ void WinKeyL(const TKeyEvent &aKey,const TTime &aTime);
+ void Resized(const TSize &aNewSize);
+private:
+ CFbsBitmap iBrushBit;
+ TInt iOrdPri;
+ };
+
+class TestWindow6 : public CTBackedUpWin
+ {
+public:
+ enum {KPointerMoveBufferSize=32};
+public:
+ TestWindow6(TBool aGrey2);
+ ~TestWindow6();
+ void Draw();
+ void InitWinL();
+ void PointerL(const TPointerEvent &aPointer,const TTime &aTime);
+ void WinKeyL(const TKeyEvent &aKey,const TTime &aTime);
+ virtual void AssignGC(CWindowGc &aGc);
+ void Resized(const TSize &aNewSize);
+ void PointerBufferReady(const TTime &aTime);
+private:
+ TSize iOldSize; // Needed as part of resizing after old size has been lost
+ TBool iDragging;
+ TInt iGray;
+ CWindowGc *iGc2;
+ CWindowGc *iCurGc;
+ };
+
+class TestWindow7 : public CTBackedUpWin
+ {
+private:
+ enum {EPointerModes=3};
+public:
+ TestWindow7(TBool aGrey2);
+ ~TestWindow7();
+ void InitWinL();
+ void Draw();
+ void WinKeyL(const TKeyEvent &aKey,const TTime &aTime);
+ void Resized(const TSize &aNewSize);
+/*private:
+ void createBitmapL(CFbsBitmap *aBitmap, CFbsBitmapDevice *&aBitmapDevice, const TSize &aSize, TBool aDoMask);
+ void createBitmap2L(CFbsBitmap *aBitmap, CFbsBitmapDevice *&aBitmapDevice, const TSize &aSize, TBool aDoMask);
+ void InitPointerCursorL(RWsPointerCursor &aSprite, const TSize &aSize, TInt aFlags);
+ void InitSpriteL(RWsSprite &aSprite, const TPoint &aPos, const TSize &aSize, TTimeIntervalMicroSeconds32 aOnTime, TTimeIntervalMicroSeconds32 aOffTime, TInt aFlags);*/
+private:
+ CTSprite *iSprite1;
+ CTSprite *iSprite2;
+ CTSprite *iSprite3;
+ CTSprite *iSprite4;
+ CTSprite *iSprite5;
+ CTPointerCursor *iPointerCursor;
+ CFbsBitmap *iSpriteBitmap;
+ CFbsBitmap *iSpriteMaskBitmap;
+ TInt iPointerMode;
+ TPoint iPos1;
+ TPoint iPos2;
+ TPoint iPos3;
+ TPoint iPos4;
+ TPoint iPos5;
+ TPoint *iCurPos;
+ CTSprite *iCurSprite;
+ };
+
+class TestWindow8 : public CTBlankWindow
+ {
+public:
+ TestWindow8();
+ void Draw();
+ void InitWin();
+ };
+
+class TestWindow9 : public CTWin
+ {
+public:
+ TestWindow9();
+ void Draw();
+ void WinKeyL(const TKeyEvent &aKey,const TTime &);
+ void InitWinL();
+ void Play();
+private:
+ CFbsBitmap iBitmap;
+ TSize iVideoSize;
+ };
+
+class TestWindow10 : public CTWin
+ {
+public:
+ TestWindow10();
+ void Draw();
+ void InitWin();
+ void WinKeyL(const TKeyEvent &aKey,const TTime &);
+ };
+
+class TestWindow12 : public CTWin
+ {
+public:
+ TestWindow12();
+ void Draw();
+ void InitWin();
+ void WinKeyL(const TKeyEvent &aKey,const TTime &);
+ };
+
+class TestWindowGroup : public CTWindowGroup
+ {
+public:
+ TestWindowGroup(CTClient *aClient);
+ virtual void ConstructL();
+ virtual void KeyL(const TKeyEvent &aKey,const TTime &aTime);
+ void ScreenDeviceChanged();
+ void RunLaunchAndShootTestL();
+ void MillionsOfSessions();
+ inline void SetHandWriting(CHandWriting* aHand) {iHand=aHand;}
+private:
+ CHandWriting* iHand;
+ TBool iIncludeChildren;
+ };
+
+class TestClient : public CTClient
+ {
+public:
+ TestClient();
+ ~TestClient();
+ void ConstructL();
+ TInt EventLoop();
+ void Exit();
+ void SetCurrentWindow(CTWinBase *aWindow);
+ CTBaseWin *CreateTestWindowL(TInt type,TPoint pos,TSize size,CTWinBase *parent,CWindowGc &gc,TBool aAlternate=EFalse);
+ void AdjustLightSource(TInt aX,TInt aY);
+private:
+ inline TestWindowGroup* TestWindow() {return STATIC_CAST(TestWindowGroup*,iGroup);}
+private:
+ CHandWriting *iHandWriting;
+ TPoint ShadowOffset;
+ };
+
+//const TInt Xmove=8;
+//const TInt Ymove=6;
+const TInt Xmove=1;
+const TInt Ymove=1;
+
+LOCAL_D const TUint KTestThreadHeapSize=0x10000;
+
+enum TConnectPanic
+ {
+ EConnectPanicRedrawToBackedUpWindow,
+ EConnectPanicRequiredDisplayMode,
+ EConnectPanicDragEvent,
+ };
+
+TInt RunLaunchAndShootTest(TAny *);
+
+void Panic(TInt aPanic)
+ {
+ User::Panic(_L("CONNECT"),aPanic);
+ }
+
+//
+// Individual window sub-classes
+//
+
+TestWindow1::TestWindow1() : CTWin()
+ {
+ __DECLARE_NAME(_S("TestWindow1"));
+ }
+
+void TestWindow1::Draw()
+//This function is virtual and so cannot have an 'L' at the end of it's name
+ {
+ TInt i;
+
+ iGc->SetBrushColor(TRgb::Gray16(14));
+ iGc->Clear();
+ iGc->SetPenColor(TRgb::Gray16(8));
+ iGc->SetBrushColor(TRgb::Gray16(0));
+ iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
+ CArrayFixFlat<TPoint> *pnts;
+ pnts=new(ELeave) CArrayFixFlat<TPoint>(20);
+ TPoint mid(iSize.iWidth>>1,iSize.iHeight>>1);
+ for(i=0;i<mid.iX;i+=4)
+ {
+ pnts->AppendL(TPoint(mid.iX-i,mid.iY-i));
+ pnts->AppendL(TPoint(mid.iX+i+1,mid.iY-i-1));
+ pnts->AppendL(TPoint(mid.iX+i+2,mid.iY+i+2));
+ pnts->AppendL(TPoint(mid.iX-i-3,mid.iY+i+3));
+ }
+ if (iDrawPolygon)
+ iGc->DrawPolygon(pnts,CGraphicsContext::EAlternate);
+ else
+ iGc->DrawPolyLine(pnts);
+ delete pnts;
+//
+ TPoint polygon[8];
+ polygon[0]=TPoint(mid.iX-8,mid.iY-16);
+ polygon[1]=TPoint(mid.iX+8,mid.iY-16);
+ polygon[2]=TPoint(mid.iX+16,mid.iY-8);
+ polygon[3]=TPoint(mid.iX+16,mid.iY+8);
+ polygon[4]=TPoint(mid.iX+8,mid.iY+16);
+ polygon[5]=TPoint(mid.iX-8,mid.iY+16);
+ polygon[6]=TPoint(mid.iX-16,mid.iY+8);
+ polygon[7]=TPoint(mid.iX-16,mid.iY-8);
+ iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
+ iGc->DrawPolygon(&polygon[0],sizeof(polygon)/sizeof(polygon[0]));
+ }
+
+void TestWindow1::Resized(const TSize &aNewSize)
+ {
+ iWin.Invalidate();
+ CTBaseWin::Resized(aNewSize);
+ }
+
+/*void AFunction(TDesC& des)
+ {
+ TDesC *abc=&des;
+ TInt a=3+4;
+ }
+
+void AFunction2(TDes& des)
+ {
+ TDes *abc=&des;
+ TInt a=3+4;
+ }*/
+
+void TestWindow1::WinKeyL(const TKeyEvent &aKey,const TTime &)
+ {
+ if (aKey.iCode=='p')
+ {
+ RWindow win1(Client()->iWs);
+ win1.Construct(iWin,1);
+ RWindow win2(Client()->iWs);
+ win2.Construct(win1,1);
+ win1.Close();
+ win2.SetExtent(TPoint(1,2),TSize(3,4));
+ Client()->iWs.Flush();
+ }
+ else if (aKey.iCode=='q' || aKey.iCode=='Q')
+ {
+ RWindowGroup group1(Client()->iWs);
+ RWindowGroup group2(Client()->iWs);
+ group1.Construct(1);
+ group2.Construct(2);
+ group1.DefaultOwningWindow();
+ group2.DefaultOwningWindow();
+ group1.DefaultOwningWindow();
+ group1.Close();
+ group2.Close();
+ Client()->iWs.Flush();
+ }
+ else if (aKey.iCode=='w' || aKey.iCode=='W')
+ {
+ RWindowGroup group1(Client()->iWs);
+ RWindowGroup group2(Client()->iWs);
+ group1.Construct(1);
+ group2.Construct(2);
+ group1.DefaultOwningWindow();
+ group2.DefaultOwningWindow();
+ group1.DefaultOwningWindow();
+ group2.Close();
+ group1.Close();
+ Client()->iWs.Flush();
+ }
+ else if (aKey.iCode=='A' || aKey.iCode=='a')
+ {
+ /*RWindowGroup group(Client()->iWs);
+ group.Construct(1);*/
+ RDrawableWindow* win=new(ELeave) RBackedUpWindow(Client()->iWs);
+ User::LeaveIfError(((RBackedUpWindow*)win)->Construct(*Client()->iGroup->GroupWin(),EGray2,(TUint32)this));
+ User::LeaveIfError(win->SetExtentErr(TPoint(20,20),TSize(600,200)));
+ win->Activate();
+ }
+ else if (aKey.iCode=='B' || aKey.iCode=='b')
+ {
+ RWindowGroup group(Client()->iWs);
+ group.Construct(344);
+ //group.EnableReceiptOfFocus(EFalse);
+ RBlankWindow blank(Client()->iWs);
+ blank.Construct(group,345);
+ blank.SetOrdinalPosition(0,1000);
+ //blank.SetShadowHeight(0);
+ //blank.SetShadowDisabled(ETrue);
+ blank.Activate();
+ RWindow window(Client()->iWs);
+ window.Construct(group,346);
+ }
+ /*else if (aKey.iCode=='Z' || aKey.iCode=='z') //TDes8 TPtr8 TPtrC8 TBufCBase8 TBuf8
+ {
+ TBuf<4> buf2(_L("1234"));
+ TBuf<4> buf(_L("abcd"));
+ TBufC<4> bufC(_L("WXYZ"));
+ HBufC *hbuf=HBufC::NewL(4);
+ TPtr pHBuf=hbuf->Des();
+ pHBuf=buf2;
+ TPtr ptr(hbuf->Des());
+ //AFunction(ptr);
+ TPtrC ptrC1(buf);
+ //AFunction(ptrC1);
+ TPtrC ptrC2(bufC);
+ //AFunction(ptrC2);
+ TPtrC ptrC3(hbuf->Des());
+ AFunction(ptrC3);
+ AFunction(buf);
+ AFunction(bufC);
+ AFunction(*hbuf);
+ AFunction2(ptr);
+ AFunction2(buf);
+ }*/
+ if (aKey.iCode==' ')
+ {
+ iDrawPolygon=!iDrawPolygon;
+ iWin.Invalidate();
+ }
+ }
+
+TestWindow2::TestWindow2() : CTWin(),
+ iWid(0), iFontHeight(16), iPointerState(EPointerOut), iFilter(0), iCapture(EFalse), iGrab(EFalse)
+ {
+ __DECLARE_NAME(_S("TestWindow2"));
+ }
+
+TestWindow2::~TestWindow2()
+ {
+ }
+
+void TestWindow2::InitWinL()
+ {
+ iPos.SetXY(40,iFont->AscentInPixels()+10);
+ TPoint next(0,iFont->HeightInPixels()+10);
+ iPosBits=iPos+next;
+ iPosMem=iPosBits+next;
+ iWin.PointerFilter(0xFFFFFFFF,iFilter);
+ User::LeaveIfError(iWin.EnableOnEvents());
+ iWin.ClaimPointerGrab();
+ }
+
+void TestWindow2::Draw()
+ {
+ TInt pen=0;
+ switch(iPointerState)
+ {
+ case EPointerIn:
+ pen=0;
+ break;
+ case EPointerOut:
+ pen=5;
+ break;
+ case EPointerUndefined:
+ pen=15;
+ break;
+ }
+ iGc->SetPenColor(TRgb::Gray16(pen));
+ iGc->SetBrushColor(iBackColor);
+ DrawBorder();
+ iGc->DrawText(iBuf,iPos);
+ iGc->DrawText(iBufBits,iPosBits);
+ iGc->DrawText(iBufMem,iPosMem);
+ }
+
+void TestWindow2::NewText(TPoint &pos,TInt &width,TDes &des)
+ {
+ TInt newWid=iFont->TextWidthInPixels(des);
+ Invalidate(TRect(pos-TSize(0,iFont->AscentInPixels()),pos+TSize(Max(width,newWid),iFont->DescentInPixels())));
+ width=newWid;
+ }
+
+void TestWindow2::PointerState(EPointerState aState)
+ {
+ switch(aState)
+ {
+ case EPointerIn:
+ iBackColor=TRgb::Gray16(15);
+ break;
+ case EPointerOut:
+ iBackColor=TRgb::Gray16(12);
+ break;
+ case EPointerUndefined:
+ iBackColor=TRgb::Gray16(4);
+ break;
+ }
+ iWin.SetBackgroundColor(iBackColor);
+ Invalidate();
+ iPointerState=aState;
+ }
+
+void TestWindow2::SwitchOn(const TTime &)
+ {
+ iWin.SetBackgroundColor(TRgb(0,0,0));
+ Client()->iWs.Flush();
+ User::After(TTimeIntervalMicroSeconds32(500000));
+ PointerState(iPointerState);
+ }
+
+void TestWindow2::PointerEnter(const TTime &)
+ {
+ PointerState(EPointerIn);
+ }
+
+void TestWindow2::PointerExit(const TTime &)
+ {
+ PointerState(EPointerOut);
+ }
+
+void TestWindow2::RequestPointerRepeat()
+ {
+ iWin.RequestPointerRepeatEvent(TTimeIntervalMicroSeconds32(200000),iRepeatRect);
+ }
+
+void TestWindow2::PointerL(const TPointerEvent &pointer,const TTime &aTime)
+ {
+ if (pointer.iType==TPointerEvent::EButtonRepeat)
+ {
+ iRepeatCount++;
+ SetBufBits();
+ RequestPointerRepeat();
+ }
+ else
+ {
+ iRepeatCount=0;
+ CTWin::PointerL(pointer,aTime);
+ iBuf.Format(TRefByValue<const TDesC>(_L("Pos(%d,%d)(%d,%d), 0x%x")),pointer.iPosition.iX,pointer.iPosition.iY,pointer.iParentPosition.iX,pointer.iParentPosition.iY,pointer.iModifiers);
+ NewText(iPos,iWid,iBuf);
+ if (pointer.iType==TPointerEvent::EButton1Down)
+ {
+ iRepeatRect=TRect(pointer.iPosition-TPoint(5,5),pointer.iPosition+TPoint(5,5));
+ RequestPointerRepeat();
+ }
+ SetBufBits();
+ }
+ }
+
+void TestWindow2::SetBufBits()
+ {
+ iBufBits.Format(TRefByValue<const TDesC>(_L("Filter=0x%x, Capture[%s], Grab[%s], Repeat[%d]")),iFilter,
+ iCapture ? _S("On") : _S("Off"),
+ iGrab ? _S("On") : _S("Off"),
+ iRepeatCount);
+ NewText(iPosBits,iWidBits,iBufBits);
+ Invalidate();
+ }
+
+void TestWindow2::WinKeyL(const TKeyEvent &aKey,const TTime &)
+ {
+ switch(aKey.iCode)
+ {
+ case ',': // Unshifted <
+ case '.': // Unshifted >
+ {
+ if (aKey.iCode==',')
+ {
+ if (iFontHeight>1)
+ iFontHeight-=1;
+ }
+ else
+ iFontHeight+=1;
+ CFbsFont *newFont;
+ TFontSpec fspec(KTestFontTypefaceName,iFontHeight*KTwipsPerPoint);
+ User::LeaveIfError(Client()->iScreen->GetNearestFontToDesignHeightInTwips((CFont *&)newFont, fspec));
+
+ Client()->iScreen->ReleaseFont(iFont);
+ iFont=newFont;
+ iWid=iFont->TextWidthInPixels(iBuf);
+ Invalidate();
+ }
+ break;
+ case '?':
+ iBufMem.Format(TRefByValue<const TDesC>(_L("Count=%d")),Client()->iWs.HeapCount());
+ NewText(iPosMem,iWidMem,iBufMem);
+ break;
+ case 'c':
+ iCapture=(TBool)!iCapture;
+ iWin.SetPointerCapture(iCapture);
+ SetBufBits();
+ break;
+ case 'g':
+ iGrab=(TBool)!iGrab;
+ iWin.SetPointerGrab(iGrab);
+ SetBufBits();
+ break;
+ case ' ':
+ {
+ iFilter=(iFilter+1)%8;
+ iWin.PointerFilter(0xFFFFFFFF,iFilter);
+ SetBufBits();
+ if (iFilter&EPointerFilterEnterExit)
+ PointerState(EPointerUndefined);
+ else
+ PointerState(EPointerOut);
+ }
+ case 's':
+ case 'S':
+ {
+ CWsBitmap* bitmap=new(ELeave) CWsBitmap(Client()->iWs);
+ CleanupStack::PushL(bitmap);
+ User::LeaveIfError(bitmap->Create(Client()->iScreen->SizeInPixels(),EGray4));
+ User::LeaveIfError(Client()->iScreen->CopyScreenToBitmap(bitmap));
+ CleanupStack::Pop();
+ }
+ break;
+ default:
+ iBufMem.Format(TRefByValue<const TDesC>(_L("Key=%d")),aKey.iCode);
+ NewText(iPosMem,iWidMem,iBufMem);
+ break;
+ }
+ }
+
+TestWindow3::TestWindow3() : CTWin()
+ {
+ __DECLARE_NAME(_S("TestWindow3"));
+ }
+
+TestWindow3::~TestWindow3()
+ {
+ delete iBitmap;
+ }
+
+void TestWindow3::Resized(const TSize &aNewSize)
+ {
+ CTBaseWin::Resized(aNewSize);
+ SetShape(iShapeNum);
+ DrawNow();
+ }
+
+void TestWindow3::InitWinL()
+ {
+ iCornerType=EWindowCorner3;
+ iWin.PointerFilter(EPointerFilterDrag,0); // Clear drag filter
+ iWin.SetPointerGrab(ETrue);
+ iWin.SetBackgroundColor(TRgb::Gray256(230));
+ iWin.SetCornerType(iCornerType);
+ iBitmap=new(ELeave) CWsBitmap(Client()->iWs);
+ User::LeaveIfError(iBitmap->Load(TEST_BITMAP_NAME,0));
+ iSize=iBitmap->SizeInPixels();
+ }
+
+void TestWindow3::Draw()
+ {
+ iGc->BitBlt(TPoint(0,0),iBitmap);
+ TSize bitSize(iBitmap->SizeInPixels());
+ TSize winSize(Size());
+ iGc->Clear(TRect(bitSize.iWidth,0,winSize.iWidth,bitSize.iHeight));
+ iGc->Clear(TRect(0,bitSize.iHeight,winSize.iWidth,winSize.iHeight));
+ }
+
+void TestWindow3::SetShape(TInt aShapeNum)
+ {
+ iShapeNum=aShapeNum;
+ TSize size=Size();
+ switch(iShapeNum)
+ {
+ case 0:
+ {
+ TRegionFix<4> shape;
+ shape.AddRect(TRect(0,0,size.iWidth,size.iHeight>>2));
+ shape.AddRect(TRect(0,size.iHeight>>2,size.iWidth>>2,size.iHeight-(size.iHeight>>2)));
+ shape.AddRect(TRect(size.iWidth-(size.iWidth>>2),size.iHeight>>2,size.iWidth,size.iHeight-(size.iHeight>>2)));
+ shape.AddRect(TRect(0,size.iHeight-(size.iHeight>>2),size.iWidth,size.iHeight));
+ iWin.SetShape(shape);
+ }
+ break;
+ case 1:
+ {
+ TRegionFix<3> shape;
+ shape.AddRect(TRect(size.iWidth>>2,0,size.iWidth-(size.iWidth>>2),size.iHeight>>2));
+ shape.AddRect(TRect(0,size.iHeight>>2,size.iWidth,size.iHeight-(size.iHeight>>2)));
+ shape.AddRect(TRect(size.iWidth>>2,size.iHeight-(size.iHeight>>2),size.iWidth-(size.iWidth>>2),size.iHeight));
+ iWin.SetShape(shape);
+ }
+ break;
+ case 2:
+ {
+ RRegion shape;
+ for(TInt index=0;index<(size.iHeight-1);index++)
+ {
+ TInt xFactor=(size.iWidth>>1)*index/size.iHeight;
+ shape.AddRect(TRect((size.iWidth>>1)-xFactor,index,(size.iWidth>>1)+xFactor,index+1));
+ }
+ iWin.SetShape(shape);
+ shape.Close();
+ }
+ break;
+ }
+ }
+
+void TestWindow3::WinKeyL(const TKeyEvent &aKey,const TTime &)
+ {
+ if (aKey.iCode=='f')
+ {
+ TSize scrSize(Client()->iScreen->SizeInPixels());
+ if (scrSize==iWin.Size())
+ {
+ scrSize.iWidth/=2;
+ scrSize.iHeight/=2;
+ }
+ SetExtL(TPoint(),scrSize);
+ }
+ else if (aKey.iCode>='0' && aKey.iCode<='5')
+ {
+ switch(aKey.iCode)
+ {
+ case '0':
+ iCornerType=EWindowCornerSquare;
+ break;
+ case '1':
+ iCornerType=EWindowCorner1;
+ break;
+ case '2':
+ iCornerType=EWindowCorner2;
+ break;
+ case '3':
+ iCornerType=EWindowCorner3;
+ break;
+ case '5':
+ iCornerType=EWindowCorner5;
+ break;
+ }
+ iWin.SetCornerType(iCornerType,iCornerFlags);
+ }
+ else switch(User::LowerCase(aKey.iCode))
+ {
+ case '6':
+ SetShape(0);
+ break;
+ case '7':
+ SetShape(1);
+ break;
+ case '8':
+ SetShape(2);
+ break;
+ case 'a':
+ iCornerFlags^=EWindowCornerNotTL;
+ goto setcorner;
+ case 'b':
+ iCornerFlags^=EWindowCornerNotTR;
+ goto setcorner;
+ case 'c':
+ iCornerFlags^=EWindowCornerNotBL;
+ goto setcorner;
+ case 'd':
+ iCornerFlags^=EWindowCornerNotBR;
+setcorner: iWin.SetCornerType(iCornerType,iCornerFlags);
+ break;
+ }
+ }
+
+void TestWindow3::ScreenDeviceChangedL()
+ {
+ TSize scrSize(Client()->iScreen->SizeInPixels());
+ if (scrSize==iWin.Size())
+ {
+ scrSize.iWidth/=2;
+ scrSize.iHeight/=2;
+ }
+ SetExtL(TPoint(),scrSize);
+ }
+
+TestWindow4::TestWindow4() : CTWin()
+ {
+ __DECLARE_NAME(_S("TestWindow4"));
+ }
+
+void TestWindow4::SetSwappedSize()
+ {
+ if (iVertical)
+ {
+ iSwappedSize.iHeight=iSize.iWidth;
+ iSwappedSize.iWidth=iSize.iHeight;
+ }
+ else
+ iSwappedSize=iSize;
+ }
+
+void TestWindow4::InitWin()
+ {
+ iBasePos.SetXY(10,20);
+ iWin.SetBackgroundColor();
+ SetSwappedSize();
+ //iTemp=1;
+ }
+
+void TestWindow4::Resized(const TSize &aSize)
+ {
+ CTBaseWin::Resized(aSize);
+ SetSwappedSize();
+ Invalidate();
+ iWin.BeginRedraw();
+ iGc->Activate(iWin);
+ iGc->UseFont((CFont *)iFont);
+ Draw(ETrue);
+ iGc->Deactivate();
+ iWin.EndRedraw();
+ }
+
+void TestWindow4::Draw()
+ {
+ Draw(EFalse);
+ }
+
+void TestWindow4::Draw(TBool aSetCursor)
+ {
+ TPoint tl(iBasePos.iX,iBasePos.iY-iFont->AscentInPixels());
+ TRect rect(1,1,iSize.iWidth-1,iSize.iHeight);
+//
+ /*switch (iTemp)
+ {
+ case 1:
+ iGc->SetBrushColor(TRgb::Gray4(2));
+ break;
+ case 2:*/
+ iGc->SetBrushColor(TRgb::Gray16(13));
+ /*break;
+ case 3:
+ iGc->SetBrushColor(TRgb::Gray16(12));
+ break;
+ case 4:
+ iGc->SetBrushColor(TRgb::Gray16(11));
+ default:
+ break;
+ }*/
+ iGc->Clear(rect);
+//
+ TPoint pos(iBasePos);
+ iGc->SetPenColor(TRgb::Gray16(0));
+ iGc->DrawRect(TRect(iSize));
+ TInt index=0;
+ TInt ToGo=TxtBuf.Length();
+ TInt lineHeight=iFont->HeightInPixels()+2;
+ rect.iTl.iY=rect.iBr.iY=tl.iY;
+ while((pos.iY+iFont->DescentInPixels())<(iSwappedSize.iHeight-1))
+ {
+ rect.iBr.iY+=lineHeight;
+ iGc->Clear(rect);
+ if (ToGo>0)
+ {
+ TInt len=iFont->TextCount(TxtBuf.Right(ToGo),iSwappedSize.iWidth-2*pos.iX);
+ if (len==0)
+ len=1;
+ if (iVertical)
+ iGc->DrawTextVertical(TxtBuf.Mid(index,len),TPoint(pos.iY,iSize.iHeight-pos.iX),ETrue);
+ else
+ iGc->DrawText(TxtBuf.Mid(index,len),pos);
+ ToGo-=len;
+ if (ToGo==0 && aSetCursor)
+ {
+ TPoint cursorPos;
+ if (iVertical)
+ cursorPos=TPoint(pos.iY-iFont->AscentInPixels(),iSize.iHeight-pos.iX)+TPoint(0,iFont->TextWidthInPixels(TxtBuf.Mid(index,len)));
+ else
+ cursorPos=pos+TPoint(iFont->TextWidthInPixels(TxtBuf.Mid(index,len)),0);
+ SetCursor(cursorPos);
+ }
+ index+=len;
+ }
+ pos.iY+=lineHeight;
+ rect.iTl.iY=rect.iBr.iY;
+ }
+ rect.iBr.iY=iSwappedSize.iHeight-1;
+ iGc->Clear(rect);
+ }
+
+void TestWindow4::SetCursor(const TPoint &aPos)
+ {
+ TTextCursor cursor;
+ cursor.iType=TTextCursor::ETypeRectangle;
+ if (iVertical)
+ {
+ cursor.iAscent=2;
+ cursor.iHeight=2;
+ cursor.iWidth=iFont->HeightInPixels();
+ }
+ else
+ {
+ cursor.iAscent=iFont->AscentInPixels();
+ cursor.iHeight=iFont->HeightInPixels();
+ cursor.iWidth=20;
+ }
+ cursor.iFlags=0;
+// cursor.iColor=TRgb(255,255,255);
+ cursor.iColor=TRgb(128,128,128);
+ Client()->iGroup->GroupWin()->SetTextCursor(iWin, aPos, cursor);
+ }
+
+void TestWindow4::WinKeyL(const TKeyEvent &aKey,const TTime &)
+ {
+ TChar chr=aKey.iCode;
+
+ if (aKey.iCode==32 && aKey.iModifiers&EModifierFunc)
+ {
+ iWin.Invalidate();
+ iVertical=!iVertical;
+ SetSwappedSize();
+ }
+ else if (aKey.iCode>=32 && aKey.iCode<4000)
+ {
+ TBool invalidate=EFalse;
+ if (TxtBuf.Length()==TxtBuf.MaxLength())
+ {
+ TxtBuf=TxtBuf.Right(TxtBuf.Length()-1);
+ invalidate=ETrue;
+ }
+ TxtBuf.Append(chr);
+
+ TPoint pos(iBasePos);
+ TInt index=0;
+ TInt ToGo=TxtBuf.Length();
+ while(ToGo>0)
+ {
+ TInt len=iFont->TextCount(TxtBuf.Right(ToGo),iSwappedSize.iWidth-2*pos.iX);
+ if (len==0)
+ len=1;
+ if (len==ToGo)
+ break;
+ index+=len;
+ ToGo-=len;
+ pos.iY+=iFont->HeightInPixels()+2;
+ }
+ pos.iX+=iFont->TextWidthInPixels(TxtBuf.Mid(index,ToGo-1));
+ if (invalidate)
+ iWin.Invalidate(TRect(iBasePos.iX,iBasePos.iY-iFont->AscentInPixels(),iSize.iWidth-iBasePos.iX,iSize.iHeight));
+ else
+ {
+ iGc->Activate(iWin);
+ iGc->UseFont(iFont);
+ if (iVertical)
+ iGc->DrawTextVertical(TxtBuf.Mid(index+ToGo-1,1),TPoint(pos.iY,iSize.iHeight-pos.iX),ETrue);
+ else
+ iGc->DrawText(TxtBuf.Mid(index+ToGo-1,1),pos);
+ iGc->Deactivate();
+ }
+ pos.iX+=iFont->TextWidthInPixels(TxtBuf.Mid(index+ToGo-1));
+ SetCursor(iVertical ? TPoint(pos.iY-iFont->AscentInPixels(),iSize.iHeight-pos.iX) : pos);
+ }
+ }
+
+TestWindow5::TestWindow5(TBool aGrey2) : CTBackedUpWin(aGrey2?EGray2:EGray4)
+ {
+ __DECLARE_NAME(_S("TestWindow5"));
+ }
+
+void TestWindow5::Resized(const TSize &aNewSize)
+ {
+ CTBaseWin::Resized(aNewSize);
+ iGc->Activate(*DrawableWin());
+ iGc->SetBrushColor(TRgb::Gray256(128));
+ iGc->Clear(TRect(aNewSize));
+ iGc->UseBrushPattern(&iBrushBit);
+ iGc->SetBrushStyle(CGraphicsContext::EPatternedBrush);
+ iGc->DrawEllipse(TRect(aNewSize));
+ iGc->Deactivate();
+ }
+
+void TestWindow5::InitWinL()
+ {
+ iWin.PointerFilter(EPointerFilterMove|EPointerFilterEnterExit,EPointerFilterMove|EPointerFilterEnterExit);
+ iWin.SetPointerGrab(ETrue);
+ iOrdPri=-1;
+ iWin.SetOrdinalPosition(0,iOrdPri);
+ User::LeaveIfError(iBrushBit.Load(TEST_BITMAP_NAME,0));
+ }
+
+void TestWindow5::Draw()
+ {
+ Panic(EConnectPanicRedrawToBackedUpWindow);
+ }
+
+void TestWindow5::WinKeyL(const TKeyEvent &aKey,const TTime &)
+ {
+ switch(aKey.iCode)
+ {
+ case ' ':
+ iOrdPri=(iOrdPri<0)?1:-1;
+ iWin.SetOrdinalPosition(0,iOrdPri);
+ break;
+ case 'z':
+ SetPos(iPos-TPoint(2,1));
+ SetPos(iPos-TPoint(-1,-1));
+ SetPos(iPos-TPoint(2,3));
+ SetPos(iPos-TPoint(-2,-1));
+ SetPos(iPos-TPoint(-2,-3));
+ SetPos(iPos-TPoint(1,1));
+ break;
+ }
+ }
+
+TestWindow6::TestWindow6(TBool aGrey2) : CTBackedUpWin(aGrey2?EGray2:EGray16), iGray(0)
+ {
+ __DECLARE_NAME(_S("TestWindow6"));
+ }
+
+TestWindow6::~TestWindow6()
+ {
+ delete iGc;
+ delete iGc2;
+ }
+
+void TestWindow6::Resized(const TSize &aNewSize)
+ {
+ CTBaseWin::Resized(aNewSize);
+ iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
+ iGc->SetPenStyle(CGraphicsContext::ENullPen);
+ if (iOldSize.iWidth<aNewSize.iWidth)
+ iGc->DrawRect(TRect(iOldSize.iWidth,0,aNewSize.iWidth,iOldSize.iHeight));
+ if (iOldSize.iHeight<aNewSize.iHeight)
+ iGc->DrawRect(TRect(0,iOldSize.iHeight,aNewSize.iWidth,aNewSize.iHeight));
+ iGc->SetBrushStyle(CGraphicsContext::ENullBrush);
+ iGc->SetPenStyle(CGraphicsContext::ESolidPen);
+ iOldSize=aNewSize;
+ TPoint pos;
+ for(TInt index=0;index<3;index++)
+ {
+ pos.iY=index*aNewSize.iHeight/3;
+ for(pos.iX=0;pos.iX<aNewSize.iWidth;pos.iX++)
+ {
+ TInt val=pos.iX*255/aNewSize.iWidth;
+ TRgb rgb(index==0?val:0,index==1?val:0,index==2?val:0);
+ iGc->SetPenColor(rgb);
+ iGc->DrawLine(pos,pos+TSize(0,aNewSize.iHeight/3));
+ }
+ }
+ iGc->SetPenColor(TRgb(255,255,255));
+ }
+
+void TestWindow6::InitWinL()
+ {
+ iWin.PointerFilter(EPointerFilterMove|EPointerFilterEnterExit,EPointerFilterMove|EPointerFilterEnterExit);
+ User::LeaveIfError(iWin.AllocPointerMoveBuffer(KPointerMoveBufferSize,0));
+ iWin.DisablePointerMoveBuffer();
+ iWin.SetPointerGrab(ETrue);
+ iGc=new(ELeave) CWindowGc(Client()->iScreen);
+ User::LeaveIfError(iGc->Construct());
+ iGc2=new(ELeave) CWindowGc(Client()->iScreen);
+ User::LeaveIfError(iGc2->Construct());
+ iWin.SetCornerType(EWindowCorner1);
+ iGc->Activate(iWin);
+ iGc->SetBrushColor(TRgb::Gray256(230));
+ iGc2->Activate(iWin);
+ iGc2->SetBrushColor(TRgb::Gray256(230));
+ iCurGc=iGc;
+ }
+
+void TestWindow6::Draw()
+ {
+ Panic(EConnectPanicRedrawToBackedUpWindow);
+ }
+
+void TestWindow6::PointerBufferReady(const TTime &)
+ {
+ TPoint pnts[KPointerMoveBufferSize];
+ TPtr8 ptr((TUint8 *)&pnts,sizeof(pnts));
+ TInt numPnts=iWin.RetrievePointerMoveBuffer(ptr);
+ for(TInt index=0;index<numPnts;index++)
+ iCurGc->DrawLineTo(pnts[index]);
+ }
+
+void TestWindow6::PointerL(const TPointerEvent &pointer,const TTime &aTime)
+ {
+ switch(pointer.iType)
+ {
+ case TPointerEvent::EButton1Down:
+ if (pointer.iModifiers&(EModifierCtrl|EModifierShift))
+ {
+ iDragging=ETrue;
+ iWin.EnablePointerMoveBuffer();
+ if (pointer.iModifiers&EModifierCtrl)
+ iCurGc=iGc;
+ else if (pointer.iModifiers&EModifierShift)
+ iCurGc=iGc2;
+ iCurGc->MoveTo(pointer.iPosition);
+ return;
+ }
+ break;
+ case TPointerEvent::EButton1Up:
+ if (iDragging)
+ {
+ iDragging=EFalse;
+ iWin.DisablePointerMoveBuffer();
+ return;
+ }
+ default:;
+ }
+ CTBackedUpWin::PointerL(pointer,aTime);
+ }
+
+void TestWindow6::WinKeyL(const TKeyEvent &aKey,const TTime &)
+ {
+ if (TChar(aKey.iCode).IsDigit())
+ {
+ TInt wid=1;
+ for(TUint i=0;i<(aKey.iCode-'0');i++)
+ wid+=i;
+ iCurGc->SetPenSize(TSize(wid,wid));
+ }
+ else switch(aKey.iCode)
+ {
+ case ',': // Unshifted <
+ case '.': // Unshifted >
+ {
+ if (aKey.iCode==',')
+ {
+ if (iGray>0)
+ iGray-=1;
+ }
+ else if (iGray<15)
+ iGray+=1;
+ iCurGc->SetPenColor(TRgb::Gray16(iGray));
+ }
+ break;
+ }
+ }
+
+void TestWindow6::AssignGC(CWindowGc &)
+ {
+ }
+
+TestWindow7::TestWindow7(TBool aGrey2) : CTBackedUpWin(aGrey2?EGray2:EGray4)
+ {
+ __DECLARE_NAME(_S("TestWindow1"));
+ }
+
+TestWindow7::~TestWindow7()
+ {
+ delete iSpriteBitmap;
+ delete iSpriteMaskBitmap;
+ delete iPointerCursor;
+ delete iSprite4;
+ delete iSprite5;
+ delete iSprite2;
+ delete iSprite3;
+ delete iSprite1;
+ }
+
+void DrawPointerCursor(CBitmapContext *aGc,TInt , const TSize &aSize, TBool aDoMask, TAny *aMode)
+ {
+ TInt mode=*(TInt *)aMode;
+ aGc->SetBrushColor(TRgb::Gray4(aDoMask ? 0 : 2));
+ aGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
+ aGc->SetPenStyle(CGraphicsContext::ENullPen);
+ aGc->DrawRect(TRect(aSize));
+ TInt size=mode+1;
+ TRect rect1(0,aSize.iHeight/2-size,aSize.iWidth,aSize.iHeight/2+size);
+ TRect rect2(aSize.iWidth/2-size,0,aSize.iWidth/2+size,aSize.iHeight);
+//
+ if (!aDoMask)
+ {
+ aGc->SetPenStyle(CGraphicsContext::ESolidPen);
+ aGc->SetPenColor(TRgb::Gray4(0));
+ aGc->SetBrushStyle(CGraphicsContext::ENullBrush);
+ aGc->DrawRect(rect1);
+ aGc->DrawRect(rect2);
+ rect1.Shrink(1,1);
+ rect2.Shrink(1,1);
+ }
+//
+ aGc->SetPenStyle(CGraphicsContext::ENullPen);
+ aGc->SetBrushColor(TRgb::Gray4(aDoMask ? 3 : 1));
+ aGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
+ aGc->DrawRect(rect1);
+ aGc->DrawRect(rect2);
+ }
+
+void DrawSprite(CBitmapContext *aGc,TInt , const TSize &aSize, TBool aDoMask, TAny *)
+ {
+ aGc->SetBrushColor(TRgb::Gray4(aDoMask ? 0 : 2));
+ aGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
+ aGc->SetPenStyle(CGraphicsContext::ENullPen);
+ aGc->DrawRect(TRect(aSize));
+ aGc->SetPenStyle(CGraphicsContext::ESolidPen);
+ aGc->SetPenColor(TRgb::Gray4(aDoMask ? 3 : 0));
+ aGc->SetBrushColor(TRgb::Gray4(aDoMask ? 3 : 1));
+ aGc->DrawEllipse(TRect(aSize));
+ }
+
+void TestWindow7::InitWinL()
+ {
+ iPos1.SetXY(30,10);
+ iPos2.SetXY(50,40);
+ iPos3.SetXY(10,50);
+ iPos4.SetXY(10,10);
+ iPos5.SetXY(50,10);
+//
+ TSpriteCreateParams params(TSize(30,70),TPoint(0,0),DrawSprite);
+ TSpriteCreateParams paramarray[10];
+ params.iInterval=TTimeIntervalMicroSeconds32(200000);
+
+ paramarray[0]=params;
+ paramarray[1]=params;
+ paramarray[2]=params;
+ paramarray[1].iSize=TSize(20,30);
+ paramarray[2].iSize=TSize(100,10);
+ paramarray[2].iInterval=TTimeIntervalMicroSeconds32(200000);
+ iSprite1=new(ELeave) CTSprite(Client()->iWs);
+ iSprite1->ConstructL(iWin,iPos1,3,¶marray[0],ESpriteNoChildClip);
+//
+ params.iSize=TSize(20,30);
+ for(TInt index=0;index<10;index++)
+ {
+ paramarray[index]=params;
+ paramarray[index].iOffset=TPoint(index*20,index*4);
+ }
+ iSprite2=new(ELeave) CTSprite(Client()->iWs);
+ iSprite2->ConstructL(iWin,iPos2,10,¶marray[0],0);
+//
+ params.iSize=TSize(100,10);
+ iSprite3=new(ELeave) CTSprite(Client()->iWs);
+ iSprite3->ConstructL(iWin,iPos3,1,¶ms,ESpriteFlash);
+//
+ params.iSize=TSize(32,32);
+ iSprite4=new(ELeave) CTSprite(Client()->iWs);
+ iSprite4->ConstructL(*Client()->iGroup->GroupWin(),iPos4,1,¶ms,0);
+//
+ params.iSize=TSize(16,64);
+ iSprite5=new(ELeave) CTSprite(Client()->iWs);
+ iSprite5->ConstructL(*Client()->iGroup->GroupWin(),iPos5,1,¶ms,ESpriteNoChildClip);
+//
+ iCurPos= &iPos1;
+ iCurSprite= iSprite1;
+// iWin.SetBackgroundColor(TRgb::Gray256(170));
+ TSpriteCreateParams pcursor(TSize(24,48),TPoint(-12,-24),DrawPointerCursor,&iPointerMode);
+ iPointerCursor=new(ELeave) CTPointerCursor(Client()->iWs);
+ iPointerCursor->ConstructL(1,&pcursor,0,iSpriteBitmap,iSpriteMaskBitmap);
+ iWin.SetCustomPointerCursor(iPointerCursor->PointerCursor());
+ Client()->iGroup->GroupWin()->SetCustomPointerCursor(iPointerCursor->PointerCursor());
+ }
+
+
+void TestWindow7::Resized(const TSize &aNewSize)
+ {
+ CTBaseWin::Resized(aNewSize);
+ iGc->Activate(*DrawableWin());
+ Draw();
+ iGc->Deactivate();
+ }
+
+void TestWindow7::Draw()
+ {
+ iGc->SetBrushColor(TRgb::Gray256(170));
+ iGc->Clear();
+ for(TInt xPos=0;xPos<iSize.iWidth;xPos+=50)
+ iGc->DrawLine(TPoint(xPos,0),TPoint(xPos,iSize.iHeight));
+ for(TInt yPos=0;yPos<iSize.iHeight;yPos+=50)
+ iGc->DrawLine(TPoint(0,yPos),TPoint(iSize.iWidth,yPos));
+ }
+
+void TestWindow7::WinKeyL(const TKeyEvent &aKey,const TTime &)
+ {
+ switch(aKey.iCode)
+ {
+ case 'c':
+ case 'C':
+ {
+ iPointerMode=(iPointerMode+1)&EPointerModes;
+ TSpriteCreateParams params(iSpriteBitmap->SizeInPixels(),TPoint(0,0),DrawPointerCursor,&iPointerMode);
+ iPointerCursor->RedrawL(iSpriteBitmap,iSpriteMaskBitmap,¶ms);
+ break;
+ }
+ case ' ':
+ if (iCurSprite==iSprite1)
+ {
+ iCurPos= &iPos2;
+ iCurSprite= iSprite2;
+ }
+ else if (iCurSprite==iSprite2)
+ {
+ iCurPos= &iPos3;
+ iCurSprite= iSprite3;
+ }
+ else if (iCurSprite==iSprite3)
+ {
+ iCurPos= &iPos4;
+ iCurSprite= iSprite4;
+ }
+ else if (iCurSprite==iSprite4)
+ {
+ iCurPos= &iPos5;
+ iCurSprite= iSprite5;
+ }
+ else if (iCurSprite==iSprite5)
+ {
+ iCurPos= &iPos1;
+ iCurSprite= iSprite1;
+ }
+ break;
+ case '1':
+ iCurPos->iX-=5;
+ iCurSprite->Sprite().SetPosition(*iCurPos);
+ break;
+ case '2':
+ iCurPos->iX+=5;
+ iCurSprite->Sprite().SetPosition(*iCurPos);
+ break;
+ case '3':
+ iCurPos->iY-=5;
+ iCurSprite->Sprite().SetPosition(*iCurPos);
+ break;
+ case '4':
+ iCurPos->iY+=5;
+ iCurSprite->Sprite().SetPosition(*iCurPos);
+ break;
+ default:;
+ }
+ }
+
+TestWindow8::TestWindow8() : CTBlankWindow()
+ {
+ __DECLARE_NAME(_S("TestWindow8"));
+ }
+
+void TestWindow8::InitWin()
+ {
+ iWin.PointerFilter(EPointerFilterMove|EPointerFilterEnterExit,EPointerFilterMove|EPointerFilterEnterExit);
+ iWin.SetPointerGrab(ETrue);
+ iWin.SetColor(TRgb::Gray256(170));
+ }
+
+void TestWindow8::Draw()
+ {
+ Panic(EConnectPanicRedrawToBackedUpWindow);
+ }
+
+TestWindow9::TestWindow9() : CTWin()
+ {
+ __DECLARE_NAME(_S("TestWindow9"));
+ }
+
+void TestWindow9::InitWinL()
+ {
+ iWin.SetRequiredDisplayMode(EGray16);
+ User::LeaveIfError(iBitmap.Load(VIDEO_MBM_NAME,0));
+ iVideoSize=iBitmap.SizeInPixels();
+ }
+
+void TestWindow9::Draw()
+ {
+ iGc->BitBlt(TPoint(),&iBitmap);
+ }
+
+void TestWindow9::Play()
+ {
+ iWin.SetExtent(TPoint(320-(iVideoSize.iWidth>>1),0),iVideoSize);
+ iWin.BeginRedraw();
+ iWin.EndRedraw();
+ iGc->Activate(iWin);
+ TInt index=1;
+ while(iBitmap.Load(VIDEO_MBM_NAME,index++)==KErrNone)
+ {
+ iGc->BitBlt(TPoint(),&iBitmap);
+ Client()->iWs.Flush();
+ }
+ iBitmap.Load(VIDEO_MBM_NAME,0);
+ iGc->BitBlt(TPoint(),&iBitmap);
+ iGc->Deactivate();
+ }
+
+void TestWindow9::WinKeyL(const TKeyEvent &aKey,const TTime &)
+ {
+ if (aKey.iCode=='p' || aKey.iCode=='P')
+ Play();
+ }
+
+TestWindow10::TestWindow10() : CTWin()
+ {
+ __DECLARE_NAME(_S("TestWindow10"));
+ }
+
+void TestWindow10::InitWin()
+ {
+ //iWin.PointerFilter(EPointerFilterMove|EPointerFilterEnterExit,EPointerFilterMove|EPointerFilterEnterExit);
+ //iWin.SetPointerGrab(ETrue);
+ iWin.SetRequiredDisplayMode(EColor256);
+ }
+
+void TestWindow10::Draw()
+ {
+ TSize size=Size();
+ TRect rect(size);
+ TInt ii;
+
+ iGc->SetPenStyle(CGraphicsContext::ENullPen);
+ iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
+ rect.iBr.iX=0;
+ for(ii=0;ii<256;ii++)
+ {
+ rect.iTl.iX=rect.iBr.iX;
+ rect.iBr.iX=((ii+1)*size.iWidth)/256;
+ iGc->SetBrushColor(TRgb::Color256(ii));
+ iGc->DrawRect(rect);
+ }
+ }
+
+void TestWindow10::WinKeyL(const TKeyEvent &aKey,const TTime &)
+ {
+ switch(aKey.iCode)
+ {
+ case '0':
+ iWin.SetRequiredDisplayMode(EGray2);
+ break;
+ case '1':
+ iWin.SetRequiredDisplayMode(EGray4);
+ break;
+ case '2':
+ iWin.SetRequiredDisplayMode(EGray16);
+ break;
+ case '3':
+ iWin.SetRequiredDisplayMode(EGray256);
+ break;
+ case '4':
+ iWin.SetRequiredDisplayMode(EColor16);
+ break;
+ case '5':
+ iWin.SetRequiredDisplayMode(EColor256);
+ break;
+ case '6':
+ iWin.SetRequiredDisplayMode(EColor64K);
+ break;
+ }
+ }
+
+TestWindow12::TestWindow12() : CTWin()
+ {}
+
+void TestWindow12::InitWin()
+ {
+ iWin.SetRequiredDisplayMode(EColor16);
+ }
+
+void TestWindow12::Draw()
+ {
+ TRect rect(Size());
+
+ iGc->SetPenStyle(CGraphicsContext::ENullPen);
+ iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
+ iGc->SetBrushColor(TRgb(0,255,0));
+ iGc->DrawRect(rect);
+ rect.iTl.iX=rect.iBr.iX/2;
+ iGc->SetBrushColor(TRgb(0,0,255));
+ iGc->DrawRect(rect);
+ }
+
+void TestWindow12::WinKeyL(const TKeyEvent &aKey,const TTime &)
+ {
+ TSize screen(Client()->iScreen->SizeInPixels());
+ TSize size(Size());
+ TPoint pos(Position());
+ TPoint dest1(screen.iWidth-size.iWidth,screen.iHeight-size.iHeight);
+ TPoint dest;
+ iGc->Activate(iWin);
+ switch(aKey.iCode)
+ {
+ //case '1':
+ //break;
+ case '2':
+ dest.iX=dest1.iX/2;
+ break;
+ case '3':
+ dest.iX=dest1.iX;
+ break;
+ case '4':
+ dest.iY=dest1.iY/2;
+ break;
+ case '5':
+ dest.iX=dest1.iX/2;
+ dest.iY=dest1.iY/2;
+ break;
+ case '6':
+ dest.iX=dest1.iX;
+ dest.iY=dest1.iY/2;
+ break;
+ case '7':
+ dest.iY=dest1.iY;
+ break;
+ case '8':
+ dest.iX=dest1.iX/2;
+ dest.iY=dest1.iY;
+ break;
+ case '9':
+ dest.iX=dest1.iX;
+ dest.iY=dest1.iY;
+ break;
+ }
+ TRect rect(screen);
+ rect.Move(-pos);
+ iGc->CopyRect(pos-dest,rect);
+ iGc->Deactivate();
+ }
+
+//
+
+TestWindowGroup::TestWindowGroup(CTClient *aClient) : CTWindowGroup(aClient), iIncludeChildren(EFalse)
+ {
+ }
+
+void TestWindowGroup::ConstructL()
+ {
+ CTWindowGroup::ConstructL();
+ iGroupWin.EnableScreenChangeEvents();
+ }
+
+void TestWindowGroup::ScreenDeviceChanged()
+ {
+ TPixelsTwipsAndRotation sizeAndRotation;
+ Client()->iScreen->GetDefaultScreenSizeAndRotation(sizeAndRotation);
+ Client()->iScreen->SetScreenSizeAndRotation(sizeAndRotation);
+ }
+
+void TestWindowGroup::KeyL(const TKeyEvent &aKey,const TTime &aTime)
+ {
+ if (aKey.iModifiers&EModifierCtrl && !(aKey.iModifiers&EModifierFunc))
+ {
+ TInt type=0;
+ if (aKey.iCode<=14)
+ type=aKey.iCode;
+ if (type!=0)
+ {
+ TPoint pos;
+ TSize size;
+ CTWinBase *win=this;
+ if ((aKey.iModifiers&EModifierLeftShift) && iCurWin)
+ win=iCurWin;
+ pos.iX=win->Size().iWidth>>2;
+ pos.iY=win->Size().iHeight>>2;
+ size.iWidth=win->Size().iWidth>>1;
+ size.iHeight=win->Size().iHeight>>1;
+ iCurWin=((TestClient *)Client())->CreateTestWindowL(type,pos,size,win,*Client()->iGc,aKey.iModifiers&EModifierRightShift);
+ return;
+ }
+ }
+ if (aKey.iModifiers&EModifierFunc)
+ {
+ switch(aKey.iCode)
+ {
+ case 'a':
+ {
+ for(TInt loop=0;loop<100;loop++)
+ {
+ ((TestClient *)Client())->iWs.HeapSetFail(RHeap::EDeterministic,loop);
+ CTBaseWin *win=NULL;
+ TRAP_IGNORE(win=((TestClient *)Client())->CreateTestWindowL(1,TPoint(15,20),TSize(150,110),Client()->iGroup,*Client()->iGc));
+ if (win)
+ {
+ ((CTWin *)win)->Redraw(TRect());
+ delete win;
+ }
+ }
+ ((TestClient *)Client())->iWs.HeapSetFail(RHeap::ENone,0);
+ }
+ break;
+ case '0':
+ {
+ TUint *aNullPtr=NULL;
+ *aNullPtr=0;
+ }
+ break;
+ case 'p':
+ {
+ RThread thread;
+ thread.Panic(_L("Connect"),123);
+ }
+ break;
+ case 'x':
+ ((TestClient *)Client())->Exit();
+ break;
+ case 'f':
+ if (Client()->iWs.SetAutoFlush(ETrue))
+ Client()->iWs.SetAutoFlush(EFalse);
+ break;
+ case 'b':
+ RunLaunchAndShootTestL();
+ break;
+ case 'm':
+ MillionsOfSessions();
+ break;
+ case 'o':
+ GroupWin()->SetOrdinalPosition(KOrdinalPositionSwitchToOwningWindow);
+ break;
+ case 10:
+ if (aKey.iModifiers&EModifierCtrl && aKey.iModifiers&EModifierShift)
+ iHand->ToggleStatus();
+ break;
+ case EKeyLeftArrow:
+ ((TestClient *)Client())->AdjustLightSource(-1,0);
+ break;
+ case EKeyRightArrow:
+ ((TestClient *)Client())->AdjustLightSource(1,0);
+ break;
+ case EKeyUpArrow:
+ ((TestClient *)Client())->AdjustLightSource(0,-1);
+ break;
+ case EKeyDownArrow:
+ ((TestClient *)Client())->AdjustLightSource(0,1);
+ break;
+ default:
+ goto keeptrying;
+ }
+ return;
+ }
+keeptrying:
+ if (iCurWin)
+ {
+ if (aKey.iModifiers&EModifierFunc)
+ {
+ //TBool shift=aKey.iModifiers&EModifierShift;
+ switch(aKey.iCode)
+ {
+ case 'c':
+ GroupWin()->DisableKeyClick(ETrue);
+ break;
+ case 'C':
+ GroupWin()->DisableKeyClick(EFalse);
+ break;
+ case 's':
+ iCurWin->BaseWin()->SetShadowDisabled(ETrue);
+ break;
+ case 'S':
+ iCurWin->BaseWin()->SetShadowDisabled(EFalse);
+ break;
+ case 'v':
+ iCurWin->SetVisible(ETrue);
+ break;
+ case 'i':
+ iCurWin->SetVisible(EFalse);
+ break;
+ case 'd':
+ iCurWin->BaseWin()->SetFaded(ETrue
+ ,(iIncludeChildren? RWindowTreeNode::EFadeIncludeChildren:RWindowTreeNode::EFadeWindowOnly));
+ break;
+ case 'D':
+ iCurWin->BaseWin()->SetFaded(EFalse
+ ,(iIncludeChildren? RWindowTreeNode::EFadeIncludeChildren:RWindowTreeNode::EFadeWindowOnly));
+ break;
+ case 'w':
+ case 'W':
+ iIncludeChildren=!iIncludeChildren;
+ case 'e':
+ iCurWin->BaseWin()->SetNonFading(ETrue);
+ break;
+ case 'E':
+ iCurWin->BaseWin()->SetNonFading(EFalse);
+ break;
+ case 'r':
+ iCurWin->BaseWin()->FadeBehind(ETrue);
+ break;
+ case 'R':
+ iCurWin->BaseWin()->FadeBehind(EFalse);
+ break;
+ /*case 'b':
+ iCurWin->WinTreeNode()->SetOrdinalPosition(-1);
+ break;
+ case 'f':
+ iCurWin->WinTreeNode()->SetOrdinalPosition(0);
+ break;*/
+ case 'B':
+ {
+ RWindowTreeNode* win=iCurWin->WinTreeNode();
+ win->SetOrdinalPosition(win->OrdinalPosition()+1);
+ }
+ break;
+ case 'F':
+ {
+ RWindowTreeNode* win=iCurWin->WinTreeNode();
+ win->SetOrdinalPosition(win->OrdinalPosition()-1);
+ }
+ break;
+ default:
+ goto keeptrying2;
+ }
+ return;
+ }
+keeptrying2:
+ switch(aKey.iCode)
+ {
+ case 24: //Ctrl-X
+ CTWin::Delete(iCurWin);
+ break;
+ case 19: //Ctrl-S
+ if (aKey.iModifiers&EModifierShift)
+ iCurWin=iCurWin->Prev();
+ else
+ iCurWin=iCurWin->Next();
+ break;
+ case EKeyLeftArrow:
+ iCurWin->AdjustSizeL(-Xmove,0,aKey.iModifiers);
+ break;
+ case EKeyRightArrow:
+ iCurWin->AdjustSizeL(Xmove,0,aKey.iModifiers);
+ break;
+ case EKeyUpArrow:
+ iCurWin->AdjustSizeL(0,-Ymove,aKey.iModifiers);
+ break;
+ case EKeyDownArrow:
+ iCurWin->AdjustSizeL(0,Ymove,aKey.iModifiers);
+ break;
+ case '[': // Move back 1 ordinal position
+ iCurWin->AdjustOrdinal(-1);
+ break;
+ case ']': // Move forward 1 ordinal position
+ iCurWin->AdjustOrdinal(1);
+ break;
+ case '<': // Decrease shadow size
+ iCurWin->AdjustShadow(-1);
+ break;
+ case '>': // Increase shadow size
+ iCurWin->AdjustShadow(1);
+ break;
+ case 13:
+// iCurWin->SetDefaultExtL();
+ iCurWin->SetFullScreenExtL();
+ break;
+ default:
+ iCurWin->WinKeyL(aKey,aTime);
+ break;
+ }
+ }
+ }
+
+void TestWindowGroup::RunLaunchAndShootTestL()
+ {
+ RThread thread;
+ User::LeaveIfError(thread.Create(_L("Launcher"),RunLaunchAndShootTest,KDefaultStackSize,NULL,
+ NULL,NULL,KTestThreadHeapSize,KTestThreadHeapSize,EOwnerThread));
+ thread.Resume();
+ thread.Close();
+ }
+
+void TestWindowGroup::MillionsOfSessions()
+ {
+ RWsSession session;
+ FOREVER
+ {
+ session=RWsSession();
+ if (session.Connect()!=KErrNone)
+ break;
+ }
+ }
+
+//
+
+TestClient::TestClient()
+ {
+ __DECLARE_NAME(_S("TestClient"));
+ }
+
+CTBaseWin *TestClient::CreateTestWindowL(TInt type,TPoint pos,TSize size,CTWinBase *parent,CWindowGc &aGc,TBool aAlternate/*=EFalse*/)
+ {
+ CTBaseWin *win=NULL;
+ switch(type)
+ {
+ case 1:
+ win=new(ELeave) TestWindow1();
+ break;
+ case 2:
+ win=new(ELeave) TestWindow2();
+ break;
+ case 3:
+ win=new(ELeave) TestWindow3();
+ break;
+ case 4:
+ win=new(ELeave) TestWindow4();
+ break;
+ case 5:
+ win=new(ELeave) TestWindow5(aAlternate);
+ break;
+ case 6:
+ win=new(ELeave) TestWindow6(aAlternate);
+ break;
+ case 7:
+ win=new(ELeave) TestWindow7(aAlternate);
+ break;
+ case 8:
+ win=new(ELeave) TestWindow8();
+ break;
+ case 9:
+ win=new(ELeave) TestWindow9();
+ break;
+ case 10:
+ win=new(ELeave) TestWindow10();
+ break;
+ case 11:
+ win=new(ELeave) TestWindow11();
+ break;
+ case 12:
+ win=new(ELeave) TestWindow12();
+ break;
+ default:
+ User::Leave(KErrArgument);
+ }
+ TRAPD(err,win->ConstructL(*parent));
+ if (err!=KErrNone)
+ goto ctw_err;
+ win->AssignGC(aGc);
+ TRAP(err,win->SetExtL(pos,size));
+ if (err!=KErrNone)
+ {
+ctw_err:
+ delete win;
+ User::Leave(err);
+ }
+ if (type!=2)
+ win->BaseWin()->EnableBackup();
+ win->BaseWin()->SetPointerCursor(0);
+ win->Activate();
+ return(win);
+ }
+
+TestClient::~TestClient()
+ {
+ delete iHandWriting;
+ }
+
+//
+
+// Define to include hand writing tests
+#define TEST_HWR
+void TestClient::ConstructL()
+ {
+ CTClient::ConstructL();
+ iGroup=new(ELeave) TestWindowGroup(this);
+ iGroup->ConstructL();
+// CreateTestWindowL(1,TPoint(15,20),TSize(150,110),iGroup,*iGc);
+// CreateTestWindowL(2,TPoint(100,100),TSize(200,90),iGroup,*iGc);
+// CreateTestWindowL(3,TPoint(310,190),TSize(90,40),iGroup,*iGc);
+ CreateTestWindowL(4,TPoint(10,10),TSize(160,120),iGroup,*iGc);
+// CreateTestWindowL(5,TPoint(300,14),TSize(260,140),iGroup,*iGc);
+// CreateTestWindowL(6,TPoint(20,200),TSize(160,60),iGroup,*iGc);
+ iGroup->SetCurrentWindow(iGroup->Child());
+#if defined(TEST_HWR)
+ iHandWriting=new(ELeave) CHandWriting(iWs);
+ TRAPD(err,iHandWriting->ConstructL(iScreen->SizeInPixels(),*iGroup->GroupWin(),ETrue)); //EFalse don't use seperate Mask bitmap.
+ if (err!=KErrNone)
+ delete iHandWriting;
+ else
+ TestWindow()->SetHandWriting(iHandWriting);
+#endif
+ }
+
+void TestClient::AdjustLightSource(TInt aX,TInt aY)
+ {
+ TPoint vector=iWs.ShadowVector();
+ vector.iX+=aX;
+ vector.iY+=aY;
+ iWs.SetShadowVector(vector);
+ }
+
+void TestClient::Exit()
+ {
+ CActiveScheduler::Stop();
+ }
+
+//
+// Special bit of test code to repeatedly launch and shoot a wserv //
+//
+
+#define NT_KILLER
+
+TInt LaunchAndShootTestLoop(TAny *)
+ {
+#if defined(NT_KILLER)
+ User::WaitForAnyRequest();
+#else
+
+ RWsSession ws;
+ ws.Connect();
+ TTimeIntervalMicroSeconds32 initialTime;
+ TTimeIntervalMicroSeconds32 time;
+ FOREVER
+ ws.GetKeyboardRepeatRate(initialTime, time);
+#endif
+ return(KErrNone);
+ }
+
+#if defined(NT_KILLER)
+TInt RunLaunchAndShootTest(TAny *)
+ {
+ RThread().SetPriority(EPriorityRealTime);
+ RThread thread;
+ thread.Create(_L("xx1"),LaunchAndShootTestLoop,KDefaultStackSize,NULL,
+ NULL,NULL,KTestThreadHeapSize,KTestThreadHeapSize,EOwnerThread);
+ thread.Resume();
+ thread.Kill(KErrNone);
+ thread.Close();
+ RThread thread2;
+ thread2.Create(_L("xx2"),LaunchAndShootTestLoop,KDefaultStackSize,NULL,
+ NULL,NULL,KTestThreadHeapSize,KTestThreadHeapSize,EOwnerThread);
+ thread2.Resume();
+ thread2.Kill(KErrNone);
+ thread2.Close();
+ return(KErrNone);
+ }
+#else
+TInt RunLaunchAndShootTest(TAny *)
+ {
+ RThread().SetPriority(EPriorityRealTime);
+ for(TInt count=0;count<100;count++)
+ {
+ RThread thread;
+ TBuf<KMaxFileName> threadName;
+ TInt num=0;
+ TInt err=KErrNone;
+ do
+ {
+ threadName.Format(_L("%S%02d"),&_L("Looper"),num++);
+ err=thread.Create(threadName,LaunchAndShootTestLoop,KDefaultStackSize,NULL,
+ NULL,NULL,KTestThreadHeapSize,KTestThreadHeapSize,EOwnerThread);
+ } while(err==KErrAlreadyExists);
+ if (err!=KErrNone)
+ return(KErrNone);
+ thread.Resume();
+ User::After(TTimeIntervalMicroSeconds32(50000));
+ thread.Kill(KErrNone);
+ thread.Close();
+ }
+ return(KErrNone);
+ }
+#endif
+
+//
+#define leavescan_needs_to_see_some_brackets_here { }
+
+GLDEF_C CTClient* CreateClientL()
+ {
+ return(new(ELeave) TestClient()); //Leavescan thinks this fn is user::After!
+ }
+
+GLDEF_C TInt E32Main()
+ {
+ return(TestLibStartUp(CreateClientL));
+ }