diff -r 000000000000 -r eb1f2e154e89 textinput/peninputarc/src/peninputserverapp/peninputanimclientobj.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textinput/peninputarc/src/peninputserverapp/peninputanimclientobj.cpp Tue Feb 02 01:02:04 2010 +0200 @@ -0,0 +1,497 @@ +/* +* Copyright (c) 2006-2007 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: Implementation for peninput server +* +*/ + +#include +#include "peninputanimclientobj.h" +#include "peninputserver.h" +#include "peninputclientserver.h" +#include "peninputanimcommand.h" +#include +// the animation dll name +_LIT( KAnimDllName, "peninputanim.dll" ); +//animation window group name +//_LIT(KPeninputServerAnimName,"peninputserveranimobj"); +class RWsSession; +class RWindowGroup; + +void HideWindowGroupL(const RWsSession& aWs,const RWindowGroup& aGroup); + +// --------------------------------------------------------------------------- +// CPeninputAnimObj::CPeninputAnimObj +// Default constructor +// --------------------------------------------------------------------------- +// +CPeninputAnimObj::CPeninputAnimObj(TSpriteMember& aSpriteMember) + : CActive( EPriorityStandard ),iSpriteMember(aSpriteMember) + { + iOnExiting = EFalse; + } + +// --------------------------------------------------------------------------- +// CPeninputAnimObj::NewL +// factory method +// --------------------------------------------------------------------------- +// +CPeninputAnimObj* CPeninputAnimObj::NewL(TSpriteMember& aSpriteMember) + { + CPeninputAnimObj* animObj = new(ELeave) CPeninputAnimObj(aSpriteMember); + CleanupStack::PushL(animObj); + CActiveScheduler::Add(animObj); + animObj->ConstructL(); + CleanupStack::Pop(animObj); + return animObj; + } + +// --------------------------------------------------------------------------- +// CPeninputAnimObj::~CPeninputAnimObj +// Destructor +// --------------------------------------------------------------------------- +// +CPeninputAnimObj::~CPeninputAnimObj() + { + Cancel(); + for(int i = 0 ; i < iAnimCmd.Count(); ++i) + { + const TAnimCmd* cmd = iAnimCmd[i]; + delete cmd; + } + iAnimCmd.Close(); + + // closing the window server session frees all + // used resources in the ws session, including: + // iSprite + // iAnim + // iAnimDll + iSprite.Close(); + iAnim.Close(); + iAnimDll.Close(); + iWindowGroup.Close(); + iWsSession.Close(); + } + +// --------------------------------------------------------------------------- +// CPeninputAnimObj::RunL +// active ao call back +// --------------------------------------------------------------------------- +// +void CPeninputAnimObj::RunL() + { + ExecuteAnimCommand(); + } + +// --------------------------------------------------------------------------- +// CPeninputAnimObj::DoCancel +// --------------------------------------------------------------------------- +// +void CPeninputAnimObj::DoCancel() + { + //do nothing + } + +// --------------------------------------------------------------------------- +// CPeninputAnimObj::RunError +// --------------------------------------------------------------------------- +// +TInt CPeninputAnimObj::RunError(TInt /*aErr*/) + { + //ignore error + return KErrNone; + } + +// --------------------------------------------------------------------------- +// CPeninputAnimObj::ConstructL +// 2nd phase constructor +// --------------------------------------------------------------------------- +// +void CPeninputAnimObj::ConstructL() + { + iAnimCmd.Reset(); + ConstructAnimL(); + } + +// --------------------------------------------------------------------------- +// CPeninputAnimObj::ExecuteAnimCommand +// Execute animation command +// --------------------------------------------------------------------------- +// +void CPeninputAnimObj::ExecuteAnimCommand() + { + TInt i = 0; + for(; i < iAnimCmd.Count(); ++i) + { + const TAnimCmd* cmd = iAnimCmd[i]; + if(!cmd->ExecuteAnimCommand()) + break; //execution not finished, need wait to next round. + delete cmd; + } + + //remove executed command + while(--i >= 0) + { + iAnimCmd.Remove(i); + } + } + +// --------------------------------------------------------------------------- +// CPeninputAnimObj::ExeOnePendingAnimCmd +// Execute the first pending animation command +// --------------------------------------------------------------------------- +// +void CPeninputAnimObj::ExeOnePendingAnimCmd() + { + //search the first wait command + for(TInt i = 0 ; i < iAnimCmd.Count(); i++) + { + if(!iAnimCmd[i]->Ready()) + { + iAnimCmd[i]->SetReady(ETrue); + //break; + } + } + //CompleteRequest(); + SetObjActive(); + } + +// --------------------------------------------------------------------------- +// CPeninputAnimObj::AddAnimCommand +// Add a animation command +// --------------------------------------------------------------------------- +// +void CPeninputAnimObj::AddAnimCommand(TAnimCmd* aCmd) + { + if(iOnExiting) // do nothing if prepare for exiting + { + delete aCmd; + aCmd = 0; + return; + } + iAnimCmd.Append(aCmd); + + //CompleteRequest(); + SetObjActive(); + } + +// --------------------------------------------------------------------------- +// CPeninputAnimObj::SetObjActive +// Set animation object active so as to be rescheduled by AO scheduler. +// --------------------------------------------------------------------------- +// +void CPeninputAnimObj::SetObjActive() + { + if(!IsActive()) + { + iStatus=KRequestPending; + SetActive(); + TRequestStatus *pS=(&iStatus); + + User::RequestComplete(pS,0); + } + } + + +// --------------------------------------------------------------------------- +// CPeninputAnimObj::ConstructSpriteAnimL +// --------------------------------------------------------------------------- +// +TInt CPeninputAnimObj::ConstructAnimL() + { + User::LeaveIfError( iWsSession.Connect() ); + iWindowGroup = RWindowGroup( iWsSession); + iWindowGroup.Construct( RThread().Id(), EFalse ); + + iWindowGroup.SetOrdinalPosition( -1, -1); + iWindowGroup.SetOrdinalPriorityAdjust( ECoeWinPriorityAlwaysAtFront ); + iWindowGroup.EnableReceiptOfFocus( EFalse ); + iWindowGroup.AutoForeground(EFalse); + + HideWindowGroupL(iWsSession,iWindowGroup); + TInt id = iWindowGroup.Identifier(); + iSprite = RWsSprite( iWsSession); + User::LeaveIfError( iSprite.Construct( iWindowGroup, + TPoint( 0, 0 ),ESpriteNoChildClip | + ESpriteNoShadows ) ); + // add sprite member + User::LeaveIfError( iSprite.AppendMember( iSpriteMember )); + + // load peninput animation dll + iAnimDll = RAnimDll( iWsSession ); + User::LeaveIfError( iAnimDll.Load( KAnimDllName ) ); + + // create peninput sprite animation class + iAnim = RPeninputAnim( iAnimDll); + iAnim.ConstructL( iSprite ); + return KErrNone; + } + + +// --------------------------------------------------------------------------- +// CPeninputAnimObj::AddActivationCmd +// Add activation command +// --------------------------------------------------------------------------- +// +TBool CPeninputAnimObj::AddActivationCmd(TBool aUiFlag, TBool aWaitFlag) + { + TAnimActivateUiCmd* cmd = new TAnimActivateUiCmd(iAnim,aUiFlag,!aWaitFlag); + if(!cmd) + return EFalse; + AddAnimCommand(cmd); + return ETrue; + } + +// --------------------------------------------------------------------------- +// CPeninputAnimObj::AddChangeSizeCmd +// Add changing size command +// --------------------------------------------------------------------------- +// +TBool CPeninputAnimObj::AddChangeSizeCmd(const TSize& aSize) + { + TAnimChangeSizeCmd* cmd = new TAnimChangeSizeCmd(iAnim,aSize); + if(!cmd) + return EFalse; + AddAnimCommand(cmd); + return ETrue; + } + +// --------------------------------------------------------------------------- +// CPeninputAnimObj::AddSetPosCmd +// Add setting position command +// --------------------------------------------------------------------------- +// +TBool CPeninputAnimObj::AddSetPosCmd(const TPoint& aPt) + { + TAnimSetPosCmd* cmd = new TAnimSetPosCmd(iAnim,aPt); + if(!cmd) + return EFalse; + AddAnimCommand(cmd); + return ETrue; + } + +// --------------------------------------------------------------------------- +// CPeninputAnimObj::AddChangeDispModeCmd +// Add changing display mode command +// --------------------------------------------------------------------------- +// +TBool CPeninputAnimObj::AddChangeDispModeCmd(TSpriteMember& aMember) + { + TAnimChangeDispModeCmd* cmd = new TAnimChangeDispModeCmd(iAnim, + iSprite, + aMember); + + if(!cmd) + return EFalse; + AddAnimCommand(cmd); + return ETrue; + } + +// --------------------------------------------------------------------------- +// CPeninputAnimObj::AddUpdateUiCmd +// Add updaing UI command +// --------------------------------------------------------------------------- +// +TBool CPeninputAnimObj::AddUpdateUiCmd(const TRect& aRect, TBool aUpdateFlag) + { + TAnimUpdateUiRectCmd* cmd = new TAnimUpdateUiRectCmd(iAnim,aRect,aUpdateFlag); + if(!cmd) + return EFalse; + AddAnimCommand(cmd); + return ETrue; + } + +// --------------------------------------------------------------------------- +// CPeninputAnimObj::AddUpdateUiCmd +// Add updaing UI command +// --------------------------------------------------------------------------- +// +TBool CPeninputAnimObj::AddUpdateUiCmd(TUpdateArea *aArea,TInt aNum) + { + TAnimUpdateUiRectCmd* cmd = new TAnimUpdateUiRectCmd(iAnim,aArea,aNum); + if (!cmd) + return EFalse; + AddAnimCommand(cmd); + return ETrue; + } + +// --------------------------------------------------------------------------- +// CPeninputAnimObj::AddCapturePointerCmd +// Add capturing pointer command +// --------------------------------------------------------------------------- +// +TBool CPeninputAnimObj::AddCapturePointerCmd(TBool aFlag, TInt aCaptureCtrlID) + { + TAnimCapturePtCmd* cmd = new TAnimCapturePtCmd(iAnim,aFlag, aCaptureCtrlID); + if(!cmd) + return EFalse; + AddAnimCommand(cmd); + return ETrue; + } + +// --------------------------------------------------------------------------- +// CPeninputAnimObj::AddSimulatedEventCmd +// Add ignoring similated event command +// --------------------------------------------------------------------------- +// +TBool CPeninputAnimObj::AddSimulateEventCmd(const TRawEvent& aEvent) + { + TAnimSimulateEventCmd* cmd = new TAnimSimulateEventCmd(iAnim, aEvent); + if (!cmd) + return EFalse; + AddAnimCommand(cmd); + return ETrue; + } + +// --------------------------------------------------------------------------- +// Execute simulate event command +// --------------------------------------------------------------------------- +// +TBool CPeninputAnimObj::ExecuteSimulateEventCmd( const TRawEvent& aEvent ) + { + TAnimSimulateEventCmd* cmd = new TAnimSimulateEventCmd( iAnim, aEvent ); + if (!cmd) + return EFalse; + cmd->ExecuteAnimCommand(); + delete cmd; + cmd = NULL; + return ETrue; + } + +// --------------------------------------------------------------------------- +// CPeninputAnimObj::AddFlushSessionCmd +// Add flushing session command +// --------------------------------------------------------------------------- +// +TBool CPeninputAnimObj::AddFlushSessionCmd() + { + TAnimFlushWsSessionCmd* cmd = new TAnimFlushWsSessionCmd(iAnim,iWsSession); + if(!cmd) + return EFalse; + AddAnimCommand(cmd); + return ETrue; + } + +#ifdef RD_TACTILE_FEEDBACK + +// --------------------------------------------------------------------------- +// CPeninputAnimObj::AddRegisterFeedbackAreaCmd +// Add feedback registeration command +// --------------------------------------------------------------------------- +// +TBool CPeninputAnimObj::AddRegisterFeedbackAreaCmd(const TTactileFeedbackArea& aArea, + TBool aCmdFlag) + { + TAnimFeedbackAreaCmd* cmd = new TAnimFeedbackAreaCmd(iAnim,aArea, + TAnimFeedbackAreaCmd::TFeedbackAreaOpAdd, + aCmdFlag); + if(!cmd) + return EFalse; + AddAnimCommand(cmd); + return ETrue; + } + + +// --------------------------------------------------------------------------- +// CPeninputAnimObj::AddRegisterFeedbackAreaCmd +// Add feedback registeration command +// --------------------------------------------------------------------------- +// +/*TBool CPeninputAnimObj::AddRegisterFeedbackAreaCmd(const RArray& aAreaList) + { + TAnimFeedbackAreaCmd* cmd = new TAnimFeedbackAreaCmd(iAnim,aAreaList, + TAnimFeedbackAreaCmd::TFeedbackAreaOpAdd, + ETrue); + if(!cmd) + return EFalse; + AddAnimCommand(cmd); + return ETrue; + }*/ + + +// --------------------------------------------------------------------------- +// CPeninputAnimObj::AddDeRegisterFeedbackAreaCmd +// Remove feedback registeration command +// --------------------------------------------------------------------------- +// +TBool CPeninputAnimObj::AddDeRegisterFeedbackAreaCmd(const TTactileFeedbackArea& aArea, + TBool aCmdFlag) + { + TAnimFeedbackAreaCmd* cmd = new TAnimFeedbackAreaCmd(iAnim,aArea, + TAnimFeedbackAreaCmd::TFeedbackAreaOpRemove, + aCmdFlag); + if(!cmd) + return EFalse; + AddAnimCommand(cmd); + return ETrue; + } + +// --------------------------------------------------------------------------- +// CPeninputAnimObj::AddChangeFeedbackAreaCmd +// Add feedback registeration command +// --------------------------------------------------------------------------- +// +TBool CPeninputAnimObj::AddChangeFeedbackAreaCmd(const TTactileFeedbackArea& aArea, + TBool aCmdFlag) + { + TAnimFeedbackAreaCmd* cmd = new TAnimFeedbackAreaCmd(iAnim,aArea, + TAnimFeedbackAreaCmd::TFeedbackAreaOpChange, + aCmdFlag); + if(!cmd) + return EFalse; + AddAnimCommand(cmd); + return ETrue; + } + +// --------------------------------------------------------------------------- +// CPeninputAnimObj::AddChangeFeedbackTypeCmd +// Add feedback registeration command +// --------------------------------------------------------------------------- +// +TBool CPeninputAnimObj::AddChangeFeedbackTypeCmd(const TTactileFeedbackArea& aArea, + TBool aCmdFlag) + { + TAnimFeedbackAreaCmd* cmd = new TAnimFeedbackAreaCmd(iAnim,aArea, + TAnimFeedbackAreaCmd::TFeedbackTypeOpChange, + aCmdFlag); + if(!cmd) + return EFalse; + AddAnimCommand(cmd); + return ETrue; + } + +#endif // RD_TACTILE_FEEDBACK +TBool CPeninputAnimObj::AddEnalbeSpriteCmd(TBool aFlag) + { + TAnimEnableSpriteCmd* cmd = new TAnimEnableSpriteCmd(iAnim,aFlag); + if(!cmd) + return EFalse; + AddAnimCommand(cmd); + return ETrue; + } + +RWindowGroup& CPeninputAnimObj::WindowGroup() + { + return iWindowGroup; + } + +void CPeninputAnimObj::OnExiting() + { + iOnExiting = ETrue; + } + +void CPeninputAnimObj::GetDSAState(TBool& aState) + { + iAnim.GetDSAState(aState); + } +//end of file