diff -r 000000000000 -r 15bf7259bb7c uiacceltk/hitchcock/coretoolkit/rendervg10/inc/HuiVg10Gc.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiacceltk/hitchcock/coretoolkit/rendervg10/inc/HuiVg10Gc.h Tue Feb 02 07:56:43 2010 +0200 @@ -0,0 +1,577 @@ +/* +* Copyright (c) 2006-2008 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 CHuiVg10Gc, an OpenVG 1.0 version of the HUITK +* graphics context. +* +*/ + + + +#ifndef __HUIVG10GC_H__ +#define __HUIVG10GC_H__ + + +#include +#include +#include +#include + +#include "uiacceltk/HuiGc.h" +#include "uiacceltk/HuiRealPoint.h" +#include "uiacceltk/HuiRealSize.h" +#include "uiacceltk/HuiRealRect.h" +#include "uiacceltk/HuiSegmentedTexture.h" +#include "HuiMatrixStack.h" + +/* Forward declarations. */ +#ifdef __NVG +class MNVGIcon; +class CNvgEngine; +#endif + +/** + * CHuiVg10Gc implements an OpenVG 1.0 version of the HUITK + * graphics context. + */ +NONSHARABLE_CLASS(CHuiVg10Gc) : public CHuiGc + { + friend class CHuiVg10CurvePath; + +public: + + /* Constructors and destructor. */ + + /** + * Constructs a new graphics context. + */ + static CHuiVg10Gc* NewL(); + + /** + * Constructs a new graphics context and leaves it on the cleanup stack. + */ + static CHuiVg10Gc* NewLC(); + + /** + * Destructor. + */ + virtual ~CHuiVg10Gc(); + + + /* Methods. */ + + virtual void Push(THuiGcMatrix aStack); + + virtual void Pop(THuiGcMatrix aStack); + + virtual void Multiply(THuiGcMatrix aStack, TReal32 aMatrix[16]); + + virtual void LoadIdentity(THuiGcMatrix aStack); + + virtual void Translate(THuiGcMatrix aStack, + TReal32 aX, TReal32 aY, TReal32 aZ) __SOFTFP; + + virtual void Scale(THuiGcMatrix aStack, + TReal32 aX, TReal32 aY, TReal32 aZ) __SOFTFP; + + virtual void Rotate(THuiGcMatrix aStack, TReal32 aAngle, + TReal32 aX, TReal32 aY, TReal32 aZ) __SOFTFP; + + virtual void Shear(THuiGcMatrix aStack, + TReal32 aX, TReal32 aY, TReal32 aZ) __SOFTFP; + + virtual void InitState(); + + /** + * Selects the default data arrays. + */ + void RestoreState() const; + + /** + * Restores OpenVg state according to flags set up in the render plugin + */ + void RestoreFlaggedState() const; + + + /** + * Updates the projection matrix without changing any settings. + */ + void UpdateProjection(); + + /** + * Returns the number of available texture units. + * + * @return Number of units (at least 1). + */ + TInt TextureUnits() const; + + /** + * Sets the number of active texture units. + * + * @param aTextureUnitCount Number of units to activate (e.g., 2 => 0,1) + */ + void SetTextureUnits(TInt aTextureUnitCount); + + /** + * Enable a feature. + */ + void Enable(TFeature aFeature, TBool aDoEnable = ETrue); + + /** + * Changes the blending mode. + */ + void SetBlendMode(TBlendMode aBlendMode); + + /** + * Changes the texture mode. + * + * @param aTextureMode Texturing mode. + * @param aParam Parameter for the texturing. + */ + void SetTextureMode(TTextureMode aTextureMode, TReal32 aParam = 0) __SOFTFP; + + /** + * Sets the strength of dimming fog. In order to have effect, enable the + * Fog feature. + * + * @param aColor Color of dimming. + * @param aAmount Amout of dimming (0...1). + */ + void SetDimmingFog(const TRgb& aColor, TReal32 aAmount) __SOFTFP; + + /** + * Clear using the current pen color. + */ + void Clear(); + + /** + * Clear the depth buffer. + */ + void ClearDepth(); + + /** + * Clear both color and depth buffer + */ + void ClearColorAndDepth(); + + /** + * Do initialization of new frame. + * Called by CHuiDisplay when starting to render new frame. + * Graphics context can do renderer specific state initializations here. + */ + void InitNewFrame(); + + /** + * Apply a clipping rectangle to the current clipping region. + * + * @param aClipRect Clipping rectangle. + */ + virtual void Clip(const TRect& aClipRect); + + /** + * Apply a clipping region to the current clipping region. + * + * @param aRegion Clipping region. + */ + virtual void Clip(const TRegion& aRegion); + + /** + * Replace the current clipping rectangle. + * + * @param aClipRect Clipping rectangle in display coordinates. + */ + virtual void SetClip(const TRect& aClipRect); + + /** + * Replace the current clipping region. + * + * @param aRegion List of Clipping rectangles. + */ + virtual void SetClipRegion(const TRegion& aRegion); + + /** + * Cancel an applied clipping rectangle or region. + */ + virtual void CancelClipping(); + + /** + * Draws a single line of text using the current pen color, font, and + * alignment mode. + * + * @param aTextMesh Text string. + * @param aBounds Bounding box for the text. + * @param aShadow Darkness of text shadow. + */ + void DrawText(const CHuiTextMesh& aTextMesh, + const THuiRealRect& aBounds, + TReal32 aShadow = 0) __SOFTFP; + + /** + * Draws a rectangle with the current graphics context parameters. + * + * @param aRect Rectangle to draw. + */ + void DrawRect(const TRect& aRect); + + /** + * Draws a solid line of uniform thickness with the current graphics context parameters. + * + * @param aStart Start of line. + * @param aEnd End of line. + * @param aThickness Thickness of line in pixels. + */ + void DrawLine(const TPoint& aStart, const TPoint& aEnd, const TInt aThickness); + + /** + * Draws a solid or unfilled round rectangle. + * + * @param aDestinationRect Start of line. + * @param aSize Arc size. + * @param aDrawMode THuiFillMode + * @param aThickness Thickness of border line in pixels. + */ + void DrawRoundRect(const TRect& aDestinationRect, const THuiRealSize& aSize, THuiFillMode aDrawMode, const TInt aThickness); + + /** + * Draws a stretched image. + * + * @param aMode Stretch mode: horizontal or vertical. + * @param aImage Image. + * @param aRect Rectangle to fill. + * @param aStartWidth + * @param aEndWidth + */ + void DrawStretchImage(TStretchMode aMode, + const THuiImage& aImage, const THuiRealRect& aRect, + TInt aStartWidth, TInt aEndWidth); + + /** + * Draws edges with a color or using a texture. + * + * @param aOuterRect The outer edge of the borders. + * @param aLeftBorderWidth The visible width of the left border, + * the width is assumed to be pixel units + * inside from the respective edge + * border. Use 0.0 for no left border. + * @param aRightBorderWidth The visible width of the right border, + * the width is assumed to be pixel units + * inside from the respective edge + * border. Use 0.0 for no right border. + * @param aTopBorderWidth The visible height of the top border, + * the height is assumed to be pixel units + * inside from the respective edge + * border. Use 0.0 for no border. + * @param aBottomBorderWidth The visible height of the bottom border, + * the height is assumed to be pixel units + * inside from the respective edge + * border. Use 0.0 for no border. + * @param aBorderMode Border drawing mode, defines how the + * image is streched to the borders. + * aImage needs to be + * defined in order to this modes to be + * effective. + * + * @param aImage The image to be used to draw borders, + * according to the border drawing mode. + * If left NULL will use the current pen + * color to draw single-color borders. + */ + void DrawBorders(const TRect& aOuterRect, + TReal32 aLeftBorderWidth, + TReal32 aRightBorderWidth, + TReal32 aTopBorderHeight, + TReal32 aBottomBorderHeight, + TBorderMode aBorderMode, + const THuiImage* aImage) __SOFTFP; + + /** + * Draws a path from the beginning to aPos. + * + * @param aPath Weighted path. + * @param aOrigin Offset. + * @param aStartPos Start position on the path. + * @param aEndPos End position on the path. + * @param aAlphaFunction Function for determining alpha values. + * @param aWidthFunction Function for determining line thickness. + */ + void DrawPath(const CHuiCurvePath& aPath, + const TPoint& aOrigin, + TReal32 aStartPos, + TReal32 aEndPos, + MHuiMappingFunction* aAlphaFunction = 0, + MHuiMappingFunction* aWidthFunction = 0) __SOFTFP; + + void DrawMesh(const CHuiMesh& aMesh, const THuiImage* aImage = 0, + const THuiImage* aSecondaryImage = 0, + TReal32 aSecondaryAlpha = 0.0) __SOFTFP; + + void DrawArc(const TPoint& aOrigin, const TSize& aRadius, + TReal32 aStart, TReal32 aEnd, TInt aAnglePerSegment, + TReal32 aWidth, const THuiImage& aImage, + TReal32 (*aAlphaFunc)(TReal32)=0, TBool aAbsoluteAngleParm=EFalse) __SOFTFP; + + void DrawGradient(TGradientType aType, const TRect& aRect, + const TRgb& aStartColor, const TRgb& aEndColor, + TReal32 aStartOpacity = 1.0, + TReal32 aEndOpacity = 1.0, + const THuiRealRect* aTexCoords = 0) __SOFTFP; + + void DrawPolygon(RArray& aPoints); + + void DrawEllipse(const TRect& aRect, THuiFillMode aDrawMode, const TInt aThickness); + + /** + * Sets a depth offset. The depth offset is used when drawing overlaid + * surfaces with the same Z coordinates. Normally the depth offset is + * always zero. + * + * @param aOffset Offset units. + */ + void SetDepthOffset(TInt aOffset); + + /** + * Makes a screen capture of the graphics context's current content. + * The data is returned in an array of raw pixel data of size: + * aSize.Width() * aSize.Height() * 4. + * + * @return Rgba8888 raw bitmap data of the screen's contents. + * Caller must pop and destroy the returned buffer. + */ + TUint8* CaptureLC(TSize& aSize) const; + + /** + * Transforms a dirty rectangle. Implementing this method in + * inherited classes is optional (if e.g. dirty rects aren't supported) + * + * @param aRect Rectangle to transform. + */ + void TransformDirtyRect(THuiRealRect& aRect); + + /* + * Implemented. + */ + virtual void UpdateColor(TReal32 aAlphaFactor = 1.0f) __SOFTFP; + +public: // new + + /** + * Sets the rule by which a polygon should be filled + * Fill rule is useful while filling self-intersecting polygons. + * + * @param aFillMode Polygon filling mode, which will be mapped to + * openVg Fill_Rule. + */ + + void SetFillRule( THuiFillMode aFillMode ); + + /* + * Ownership is not transferred. + */ + void SetPaintPattern(CHuiTexture* aTexture, const TPoint& aTextureOrigin); + + void DrawArc(const TRect& aRect, THuiFillMode aDrawMode, const TInt aThickness, TReal32 aStart, TReal32 aEnd, TBool aIsPie); + +protected: + + /* Constructors. */ + + /** + * Constructor. + */ + CHuiVg10Gc(); + + /** + * Second-phase constructor. + */ + void ConstructL(); + + + /* Methods. */ + + /** + * Draw the image. + * + * @param aImage Image to draw. + * @param aTopLeft Coordinates of the top left corner. + * @param aSize Size of the image. + */ + void DoDrawImage(const THuiImage& aImage, const THuiRealPoint& aTopLeft, + const THuiRealSize& aSize); + + /** + * Draws two images simultaneously. Requires at least two texture units. + * + * Segment count must match and sizes must match if using multiple segments. + * Otherwise nothing is drawn. + * + * @param aImage Image to draw. + * @param aImage2 Secondary image to draw. + * @param aTopLeft Coordinates for the top left corner. + * @param aSize Size of the image. + */ + void DoDrawImages(const THuiImage& aImage, + const THuiImage& aImage2, + const THuiRealPoint& aTopLeft, + const THuiRealSize& aSize); + + CHuiMatrixStack* MatrixStack(THuiGcMatrix aMatrix); + + void SetQuality(THuiQuality aQuality); + +private: + /** + * Synchronize a specific OpenVG matrix with the main matrix. + */ + void UpdateMatrix(VGMatrixMode aMatrix); + + /** + * Makes sure the latest transformation matrix is used for client-side calculation. + */ + void UpdateClientMatrix(); + + /** + * Draw a cropped and possibly scaled portion of an image onto the screen. + * + * @param aTexture Texture to draw + * @param aSourceRect Source rectangle + * @param aDestRect Destination rectangle + */ + void DrawCroppedTexture(const MHuiSegmentedTexture& aTexture, + const THuiRealRect& aSourceRect, + const THuiRealRect& aDestRect); + + /** + * Draw a possibly cropped or scaled portion of an image onto the screen. + * + * @param aTexture Texture to draw + * @param aSourceRect Source rectangle + * @param aDestRect Destination rectangle + */ + void DrawTexture(const MHuiSegmentedTexture& aTexture, + const THuiRealRect& aSourceRect, + const THuiRealRect& aDestRect); + + + /** + * DrawBorders implementation for EBorderImage + * border drawing mode. + * @see CHuiGc::DrawBorders() + */ + void DrawBorderImages(const TRect& aOuterRect, + TReal32 aBorderWidth, + TReal32 aBorderHeight, + THuiRealPoint aOffset, + const THuiImage* aImage); + + + /** + * DrawBorders implementation for EBorderFixedCorners + * border drawing mode. + * @see CHuiGc::DrawBorders() + */ + void DrawBorderFixedCorners(const TRect& aOuterRect, + TReal32 aLeftBorderWidth, + TReal32 aRightBorderWidth, + TReal32 aTopBorderHeight, + TReal32 aBottomBorderHeight, + const THuiImage* aImage); + + + void CreateVgObjectsL(); + + +#ifdef __NVG + /** + * Draws the icon from NVG data using the NVGDecoder. Does the parsing of the icon header as well + * + * @param aNVGData Extended bitmap data in NVG buffer format to be drawn + * @param aIconCmds Extended bitmap data in VG Object Cached format to be drawn + * @param aImageSize Size of the image + * @param aIgnoreAspectRatio Ignore aspect ratio defined in the icon's header + */ + void DrawNVG(HBufC8* aNVGData, MNVGIcon* aIconCmds, const TSize& aImageSize, TBool aIgnoreAspectRatio); +#endif + + void UsePaintPattern(); + void DiscardPaintPattern(); + +private: + /** Matrix characteristics */ + enum TMatrixFlags + { + EMatrixFlagsRotation = 0x1, + }; + + /** Model view matrix stack */ + CHuiMatrixStack* iMatrixStack; + + typedef RArray RMatrixFlagsStack; + + /** Stack for storing additional information about the matrices */ + RMatrixFlagsStack iMatrixFlagsStack; + + /** Flags for the current matrix */ + TUint iMatrixFlags; + + /** Rendering state */ + TBool iStateScissorTest; + TRect iScissorRect; + + /** A path for drawing dynamic shapes */ + VGPath iPath; + + /** A path for drawing rectangles */ + VGPath iRectPath; + + /** A path for drawing round rectangles */ + VGPath iRoundRectPath; + + /** A path for drawing cropped images */ + VGPath iImagePath; + + /** A path for drawing borders */ + VGPath iBorderPath; + + /** A path for drawing lines */ + VGPath iLinePath; + + /** A path for drawing arcs */ + VGPath iArcPath; + + /** A path for drawing ellipses */ + VGPath iEllipsePath; + + /** Default fill and stroke paint */ + VGPaint iPaint; + + /** Gradient fill paint */ + VGPaint iGradientPaint; + + /** The current blend mode */ + VGBlendMode iBlendMode; + +#ifdef __NVG + CNvgEngine* iNvgEngine; +#endif + + TBool iVgObjectsCreated; + + /** Private temp region for general purpose, used to avoid excessive allocations of RRegion heap objects */ + mutable RRegionBuf iTempRegion; + + /** Image pattern for paint, NOT owned */ + VGImage iPaintPattern; + TPoint iPaintPatternOrigin; + }; + +#endif // __HUIVG10GC_H__