diff -r 10534483575f -r 88b23e2e82e1 uiacceltk/hitchcock/coretoolkit/src/HuiRosterImpl.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/HuiRosterImpl.cpp Mon Mar 15 12:43:37 2010 +0200 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiRosterImpl.cpp Wed Mar 31 23:03:58 2010 +0300 @@ -60,6 +60,11 @@ CHuiRosterImpl::~CHuiRosterImpl() { + if (iDisplay) + { + iDisplay->Env().RemoveMemoryLevelObserver(this); + } + FreezeVisibleContentL(EFalse); delete iLongTapDetector; @@ -530,7 +535,7 @@ ASSERT(display!=NULL); - if (iCanvasRenderBuffer && iCanvasGc) + if (IsVisibleContentFrozen()) { DrawSelfFrozen(aGc, display); return; @@ -1621,19 +1626,30 @@ void CHuiRosterImpl::FreezeVisibleContentL(TBool aEnable) { + iRosterIsFrozen = aEnable; + + if (aEnable && !iMonitorMemoryLevel && iDisplay) + { + iDisplay->Env().AddMemoryLevelObserver(this); + iMonitorMemoryLevel = ETrue; + } + if (aEnable) { - if (!iCanvasGc) + if (UseRenderBufferForFreeze()) { - CHuiRenderPlugin& renderplugin = CHuiStatic::Renderer(); - iCanvasGc = renderplugin.CreateCanvasGcL(); - } - if (!iCanvasRenderBuffer) - { - iCanvasRenderBuffer = iCanvasGc->CreateRenderBufferL(TSize(0,0)); - iCanvasRenderBuffer->InitializeL(CHuiStatic::Env().Display(0).VisibleArea().Size()); - iCanvasRenderBuffer->Copy(TPoint(0,0)); - iCanvasRenderBufferOrientation = CHuiStatic::Env().Display(0).Orientation(); + if (!iCanvasGc) + { + CHuiRenderPlugin& renderplugin = CHuiStatic::Renderer(); + iCanvasGc = renderplugin.CreateCanvasGcL(); + } + if (!iCanvasRenderBuffer) + { + iCanvasRenderBuffer = iCanvasGc->CreateRenderBufferL(TSize(0,0)); + iCanvasRenderBuffer->InitializeL(CHuiStatic::Env().Display(0).VisibleArea().Size()); + iCanvasRenderBuffer->Copy(TPoint(0,0)); + iCanvasRenderBufferOrientation = CHuiStatic::Env().Display(0).Orientation(); + } } } else @@ -1648,7 +1664,7 @@ TBool CHuiRosterImpl::IsVisibleContentFrozen() const { - return ((iCanvasRenderBuffer != NULL) && (iCanvasGc != NULL)); + return iRosterIsFrozen; } void CHuiRosterImpl::EffectSetEffect(CHuiFxEffect* aEffect) @@ -1707,3 +1723,20 @@ { return iIsInput1; } + +void CHuiRosterImpl::SetMemoryLevel(THuiMemoryLevel /*aLevel*/) + { + if ( IsVisibleContentFrozen() && !UseRenderBufferForFreeze() ) + { + // Release render buffer if we are not supposed to use. + delete iCanvasGc; + iCanvasGc = NULL; + delete iCanvasRenderBuffer; + iCanvasRenderBuffer = NULL; + } + } + +TBool CHuiRosterImpl::UseRenderBufferForFreeze() const + { + return !iDisplay || !( iDisplay->Env().MemoryLevel() <= EHuiMemoryLevelLowest ); + }