diff -r 000000000000 -r 2f259fa3e83a uifw/ganes/inc/HgVgMediaWallRenderer.h --- /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 +#include +#include + +/** + * 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& 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& 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& 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& 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 iQuads; + RPointerArray 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 */