uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiStatic.h
changeset 0 15bf7259bb7c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiStatic.h	Tue Feb 02 07:56:43 2010 +0200
@@ -0,0 +1,538 @@
+/*
+* Copyright (c) 2006-2007 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:   Defines CHuiStatic, static data access and utility functions 
+*                such as timing.
+*
+*/
+
+
+
+#ifndef __HUISTATIC_H__
+#define __HUISTATIC_H__
+
+
+#include <e32base.h>
+#include <f32file.h>
+#include <w32std.h>
+#include <AknsUtils.h>
+#include <bacntf.h>
+
+/* Forward declarations. */
+class CHuiEnv;
+class CHuiRenderPlugin;
+class CHuiBitgdiRenderPlugin;
+class CHuiVg10RenderPlugin;
+class CHuiGles10RenderPlugin;
+class CHuiGles11RenderPlugin;
+class CHuiGles20RenderPlugin;
+class MHuiRenderSurface;
+class MHuiProbe;
+class MAknsSkinInstance;
+
+/**
+ * Miscellaneous globally used functions, and thread local storage space.
+ * 
+ * CHuiStatic contains all the functions that tend to be used across classes.
+ * For example, global data access methods for timing functions, frame count,
+ * time since start, etc. It also contains globally-used functions
+ * such as printf. These functions are written in a non-OO fashion because
+ * they are used everywhere, so passing data such as delta step down through the
+ * entire class heirarchy is inefficient.
+ */
+NONSHARABLE_CLASS(CHuiStatic) : public CBase
+    {
+public:
+
+    /* Constructors and destructor. */
+
+    /**
+     * Constructor. The user application should not explicitly
+     * construct a CHuiStatic - it is constructed by CHuiEnv.
+     *
+     * @param aPrimaryEnv The toolkit environment. 
+     */
+    static CHuiStatic* NewLC(CHuiEnv* aPrimaryEnv = 0);
+
+    /**
+     * Constructor. The user application should not explicitly
+     * construct a CHuiStatic - it is constructed by CHuiEnv.
+     *
+     * @param aPrimaryEnv The toolkit environment. 
+     */
+    static CHuiStatic* NewL(CHuiEnv* aPrimaryEnv = 0);
+
+
+    /**
+     * Destructor.
+     */
+    virtual ~CHuiStatic();
+
+
+    /* Methods. */
+
+    /**
+     * Returns the current renderer.
+     * @panic Renderer not yet set. @see SetRenderer()
+     */
+    IMPORT_C static CHuiRenderPlugin& Renderer();
+
+    /**
+     * Sets the current renderer.
+     * @param aRenderer to be used with this HuiToolkit instance.
+     */
+    static void SetRenderer(CHuiRenderPlugin& aRenderer);
+
+    /**
+     * Returns a BITGDI renderer.
+     * To create a new renderer of this type, a function pointer
+     * to this method should be passed to CHuiEnv::NewL() when
+     * the environment is first constructed.
+     *
+     * @see CHuiEnv::NewL()
+     * @panic  BITGDI is not selected as the current renderer.
+     */
+    IMPORT_C static CHuiBitgdiRenderPlugin& BitgdiRenderer();
+
+    /**
+     * Returns a OpenVG 1.0 renderer.
+     * To create a new renderer of this type, a function pointer
+     * to this method should be passed to CHuiEnv::NewL() when
+     * the environment is first constructed.
+     *
+     * @see CHuiEnv::NewL()
+     *
+     * @panic  OpenVG 1.0 is not selected as the current renderer.
+     */
+    IMPORT_C static CHuiVg10RenderPlugin& Vg10Renderer();
+
+    /**
+     * Returns a OpenGL ES 1.0 renderer.
+     * To create a new renderer of this type, a function pointer
+     * to this method should be passed to CHuiEnv::NewL() when
+     * the environment is first constructed.
+     *
+     * @see CHuiEnv::NewL()
+     *
+     * @panic  OpenGL ES 1.0 is not selected as the current renderer.
+     */
+    IMPORT_C static CHuiGles10RenderPlugin& Gles10Renderer();
+
+    /**
+     * Returns a OpenGL ES 1.1 renderer.
+     * To create a new renderer of this type, a function pointer
+     * to this method should be passed to CHuiEnv::NewL() when
+     * the environment is first constructed.
+     *
+     * @see CHuiEnv::NewL()
+     *
+     * @panic  OpenGL ES 1.1 is not selected as the current renderer.
+     */
+    IMPORT_C static CHuiGles11RenderPlugin& Gles11Renderer();
+
+    /**
+     * Returns a OpenGL ES 2.0 renderer.
+     * To create a new renderer of this type, a function pointer
+     * to this method should be passed to CHuiEnv::NewL() when
+     * the environment is first constructed.
+     *
+     * @see CHuiEnv::NewL()
+     *
+     * @panic  OpenGL ES 2.0 is not selected as the current renderer.
+     */
+    IMPORT_C static CHuiGles20RenderPlugin& Gles20Renderer();
+
+    /**
+     * Returns the current rendering surface. Usually changes via
+     * MHuiRenderSurface::MakeCurrent(). Current render surface is NULL before
+     * it is set with the first MakeCurrent call.
+     *
+     * @return  Rendering surface.
+     */
+    IMPORT_C static MHuiRenderSurface* CurrentRenderSurface();
+
+    /**
+     * Sets the current rendering surface. Called from
+     * MHuiRenderSurface::MakeCurrent().
+     *
+     * @param aSurface  Rendering surface.
+     */
+    IMPORT_C static void SetCurrentRenderSurface(MHuiRenderSurface* aSurface);
+
+    /**
+     * Generates a new identifier number. All the numbers returned by this
+     * method are negative integers.
+     * Used for assigning a unique ID to all new controls, among other purposes.
+     *
+     * @return a negative ID number, unique to all ID's generated by this method.
+     */
+    static TInt GenerateId();
+
+    /**
+     * Determines the primary CHuiEnv instance.
+     */
+    IMPORT_C static CHuiEnv& Env();
+
+    /**
+     * Called internally when a change occurs that requires active display
+     * refreshing. All environments are notified. If only a specific
+     * environment should be notified, its ContinueRefresh() method should
+     * be called directly.
+     */
+    IMPORT_C static void ContinueRefresh();
+
+    /**
+     * Updates the toolkit's time counters. This includes the toolkit's
+     * realtime clock, the internal absolute clock (which is affected by the
+     * time factor), the amount of elapsed time since last UpdateTime()
+     * invocation, and the amount of elapsed time since the first UpdateTime()
+     * invocation (which was done in the beginning of the first refresh).
+     */
+    static void UpdateTime();
+    static TUint32 MilliSecondsSinceUpdateTime();
+    /**
+     * Returns the internal absolute clock. This is affected by the time
+     * factor.
+     *
+     * @see  TTime in Symbian OS Reference.
+     *
+     * @return  Internal absolute clock.
+     */
+    IMPORT_C static const TTime& Time();
+
+    /**
+     * Sets the time factor that affects the internal absolute clock, which
+     * is returned by Time(). Zero stops the progress of time completely,
+     * 0.5 means that time  progresses in half the speed compared to real
+     * time (1.0).
+     *
+     * @param aTimeFactor  Time factor.
+     */
+    IMPORT_C static void SetTimeFactor(TReal32 aTimeFactor) __SOFTFP;
+
+    /**
+     * Determines the current time factor.
+     *
+     * @return  Time factor.
+     */
+    IMPORT_C static TReal32 TimeFactor() __SOFTFP;
+
+    /**
+     * Pauses the progress of time completely. The internal absolute clock does
+     * not advance when time is paused. Does not affect the time factor.
+     */
+    IMPORT_C static void PauseTime();
+
+    /**
+     * Continues the progress of time with the same time factor as previously.
+     * Starts the internal absolute clock at the same point in time when it was
+     * paused.
+     */
+    IMPORT_C static void ContinueTime();
+
+    /**
+     * Determines if the time is paused.
+     *
+     * @return  <code>ETrue</code>, if time is paused.
+     */
+    IMPORT_C static TBool TimePaused();
+
+    /**
+     * Determines the number of seconds elapsed in the internal absolute clock
+     * since the last UpdateTime(). This is affected by the time factor.
+     *
+     * @return  Seconds.
+     */
+    IMPORT_C static TReal32 ElapsedSeconds() __SOFTFP;
+
+    /**
+     * Determines the number of seconds since the first UpdateTime() invocation.
+     * This is affected by the time factor.
+     *
+     * @return  Seconds since the first UpdateTime() invocation.
+     */
+    IMPORT_C static TReal32 SecondsSinceStart() __SOFTFP;
+
+    /**
+     * Determines the number of milliseconds since the first UpdateTime()
+     * invocation. This is the same value as returned by SecondsSinceStart(),
+     * only converted into milliseconds. This is affected by the time factor.
+     *
+     * Note that the value will wrap around back to zero in approximately
+     * 50 days after the static instance has been constructed. If this is
+     * a problem, you should handle the wraparound or use SecondsSinceStart()
+     * instead.
+     *
+     * @return  Milliseconds. Note the 32-bit range.
+     */
+    IMPORT_C static TUint32 MilliSecondsSinceStart();
+
+    /**
+     * Determines the number of frames shown.
+     *
+     * @return  Frame count since the application first began rendering.
+     */
+    IMPORT_C static TUint FrameCount();
+
+    /**
+     * Determines the current average frame rate.
+     *
+     * @return  Frame rate since the start of execution.
+     */
+    IMPORT_C static TReal32 AverageFrameRate() __SOFTFP;
+
+    /**
+     * Determines the current frame rate. The rate is calculated at most
+     * once per second. Calling this less frequently causes the rate to be
+     * calculated as an average since the last time this was called.
+     *
+     * @param aTrianglesPerSecond
+     * @param aDrawElementsPerSecond
+     *
+     * @return  Frames per second.
+     * 
+     */
+    IMPORT_C static TReal32 FrameRate() __SOFTFP;
+
+    /**
+     * Print debug text to the console (RDebug). Will also write
+     * debug output to a log file e:\HuiMessages.log (memory card)
+     * if EnableLogging() has been called. If there is no memory card
+     * available the log file will be written to c:\HuiMessages.log.
+     *
+     * @note Debugging to the log file is enabled by default for ARM debug builds.
+     * So you don't have to explicitly enable log file debugging in that case.
+     *
+     * @see EnableLogging()
+     * @note Uses 8-bit character strings, which may not be compatible
+     * with RDebug output. Printing to log file will work fine, but
+     * please use all purpose 16-bit variant if all possible.
+     */
+    IMPORT_C static void Printf(TRefByValue<const TDesC8> aFormat, ...);
+
+    /**
+     * Print debug text to the console (RDebug). Will also write
+     * debug output to a log file e:\HuiMessages.log (memory card)
+     * if EnableLogging() has been called. If there is no memory card
+     * available the log file will be written to c:\HuiMessages.log.
+     *
+     * @note Debugging to the log file is enabled by default for ARM debug builds.
+     * So you don't have to explicitly enable log file debugging in that case.
+     * @see EnableLogging()
+     * @param aFormat printf-style string and its parameters. The
+     * formatted result must not exceed 256 characters (incl the terminating
+     * null char "\0").
+     */
+    IMPORT_C static void Printf(TRefByValue<const TDesC16> aFormat, ...);
+
+    /**
+     * Increment the frame counter.
+     */
+    static void ReportNewFrame();
+
+    /**
+     * Enables or disables Printf message logging to a file.
+     *
+     * The log file is e:\HuiMessages.log (memory card), or if there is
+     * no memory card available the log file will be written to
+     * c:\HuiMessages.log.
+     *
+     * By default the log file logging is disabled for all other builds
+     * than ARM debug builds. Note that you also have to have the macro
+     * HUI_DEBUG_WITH_PRINTF enabled to make HUI_DEBUG*() macros use
+     * CHuiStatic::Printf() calls.
+     *
+     * @param aEnable Set to true to enable logging, false to disable.
+     *
+     * @see Printf()
+     */
+    IMPORT_C static void EnableLogging(TBool aEnable = ETrue);
+
+    /**
+     * Determines whether logging to file is enabled. Note that you may
+     * have RDebug logging even if this returns EFalse.
+     *
+     * @see EnableLogging() to enable/disable log file logging.
+     * @return  <code>ETrue</code>, if logging to file is enabled.
+     */
+    IMPORT_C static TBool Logging();
+
+    /**
+     * Start timing with a clock. Specifies timing starting point.
+     * Provides simple excution profiling capabilities.
+     * @param aClock Clock number to start timing with, use values 0-9.
+     * @see Toc()
+     */
+    IMPORT_C static void Tic(TInt aClock);
+
+    /**
+     * Determines seconds passed since the clock was started (with Tic()).
+     * Provides simple execution profiling capabilities.
+     * @param aClock Clock number used for profiling, use values 0-9.
+     * @see Tic()
+     */
+    IMPORT_C static TReal32 Toc(TInt aClock) __SOFTFP;
+
+    /**
+     * Returns the file server session to be used by the application.
+     * In most cases, this is the same as CEikonEnv::Static()->FsSession().
+     */
+    IMPORT_C static RFs& FsSession();
+
+    /**
+     * Returns the window server session to be used by the application.
+     * In most cases, this is the same as CEikonEnv::Static()->WsSession().
+     */
+    IMPORT_C static RWsSession& WsSession();
+
+    /**
+     * Returns the screen device used by the application.
+     * In most cases, this is the same as CEikonEnv::Static()->ScreenDevice().
+     */
+    IMPORT_C static CWsScreenDevice* ScreenDevice(TInt aScreenNumber = 0);
+
+    /**
+     * Returns the screen device used by the application.
+     * In most cases, this is the same as CEikonEnv::Static()->ScreenDevice().
+     */
+    IMPORT_C static RWindowGroup* RootWin(TInt aScreenNumber = 0);
+
+
+
+    /**
+     * Sets the global transition time used for doing layout transitions. All
+     * layout calculations that happen after the call to SetLayoutTransitionTime()
+     * are affected by the new time. A layout calculations occurs immediately
+     * when the dimensions of a layout visual are modified. By default, the
+     * transition time is ero for all layout calculations, which means they will
+     * become effective immediately.
+     *
+     * @param aTime  New global layout transition time in milliseconds.
+     * @deprecated Will be removed after 2007 wk13.
+     *             This API is ugly. This method should be removed altogether.
+     *             Set transition time as a parameter instead.     
+     */
+    IMPORT_C static void SetLayoutTransitionTime(TInt aTime);
+
+    /**
+     * Returns the global layout transition time.
+     *
+     * @return  Layout transition time in milliseconds.
+     * @deprecated Will be removed after 2007 wk13.
+     *             This API is ugly. This method should be removed altogether.
+     *             Set transition time as a parameter instead.     
+     */
+    IMPORT_C static TInt LayoutTransitionTime();
+
+    /**
+     * Sets the Hitchcock UI Probe object.
+     *
+     * @param aProbe The probe object
+     */
+    IMPORT_C static void SetProbe(MHuiProbe* aProbe);
+    
+    /**
+     * Returns the Probe object
+     *
+     * @return Probe object
+     */
+    static MHuiProbe& Probe();
+    
+    IMPORT_C static MAknsSkinInstance* SkinInstance();
+
+    // Internal utils 
+    static TBool LayoutMirrored();
+    static TInt CbaLocation();
+    static void LayoutMetricsRect(TInt aType, TRect& aRect);
+    static TInt GetCachedColor(TRgb& aRgb, const TAknsItemID& aID,
+            const TInt aIndex );
+    
+    static TBool ConvertToVisualAndClipL(
+        TDes& aLogicalText,
+        const CFont& aFont,
+        TInt aMaxWidthInPixels,
+        TInt aMaxClippedWidthInPixels );
+    
+    static HBufC* ConvertToVisualAndWrapToArrayL( 
+        const TDesC& aLogicalText,
+        TInt aLineWidth,
+        const CFont& aFont,
+        CArrayFix<TPtrC>& aWrappedArray);
+    
+    static CFbsBitmap* GetBgBitmapLC(const TAknsItemID& aID);
+    static void GetMaskedBitmapL(const TAknsItemID& aID, CFbsBitmap*& aBitmap, CFbsBitmap*& aBitmapMask,
+                                 const TDesC& aFileName, TInt aBitmapId, TInt aMaskId, const TSize& aSize, TScaleMode aScaleMode);    
+    static CAknsItemData* GetCachedSkinItemDataL(const TAknsItemID& aID, TInt aDataType);    
+    
+protected:
+
+    /* Constructors. */
+
+    /**
+     * Constructor. Should not be called through the API.
+     */
+    CHuiStatic();
+
+    /**
+     * Second-phase constructor.
+     * @param aPrimaryEnv Pass in the environment.
+     */
+    void ConstructL(CHuiEnv* aPrimaryEnv);
+
+
+private:
+
+    /* Private methods */
+
+    /**
+     * Returns a pointer to the thread-local data struct.
+     */
+    IMPORT_C static struct TTlsData* Data();
+
+    /**
+     * Updates the toolkit's time counters. This includes the toolkit's
+     * realtime clock, the internal absolute clock (which is affected by the
+     * time factor), the amount of elapsed time since last UpdateTime()
+     * invocation, and the amount of elapsed time since the first UpdateTime()
+     * invocation (which was done in the beginning of the first refresh).
+     * 
+     * @param aData TLS Data which encapsulates the internal time variables.
+     */
+    static void UpdateTime(struct TTlsData* aData);
+
+    /**
+     * Callback function.
+     * On system time change, Locale change, HuiStatic time member variables need to be reset. 
+     * CEnvironmentChangeNotifier gives notifications about the above mentioned changes.
+     * Huistatic registers itself for these notifications and SettingChangedCallBack() 
+     * is the callback function getting executed on these events.     
+     *     
+     */
+	static TInt SettingChangedCallBack(TAny* aInstance);
+	
+    TInt DoChange();
+    
+private:
+
+    /**
+     * Thread local storage for this DLL, as we cannot declare static
+     * global variables in Symbian.
+     */
+    struct TTlsData* iData;
+
+    //For system time change event
+    CEnvironmentChangeNotifier* iChangeNotifier;
+    };
+
+
+#endif  // __HUISTATIC_H__