diff -r 000000000000 -r 2f259fa3e83a uifw/ganes/inc/HgVgHelper.h --- /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 +#include +#include +#include + +// 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 */