sl@0: // Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // sl@0: sl@0: /** sl@0: @file sl@0: @test sl@0: @internalComponent - Internal Symbian test code sl@0: */ sl@0: sl@0: #include "wsredir.h" sl@0: sl@0: const TUint8 KCmdQuery = 0; sl@0: const TUint8 KCmdSetGcFront = 1; sl@0: const TUint8 KCmdSetGcBack = 2; sl@0: const TUint8 KCmdResetGcFront = 3; sl@0: const TUint8 KCmdResetGcBack = 4; sl@0: const TUint8 KCmdSetBackObject = 5; sl@0: const TUint8 KCmdResetBackObject= 6; sl@0: sl@0: const TUid KRedirectorInterfaceId = {0x10281e1d}; sl@0: const TUid KRedirectorImplId = {0x10281e1e}; sl@0: sl@0: EXPORT_C CWsRedir* CWsRedir::NewL() sl@0: { sl@0: return NewL(0); sl@0: } sl@0: sl@0: EXPORT_C CWsRedir* CWsRedir::NewL(TInt aScreenId) sl@0: { sl@0: return NewL(aScreenId, EFalse); sl@0: } sl@0: sl@0: EXPORT_C CWsRedir* CWsRedir::NewL(TInt aScreenId, TBool aDisableWin) sl@0: { sl@0: CWsRedir* self = new(ELeave) CWsRedir; sl@0: CleanupStack::PushL(self); sl@0: TBuf8<2> data; sl@0: data.Append((TUint8)aScreenId); sl@0: data.Append((TUint8)aDisableWin); sl@0: self->BaseConstructL(KRedirectorInterfaceId, KRedirectorImplId, data); sl@0: CleanupStack::Pop(self); sl@0: self->iIsReady = ETrue; sl@0: return self; sl@0: } sl@0: sl@0: EXPORT_C CWsRedir::~CWsRedir() sl@0: { sl@0: iIsReady = EFalse; sl@0: } sl@0: sl@0: void CWsRedir::HandleMessage(const TDesC8& aData) sl@0: { sl@0: if (aData.Size()>1 && aData[0]==KRedirectorInfoSig) sl@0: Mem::Copy(iReq, aData.Ptr(), aData.Size()); sl@0: iCallBack.CallBack(); sl@0: } sl@0: sl@0: void CWsRedir::OnReplace() sl@0: { sl@0: } sl@0: sl@0: EXPORT_C TInt CWsRedir::Redirect(TBufferType aWhich, TBool aHow) sl@0: { sl@0: if (!iIsReady) sl@0: return KErrNotReady; sl@0: sl@0: TBuf8<1> cmd; sl@0: if (aWhich==EFrontBuffer) sl@0: { sl@0: if (iIsFrontRedirected && aHow) sl@0: return KErrArgument; sl@0: iIsFrontRedirected = aHow; sl@0: cmd.Append(iIsFrontRedirected? KCmdSetGcFront : KCmdResetGcFront); sl@0: } sl@0: else sl@0: { sl@0: if (iIsBackRedirected && aHow) sl@0: return KErrArgument; sl@0: iIsBackRedirected = aHow; sl@0: cmd.Append(iIsBackRedirected? KCmdSetGcBack : KCmdResetGcBack); sl@0: } sl@0: sl@0: SendMessage(cmd); sl@0: return Flush(); sl@0: } sl@0: sl@0: EXPORT_C TInt CWsRedir::RedirectUsingWsBackBuffer(TBool aHow) sl@0: { sl@0: if (!iIsReady) sl@0: return KErrNotReady; sl@0: sl@0: TBuf8<1> cmd; sl@0: if (iIsBackRedirected && aHow) sl@0: return KErrArgument; sl@0: iIsBackRedirected = aHow; sl@0: cmd.Append(iIsBackRedirected? KCmdSetBackObject : KCmdResetBackObject); sl@0: sl@0: SendMessage(cmd); sl@0: return Flush(); sl@0: } sl@0: sl@0: EXPORT_C TInt CWsRedir::QueryPlugin(TRedirectorInfo& aInfo) sl@0: { sl@0: TBuf8<1> cmd; sl@0: cmd.Append(KCmdQuery); sl@0: SendMessage(cmd); sl@0: TInt err = Flush(); sl@0: if (err!=KErrNone) sl@0: return err; sl@0: iReq = &aInfo; sl@0: return KErrNone; sl@0: } sl@0: sl@0: EXPORT_C void CWsRedir::SetCallBack(TCallBack aCallBack) sl@0: { sl@0: iCallBack = aCallBack; sl@0: }