diff -r 2717213c588a -r 171fae344dd4 windowing/windowserver/tcrx/tcrx.cpp --- a/windowing/windowserver/tcrx/tcrx.cpp Tue Jun 22 15:21:29 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,393 +0,0 @@ -// Copyright (c) 2006-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: -// - -/** - @file - @test - @internalComponent - Internal Symbian test code -*/ - -#include -#include "tcrx.h" -#include "wsredir.h" -#include "wslisten.h" - -static TRedirectorInfo TheInfo; - -class CTwoWindow: public CBase - { -public: - static CTwoWindow* NewL(); - ~CTwoWindow(); -private: - void ConstructL(); -private: - RWsSession iWs; - CWsScreenDevice* iScr; - CWindowGc* iGc; - RWindowGroup iGroup; - RWindow iBg; - RWindow iFg; - }; - -CTwoWindow* CTwoWindow::NewL() - { - CTwoWindow* tw = new(ELeave) CTwoWindow; - CleanupStack::PushL(tw); - tw->ConstructL(); - CleanupStack::Pop(tw); - return tw; - } - -CTwoWindow::~CTwoWindow() - { - iFg.Close(); - iBg.Close(); - iGroup.Close(); - delete iGc; - delete iScr; - iWs.Close(); - } - -void CTwoWindow::ConstructL() - { - User::LeaveIfError(iWs.Connect()); - iScr = new(ELeave) CWsScreenDevice(iWs); - User::LeaveIfError(iScr->Construct()); - User::LeaveIfError(iScr->CreateContext(iGc)); - iGroup = RWindowGroup(iWs); - User::LeaveIfError(iGroup.Construct(0xc0de,ETrue)); - - iBg = RWindow(iWs); - User::LeaveIfError(iBg.Construct(iGroup,0xc0debabe)); - iBg.SetRequiredDisplayMode(EColor64K); - iBg.Activate(); - iWs.Flush(); - - iBg.BeginRedraw(); - iGc->Activate(iBg); - iGc->SetBrushColor(KRgbGreen); - iGc->SetBrushStyle(CGraphicsContext::ESolidBrush); - TRect rect(iScr->SizeInPixels()); - iGc->DrawRect(rect); - iGc->SetBrushColor(KRgbBlue); - iGc->DrawEllipse(rect); - iGc->Deactivate(); - iBg.EndRedraw(); - iWs.Flush(); - - iFg = RWindow(iWs); - User::LeaveIfError(iFg.Construct(iGroup,0xc0decafe)); - iFg.SetRequiredDisplayMode(EColor64K); - iFg.SetTransparencyAlphaChannel(); - iFg.SetBackgroundColor(TRgb(0xff,0x55,0x55,0x80)); - iFg.Activate(); - iWs.Flush(); - } - -CClient* CClient::NewL() - { - CClient* self = new(ELeave) CClient; - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - - return self; - } - -CClient::CClient(): CActive(CActive::EPriorityStandard) - { - } - -void CClient::ConstructL() - { - CActiveScheduler::Add(this); - User::LeaveIfError(iWs.Connect()); - iScreen = new(ELeave) CWsScreenDevice(iWs); - User::LeaveIfError(iScreen->Construct(0)); - iGroup = RWindowGroup(iWs); - User::LeaveIfError(iGroup.Construct(0xCAFE, ETrue)); - iGc = new(ELeave) CWindowGc(iScreen); - User::LeaveIfError(iGc->Construct()); - iWin = new(ELeave) CWindow(this); - iWin->ConstructL(NULL, EFalse); - iRedraw = CRedrawHandler::NewL(this); - - iRedir = CWsRedir::NewL(); - iListen = CWsListen::NewL(); - - MakeRequest(); - } - -void CClient::HandleCommand(TInt aCmd) - { - switch (aCmd) - { - case 1: - iRedir->Redirect(CWsRedir::EFrontBuffer, ETrue); - break; - - case 2: - iRedir->Redirect(CWsRedir::EBackBuffer, ETrue); - break; - - case 3: - iRedir->Redirect(CWsRedir::EFrontBuffer, EFalse); - break; - - case 4: - iRedir->Redirect(CWsRedir::EBackBuffer, EFalse); - break; - - case 5: - iListen->Enable(ETrue); - break; - - case 6: - iListen->Enable(EFalse); - break; - - case 7: - iRedir->QueryPlugin(TheInfo); - break; - - case 8: - iBlank.Close(); - iBlank = RBlankWindow(iWs); - iBlank.Construct(iGroup, 0xbeef); - iBlank.SetRequiredDisplayMode(EColor64K); - iBlank.SetColor(KRgbRed); - iBlank.SetExtent(TPoint(20,20),TSize(100,100)); - iBlank.Activate(); - break; - - case 9: - ClearTwoWindow(); - DrawTwoWindow(); - break; - - case 10: - CActiveScheduler::Stop(); - break; - } - } - -CClient::~CClient() - { - Deque(); - ClearTwoWindow(); - iBlank.Close(); - - delete iListen; - delete iRedir; - delete iWin; - delete iRedraw; - delete iGc; - delete iScreen; - - iGroup.Close(); - iWs.Close(); - } - -void CClient::DrawTwoWindow() - { - TRAP_IGNORE(iTwo = CTwoWindow::NewL()); - } - -void CClient::ClearTwoWindow() - { - delete iTwo; - iTwo = NULL; - } - -void CClient::RunL() - { - iWs.GetEvent(iEvent); - if (iEvent.Type()==EEventKey) - HandleCommand(iEvent.Key()->iCode-'0'); - MakeRequest(); - } - -void CClient::DoCancel() - { - iWs.EventReadyCancel(); - } - -void CClient::MakeRequest() - { - iWs.EventReady(&iStatus); - SetActive(); - } - -CRedrawHandler* CRedrawHandler::NewL(CClient* aClient) - { - CRedrawHandler* self=new(ELeave) CRedrawHandler(aClient); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - - return self; - } - -CRedrawHandler::CRedrawHandler(CClient* aClient) : CActive(CActive::EPriorityStandard), iClient(aClient) - { - } - -void CRedrawHandler::ConstructL() - { - CActiveScheduler::Add(this); - MakeRequest(); - } - -CRedrawHandler::~CRedrawHandler() - { - Cancel(); - } - -void CRedrawHandler::RunL() - { - TWsRedrawEvent event; - iClient->Ws().GetRedraw(event); - CWindow* win = (CWindow*)event.Handle(); - if (win) - { - TRect rect=event.Rect(); - iClient->Gc().Activate(win->Window()); - win->Window().BeginRedraw(rect); - win->Draw(rect); - win->Window().EndRedraw(); - iClient->Gc().Deactivate(); - } - - MakeRequest(); - } - -void CRedrawHandler::MakeRequest() - { - iClient->Ws().RedrawReady(&iStatus); - SetActive(); - } - -void CRedrawHandler::DoCancel() - { - iClient->Ws().RedrawReadyCancel(); - } - -CWindow::CWindow(CClient* aClient) : iClient(aClient) - { - } - -CWindow::~CWindow() - { - iWin.Close(); - } - -void CWindow::ConstructL(CWindow* aParent, TBool aTransparentFlag) - { - iParent = aParent; - iWin = RWindow(iClient->Ws()); - RWindowTreeNode* node=iParent? &iParent->Window() : (RWindowTreeNode*)&iClient->Group(); - User::LeaveIfError(iWin.Construct(*node, (TUint32)this)); - iWin.SetRequiredDisplayMode(EColor64K); - if (aTransparentFlag) - { - iWin.SetBackgroundColor(TRgb(0,0,0,0x80)); - iWin.SetTransparencyAlphaChannel(); - } - iWin.SetExtent(TPoint(0,0),TSize(240,240)); - iWin.Activate(); - } - -void CWindow::Draw(const TRect& aRect) const - { - CWindowGc& gc = iClient->Gc(); - gc.SetBrushStyle(CGraphicsContext::ESolidBrush); - gc.SetBrushColor(TRgb(0,0,0xff,0xff)); - gc.DrawRect(TRect(aRect.iTl.iX,aRect.iTl.iY,aRect.iBr.iX,aRect.iBr.iY/2)); - gc.SetBrushColor(TRgb(0,0,0xff,0x80)); - gc.DrawRect(TRect(aRect.iTl.iX,aRect.iBr.iY/2,aRect.iBr.iX,aRect.iBr.iY)); - DrawMenu(); - - gc.DrawWsGraphic(iClient->WsRedir()->Id(),TRect(aRect.iTl.iX,aRect.iBr.iY/2,aRect.iBr.iX,aRect.iBr.iY)); - } - -_LIT(KMenu1, "1. Redirect screen"); -_LIT(KMenu2, "2. Redirect flickerfree"); -_LIT(KMenu3, "3. Restore screen"); -_LIT(KMenu4, "4. Restore flickerfree"); -_LIT(KMenu5, "5. Register event listener"); -_LIT(KMenu6, "6. Unregister listener"); -_LIT(KMenu7, "7. Test send receive msg"); -_LIT(KMenu8, "8. Test blank window"); -_LIT(KMenu9, "9. Test two window"); -_LIT(KMenuA, "A. Exit"); - -const TBufC<32> TheMenu[] = - { - (const TDesC&)KMenu1, - (const TDesC&)KMenu2, - (const TDesC&)KMenu3, - (const TDesC&)KMenu4, - (const TDesC&)KMenu5, - (const TDesC&)KMenu6, - (const TDesC&)KMenu7, - (const TDesC&)KMenu8, - (const TDesC&)KMenu9, - (const TDesC&)KMenuA - }; - -_LIT(KTypeFace, "DejaVu Sans Condensed"); - -void CWindow::DrawMenu() const - { - CWsScreenDevice* scr = iClient->Screen(); - CFont* font = NULL; - TFontSpec fs(KTypeFace, 15); - scr->GetNearestFontInPixels(font, fs); - CWindowGc& gc = iClient->Gc(); - gc.UseFont(font); - TInt h = font->HeightInPixels(); - gc.SetPenColor(KRgbYellow); - TInt nMenu = sizeof(TheMenu)/sizeof(TheMenu[0]); - for (TInt ii=0; iiReleaseFont(font); - } - -void MainL() - { - CClient* client=CClient::NewL(); - CActiveScheduler::Start(); - - delete client; - } - -GLDEF_C TInt E32Main() - { - CTrapCleanup* trap=CTrapCleanup::New(); - if (!trap) - return KErrNoMemory; - CActiveScheduler* scheduler = new(ELeave) CActiveScheduler; - CActiveScheduler::Install(scheduler); - - __UHEAP_MARK; - TRAPD(err, MainL()); - __UHEAP_MARKEND; - - delete scheduler; - delete trap; - return err; - }