uifw/ganes/inc/HgVgHelper.h
changeset 0 2f259fa3e83a
child 10 9f56a4e1b8ab
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uifw/ganes/inc/HgVgHelper.h	Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,256 @@
+/*
+* Copyright (c) 2009 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 HGVHELPER_H_
+#define HGVHELPER_H_
+
+// INCLUDES
+#include <e32base.h>
+#include <e32std.h>
+#include <gdi.h>
+#include <VG/openvg.h>
+
+// FORWARD DECLARATIONS
+class CFbsBitmap;
+class CHgVgEGL;
+class CGulIcon;
+
+#define RGBA(r, g, b, a) ((VGuint) (((r) << 24) | ((g) << 16) | ((b) << 8) | (a)))
+
+
+/**
+ * Helper classes and methods for CHgVg* classes.
+ */
+namespace HgVgHelper
+{
+    /**--------------------------------------------------------------
+     * Vertex and Matrix manipulations helper classes
+     --------------------------------------------------------------*/
+
+     // Forward declarations
+    class TMatrix;
+    class TVertex;
+
+     /**
+     * 3D Vertex class
+     */
+    class TVertex
+       {
+       public:
+           // model coordinates
+           VGfloat iX, iY, iZ;
+
+           // transformed mode-view-coordinates
+           VGfloat iTx, iTy, iTz;
+
+           // projected screen coordinates
+           VGfloat iScreenX;
+           VGfloat iScreenY;
+
+           /**
+            * Projects model-view-coordinates to screen space coordinates.
+            * 
+            * @param aScreenWidth width of the rendering window
+            * @param aScreenHeight height of the rendering window
+            * @param aFov field of view to use
+            */
+           void ProjectPoint(VGfloat aScreenWidth, VGfloat aScreenHeight, VGfloat aFov);
+           
+           /**
+            * Transform model coordinates by matrix given and sets
+            * result to tranformed model-view-coordinates.
+            * 
+            * @param aMatrix model-view-transformation matrix.
+            */
+           void TransformPoint(const TMatrix& aMatrix);
+       };
+
+     /**
+      * 4x4 Matrix class
+      */
+     class TMatrix
+       {
+       public:
+           // matrix data
+           VGfloat iM[4][4];
+
+           // Construction and destruction.
+           TMatrix();
+           TMatrix(const TMatrix& rhs);
+           ~TMatrix();
+
+           // Operators
+           TMatrix& operator=(const TMatrix& rhs);
+
+           /**
+            * Makes this matrix identity matrix.
+            */
+           void Identity();
+           
+           /**
+            * Multiplies this matrix by rhs matrix.
+            * 
+            * @param rhs Right hand side matrix.
+            */
+           void Multiply(const TMatrix& rhs);
+          
+           /**
+            * Sets this matrix to rotation matrix around X-axis.
+            * 
+            * @param aAngle angle in radians.
+            */
+           void RotationX(VGfloat aAngle);
+           
+           /**
+            * Sets this matrix to rotation matrix around Y-axis.
+            * 
+            * @param aAngle angle in radians.
+            */
+           void RotationY(VGfloat aAngle);
+           
+           /**
+            * Sets this matrix to rotation matrix around Z-axis.
+            * 
+            * @param aAngle angle in radians.
+            */
+           void RotationZ(VGfloat aAngle);
+           
+           /**
+            * Sets this matrix to scale matrix.
+            * 
+            * @param aSx scaling on X-axis
+            * @param aSy scaling on Y-axis
+            * @param aSz scaling on Z-axis
+            */
+           void Scale(VGfloat aSx, VGfloat aSy, VGfloat aSz);
+           
+           /**
+            * Sets this matrix to translation matrix.
+            * 
+            * @param aTx translation on X-axis.
+            * @param aTy translation on Y-axis.
+            * @param aTz translation on Z-axis. 
+            */
+           void Translation(VGfloat aTx, VGfloat aTy, VGfloat aTz);
+       };
+
+     /**--------------------------------------------------------------
+      * IMAGE HANDLING ROUTINES
+     --------------------------------------------------------------*/
+     
+    /**
+     * Creates VGImage from CGuiIcon.
+     * May leave for example if runs out of video memory.
+     * 
+     * @param aIcon valid CGuiIcon-object.
+     * @return VGImage-object.
+     */
+    VGImage CreateVgImageFromIconL( const CGulIcon& aIcon );
+    
+        
+    /**--------------------------------------------------------------
+     * Misc. Helpers.
+     --------------------------------------------------------------*/
+
+    /**
+     * Clamps value between lower and upper limits.
+     * 
+     * @param aValue value.
+     * @param aUpper upper limit.
+     * @param aLower lower limit.
+     * @return clamped value.
+     */
+    VGfloat Clamp(VGfloat aValue, VGfloat aUpper, VGfloat aLower);
+    
+    /**
+     * Linearly interpolates value between start and end.
+     * 
+     * @param aStart starting value.
+     * @param aEnd ending value.
+     * @param aT t value between 0.0f - 1.0f.
+     */
+    VGfloat Lerp(VGfloat aStart, VGfloat aEnd, VGfloat aT);
+
+    /**
+     * Gets values absolute.
+     * 
+     * @param aValue value.
+     * @return absolute of the value.
+     */
+    VGfloat Abs(VGfloat aValue);    
+        
+    
+    /**
+     * Calculates bounding rect from points.
+     * 
+     * @param aRect destination rect-object, rectangle in symbian screen coordinates.
+     * @param aPoints source points in vg coordinates (x, y, x, y...). 
+     * @param aNumPoints number of points in aPoints.
+     */
+    void CalculateBoundingRect(TRect& aRect, VGfloat* aPoints, TInt aNumPoints, 
+            const TRect& aWindowRect);    
+    
+        
+    /**
+     * Draws vg image to current vg surface.
+     * NOTE: Assumes that the image is in vg coordinates.
+     * 
+     * @param aImage image to draw.
+     * @param aPos position where to draw (in symbian screen coordinates).
+     * @param aWindowRect drawing windows rectangle.
+     */
+    void DrawImage(VGImage aImage, const TPoint& aPos, const TRect& aWindowRect, TBool aCentered = EFalse);
+    
+    /**
+     * Draws vg image to current vg surface multiplying its colors by a color.
+     * NOTE: Assumes that the image is in vg coordinates.
+     * 
+     * @param aImage image to draw.
+     * @param aColor color which is multiplied with image colors.
+     * @param aPos position where the image is drawn (in sumbian screen coordinates)
+     * @param aWindowRect drawing windows renctangle.
+     */
+    void DrawImageColorized(VGImage aImage, const TRgb& aColor, 
+            const TPoint& aPos, const TRect& aWindowRect, TBool aCentered = EFalse);
+    
+    
+    /**
+     * Wrapper for creating paths.
+     * 
+     * @param aNumSegment
+     * @param aSegments
+     * @param aPoints
+     */
+    VGPath CreatePath(VGuint aNumSegments, const VGubyte* aSegments, const VGfloat* aPoints);
+        
+    /**
+     * Wrapper for creating single color paints.
+     * 
+     * @param aColor
+     */
+    VGPaint CreateColorPaint(const TRgb& aColor);
+    
+    /**
+     * Wrapper for creating single color paints.
+     * 
+     * @param aColor
+     */
+    VGPaint CreateColorPaint(const VGfloat* aColor);
+       
+    }
+
+#endif /* HGVGHELPER */