diff -r 000000000000 -r 2f259fa3e83a uifw/AvKon/src/AknSyncDraw.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uifw/AvKon/src/AknSyncDraw.cpp Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,157 @@ +/* +* Copyright (c) 2002 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 "AknSyncDraw.h" + + +class CCoeControlAccess : public CCoeControl + { +public: + using CCoeControl::ActivateGc; + using CCoeControl::DeactivateGc; + using CCoeControl::Window; + using CCoeControl::HandleRedrawEvent; + }; + + +enum TSyncDrawFlags + { + EInDrawLoop + }; + + +const TInt KSyncDrawArrayGranularity = 4; + + +EXPORT_C void MAknSyncDrawer::MAknSyncDrawer_Reserved_1() {} +EXPORT_C void MAknSyncDrawer::MAknSyncDrawer_Reserved_2() {} + + +EXPORT_C TAknSyncControlDrawer::TAknSyncControlDrawer() + { + } + +EXPORT_C void TAknSyncControlDrawer::SetControl(CCoeControl* aControl) + { + iControl = static_cast(aControl); + } + +EXPORT_C void TAknSyncControlDrawer::MasrPrepareForDraw() + { + iDrawRect = TRect(); + RWindow& window = iControl->Window(); + RRegion region; + window.GetInvalidRegion(region); + if (!region.CheckError()) + { + iDrawRect = region.BoundingRect(); + } + region.Close(); + } + +EXPORT_C void TAknSyncControlDrawer::MasrDraw() + { + if (!iDrawRect.IsEmpty()) + iControl->HandleRedrawEvent(iDrawRect); + } + +EXPORT_C void TAknSyncControlDrawer::MasrDeactivateGc() const + { + iControl->DeactivateGc(); + } + +EXPORT_C void TAknSyncControlDrawer::MasrActivateGc() const + { + iControl->ActivateGc(); + } + + +EXPORT_C CAknDrawSynchronizer* CAknDrawSynchronizer::NewL() + { + CAknDrawSynchronizer* self = new(ELeave) CAknDrawSynchronizer(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +EXPORT_C CAknDrawSynchronizer::~CAknDrawSynchronizer() + { + delete iSyncDrawers; + } + +CAknDrawSynchronizer::CAknDrawSynchronizer() + { + } + +void CAknDrawSynchronizer::ConstructL() + { + iSyncDrawers = new(ELeave) CSyncDrawers(KSyncDrawArrayGranularity); + } + +EXPORT_C void CAknDrawSynchronizer::AddL(MAknSyncDrawer* aDrawer) + { + Remove(aDrawer); + iSyncDrawers->AppendL(aDrawer); + } + +EXPORT_C void CAknDrawSynchronizer::Remove(MAknSyncDrawer* aDrawer) + { + TInt count = iSyncDrawers->Count(); + for (TInt ii = count-1; ii >= 0; ii--) + { + if (iSyncDrawers->At(ii) == aDrawer) + iSyncDrawers->Delete(ii); + } + } + +EXPORT_C void CAknDrawSynchronizer::Signal(const MAknSyncDrawer* aDrawer) + { + if (iFlags[EInDrawLoop]) + return; + iFlags.Set(EInDrawLoop); + + if (aDrawer) + aDrawer->MasrDeactivateGc(); + + const TInt count = iSyncDrawers->Count(); + TInt ii; + + // prepare to draw + for (ii = 0; iiAt(ii); + if (redrawer != aDrawer) + redrawer->MasrPrepareForDraw(); + } + + // draw + for (ii = 0; iiAt(ii); + if (redrawer != aDrawer) + redrawer->MasrDraw(); + } + + if (aDrawer) + aDrawer->MasrActivateGc(); + + iFlags.Clear(EInDrawLoop); + } + + +// End of File