svgtopt/nvgdecoder/inc/NVGCSIcon.h
author hgs
Wed, 03 Nov 2010 18:56:10 +0200
changeset 46 88edb906c587
permissions -rw-r--r--
201044
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
46
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  NVG Decoder header file
hgs
parents:
diff changeset
    15
 *
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
#ifndef NVGCSICON_H_
hgs
parents:
diff changeset
    20
#define NVGCSICON_H_
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
#include <e32base.h>
hgs
parents:
diff changeset
    23
#include <openvg.h>
hgs
parents:
diff changeset
    24
hgs
parents:
diff changeset
    25
#include "NVGIcon.h"
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
class CNVGIconData;
hgs
parents:
diff changeset
    28
class CNvgEngine;
hgs
parents:
diff changeset
    29
class COpenVGHandleStore;
hgs
parents:
diff changeset
    30
hgs
parents:
diff changeset
    31
class CNVGCSIcon : public CBase, public MNVGIcon
hgs
parents:
diff changeset
    32
    {
hgs
parents:
diff changeset
    33
private:
hgs
parents:
diff changeset
    34
    enum TNVGCSIconCommands
hgs
parents:
diff changeset
    35
        {
hgs
parents:
diff changeset
    36
        EPath,
hgs
parents:
diff changeset
    37
        EPathData,
hgs
parents:
diff changeset
    38
        EPaint,
hgs
parents:
diff changeset
    39
        EColorRamp,
hgs
parents:
diff changeset
    40
        ETransform,
hgs
parents:
diff changeset
    41
        EStrokeWidth,
hgs
parents:
diff changeset
    42
        EStrokeMiterLimit,
hgs
parents:
diff changeset
    43
        EStrokeLineJoinCap,
hgs
parents:
diff changeset
    44
        EStrokePaint,
hgs
parents:
diff changeset
    45
        EStrokeColorRamp
hgs
parents:
diff changeset
    46
        };
hgs
parents:
diff changeset
    47
hgs
parents:
diff changeset
    48
    CNVGCSIcon();
hgs
parents:
diff changeset
    49
    void ConstructL(const TDesC8& aBuf);
hgs
parents:
diff changeset
    50
    
hgs
parents:
diff changeset
    51
public:
hgs
parents:
diff changeset
    52
    static CNVGCSIcon * NewL(const TDesC8& aBuf);
hgs
parents:
diff changeset
    53
    static CNVGCSIcon * NewLC(const TDesC8& aBuf);
hgs
parents:
diff changeset
    54
    virtual ~CNVGCSIcon();
hgs
parents:
diff changeset
    55
    
hgs
parents:
diff changeset
    56
    virtual TInt Draw(const TSize aSize, CNvgEngine * aNVGEngine);
hgs
parents:
diff changeset
    57
    
hgs
parents:
diff changeset
    58
    TInt SetViewBox(TReal32 x, TReal32 y, TReal32 w, TReal32 h) __SOFTFP;
hgs
parents:
diff changeset
    59
hgs
parents:
diff changeset
    60
    TInt SetPreserveAspectRatio(TInt aPreserveAspectSetting, 
hgs
parents:
diff changeset
    61
            TInt aSmilFitSetting);
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
    TInt Rotate(TReal32 aAngle, TReal32 aX, TReal32 aY) __SOFTFP;
hgs
parents:
diff changeset
    64
    
hgs
parents:
diff changeset
    65
    /**
hgs
parents:
diff changeset
    66
     * Adds new path drawing command. 
hgs
parents:
diff changeset
    67
     * @param aPath vgPath to be appended
hgs
parents:
diff changeset
    68
     */
hgs
parents:
diff changeset
    69
    void AddDrawPathCommandL(VGPath aPath, VGbitfield aPaintMode);
hgs
parents:
diff changeset
    70
    
hgs
parents:
diff changeset
    71
    /**
hgs
parents:
diff changeset
    72
     * Adds path data. This is required if vgCreatePath fails. 
hgs
parents:
diff changeset
    73
     */        
hgs
parents:
diff changeset
    74
    void AddPathDataL(VGint numSegments, const VGubyte * pathSegments, const void * pathData);
hgs
parents:
diff changeset
    75
    
hgs
parents:
diff changeset
    76
    /**
hgs
parents:
diff changeset
    77
     * Adds linear gradient drawing command. Stores the gradient data and matrix
hgs
parents:
diff changeset
    78
     * to be used with VG_MATRIX_FILL_PAINT_TO_USER mode.
hgs
parents:
diff changeset
    79
     * 
hgs
parents:
diff changeset
    80
     * @param aCount            Gradient data parameter count
hgs
parents:
diff changeset
    81
     * @param aGradientData     Linear gradient data to be given to vgSetParameterfv
hgs
parents:
diff changeset
    82
     * @param aGradientMatrix   Linear gradient matrix used for FILL_PAINT_TO_USER matrix mode
hgs
parents:
diff changeset
    83
     */
hgs
parents:
diff changeset
    84
    void AddLinearGradientCommandL(VGint aCount, VGfloat* aGradientData, VGfloat* aGradientMatrix, VGPaint aPaint);
hgs
parents:
diff changeset
    85
hgs
parents:
diff changeset
    86
    /**
hgs
parents:
diff changeset
    87
     * Adds radial gradient drawing command. Stores the gradient data and matrix
hgs
parents:
diff changeset
    88
     * to be used with VG_MATRIX_FILL_PAINT_TO_USER mode.
hgs
parents:
diff changeset
    89
     * 
hgs
parents:
diff changeset
    90
     * @param aCount            Gradient data parameter count
hgs
parents:
diff changeset
    91
     * @param aGradientData     Linear gradient data to be given to vgSetParameterfv
hgs
parents:
diff changeset
    92
     * @param aGradientMatrix   Linear gradient matrix used for FILL_PAINT_TO_USER matrix mode
hgs
parents:
diff changeset
    93
     */
hgs
parents:
diff changeset
    94
    void AddRadialGradientCommandL(VGint aCount, VGfloat* aGradientData, VGfloat* aGradientMatrix, VGPaint aPaint);
hgs
parents:
diff changeset
    95
    
hgs
parents:
diff changeset
    96
    /**
hgs
parents:
diff changeset
    97
     * Adds a setColor command to be used with paints.
hgs
parents:
diff changeset
    98
     * 
hgs
parents:
diff changeset
    99
     * @param aRgba RGBA color in hex format to be set with vgSetColor
hgs
parents:
diff changeset
   100
     */
hgs
parents:
diff changeset
   101
    void AddSetColorCommandL(VGuint aRgba);
hgs
parents:
diff changeset
   102
hgs
parents:
diff changeset
   103
    /**
hgs
parents:
diff changeset
   104
     * Adds color ramp to the icon data structure.
hgs
parents:
diff changeset
   105
     * 
hgs
parents:
diff changeset
   106
     * @param aStopCount    Count of the color ramps, has to be multiple of 5
hgs
parents:
diff changeset
   107
     * @param aColorRamps   Color ramp data
hgs
parents:
diff changeset
   108
     */
hgs
parents:
diff changeset
   109
    void AddColorRampCommandL(VGPaint aPaint);
hgs
parents:
diff changeset
   110
    
hgs
parents:
diff changeset
   111
    /**
hgs
parents:
diff changeset
   112
     * Adds a transformation command which is multiplied to the current matrix
hgs
parents:
diff changeset
   113
     * 
hgs
parents:
diff changeset
   114
     * @param aTransformMatrix  Transformation matrix used for multiplication
hgs
parents:
diff changeset
   115
     * @param aFlag 1 multiplies  aTransformMatrix with current matrix, 0 loads original matrix
hgs
parents:
diff changeset
   116
     */
hgs
parents:
diff changeset
   117
    void AddSetTransformCommandL(const VGfloat* aTransformMatrix, TInt aFlag);
hgs
parents:
diff changeset
   118
    
hgs
parents:
diff changeset
   119
    /**
hgs
parents:
diff changeset
   120
     * Adds set stroke-width command
hgs
parents:
diff changeset
   121
     * 
hgs
parents:
diff changeset
   122
     * @param aStrokeWidth stroke width
hgs
parents:
diff changeset
   123
     */
hgs
parents:
diff changeset
   124
    void AddSetStrokeWidthCommandL(VGfloat aStrokeWidth);
hgs
parents:
diff changeset
   125
    
hgs
parents:
diff changeset
   126
    /**
hgs
parents:
diff changeset
   127
     * Adds set stroke-miterlimit command
hgs
parents:
diff changeset
   128
     * 
hgs
parents:
diff changeset
   129
     * @param aMiterLimit miter length     
hgs
parents:
diff changeset
   130
     */
hgs
parents:
diff changeset
   131
    void AddSetStrokeMiterLimitCommandL(VGfloat aMiterLimit);
hgs
parents:
diff changeset
   132
    
hgs
parents:
diff changeset
   133
    /**
hgs
parents:
diff changeset
   134
     * Adds set line join cap command
hgs
parents:
diff changeset
   135
     * 
hgs
parents:
diff changeset
   136
     * @param aCapStyle   end cap style
hgs
parents:
diff changeset
   137
     * @param aJoinStyle  line join style
hgs
parents:
diff changeset
   138
     */
hgs
parents:
diff changeset
   139
    void AddStrokeLineJoinCapCommandL(VGint aCapStyle, VGint aJoinStyle);
hgs
parents:
diff changeset
   140
hgs
parents:
diff changeset
   141
    /**
hgs
parents:
diff changeset
   142
     * Adds linear gradient drawing command. Stores the gradient data and matrix
hgs
parents:
diff changeset
   143
     * 
hgs
parents:
diff changeset
   144
     * @param aCount            Gradient data parameter count
hgs
parents:
diff changeset
   145
     * @param aGradientData     Linear gradient data to be given to vgSetParameterfv
hgs
parents:
diff changeset
   146
     * @param aGradientMatrix   Linear gradient matrix used for STROKE_PAINT_TO_USER matrix mode
hgs
parents:
diff changeset
   147
     */
hgs
parents:
diff changeset
   148
    void AddStrokeLinearGradientCommandL(VGint aCount, VGfloat* aGradientData, VGfloat* aGradientMatrix, VGPaint aPaint);
hgs
parents:
diff changeset
   149
hgs
parents:
diff changeset
   150
    /**
hgs
parents:
diff changeset
   151
     * Adds radial gradient drawing command. Stores the gradient data and matrix
hgs
parents:
diff changeset
   152
     * to be used with VG_MATRIX_STROKE_PAINT_TO_USER mode.
hgs
parents:
diff changeset
   153
     * 
hgs
parents:
diff changeset
   154
     * @param aCount            Gradient data parameter count
hgs
parents:
diff changeset
   155
     * @param aGradientData     Linear gradient data to be given to vgSetParameterfv
hgs
parents:
diff changeset
   156
     * @param aGradientMatrix   Linear gradient matrix used for VG_MATRIX_STROKE_PAINT_TO_USER matrix mode
hgs
parents:
diff changeset
   157
     */
hgs
parents:
diff changeset
   158
    void AddStrokeRadialGradientCommandL(VGint aCount, VGfloat* aGradientData, VGfloat* aGradientMatrix, VGPaint aPaint);
hgs
parents:
diff changeset
   159
    
hgs
parents:
diff changeset
   160
    /**
hgs
parents:
diff changeset
   161
     * Adds a setColor command to be used with stroke.
hgs
parents:
diff changeset
   162
     * 
hgs
parents:
diff changeset
   163
     * @param aRgba RGBA color in hex format
hgs
parents:
diff changeset
   164
     */
hgs
parents:
diff changeset
   165
    void AddStrokeSetColorCommandL(VGuint aRgba);
hgs
parents:
diff changeset
   166
    
hgs
parents:
diff changeset
   167
    /**
hgs
parents:
diff changeset
   168
     * Adds color ramp to the icon data structure.
hgs
parents:
diff changeset
   169
     * 
hgs
parents:
diff changeset
   170
     * @param aStopCount    Count of the color ramps, has to be multiple of 5
hgs
parents:
diff changeset
   171
     * @param aColorRamps   Color ramp data
hgs
parents:
diff changeset
   172
     */
hgs
parents:
diff changeset
   173
    void AddStrokeColorRampCommandL(VGPaint aPaint);
hgs
parents:
diff changeset
   174
    
hgs
parents:
diff changeset
   175
private:
hgs
parents:
diff changeset
   176
hgs
parents:
diff changeset
   177
    TInt DoDrawL(const TSize aSize);
hgs
parents:
diff changeset
   178
hgs
parents:
diff changeset
   179
    void AddLinearGradientCommandDataL(VGPaint aPaint, VGint aCount, VGfloat* aGradientData, VGfloat* aGradientMatrix);
hgs
parents:
diff changeset
   180
    void AddRadialGradientCommandDataL(VGPaint aPaint, VGint aCount, VGfloat* aGradientData, VGfloat* aGradientMatrix);
hgs
parents:
diff changeset
   181
    void AddSetColorCommandDataL(VGuint aRgba);
hgs
parents:
diff changeset
   182
hgs
parents:
diff changeset
   183
    void DrawPaintL(VGPaint aPaint, VGMatrixMode aMatrixMode, TUint & aLastPaintType, TUint & aLastPaintColor, VGPaintMode aPaintMode);
hgs
parents:
diff changeset
   184
    void DrawColorRampL(VGPaint aPaint);
hgs
parents:
diff changeset
   185
    void SetViewBoxToViewTransformationL(const TSize aSize);
hgs
parents:
diff changeset
   186
    void SetRotation();
hgs
parents:
diff changeset
   187
hgs
parents:
diff changeset
   188
    void UpdateClientMatrices();
hgs
parents:
diff changeset
   189
    void RestoreClientMatrices();
hgs
parents:
diff changeset
   190
    
hgs
parents:
diff changeset
   191
private:
hgs
parents:
diff changeset
   192
    TReal32             iViewBoxX;
hgs
parents:
diff changeset
   193
    TReal32             iViewBoxY;
hgs
parents:
diff changeset
   194
    TReal32             iViewBoxW;
hgs
parents:
diff changeset
   195
    TReal32             iViewBoxH;
hgs
parents:
diff changeset
   196
    
hgs
parents:
diff changeset
   197
    TReal32             iRotationAngle;
hgs
parents:
diff changeset
   198
    TReal32             iRotationX;
hgs
parents:
diff changeset
   199
    TReal32             iRotationY;
hgs
parents:
diff changeset
   200
    
hgs
parents:
diff changeset
   201
    TInt                iPreserveAspectSetting;
hgs
parents:
diff changeset
   202
    TInt                iSmilFitSetting;
hgs
parents:
diff changeset
   203
hgs
parents:
diff changeset
   204
    CNVGIconData *      iNVGIconData;
hgs
parents:
diff changeset
   205
hgs
parents:
diff changeset
   206
    VGPath              iPath;          // when create path fails this handle will be used
hgs
parents:
diff changeset
   207
    VGPaint             iFillPaint;     // currently just one object for fill paint
hgs
parents:
diff changeset
   208
    VGPaint             iStrokePaint;   // currently just one object for stroke paint
hgs
parents:
diff changeset
   209
hgs
parents:
diff changeset
   210
    // caller's parameters
hgs
parents:
diff changeset
   211
    VGPaint             iUserStrokePaint;
hgs
parents:
diff changeset
   212
    VGPaint             iUserFillPaint;
hgs
parents:
diff changeset
   213
hgs
parents:
diff changeset
   214
    VGint               iMatrixMode;
hgs
parents:
diff changeset
   215
    TReal32             iImageMatrix[9];
hgs
parents:
diff changeset
   216
    TReal32             iPathMatrix[9];
hgs
parents:
diff changeset
   217
    TReal32             iFillPaintMatrix[9];
hgs
parents:
diff changeset
   218
    TReal32             iStrokePaintMatrix[9];
hgs
parents:
diff changeset
   219
    CNvgEngine *        iNVGEngine;
hgs
parents:
diff changeset
   220
    COpenVGHandleStore* iOpenVGHandles;
hgs
parents:
diff changeset
   221
    
hgs
parents:
diff changeset
   222
    TUint       iLastFillPaintType;
hgs
parents:
diff changeset
   223
    TUint       iLastStrokePaintType;
hgs
parents:
diff changeset
   224
    TUint       iLastFillPaintColor;
hgs
parents:
diff changeset
   225
    TUint       iLastStrkePaintColor;
hgs
parents:
diff changeset
   226
    
hgs
parents:
diff changeset
   227
    TUint       iResetFillPaint;
hgs
parents:
diff changeset
   228
    VGPaint     iResetStrokePaint;
hgs
parents:
diff changeset
   229
    };
hgs
parents:
diff changeset
   230
hgs
parents:
diff changeset
   231
#endif