--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/uifw/ganes/inc/HgVgMediaWallRenderer.h Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,360 @@
+/*
+* 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 HGVGMEDIAWALLRENDERER_H_
+#define HGVGMEDIAWALLRENDERER_H_
+
+// INCLUDES
+#include <e32base.h>
+#include <VG/openvg.h>
+#include <ganes/HgVgMediaWall.h>
+
+/**
+ * Helper abstract base class for drawing mediawall.
+ */
+NONSHARABLE_CLASS(CHgVgMediaWallRenderer) : public CBase
+ {
+public:
+
+ /**
+ * Factory method for constructing new MediaWallRenderer-Object
+ */
+ static CHgVgMediaWallRenderer* NewL(TInt aMaxQuads, const TRect& aWindowRect,
+ const TRect& aFrontRect, TReal aZOffset);
+
+ /**
+ * Destructor
+ */
+ virtual ~CHgVgMediaWallRenderer();
+
+
+private:
+
+ CHgVgMediaWallRenderer(const TRect& aWindowRect,
+ const TRect& aFrontRect, TReal aZOffset);
+
+ void ConstructL(TInt aMaxQuads);
+
+public:
+
+ /**
+ * Draws the mediawall.
+ *
+ * @param aItems items to draw.
+ * @param aSelectedIndex index of the selected item.
+ * @param aViewPosition views position
+ * @param aAnimationAlpha alpha from going from 0-1 during animation states.
+ * @param aState current state of the animation.
+ * @param aSelectionAnimationType type of the selection animation to use
+ */
+ void Draw(RPointerArray<CHgVgItem>& aItems,
+ TInt aSelectedIndex, TReal aNextIndex,
+ TReal aViewPosition,
+ TReal aAnimationAlpha,
+ CHgVgMediaWall::THgVgAnimationState aAnimationState,
+ CHgVgMediaWall::THgVgOpeningAnimationType aSelectionAnimationType,
+ CHgVgMediaWall::THgVgMediaWallStyle aStyle,
+ TReal aStartIndex);
+
+ /**
+ *
+ */
+ void DrawGrid(
+ TInt aRowCount,
+ RPointerArray<CHgVgItem>& aItems,
+ TReal aViewX, TReal aViewY,
+ TInt aCurItem,
+ TInt aPrevItem,
+ TReal aAnimationAlpha,
+ CHgVgMediaWall::THgVgAnimationState aAnimationState,
+ TInt aPickedItem,
+ CHgVgMediaWall::THgVgOpeningAnimationType aAnimationType);
+
+ /**
+ * Sets default icon for rendering items with no icons.
+ * Ownership of the icon is not transfered.
+ *
+ * @param aIcon reference to CGulIcon-object
+ */
+ void SetDefaultIconL(const CGulIcon& aIcon);
+
+ /**
+ * Sets Camera position modifier to use in rendering.
+ *
+ * @param aCameraPosition camera position
+ */
+ void SetCameraPosition(TReal aX, TReal aY, TReal aZ);
+
+ /**
+ * Sets camera rotation modifiers to use in rendering.
+ *
+ * @param aAngle angle in radians.
+ */
+ void SetCameraRotation(TReal aAngle);
+
+ /**
+ * Gets ItemIndex of a quad at pointer position.
+ * NOTE: This is only valid after drawing.
+ *
+ * @param aPointerPosition position of the pointer
+ * @return ItemIndex or KErrNotFound if nothings if no hit.
+ */
+ TInt GetItemIndex(const TPoint& aPointerPosition) const;
+
+ /**
+ * This should be called by the client. When skin change event is triggered.
+ * This rebuilds all renderers skin related internal resources.
+ */
+ void HandleSkinChange();
+
+ /**
+ *
+ */
+ TReal GetWorldSpaceRowHeight() const;
+
+ /**
+ *
+ */
+ void SetReflections(TBool aEnabled);
+
+
+ /**
+ *
+ */
+ TBool ReflectionsEnabled() const;
+
+ /**
+ *
+ */
+ TSize ImageSize() const;
+
+ /**
+ *
+ */
+ void SetFlippedRect(const TRect& aFlippedRect);
+
+ /*
+ *
+ */
+ void SetFlipAngle(TReal aAngle);
+
+ /**
+ *
+ */
+ void EnableBlurOnFlip(TBool aEnabled, TReal aBlurX, TReal aBlurY);
+
+
+ /**
+ *
+ */
+ void SetOffset(const TPoint& aOffset);
+
+ /**
+ *
+ */
+ void EnableFlipXY(TBool aEnabled);
+
+private:
+
+ class TQuad
+ {
+ public:
+ // quads world-space position
+ VGfloat iX;
+ VGfloat iY;
+ VGfloat iZ;
+ // quads angle
+ VGfloat iAngle;
+ // image used to draw this quad
+ VGImage iImage;
+ // transform constructed in TransformQuads for rendering
+ VGfloat iTM[9];
+ // transformed 2d points
+ VGfloat iPoints[2*4];
+ // index from CHgVgItem
+ TInt iItemIndex;
+ // flag indicating iImage is not valid, uses iDefaultImage then.
+ TBool iNoImage;
+ //
+ VGfloat iAlpha;
+ VGfloat iMirroredPoints[2*4];
+ VGfloat iMirroredTM[9];
+
+ TBool iFlipped;
+ };
+
+ /**
+ *
+ */
+ void GetGroundColorFromSkin(VGfloat* aColor);
+
+ /**
+ * Transforms quads
+ */
+ void TransformQuads(TInt aNumVisibleQuads, TBool aMirrored,
+ VGfloat aFov, CHgVgMediaWall::THgVgOpeningAnimationType aOpeningAnimationType);
+
+ /**
+ * Sorts quads by z from iQuads to sorted quads.
+ */
+ void SortQuads(TInt aNumVisibleNumQuads);
+
+ /**
+ * Draws quads using VG
+ */
+ void DrawQuads(TBool aDrawMirrored);
+
+ /**
+ * Draws one quad using OpenVG
+ */
+ void DrawQuad(TQuad* q, TBool aDrawMirrored);
+
+ /**
+ * Setups quads into their positions/orientations, after this they can by transformed
+ * and rendered.
+ */
+ TInt SetupQuads(RPointerArray<CHgVgItem>& aItems,
+ TInt aSelectedIndex, TReal aNextIndex,
+ VGfloat aViewPosition,
+ VGfloat aAnimationAlpha,
+ CHgVgMediaWall::THgVgAnimationState aState,
+ CHgVgMediaWall::THgVgOpeningAnimationType aAnimationType,
+ TReal aStartIndex);
+
+
+ /**
+ * Setups quads for grid mediawall style.
+ */
+ void SetupQuadsToRow(
+ TInt aRow,
+ TInt aRowCount,
+ TInt& aItemsOnScreen,
+ RPointerArray<CHgVgItem>& aItems,
+ TReal aViewX, TReal aViewY,
+ TInt aCurItem, TInt aPrevItem,
+ TReal aAnimationAlpha,
+ CHgVgMediaWall::THgVgAnimationState aAnimationState,
+ TInt aPickedItem,
+ CHgVgMediaWall::THgVgOpeningAnimationType aAnimationType);
+
+ /**
+ * Applies flip animation to a quad.
+ */
+ void ApplyOpeningAnimation(CHgVgMediaWallRenderer::TQuad* aQuad,
+ TReal aAnimationAlpha, TReal aZNear, CHgVgMediaWall::THgVgMediaWallStyle aMediaWallStyle,
+ CHgVgMediaWall::THgVgOpeningAnimationType aAnimationStyle);
+
+ /**
+ * Creates path and paint for ground.
+ */
+ void CreateGround();
+
+ /**
+ * Draws ground.
+ * @param aWidth width of the ground.
+ * @param aHeight height of the ground.
+ */
+ void DrawGround(TInt aWidth, TInt aHeight);
+
+
+ /**
+ *
+ */
+ void TransformAndDraw(TInt itemsOnScreen,
+ CHgVgMediaWall::THgVgOpeningAnimationType aOpeningAnimationType);
+
+ /**
+ *
+ */
+ void AdjustSettingsBasedOnRects(const TRect& aFrontRect,
+ TReal aZOffset);
+
+ /**
+ *
+ */
+ VGfloat GetZInWorldSpaceBasedOnWidth(VGfloat aWidth);
+
+ /**
+ *
+ */
+ void UpdateBlurChildImage(VGImage aImage);
+
+private:
+
+ VGint iMaxQuads;
+ TRect iRect;
+ VGfloat iCameraX;
+ VGfloat iCameraY;
+ VGfloat iCameraZ;
+ VGfloat iCameraRotation;
+ VGImage iDefaultImage;
+ RPointerArray<TQuad> iQuads;
+ RPointerArray<TQuad> iSortedQuads;
+
+ VGPaint iGroundPaint;
+ VGPath iGroundPath;
+
+ VGfloat iSelectedQuadStartX;
+ VGfloat iSelectedQuadStartY;
+
+ TBool iReflectionsEnabled;
+
+ TSize iImageSize;
+
+ VGfloat iCameraBaseX;
+ VGfloat iCameraBaseY;
+ VGfloat iCameraBaseZ;
+
+ VGfloat iFlippedX;
+ VGfloat iFlippedY;
+ VGfloat iFlippedZ;
+
+ // Which item is the front item in coverflow
+ TInt iSelectedItemIndex;
+ // Ending position of the left album stack
+ TReal iLeftStackEndX;
+ // Ending position of the right album stack
+ TReal iRightStackStartX;
+ // Z-coordinate of the frontmost album
+ TReal iZNear;
+ // Z-coordinate of the albums on the back
+ TReal iZFar;
+ // Space between albums in stacks
+ TReal iSpaceBetween;
+ // How much to zoom when fast swiped
+ TReal iFov;
+ // angle to flip the item around X-axis in flip opening animation
+ TReal iFlipAngle;
+
+ VGImage iBlurImage;
+ VGfloat iBlurAlpha;
+ VGfloat iBlurDeviationX;
+ VGfloat iBlurDeviationY;
+
+ VGfloat iFlippedWidth;
+ VGfloat iFlippedHeight;
+
+ VGint iBlurImageWidth;
+ VGint iBlurImageHeight;
+ VGImage iChildBlurImage;
+
+ TPoint iOffset;
+
+ TBool iFlipXY;
+ };
+
+#endif /* HGVGMEDIAWALLRENDERER */