# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1284545547 -10800 # Node ID eaa079afe64c2c59916826d2ceb01742e088b54b # Parent 78e19bc09b730e996ab5b648391a18510e684e82 Revision: 201035 Kit: 201036 diff -r 78e19bc09b73 -r eaa079afe64c rom/alfred.iby --- a/rom/alfred.iby Tue Sep 14 23:02:38 2010 +0300 +++ b/rom/alfred.iby Wed Sep 15 13:12:27 2010 +0300 @@ -128,6 +128,7 @@ data=DATAZ_/RESOURCE_FILES_DIR/effects/informationnote_disappear.fxml RESOURCE_FILES_DIR/effects/informationnote_disappear.fxml data=DATAZ_/RESOURCE_FILES_DIR/effects/layoutswitch_appear.fxml RESOURCE_FILES_DIR/effects/layoutswitch_appear.fxml data=DATAZ_/RESOURCE_FILES_DIR/effects/layoutswitch_disappear.fxml RESOURCE_FILES_DIR/effects/layoutswitch_disappear.fxml +data=DATAZ_/RESOURCE_FILES_DIR/effects/longappstart_img.mbm RESOURCE_FILES_DIR/effects/longappstart_img.mbm data=DATAZ_/RESOURCE_FILES_DIR/effects/musicplayer_popup_appear.fxml RESOURCE_FILES_DIR/effects/musicplayer_popup_appear.fxml data=DATAZ_/RESOURCE_FILES_DIR/effects/musicplayer_popup_disappear.fxml RESOURCE_FILES_DIR/effects/musicplayer_popup_disappear.fxml data=DATAZ_/RESOURCE_FILES_DIR/effects/musicplayer_viewswitch_in.fxml RESOURCE_FILES_DIR/effects/musicplayer_viewswitch_in.fxml diff -r 78e19bc09b73 -r eaa079afe64c uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiCanvasVisual.h --- a/uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiCanvasVisual.h Tue Sep 14 23:02:38 2010 +0300 +++ b/uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiCanvasVisual.h Wed Sep 15 13:12:27 2010 +0300 @@ -433,6 +433,7 @@ IMPORT_C void StoreRenderBufferL(); void DrawStoredVisualRenderBuffer(TInt aCanvasDrawMode) const; void DrawStoredFullScreenRenderBuffer(TInt aCanvasDrawMode, CHuiGc& aGc) const; + void DrawExternalImage(CHuiGc& aGc) const; IMPORT_C void FreeRenderBuffer(); IMPORT_C TRect CommandBufferCoverage(TInt aOrientation); diff -r 78e19bc09b73 -r eaa079afe64c uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/huigifanimationtexture.h --- a/uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/huigifanimationtexture.h Tue Sep 14 23:02:38 2010 +0300 +++ b/uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/huigifanimationtexture.h Wed Sep 15 13:12:27 2010 +0300 @@ -49,6 +49,7 @@ IMPORT_C void Start(); IMPORT_C void Stop(); IMPORT_C void EnableAnimation(TBool aEnable); + IMPORT_C void DeleteAnimatedTexture(); protected: CHuiGifAnimationTexture(CHuiTextureManager& aManager,THuiTextureUploadFlags aFlags, TInt aId); void ConstructL(const TDesC& aFilename); diff -r 78e19bc09b73 -r eaa079afe64c uiaccelerator_plat/alf_extension_api/inc/alf/alfconstants.h --- a/uiaccelerator_plat/alf_extension_api/inc/alf/alfconstants.h Tue Sep 14 23:02:38 2010 +0300 +++ b/uiaccelerator_plat/alf_extension_api/inc/alf/alfconstants.h Wed Sep 15 13:12:27 2010 +0300 @@ -360,6 +360,7 @@ EAlfTextureNotifySkinChanged, EAlfTextureUpdateOwnerId, EAlfTextureSetAutoSizeParams, + EAlfTextureCleanAnimation, // Display subsession functions EAlfDisplaySetClearBackground =2200, diff -r 78e19bc09b73 -r eaa079afe64c uiaccelerator_plat/alf_visual_api/inc/alf/alftexture.h --- a/uiaccelerator_plat/alf_visual_api/inc/alf/alftexture.h Tue Sep 14 23:02:38 2010 +0300 +++ b/uiaccelerator_plat/alf_visual_api/inc/alf/alftexture.h Wed Sep 15 13:12:27 2010 +0300 @@ -343,6 +343,12 @@ */ IMPORT_C TInt RefCountingAction() const; + /** + * Cleans the content for the animated texture when unloading has happened + * @return + */ + void ClearAnimatedContent(); + /** @endAPI */ enum TAlfTextureReleaseFlags diff -r 78e19bc09b73 -r eaa079afe64c uiacceltk/hitchcock/Client/eabi/alfclientu.DEF --- a/uiacceltk/hitchcock/Client/eabi/alfclientu.DEF Tue Sep 14 23:02:38 2010 +0300 +++ b/uiacceltk/hitchcock/Client/eabi/alfclientu.DEF Wed Sep 15 13:12:27 2010 +0300 @@ -1347,3 +1347,4 @@ _ZN10CAlfDrawer26FallbackCopyScreenToBitmapER15CWsScreenDeviceP10CFbsBitmapRK5TRect @ 1346 NONAME _ZN17AlfDrawerInternal18CopyScreenToBitmapEP25MAlfDrawerScreenInterfaceP10CFbsBitmapRK5TRect @ 1347 NONAME + diff -r 78e19bc09b73 -r eaa079afe64c uiacceltk/hitchcock/Client/inc/alfclient.h --- a/uiacceltk/hitchcock/Client/inc/alfclient.h Tue Sep 14 23:02:38 2010 +0300 +++ b/uiacceltk/hitchcock/Client/inc/alfclient.h Wed Sep 15 13:12:27 2010 +0300 @@ -281,6 +281,13 @@ * @param aParams auto size paramters. */ TInt TextureSetAutoSizeParams( TInt aId, TInt aManagerId, const TAlfTextureAutoSizeParams& aParams ); + + /** + * Cleans the animated texture content + * + * @param aId ID of the texture. + */ + TInt ClearTextureAnimation( TInt aId ); // Misc diff -r 78e19bc09b73 -r eaa079afe64c uiacceltk/hitchcock/Client/src/alfclient.cpp --- a/uiacceltk/hitchcock/Client/src/alfclient.cpp Tue Sep 14 23:02:38 2010 +0300 +++ b/uiacceltk/hitchcock/Client/src/alfclient.cpp Wed Sep 15 13:12:27 2010 +0300 @@ -1114,5 +1114,10 @@ } } +TInt RAlfClient::ClearTextureAnimation( TInt aId ) + { + TPckg idPckg(aId); + return SendReceive(EAlfTextureCleanAnimation, TIpcArgs(aId) ); + } // end of file diff -r 78e19bc09b73 -r eaa079afe64c uiacceltk/hitchcock/Client/src/alftexture.cpp --- a/uiacceltk/hitchcock/Client/src/alftexture.cpp Tue Sep 14 23:02:38 2010 +0300 +++ b/uiacceltk/hitchcock/Client/src/alftexture.cpp Wed Sep 15 13:12:27 2010 +0300 @@ -485,4 +485,11 @@ return manager; } +void CAlfTexture::ClearAnimatedContent() + { + if (iData->iAnimated) + { + iData->iEnv->Client().ClearTextureAnimation( iData->iId ); + } + } diff -r 78e19bc09b73 -r eaa079afe64c uiacceltk/hitchcock/Client/src/alftexturemanager.cpp --- a/uiacceltk/hitchcock/Client/src/alftexturemanager.cpp Tue Sep 14 23:02:38 2010 +0300 +++ b/uiacceltk/hitchcock/Client/src/alftexturemanager.cpp Wed Sep 15 13:12:27 2010 +0300 @@ -778,6 +778,7 @@ else { entry.iTexture->StopAnimation(); + entry.iTexture->ClearAnimatedContent(); } TInt releaseFlags = entry.iTexture->ReleaseFlags(); @@ -804,7 +805,9 @@ } else { - entry.iTexture->StopAnimation(); + entry.iTexture->StopAnimation(); + + entry.iTexture->ClearAnimatedContent(); } TInt releaseFlags = entry.iTexture->ReleaseFlags(); diff -r 78e19bc09b73 -r eaa079afe64c uiacceltk/hitchcock/ServerCore/Inc/alfappsrvsession.h --- a/uiacceltk/hitchcock/ServerCore/Inc/alfappsrvsession.h Tue Sep 14 23:02:38 2010 +0300 +++ b/uiacceltk/hitchcock/ServerCore/Inc/alfappsrvsession.h Wed Sep 15 13:12:27 2010 +0300 @@ -210,7 +210,7 @@ void DoFocusLostEffect(TInt aEffect, CHuiVisual& aRootVisual ); void DoFocusGainedEffect(TInt aEffect, CHuiVisual& aRootVisual ); - + void TextureCleanAnimation(const RMessage2& aMessage); /** * Checks that texture owner id has been updated. * @param aMessage message. diff -r 78e19bc09b73 -r eaa079afe64c uiacceltk/hitchcock/ServerCore/Src/alfappsrvsession.cpp --- a/uiacceltk/hitchcock/ServerCore/Src/alfappsrvsession.cpp Tue Sep 14 23:02:38 2010 +0300 +++ b/uiacceltk/hitchcock/ServerCore/Src/alfappsrvsession.cpp Wed Sep 15 13:12:27 2010 +0300 @@ -746,6 +746,14 @@ } break; } + case EAlfTextureCleanAnimation: + { + if ( RequireTextureOwnerId( aMessage ) ) + { + TextureCleanAnimation(aMessage); + } + break; + } case EAlfTextureStartAnimation: { if ( RequireTextureOwnerId( aMessage ) ) @@ -2904,5 +2912,19 @@ aMessage.Complete( err ); } - +void CAlfAppSrvSession::TextureCleanAnimation(const RMessage2& aMessage) + { + TInt id = aMessage.Int0(); + CHuiGifAnimationTexture* tex = NULL; + for (TInt index = 0; index < iAnimatedTextures.Count(); index++) + { + tex = iAnimatedTextures.operator[](index); + if (tex->Id() == id) + { + tex->DeleteAnimatedTexture(); + break; + } + } + aMessage.Complete( KErrNone ); + } // End of file diff -r 78e19bc09b73 -r eaa079afe64c uiacceltk/hitchcock/coretoolkit/BWINS/hitchcocku.DEF --- a/uiacceltk/hitchcock/coretoolkit/BWINS/hitchcocku.DEF Tue Sep 14 23:02:38 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/BWINS/hitchcocku.DEF Wed Sep 15 13:12:27 2010 +0300 @@ -1609,4 +1609,5 @@ ?ReleaseAllCachedRenderTargets@CHuiFxGroupLayer@@UAEXAAVCHuiFxEngine@@@Z @ 1608 NONAME ; void CHuiFxGroupLayer::ReleaseAllCachedRenderTargets(class CHuiFxEngine &) ?ReleaseAllCachedRenderTargets@CHuiFxFilterLayer@@UAEXAAVCHuiFxEngine@@@Z @ 1609 NONAME ; void CHuiFxFilterLayer::ReleaseAllCachedRenderTargets(class CHuiFxEngine &) ?ReleaseAllCachedRenderTargets@CHuiFxLayer@@UAEXAAVCHuiFxEngine@@@Z @ 1610 NONAME ; void CHuiFxLayer::ReleaseAllCachedRenderTargets(class CHuiFxEngine &) + ?DeleteAnimatedTexture@CHuiGifAnimationTexture@@QAEXXZ @ 1611 NONAME ; void CHuiGifAnimationTexture::DeleteAnimatedTexture(void) diff -r 78e19bc09b73 -r eaa079afe64c uiacceltk/hitchcock/coretoolkit/eabi/hitchcocku.DEF --- a/uiacceltk/hitchcock/coretoolkit/eabi/hitchcocku.DEF Tue Sep 14 23:02:38 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/eabi/hitchcocku.DEF Wed Sep 15 13:12:27 2010 +0300 @@ -2010,4 +2010,5 @@ _ZN16CHuiFxGroupLayer29ReleaseAllCachedRenderTargetsER12CHuiFxEngine @ 2009 NONAME _ZN17CHuiFxFilterLayer29ReleaseAllCachedRenderTargetsER12CHuiFxEngine @ 2010 NONAME _ZN17CHuiFxVisualLayer29ReleaseAllCachedRenderTargetsER12CHuiFxEngine @ 2011 NONAME + _ZN23CHuiGifAnimationTexture21DeleteAnimatedTextureEv @ 2012 NONAME diff -r 78e19bc09b73 -r eaa079afe64c uiacceltk/hitchcock/coretoolkit/inc/HuiCmdBufferBrush.h --- a/uiacceltk/hitchcock/coretoolkit/inc/HuiCmdBufferBrush.h Tue Sep 14 23:02:38 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/inc/HuiCmdBufferBrush.h Wed Sep 15 13:12:27 2010 +0300 @@ -89,8 +89,10 @@ void EffectDrawSelf( CHuiGc &aGc, const TRect & aDisplayRect) const; THuiRealRect EffectDisplayRect() const __SOFTFP; void SetLoadingEffect(TBool aLoading); - void EffectSetSource( TBool aIsInput1 ); - TBool EffectGetSource() const; + void EffectSetSource( THuiFxVisualSrcType aSource ); + THuiFxVisualSrcType EffectGetSource() const; + void SetExternalTexture(CHuiTexture* aTexture); + CHuiTexture* ExternalTexture(); TBool EffectReadyToDrawNextFrame() const; public: // from MHuiCmdBufDestroyObserver diff -r 78e19bc09b73 -r eaa079afe64c uiacceltk/hitchcock/coretoolkit/inc/HuiFxVisualLayer.h --- a/uiacceltk/hitchcock/coretoolkit/inc/HuiFxVisualLayer.h Tue Sep 14 23:02:38 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/inc/HuiFxVisualLayer.h Wed Sep 15 13:12:27 2010 +0300 @@ -65,7 +65,8 @@ private: void ApplyTransformations(CHuiGc& aGc); - + void ReleaseExtTexture(); + //CHuiVisual* iVisual; MHuiEffectable * iVisual; CHuiFxParameterManager* iParameterManager; @@ -97,6 +98,7 @@ TReal32 iSkewOriginY; TReal32 iSkewOriginZ; + CHuiTexture* iExtTexture; // This is only set for cloned object HBufC* iExtBitmapFile; TReal32 iOpacity; TBool iOpaqueHint; diff -r 78e19bc09b73 -r eaa079afe64c uiacceltk/hitchcock/coretoolkit/inc/HuiRosterImpl.h --- a/uiacceltk/hitchcock/coretoolkit/inc/HuiRosterImpl.h Tue Sep 14 23:02:38 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/inc/HuiRosterImpl.h Wed Sep 15 13:12:27 2010 +0300 @@ -330,8 +330,11 @@ void EffectDrawSelf( CHuiGc &aGc, const TRect & aDisplayRect) const; THuiRealRect EffectDisplayRect() const __SOFTFP; void SetLoadingEffect(TBool aLoading); - void EffectSetSource( TBool aIsInput1 ); - TBool EffectGetSource() const; + void EffectSetSource( THuiFxVisualSrcType aSource ); + THuiFxVisualSrcType EffectGetSource() const; + void SetExternalTexture(CHuiTexture* aTexture); + CHuiTexture* ExternalTexture(); + TBool EffectReadyToDrawNextFrame() const; // From MHuiMemoryLevelObserver @@ -510,7 +513,7 @@ /** Effect */ CHuiFxEffect* iEffect; TReal32 iEffectOpacity; - TBool iIsInput1; + THuiFxVisualSrcType iEffectSourceType; /** Render buffer */ CHuiCanvasGc* iCanvasGc; diff -r 78e19bc09b73 -r eaa079afe64c uiacceltk/hitchcock/coretoolkit/inc/huieffectable.h --- a/uiacceltk/hitchcock/coretoolkit/inc/huieffectable.h Tue Sep 14 23:02:38 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/inc/huieffectable.h Wed Sep 15 13:12:27 2010 +0300 @@ -20,9 +20,13 @@ #ifndef HUIEFFECTABLE_H_ #define HUIEFFECTABLE_H_ +#include "HuiFxConstants.h" + class THuiRealRect; class CHuiFxEffect; class CHuiGc; +class CFbsBitmap; +class CHuiTexture; class MHuiEffectable { @@ -37,8 +41,10 @@ virtual void EffectDrawSelf( CHuiGc &aGc, const TRect & aDisplayRect) const=0; virtual THuiRealRect EffectDisplayRect() const __SOFTFP=0; virtual void SetLoadingEffect(TBool aLoading)=0; - virtual void EffectSetSource( TBool aIsInput1 )=0; - virtual TBool EffectGetSource() const=0; + virtual void EffectSetSource( THuiFxVisualSrcType aSource )=0; + virtual THuiFxVisualSrcType EffectGetSource() const=0; + virtual void SetExternalTexture(CHuiTexture* aTexture)=0; + virtual CHuiTexture* ExternalTexture()=0; virtual TBool EffectReadyToDrawNextFrame() const = 0; }; diff -r 78e19bc09b73 -r eaa079afe64c uiacceltk/hitchcock/coretoolkit/src/HuiCanvasVisual.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/HuiCanvasVisual.cpp Tue Sep 14 23:02:38 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiCanvasVisual.cpp Wed Sep 15 13:12:27 2010 +0300 @@ -137,7 +137,6 @@ CHuiCanvasVisual::~CHuiCanvasVisual() { - FreeRenderBuffer(); if (iCanvasVisualData) { @@ -400,12 +399,16 @@ return; } - if ((IsDelayedEffectSource() || Freezed())) + if ((IsDelayedEffectSource() || Freezed())) { // Select right draw mode THuiCanvasDrawMode drawMode = (Flags() & EHuiVisualFlagOpaqueHint) ? EHuiCanvasDrawModeNormal : EHuiCanvasDrawModeBlend; - - if (StoredRenderBuffer()) + if(Effectable()->ExternalTexture()) + { + DrawExternalImage(aGc); + return; + } + else if (StoredRenderBuffer()) { DrawStoredFullScreenRenderBuffer(drawMode, aGc); return; @@ -600,7 +603,14 @@ // Select right draw mode THuiCanvasDrawMode drawMode = (Flags() & EHuiVisualFlagOpaqueHint) ? EHuiCanvasDrawModeNormal : EHuiCanvasDrawModeBlend; - if (StoredRenderBuffer()) + THuiFxVisualSrcType effectSource = Effectable()->EffectGetSource(); + + if(effectSource == EVisualSrcBitmap && Effectable()->ExternalTexture()) + { + DrawExternalImage(aGc); + return; + } + else if (effectSource == EVisualSrcInput1 && StoredRenderBuffer()) { DrawStoredFullScreenRenderBuffer(drawMode, aGc); return; @@ -1438,17 +1448,57 @@ 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) { - if (iCanvasVisualData->iStoredRenderBuffer) - { - delete iCanvasVisualData->iStoredRenderBuffer; - iCanvasVisualData->iStoredRenderBuffer = NULL; - delete iHuiLayoutPrivateData->iGc; - iHuiLayoutPrivateData->iGc = NULL; - } + delete iCanvasVisualData->iStoredRenderBuffer; + iCanvasVisualData->iStoredRenderBuffer = NULL; + } + if (iHuiLayoutPrivateData) + { + delete iHuiLayoutPrivateData->iGc; + iHuiLayoutPrivateData->iGc = NULL; } } diff -r 78e19bc09b73 -r eaa079afe64c uiacceltk/hitchcock/coretoolkit/src/HuiCmdBufferBrush.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/HuiCmdBufferBrush.cpp Tue Sep 14 23:02:38 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiCmdBufferBrush.cpp Wed Sep 15 13:12:27 2010 +0300 @@ -236,13 +236,25 @@ { // TODO } -void CHuiCmdBufferBrush::EffectSetSource( TBool /*aIsInput1*/ ) +void CHuiCmdBufferBrush::EffectSetSource( THuiFxVisualSrcType /*aSource*/ ) { } -TBool CHuiCmdBufferBrush::EffectGetSource() const +THuiFxVisualSrcType CHuiCmdBufferBrush::EffectGetSource() const + { + return EVisualSrcVisual; + } + +void CHuiCmdBufferBrush::SetExternalTexture(CHuiTexture* aTexture) { - return EFalse; + // Not used } + +CHuiTexture* CHuiCmdBufferBrush::ExternalTexture() + { + // Not used + return NULL; + } + TBool CHuiCmdBufferBrush::EffectReadyToDrawNextFrame() const { return ETrue; diff -r 78e19bc09b73 -r eaa079afe64c uiacceltk/hitchcock/coretoolkit/src/HuiFxEffectParser.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/HuiFxEffectParser.cpp Tue Sep 14 23:02:38 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiFxEffectParser.cpp Wed Sep 15 13:12:27 2010 +0300 @@ -356,7 +356,7 @@ } if (aLayer && aLayer->Type() == ELayerTypeGroup) { - CHuiFxGroupLayer* group = reinterpret_cast(aLayer); + CHuiFxGroupLayer* group = static_cast(aLayer); group->AddLayerL( visual ); // ownership transferred } else @@ -1196,6 +1196,8 @@ #ifdef _HUI_FX_PARSER_LOGGING __ALFFXLOGSTRING1("CHuiFxEffectParser::GetSrcTypeL - 0x%x ",this); #endif + + if (aNode->NodeType() != CMDXMLNode::EElementNode) { FAIL(KErrGeneral, _L("Text node expected while reading visual source type")); @@ -1211,17 +1213,18 @@ TPtrC attributeValue; TPtrC attributeName; User::LeaveIfError(((CMDXMLElement*)aNode)->AttributeDetails( attributeIndex, attributeName, attributeValue )); - - if( attributeValue.Compare( KLitItem ) == 0 ) + + + if( attributeValue.CompareF( KLitItem ) == 0 ) { return EVisualSrcVisual; } - else if ( attributeValue.Compare( KLitInput1 ) == 0 ) + else if ( attributeValue.CompareF( KLitInput1 ) == 0 ) { // This means that the source is given as a parameter to the effect return EVisualSrcInput1; } - else if ( attributeValue.Compare( KLitInput2 ) == 0 ) + else if ( attributeValue.CompareF( KLitInput2 ) == 0 ) { // This means that the source is given as a parameter to the effect return EVisualSrcInput2; diff -r 78e19bc09b73 -r eaa079afe64c uiacceltk/hitchcock/coretoolkit/src/HuiFxVisualLayer.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/HuiFxVisualLayer.cpp Tue Sep 14 23:02:38 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiFxVisualLayer.cpp Wed Sep 15 13:12:27 2010 +0300 @@ -207,9 +207,16 @@ RDebug::Print(_L("CHuiFxVisualLayer::~CHuiFxVisualLayer - 0x%x "), this); #endif + delete iExtBitmapFile; delete iParameterManager; iParameterManager = NULL; + + ReleaseExtTexture(); + if(iVisual) + { + iVisual->SetExternalTexture(NULL); + } } EXPORT_C TBool CHuiFxVisualLayer::Changed() const @@ -240,6 +247,8 @@ { if(iRenderBuffer) { + ReleaseExtTexture(); + aEngine.ReleaseRenderbuffer(iRenderBuffer); iRenderBuffer = NULL; } @@ -271,8 +280,8 @@ forceRefresh = ETrue; } - // don't update render buffer if visual is not changed or screenshot is used - if(forceRefresh || (iVisualContentChanged && iSrcType!=EVisualSrcInput1)) + // Don't update render buffer if visual is not changed or screenshot/external image is used (except in force refresh case) + if(forceRefresh || (iVisualContentChanged && iSrcType==EVisualSrcVisual)) { if(!iVisualContentOpaque) { @@ -296,11 +305,43 @@ aGc.PushClip(); TRect bufferArea = TRect(TPoint(0,0), backbufferSize); aGc.SetClip(bufferArea); // this does not transform bufferArea which is fine for us + + // If needed, create texture if there is a bimap source file set + if(iSrcType==EVisualSrcBitmap && iExtBitmapFile && !iExtTexture) + { + // Note: we are here only if also forceRefresh is true + + CFbsBitmap *bm = new CFbsBitmap; + if (bm) + { + // Load the bitmap file and set it to the linked visual + TInt err = bm->Load(*iExtBitmapFile, 0); + if(!err && bm->Handle()) + { + // Upload as a texture + TRAP(err, + iExtTexture = CHuiTexture::NewL(); + iExtTexture->UploadL(*bm); + ); + if (!err) + { + iVisual->SetExternalTexture(iExtTexture); + } + else + { + delete iExtTexture; + iExtTexture = NULL; + iVisual->SetExternalTexture(NULL); + } + } + delete bm; + } + } - // Draw visual content to aTarget - iVisual->EffectSetSource(iSrcType==EVisualSrcInput1); + // Draw visual content to aGc + iVisual->EffectSetSource(iSrcType); iVisual->EffectDrawSelf( aGc, TargetRect() ); - iVisual->EffectSetSource(EFalse); + iVisual->EffectSetSource(EVisualSrcVisual); // set visual source to be default // Restore original clipping aGc.PopClip(); @@ -502,14 +543,15 @@ #endif delete iExtBitmapFile; iExtBitmapFile = NULL; + + ReleaseExtTexture(); + if ( aFilename.Length() == 0 ) { // don't set an empty filename return; } - iExtBitmapFile = HBufC::NewL( aFilename.Length() ); - *iExtBitmapFile = aFilename; - //TODO: the bitmap from this filename should be loaded as texture to the visual. + iExtBitmapFile = aFilename.AllocL(); } void CHuiFxVisualLayer::FxmlVisualInputs(RArray &aArray) { @@ -552,3 +594,30 @@ iVisualContentOpaque = aOpaque; } +void CHuiFxVisualLayer::ReleaseExtTexture() + { + // Use iRenderBuffer context to make sure there is always active context when iExtTexture is deleted. + // Otherwise the texture will not be freed and cause a memory leak. + // + // The object iRenderBuffer is created in first Draw() call (like iExtTexture), and deleted only in ReleaseAllCachedRenderTargets(). The latter + // function calls ReleaseExtTexture() first. So we can be sure that iRenderBuffer is always set when iExtTexture is set. + // If this class is deleted without calling ReleaseAllCachedRenderTargets(), also destructor calls ReleaseExtTexture(). + + ASSERT(!(iExtTexture && !iRenderBuffer)); + + if (iExtTexture && iRenderBuffer) + { + // just to make sure there is some context active when deleting the texture... + iRenderBuffer->BindAsRenderTarget(); + + delete iExtTexture; + iExtTexture = NULL; + if(iVisual) + { + iVisual->SetExternalTexture(NULL); + } + + iRenderBuffer->UnbindAsRenderTarget(); + } + } + diff -r 78e19bc09b73 -r eaa079afe64c uiacceltk/hitchcock/coretoolkit/src/HuiRosterImpl.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/HuiRosterImpl.cpp Tue Sep 14 23:02:38 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiRosterImpl.cpp Wed Sep 15 13:12:27 2010 +0300 @@ -1874,14 +1874,25 @@ { // not needed } -void CHuiRosterImpl::EffectSetSource( TBool aIsInput1 ) +void CHuiRosterImpl::EffectSetSource( THuiFxVisualSrcType aSource ) { - iIsInput1 = aIsInput1; + iEffectSourceType = aSource; + } + +THuiFxVisualSrcType CHuiRosterImpl::EffectGetSource() const + { + return iEffectSourceType; } -TBool CHuiRosterImpl::EffectGetSource() const +void CHuiRosterImpl::SetExternalTexture(CHuiTexture* aTexture) { - return iIsInput1; + // Not used + } + +CHuiTexture* CHuiRosterImpl::ExternalTexture() + { + // Not used + return NULL; } TBool CHuiRosterImpl::EffectReadyToDrawNextFrame() const diff -r 78e19bc09b73 -r eaa079afe64c uiacceltk/hitchcock/coretoolkit/src/HuiVisual.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/HuiVisual.cpp Tue Sep 14 23:02:38 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiVisual.cpp Wed Sep 15 13:12:27 2010 +0300 @@ -60,6 +60,8 @@ delete iDropShadow; delete iEffectParser; delete iEffect; + delete iEffectable; // Should be after deleting iEffect! + } // structs @@ -83,32 +85,45 @@ { public: // from MHuiEffectable CHuiEffectable(CHuiVisual *aVisual) : iVisual(aVisual) { } + void EffectSetEffect(CHuiFxEffect* aEffect); TReal32 EffectOpacity() const; void EffectSetOpacityAdditive(TReal32 aOpacity, TBool aReplace); void EffectDrawSelf( CHuiGc &aGc, const TRect & aDisplayRect) const; THuiRealRect EffectDisplayRect() const __SOFTFP; void SetLoadingEffect(TBool aLoading); - void EffectSetSource( TBool aIsInput1 ); - TBool EffectGetSource() const; + void EffectSetSource( THuiFxVisualSrcType aSource ); + THuiFxVisualSrcType EffectGetSource() const; + void SetExternalTexture(CHuiTexture* aTexture); + CHuiTexture* ExternalTexture(); TBool EffectReadyToDrawNextFrame() const; - private: - CHuiVisual *iVisual; - TBool iIsInput1; + CHuiVisual *iVisual; // not owned + CHuiTexture* iExtTexture; // not owned + THuiFxVisualSrcType iSourceType; }; void CHuiEffectable::EffectSetEffect(CHuiFxEffect* aEffect) { iVisual->SetEffect(aEffect); } -void CHuiEffectable::EffectSetSource( TBool aIsInput1 ) +void CHuiEffectable::EffectSetSource( THuiFxVisualSrcType aSource ) { - iIsInput1 = aIsInput1; + iSourceType = aSource; + } +THuiFxVisualSrcType CHuiEffectable::EffectGetSource() const + { + return iSourceType; } -TBool CHuiEffectable::EffectGetSource() const + +void CHuiEffectable::SetExternalTexture(CHuiTexture* aTexture) { - return iIsInput1; + iExtTexture = aTexture; + } + +CHuiTexture* CHuiEffectable::ExternalTexture() + { + return iExtTexture; } TBool CHuiEffectable::EffectReadyToDrawNextFrame() const @@ -192,9 +207,9 @@ iVisualData->iFreezed = aEnabled; } TBool CHuiVisual::Freezed() const -{ + { return iVisualData->iFreezed; -} + } EXPORT_C TBool CHuiVisual::EffectReadyToDrawNextFrame() const { @@ -209,7 +224,6 @@ return visual; } - EXPORT_C CHuiVisual::CHuiVisual(MHuiVisualOwner& aOwner) : iOpacity(1.f), iEffectOpacity(1.f), @@ -280,7 +294,6 @@ delete iTransform; if (iVisualData) { - delete iVisualData->iEffectable; if (iVisualData->iStoredRenderBuffer) { iVisualData->iStoredRenderBuffer->UnInitialize(); @@ -2194,14 +2207,24 @@ return EFalse; else { - TBool b = Effectable()->EffectGetSource(); - if (!b) - { // if not found from this object, try the parent - CHuiLayout *l = Layout(); - if (l) - return Layout()->IsDelayedEffectSource(); + THuiFxVisualSrcType sourceType = Effectable()->EffectGetSource(); + + if (sourceType == EVisualSrcVisual) + { // if this object has visual source, check the parent + CHuiLayout *layout = Layout(); + if (layout) + { + return (Layout()->IsDelayedEffectSource()); + } + else + { + return EFalse; + } } - return b; + else + { + return ETrue; + } } } diff -r 78e19bc09b73 -r eaa079afe64c uiacceltk/hitchcock/coretoolkit/src/huigifanimationtexture.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/huigifanimationtexture.cpp Tue Sep 14 23:02:38 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/src/huigifanimationtexture.cpp Wed Sep 15 13:12:27 2010 +0300 @@ -56,6 +56,13 @@ { iTexture->SetTextureChanged(ETrue); } + else + { + + iAnimationState = SetFlag(TInt(iAnimationState), TInt(EInitializing)); + iTexture1 = &iManager.LoadTextureL( + *iFilename,EHuiTextureUploadFlagDefault, iTextureId1, 0); + } CHuiStatic::ContinueRefresh(); } @@ -251,6 +258,23 @@ iAnimationState = SetFlag(TInt(iAnimationState), TInt(EEnabled)); } +EXPORT_C void CHuiGifAnimationTexture::DeleteAnimatedTexture() + { + + if (iTexture1) + { + delete iTexture1; + iTexture1 = 0; + } + if (iTexture2) + { + delete iTexture2; + iTexture2 = 0; + } + iTexture = 0; + iFrameCount = 0; + } + EXPORT_C CHuiGifAnimationTexture::~CHuiGifAnimationTexture() { if ( iAnimatedTextureGroupId ) diff -r 78e19bc09b73 -r eaa079afe64c uiacceltk/hitchcock/group/core_exports.inc --- a/uiacceltk/hitchcock/group/core_exports.inc Tue Sep 14 23:02:38 2010 +0300 +++ b/uiacceltk/hitchcock/group/core_exports.inc Wed Sep 15 13:12:27 2010 +0300 @@ -3,7 +3,7 @@ * Name : core_exports.inc * Part of : Alfred UI Toolkit * Description : Exported header files. -* Version : %version: tr1sido#8.1.38 % +* Version : %version: tr1sido#8.1.39 % * * Copyright © 2006-2007 Nokia. All rights reserved. * This material, including documentation and any related computer @@ -79,6 +79,7 @@ ../coretoolkit/data/informationnote_disappear.fxml /epoc32/release/winscw/urel/z/resource/effects/informationnote_disappear.fxml ../coretoolkit/data/layoutswitch_appear.fxml /epoc32/release/winscw/urel/z/resource/effects/layoutswitch_appear.fxml ../coretoolkit/data/layoutswitch_disappear.fxml /epoc32/release/winscw/urel/z/resource/effects/layoutswitch_disappear.fxml +../coretoolkit/data/longappstart_img.mbm /epoc32/release/winscw/urel/z/resource/effects/longappstart_img.mbm ../coretoolkit/data/musicplayer_popup_appear.fxml /epoc32/release/winscw/urel/z/resource/effects/musicplayer_popup_appear.fxml ../coretoolkit/data/musicplayer_popup_disappear.fxml /epoc32/release/winscw/urel/z/resource/effects/musicplayer_popup_disappear.fxml ../coretoolkit/data/musicplayer_viewswitch_in.fxml /epoc32/release/winscw/urel/z/resource/effects/musicplayer_viewswitch_in.fxml @@ -126,6 +127,7 @@ ../coretoolkit/data/warningnote_appear.fxml /epoc32/release/winscw/urel/z/resource/effects/warningnote_appear.fxml ../coretoolkit/data/warningnote_disappear.fxml /epoc32/release/winscw/urel/z/resource/effects/warningnote_disappear.fxml + // for EMULATOR UDEB ../coretoolkit/data/activeidle_viewswitch_add_page.fxml /epoc32/release/winscw/udeb/z/resource/effects/activeidle_viewswitch_add_page.fxml ../coretoolkit/data/activeidle_viewswitch_bg_anim_to_image.fxml /epoc32/release/winscw/udeb/z/resource/effects/activeidle_viewswitch_bg_anim_to_image.fxml @@ -174,6 +176,7 @@ ../coretoolkit/data/informationnote_disappear.fxml /epoc32/release/winscw/udeb/z/resource/effects/informationnote_disappear.fxml ../coretoolkit/data/layoutswitch_appear.fxml /epoc32/release/winscw/udeb/z/resource/effects/layoutswitch_appear.fxml ../coretoolkit/data/layoutswitch_disappear.fxml /epoc32/release/winscw/udeb/z/resource/effects/layoutswitch_disappear.fxml +../coretoolkit/data/longappstart_img.mbm /epoc32/release/winscw/udeb/z/resource/effects/longappstart_img.mbm ../coretoolkit/data/musicplayer_popup_appear.fxml /epoc32/release/winscw/udeb/z/resource/effects/musicplayer_popup_appear.fxml ../coretoolkit/data/musicplayer_popup_disappear.fxml /epoc32/release/winscw/udeb/z/resource/effects/musicplayer_popup_disappear.fxml ../coretoolkit/data/musicplayer_viewswitch_in.fxml /epoc32/release/winscw/udeb/z/resource/effects/musicplayer_viewswitch_in.fxml @@ -221,6 +224,7 @@ ../coretoolkit/data/warningnote_appear.fxml /epoc32/release/winscw/udeb/z/resource/effects/warningnote_appear.fxml ../coretoolkit/data/warningnote_disappear.fxml /epoc32/release/winscw/udeb/z/resource/effects/warningnote_disappear.fxml + // For ROM ../coretoolkit/data/activeidle_viewswitch_add_page.fxml /epoc32/data/z/resource/effects/activeidle_viewswitch_add_page.fxml ../coretoolkit/data/activeidle_viewswitch_bg_anim_to_image.fxml /epoc32/data/z/resource/effects/activeidle_viewswitch_bg_anim_to_image.fxml @@ -269,6 +273,7 @@ ../coretoolkit/data/informationnote_disappear.fxml /epoc32/data/z/resource/effects/informationnote_disappear.fxml ../coretoolkit/data/layoutswitch_appear.fxml /epoc32/data/z/resource/effects/layoutswitch_appear.fxml ../coretoolkit/data/layoutswitch_disappear.fxml /epoc32/data/z/resource/effects/layoutswitch_disappear.fxml +../coretoolkit/data/longappstart_img.mbm /epoc32/data/z/resource/effects/longappstart_img.mbm ../coretoolkit/data/musicplayer_popup_appear.fxml /epoc32/data/z/resource/effects/musicplayer_popup_appear.fxml ../coretoolkit/data/musicplayer_popup_disappear.fxml /epoc32/data/z/resource/effects/musicplayer_popup_disappear.fxml ../coretoolkit/data/musicplayer_viewswitch_in.fxml /epoc32/data/z/resource/effects/musicplayer_viewswitch_in.fxml @@ -316,7 +321,6 @@ ../coretoolkit/data/warningnote_appear.fxml /epoc32/data/z/resource/effects/warningnote_appear.fxml ../coretoolkit/data/warningnote_disappear.fxml /epoc32/data/z/resource/effects/warningnote_disappear.fxml - // Effect definitions are considered as differentiating SW and thus not available for foundation. #endif // ifndef ALF_USE_OPENWF_COMPOSITION #endif // #ifndef SYMBIAN_GRAPHICS_WSERV_QT_EFFECTS