activityfw/tsutils/inc/tsgraphicfilescalinghandler.h
author hgs
Fri, 28 May 2010 16:17:03 +0300
changeset 96 5d243a69bdda
parent 94 dbb8300717f7
permissions -rw-r--r--
201021
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
94
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
 * Copyright (c) 2009 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 :
hgs
parents:
diff changeset
    15
 *
hgs
parents:
diff changeset
    16
 */
hgs
parents:
diff changeset
    17
#ifndef TSGRAPHICFILESCALINGHANDLER_H
hgs
parents:
diff changeset
    18
#define TSGRAPHICFILESCALINGHANDLER_H
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
#ifndef __E32SVR_H__
hgs
parents:
diff changeset
    21
#define __E32SVR_H__
hgs
parents:
diff changeset
    22
#endif
hgs
parents:
diff changeset
    23
hgs
parents:
diff changeset
    24
hgs
parents:
diff changeset
    25
#ifndef SYMBIAN_ENABLE_PUBLIC_PLATFORM_HEADER_SPLIT
hgs
parents:
diff changeset
    26
#define SYMBIAN_ENABLE_PUBLIC_PLATFORM_HEADER_SPLIT
hgs
parents:
diff changeset
    27
#endif
hgs
parents:
diff changeset
    28
hgs
parents:
diff changeset
    29
#include <bitmaptransforms.h>
hgs
parents:
diff changeset
    30
hgs
parents:
diff changeset
    31
class CImageDecoder;
hgs
parents:
diff changeset
    32
class CFbsBitmap;
hgs
parents:
diff changeset
    33
96
hgs
parents: 94
diff changeset
    34
/**
hgs
parents: 94
diff changeset
    35
 * Interface to observer contain
hgs
parents: 94
diff changeset
    36
 * ImageReadyCallBack function return error code and scaled/resized bitmap.
hgs
parents: 94
diff changeset
    37
 */
94
hgs
parents:
diff changeset
    38
class MImageReadyCallBack
hgs
parents:
diff changeset
    39
{
hgs
parents:
diff changeset
    40
public:
96
hgs
parents: 94
diff changeset
    41
    virtual void ImageReadyCallBack(TInt error, const CFbsBitmap *bitmap) = 0;
94
hgs
parents:
diff changeset
    42
};
hgs
parents:
diff changeset
    43
96
hgs
parents: 94
diff changeset
    44
/**
hgs
parents: 94
diff changeset
    45
 * Class to scaling graphic file/s.
hgs
parents: 94
diff changeset
    46
 */
94
hgs
parents:
diff changeset
    47
class CTsGraphicFileScalingHandler : public CActive
hgs
parents:
diff changeset
    48
{
hgs
parents:
diff changeset
    49
public:
96
hgs
parents: 94
diff changeset
    50
    /**
hgs
parents: 94
diff changeset
    51
     * Kind of graphic file scaling.
hgs
parents: 94
diff changeset
    52
     * EIgnoreAspectRatio          - the file is scaled to size, aspect ratio isn't preserving.
hgs
parents: 94
diff changeset
    53
     * EKeepAspectRatio            - the file is scaled to a rectangle as large as possible inside size
hgs
parents: 94
diff changeset
    54
     *                               preserving the aspect ratio.
hgs
parents: 94
diff changeset
    55
     * EKeepAspectRatioByExpanding - the file is scaled to a rectangle as small as possible outside size
hgs
parents: 94
diff changeset
    56
     *                               preserving the aspect ratio.
hgs
parents: 94
diff changeset
    57
     */
hgs
parents: 94
diff changeset
    58
    enum TKindOfScaling
hgs
parents: 94
diff changeset
    59
    {
hgs
parents: 94
diff changeset
    60
       EIgnoreAspectRatio = 0,
hgs
parents: 94
diff changeset
    61
       EKeepAspectRatio = 1,
hgs
parents: 94
diff changeset
    62
       EKeepAspectRatioByExpanding = 2,
hgs
parents: 94
diff changeset
    63
    };
94
hgs
parents:
diff changeset
    64
96
hgs
parents: 94
diff changeset
    65
private:
hgs
parents: 94
diff changeset
    66
    /**
hgs
parents: 94
diff changeset
    67
     * Active object current operation.
hgs
parents: 94
diff changeset
    68
     */
hgs
parents: 94
diff changeset
    69
    enum TCurrentOperation{
94
hgs
parents:
diff changeset
    70
        ENone = 0,
hgs
parents:
diff changeset
    71
        EConvertBitmapFromFile = 1,
hgs
parents:
diff changeset
    72
        EScale = 2
hgs
parents:
diff changeset
    73
    };
hgs
parents:
diff changeset
    74
96
hgs
parents: 94
diff changeset
    75
public:
hgs
parents: 94
diff changeset
    76
    /**
hgs
parents: 94
diff changeset
    77
    * Destructor.
hgs
parents: 94
diff changeset
    78
    */
94
hgs
parents:
diff changeset
    79
    IMPORT_C ~CTsGraphicFileScalingHandler();
hgs
parents:
diff changeset
    80
96
hgs
parents: 94
diff changeset
    81
    /**
hgs
parents: 94
diff changeset
    82
     * All constructors initialise active object asynchronous operation
hgs
parents: 94
diff changeset
    83
     * by calling ConstructL function.
hgs
parents: 94
diff changeset
    84
     * 1st group - decoding and scaling.
hgs
parents: 94
diff changeset
    85
     * 2nd group - scaling.
hgs
parents: 94
diff changeset
    86
     */
hgs
parents: 94
diff changeset
    87
hgs
parents: 94
diff changeset
    88
    /**
hgs
parents: 94
diff changeset
    89
     * 1st group.
hgs
parents: 94
diff changeset
    90
     * Exported from dll constructors for activation graphic file scaling.
hgs
parents: 94
diff changeset
    91
     * aNotify        - reference to observer implementation.
hgs
parents: 94
diff changeset
    92
     * aFs            - reference to file server session.
hgs
parents: 94
diff changeset
    93
     * aFileName      - path to graphic file.
hgs
parents: 94
diff changeset
    94
     * aMimeType      - mime type of graphic file.
hgs
parents: 94
diff changeset
    95
     * aNewSize       - new size of output graphic file.
hgs
parents: 94
diff changeset
    96
     * aKindOfScaling - kind of graphic file scaling described above.
hgs
parents: 94
diff changeset
    97
     */
94
hgs
parents:
diff changeset
    98
    IMPORT_C static CTsGraphicFileScalingHandler* NewL(MImageReadyCallBack &aNotify,
hgs
parents:
diff changeset
    99
        RFs &aFs,
hgs
parents:
diff changeset
   100
        const TDesC &aFileName,
hgs
parents:
diff changeset
   101
        const TDesC8& aMimeType,
hgs
parents:
diff changeset
   102
        const TSize &aNewSize,
hgs
parents:
diff changeset
   103
        TKindOfScaling aKindOfScaling = CTsGraphicFileScalingHandler::EIgnoreAspectRatio);
hgs
parents:
diff changeset
   104
    IMPORT_C static CTsGraphicFileScalingHandler* NewLC(MImageReadyCallBack &aNotify,
hgs
parents:
diff changeset
   105
        RFs &aFs,
hgs
parents:
diff changeset
   106
        const TDesC &aFileName,
hgs
parents:
diff changeset
   107
        const TDesC8& aMimeType,
hgs
parents:
diff changeset
   108
        const TSize &aNewSize,
hgs
parents:
diff changeset
   109
        TKindOfScaling aKindOfScaling = CTsGraphicFileScalingHandler::EIgnoreAspectRatio);
hgs
parents:
diff changeset
   110
96
hgs
parents: 94
diff changeset
   111
    /**
hgs
parents: 94
diff changeset
   112
     * 2nd group.
hgs
parents: 94
diff changeset
   113
     * Exported from dll constructors for activation graphic file scaling.
hgs
parents: 94
diff changeset
   114
     * aNotify         - reference to observer implementation.
hgs
parents: 94
diff changeset
   115
     * aImputFbsBitmap - reference to pattern CFbsBitmap.
hgs
parents: 94
diff changeset
   116
     * aNewSize        - new size of output graphic file.
hgs
parents: 94
diff changeset
   117
     * aKindOfScaling  - kind of graphic file scaling described above.
hgs
parents: 94
diff changeset
   118
     */
hgs
parents: 94
diff changeset
   119
    IMPORT_C static CTsGraphicFileScalingHandler* NewL(MImageReadyCallBack &aNotify,
hgs
parents: 94
diff changeset
   120
        const CFbsBitmap &aImputFbsBitmap,
hgs
parents: 94
diff changeset
   121
        const TSize &aNewSize,
hgs
parents: 94
diff changeset
   122
        TKindOfScaling aKindOfScaling = CTsGraphicFileScalingHandler::EIgnoreAspectRatio);
hgs
parents: 94
diff changeset
   123
     IMPORT_C static CTsGraphicFileScalingHandler* NewLC(MImageReadyCallBack &aNotify,
hgs
parents: 94
diff changeset
   124
        const CFbsBitmap &aImputFbsBitmap,
hgs
parents: 94
diff changeset
   125
        const TSize &aNewSize,
hgs
parents: 94
diff changeset
   126
        TKindOfScaling aKindOfScaling = CTsGraphicFileScalingHandler::EIgnoreAspectRatio);
hgs
parents: 94
diff changeset
   127
94
hgs
parents:
diff changeset
   128
protected:
96
hgs
parents: 94
diff changeset
   129
     /**
hgs
parents: 94
diff changeset
   130
      * Cancels the wait for completion of an outstanding request.
hgs
parents: 94
diff changeset
   131
      */
94
hgs
parents:
diff changeset
   132
    void DoCancel();
96
hgs
parents: 94
diff changeset
   133
    /**
hgs
parents: 94
diff changeset
   134
     * Handles an active object’s request completion event.
hgs
parents: 94
diff changeset
   135
     */
94
hgs
parents:
diff changeset
   136
    void RunL();
96
hgs
parents: 94
diff changeset
   137
    /**
hgs
parents: 94
diff changeset
   138
     * Handles a leave occurring in the request completion event handler RunL().
hgs
parents: 94
diff changeset
   139
     */
94
hgs
parents:
diff changeset
   140
    TInt RunError(TInt);
hgs
parents:
diff changeset
   141
hgs
parents:
diff changeset
   142
private:
96
hgs
parents: 94
diff changeset
   143
    /**
hgs
parents: 94
diff changeset
   144
     * Functions construct active objest instance and made asynchronous operation/s.
hgs
parents: 94
diff changeset
   145
     * Parameters - the same meaning as in appropriate NewL/NewLC functions.
hgs
parents: 94
diff changeset
   146
     */
94
hgs
parents:
diff changeset
   147
    void ConstructL(RFs &aFs, const TDesC &aFileName, const TDesC8& aMimeType);
96
hgs
parents: 94
diff changeset
   148
    void ConstructL(const CFbsBitmap &aImputFbsBitmap);
hgs
parents: 94
diff changeset
   149
    /**
hgs
parents: 94
diff changeset
   150
     * Private constructor.
hgs
parents: 94
diff changeset
   151
     * Parameters - the same meaning as in appropriate NewL/NewLC functions.
hgs
parents: 94
diff changeset
   152
     */
94
hgs
parents:
diff changeset
   153
    CTsGraphicFileScalingHandler(MImageReadyCallBack &aNotify,
hgs
parents:
diff changeset
   154
        const TSize &aNewSize,
hgs
parents:
diff changeset
   155
        TKindOfScaling aKindOfScaling = CTsGraphicFileScalingHandler::EIgnoreAspectRatio);
96
hgs
parents: 94
diff changeset
   156
    /**
hgs
parents: 94
diff changeset
   157
     * Action to made before decoding graphic file operation.
hgs
parents: 94
diff changeset
   158
     * Parameters - the same meaning as in appropriate NewL/NewLC functions.
hgs
parents: 94
diff changeset
   159
     */
hgs
parents: 94
diff changeset
   160
    void DecodingOperationL(RFs &aFs, const TDesC &aFileName, const TDesC8& aMimeType);
hgs
parents: 94
diff changeset
   161
    /**
hgs
parents: 94
diff changeset
   162
     * Action to made before scaling graphic file operation.
hgs
parents: 94
diff changeset
   163
     */
hgs
parents: 94
diff changeset
   164
    void ScalingOperationL();
hgs
parents: 94
diff changeset
   165
    /**
hgs
parents: 94
diff changeset
   166
     * Algorithm to determine output bitmap (returned in ImageReadyCallBack) size
hgs
parents: 94
diff changeset
   167
     * after scaling operation.
hgs
parents: 94
diff changeset
   168
     */
hgs
parents: 94
diff changeset
   169
    TSize NewSizeToScalingOperation();
hgs
parents: 94
diff changeset
   170
    /**
hgs
parents: 94
diff changeset
   171
     * Fix for TDisplayMode == EColor16MAP not supported by scaling operation!
hgs
parents: 94
diff changeset
   172
     * ! ! ! ADD OTHER NOT SUPPORTED DISPLAY MODES ! ! !
hgs
parents: 94
diff changeset
   173
     */
hgs
parents: 94
diff changeset
   174
    void FixForDisplayModeNotSupportedByScalingOperation();
94
hgs
parents:
diff changeset
   175
hgs
parents:
diff changeset
   176
private:
96
hgs
parents: 94
diff changeset
   177
    /**
hgs
parents: 94
diff changeset
   178
     * Reference to observer implementation - return error code and output bitmap.
hgs
parents: 94
diff changeset
   179
     */
94
hgs
parents:
diff changeset
   180
    MImageReadyCallBack &mNotify;
96
hgs
parents: 94
diff changeset
   181
    /**
hgs
parents: 94
diff changeset
   182
     * Pointer to decoder used by decoding graphic file algorithm.
hgs
parents: 94
diff changeset
   183
     */
94
hgs
parents:
diff changeset
   184
    CImageDecoder *mImageDecoder;
96
hgs
parents: 94
diff changeset
   185
    /**
hgs
parents: 94
diff changeset
   186
     * Pointer to input bitmap - before decoding/scaling operation/s.
hgs
parents: 94
diff changeset
   187
     */
hgs
parents: 94
diff changeset
   188
    CFbsBitmap *mInputBitmap;
hgs
parents: 94
diff changeset
   189
    /**
hgs
parents: 94
diff changeset
   190
     * Pointer to output bitmap - returned in mNotify object.
hgs
parents: 94
diff changeset
   191
     */
hgs
parents: 94
diff changeset
   192
    CFbsBitmap *mOutputBitmap;
hgs
parents: 94
diff changeset
   193
    /**
hgs
parents: 94
diff changeset
   194
     * Pointer to CBitmapScaler calss used by scaling graphic file algorithm.
hgs
parents: 94
diff changeset
   195
     */
94
hgs
parents:
diff changeset
   196
    CBitmapScaler *mBitmapScaler;
96
hgs
parents: 94
diff changeset
   197
    /**
hgs
parents: 94
diff changeset
   198
     * New size of output graphic file.
hgs
parents: 94
diff changeset
   199
     */
94
hgs
parents:
diff changeset
   200
    TSize mNewSize;
96
hgs
parents: 94
diff changeset
   201
    /**
hgs
parents: 94
diff changeset
   202
     * Kind of graphic file scaling described above.
hgs
parents: 94
diff changeset
   203
     */
94
hgs
parents:
diff changeset
   204
    TBool mKindOfScaling;
96
hgs
parents: 94
diff changeset
   205
    /**
hgs
parents: 94
diff changeset
   206
     * Active object current operation.
hgs
parents: 94
diff changeset
   207
     */
94
hgs
parents:
diff changeset
   208
    TCurrentOperation mCurrentOperation;
hgs
parents:
diff changeset
   209
};
hgs
parents:
diff changeset
   210
hgs
parents:
diff changeset
   211
#endif // TSGRAPHICFILESCALINGHANDLER_H