diff -r 000000000000 -r 2f259fa3e83a lafagnosticuifoundation/cone/src/COEPRIV.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lafagnosticuifoundation/cone/src/COEPRIV.CPP Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,106 @@ +// Copyright (c) 1997-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: +// + +#include "coepriv.h" +#include "coepanic.h" +#include // class CCoeControl + + +LOCAL_C TBool IsHandleValid(TUint aHandle) + { + return (aHandle&3)==0; + } + +// +// CCoeView class +// + +CCoeView* CCoeView::NewLC(MCoeView& aView) + { + CCoeView* self=new(ELeave) CCoeView(aView); + CleanupStack::PushL(self); + return self; + } + +CCoeView::CCoeView(MCoeView& aView) : iView(aView) + { + } + + + +// +// class CCoeRedrawer +// + +CCoeRedrawer::CCoeRedrawer(RWsSession& aWsSession) + :CActive(EActivePriorityRedrawEvents), + iWsSession(aWsSession), + iFirstRunL(ETrue) + { + CActiveScheduler::Add(this); + Queue(); + } + +CCoeRedrawer::~CCoeRedrawer() + { + Cancel(); + } + +void CCoeRedrawer::Queue() + { + iWsSession.RedrawReady(&iStatus); + SetActive(); + } + +void CCoeRedrawer::RunL() + { + TWsRedrawEvent redraw; + iWsSession.GetRedraw(redraw); + const TUint handle = redraw.Handle(); + __ASSERT_ALWAYS(IsHandleValid(handle), Panic(ECoePanicInvalidHandle)); + CCoeControl* window=REINTERPRET_CAST(CCoeControl*,handle); + Queue(); +#if defined(_DEBUG) + if (window) + { + TRAPD(err, window->HandleRedrawEvent(redraw.Rect())); + __ASSERT_ALWAYS(err==KErrNone,Panic(ECoePanicLeaveWithoutTrapDuringRedraw)); + } +#else + if (window) + window->HandleRedrawEvent(redraw.Rect()); +#endif + iWsSession.Flush(); //flush the window-server client-side buffer *after* HandleRedrawEvent has done any drawing + +#if defined(USE_IH_RAISE_EVENT) + const TInt appStartupInstrumentationEventIdBase=CCoeEnv::Static()->AppStartupInstrumentationEventIdBase(); + if (appStartupInstrumentationEventIdBase!=0) + { + IH_DECLARE( lInstrumentationHandler ); + IH_CREATE( lInstrumentationHandler ); + IH_RAISE_EVENT( lInstrumentationHandler, appStartupInstrumentationEventIdBase+MTestInstrumentation::TIDOffsetEndApplicationFirstRedraw ); + IH_DELETE( lInstrumentationHandler ); + } +#endif + if (iFirstRunL) + { + iFirstRunL=EFalse; + } + } + +void CCoeRedrawer::DoCancel() + { + iWsSession.RedrawReadyCancel(); + }