--- 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