svgtopt/gfx2d/inc/GfxImageTransformer.h
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:20:46 +0100
branchRCL_3
changeset 18 1902ade171ab
parent 0 d46562c3d99d
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201026 Kit: 201035

/*
* Copyright (c) 2002 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:  Graphics Extension Library header file
*
*/


#ifndef GFXIMAGETRANSFORMER_H
#define GFXIMAGETRANSFORMER_H

#include <e32std.h>
#include <fbs.h>
#include <bitstd.h>

#include "GfxFloatFixPt.h"
#include "GfxAffineTransform.h"
#include "GfxRenderingHints.h"
#include "GfxRectangle2D.h"
#include "GfxPoint2D.h"
#include "GfxColor.h"


class CVGRenderer;

/**
 * Class to perform transformation on an image.
 *
 *  @lib Gfx2D.lib
 *  @since 1.0
 */
class TGfxImageTransformer
    {
    public:

        /**
         * Contructor.
         *
         * @since 1.0
         * @param aTransform : transform to apply.
         * @param aInterpolation : image interpolation
         * @return
         */
                            TGfxImageTransformer( TGfxAffineTransform* aTransform, CVGRenderer * aRenderer);


        /**
         * Draw the source image onto the destination with the transformation defined by
         * this object, blending with the alpha value.
         *
         * @since 1.0
         * @param aSrc : source image
         * @param aPoint : origin point of the text rectangle.
         * @param aDst : destination image buffer.
         * @param aDstWidth : destination image width.
         * @param aDstHeight : destination image height.
         * @param aAlpha : blending alpha value.
         * @param aClipRect :
         * @param aReverse : ETrue if copying image from aDst to aSrc.
         *                   This is a special case and used to copy background image to text box.
         *                   EFalse is for regular use.
         * @return
         */
         void               Draw( CFbsBitmap* aSrc,
                                          const TGfxPoint2D& p,
										  TUint32* aDst,
										  TInt aDstWidth,
										  TInt aDstHeight,
										  TUint8 aAlpha,
                                          TGfxColor aTransparentColor,
										  const TRect& aClipRect,
										  TBool aReverse = EFalse
										  );

        /**
         * Draw the source image onto the destination with the transformation defined by
         * this object.  Uses the alpha bits of the EColor16MU to blend.  Only EColor16MU mode
         * for aSrc is allowed.
         *
         * @since 1.0
         * @param aSrc : source image
         * @param aPoint : origin point of the text rectangle.
         * @param aDst : destination image buffer.
         * @param aDstWidth : destination image width.
         * @param aDstHeight : destination image height.
         * @param aClipRect :
         * @param aReverse : ETrue if copying image from aDst to aSrc.
         *                   This is a special case and used to copy background image to text box.
         *                   EFalse is for regular use.
         * @return
         */
         void               Draw( CFbsBitmap* aSrc,
                                          const TGfxPoint2D& p,
										  TUint32* aDst,
										  TInt aDstWidth,
										  TInt aDstHeight,
										  const TRect& aClipRect
										  );


        /**
         * Get the bounding box for the given image once transformed.
         *
         * @since 1.0
         * @param aSrc : source image
         * @param aOffset : offset.
         * @return
         */
         TGfxRectangle2D    GetTransformedBound( CFbsBitmap* aSrc,
                                                         const TGfxPoint2D& aOffset );
        /**
         * Draw the source image onto the destination with the transformation defined by
         * this object, blending with the alpha value. When aReverse is ETrue, do the reverse.
         *
         * @since 1.0
         * @param aSrc : source image
         * @param aPoint : origin point of the text rectangle.
         * @param aDstWidth : destination image width.
         * @param aDstHeight : destination image height.
         * @param aClipRect :
         * @param aReverse : ETrue if copying image from aDst to aSrc.
         *                   This is a special case and used to copy background image to text box.
         *                   EFalse is for regular use.
         * @return
         */
         void       ImageBlend( CFbsBitmap* aSrc,
                                          const TGfxPoint2D& p,
										  TInt aDstWidth,
										  TInt aDstHeight,
										  const TRect& aClipRect,
										  TBool aReverse = EFalse
										  );

        /**
         * Compute scanline starting/end position for the rectangle.
         *
         * @since 1.0
         * @param y : current rectangle's height
         * @param rect : rectangle that needs to be computed.
         * @param north : transformed corner.
         * @param west :  transformed corner.
         * @param east :  transformed corner.
         * @param south :  transformed corner.
         * @param xstart : computed x coordinates for start position
         * @param xend : computed x coordinates for end position
         *
         * @return none
         */
        void ComputeXPositions(TFloatFixPt y, TRect rect, TGfxPoint2D north, TGfxPoint2D west,
            TGfxPoint2D east, TGfxPoint2D south, TInt& xstart, TInt& xend);

        /**
         * compute coordinates from transformed 4 points.
         *
         * @since 1.0
         *
         * @return none
         */
        void SortCoordinates(TGfxPoint2D& origin, TGfxPoint2D& top,
            TGfxPoint2D& north, TGfxPoint2D& south, TGfxPoint2D& right,
            TGfxPoint2D& east, TGfxPoint2D& west, TGfxPoint2D& corner,
            TGfxPoint2D aP, const TInt srcWidth, const TInt srcHeight);

    private:

        TGfxAffineTransform*        iTransform;
        CVGRenderer *           iVgRenderer;
    };

#endif      // GFXIMAGETRANSFORMER_H