--- /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 <coecntrl.h> // 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();
+ }