Revision: 201035 RCL_3
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 15 Sep 2010 13:12:27 +0300
branchRCL_3
changeset 57 eaa079afe64c
parent 54 78e19bc09b73
child 63 e1987ab3768a
Revision: 201035 Kit: 201036
rom/alfred.iby
uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiCanvasVisual.h
uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/huigifanimationtexture.h
uiaccelerator_plat/alf_extension_api/inc/alf/alfconstants.h
uiaccelerator_plat/alf_visual_api/inc/alf/alftexture.h
uiacceltk/hitchcock/Client/eabi/alfclientu.DEF
uiacceltk/hitchcock/Client/inc/alfclient.h
uiacceltk/hitchcock/Client/src/alfclient.cpp
uiacceltk/hitchcock/Client/src/alftexture.cpp
uiacceltk/hitchcock/Client/src/alftexturemanager.cpp
uiacceltk/hitchcock/ServerCore/Inc/alfappsrvsession.h
uiacceltk/hitchcock/ServerCore/Src/alfappsrvsession.cpp
uiacceltk/hitchcock/coretoolkit/BWINS/hitchcocku.DEF
uiacceltk/hitchcock/coretoolkit/eabi/hitchcocku.DEF
uiacceltk/hitchcock/coretoolkit/inc/HuiCmdBufferBrush.h
uiacceltk/hitchcock/coretoolkit/inc/HuiFxVisualLayer.h
uiacceltk/hitchcock/coretoolkit/inc/HuiRosterImpl.h
uiacceltk/hitchcock/coretoolkit/inc/huieffectable.h
uiacceltk/hitchcock/coretoolkit/src/HuiCanvasVisual.cpp
uiacceltk/hitchcock/coretoolkit/src/HuiCmdBufferBrush.cpp
uiacceltk/hitchcock/coretoolkit/src/HuiFxEffectParser.cpp
uiacceltk/hitchcock/coretoolkit/src/HuiFxVisualLayer.cpp
uiacceltk/hitchcock/coretoolkit/src/HuiRosterImpl.cpp
uiacceltk/hitchcock/coretoolkit/src/HuiVisual.cpp
uiacceltk/hitchcock/coretoolkit/src/huigifanimationtexture.cpp
uiacceltk/hitchcock/group/core_exports.inc
--- 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
--- 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);
 
--- 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);
--- 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,
--- 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
--- 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
 
+
--- 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
 
--- 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<TInt> idPckg(aId);
+    return SendReceive(EAlfTextureCleanAnimation, TIpcArgs(aId) );
+    }
 // end of file
  
--- 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 );
+        }
+    }
 
--- 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();
--- 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.
--- 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    
--- 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)
 
--- 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
 
--- 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
--- 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;
--- 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;
--- 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;
     };
     
--- 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;
         }
     }
 
--- 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;
--- 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<CHuiFxGroupLayer*>(aLayer);
+                CHuiFxGroupLayer* group = static_cast<CHuiFxGroupLayer*>(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;
--- 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<THuiFxVisualSrcType> &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();
+        }	
+    }
+
--- 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
--- 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;
+            }
         }
    }
 
--- 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 )
--- 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