diff -r eaa079afe64c -r e1987ab3768a uiacceltk/hitchcock/coretoolkit/src/HuiCanvasVisual.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/HuiCanvasVisual.cpp Wed Sep 15 13:12:27 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiCanvasVisual.cpp Wed Oct 13 15:34:15 2010 +0300 @@ -137,6 +137,7 @@ CHuiCanvasVisual::~CHuiCanvasVisual() { + FreeRenderBuffer(); if (iCanvasVisualData) { @@ -303,7 +304,7 @@ if (iCanvasVisualData->iCommandsReceivedWhileNoCache) { Env().CanvasTextureCache().EnableTouchCountCheck( touchCountWasEnabled ); - if ( !KeepNoCache() && aAction == EDrawBuffer ) + if ( KeepCache() && aAction == EDrawBuffer ) { iCanvasVisualData->iCommandsReceivedWhileNoCache = EFalse; } @@ -399,16 +400,12 @@ return; } - if ((IsDelayedEffectSource() || Freezed())) + if ((IsDelayedEffectSource() || Freezed())) { // Select right draw mode THuiCanvasDrawMode drawMode = (Flags() & EHuiVisualFlagOpaqueHint) ? EHuiCanvasDrawModeNormal : EHuiCanvasDrawModeBlend; - if(Effectable()->ExternalTexture()) - { - DrawExternalImage(aGc); - return; - } - else if (StoredRenderBuffer()) + + if (StoredRenderBuffer()) { DrawStoredFullScreenRenderBuffer(drawMode, aGc); return; @@ -603,14 +600,7 @@ // Select right draw mode THuiCanvasDrawMode drawMode = (Flags() & EHuiVisualFlagOpaqueHint) ? EHuiCanvasDrawModeNormal : EHuiCanvasDrawModeBlend; - THuiFxVisualSrcType effectSource = Effectable()->EffectGetSource(); - - if(effectSource == EVisualSrcBitmap && Effectable()->ExternalTexture()) - { - DrawExternalImage(aGc); - return; - } - else if (effectSource == EVisualSrcInput1 && StoredRenderBuffer()) + if (StoredRenderBuffer()) { DrawStoredFullScreenRenderBuffer(drawMode, aGc); return; @@ -850,7 +840,7 @@ TRAP_IGNORE(iCanvasVisualData->iCanvasPainter->SetCommandSetL(aCommands)); // Memory optimization. Do not prepare cache if visual is inactive. - if (KeepNoCache()) + if (!KeepCache()) { iCanvasVisualData->iCommandsReceivedWhileNoCache = ETrue; ClearCache(); @@ -921,7 +911,7 @@ TRAP_IGNORE(iCanvasVisualData->iCanvasPainter->AddCommandSetL(aMoreCommands)); // Memory optimization. Do not prepare cache if visual is inactive. - if (KeepNoCache()) + if (!KeepCache()) { iCanvasVisualData->iCommandsReceivedWhileNoCache = ETrue; ClearCache(); @@ -1448,57 +1438,17 @@ gc.PopTransformationMatrix(); } - -void CHuiCanvasVisual::DrawExternalImage(CHuiGc& aGc) const - { - if (!Display()) - { - return; - } - - if (!iHuiLayoutPrivateData->iGc) - { - CHuiRenderPlugin& renderplugin = CHuiStatic::Renderer(); - // iHuiLayoutPrivateData->iGc is deleted in CHuiLayout destructor or CHuiCanvasVisual::FreeRenderBuffer when not needed anymore - iHuiLayoutPrivateData->iGc = renderplugin.CreateCanvasGcL(); - } - - TRect displayArea = Display()->VisibleArea(); - - if (Effectable()->ExternalTexture()) - { - CHuiCanvasGc& gc = *iHuiLayoutPrivateData->iGc; - gc.SetGc(aGc); - gc.SetDefaults(); - gc.PushTransformationMatrix(); - - TInt height = displayArea.Height(); - TInt width = displayArea.Width(); - - // Move the center of the image to the center of the screen - TInt tlX = width/2 - Effectable()->ExternalTexture()->Size().iWidth/2; - TInt tlY = height/2 - Effectable()->ExternalTexture()->Size().iHeight/2; - gc.Translate(tlX, tlY, 0.0f); - - // Draw the image and do the cleanup - gc.DrawImage(*Effectable()->ExternalTexture(), displayArea, TRect(TPoint(0,0), Effectable()->ExternalTexture()->Size()), CHuiGc::EStretchNone); - - gc.PopTransformationMatrix(); - - } - } - EXPORT_C void CHuiCanvasVisual::FreeRenderBuffer() { if (iCanvasVisualData) { - delete iCanvasVisualData->iStoredRenderBuffer; - iCanvasVisualData->iStoredRenderBuffer = NULL; - } - if (iHuiLayoutPrivateData) - { - delete iHuiLayoutPrivateData->iGc; - iHuiLayoutPrivateData->iGc = NULL; + if (iCanvasVisualData->iStoredRenderBuffer) + { + delete iCanvasVisualData->iStoredRenderBuffer; + iCanvasVisualData->iStoredRenderBuffer = NULL; + delete iHuiLayoutPrivateData->iGc; + iHuiLayoutPrivateData->iGc = NULL; + } } } @@ -1675,14 +1625,14 @@ return iCanvasVisualData->iCanvasPainter->HasCommandBuffers(EHuiCanvasBufferContainsTransparentClear); } -TBool CHuiCanvasVisual::KeepNoCache() const +TBool CHuiCanvasVisual::KeepCache() const { TBool rosterFrozen = Display() && Display()->Roster().IsVisibleContentFrozen(); TBool inactive = EFalse; inactive |= Flags() & EHuiVisualFlagInactive; inactive |= Flags() & EHuiVisualFlagUnderOpaqueHint; - return rosterFrozen || inactive; + return !( rosterFrozen || inactive ); } TBool CHuiCanvasVisual::EffectReadyToDrawNextFrame() const