// 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));
}