--- /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 <e32def.h>
+#include <VG/openvg.h>
+#include <VG/vgu.h>
+#include <e32cmn.h>
+
+#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<THuiRealPoint>& 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<TUint> 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<KHuiGcClipRegionGranularity> iTempRegion;
+
+ /** Image pattern for paint, NOT owned */
+ VGImage iPaintPattern;
+ TPoint iPaintPatternOrigin;
+ };
+
+#endif // __HUIVG10GC_H__