# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1266854269 -7200 # Node ID d8a3531bc6b85a41595e7f1c313f1711a7bd6d42 # Parent 15bf7259bb7cf5ea7d68cd888203eff7752695f7 Revision: 201007 diff -r 15bf7259bb7c -r d8a3531bc6b8 layers.sysdef.xml --- a/layers.sysdef.xml Tue Feb 02 07:56:43 2010 +0200 +++ b/layers.sysdef.xml Mon Feb 22 17:57:49 2010 +0200 @@ -7,8 +7,14 @@ - + + + + + + + - + \ No newline at end of file diff -r 15bf7259bb7c -r d8a3531bc6b8 rom/alfred.iby --- a/rom/alfred.iby Tue Feb 02 07:56:43 2010 +0200 +++ b/rom/alfred.iby Mon Feb 22 17:57:49 2010 +0200 @@ -51,6 +51,7 @@ file=ABI_DIR\BUILD_DIR\alfhintplugin.dll SHARED_LIB_DIR\alfhintplugin.dll ECOM_PLUGIN(alfoogmplugin.dll, alfoogmplugin.RSC) +ECOM_PLUGIN(alfcrpplugin.dll, alfcrpplugin.RSC) data=DATAZ_\ECOM_RESOURCE_DIR\alfnonsupportedwscommands.rsc ECOM_RESOURCE_DIR\alfnonsupportedwscommands.rsc @@ -133,6 +134,8 @@ data=DATAZ_/RESOURCE_FILES_DIR/effects/taskswapper_app_start_rect.fxml RESOURCE_FILES_DIR/effects/taskswapper_app_start_rect.fxml data=DATAZ_/RESOURCE_FILES_DIR/effects/taskswapper_appear.fxml RESOURCE_FILES_DIR/effects/taskswapper_appear.fxml data=DATAZ_/RESOURCE_FILES_DIR/effects/taskswapper_disappear.fxml RESOURCE_FILES_DIR/effects/taskswapper_disappear.fxml +data=DATAZ_/RESOURCE_FILES_DIR/effects/toolbar_ext_appear.fxml RESOURCE_FILES_DIR/effects/toolbar_ext_appear.fxml +data=DATAZ_/RESOURCE_FILES_DIR/effects/toolbar_ext_disappear.fxml RESOURCE_FILES_DIR/effects/toolbar_ext_disappear.fxml data=DATAZ_/RESOURCE_FILES_DIR/effects/touchinput_close.fxml RESOURCE_FILES_DIR/effects/touchinput_close.fxml data=DATAZ_/RESOURCE_FILES_DIR/effects/touchinput_open.fxml RESOURCE_FILES_DIR/effects/touchinput_open.fxml data=DATAZ_/RESOURCE_FILES_DIR/effects/waitnote_appear.fxml RESOURCE_FILES_DIR/effects/waitnote_appear.fxml diff -r 15bf7259bb7c -r d8a3531bc6b8 uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiCanvasVisual.h --- a/uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiCanvasVisual.h Tue Feb 02 07:56:43 2010 +0200 +++ b/uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiCanvasVisual.h Mon Feb 22 17:57:49 2010 +0200 @@ -399,10 +399,13 @@ public: IMPORT_C void StoreRenderBufferL(); - void DrawStoredVisualRenderBuffer() const; - void DrawStoredFullScreenRenderBuffer(CHuiGc& aGc) const; + void DrawStoredVisualRenderBuffer(TInt aCanvasDrawMode) const; + void DrawStoredFullScreenRenderBuffer(TInt aCanvasDrawMode, CHuiGc& aGc) const; IMPORT_C void FreeRenderBuffer(); - + +protected: + virtual void VisualExtension(const TUid& aExtensionUid, TAny** aExtensionParams); + private: THuiCanvasPaintedArea CanvasPaintedArea(TInt aIndex) const; @@ -411,6 +414,10 @@ void DrawCanvasChildren(CHuiGc& aGc, TInt aIncludeCanvasFlags, TInt aExcludeCanvasFlags) const; TBool ChildTreeChanged(TInt aExcludeCanvasFlags) const; + static TBool RecursiveChildTreeChanged(CHuiVisual* aVisual, TInt aExcludeCanvasFlags); + static TBool RecursiveIsExternalContentDrawingEnabled(CHuiVisual* aVisual); + static TBool RecursiveHasCommandBuffers(CHuiVisual* aVisual); + private: struct THuiCanvasVisualData; diff -r 15bf7259bb7c -r d8a3531bc6b8 uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiDisplay.h --- a/uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiDisplay.h Tue Feb 02 07:56:43 2010 +0200 +++ b/uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiDisplay.h Mon Feb 22 17:57:49 2010 +0200 @@ -677,7 +677,7 @@ * * @return Pointer to native window, or NULL. */ - RDrawableWindow* NativeWindow(); + IMPORT_C RDrawableWindow* NativeWindow(); /** * Returns the rendering surface of the display. diff -r 15bf7259bb7c -r d8a3531bc6b8 uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiEnv.h --- a/uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiEnv.h Tue Feb 02 07:56:43 2010 +0200 +++ b/uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiEnv.h Mon Feb 22 17:57:49 2010 +0200 @@ -51,6 +51,7 @@ class CHuiThemeManager; class CHuiCanvasTextureCache; class CHuiFxEngine; +class MHuiSynchronizationObserver; class CHighResTimer; const TInt KHuiEnvReleasedActionId = 0x200100F8; @@ -759,6 +760,20 @@ CHuiCanvasTextureCache& CanvasTextureCache() const; + /** + * Performs drawing synchronization. + * @internal + * @param aId identifier. + * @param aObserver observer to be informed of completion. + */ + IMPORT_C void Synchronize(TInt aId, MHuiSynchronizationObserver* aObserver); + + /** + * Removes the controlgroup + * @param aId identifier. + + */ + void RemoveTheControlGroup(TInt aId); public: /* Implementaton of MHuiTextureLoadingCompletedObserver: */ @@ -988,6 +1003,10 @@ IMPORT_C void NotifyMemoryLevel(THuiMemoryLevel aMemoryLevel); IMPORT_C THuiMemoryLevel MemoryLevel(); + void DoSynchronize(); +private: + MHuiSynchronizationObserver* iSynchObserver; + TInt iSynchId; }; #endif // __HUIENV_H__ diff -r 15bf7259bb7c -r d8a3531bc6b8 uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiGc.h --- a/uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiGc.h Tue Feb 02 07:56:43 2010 +0200 +++ b/uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiGc.h Mon Feb 22 17:57:49 2010 +0200 @@ -421,6 +421,11 @@ IMPORT_C virtual void SetDimmingFog(const TRgb& aColor, TReal32 aAmount) __SOFTFP = 0; /** + * Clear rect using the current pen color + */ + IMPORT_C virtual void Clear(const TRect& aRect) = 0; + + /** * Clear using the current pen color. */ IMPORT_C virtual void Clear() = 0; @@ -938,12 +943,12 @@ IMPORT_C CHuiGc(); /* Methods. */ - + /** * Determines the projection viewport. */ IMPORT_C TRect ProjectionViewport() const; - + /** * Determines the display area not affected by orientation. */ diff -r 15bf7259bb7c -r d8a3531bc6b8 uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiS60Skin.h --- a/uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiS60Skin.h Tue Feb 02 07:56:43 2010 +0200 +++ b/uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiS60Skin.h Mon Feb 22 17:57:49 2010 +0200 @@ -57,12 +57,12 @@ /* Methods from MAknsSkinChangeObserver */ - void SkinContentChanged(); + IMPORT_C void SkinContentChanged(); - void SkinConfigurationChanged( + IMPORT_C void SkinConfigurationChanged( const TAknsSkinStatusConfigurationChangeReason aReason ); - void SkinPackageChanged( + IMPORT_C void SkinPackageChanged( const TAknsSkinStatusPackageChangeReason aReason ); public: @@ -127,6 +127,9 @@ } void UpdateBackgroundsL(const RArray& aItems); IMPORT_C CHuiTexture* BackgroundTexture(const TAknsItemID& aID); + + TRect SkinRect(const TAknsItemID& aID); + protected: // from CHuiSkin IMPORT_C void SkinExtension(const TUid& aExtensionUid, TAny** aExtensionParameters); void FreeBackgrounds(); @@ -143,6 +146,7 @@ */ void UpdateBackgroundL(); + private: /** Control context for the skin. */ @@ -150,6 +154,8 @@ /** Background texture from S60. */ CHuiTexture* iBackgroundTexture; + CFbsBitmap* iBackgroundBitmap; + TRect iBackgroundRect; /** To get CallBack from SkinServer when skin is changed */ RAknsSrvSession iSkinSrvSession; @@ -158,8 +164,29 @@ /** Background should be reloaded the next time it is needed. */ TBool iReloadBackground; TBool iSkinChanged; - CFbsBitmap* iBackgroundBitmap; + + class CSkinItem : public CBase + { + public : + + ~CSkinItem() + { + delete iBitmap; + }; + TAknsItemID iId; + TRect iSkinRect; + CFbsBitmap* iBitmap; + }; + RPointerArray iCachedSkinItems; + TAny* iSpare; - }; + +private: // helpers + + TInt SearchCachedSkinItemIndex(const TAknsItemID& aId); + TRect SearchCachedSkinItemRect(const TAknsItemID& aId); + CFbsBitmap* SearchCachedSkinItemBitmap(const TAknsItemID& aId); + }; + #endif // __HUIS60SKIN_H__ diff -r 15bf7259bb7c -r d8a3531bc6b8 uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiTimedValue.h --- a/uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiTimedValue.h Tue Feb 02 07:56:43 2010 +0200 +++ b/uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiTimedValue.h Mon Feb 22 17:57:49 2010 +0200 @@ -451,6 +451,7 @@ private: TInt iTimeRemainingWhenSuspended; TInt iSpare2; + friend class CHuiVisual; }; diff -r 15bf7259bb7c -r d8a3531bc6b8 uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiVisual.h --- a/uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiVisual.h Tue Feb 02 07:56:43 2010 +0200 +++ b/uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiVisual.h Mon Feb 22 17:57:49 2010 +0200 @@ -195,7 +195,8 @@ EHuiVisualFlagShouldBeUnderOpaqueHint = 0x20000000, EHuiVisualFlagShouldBeShown = 0x40000000, - + // visual that is used only by wserv + EHuiVisualFlagWserv = 0x80000000, EHuiVisualFlagLast = 0xFFFFFFFF }; @@ -1443,6 +1444,24 @@ { iLoadingEffect = aLoading; }; + + /** + * Queries canvas flags of the visual, returns result + * @internal + */ + TInt QueryCanvasFlags(); + + /** + * Checks if external content drawing is enabled for this visual, returns result + * @internal + */ + TBool QueryExternalContentDrawingEnabled(); + + /** + * Checks if visual has something to draw, returns result + * @internal + */ + TBool QueryHasDrawableContent(); protected: diff -r 15bf7259bb7c -r d8a3531bc6b8 uiaccelerator_plat/alf_visual_api/group/bld.inf --- a/uiaccelerator_plat/alf_visual_api/group/bld.inf Tue Feb 02 07:56:43 2010 +0200 +++ b/uiaccelerator_plat/alf_visual_api/group/bld.inf Mon Feb 22 17:57:49 2010 +0200 @@ -100,4 +100,6 @@ ../inc/goommonitor/goommonitorplugin.hrh MW_LAYER_PLATFORM_EXPORT_PATH(goommonitorplugin.hrh) ../inc/alf/alfcompositionclient.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/alfcompositionclient.h) -../inc/alf/alfcompositionutility.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/alfcompositionutility.h) \ No newline at end of file +../inc/alf/alfcompositionutility.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/alfcompositionutility.h) + +../inc/alf/alfdrawer.h MW_LAYER_PLATFORM_EXPORT_PATH(alf/alfdrawer.h) diff -r 15bf7259bb7c -r d8a3531bc6b8 uiaccelerator_plat/alf_visual_api/inc/alf/alfdrawer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiaccelerator_plat/alf_visual_api/inc/alf/alfdrawer.h Mon Feb 22 17:57:49 2010 +0200 @@ -0,0 +1,59 @@ +/* +* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef __ALFDRAWER_H__ +#define __ALFDRAWER_H__ + +#include + +/** + * This provides additional alf drawing synchronization. + * + * This class requires application environment (CCoeEnv) to exist. + */ +NONSHARABLE_CLASS( CAlfDrawer ) : public CBase + { +public: + /** + * Creates new CAlfDrawer instance. + * @return newly created instance. + */ + IMPORT_C static CAlfDrawer* NewL(); + + /** + * Destructor. + */ + IMPORT_C ~CAlfDrawer(); + +public: + /** + * Finishes drawing. + * This will perform similar operation as RWsSession::Finish + * and then wait for all pending drawing to be finished. + * @return error code, KErrNone upon success. + */ + IMPORT_C TInt Finish(); + +private: + CAlfDrawer(); + void ConstructL(); + +private: + struct TAlfDrawerData; + TAlfDrawerData* iData; + }; + +#endif // __ALFDRAWER_H__ diff -r 15bf7259bb7c -r d8a3531bc6b8 uiaccelerator_plat/alf_visual_api/inc/goommonitor/goommonitorsession.h --- a/uiaccelerator_plat/alf_visual_api/inc/goommonitor/goommonitorsession.h Tue Feb 02 07:56:43 2010 +0200 +++ b/uiaccelerator_plat/alf_visual_api/inc/goommonitor/goommonitorsession.h Mon Feb 22 17:57:49 2010 +0200 @@ -169,6 +169,11 @@ * @param aAppUid application UID being started. */ IMPORT_C void AppAboutToStart(TRequestStatus& aStatus, const TUid& aAppUid); + + /** + * Notify the GOOM monitor that this application has finished allocating memory. + */ + IMPORT_C void MemoryAllocationsComplete(); private://data TInt iFlags; diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/AlfDecoderServerClient/src/alfdecoderserverclient.cpp --- a/uiacceltk/hitchcock/AlfDecoderServerClient/src/alfdecoderserverclient.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/AlfDecoderServerClient/src/alfdecoderserverclient.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -92,8 +92,8 @@ KAlfServerThreadName, AlfThreadFucntion, 16384, // magic - 20000, // uses own heap for now - 10000000, + 4*1024*1024, // uses own heap for now + 10*1024*1024, 0, EOwnerThread)); diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/AlfRenderStage/group/alfnonsupportedwscommands.rss --- a/uiacceltk/hitchcock/AlfRenderStage/group/alfnonsupportedwscommands.rss Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/AlfRenderStage/group/alfnonsupportedwscommands.rss Mon Feb 22 17:57:49 2010 +0200 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2006-2008 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of "Eclipse Public License v1.0" diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/AlfRenderStage/group/alfrenderstage.rss --- a/uiacceltk/hitchcock/AlfRenderStage/group/alfrenderstage.rss Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/AlfRenderStage/group/alfrenderstage.rss Mon Feb 22 17:57:49 2010 +0200 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2001 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2006-2008 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of "Eclipse Public License v1.0" diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/AlfRenderStage/group/alfrenderstageplugin.mmp --- a/uiacceltk/hitchcock/AlfRenderStage/group/alfrenderstageplugin.mmp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/AlfRenderStage/group/alfrenderstageplugin.mmp Mon Feb 22 17:57:49 2010 +0200 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2006-2008 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of "Eclipse Public License v1.0" diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/AlfRenderStage/group/bld.inf --- a/uiacceltk/hitchcock/AlfRenderStage/group/bld.inf Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/AlfRenderStage/group/bld.inf Mon Feb 22 17:57:49 2010 +0200 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2006-2008 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of "Eclipse Public License v1.0" diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/AlfRenderStage/inc/alfasynchgoomsession.h --- a/uiacceltk/hitchcock/AlfRenderStage/inc/alfasynchgoomsession.h Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/AlfRenderStage/inc/alfasynchgoomsession.h Mon Feb 22 17:57:49 2010 +0200 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2006-2008 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of "Eclipse Public License v1.0" diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/AlfRenderStage/inc/alfrenderstage.h --- a/uiacceltk/hitchcock/AlfRenderStage/inc/alfrenderstage.h Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/AlfRenderStage/inc/alfrenderstage.h Mon Feb 22 17:57:49 2010 +0200 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2006-2008 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of "Eclipse Public License v1.0" @@ -55,7 +55,8 @@ public MWsTextCursor, public MAlfCompositionAgnosticWindowTreeObserver, public MAlfHintObserver, - public MWsDrawAnnotationObserver + public MWsDrawAnnotationObserver, + public MAlfSynchronizationInterface { public: @@ -146,6 +147,10 @@ void WindowGroupChainBrokenAfter(const MWsWindowTreeNode& aWindowGroupNode); void FadeAllChildren(const MWsWindowTreeNode& aWindowTreeNode, TBool aFaded); +public: // from MAlfSynchronizationInterface + + TInt Synchronize(TInt& aId); + public: // from MWsDrawAnnotationObserver void WindowRedrawStart(const MWsWindowTreeNode& aWindowTreeNode, const TRegion& aRegion); void WindowRedrawEnd(const MWsWindowTreeNode& aWindowTreeNode); @@ -295,7 +300,9 @@ }; // Sprite flash setting for iSpriteRedraw TSpriteFlash iSpriteRedrawFlash; - + + // Synchronization identifier. + TInt iSyncId; }; #endif //__ALFRENDERSTAGE_H__ diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/AlfRenderStage/inc/alfrenderstagefactory.h --- a/uiacceltk/hitchcock/AlfRenderStage/inc/alfrenderstagefactory.h Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/AlfRenderStage/inc/alfrenderstagefactory.h Mon Feb 22 17:57:49 2010 +0200 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2006-2008 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of "Eclipse Public License v1.0" diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/AlfRenderStage/inc/alfrsgc.h --- a/uiacceltk/hitchcock/AlfRenderStage/inc/alfrsgc.h Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/AlfRenderStage/inc/alfrsgc.h Mon Feb 22 17:57:49 2010 +0200 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2006-2008 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of "Eclipse Public License v1.0" diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/AlfRenderStage/inc/alfrssendbuffer.h --- a/uiacceltk/hitchcock/AlfRenderStage/inc/alfrssendbuffer.h Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/AlfRenderStage/inc/alfrssendbuffer.h Mon Feb 22 17:57:49 2010 +0200 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2006-2008 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of "Eclipse Public License v1.0" @@ -374,6 +374,12 @@ * @return Previous command */ inline TInt PreviousCommand(){ return iPreviousCommand; } + + /** + * Synchronize. + * @param aId id to pass forward. + */ + void Synchronize(TInt aId); public: // From CActive diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/AlfRenderStage/src/alfasynchgoomsession.cpp --- a/uiacceltk/hitchcock/AlfRenderStage/src/alfasynchgoomsession.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/AlfRenderStage/src/alfasynchgoomsession.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2006-2008 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of "Eclipse Public License v1.0" diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/AlfRenderStage/src/alfrenderstage.cpp --- a/uiacceltk/hitchcock/AlfRenderStage/src/alfrenderstage.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/AlfRenderStage/src/alfrenderstage.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2006-2008 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of "Eclipse Public License v1.0" @@ -140,6 +140,8 @@ case MWsDrawAnnotationObserver::EWsObjectInterfaceId: return static_cast(this); + case KAlfSynchronizationInterfaceUid: + return static_cast(this); default: return CWsRenderStage::ResolveObjectInterface(aTypeId); } @@ -164,6 +166,22 @@ } // --------------------------------------------------------------------------- +// Synchronize +// --------------------------------------------------------------------------- +// +TInt CAlfRenderStage::Synchronize(TInt& aId) + { + if ( iAlfSendBuffer ) + { + ++iSyncId; + aId = iSyncId; + iAlfSendBuffer->Synchronize(iSyncId); + return KErrNone; + } + return KErrGeneral; + } + +// --------------------------------------------------------------------------- // End // --------------------------------------------------------------------------- // @@ -420,7 +438,8 @@ if( iScreenNumber == 0 ) { if ( secureId != 0x10207218 && // Capserver / AKA goom - secureId != 0x10204c27 ) // Policy server + secureId != 0x10204c27 && // Policy server + secureId != 0x2000f85a ) // IAD application updater { // Todo: Must actually check whether the configuration uses goom // would create drastic performance hit in a system that does not need diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/AlfRenderStage/src/alfrenderstagefactory.cpp --- a/uiacceltk/hitchcock/AlfRenderStage/src/alfrenderstagefactory.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/AlfRenderStage/src/alfrenderstagefactory.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2006-2008 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of "Eclipse Public License v1.0" diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/AlfRenderStage/src/alfrenderstageplugin.cpp --- a/uiacceltk/hitchcock/AlfRenderStage/src/alfrenderstageplugin.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/AlfRenderStage/src/alfrenderstageplugin.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2006-2008 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of "Eclipse Public License v1.0" diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/AlfRenderStage/src/alfrsgc.cpp --- a/uiacceltk/hitchcock/AlfRenderStage/src/alfrsgc.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/AlfRenderStage/src/alfrsgc.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2006-2008 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of "Eclipse Public License v1.0" diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/AlfRenderStage/src/alfrssendbuffer.cpp --- a/uiacceltk/hitchcock/AlfRenderStage/src/alfrssendbuffer.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/AlfRenderStage/src/alfrssendbuffer.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2006-2008 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of "Eclipse Public License v1.0" @@ -862,6 +862,19 @@ } // --------------------------------------------------------------------------- +// Synchronize +// --------------------------------------------------------------------------- +// +void CAlfRsSendBuffer::Synchronize(TInt aId) + { + if ( iAlfBridgerClient ) + { + TIpcArgs args(aId); + iAlfBridgerClient->SendSynch(EAlfSynchronize, args); // error ignored + } + } + +// --------------------------------------------------------------------------- // ConnectL // --------------------------------------------------------------------------- // diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/Client/BWINS/alfclientu.DEF --- a/uiacceltk/hitchcock/Client/BWINS/alfclientu.DEF Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/Client/BWINS/alfclientu.DEF Mon Feb 22 17:57:49 2010 +0200 @@ -1105,4 +1105,7 @@ ?EnableLowMemoryState@RAlfDirectClient@@QAEXH@Z @ 1104 NONAME ; void RAlfDirectClient::EnableLowMemoryState(int) ?SetGroupEffectL@CAlfVisual@@QAEXABVTDesC16@@H@Z @ 1105 NONAME ; void CAlfVisual::SetGroupEffectL(class TDesC16 const &, int) ?ForceSwRendering@RAlfDirectClient@@QAEHH@Z @ 1106 NONAME ; int RAlfDirectClient::ForceSwRendering(int) + ?Finish@CAlfDrawer@@QAEHXZ @ 1107 NONAME ; int CAlfDrawer::Finish(void) + ??1CAlfDrawer@@UAE@XZ @ 1108 NONAME ; CAlfDrawer::~CAlfDrawer(void) + ?NewL@CAlfDrawer@@SAPAV1@XZ @ 1109 NONAME ; class CAlfDrawer * CAlfDrawer::NewL(void) diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/Client/eabi/alfclientu.DEF --- a/uiacceltk/hitchcock/Client/eabi/alfclientu.DEF Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/Client/eabi/alfclientu.DEF Mon Feb 22 17:57:49 2010 +0200 @@ -1338,4 +1338,9 @@ _ZN16RAlfDirectClient20EnableLowMemoryStateEi @ 1337 NONAME _ZN10CAlfVisual15SetGroupEffectLERK7TDesC16i @ 1338 NONAME _ZN16RAlfDirectClient16ForceSwRenderingEi @ 1339 NONAME + _ZN10CAlfDrawer4NewLEv @ 1340 NONAME + _ZN10CAlfDrawer6FinishEv @ 1341 NONAME + _ZN10CAlfDrawerD0Ev @ 1342 NONAME + _ZN10CAlfDrawerD1Ev @ 1343 NONAME + _ZN10CAlfDrawerD2Ev @ 1344 NONAME diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/Client/inc/alfcrppluginclient.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiacceltk/hitchcock/Client/inc/alfcrppluginclient.h Mon Feb 22 17:57:49 2010 +0200 @@ -0,0 +1,53 @@ +/* +* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +*/ + +#ifndef ALFCRPPLUGINCLIENT_H +#define ALFCRPPLUGINCLIENT_H + +#include +#include + +/** + * Client for ALF window server extension + */ +NONSHARABLE_CLASS( CAlfCrpPluginClient ) : public CWsGraphic + { +public: + /** + * Constructor. + */ + CAlfCrpPluginClient(); + + /** + * 2nd phase constructor. + */ + void ConstructL(); + + /** + * Destructor. + */ + virtual ~CAlfCrpPluginClient(); + +public: + + /** + * Synchronizes drawing. + */ + void Synchronize(); + +public: // from CWsGraphic + + virtual void HandleMessage(const TDesC8& aData); + virtual void OnReplace(); + + }; + +#endif // ALFCRPPLUGINCLIENT_H + +// End of file diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/Client/src/alfclient.mmp --- a/uiacceltk/hitchcock/Client/src/alfclient.mmp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/Client/src/alfclient.mmp Mon Feb 22 17:57:49 2010 +0200 @@ -105,6 +105,10 @@ SOURCE alfcanvasvisual.cpp SOURCE alfclientwindow.cpp SOURCE alfdirectclient.cpp + +SOURCE alfdrawer.cpp +SOURCE alfcrppluginclient.cpp + USERINCLUDE ../inc USERINCLUDE ../../CommonInc diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/Client/src/alfcrppluginclient.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiacceltk/hitchcock/Client/src/alfcrppluginclient.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -0,0 +1,74 @@ +/* +* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: ALF window server client extension implementation. +* +*/ + +#include "alfcrppluginclient.h" + +// -------------------------------------------------------------------------- +// CAlfCrpPluginClient::CAlfCrpPluginClient +// -------------------------------------------------------------------------- +// +CAlfCrpPluginClient::CAlfCrpPluginClient() + { + } + +// -------------------------------------------------------------------------- +// CAlfCrpPluginClient::~CAlfCrpPluginClient +// -------------------------------------------------------------------------- +// +CAlfCrpPluginClient::~CAlfCrpPluginClient() + { + } + +// -------------------------------------------------------------------------- +// CAlfCrpPluginClient::ConstructL +// -------------------------------------------------------------------------- +// +void CAlfCrpPluginClient::ConstructL() + { + const TUid id = { 0x2002C358 }; + BaseConstructL( id, KNullDesC8 ); + } + +// -------------------------------------------------------------------------- +// CAlfCrpPluginClient::Synchronize +// -------------------------------------------------------------------------- +// +void CAlfCrpPluginClient::Synchronize() + { + TPckgC buf(0); + SendMessage(buf); + Flush(); + } + +// -------------------------------------------------------------------------- +// CAlfCrpPluginClient::HandleMessage +// -------------------------------------------------------------------------- +// +void CAlfCrpPluginClient::HandleMessage(const TDesC8& /*aData*/) + { + } + +// -------------------------------------------------------------------------- +// CAlfCrpPluginClient::OnReplace +// -------------------------------------------------------------------------- +// +void CAlfCrpPluginClient::OnReplace() + { + } + +// End of file + diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/Client/src/alfdrawer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiacceltk/hitchcock/Client/src/alfdrawer.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -0,0 +1,143 @@ +/* +* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: CAlfDrawer implementation. +* +*/ + + + + +#include +#include "alfcrppluginclient.h" + +#include +#include + +// Class to hold internal alf drawer data. +NONSHARABLE_CLASS( CAlfDrawer::TAlfDrawerData ) + { +public: + TAlfDrawerData(); + +public: + CAlfCrpPluginClient* iClient; + }; + +// Creates CAlfCrpPluginClient instance, returns error code. +static TInt CreateAlfCrpClient(CAlfCrpPluginClient*& aClient); +// Creates CAlfCrpPluginClient instance. +static CAlfCrpPluginClient* CreateAlfCrpClientL(); + + +// --------------------------------------------------------------------------- +// NewL +// --------------------------------------------------------------------------- +// +EXPORT_C CAlfDrawer* CAlfDrawer::NewL() + { + CAlfDrawer* self = new (ELeave) CAlfDrawer; + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +EXPORT_C CAlfDrawer::~CAlfDrawer() + { + if ( iData ) + { + delete iData->iClient; + delete iData; + } + } + +// --------------------------------------------------------------------------- +// Finish +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CAlfDrawer::Finish() + { + // First perform RWsSession finish operation to ensure + // that all drawing commands have been issued to renderstage. + TInt err = CCoeEnv::Static()->WsSession().Finish(); + + // Then create CRP instance (if needed). + if ( err == KErrNone && !iData->iClient ) + { + err = CreateAlfCrpClient( iData->iClient ); + } + + // Finally, wait until alf side has finished rendering. + if ( err == KErrNone && iData->iClient ) + { + iData->iClient->Synchronize(); + } + + return err; + } + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +CAlfDrawer::CAlfDrawer() + { + } + +// --------------------------------------------------------------------------- +// ConstructL +// --------------------------------------------------------------------------- +// +void CAlfDrawer::ConstructL() + { + iData = new (ELeave) TAlfDrawerData; + CreateAlfCrpClient( iData->iClient ); + } + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +CAlfDrawer::TAlfDrawerData::TAlfDrawerData() + : iClient( NULL ) + { + } + +// --------------------------------------------------------------------------- +// CreateAlfCrpClient +// --------------------------------------------------------------------------- +// +static TInt CreateAlfCrpClient(CAlfCrpPluginClient*& aClient) + { + TRAPD(err, aClient = CreateAlfCrpClientL()); + return err; + } + +// --------------------------------------------------------------------------- +// CreateAlfCrpClientL +// --------------------------------------------------------------------------- +// +static CAlfCrpPluginClient* CreateAlfCrpClientL() + { + CAlfCrpPluginClient* client = new (ELeave) CAlfCrpPluginClient; + CleanupStack::PushL( client ); + client->ConstructL(); + CleanupStack::Pop( client ); + return client; + } + diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/Client/src/alfenv.cpp --- a/uiacceltk/hitchcock/Client/src/alfenv.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/Client/src/alfenv.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -953,6 +953,11 @@ // EXPORT_C void CAlfEnv::SetRefreshMode( TAlfRefreshMode aMode ) { + if(aMode == EAlfRefreshModeAutomatic) + { + // syncronoushly rasterize all the changed text visuals + iData->iTextStyleManager->RefreshAllVisuals(); + } Client().EnvSetRefreshMode( aMode ); iData->iRefreshMode = TAlfRefreshMode(aMode); } diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/Client/src/alfmappingfunctions.cpp --- a/uiacceltk/hitchcock/Client/src/alfmappingfunctions.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/Client/src/alfmappingfunctions.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -663,7 +663,7 @@ if (!inverted) { // Find closest pre-calculated value... - for (i=0; iiParams.iValues[i]) || inverted && (aValue > iData->iParams.iValues[i])) diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/Client/src/alftextstylemanager.cpp --- a/uiacceltk/hitchcock/Client/src/alftextstylemanager.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/Client/src/alftextstylemanager.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -116,6 +116,11 @@ void DoRefreshMesh() { + if( IsActive() ) + { + Cancel(); + } + for (TInt p = iVisuals.Count()-1; p >= 0; p--) { iVisuals[p]->PrepareForUpdateMesh(); @@ -337,7 +342,7 @@ #ifdef ALF_RASTER_TEXT for(TInt i = 0 ; i < iData->iTextStyles.Count() ; i++ ) { - iData->iTextStyles[i]->RefreshMesh(); + iData->iTextStyles[i]->DoRefreshMesh(); } #else return; diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/Client/src/alftexturegroup.cpp --- a/uiacceltk/hitchcock/Client/src/alftexturegroup.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/Client/src/alftexturegroup.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -109,23 +109,24 @@ // --------------------------------------------------------------------------- // EXPORT_C CAlfTextureGroup::~CAlfTextureGroup() - { - while (Count()) + { + if ( iData ) { - RemoveTexture(Texture(Count()-1)); - } + while (Count()) + { + RemoveTexture(Texture(Count()-1)); + } + + iData->iLoadObserverQueue.Close(); + iData->iTextures.Close(); + + delete iData->iTextureLoadObserver; + iData->iTextureLoadObserver = NULL; + } - if ( iData ) - { - iData->iLoadObserverQueue.Close(); - iData->iTextures.Close(); - - delete iData->iTextureLoadObserver; - iData->iTextureLoadObserver = NULL; - } + delete iData; + } - delete iData; - } // --------------------------------------------------------------------------- // NewL // --------------------------------------------------------------------------- diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/Client/src/alftextvisual.cpp --- a/uiacceltk/hitchcock/Client/src/alftextvisual.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/Client/src/alftextvisual.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -416,10 +416,12 @@ void CAlfTextVisual::PrepareForUpdateMesh() { +#ifdef ALF_RASTER_TEXT if(!iTextVisualData->iMeshUptoDate) { iTextVisualData->iMesh->PrepareForRasterize(); } +#endif // ALF_RASTER_TEXT } void CAlfTextVisual::UpdateMesh(TBool aSynch) @@ -458,6 +460,7 @@ { #ifdef ALF_RASTER_TEXT iTextVisualData->iMesh->ResetLines(ETrue); + iTextVisualData->iMeshUptoDate = EFalse; #endif } diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/CommonInc/alfbridgecommands.h --- a/uiacceltk/hitchcock/CommonInc/alfbridgecommands.h Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/CommonInc/alfbridgecommands.h Mon Feb 22 17:57:49 2010 +0200 @@ -73,15 +73,14 @@ EAlfEffectFxEndSyncronizedGroup, EAlfDSSetCapturingBitmap, EAlfDSSetCoveringBitmap, + + //140 EAlfDSSetFadeEffect, EAlfReleaseTemporaryChunk, - - // 140 EAlfBridgeSetScreenRotation, + EAlfDSSynchronize, KUnInitialized - - }; #endif /* ALFBRIDGECOMMANDS_H_ */ diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/CommonInc/alfmoduletest.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiacceltk/hitchcock/CommonInc/alfmoduletest.h Mon Feb 22 17:57:49 2010 +0200 @@ -0,0 +1,163 @@ +#include "e32base.h" +#include "e32debug.h" + +#ifndef ALFMODULETEST_H +#define ALFMODULETEST_H + +// Define this to build module testing enchanced version of ALF +//#define USE_MODULE_TEST_HOOKS_FOR_ALF + +#if !defined(USE_MODULE_TEST_HOOKS_FOR_ALF) || !defined(AMT_CONTROL) + +#define AMT_FUNC(func) +#define AMT_FUNC_EXC(func) +#define AMT_INC_COUNTER(member) +#define AMT_DEC_COUNTER(member) +#define AMT_SET_VALUE(member, val) +#define AMT_GET_VALUE(x, member) +#define AMT_PRINT_STATE() + +#ifndef AMT_CONTROL +#error "Error: you need to define AMT_CONTROL macro in your code to be able to use ALF module test system!" +// The user have to define AMT_CONTROL, e.g. like this: +// #define AMT_CONTROL() static_cast(Dll::Tls()) +// or +// #define AMT_CONTROL() iMyModuleTestDataControl +#endif + +#else + + +// *** Use these macros to access global memory chunk + + +// Note: If you read/write a large block of data members, it is advisable not use the AMT_FUNC_EXC() based macros below. +// Use Lock() and Unlock() around the block explicitely, and use AMT_FUNC() macro. +// That is to avoid unnecessary nested lock-unlock sequences (even if nested locks are working ok). + +// Note: Be careful not to lock the the mutex for a long time as it will halt other processes if they are using the lock during that time! + +// Generic macros +#define AMT_DATA() AMT_CONTROL()->iModuleTestData +#define AMT_FUNC(func) if (AMT_DATA()->iIsEnabled) {func;} +#define AMT_FUNC_EXC(func) {AMT_CONTROL()->Lock(); if (AMT_DATA()->iIsEnabled) {func;} AMT_CONTROL()->Unlock();} + +// Single operation macros, that will do lock/unlock. +#define AMT_INC_COUNTER(member) AMT_FUNC_EXC(AMT_DATA()->member++) +#define AMT_DEC_COUNTER(member) AMT_FUNC_EXC(AMT_DATA()->member--) +#define AMT_SET_VALUE(member, val) AMT_FUNC_EXC(AMT_DATA()->member=(val)) +#define AMT_GET_VALUE(x, member) AMT_FUNC_EXC((x) = AMT_DATA()->member) +#define AMT_PRINT_STATE() AMT_FUNC_EXC(AMT_DATA()->PrintState()) + +// *** Global object names +_LIT(KAlfModuleTestChunkName, "ALF_MODULE_TEST_CHUNK"); +_LIT(KAlfModuleTestMutexName, "ALF_MODULE_TEST_MUTEX"); + +/* + * Class CAlfModuleTestData + */ + +NONSHARABLE_CLASS(CAlfModuleTestData) : public CBase + { +public: + void PrintState() + { + RDebug::Print(_L("*** ALF INTERNAL STATE ***")); + RDebug::Print(_L("iTotalLayerCount[0]=%d"), iTotalLayerCount[0]); + RDebug::Print(_L("iTotalLayerCount[1]=%d"), iTotalLayerCount[1]); + RDebug::Print(_L("iCloneLayerCount=%d"), iCloneLayerCount); + RDebug::Print(_L("iTotalNodeCount=%d"), iTotalNodeCount); + RDebug::Print(_L("iWindowGroupNodeCount=%d"), iWindowGroupNodeCount); + RDebug::Print(_L("iWindowNodeCount=%d"), iWindowNodeCount); + RDebug::Print(_L("iAnimNodeCount=%d"), iAnimNodeCount); + RDebug::Print(_L("iTotalVisualCount=%d"), iTotalVisualCount); + RDebug::Print(_L("iVisibleVisualCount=%d"), iVisibleVisualCount); + RDebug::Print(_L("iActiveVisualCount=%d"), iActiveVisualCount); + RDebug::Print(_L("iPassiveVisualCount=%d"), iPassiveVisualCount); + RDebug::Print(_L("iTextureCount=%d"), iTextureCount); + RDebug::Print(_L("iRenderBufferCount=%d"), iRenderBufferCount); + RDebug::Print(_L("*** ALF INTERNAL STATE ***")); + } + + +public: + TBool iIsEnabled; // *** not yet implemented. For run-time enabling/disabling of the test system. + + // Alf Render Stage + TInt iScreenCount; // *** not yet implemented + TInt iTotalLayerCount[10]; // For each screen + TInt iCloneLayerCount; // ** not yet implemented + + // Alf Streamer + TInt iTotalNodeCount; // *** not yet implemented + TInt iWindowGroupNodeCount; // *** not yet implemented + TInt iWindowNodeCount; // *** not yet implemented + TInt iAnimNodeCount; // *** not yet implemented + + // Alf Server + TInt iTotalVisualCount; // *** not yet implemented + TInt iVisibleVisualCount; // *** not yet implemented + TInt iActiveVisualCount; // Active visual count + TInt iPassiveVisualCount; // Passive visual count + TInt iTextureCount; // *** not yet implemented + TInt iRenderBufferCount; // *** not yet implemented + }; + + +/* + * Class CAlfModuleTestDataControl + */ +NONSHARABLE_CLASS(CAlfModuleTestDataControl) : public CBase + { +public: + /* + * Destructor + */ + ~CAlfModuleTestDataControl() + { + iModuleTestMutex.Close(); + iModuleTestChunk.Close(); + } + + /* + * Open global chunk and mutex created elsewhere + */ + TInt OpenGlobalObjects() + { + // Open global module testing chunk + TBool isReadOnly = EFalse; + TInt err = iModuleTestChunk.OpenGlobal(KAlfModuleTestChunkName, isReadOnly); + if (!err) + { + // Create global module testing mutex + err = iModuleTestMutex.OpenGlobal(KAlfModuleTestMutexName); + if (!err) + { + iModuleTestData = reinterpret_cast(iModuleTestChunk.Base()); + } + } + RDebug::Print(_L("CAlfModuleTestDataControl::OpenGlobalObjects. err=%d"), err); + return err; + } + + /* + * Lock access to global memory + */ + void Lock() {iModuleTestMutex.Wait();} + + /* + * Unlock access to global memory + */ + void Unlock() {iModuleTestMutex.Signal();} + +public: + RChunk iModuleTestChunk; + RMutex iModuleTestMutex; + CAlfModuleTestData* iModuleTestData; // Not owned + }; + +#endif + +#endif // ALFMODULETEST_H + +// End of File diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/CommonInc/alfrenderstageutils.h --- a/uiacceltk/hitchcock/CommonInc/alfrenderstageutils.h Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/CommonInc/alfrenderstageutils.h Mon Feb 22 17:57:49 2010 +0200 @@ -18,6 +18,10 @@ #ifndef _ALFRSUAPI_H_ #define _ALFRSUAPI_H_ +#include + +class MWsWindowTreeNode; + const TInt KAlfCompositionAgnosticWindowTreeObserverInterfaceId(0x2002BCFB); class MAlfCompositionAgnosticWindowTreeObserver @@ -78,7 +82,7 @@ virtual void MovedToWindowGroup(const MWsWindowTreeNode& aWindowTreeNode, const MWsWindowTreeNode& aNewWindowGroupNode) = 0; virtual void WindowGroupChained(const MWsWindowTreeNode& aParent, const MWsWindowTreeNode& aChild) = 0; virtual void WindowGroupChainBrokenAfter(const MWsWindowTreeNode& aWindowGroupNode) = 0; - virtual void FadeAllChildren(const MWsWindowTreeNode& aWindowTreeNode, TBool aFaded) = 0; + virtual void FadeAllChildren(const MWsWindowTreeNode& aWindowTreeNode, TBool aFaded) = 0; }; class RAlfBridgerClient; @@ -99,4 +103,34 @@ virtual RAlfBridgerClient* Client() = 0; }; +/** + * Synchronization interface + */ +class MAlfSynchronizationInterface + { +public: + /** + * Start synchronization. + * @param aId This will contain identifier for this synchronization. + * @return error code, KErrNone if synchronization is started. + */ + virtual TInt Synchronize(TInt& aId) = 0; + }; + +/** + * Use this UID as parameter when resolving MAlfSynchronizationInterface + * interface. + */ +const TUint32 KAlfSynchronizationInterfaceUid = 0x2002C357; + +/** + * Category for P&S variable for synchronization finished indication. + */ +const TUid KAlfPSUidSynchronizer = { 0x10003B20 }; + +/** + * Key for P&S variable for synchronization finished indication. + */ +const TUint32 KAlfPSKeySynchronizer = 0x2002C357; + #endif // _ALFRSUAPI_H_ diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/CommonInc/huisynchronizationobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiacceltk/hitchcock/CommonInc/huisynchronizationobserver.h Mon Feb 22 17:57:49 2010 +0200 @@ -0,0 +1,36 @@ +/* +* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef HUISYNCHRONIZATIONOBSERVER_H +#define HUISYNCHRONIZATIONOBSERVER_H + +#include + +/** + * Synchronization observer interface + */ +class MHuiSynchronizationObserver + { +public: + /** + * Informs of completion of synchronization. + * @param aId Id of completed synchronization. + */ + virtual void Synchronized(TInt aId) = 0; + }; + +#endif // HUISYNCHRONIZATIONOBSERVER_H diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/CommonInc/huiwscanvascommands.h --- a/uiacceltk/hitchcock/CommonInc/huiwscanvascommands.h Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/CommonInc/huiwscanvascommands.h Mon Feb 22 17:57:49 2010 +0200 @@ -170,4 +170,7 @@ EAlfTransparentContentFlush = 0x02 }; +// drawing commands for the window should be ignored +#define KWindowIsDSAHost 2 + #endif /* HUIWSCANVASCOMMANDS_H_ */ diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/ServerCore/Inc/alfbridge.h --- a/uiacceltk/hitchcock/ServerCore/Inc/alfbridge.h Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/ServerCore/Inc/alfbridge.h Mon Feb 22 17:57:49 2010 +0200 @@ -22,6 +22,9 @@ #include +#define AMT_CONTROL() static_cast(Dll::Tls()) +#include "alfmoduletest.h" + #include "alfscreen.h" #include "alfstreamerbridge.h" #include "alfdecoderserverclient.h" @@ -29,6 +32,7 @@ #include #include "HuiFxEffect.h" +#include "huisynchronizationobserver.h" #include #include @@ -45,7 +49,8 @@ public MHuiDisplayRefreshObserver, public MHuiBitmapProvider, public MAlfGfxEffectObserver, - public MHuiRosterObserver + public MHuiRosterObserver, + public MHuiSynchronizationObserver { // Helper class for keeping ongoing effects in order. Kept in iEffectCleanupStack private: @@ -224,6 +229,9 @@ void NotifyRosterDrawStart(CHuiDisplay& aDisplay); void NotifyRosterDrawEnd(CHuiDisplay& aDisplay); + // From MHuiSynchronizationObserver + void Synchronized(TInt aId); + private: class CFullScreenEffectState; @@ -384,10 +392,26 @@ */ CHuiLayout* FindLayoutByEffectHandle(TInt aHandle); - /* + /** * HasActiveEffect + * + * Note. The visual might not have effect, but it is child for visual that has effect. + * In both cases, this method returns ETrue. Otherwise EFalse. + * + * @param aVisual Visual to be checked for effect participation. */ TBool HasActiveEffect(CHuiVisual* aVisual); + + /** + * HasActiveEffect + * + * Note. The visual might not have effect, but it is child for visual that has effect. + * In both cases, this method returns ETrue. Otherwise EFalse. + * + * @param aVisual Visual to be checked for effect participation. + * @param aIndex Index of the effect item in iEffectCleanupStack, if found. Otherwise KErrNotFound + */ + TBool HasActiveEffect(CHuiVisual* aVisual, TInt& aIndex); /* * FindEffectHandle @@ -627,6 +651,7 @@ CHuiControlGroup& aGroup); void VisualizeControlGroupOrderL( + CAlfScreen& aScreen, CHuiRoster& aRoster, CHuiControlGroup& aGroup); @@ -715,9 +740,6 @@ // with visuals in iFullscreenEffectControlGroup RArray iEffectCleanupStack; - // Effects that have finished by their own, or framework requested to end them - RArray iFinishedEffects; - // Same as iEffectCleanupStack, but only the ones that can be now cleaned away. // See method RemoveTemporaryPresenterVisuals. RArray iFinishedCleanupStackEffects; @@ -896,6 +918,11 @@ TBool iForcedSwRendering; TBool iLowMemoryMode; THuiMemoryLevel iCurrentMemoryLevel; + + #ifdef USE_MODULE_TEST_HOOKS_FOR_ALF + TInt iTempTotalActiveVisualCount; + TInt iTempTotalPassiveVisualCount; + #endif }; #endif // __ALF_BRIDGE_H__ \ No newline at end of file diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/ServerCore/Inc/alfscreen.h --- a/uiacceltk/hitchcock/ServerCore/Inc/alfscreen.h Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/ServerCore/Inc/alfscreen.h Mon Feb 22 17:57:49 2010 +0200 @@ -42,6 +42,9 @@ /** Group for showing effects */ EAlfFullScreenEffectContainer, + + /** Group for FPS indicator */ + EAlfFpsIndicatorContainer }; NONSHARABLE_CLASS( TAlfControlGroupEntry ) @@ -107,6 +110,11 @@ */ TBool IsVisualTreeVisibilityChanged(); + /** + * Returns amount of fixed control groups. + */ + TInt FixedControlGroupCount() const; + public: RArray iControlGroups; @@ -115,6 +123,7 @@ CHuiDisplay* iDisplay; CHuiControlGroup* iFloatingSpriteControlGroup; CHuiControlGroup* iFullscreenEffectControlGroup; + CHuiControlGroup* iFpsControlGroup; TBool iVisualTreeVisibilityChanged; TInt iScreenNum; diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/ServerCore/Inc/alfstreamerconsts.h --- a/uiacceltk/hitchcock/ServerCore/Inc/alfstreamerconsts.h Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/ServerCore/Inc/alfstreamerconsts.h Mon Feb 22 17:57:49 2010 +0200 @@ -37,7 +37,8 @@ EDsNotifyNativeWindowData, EAlfBridgerBlindSend, EAlfSetScreenRotation, - EAlfGetNativeWindowHandles + EAlfGetNativeWindowHandles, + EAlfSynchronize }; enum TAlfCompOps{ diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/ServerCore/Src/alfappsrvsessionBase.cpp --- a/uiacceltk/hitchcock/ServerCore/Src/alfappsrvsessionBase.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/ServerCore/Src/alfappsrvsessionBase.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -940,16 +940,18 @@ // void CAlfAppSrvSessionBase::GetSystemEvents(const RMessage2* aMessage) { - if (aMessage && iData->iSystemEvent.IsNull()) + __ASSERT_DEBUG(aMessage, USER_INVARIANT()); + if (aMessage) { - iData->iSystemEvent = *aMessage; + if (iData->iSystemEvent.IsNull()) + { + iData->iSystemEvent = *aMessage; + } + else + { + aMessage->Complete(KErrInUse); + } } - else - { - __ASSERT_DEBUG(aMessage, USER_INVARIANT()); - aMessage->Complete(KErrInUse); - } - } // --------------------------------------------------------------------------- diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/ServerCore/Src/alfappui.cpp --- a/uiacceltk/hitchcock/ServerCore/Src/alfappui.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/ServerCore/Src/alfappui.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -665,6 +665,10 @@ // EXPORT_C CAlfAppUi::~CAlfAppUi() { + #ifdef USE_MODULE_TEST_HOOKS_FOR_ALF + delete AMT_CONTROL(); + #endif + delete iData; } @@ -763,6 +767,17 @@ EXPORT_C void CAlfAppUi::ConstructL() { __ALFLOGSTRING( "CAlfAppUi::ConstructL start" ) + + #ifdef USE_MODULE_TEST_HOOKS_FOR_ALF + __ALFLOGSTRING( "CAlfAppUi::ConstructL. Open and initialize ALF module test chunk. " ) + // Initiliaze global data in TLS. + User::LeaveIfError(Dll::SetTls(new(ELeave) CAlfModuleTestDataControl())); + // Open global module testing chunk and mutex + User::LeaveIfError(AMT_CONTROL()->OpenGlobalObjects()); + __ALFLOGSTRING( "CAlfAppUi::ConstructL. ALF module test chunk ready. " ) + #endif + + TInt flags = EStandardApp|ENoScreenFurniture|ENonStandardResourceFile|EAknEnableSkin; CCoeEnv* coe = CCoeEnv::Static(); iData = new (ELeave) CAlfAppUiData(); @@ -903,6 +918,10 @@ // Load Tfx server client API plugin, if exists iData->iServer->CreateTfxServerPlugin(); +#ifdef SYMBIAN_GRAPHICS_WSERV_QT_EFFECTS + iData->iBridgeObj->ForceSwRendering(ETrue); +#endif + __ALFLOGSTRING( "CAlfAppUi::ConstructL end" ) } diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/ServerCore/Src/alfbridge.cpp --- a/uiacceltk/hitchcock/ServerCore/Src/alfbridge.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/ServerCore/Src/alfbridge.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -70,6 +70,8 @@ #include "huicanvasgc.h" #include "huicanvasrenderbuffer.h" +#include "alfrenderstageutils.h" // for KAlfPSUidSynchronizer & KAlfPSKeySynchronizer + #ifdef HUI_DEBUG_TRACK_DRAWING #include #endif @@ -88,7 +90,6 @@ //const TReal32 KAlfVisualDefaultOpacity = 0.5f; _LIT8(KAlfWindowGroupContainerControlTag, "WGROUP"); -const TInt KAlfNumberOfFixedControlGroups = 2; // This debug option prints window group order with __ALFLOGSTRING //#define ALF_DEBUG_PRINT_WINDOWGROUP_ORDER @@ -598,7 +599,6 @@ delete iAlfRegisteredEffects[i].iEffectFile; } iAlfRegisteredEffects.Close(); - iFinishedEffects.Close(); delete iEffectEndTimer; iDeadControlGroups.Close(); iEffectWindowGroups.Close(); @@ -739,9 +739,14 @@ ShowControlGroupL(screen->iDisplay->Roster(), *(screen->iFloatingSpriteControlGroup), KHuiRosterShowAtTop, screenNumber); ShowControlGroupL(screen->iDisplay->Roster(), *(screen->iFullscreenEffectControlGroup), KHuiRosterShowAtTop, screenNumber); - screen->iFloatingSpriteControlGroup->SetAcceptInput(EFalse); screen->iFullscreenEffectControlGroup->SetAcceptInput(EFalse); + + if ( screen->iFpsControlGroup ) + { + ShowControlGroupL(screen->iDisplay->Roster(), *(screen->iFpsControlGroup), KHuiRosterShowAtTop, screenNumber); + screen->iFpsControlGroup->SetAcceptInput(EFalse); + } } //------------------------------------------------------------------------------ @@ -762,6 +767,12 @@ screen->iFloatingSpriteControlGroup->SetAcceptInput(EFalse); screen->iFullscreenEffectControlGroup->SetAcceptInput(EFalse); + + if ( screen->iFpsControlGroup ) + { + ShowControlGroupL(screen->iDisplay->Roster(), *(screen->iFpsControlGroup), KHuiRosterShowAtTop, screenNumber); + screen->iFpsControlGroup->SetAcceptInput(EFalse); + } } @@ -957,8 +968,15 @@ // is cleared when effect has finished. RPointerArray familyTree; ListFamilyTreeL(familyTree, layout); // recursively dig the family tree + TBool anyVisualHasEffect(EFalse); + TInt familyIndex(0); + TInt familySize = familyTree.Count(); + while(familyIndex < familySize && !anyVisualHasEffect) + { + anyVisualHasEffect = HasActiveEffect(familyTree[familyIndex++]); + } - if (HasActiveEffect(layout)) + if (anyVisualHasEffect) { __ALFFXLOGSTRING1("Layout 0x%x has external content", layout); // EHuiVisualFlagShouldDestroy destroy flag should have come for the windows in this layout already @@ -1120,7 +1138,7 @@ // has been solved by deleting the tag when window server wants to delete // the group. Window server no longer has it, but we keep it alive for a while // to show the effect. The group will be deleted when the effect ends. - aWhere = aRoster.Count() - KAlfNumberOfFixedControlGroups; + aWhere = aRoster.Count() - screen->FixedControlGroupCount(); } } @@ -1146,7 +1164,7 @@ #endif #ifdef ALF_DEBUG_VISUALIZE_WINDOWGROUP_ORDER - VisualizeControlGroupOrderL(aRoster, aGroup); + VisualizeControlGroupOrderL(*screen, aRoster, aGroup); #endif } @@ -1240,13 +1258,13 @@ else if (aWhere == KHuiRosterShowAtTop) { // Topmost - aRoster.ShowL(aGroup, aRoster.Count() - KAlfNumberOfFixedControlGroups); + aRoster.ShowL(aGroup, aRoster.Count() - screen->FixedControlGroupCount()); } else { TInt index = 0; // Index for Window group control groups TBool added = EFalse; - for (TInt i=0; iFixedControlGroupCount(); i++) { if (index == aWhere) { @@ -1266,7 +1284,7 @@ if (!added) { // Topmost - for (TInt i=aRoster.Count()-KAlfNumberOfFixedControlGroups; i >= 0; i--) + for (TInt i=aRoster.Count() - screen->FixedControlGroupCount(); i >= 0; i--) { if (aRoster.ControlGroup(i).Control(0).Role() == EAlfWindowGroupContainer) { @@ -1455,10 +1473,25 @@ } // --------------------------------------------------------------------------- +// Check if effect has been flagged as opaque +// --------------------------------------------------------------------------- +// +static TBool IsOpaqueEffect(CHuiFxEffect* aEffect) + { + return aEffect && (aEffect->EffectFlags() & KHuiFxOpaqueHint); + } + +// --------------------------------------------------------------------------- // --------------------------------------------------------------------------- // TBool CAlfBridge::IsVisualOpaque(CHuiVisual& aVisual) { + // Effect with opaque hint overrides everything else. + if (IsOpaqueEffect( aVisual.Effect() )) + { + return ETrue; // Opaque + } + TBool transparent = EFalse; // TODO: We should check transformation too and perhaps parent transformations as well ? @@ -1592,8 +1625,29 @@ //iActiveVisualCount = 0; iBgSurfaceFound = EFalse; //iPaintedArea = 0; + + // Check if effect group has an effect with opaque hint. + CHuiControlGroup& fxcontrolgroup = *(iAlfScreens[aScreenNumber]->iFullscreenEffectControlGroup); + CHuiControl& fxcontrol = fxcontrolgroup.Control(0); + CHuiCanvasVisual* fxlayout = (CHuiCanvasVisual*)&fxcontrol.Visual(0); + CHuiVisual* fxExternalContent = fxlayout->ExternalContent(); + + if (fxlayout && IsOpaqueEffect(fxlayout->Effect())) + { + fullscreenCovered = ETrue; + } + else if (fxExternalContent && IsOpaqueEffect(fxExternalContent->Effect())) + { + fullscreenCovered = ETrue; + } + + #ifdef USE_MODULE_TEST_HOOKS_FOR_ALF + iTempTotalActiveVisualCount = 0; + iTempTotalPassiveVisualCount = 0; + #endif + // skip the topmost (effect) layer, start from floating sprite group - for (TInt j=screen->iDisplay->Roster().Count() - 2; j>=0; j--) + for (TInt j=screen->iDisplay->Roster().Count() - screen->FixedControlGroupCount(); j>=0; j--) { #ifdef ALF_DEBUG_PRINT_WINDOWGROUP_ORDER TInt activevisualcount = 0; @@ -1602,6 +1656,13 @@ CHuiControlGroup& controlgroup = iAlfScreens[aScreenNumber]->iDisplay->Roster().ControlGroup(j); CHuiControl& control = controlgroup.Control(0); + + if (control.Role() == EAlfFpsIndicatorContainer) + { + // FPS container doesn't contain canvas visuals + continue; + } + CHuiCanvasVisual* layout = (CHuiCanvasVisual*)&control.Visual(0); #ifdef HUI_DEBUG_TRACK_DRAWING if ( layout->Tracking() ) @@ -1609,7 +1670,7 @@ RDebug::Print(_L("CAlfBridge::HandleVisualVisibility: tracked visual 0x%x"), canvasVisual); } #endif - + // Dont mess with alf control group visuals, alf session handling does it for us // just add the rect to covered region because alf draws solid background. if (control.Role() == EAlfSessionContainer) @@ -1641,6 +1702,12 @@ TBool subTreeCovered = EFalse; TBool hasActiveVisualsInVisualTree = HandleLayoutVisualVisibility( layout, controlgroup, control, fullscreenCovered, fullscreen, screen, subTreeCovered, IsVisualOpaque(*layout) ); TBool hasFadeEffectsInVisualTree = (layout->CanvasFlags() & EHuiCanvasFlagExternalFadeExistsInsideVisualTree); + + // If root visuals effect is marked as opaque, then add whole screen area as covered. + if (!fullscreenCovered) + { + fullscreenCovered = IsOpaqueEffect(layout->Effect()); + } // If we layout is active setup the fade effects. Also if it is inactive, but has been // flagged as containing fade effect, then run the setup as well so that effects which @@ -1708,11 +1775,11 @@ if (fadeEffectInScreen) { TBool firstFadedWindowGroupFound = EFalse; - for (TInt j=0; jiDisplay->Roster().Count() - 2; j++) // skip the topmost (effect) layer + for (TInt j=0; jiDisplay->Roster().Count() - screen->FixedControlGroupCount(); j++) // skip the topmost (effect) layer { CHuiControlGroup& controlgroup = iAlfScreens[aScreenNumber]->iDisplay->Roster().ControlGroup(j); CHuiControl& control = controlgroup.Control(0); - CHuiCanvasVisual* layout = (CHuiCanvasVisual*)&control.Visual(0); + CHuiVisual* layout = &control.Visual(0); if (layout->Effect() && (layout->Effect()->EffectFlags() & KHuiFadeEffectFlag)) { if (firstFadedWindowGroupFound) @@ -1725,6 +1792,11 @@ } } } + + AMT_FUNC_EXC(AMT_DATA()->iActiveVisualCount = iTempTotalActiveVisualCount; + AMT_DATA()->iPassiveVisualCount = iTempTotalPassiveVisualCount; + AMT_DATA()->PrintState() + ); } TBool CAlfBridge::HandleLayoutVisualVisibility( @@ -1851,6 +1923,10 @@ aScreen->iDisplay->SetDirty(); } + #ifdef USE_MODULE_TEST_HOOKS_FOR_ALF + iTempTotalPassiveVisualCount++; + #endif + #ifdef ALF_DEBUG_PRINT_WINDOWGROUP_ORDER passivevisualcount++; #endif @@ -1946,10 +2022,17 @@ iTempRegion.Tidy(); } } + + // If effect is marked as opaque, then add whole visual area as covered. + if (IsOpaqueEffect(canvasVisual->Effect())) + { + iTempRegion.AddRect(visualDisplayRect); + iTempRegion.Tidy(); + } } - } - - visualTreeActive |= visualIsActive; + visualTreeActive |= visualIsActive; + } // for loop end : children checking loop + return visualTreeActive; } @@ -1963,17 +2046,18 @@ return; CAlfScreen* screen = iAlfScreens[0]; // TODO - for (TInt j=screen->iDisplay->Roster().Count() - 2; j>=0; j--) // skip the topmost (effect) layer + for (TInt j=screen->iDisplay->Roster().Count() - screen->FixedControlGroupCount(); j>=0; j--) // skip the topmost (effect) layer { CHuiControlGroup& controlgroup = iAlfScreens[0]->iDisplay->Roster().ControlGroup(j); CHuiControl& control = controlgroup.Control(0); - if ( control.Role() == EAlfSessionContainer ) + if ( control.Role() == EAlfSessionContainer || + control.Role() == EAlfFpsIndicatorContainer ) { continue; } - CHuiLayout* layout = (CHuiLayout*)&control.Visual(0); + CHuiVisual* layout = &control.Visual(0); for (TInt i=layout->Count()-1; i >= 0; i--) { CHuiCanvasVisual* canvasVisual = (CHuiCanvasVisual*)(&layout->Visual(i)); @@ -2046,6 +2130,16 @@ switch (data.iOp) { + case EAlfDSSynchronize: + { + TInt id = data.iInt1; + if ( iHuiEnv ) + { + iHuiEnv->Synchronize( id, this ); + } + } + break; + case EAlfDSCreateNewDisplay: { AddNewScreenL(NULL); @@ -2330,6 +2424,10 @@ iAlfScreens[aScreenNumber]->iDisplay->Roster().Hide(*(iAlfScreens[aScreenNumber]->iFloatingSpriteControlGroup)); iAlfScreens[aScreenNumber]->iDisplay->Roster().Hide(*(iAlfScreens[aScreenNumber]->iFullscreenEffectControlGroup)); + if ( iAlfScreens[aScreenNumber]->iFpsControlGroup ) + { + iAlfScreens[aScreenNumber]->iDisplay->Roster().Hide(*(iAlfScreens[aScreenNumber]->iFpsControlGroup)); + } delete iAlfScreens[aScreenNumber]; iAlfScreens.Remove( aScreenNumber ); } @@ -2464,7 +2562,17 @@ // void CAlfBridge::DestroyWindow(CHuiVisual* aVisual, TBool aUseForce) { - if ( !aUseForce && HasActiveEffect(aVisual) ) + TInt index; + TBool visualParticipatingInEffect = HasActiveEffect(aVisual, index); + + TBool effectIsExitEffect(ETrue); + if (index != KErrNotFound) + { + effectIsExitEffect = iEffectCleanupStack[index].iHideWhenFinished; + } + // effects inside application may need to destroy window to get the new content visible. + // Even when there is effect on the layout, destruction of a child window must be allowed. + if ( !aUseForce && visualParticipatingInEffect && effectIsExitEffect ) { // this visual will be destroyed on the effect call back. __ALFFXLOGSTRING1("CAlfBridge::DestroyWindow - not destroying 0x%x", aVisual); @@ -2488,7 +2596,22 @@ // check if visual is having an effect at the moment. This could occur, if options menu is exited (with effect) and then // application is exited. EHuiVisualFlagDrawOnlyAsExternalContent is indication that // there might be effect on this visual. It is not guaranteen. - + + if (!aUseForce) + { + // we can remove from iEffectCleanupStack only when this method was called from HandleDestroyWindow. Otherwise + // messing iEffectCleanupStack is likely to cause forever loop in some RemoveTemporaryPresenterVisuals method + for (TInt i = 0; i < iEffectCleanupStack.Count(); i++) + { + TEffectCleanupStruct& effectItem = iEffectCleanupStack[i]; + if (aVisual == effectItem.iEffectedVisual) + { + iEffectCleanupStack.Remove(i); + AMT_DEC_COUNTER(iAlfBridgeEffectCleanupStackCount); + break; + } + } + } delete aVisual; } // --------------------------------------------------------------------------- @@ -2894,7 +3017,8 @@ // void CAlfBridge::SetWindowActiveL(CHuiVisual* aVisual, TBool aActive) { - if (!HasActiveEffect(aVisual)) + TInt effectIndex; + if (!HasActiveEffect(aVisual, effectIndex)) { // Does not have effect if (aActive) @@ -2915,7 +3039,15 @@ if (aActive) { // this prevents windows appearing before their "effected" time - aVisual->SetFlag(EHuiVisualFlagShouldBeShown); + if (!iEffectCleanupStack[effectIndex].iHideWhenFinished) + { + // this is appear effect. Lets show it + aVisual->iOpacity.Set(KAlfVisualDefaultOpacity); + } + else + { + aVisual->SetFlag(EHuiVisualFlagShouldBeShown); + } aVisual->ClearFlag(EHuiVisualFlagShouldBeHidden); } else @@ -3661,11 +3793,14 @@ { TInt windowNodeId = aData.iInt1; TBool faded = aData.iInt2; - - CHuiVisual* viz = (CHuiVisual*)FindVisual(windowNodeId); - if (!viz) + MWsWindowTreeNode::TType type = (MWsWindowTreeNode::TType)(TInt)aData.iPtr; + CHuiVisual* viz = NULL; + if (type != MWsWindowTreeNode::EWinTreeNodeGroup) { - // Visual not found, it could be window group. It must be searched with other method. + viz = (CHuiVisual*)FindVisual(windowNodeId); + } + else + { CHuiControlGroup* cg = FindControlGroup(windowNodeId, 0); // TODO: Screen if (cg) { @@ -3913,8 +4048,6 @@ if ( aEvent.iAction != AknTransEffect::EApplicationExit && aToLayout->Flags() & EHuiVisualFlagInactive) { aToLayout->iOpacity.Set(1.0f); - failed = ETrue; - return failed; } if (aToLayout) @@ -3939,11 +4072,11 @@ { if (aEvent.iRect != TRect()) { - TRAP( err, engine->LoadGroupEffectL( *aEvent.iEffectName, effect, aToLayout->Effectable(), engine->ActiveGroupEffect(), &aEvent.iRect, this, aEvent.iHandle ) ); + TRAP( err, engine->LoadGroupEffectL( *aEvent.iEffectName, effect, aToLayout->Effectable(), engine->ActiveGroupEffect(), &aEvent.iRect, this, aEvent.iHandle, KHuiFxDelayRunUntilFirstFrameHasBeenDrawn )); } else { - TRAP( err, engine->LoadGroupEffectL( *aEvent.iEffectName, effect, aToLayout->Effectable(), engine->ActiveGroupEffect(), NULL, this, aEvent.iHandle ) ); + TRAP( err, engine->LoadGroupEffectL( *aEvent.iEffectName, effect, aToLayout->Effectable(), engine->ActiveGroupEffect(), NULL, this, aEvent.iHandle, KHuiFxDelayRunUntilFirstFrameHasBeenDrawn ) ); } effect = NULL; // only use the effect if the effect file was correctly parsed @@ -4424,6 +4557,11 @@ CHuiCanvasVisual* temporaryPresenterVisual = NULL; TInt enableEffect = ETrue; + if (aSourceVisual->iOpacity.Now() >= 0.01) + { + aSourceVisual->SetFlag(EHuiVisualFlagShouldBeShown); + } + aSourceVisual->ClearFlags(EHuiVisualFlagShouldBeInactive | EHuiVisualFlagShouldBeUnderOpaqueHint); if (aIsExitEffect) { @@ -4463,7 +4601,7 @@ aSourceVisual, temporaryPresenterVisual, ETrue, - EFalse); + aIsExitEffect); iEffectCleanupStack.AppendL(item); } else @@ -4472,7 +4610,7 @@ // aSourceVisual->SetFlag(EHuiVisualFlagDrawOnlyAsExternalContent); TEffectCleanupStruct item = TEffectCleanupStruct(aEffectHandle, aSourceVisual, NULL, EFalse, - EFalse); + aIsExitEffect); iEffectCleanupStack.AppendL(item); } } @@ -4533,7 +4671,7 @@ } else { - AddEffectItemL(aHandle, aSourceLayout, NULL, &effectControlGroup, ETrue, itemsDestroyed, EFalse); + AddEffectItemL(aHandle, aSourceLayout, NULL, &effectControlGroup, EFalse, itemsDestroyed, EFalse); __ALFFXLOGSTRING2("CAlfBridge::SetupEffectLayoutContainerL - adding handle: %d, 0x%x (source layout), NO presenter layout) to iEffectCleanupStack", aHandle, aSourceLayout); } iAlfScreens[0]->iVisualTreeVisibilityChanged = ETrue; @@ -4573,7 +4711,6 @@ void CAlfBridge::HandleGfxControlEffectsL( TAlfBridgerData data ) { - TInt err = KErrNone; TInt action = data.iInt1; TInt length = data.iInt2; __ALFFXLOGSTRING1("HandleGfxControlEffectsL - Reading bridge data %d", (TInt)data.iPtr); @@ -4612,16 +4749,8 @@ return; } iAlfScreens[0]->iDisplay->SetDirty(); - iHuiEnv->ContinueRefresh(); - if (visual && err != KErrNone) - { - // if the effect loading failed too soon, we must call our callback ourselves - // RDebug::Print(_L("HandleGfxControlEffectsL - effect not set - going directly to callback")); - AlfGfxEffectEndCallBack(fxData->iHandle); - } - delete iControlEffectData; iControlEffectData = NULL; @@ -4675,7 +4804,7 @@ } if (layoutEffectable) { - TRAP( err, engine->LoadGroupEffectL(*aEvent.iEffectName, effect, aCanvasVisual->Effectable(), engine->ActiveGroupEffect(), NULL, this, aEvent.iHandle ) ); + TRAP( err, engine->LoadGroupEffectL(*aEvent.iEffectName, effect, aCanvasVisual->Effectable(), engine->ActiveGroupEffect(), NULL, this, aEvent.iHandle, KHuiFxDelayRunUntilFirstFrameHasBeenDrawn ) ); } else { @@ -4731,11 +4860,7 @@ sourceViz->iOpacity.Set(0.0f); sourceViz->ClearFlag(EHuiVisualFlagShouldBeHidden); // it is now hidden } - else - { - // visual may be transparent after manipulation of the effect - sourceViz->iOpacity.Set(KAlfVisualDefaultOpacity); - } + if (showVisual) { sourceViz->iOpacity.Set(KAlfVisualDefaultOpacity); @@ -4875,10 +5000,18 @@ TBool CAlfBridge::HasActiveEffect(CHuiVisual* aVisual) { + TInt dummy; + return HasActiveEffect(aVisual, dummy); + } + +TBool CAlfBridge::HasActiveEffect(CHuiVisual* aVisual, TInt& aIndex) + { + aIndex = KErrNotFound; for (TInt i = 0; i < iEffectCleanupStack.Count(); i++) { if (aVisual == iEffectCleanupStack[i].iEffectedVisual) { + aIndex = i; return ETrue; } } @@ -4935,7 +5068,10 @@ { itemsRemoved++; } - iEffectCleanupStack.Remove(i); + if (iEffectCleanupStack.Count() > i) + { + iEffectCleanupStack.Remove(i); + } iFinishedCleanupStackEffects.Remove(0); i--; } @@ -4970,7 +5106,7 @@ { // We need a delay to prevent the refresh from being messed up // We try a short delay before clearing everything up. - __ALFFXLOGSTRING1("AlfGfxEffectEndCallBack, append handle %d", aHandle ); + __ALFFXLOGSTRING1("AlfGfxEffectEndCallBack, handle %d", aHandle ); // RDebug::Print(_L("AlfGfxEffectEndCallBack, append handle %d"), aHandle ); // If the handle cannot be appended, the function returns an error. // However, if the memory is low, there is nothing we can do about it. @@ -4978,10 +5114,7 @@ // If there are already other handles in the queue, the handler will not // be called for this handle, but all handles that have been left hanging // around will be cleared when HandleGfxStopEffectsL is called - - - iFinishedEffects.Append(aHandle); - + // iFinishedCleanupStackEffects.Append(aHandle); if (!iEffectEndTimer->IsActive()) { @@ -5105,6 +5238,14 @@ __ALFLOGSTRING1(">> %d EFFECT GROUP", i); #endif } + else if (indexedGroup.Control(0).Role() == EAlfFpsIndicatorContainer) + { +#ifdef HUI_DEBUG_TRACK_DRAWING + __ALFLOGSTRING3(">> %d FPS GROUP %S, %d", i, &processName, clientWindowGroupId ); +#else + __ALFLOGSTRING1(">> %d FPS GROUP", i); +#endif + } else { #ifdef HUI_DEBUG_TRACK_DRAWING @@ -5146,15 +5287,16 @@ #endif #ifdef ALF_DEBUG_VISUALIZE_WINDOWGROUP_ORDER -void CAlfBridge::VisualizeControlGroupOrderL(CHuiRoster& aRoster, CHuiControlGroup& /*aGroup*/) +void CAlfBridge::VisualizeControlGroupOrderL(CAlfScreen& aScreen, CHuiRoster& aRoster, CHuiControlGroup& /*aGroup*/) { TInt nbrofcolums = 3; TInt nbrofrows = 3; TInt gridIndex = 0; TBool skipEmpty = EFalse; - if (aRoster.Count() > 3) + TInt skipCount = aScreen.FixedControlGroupCount() + 1; + if (aRoster.Count() > skipCount) { - for (TInt i=aRoster.Count() - 3; i>0; i--) + for (TInt i=aRoster.Count() - skipCount; i>0; i--) { CHuiControl& control = aRoster.ControlGroup(i).Control(0); if (skipEmpty) @@ -5187,7 +5329,7 @@ iAlfScreens[0]->iDisplay->SetClearBackgroundL(CHuiDisplay::EClearWithSkinBackground); } #else -void CAlfBridge::VisualizeControlGroupOrderL(CHuiRoster& /*aRoster*/, CHuiControlGroup& /*aGroup*/) +void CAlfBridge::VisualizeControlGroupOrderL(CAlfScreen& /*aScreen*/, CHuiRoster& /*aRoster*/, CHuiControlGroup& /*aGroup*/) { } #endif @@ -5389,7 +5531,7 @@ aScreen->iSwRenderingTarget = new CFbsBitmap; if (aScreen->iSwRenderingTarget) { - aScreen->iSwRenderingTarget->Create(aScreen->Size(), EColor16MA); + aScreen->iSwRenderingTarget->Create(aScreen->Size(), EColor16MAP); modified = ETrue; } } @@ -5510,4 +5652,13 @@ TRAP_IGNORE(UploadSwRenderingTargetL(iAlfScreens[screenNumber])); } +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void CAlfBridge::Synchronized(TInt aId) + { + // Use P&S for now. + RProperty::Set( KAlfPSUidSynchronizer, KAlfPSKeySynchronizer, aId ); + } + // end of file diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/ServerCore/Src/alfhierarchymodel.cpp --- a/uiacceltk/hitchcock/ServerCore/Src/alfhierarchymodel.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/ServerCore/Src/alfhierarchymodel.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -233,6 +233,13 @@ aMessage.Complete( EAlfBridgerSendChunk ); return; } + case EAlfSynchronize: + { + iServer.Bridge()->AddData( EAlfDSSynchronize, aMessage.Int0() ); + aMessage.Complete( KErrNone ); + } + break; + default: { doComplete= ETrue; @@ -978,11 +985,16 @@ TUint32 nodeId = (TUint32)iStream->ReadUint32L(); TRect extent = TRect(0,0,0,0); ReadRectL(extent, iStream); + TBool isDSA = (TUint32)iStream->ReadUint32L(); CAlfNodeVisual* node = (CAlfNodeVisual*)FindNode( nodeId ); if ( node && node->Window() ) { // SetSurfaceExtent is not supported for image visual node->Window()->SetSurfaceExtent( extent ); + if (isDSA) + { + node->Window()->SetLayerUsesAplhaFlag(KWindowIsDSAHost); + } } else if( node ) // this would mean that node has being orphaneded but not yet deleted { diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/ServerCore/Src/alfnodes.cpp --- a/uiacceltk/hitchcock/ServerCore/Src/alfnodes.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/ServerCore/Src/alfnodes.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -255,7 +255,7 @@ { CAlfNode* parentNode = iModel->FindNode( iParent->iId ); __ASSERT_DEBUG(parentNode, USER_INVARIANT()); - if (parentNode->HasChildren()) + if (parentNode && parentNode->HasChildren()) { // parent node is not added to the list // the anims, cursor and sprites directly in this parent are added to the list @@ -838,7 +838,7 @@ } // starting from the first child, loop until this one is found. - while( previousSibling->iSibling != this) + while( previousSibling && previousSibling->iSibling != this) { previousSibling = previousSibling->iSibling; } @@ -879,7 +879,7 @@ } if (iFadeState != iPostedFadeState) { - iModel->Server().Bridge()->AddData( EAlfDSSetFadeEffect, iId , iFadeState); + iModel->Server().Bridge()->AddData( EAlfDSSetFadeEffect, iId , iFadeState, (TAny*)iType); iPostedFadeState = iFadeState; } } diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/ServerCore/Src/alfscreen.cpp --- a/uiacceltk/hitchcock/ServerCore/Src/alfscreen.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/ServerCore/Src/alfscreen.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -48,6 +48,7 @@ _LIT8(KAlfFullScreenEffectContainerControlTag, "EFFECT"); //_LIT8(KAlfWindowGroupTemporaryRemoveControlTag, "WGTEMP"); +const TInt KAlfNumberOfFixedControlGroups = 2; // ======== MEMBER FUNCTIONS ======== @@ -163,8 +164,17 @@ _LIT(KRDSupport, "c:\\resource\\errrd" ); if (CHuiStatic::FsSession().Handle() && BaflUtils::FileExists( CHuiStatic::FsSession(), KRDSupport )) { + iFpsControlGroup = &aHuiEnv.NewControlGroupL(0xDEADBEEF + 20 + iScreenNum); // TODO + + CHuiControl* fpsCntrl = new (ELeave) CHuiControl(aHuiEnv); + CleanupStack::PushL(fpsCntrl); + fpsCntrl->ConstructL(); + fpsCntrl->SetRole(EAlfFpsIndicatorContainer); + iFpsControlGroup->AppendL(fpsCntrl); + CleanupStack::Pop(fpsCntrl); + // FPS Counter with hitchcock drawing - iFPSText = CHuiTextVisual::AddNewL(*effectCntrl, effectLayout); + iFPSText = CHuiTextVisual::AddNewL(*fpsCntrl, NULL); iFPSText->SetColor(KRgbBlue); iFPSText->SetFlag(EHuiVisualFlagManualLayout); iFPSText->SetPos(THuiRealPoint(300,20)); // could be adjusted @@ -194,6 +204,8 @@ // this deletes also control and layout delete iFloatingSpriteControlGroup; + delete iFpsControlGroup; + delete iDisplay; iControlGroups.Close(); @@ -222,3 +234,12 @@ return iVisualTreeVisibilityChanged; } +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +TInt CAlfScreen::FixedControlGroupCount() const + { + return !iFpsControlGroup ? + KAlfNumberOfFixedControlGroups : + KAlfNumberOfFixedControlGroups + 1; + } diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/ServerCore/Src/alfstreamerserver.cpp --- a/uiacceltk/hitchcock/ServerCore/Src/alfstreamerserver.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/ServerCore/Src/alfstreamerserver.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -610,6 +610,7 @@ case EAlfBridgerRequestDataBlock: case EAlfBridgerAsyncronousData: case EDsNotifyNativeWindowData: + case EAlfSynchronize: { server->WindowTree()->HandleMessageL( aMessage ); return; diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/backgroundanim/src/bganimhost.cpp --- a/uiacceltk/hitchcock/backgroundanim/src/bganimhost.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/backgroundanim/src/bganimhost.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -611,7 +611,7 @@ void CBgAnimHost::DataReceived( CSensrvChannel& aChannel, TInt aCount, TInt aDataLost ) { - if (iPlugin && iPlugin->receivesensordata); + if (iPlugin && iPlugin->receivesensordata) { iPlugin->receivesensordata((void*)&aChannel, aCount, aDataLost); } diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/coretoolkit/BWINS/hitchcocku.DEF --- a/uiacceltk/hitchcock/coretoolkit/BWINS/hitchcocku.DEF Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/coretoolkit/BWINS/hitchcocku.DEF Mon Feb 22 17:57:49 2010 +0200 @@ -1581,4 +1581,8 @@ ?SetForegroundBitmapL@CHuiDisplay@@QAEXPAVCFbsBitmap@@@Z @ 1580 NONAME ; void CHuiDisplay::SetForegroundBitmapL(class CFbsBitmap *) ?ForegroundBitmap@CHuiDisplay@@QBEPAVCFbsBitmap@@XZ @ 1581 NONAME ; class CFbsBitmap * CHuiDisplay::ForegroundBitmap(void) const ?HasCommandBuffers@CHuiCanvasVisual@@QBEHH@Z @ 1582 NONAME ; int CHuiCanvasVisual::HasCommandBuffers(int) const + ?SkinContentChanged@CHuiS60Skin@@UAEXXZ @ 1583 NONAME ; void CHuiS60Skin::SkinContentChanged(void) + ?SkinPackageChanged@CHuiS60Skin@@UAEXW4TAknsSkinStatusPackageChangeReason@@@Z @ 1584 NONAME ; void CHuiS60Skin::SkinPackageChanged(enum TAknsSkinStatusPackageChangeReason) + ?SkinConfigurationChanged@CHuiS60Skin@@UAEXW4TAknsSkinStatusConfigurationChangeReason@@@Z @ 1585 NONAME ; void CHuiS60Skin::SkinConfigurationChanged(enum TAknsSkinStatusConfigurationChangeReason) + ?Synchronize@CHuiEnv@@QAEXHPAVMHuiSynchronizationObserver@@@Z @ 1586 NONAME ; void CHuiEnv::Synchronize(int, class MHuiSynchronizationObserver *) diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/coretoolkit/eabi/hitchcocku.DEF --- a/uiacceltk/hitchcock/coretoolkit/eabi/hitchcocku.DEF Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/coretoolkit/eabi/hitchcocku.DEF Mon Feb 22 17:57:49 2010 +0200 @@ -1979,4 +1979,11 @@ _ZTI15MHuiFxParameter @ 1978 NONAME _ZTV15MHuiFxParameter @ 1979 NONAME _ZNK16CHuiCanvasVisual17HasCommandBuffersEi @ 1980 NONAME + _ZN11CHuiS60Skin18SkinContentChangedEv @ 1981 NONAME + _ZN11CHuiS60Skin18SkinPackageChangedE34TAknsSkinStatusPackageChangeReason @ 1982 NONAME + _ZN11CHuiS60Skin24SkinConfigurationChangedE40TAknsSkinStatusConfigurationChangeReason @ 1983 NONAME + _ZThn28_N11CHuiS60Skin18SkinContentChangedEv @ 1984 NONAME + _ZThn28_N11CHuiS60Skin18SkinPackageChangedE34TAknsSkinStatusPackageChangeReason @ 1985 NONAME + _ZThn28_N11CHuiS60Skin24SkinConfigurationChangedE40TAknsSkinStatusConfigurationChangeReason @ 1986 NONAME + _ZN7CHuiEnv11SynchronizeEiP27MHuiSynchronizationObserver @ 1987 NONAME diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/coretoolkit/inc/HuiFxEffect.h --- a/uiacceltk/hitchcock/coretoolkit/inc/HuiFxEffect.h Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/coretoolkit/inc/HuiFxEffect.h Mon Feb 22 17:57:49 2010 +0200 @@ -37,6 +37,7 @@ const TInt KHuiFxDelayRunUntilFirstFrameHasBeenDrawn = 0x10; const TInt KHuiFxDisableBackground = 0x20; const TInt KHuiFxAlwaysBlend = 0x40; +const TInt KHuiFxOpaqueHint = 0x80; class MAlfGfxEffectObserver { diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/coretoolkit/inc/HuiFxEffectCache.h --- a/uiacceltk/hitchcock/coretoolkit/inc/HuiFxEffectCache.h Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/coretoolkit/inc/HuiFxEffectCache.h Mon Feb 22 17:57:49 2010 +0200 @@ -62,6 +62,7 @@ }; MHuiFxEffectCacheNode *Find(MHuiFxEffectCacheNode *aNode); + MHuiFxEffectCacheNode *FindDuplicate(MHuiFxEffectCacheNode *aNode); static bool Compare(MHuiFxEffectCacheNode *aNode1, MHuiFxEffectCacheNode *aNode2); void Remove(RPointerArray &aEffects, MHuiFxEffectCacheNode *aNode); void Remove(RHashMap &aMap, MHuiFxEffectCacheNode *aNode); diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/coretoolkit/inc/HuiFxEngine.h --- a/uiacceltk/hitchcock/coretoolkit/inc/HuiFxEngine.h Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/coretoolkit/inc/HuiFxEngine.h Mon Feb 22 17:57:49 2010 +0200 @@ -155,6 +155,10 @@ TInt iBuffersInUse; private: + + TBool FxmlUsesInput1(CHuiFxEffect& aEffect); + +private: // Render buffer management --- native implementations virtual CHuiFxRenderbuffer* AcquireNativeRenderbuffer(const TSize& aDesiredSize) = 0; virtual void ReleaseNativeRenderbuffer(CHuiFxRenderbuffer* aBuffer) = 0; diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/coretoolkit/inc/HuiRenderSurface.h --- a/uiacceltk/hitchcock/coretoolkit/inc/HuiRenderSurface.h Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/coretoolkit/inc/HuiRenderSurface.h Mon Feb 22 17:57:49 2010 +0200 @@ -104,6 +104,12 @@ virtual void SwapBuffers() = 0; /** + * Synchronizes the context. All rendering calls for the currently bound context are guaranteed + * to be executed, when thsi method returns. + */ + virtual void Finish() = 0; + + /** * Binds a texture to the surface to be used during subsequent drawing * operations. * diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/coretoolkit/inc/huicanvaswspainter.h --- a/uiacceltk/hitchcock/coretoolkit/inc/huicanvaswspainter.h Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/coretoolkit/inc/huicanvaswspainter.h Mon Feb 22 17:57:49 2010 +0200 @@ -379,6 +379,9 @@ #ifdef HUI_DEBUG_TRACK_DRAWING CAlfCommandDebug* iCommandDebugger; #endif + + // Boolean flag indicating if render buffer ought to be used. + TBool iEnableRenderBuffer; }; #endif // __HUICANVASWSPAINTER_H__ diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/coretoolkit/inc/huiextension.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiacceltk/hitchcock/coretoolkit/inc/huiextension.h Mon Feb 22 17:57:49 2010 +0200 @@ -0,0 +1,52 @@ +/* +* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Internal extensions +* +*/ + + + +#ifndef __HUIEXTENSION_H__ +#define __HUIEXTENSION_H__ + + +#include + +// Uid for Query visual extension +const TUid KHuiVisualQueryUid = { 0x2002C36B }; + +// Parameter structure for Query visual extension +struct THuiVisualQueryParams + { + enum TQueryType + { + // iResult contains canvas flags + EQueryCanvasFlags, + // iResult contains positive value if external content drawing enabled, 0 otherwise. + EQueryExternalContentDrawingEnabled, + // iResult contains positive value if this has something to draw, 0 otherwise. + EQueryHasDrawableContent + }; + + // Query type (in) + TQueryType iQueryType; + + // Result of query (out) + TInt iValue; + + // Error code (out). This should be filled with KErrNotSupported by caller and visual should modify to KErrNone. + TInt iResult; + }; + +#endif // __HUIEXTENSION_H__ diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/coretoolkit/rendervg10/inc/HuiVg10Gc.h --- a/uiacceltk/hitchcock/coretoolkit/rendervg10/inc/HuiVg10Gc.h Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/coretoolkit/rendervg10/inc/HuiVg10Gc.h Mon Feb 22 17:57:49 2010 +0200 @@ -150,6 +150,11 @@ void SetDimmingFog(const TRgb& aColor, TReal32 aAmount) __SOFTFP; /** + * Clear rect using the current pen color + */ + void Clear(const TRect& aRect); + + /** * Clear using the current pen color. */ void Clear(); @@ -553,7 +558,8 @@ /** Default fill and stroke paint */ VGPaint iPaint; - + TUint32 iPaintColor; + /** Gradient fill paint */ VGPaint iGradientPaint; diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/coretoolkit/rendervg10/inc/HuiVg10PBufferSurface.h --- a/uiacceltk/hitchcock/coretoolkit/rendervg10/inc/HuiVg10PBufferSurface.h Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/coretoolkit/rendervg10/inc/HuiVg10PBufferSurface.h Mon Feb 22 17:57:49 2010 +0200 @@ -118,6 +118,12 @@ void SwapBuffers(); /** + * Synchronizes the context. All rendering calls for the currently bound context are guaranteed + * to be executed, when thsi method returns. + */ + void Finish(); + + /** * Binds a texture to the surface to be used during subsequent drawing * operations. */ diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/coretoolkit/rendervg10/inc/HuiVg10RenderSurface.h --- a/uiacceltk/hitchcock/coretoolkit/rendervg10/inc/HuiVg10RenderSurface.h Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/coretoolkit/rendervg10/inc/HuiVg10RenderSurface.h Mon Feb 22 17:57:49 2010 +0200 @@ -65,6 +65,8 @@ virtual void SwapBuffers(); + virtual void Finish(); + virtual void BindTexture(TInt aTextureUnit, const MHuiSegmentedTexture& aTexture, TInt aSegment); diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiVg10Gc.cpp --- a/uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiVg10Gc.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiVg10Gc.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -300,6 +300,8 @@ iArcPath = vgCreatePath(VG_PATH_FORMAT_STANDARD, VG_PATH_DATATYPE_F, 1.0f, 0.0f, 2, 7, VG_PATH_CAPABILITY_APPEND_TO); iPaint = vgCreatePaint(); + iPaintColor = 0; + vgSetColor(iPaint, iPaintColor); iGradientPaint = vgCreatePaint(); iBlendMode = VG_BLEND_SRC_OVER; @@ -707,6 +709,42 @@ // Fog not supported } +void CHuiVg10Gc::Clear(const TRect& aRect) + { + HUI_VG_INVARIANT(); + + UpdateClientMatrix(); + + THuiRealRect transformed = aRect; + iMatrixStack->Current().Multiply(transformed.iTl); + iMatrixStack->Current().Multiply(transformed.iBr); + + // Normalize the rectangle + if (transformed.iTl.iX > transformed.iBr.iX) + { + TReal32 tmp = transformed.iTl.iX; + transformed.iTl.iX = transformed.iBr.iX; + transformed.iBr.iX = tmp; + } + if (transformed.iTl.iY > transformed.iBr.iY) + { + TReal32 tmp = transformed.iTl.iY; + transformed.iTl.iY = transformed.iBr.iY; + transformed.iBr.iY = tmp; + } + VGfloat scale = 1.0f / 255.0f; + VGfloat color[] = + { + PenColor().Red() * scale, + PenColor().Green() * scale, + PenColor().Blue() * scale, + PenAlpha() * scale + }; + + vgSetfv(VG_CLEAR_COLOR, 4, color); + vgClear(transformed.iTl.iX, transformed.iTl.iY, transformed.Width(), transformed.Height()); + HUI_VG_INVARIANT(); + } void CHuiVg10Gc::Clear() { @@ -941,7 +979,12 @@ #endif // Update the color of the current paint - vgSetColor(iPaint, color); + // if required + if (iPaintColor != color) + { + vgSetColor(iPaint, color); + iPaintColor = color; + } // Detect white fully opaque color if (color == 0xffffffff) @@ -1050,7 +1093,7 @@ vgTranslate(-srcX, -srcY); #ifdef __NVG - if ( isExtended && texture.IsNvgContent()) + if ( isExtended ) { // Determine the size to which we want to draw the NVG icon paths TSize contentSize( HUI_ROUND_FLOAT_TO_INT(aDestRect.Width()), @@ -1163,7 +1206,7 @@ const CHuiVg10Texture& texture = static_cast( aTexture ); TBool isExtended = texture.IsExtended(); - if (isExtended && texture.IsNvgContent()) + if (isExtended) { UpdateMatrix(VG_MATRIX_PATH_USER_TO_SURFACE); TSize contentSize(0, 0); diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiVg10PBufferSurface.cpp --- a/uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiVg10PBufferSurface.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiVg10PBufferSurface.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -409,6 +409,10 @@ // Pbuffers consist of a single buffer only (no front/back buffers to swap). } +void CHuiVg10PBufferSurface::Finish() + { + vgFinish(); + } void CHuiVg10PBufferSurface::BindTexture(TInt aTextureUnit, const MHuiSegmentedTexture& aTexture, diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiVg10RenderSurface.cpp --- a/uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiVg10RenderSurface.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiVg10RenderSurface.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -185,6 +185,9 @@ EGLint attriblist[] = { EGL_VG_ALPHA_FORMAT, EGL_VG_ALPHA_FORMAT_PRE, +#ifdef SYMBIAN_GRAPHICS_WSERV_QT_EFFECTS + EGL_RENDER_BUFFER, EGL_SINGLE_BUFFER, +#endif EGL_NONE }; attriblistPtr = &attriblist[0]; @@ -296,6 +299,10 @@ eglSwapBuffers(iEglDisplay, iEglSurface); } +void CHuiVg10RenderSurface::Finish() + { + vgFinish(); + } void CHuiVg10RenderSurface::BindTexture(TInt /*aTextureUnit*/, const MHuiSegmentedTexture& aTexture, diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiVg10Texture.cpp --- a/uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiVg10Texture.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiVg10Texture.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -1082,7 +1082,7 @@ image = CreateRenderedImage(&nvgEngine, dataBuf, Size()); // New functionality for checking the mask - if (header.GetBitmapId() != maskHeader.GetBitmapId() && + if (header.GetBitmapId() != maskHeader.GetBitmapId() && maskDataBuf && CompareNvgData(dataBuf, maskDataBuf) != 0) { VGImage maskImg = VG_INVALID_HANDLE; @@ -1436,14 +1436,7 @@ TSize CHuiVg10Texture::ApplyMargin(VGImage aImage, TSize aSize, EGLDisplay aDisplay, EGLSurface aSurface, EGLContext aContext) { HUI_VG_INVARIANT(); - // If the icon is also a current EGL surface, the getImageSubData - // won't succeed and return "image in use" -error.. - if ( eglMakeCurrent( aDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT ) == EGL_FALSE ) - { - HUI_DEBUG1(_L("CHuiVg10Texture::ApplyMargin() - EGL NO_Surface could not be made current, eglErr: %04x"), eglGetError()); - return aSize; - } - + #ifndef __WINS__ // Should possibly query the supported mode instead? VGImageFormat imageInternalFormat = VG_sARGB_8888_PRE; #else @@ -1470,7 +1463,7 @@ TReal R = 1.0; TInt HaN = Ha; - const TInt lastColumn = aSize.iHeight - 1; + const TInt lastColumn = aSize.iWidth - 1; for (TInt curRow = 0; curRow < lValidMargin; curRow++) { const TInt y = (aSize.iHeight - 1) - curRow; // h - 1 is the last line @@ -1493,13 +1486,6 @@ delete buf; HUI_VG_INVARIANT(); - // Make the PBuffer surface current again - if ( eglMakeCurrent(aDisplay, aSurface, aSurface, aContext) == EGL_FALSE ) - { - HUI_DEBUG1(_L("CHuiVg10Texture::ApplyMargin() - EGL aSurface could not be made current, eglErr: %04x"), eglGetError()); - return aSize; - } - // If icon size has to be changed, clear out old area for new DrawNVG round! if(aSize.iHeight > HaN) { diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/coretoolkit/src/HuiAnchorLayout.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/HuiAnchorLayout.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiAnchorLayout.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -713,7 +713,9 @@ Mem::FillZ(anchor, sizeof(*anchor)); } } - + + ASSERT(anchor); + TEdgeAnchor* edge(NULL); TAxis& axis = anchor->Axis(axisId); error = axis.AddEdge(edgeProximity, edge); diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/coretoolkit/src/HuiAnimatedTexture.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/HuiAnimatedTexture.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiAnimatedTexture.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -56,7 +56,7 @@ EXPORT_C MHuiSegmentedTexture* CHuiAnimatedTexture::SegmentedTexture() { - return this; + return iTexture; } @@ -68,7 +68,7 @@ EXPORT_C const MHuiSegmentedTexture* CHuiAnimatedTexture::SegmentedTexture() const { - return this; + return iTexture; } diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/coretoolkit/src/HuiCanvasTextureCache.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/HuiCanvasTextureCache.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiCanvasTextureCache.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -285,6 +285,8 @@ CHuiCanvasTextImage::~CHuiCanvasTextImage() { + delete iText; + iText = NULL; } TBool CHuiCanvasTextImage::UseColorModulation() const @@ -2191,6 +2193,7 @@ iSearchedGraphicImageEntry->iBitmapTouchCount = KHuiInitialBitmapTouchCount; iSearchedGraphicImageEntry->iMaskTouchCount = KHuiInitialBitmapTouchCount; iSearchedGraphicImageEntry->iGcParams = aCachedImageParams.iGcParams; + iSearchedGraphicImageEntry->iCache = this; cachedEntry = iCachedImages.FindInOrder(iSearchedGraphicImageEntry, ImageOrderFunc); if (cachedEntry == KErrNotFound) @@ -2219,6 +2222,7 @@ iSearchedGraphicImageEntry->Reset(); iSearchedGraphicImageEntry->iGcParams = aGcParams; iSearchedGraphicImageEntry->iImageSize = aImageSize; + iSearchedGraphicImageEntry->iCache = this; for (TInt i=0; iiBitmapTouchCount = KHuiInitialBitmapTouchCount; iSearchedGraphicImageEntry->iMaskTouchCount = KHuiInitialBitmapTouchCount; iSearchedGraphicImageEntry->iGcParams = aCachedImageParams.iGcParams; + iSearchedGraphicImageEntry->iCache = this; cachedEntry = iCachedImages.FindInOrder(iSearchedGraphicImageEntry, ImageOrderFunc); if (cachedEntry == KErrNotFound) { // Create new entry object CHuiCanvasGraphicImage* newEntry = new (ELeave) CHuiCanvasGraphicImage; - CleanupStack::PushL(newEntry); + CleanupStack::PushL(newEntry); newEntry->CopyAttributes(*iSearchedGraphicImageEntry); @@ -2311,7 +2316,7 @@ User::LeaveIfError(iCachedImages.InsertInOrder(newEntry, ImageOrderFunc)); cachedEntry = iCachedImages.FindInOrder(newEntry, ImageOrderFunc); CleanupStack::Pop(newEntry); - needUpdate = ETrue; + needUpdate = ETrue; } else { diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/coretoolkit/src/HuiCanvasVisual.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/HuiCanvasVisual.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiCanvasVisual.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -46,6 +46,9 @@ #include "HuiFxEffect.h" #include "HuiCmdBufferBrush.h" +#include "huiextension.h" + +#include "huiwscanvascommands.h" /** Flag to convienintly disable/enable canvas render buffer usage if needed */ /* Turned to EFalse as DFS77 was having booting problems in wk26 */ @@ -93,7 +96,9 @@ void CHuiCanvasVisual::ConstructL() { CHuiLayout::ConstructL(); - + + SetFlags(EHuiVisualFlagWserv); + iCanvasVisualData = new (ELeave) THuiCanvasVisualData; iCanvasVisualData->iCommandSetType = ECommandBufferWs; iCanvasVisualData->iCanvasFlags = 0; @@ -101,13 +106,13 @@ iCanvasVisualData->iParentCanvas = NULL; iCanvasVisualData->iBackground = NULL; iCanvasVisualData->iCanvasPainter = NULL; + iCanvasVisualData->iStoredRenderBuffer = 0; iCanvasVisualData->iBackground = CHuiCanvasBackground::NewL(); iCanvasVisualData->iBackground->SetVisual(this); iCanvasVisualData->iCanvasPainter = CHuiCanvasWsPainter::NewL(); iCanvasVisualData->iCanvasPainter->SetVisual(this); - iCanvasVisualData->iStoredRenderBuffer = 0; TBool useCanvasRenderBuffer = CHuiStatic::Renderer().Allows(EHuiRenderPluginAllowVisualPBufferSurfaces); iCanvasVisualData->iCanvasPainter->EnableRenderBuffer(useCanvasRenderBuffer); @@ -116,26 +121,34 @@ iCanvasVisualData->iLayerExtent = TRect(); // subwindow effects - EnableBrushesL(ETrue); + //EnableBrushesL(ETrue); } CHuiCanvasVisual::~CHuiCanvasVisual() { - FreeRenderBuffer(); - if(iCanvasVisualData->iExternalContentVisual) - { - // Allow the external content visual to be drawn normally - iCanvasVisualData->iExternalContentVisual->ClearFlag(EHuiVisualFlagDrawOnlyAsExternalContent); - } - + + FreeRenderBuffer(); if (iCanvasVisualData) { + if(iCanvasVisualData->iExternalContentVisual) + { + // Allow the external content visual to be drawn normally + iCanvasVisualData->iExternalContentVisual->ClearFlag(EHuiVisualFlagDrawOnlyAsExternalContent); + } ClearCommandSet(); - delete iCanvasVisualData->iBackground; - iCanvasVisualData->iBackground = NULL; - delete iCanvasVisualData->iCanvasPainter; - iCanvasVisualData->iCanvasPainter = NULL; + if ( iCanvasVisualData->iBackground ) + { + delete iCanvasVisualData->iBackground; + iCanvasVisualData->iBackground = NULL; + } + if ( iCanvasVisualData->iCanvasPainter ) + { + delete iCanvasVisualData->iCanvasPainter; + iCanvasVisualData->iCanvasPainter = NULL; + } + + iCanvasVisualData->iExternalContentVisual = NULL; // Tell parent that we are destructed @@ -332,14 +345,17 @@ if ((IsDelayedEffectSource() || Freezed())) { + // Select right draw mode + THuiCanvasDrawMode drawMode = (Flags() & EHuiVisualFlagOpaqueHint) ? EHuiCanvasDrawModeNormal : EHuiCanvasDrawModeBlend; + if (StoredRenderBuffer()) { - DrawStoredFullScreenRenderBuffer(aGc); + DrawStoredFullScreenRenderBuffer(drawMode, aGc); return; } else if (iCanvasVisualData->iStoredRenderBuffer) { - DrawStoredVisualRenderBuffer(); + DrawStoredVisualRenderBuffer(drawMode); return; } } @@ -492,14 +508,17 @@ if ((IsDelayedEffectSource() || Freezed())) { + // Select right draw mode + THuiCanvasDrawMode drawMode = (Flags() & EHuiVisualFlagOpaqueHint) ? EHuiCanvasDrawModeNormal : EHuiCanvasDrawModeBlend; + if (StoredRenderBuffer()) { - DrawStoredFullScreenRenderBuffer(aGc); + DrawStoredFullScreenRenderBuffer(drawMode, aGc); return; } else if (iCanvasVisualData->iStoredRenderBuffer) { - DrawStoredVisualRenderBuffer(); + DrawStoredVisualRenderBuffer(drawMode); return; } } @@ -590,20 +609,26 @@ const TInt count = Count(); for(TInt i = 0; i < count; ++i) { - // This cast is not really safe, but dynamic cast is slow - CHuiCanvasVisual* visual = (CHuiCanvasVisual*) iHuiLayoutPrivateData->iChildren[i]; + CHuiVisual* visual = iHuiLayoutPrivateData->iChildren[i]; + //Ignore inactive child visuals if ((visual->Flags()& EHuiVisualFlagInactive)) { continue; } - if (aIncludeCanvasFlags && !(visual->CanvasFlags()& aIncludeCanvasFlags)) + TInt canvasFlags = 0; + if (aIncludeCanvasFlags || aExcludeCanvasFlags) + { + canvasFlags = visual->QueryCanvasFlags(); + } + + if (aIncludeCanvasFlags && !(canvasFlags & aIncludeCanvasFlags)) { continue; } - if (aExcludeCanvasFlags && (visual->CanvasFlags()& aExcludeCanvasFlags)) + if (aExcludeCanvasFlags && (canvasFlags & aExcludeCanvasFlags)) { continue; } @@ -649,34 +674,50 @@ return hasChanged; } -TBool CHuiCanvasVisual::ChildTreeChanged(TInt aExcludeCanvasFlags) const +// Goes through visual hierarchy and checks if any visual has changed. +// This method does not modify any visuals. Parameter is not const +// because of CanvasVisual method. +TBool CHuiCanvasVisual::RecursiveChildTreeChanged(CHuiVisual* aVisual, TInt aExcludeCanvasFlags) { - // CHuiLayout::Changed() does not check children. - // This utility method checks whole child tree below this visual. TBool changed = EFalse; // Check wheter we should include this visual or igonre it. if (aExcludeCanvasFlags) { - if (!(iCanvasVisualData->iCanvasFlags & aExcludeCanvasFlags)) + if ( !(aVisual->Flags() & EHuiVisualFlagInactive) ) { - changed |= Changed(); + TInt canvasFlags = aVisual->QueryCanvasFlags(); + + if ( !(canvasFlags & aExcludeCanvasFlags) ) + { + changed |= aVisual->Changed(); + } } } - const TInt count = Count(); - for(TInt i = 0; i < count; ++i) + if ( !changed ) { - CHuiCanvasVisual* visual = (CHuiCanvasVisual*) iHuiLayoutPrivateData->iChildren[i]; - changed |= visual->ChildTreeChanged(aExcludeCanvasFlags); - if (changed) + const TInt count = aVisual->Count(); + for(TInt i = 0; i < count; ++i) { - break; + CHuiVisual* visual = &aVisual->Visual(i); + changed |= RecursiveChildTreeChanged( visual, aExcludeCanvasFlags ); + if ( changed ) + { + break; + } } } - return changed; + return changed; } +TBool CHuiCanvasVisual::ChildTreeChanged(TInt aExcludeCanvasFlags) const + { + // CHuiLayout::Changed() does not check children. + // This utility method checks whole child tree below this visual. + return RecursiveChildTreeChanged( + const_cast(this), aExcludeCanvasFlags); + } EXPORT_C void CHuiCanvasVisual::ClearChanged() { @@ -747,8 +788,11 @@ EXPORT_C void CHuiCanvasVisual::ClearCommandSet() { - iCanvasVisualData->iCanvasPainter->ClearCommandSet(); - SetChanged(); + if ( iCanvasVisualData->iCanvasPainter ) + { + iCanvasVisualData->iCanvasPainter->ClearCommandSet(); + SetChanged(); + } } #ifdef HUI_DEBUG_TRACK_DRAWING @@ -815,6 +859,7 @@ if (aCommandType == ECommandBufferAlf) { + ClearFlags(EHuiVisualFlagWserv); delete iCanvasVisualData->iCanvasPainter; iCanvasVisualData->iCanvasPainter = NULL; iCanvasVisualData->iCommandSetType = ECommandBufferAlf; @@ -823,6 +868,7 @@ } else if (aCommandType == ECommandBufferWs) { + SetFlags(EHuiVisualFlagWserv); delete iCanvasVisualData->iCanvasPainter; iCanvasVisualData->iCanvasPainter = NULL; iCanvasVisualData->iCommandSetType = ECommandBufferWs; @@ -983,6 +1029,31 @@ return drawContent; } +// Goes through visual hierarchy and checks if any visual has external content drawing enabled. +TBool CHuiCanvasVisual::RecursiveIsExternalContentDrawingEnabled(CHuiVisual* aVisual) + { + TBool drawExternalContent = EFalse; + + const TInt count = aVisual->Count(); + for(TInt i = 0; i < count; ++i) + { + CHuiVisual* visual = &aVisual->Visual(i); + drawExternalContent |= visual->QueryExternalContentDrawingEnabled(); + if ( drawExternalContent ) + { + break; + } + + drawExternalContent |= RecursiveIsExternalContentDrawingEnabled( visual ); + if ( drawExternalContent ) + { + break; + } + } + + return drawExternalContent; + } + TBool CHuiCanvasVisual::IsExternalContentDrawingEnabled(TBool aIncludeChildren) const { TBool drawExternalContent = EFalse; @@ -990,13 +1061,10 @@ { drawExternalContent = ETrue; } - if (aIncludeChildren) + if (aIncludeChildren && !drawExternalContent) { - for (TInt i=0; !drawExternalContent && iIsExternalContentDrawingEnabled(ETrue); - } + drawExternalContent |= RecursiveIsExternalContentDrawingEnabled( + const_cast(this)); } return drawExternalContent; } @@ -1055,6 +1123,11 @@ EXPORT_C void CHuiCanvasVisual::SetLayerUsesAlphaFlag(TBool aEnabled) { + if (aEnabled == KWindowIsDSAHost) + { + iCanvasVisualData->iCanvasFlags |= EHuiCanvasFlagDisableCanvasContent; + return; + } iCanvasVisualData->iLayerUsesAlphaFlag = aEnabled; } @@ -1118,7 +1191,8 @@ } else // background surface was removed { - EnableTransformationL(EFalse); + iCanvasVisualData->iCanvasFlags &= (~EHuiCanvasFlagDisableCanvasContent); + //EnableTransformationL(EFalse); } } @@ -1154,17 +1228,39 @@ } } -void CHuiCanvasVisual::DrawStoredVisualRenderBuffer() const +void CHuiCanvasVisual::DrawStoredVisualRenderBuffer(TInt aCanvasDrawMode) const { CHuiCanvasGc& gc = CanvasGc(); + CHuiCanvasVisual* visual = NULL; + TBool transparent = EffectiveOpacity() < 1.0f; + gc.SetDrawMode((THuiCanvasDrawMode)aCanvasDrawMode); + if (transparent) + { + gc.EnableEffectiveOpacity(ETrue); + visual = gc.Visual(); + gc.SetVisual(*this); + gc.SetDrawMode(EHuiCanvasDrawModeBlend); + } THuiRealPoint dest_point = DisplayRect().iTl; CHuiCanvasRenderBuffer *stored = iCanvasVisualData->iStoredRenderBuffer; + gc.DrawImage(*stored, dest_point); + if (transparent) + { + gc.SetVisual(*visual); + gc.EnableEffectiveOpacity(EFalse); + } } -void CHuiCanvasVisual::DrawStoredFullScreenRenderBuffer(CHuiGc& aGc) const +void CHuiCanvasVisual::DrawStoredFullScreenRenderBuffer(TInt aCanvasDrawMode, CHuiGc& aGc) const { if (!Display()) return; + if (!iHuiLayoutPrivateData->iGc) + { + CHuiRenderPlugin& renderplugin = CHuiStatic::Renderer(); + // deleted in CHuiLayout destructor or CHuiCanvasVisual::FreeRenderBuffer when not needed anymore + iHuiLayoutPrivateData->iGc = renderplugin.CreateCanvasGcL(); + } CHuiCanvasGc& gc = *iHuiLayoutPrivateData->iGc; gc.SetGc(aGc); gc.SetDefaults(); @@ -1182,8 +1278,23 @@ THuiRealPoint dest_point = DisplayRect().iTl; CHuiCanvasRenderBuffer *stored = StoredRenderBuffer(); - gc.DrawImage(*stored, dest_point); - + TBool transparent = EffectiveOpacity() < 1.0f; + CHuiCanvasVisual* visual = NULL; + gc.SetDrawMode((THuiCanvasDrawMode)aCanvasDrawMode); + if (transparent) + { + + gc.EnableEffectiveOpacity(ETrue); + visual = gc.Visual(); + gc.SetVisual(*this); + gc.SetDrawMode(EHuiCanvasDrawModeBlend); + } + gc.DrawImage(*stored, dest_point); + if (transparent) + { + gc.SetVisual(*visual); + gc.EnableEffectiveOpacity(EFalse); + } gc.PopTransformationMatrix(); } @@ -1195,24 +1306,47 @@ { delete iCanvasVisualData->iStoredRenderBuffer; iCanvasVisualData->iStoredRenderBuffer = NULL; + delete iHuiLayoutPrivateData->iGc; + iHuiLayoutPrivateData->iGc = NULL; } } } +// Goes through visual hierarchy and checks if any visual has command buffers +// or other drawable content. +TBool CHuiCanvasVisual::RecursiveHasCommandBuffers(CHuiVisual* aVisual) + { + TBool hasCommandBuffers = EFalse; + + const TInt count = aVisual->Count(); + for(TInt i = 0; i < count; ++i) + { + CHuiVisual* visual = &aVisual->Visual(i); + // If visual is a canvas one, then QueryHasDrawableContent returns + // HasCommandBuffers(EFalse) + hasCommandBuffers |= visual->QueryHasDrawableContent(); + if ( hasCommandBuffers ) + { + break; + } + + hasCommandBuffers |= RecursiveHasCommandBuffers( visual ); + if ( hasCommandBuffers ) + { + break; + } + } + + return hasCommandBuffers; + } + EXPORT_C TBool CHuiCanvasVisual::HasCommandBuffers(TBool aIncludeChildren) const { TBool hasCommandBuffers = iCanvasVisualData->iCanvasPainter->HasCommandBuffers(); - if (aIncludeChildren) + if (aIncludeChildren && !hasCommandBuffers) { - for (TInt i=0; iHasCommandBuffers(aIncludeChildren); - if (hasCommandBuffers) - { - break; - } - } + // Include children branch - just check if there is something to draw. + hasCommandBuffers |= RecursiveHasCommandBuffers(const_cast(this)); } return hasCommandBuffers; } @@ -1267,4 +1401,31 @@ return THuiLayoutChildRectLayoutUpdateNeeded; } - +void CHuiCanvasVisual::VisualExtension(const TUid& aExtensionUid, TAny** aExtensionParams) + { + if (aExtensionUid == KHuiVisualQueryUid && aExtensionParams && *aExtensionParams) + { + THuiVisualQueryParams* params = static_cast(*aExtensionParams); + switch (params->iQueryType) + { + case THuiVisualQueryParams::EQueryCanvasFlags: + params->iValue = CanvasFlags(); + params->iResult = KErrNone; + break; + case THuiVisualQueryParams::EQueryExternalContentDrawingEnabled: + params->iValue = IsExternalContentDrawingEnabled(EFalse); + params->iResult = KErrNone; + break; + case THuiVisualQueryParams::EQueryHasDrawableContent: + params->iValue = HasCommandBuffers(EFalse); + params->iResult = KErrNone; + break; + default: + break; + } + } + else + { + CHuiVisual::VisualExtension(aExtensionUid, aExtensionParams); + } + } diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/coretoolkit/src/HuiCmdBufferBrush.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/HuiCmdBufferBrush.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiCmdBufferBrush.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -167,7 +167,10 @@ CHuiCanvasRenderBuffer* renderbuffer = NULL; renderbuffer = iVisual->Env().CanvasTextureCache().FindCachedRenderBuffer(*iVisual); - iCanvasGc.ClearRenderBuffer(*renderbuffer, aRectangle /*TRect(0,0,iVisual->DisplayRect().Size().iWidth, iVisual->DisplayRect().Size().iHeight)*/); + if (renderbuffer) + { + iCanvasGc.ClearRenderBuffer(*renderbuffer, aRectangle /*TRect(0,0,iVisual->DisplayRect().Size().iWidth, iVisual->DisplayRect().Size().iHeight)*/); + } } void CHuiCmdBufferBrush::DrawDrawingCommands(TInt aAction, CHuiGc &aGc, TRect aClippingRectangle, TPtrC8 aCommands, CHuiCanvasCommandBuffer *buf, const TRegion ®) const diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/coretoolkit/src/HuiControlGroup.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/HuiControlGroup.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiControlGroup.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -48,22 +48,29 @@ CHuiControlGroup::~CHuiControlGroup() - { - iUnhandledEventObservers.Close(); + { + + + iEnv.RemoveTheControlGroup(iResourceId); - // The group owns the controls, so it must destroy them. - // Destroy in reverse order so that references will be removed in - // natural order (children of a pane will be removed before the pane). - for(TInt i = iControls.Count() - 1; i >= 0; --i) - { - CHuiControl* c = iControls[i]; - iControls.Remove(i); - delete c; - } - iControls.Reset(); + iUnhandledEventObservers.Close(); + + // The group owns the controls, so it must destroy them. + // Destroy in reverse order so that references will be removed in + // natural order (children of a pane will be removed before the pane). + for(TInt i = iControls.Count() - 1; i >= 0; --i) + { + CHuiControl* c = iControls[i]; + iControls.Remove(i); + delete c; + } + iControls.Reset(); + + delete iTransform; + iTransform = NULL; + HUI_PROBE_REPORT_DESTRUCTED + - delete iTransform; - HUI_PROBE_REPORT_DESTRUCTED } diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/coretoolkit/src/HuiDisplay.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/HuiDisplay.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiDisplay.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -1525,10 +1525,8 @@ } break; case EClearWithSkinBackground: - TRect skinRect; - TRect dummy; - GetRectForItem(item.SkinBackground(), dummy, skinRect); backgroundTexture = s60skin->BackgroundTexture(item.SkinBackground()); + TRect skinRect = s60skin->SkinRect(item.SkinBackground()); if (backgroundTexture) { THuiImage background(*backgroundTexture); diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/coretoolkit/src/HuiEnv.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/HuiEnv.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiEnv.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -47,6 +47,8 @@ #include "huicanvastexturecache.h" #include "HuiFxEngine.h" +#include "huisynchronizationobserver.h" + #define HUI_HIRES_TIMER @@ -1069,6 +1071,8 @@ } } + DoSynchronize(); + iCurrentDisplay = NULL; // informs the egosystem that the drawing is done. CHuiStatic::ReportNewFrame(); @@ -1762,3 +1766,65 @@ { return iMemoryLevel; } + +EXPORT_C void CHuiEnv::Synchronize(TInt aId, MHuiSynchronizationObserver* aObserver) + { + iSynchObserver = aObserver; + iSynchId = aId; + + if ( aObserver ) + { + ContinueRefresh(); + } + } + +void CHuiEnv::DoSynchronize() + { + if ( !iSynchObserver ) + { + return; + } + + // Synchronize commands before signalling through P&S + for(TInt i = 0; i < iDisplays.Count(); ++i) + { + if ( ( iDisplays[i]->DisplayType() != CHuiDisplay::EDisplayOffScreenBuffer ) + && ( iDisplays[i]->ScreenBufferObserver() == NULL ) ) + { + MakeCurrent(*iDisplays[i]); + iDisplays[i]->RenderSurface().Finish(); + } + } + + iSynchObserver->Synchronized( iSynchId ); + iSynchObserver = NULL; + } + +void CHuiEnv::RemoveTheControlGroup(TInt aId) + { + TInt i; + + for(i = 0; i < iLoadedGroups.Count(); ++i) + { + if(iLoadedGroups[i]->ResourceId() == aId) + { + // This is control group to delete. + CHuiControlGroup* group = iLoadedGroups[i]; + CancelCommands(group); + + for (TInt ii = iDisplays.Count()-1; ii>=0; ii--) + { + TInt index = iDisplays[ii]->Roster().Find(group); + if (index != KErrNotFound) + { + iDisplays[ii]->Roster().Hide(iDisplays[ii]->Roster().ControlGroup(index)); + } + } + + iLoadedGroups.Remove(i); + + } + } + + + } \ No newline at end of file diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/coretoolkit/src/HuiFxEffectCache.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/HuiFxEffectCache.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiFxEffectCache.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -63,11 +63,17 @@ void CHuiFxEffectCache::CreateL(MHuiFxEffectCacheNode *aNode) { // registration of fxml file MHuiFxEffectCacheNode *cachedNode = Find(aNode); + MHuiFxEffectCacheNode *dupNode = FindDuplicate(aNode); if (cachedNode) { // found in cache => duplicate registration => no need to do anything cachedNode->Ref(1); delete aNode; } + else if (dupNode) + { // found same file already being loaded + dupNode->Ref(1); + delete aNode; + } else { // not found in cache, so insert it and start parsing the effect. TInt id = UniqueId(); @@ -119,14 +125,14 @@ TInt count = cachedNode->Ref(-1); if (count == 0) { + Remove(iCachedEffects, cachedNode); delete cachedNode; - Remove(iCachedEffects, cachedNode); } } if (cachedNode != aNode) { // this node was not found in iCachedEffects array, so it needs to be in iDuplicateEffects array + Remove(iDuplicateEffects, aNode); delete aNode; - Remove(iDuplicateEffects, aNode); } } @@ -161,6 +167,19 @@ } return 0; } +MHuiFxEffectCacheNode *CHuiFxEffectCache::FindDuplicate(MHuiFxEffectCacheNode *aNode) + { + TInt size = iDuplicateEffects.Count(); + for(TInt i=0;i is not supported.", &(aNode->NodeName())); break; } diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/coretoolkit/src/HuiFxEngine.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/HuiFxEngine.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiFxEngine.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -77,6 +77,26 @@ return EFalse; #endif } + +TBool CHuiFxEngine::FxmlUsesInput1(CHuiFxEffect& aEffect) + { + RArray array; + aEffect.FxmlVisualInputs(array); + + TInt c = array.Count(); + for(TInt i = 0; iSetEffectEndObserver( aEffectEndObserver, aHandle ); - aFlags |= KHuiFxDelayRunUntilFirstFrameHasBeenDrawn; node->SetEffectFlags( aFlags ); CleanupStack::PushL(node); iCache->FindOrCreateL(node); // takes ownership @@ -206,7 +225,6 @@ aFlags |= KHuiFxWaitGroupSyncronization; node->SetEffectGroup(aGroup); } - aFlags |= KHuiFxDelayRunUntilFirstFrameHasBeenDrawn; node->SetEffectFlags( aFlags ); CleanupStack::PushL(node); @@ -314,6 +332,14 @@ #endif // #ifdef HUIFX_TRACE iActiveEffects.AppendL(aEffect); + + // Performance improvement, but this would be better to be a special hint param in the fxml + if (aEffect && FxmlUsesInput1(*aEffect)) + { + TInt flags = aEffect->EffectFlags(); + flags |= KHuiFxOpaqueHint; + aEffect->SetEffectFlags(flags); + } } EXPORT_C void CHuiFxEngine::RemoveEffect(CHuiFxEffect* aEffect) diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/coretoolkit/src/HuiLayout.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/HuiLayout.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiLayout.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -56,8 +56,7 @@ { CHuiVisual::ConstructL(); iHuiLayoutPrivateData = new (ELeave) THuiLayoutPrivateData; - CHuiRenderPlugin& renderplugin = CHuiStatic::Renderer(); - iHuiLayoutPrivateData->iGc = renderplugin.CreateCanvasGcL(); + iHuiLayoutPrivateData->iGc = NULL; } @@ -74,6 +73,7 @@ } iHuiLayoutPrivateData->iChildren.Reset(); delete iHuiLayoutPrivateData->iGc; + iHuiLayoutPrivateData->iGc = NULL; delete iHuiLayoutPrivateData; } } @@ -311,12 +311,8 @@ TInt count = Count(); for(TInt i = 0; i < count; ++i) { - //Ignore inactive child visuals - if ( iHuiLayoutPrivateData->iChildren[i]->Flags() & EHuiVisualFlagInactive ) - { - continue; - } - UpdateChildLayout(i, aTransitionTime); + // size and positio changes must go also to inactive visuals + UpdateChildLayout(i, aTransitionTime); } CHuiVisual::UpdateChildrenLayout(aTransitionTime); @@ -687,7 +683,7 @@ TInt count = Count(); for(TInt i = 0; i < count; ++i) { - if (Flags() & EHuiVisualFlagInactive) + if (iHuiLayoutPrivateData->iChildren[i]->Flags() & EHuiVisualFlagInactive) { // No need to clear inactive children continue; @@ -1120,6 +1116,13 @@ void CHuiLayout::DrawStoredBitmap(CHuiGc &aGc) const { if (!Display()) return; + + if (!iHuiLayoutPrivateData->iGc) + { + CHuiRenderPlugin& renderplugin = CHuiStatic::Renderer(); + // deleted in destructor or CHuiCanvasVisual::FreeRenderBuffer when not needed anymore + iHuiLayoutPrivateData->iGc = renderplugin.CreateCanvasGcL(); + } CHuiCanvasGc& gc = *iHuiLayoutPrivateData->iGc; gc.SetGc(aGc); gc.SetDefaults(); diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/coretoolkit/src/HuiRosterImpl.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/HuiRosterImpl.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiRosterImpl.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -527,10 +527,12 @@ TInt j = 0; CHuiDisplay* display = aDisplay ? aDisplay : iDisplay; + + ASSERT(display!=NULL); if (iCanvasRenderBuffer && iCanvasGc) { - DrawSelfFrozen(aGc, aDisplay); + DrawSelfFrozen(aGc, display); return; } @@ -1214,13 +1216,11 @@ for(TInt i = 0; i < visualCount; ++i) { // Ignore inactive visuals - if ( entry.iRootVisuals[i]->Flags()& EHuiVisualFlagInactive ) + if ( !(entry.iRootVisuals[i]->Flags()& EHuiVisualFlagInactive) ) { - continue; - } - - // This will clear the change flags of the entire tree of visuals. - entry.iRootVisuals[i]->ClearChanged(); + // This will clear the change flags of the entire tree of visuals. + entry.iRootVisuals[i]->ClearChanged(); + } } } } diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/coretoolkit/src/HuiS60Skin.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/HuiS60Skin.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiS60Skin.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -72,7 +72,9 @@ if (iSkinSrvConnected) iSkinSrvSession.Close(); - delete iBackgroundBitmap; + delete iBackgroundBitmap; + iCachedSkinItems.ResetAndDestroy(); + iCachedSkinItems.Close(); } @@ -135,33 +137,45 @@ void CHuiS60Skin::UpdateBackgroundL() { - if(iBackgroundTexture) - { - iBackgroundTexture->Reset(); - delete iBackgroundTexture; - iBackgroundTexture = 0; - } - - HUI_DEBUG1(_L("CHuiS60Skin::UpdateBackgroundL - Free memory in the beginning: %i"), HuiUtil::FreeMemory()); - iBackgroundTexture = CreateSkinBackgroundL(KAknsIIDQsnBgScreen); - iBackgroundTexture->SetSkinContent(ETrue); - iBackgroundTexture->iContentObservers.AppendL(*this); - + if(!iBackgroundTexture) + { + iBackgroundTexture = CreateSkinBackgroundL(KAknsIIDQsnBgScreen); + iBackgroundTexture->SetSkinContent(ETrue); + iBackgroundTexture->iContentObservers.AppendL(*this); + } + else if(iSkinChanged) + { + iBackgroundTexture->Reset(); + delete iBackgroundBitmap; + iBackgroundBitmap = NULL; + iBackgroundBitmap = CHuiStatic::GetBgBitmapLC(KAknsIIDQsnBgScreen); + CleanupStack::Pop(iBackgroundBitmap); + // update iBackgroundRect as well + TRect dummy; + GetRectForItem(KAknsIIDQsnBgScreen, dummy, iBackgroundRect); + iBackgroundTexture->UploadL(*iBackgroundBitmap,NULL,EHuiTextureUploadFlagRetainResolution ); + iBackgroundTexture->SetSkinContent(ETrue); + } + else + { + // there should be already up-to-date background texture + } HUI_DEBUG1(_L("CHuiS60Skin::UpdateBackgroundL - Free memory at exit: %i"), HuiUtil::FreeMemory()); } -void CHuiS60Skin::SkinContentChanged() +EXPORT_C void CHuiS60Skin::SkinContentChanged() { iSkinChanged = ETrue; } -void CHuiS60Skin::SkinConfigurationChanged( +EXPORT_C void CHuiS60Skin::SkinConfigurationChanged( const TAknsSkinStatusConfigurationChangeReason aReason ) { } -void CHuiS60Skin::SkinPackageChanged( + +EXPORT_C void CHuiS60Skin::SkinPackageChanged( const TAknsSkinStatusPackageChangeReason aReason ) { @@ -213,11 +227,12 @@ EXPORT_C void CHuiS60Skin::NotifyDisplaySizeChangedL() { // The background is now different. - iReloadBackground = ETrue; SkinContentChanged(); // for changing the iSkinChanged flag Env().NotifySkinChangedL(); Env().TextStyleManager().NotifyDisplaySizeChangedL(); ReloadBgTexturesL(); + + iSkinChanged = EFalse; } @@ -300,8 +315,9 @@ delete bgTexture.iBackgroundTexture; bgTexture.iBackgroundTexture = NULL; } - ((TPrivData*)(iSpare))->iBackgrounds.Reset(); + ((TPrivData*)(iSpare))->iBackgrounds.Reset(); + iCachedSkinItems.ResetAndDestroy(); // reset cached bg images & rects } @@ -317,47 +333,82 @@ MAknsSkinInstance* skin = SkinInstance(); CHuiTexture* texture = CHuiTexture::NewL(); - CleanupStack::PushL(texture); - if(iSkinChanged) - { - - delete iBackgroundBitmap; - iBackgroundBitmap = NULL; - - if (skin) - { - TRect dummy; - TRect skinRect; - GetRectForItem(aID, dummy, skinRect); - - iBackgroundBitmap = new (ELeave) CFbsBitmap(); - User::LeaveIfError( iBackgroundBitmap->Create(skinRect.Size(), EColor64K) ); - - CFbsBitmapDevice* device = CFbsBitmapDevice::NewL(iBackgroundBitmap); - CleanupStack::PushL(device); + CleanupStack::PushL(texture); - CFbsBitGc* gc = 0; - User::LeaveIfError( device->CreateContext(gc) ); - CleanupStack::PushL(gc); - iSkinControlContext->SetRect(skinRect); - iSkinControlContext->SetBitmap(aID); - - AknsDrawUtils::DrawBackground(skin, iSkinControlContext, NULL, *gc, TPoint(0,0), skinRect, - KAknsDrawParamDefault); - - CleanupStack::PopAndDestroy(gc); - CleanupStack::PopAndDestroy(device); + if (skin) + { + TRect skinrect; + TRect dummy; + GetRectForItem(aID, dummy, skinrect); + + CFbsBitmap* bitmap = new (ELeave) CFbsBitmap(); + CleanupStack::PushL(bitmap); + User::LeaveIfError( bitmap->Create(skinrect.Size(), EColor64K) ); + + CFbsBitmapDevice* device = CFbsBitmapDevice::NewL(bitmap); + CleanupStack::PushL(device); + + CFbsBitGc* gc = 0; + User::LeaveIfError( device->CreateContext(gc) ); + CleanupStack::PushL(gc); + iSkinControlContext->SetRect(skinrect); + iSkinControlContext->SetBitmap(aID); + + AknsDrawUtils::DrawBackground(skin, iSkinControlContext, NULL, *gc, TPoint(0,0), skinrect, + KAknsDrawParamDefault); + + CleanupStack::PopAndDestroy(gc); + CleanupStack::PopAndDestroy(device); + + texture->UploadL(*bitmap,NULL,EHuiTextureUploadFlagRetainResolution ); + CleanupStack::PopAndDestroy(bitmap); + } + else + { + CFbsBitmap* bitmap = SearchCachedSkinItemBitmap(aID); + if(iSkinChanged || !bitmap) + { + TRect skinrect; + TRect dummy; + GetRectForItem(aID, dummy, skinrect); + + if( aID == KAknsIIDQsnBgScreen) // handle normal background id differently + { + delete iBackgroundBitmap; + iBackgroundBitmap = NULL; + bitmap = CHuiStatic::GetBgBitmapLC(aID); + CleanupStack::Pop(bitmap); + iBackgroundBitmap = bitmap; + iBackgroundRect = skinrect; + } + else // others are cached in skin item array + { + bitmap = CHuiStatic::GetBgBitmapLC(aID); + TInt index = SearchCachedSkinItemIndex(aID); + if( index == KErrNotFound ) // add new + { + CSkinItem* newSkinItem = new (ELeave) CHuiS60Skin::CSkinItem(); + CleanupStack::PushL(newSkinItem); + newSkinItem->iId = aID; + newSkinItem->iSkinRect = skinrect; + newSkinItem->iBitmap = bitmap; + User::LeaveIfError(iCachedSkinItems.Append(newSkinItem)); + CleanupStack::Pop(newSkinItem); + } + else // modify existing + { + iCachedSkinItems[index]->iSkinRect = skinrect; + delete iCachedSkinItems[index]->iBitmap; + iCachedSkinItems[index]->iBitmap = NULL; + iCachedSkinItems[index]->iBitmap = bitmap; + } + CleanupStack::Pop(bitmap); + } } - else - { - iBackgroundBitmap = CHuiStatic::GetBgBitmapLC(aID); - CleanupStack::Pop( iBackgroundBitmap ); - } - } - texture->UploadL(*iBackgroundBitmap,NULL,EHuiTextureUploadFlagRetainResolution ); - + texture->UploadL(*bitmap,NULL,EHuiTextureUploadFlagRetainResolution ); + } + CleanupStack::Pop(texture); - iSkinChanged = EFalse; return texture; } @@ -368,6 +419,8 @@ // no need to render the skin backgrounds separately on bitgdi return; } + iCachedSkinItems.ResetAndDestroy(); // reset cached bg images & rects + TBackgroundTexture bgTexture; TInt itemCount = ((TPrivData*)(iSpare))->iBackgrounds.Count(); for (TInt index = 0; index < itemCount; index++) @@ -425,3 +478,62 @@ } return NULL; } + + +TInt CHuiS60Skin::SearchCachedSkinItemIndex(const TAknsItemID& aId) + { + TInt cacheditemsCount = iCachedSkinItems.Count(); + for(TInt i = 0; i < cacheditemsCount; i++ ) + { + if( iCachedSkinItems[i]->iId == aId ) + { + return i; + } + } + + HUI_DEBUG2(_L("CHuiS60Skin::SeachCachedSkinItemIndex - cached TAknsItemID %i %i (iMajor, iMinor) not found"), aId.iMajor, aId.iMinor ); + + return KErrNotFound; + } + +TRect CHuiS60Skin::SearchCachedSkinItemRect(const TAknsItemID& aId) + { + TRect returnRect = TRect(); + if(aId == KAknsIIDQsnBgScreen) + { + returnRect = iBackgroundRect; + } + else + { + TInt index = SearchCachedSkinItemIndex(aId); + if(index != KErrNotFound ) + { + returnRect = iCachedSkinItems[index]->iSkinRect; + } + } + return returnRect; + } + +CFbsBitmap* CHuiS60Skin::SearchCachedSkinItemBitmap(const TAknsItemID& aId) + { + CFbsBitmap* bitmap = NULL; + if(aId == KAknsIIDQsnBgScreen) + { + bitmap = iBackgroundBitmap; + } + else + { + TInt index = SearchCachedSkinItemIndex(aId); + if(index != KErrNotFound ) + { + bitmap = iCachedSkinItems[index]->iBitmap; + } + } + return bitmap; + } + + +TRect CHuiS60Skin::SkinRect(const TAknsItemID& aID) + { + return SearchCachedSkinItemRect(aID); + } diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/coretoolkit/src/HuiVisual.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/HuiVisual.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiVisual.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -39,6 +39,8 @@ #include "HuiCmdBufferBrush.h" #include "huicanvasrenderbuffer.h" +#include "huiextension.h" + struct CHuiVisual::THuiVisualPrivateData { public: // Functions @@ -67,8 +69,7 @@ // Data RArray iTacticons; - CHuiDropShadow* iDropShadow; - TRect iPreviousDrawnTvOut; + CHuiDropShadow* iDropShadow; CHuiFxEffect* iEffect; CHuiFxEffectParser* iEffectParser; MHuiEffectable *iEffectable; @@ -218,7 +219,7 @@ CHuiDisplay* display = &Env().Display(i); if (&(display->Roster()) == &roster) { - const TRect& previousDirtyRect = display->IsDisplayTypeTvOut() ? iVisualData->iPreviousDrawnTvOut : iPreviousDrawn; + const TRect& previousDirtyRect = iPreviousDrawn; TRect empty; display->CombineAndAddDirtyRegion(previousDirtyRect, empty); } @@ -690,6 +691,34 @@ EXPORT_C THuiRealRect CHuiVisual::DisplayRect() const __SOFTFP { + // if this visual is wserv owned, we can take some shortcuts + // when calculating the displayrect (ie. none of the "advanced" + // functionality is used + if (iFlags & EHuiVisualFlagWserv) + { + TReal x = iPos.iX.iInterpolationStartValue; + TReal y = iPos.iY.iInterpolationStartValue; + TReal width = iSize.iX.iInterpolationStartValue; + TReal height = iSize.iY.iInterpolationStartValue; + + const CHuiVisual* iter = this; + while(iter) + { + // Move up in the tree. + iter = iter->iLayout; + if(iter) + { + x+=iter->iPos.iX.iInterpolationStartValue; + y+=iter->iPos.iY.iInterpolationStartValue; + } + } + + iDisplayRect.iTl.iX = x; + iDisplayRect.iTl.iY = y; + iDisplayRect.iBr.iX = x+width; + iDisplayRect.iBr.iY = y+height; + return iDisplayRect; + } // Recalculate and cache as necessary. TBool recalculationNeeded = ETrue; @@ -1483,7 +1512,7 @@ ExpandRectWithContent(dirty); } - TRect& previousDrawn = display->IsDisplayTypeTvOut() ? iVisualData->iPreviousDrawnTvOut : iPreviousDrawn; + TRect& previousDrawn = iPreviousDrawn; // CombineAndAddDirtyRegion modifies "dirty" param by transforming it. // "previousDrawn" is supposed to be already transformed. @@ -2153,3 +2182,50 @@ delete iVisualData->iEffectParser; iVisualData->iEffectParser = aEffectParser; } + +TInt CHuiVisual::QueryCanvasFlags() + { + THuiVisualQueryParams p; + p.iQueryType = THuiVisualQueryParams::EQueryCanvasFlags; + p.iValue = 0; + p.iResult = KErrNotSupported; + TAny* ptr = &p; + + VisualExtension(KHuiVisualQueryUid, &ptr); + + // If visual does not support this extension, assume 0 + + return ( p.iResult == KErrNone ) ? p.iValue : 0; + } + +TBool CHuiVisual::QueryExternalContentDrawingEnabled() + { + THuiVisualQueryParams p; + p.iQueryType = THuiVisualQueryParams::EQueryExternalContentDrawingEnabled; + p.iValue = 0; + p.iResult = KErrNotSupported; + TAny* ptr = &p; + + VisualExtension(KHuiVisualQueryUid, &ptr); + + // If visual does not support this extension, assume + // that visual does not have external content drawing enabled. + + return ( p.iResult == KErrNone ) && p.iValue; + } + +TBool CHuiVisual::QueryHasDrawableContent() + { + THuiVisualQueryParams p; + p.iQueryType = THuiVisualQueryParams::EQueryHasDrawableContent; + p.iValue = 0; + p.iResult = KErrNotSupported; + TAny* ptr = &p; + + VisualExtension(KHuiVisualQueryUid, &ptr); + + // If visual does not support this extension, assume + // that it has something to draw. + + return p.iValue || ( p.iResult != KErrNone ); + } diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/coretoolkit/src/huicanvasgc.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/huicanvasgc.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/coretoolkit/src/huicanvasgc.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -1193,7 +1193,19 @@ // Could copy only needed rects to avoid excessive clipping iDelayedClipRegion.Copy(iClippingRegion); break; - } + } + + // both points lie outside - but the line may still intersect the region, + // so represent the line as a rect and try an intersection test... + TRect lineBoundingRect(start, end); + lineBoundingRect.Normalize(); + lineBoundingRect.iBr += TPoint(1, 1); + if (IsClipped(lineBoundingRect, iClippingRegion) != EFullyOutside) + { + iDelayedClipRegion.Copy(iClippingRegion); + vis1 = EPartialOverlap; + break; + } } } if (vis1 == EFullyOutside && vis2 == EFullyOutside) diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/coretoolkit/src/huicanvaswshwgc.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/huicanvaswshwgc.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/coretoolkit/src/huicanvaswshwgc.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -2067,7 +2067,8 @@ TRgb oldColor = gc->PenColor(); gc->SetPenAlpha(0); gc->SetPenColor(KRgbBlue); - gc->Clear(); + TRect rect = aUpdateRegion.BoundingRect(); + gc->Clear(rect); gc->SetPenAlpha(oldAlpha); gc->SetPenColor(oldColor); } @@ -2106,6 +2107,7 @@ // Set new clipping region which does not clip anything. // We want always draw aUpdateRegion fully to the aRenderbuffer. TRect displayArea = iCanvasGc->Gc()->DisplayArea(); + iCanvasGc->Gc()->SetClip(displayArea); // this call does not transform region anymore // We use translation to get screen coordinates to match render buffer coordinates diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/coretoolkit/src/huicanvaswspainter.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/huicanvaswspainter.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/coretoolkit/src/huicanvaswspainter.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -2488,7 +2488,9 @@ TInt CHuiCanvasWsPainter::EnableRenderBuffer(TBool aEnable) { - if (aEnable != iCanvasWsGc->IsRenderBufferEnabled()) + iEnableRenderBuffer = aEnable; + + if (iCanvasWsGc && ( aEnable != iCanvasWsGc->IsRenderBufferEnabled() ) ) { if (aEnable) { @@ -2604,6 +2606,11 @@ { oldGc->ClearCache(); } + if ( iCanvasWsGc ) + { + // Forward 'enable render buffer' setting to new GC. + iCanvasWsGc->EnableRenderbuffer( iEnableRenderBuffer ); + } #ifdef HUI_DEBUG_TRACK_DRAWING CHuiCanvasWsGc* realGc = iCanvasWsGc; diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/coretoolkit/src/huicanvaswsswgc.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/huicanvaswsswgc.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/coretoolkit/src/huicanvaswsswgc.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -1325,8 +1325,8 @@ TDisplayMode CHuiCanvasWsSwGc::SelectDisplayMode() { - TDisplayMode mode = EColor16MA; - + TDisplayMode mode = EColor16MAP; + // Note 64K mode cannot be used until separate mask is supported. It might be // possible to generate according to dirty region ? @@ -1477,6 +1477,8 @@ return; } + iBitGc->Reset(); + if (aClear) { if (iDefaultClipRegion.Count()) diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/coretoolkit/src/huigifanimationtexture.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/huigifanimationtexture.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/coretoolkit/src/huigifanimationtexture.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -149,7 +149,10 @@ { if ((iAnimationState & EInitializing) && aTexture.iFrameCount > 1 && aTextureId == iTextureId1) { + delete iTexture; iTexture = iTexture1; + delete iTexture2; + iTexture2 = NULL; TRAP_IGNORE(iTexture2 = &iManager.LoadTextureL(*iFilename,EHuiTextureUploadFlagDefault, iTextureId2, 1)) iFrameInterval = aTexture.iFrameInterval; iFrameCount = aTexture.iFrameCount; diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/goommonitor/bwins/goommonitoru.DEF --- a/uiacceltk/hitchcock/goommonitor/bwins/goommonitoru.DEF Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/goommonitor/bwins/goommonitoru.DEF Mon Feb 22 17:57:49 2010 +0200 @@ -21,4 +21,5 @@ ?UsesAbsoluteMemTargets@RGOomMonitorSession@@QAEXH@Z @ 20 NONAME ; void RGOomMonitorSession::UsesAbsoluteMemTargets(int) ?Connect@RGOomMonitorSession@@QAEHAAVTRequestStatus@@@Z @ 21 NONAME ; int RGOomMonitorSession::Connect(class TRequestStatus &) ?AppAboutToStart@RGOomMonitorSession@@QAEXAAVTRequestStatus@@ABVTUid@@@Z @ 22 NONAME ; void RGOomMonitorSession::AppAboutToStart(class TRequestStatus &, class TUid const &) + ?MemoryAllocationsComplete@RGOomMonitorSession@@QAEXXZ @ 23 NONAME ; void RGOomMonitorSession::MemoryAllocationsComplete(void) diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/goommonitor/data/goomconfig.xml --- a/uiacceltk/hitchcock/goommonitor/data/goomconfig.xml Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/goommonitor/data/goomconfig.xml Mon Feb 22 17:57:49 2010 +0200 @@ -18,7 +18,7 @@ actions are needed. This value is meaningful only when "check" or "estimate" sync mode is used with plugins. --> - + - - - + + + + @@ -40,7 +41,7 @@ - + @@ -55,6 +56,11 @@ + +