--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsdeviceinterface/screendriver/inc/BmAlphaBlend.h Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,317 @@
+// Copyright (c) 2005-2009 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:
+//
+
+#ifndef __BMALPHABLEND_H__
+#define __BMALPHABLEND_H__
+
+/**
+MAlphaBlend interface provides only one method, which does an alpha blending using the
+supplied as arguments source and mask bitmap scanline data and writes the result to
+the screen. The content of the source and mask bitmap scanlines is preserved.
+@internalComponent
+*/
+class MAlphaBlend
+ {
+public:
+ /**
+ TShadowing enum values are used in alpha blending implementations to specify when
+ the shadowing/fading has to be done: before or after tha alpha blending.
+ @internalComponent
+ */
+ enum TShadowing
+ {
+ EShdwBefore,
+ EShdwAfter
+ };
+
+ /**
+ The method performs an alpha blending of the source data - aRgbBuffer and the screen
+ pixels, using the data from aMaskBuffer buffer as an alpha blending factor.
+ The formula used for that, is:
+ (C1 * A + C2 * (255 - A)) / 255, where:
+ - C1 - a pixel from aRgbBuffer1;
+ - C2 - a pixel from screen;
+ - A - a pixel from aMaskBuffer;
+ The content of source and mask buffers is preserved.
+ The calculated alpha blended pixel is written to the destination - the screen or a bitmap.
+ @param aX Logical X coordinate of the position in the target the result should be drawn to.
+ @param aY Logical Y coordinate of the position in the target the result should be drawn to.
+ @param aLength Source data - length in pixels.
+ @param aRgbBuffer A pointer to a line of the source bitmap data.
+ @param aMaskBuffer Buffer containing the data which should be used as an
+ alpha blending factor.
+ @param aShadowing It says when the shadowing/fading has to be done - before or after the
+ alpha blending transformation.
+ Before: A shadow/fade copy of the source bitmap will be used.
+ After: The result pixels will be shadowed/faded.
+ @param aDrawMode The mode for rendering the source image to the destination.
+ */
+ virtual void WriteRgbAlphaLine(TInt aX,
+ TInt aY,
+ TInt aLength,
+ const TUint8* aRgbBuffer,
+ const TUint8* aMaskBuffer,
+ TShadowing aShadowing,
+ CGraphicsContext::TDrawMode aDrawMode) = 0;
+ };
+
+
+/**
+MFastBlit provides optimised blitting for a number of special cases. It is similar to
+MAlphaBlend except that instead of taking generic buffers as parameters, it takes pointers
+to scanlines in their native format.
+@internalTechnology
+*/
+class MFastBlit
+ {
+public:
+ /**
+ Performs Alpha blending.Acceptable source formats are EColor64K and EColor16MU.
+ Mask format must be EGray256.
+ @param aX Logical X coordinate of the position in the target the result should be drawn to.
+ @param aY Logical Y coordinate of the position in the target the result should be drawn to.
+ @param aLength Source data - length in pixels.
+ @param aSrcX X coordinate of the position of the first pixel in the source bitmap to use.
+ @param aSrcPtr Pointer to the start of the current scanline of the source bitmap.
+ @param aSrcFormat Pixel format of the source bitmap.
+ @param aMaskX X coordinate of the position of the first pixel in the mask to use.
+ @param aMaskPtr Pointer to the start of the current scanline of the mask bitmap.
+ @param aShadowing It says when the shadowing/fading has to be done - before or after the
+ alpha blending transformation.
+ Before: A shadow/fade copy of the source bitmap will be used.
+ After: The result pixels will be shadowed/faded.
+ */
+ virtual void WriteAlphaLineEx( TInt aX,
+ TInt aY,
+ TInt aLength,
+ TInt aSrcX,
+ const TUint32* aSrcPtr,
+ TDisplayMode aSrcFormat,
+ TInt aMaskX,
+ const TUint32* aMaskPtr,
+ MAlphaBlend::TShadowing aShadowing) = 0;
+
+ /**
+ Performs masked blitting. Acceptable source formats are EColor64K and EColor16MU.
+ Mask format must be EGray2.
+ @param aX Logical X coordinate of the position in the target the result should be drawn to.
+ @param aY Logical Y coordinate of the position in the target the result should be drawn to.
+ @param aLength Source data - length in pixels.
+ @param aSrcX X coordinate of the position of the first pixel in the source bitmap to use.
+ @param aSrcPtr Pointer to the start of the current scanline of the source bitmap.
+ @param aSrcFormat Pixel format of the source bitmap.
+ @param aMaskX X coordinate of the position of the first pixel in the mask to use.
+ @param aMaskPtr Pointer to the start of the current scanline of the mask bitmap.
+ @param aInvertMask Specifies if the mask shuld be inverted.
+ */
+ virtual void WriteMaskLineEx( TInt aX,
+ TInt aY,
+ TInt aLength,
+ TInt aSrcX,
+ const TUint32* aSrcPtr,
+ TDisplayMode aSrcFormat,
+ TInt aMaskX,
+ const TUint32* aMaskPtr,
+ TBool aInvertMask) = 0;
+
+ };
+
+
+
+/**
+MFastBlit2 provides optimised blitting for a number of special cases.
+It is used for basic blitting where source and destination pixel formats match.
+@internalTechnology
+*/
+class MFastBlit2
+ {
+public:
+ /**
+ Performs basic blitting.
+ Source and destination pixel formats must match.
+ Assumes that aSrcRect is contained by the source device.
+ Assumes that the resulting destination rectangle is contained by the destination device.
+ @param aDest Logical coordinates of the position in the target that the result should be drawn to.
+ @param aSrcDrawDevice Draw device that will act as the source of the blit.
+ @param aSrcRect The rectangular region of the source to be blitted.
+ @return KErrNone unless an error occurs in which case no blitting occurs and a standard error code is returned.
+ */
+ virtual TInt WriteBitmapBlock(const TPoint& aDest,
+ CFbsDrawDevice* aSrcDrawDevice,
+ const TRect& aSrcRect) = 0;
+
+ /**
+ Performs basic blitting.
+ Source and destination pixel formats must match.
+ Assumes that aSrcRect is contained by the source device.
+ Assumes that the resulting destination rectangle is contained by the destination device.
+ @param aDest Logical coordinates of the position in the target that the result should be drawn to.
+ @param aSrcBase Base address of the source bitmap.
+ @param aSrcStride Length in bytes between scanlines of the source bitmap.
+ @param aSrcSize Size of the source bitmap in pixels.
+ @param aSrcRect The rectangular region of the source to be blitted.
+ @return KErrNone unless an error occurs in which case no blitting occurs and a standard error code is returned.
+ */
+ virtual TInt WriteBitmapBlock(const TPoint& aDest,
+ const TUint32* aSrcBase,
+ TInt aSrcStride,
+ const TSize& aSrcSize,
+ const TRect& aSrcRect) = 0;
+ /**
+ Returns a pointer to the first pixel.
+ @return a pointer to the first pixel.
+ */
+ virtual const TUint32* Bits() const = 0;
+ };
+
+/**
+MOutlineAndShadowBlend provides blending of outline pen, shadow, fill and the background colour.
+It is used to draw the fonts with outline and shadow effects.
+@internalTechnology
+*/
+class MOutlineAndShadowBlend
+ {
+ public:
+ /**
+ Performs blending of outline, shadow, fill and background colours and draws to the
+ screen. It uses pen colour as outline colour, brush colour as fill colour and pixel
+ colour as background colour. Transparency is supported for modes higher than EColor256,
+ alpha value of pen colour is used for same in these modes and other modes ignore this
+ value.
+ @param aX Logical X coordinate of the start of the line.
+ @param aY Logical Y coordinate of the line.
+ @param aLength Length in pixels to modify.
+ @param aOutlinePenColor Outline pen colour of the font.
+ @param aShadowColor Shadow colour of the font.
+ @param aFillColor Fill colour of the font.
+ @param aDataBuffer Buffer containing the data.
+ @return KErrNone if it is successful, otherwise a standard error code is returned.
+ */
+ virtual TInt WriteRgbOutlineAndShadow(TInt aX, TInt aY, const TInt aLength,
+ TUint32 aOutlinePenColor, TUint32 aShadowColor,
+ TUint32 aFillColor, const TUint8* aDataBuffer) = 0;
+ };
+
+class MFastBlend
+ {
+public:
+ /**
+ Performs blended blitting.
+ The interface can selectively supports various combinations of source and destination.
+ Assumes that aSrcRect is contained by the source device.
+ Assumes that the resulting destination rectangle is contained by the destination device.
+ @param aDest Logical coordinates of the position in the target that the result should be drawn to.
+ @param aSrcDrawDevice Draw device that will act as the source of the blit.
+ @param aSrcRect The rectangular region of the source to be blitted.
+ @param aDrawMode Current draw mode
+ @param aShadowMode Current shadow mode
+ @return if display modes supported KErrNone, else KErrNotSupported.
+ */
+ virtual TInt FastBlendBitmap(const TPoint& aDest,
+ CFbsDrawDevice* aSrcDrawDevice,
+ const TRect& aSrcRect,
+ CGraphicsContext::TDrawMode aDrawMode,
+ TInt aShadowMode) = 0;
+ /**
+ Performs blended blitting.
+ The interface can selectively supports various combinations of source and destination.
+ Assumes that aSrcRect is contained by the source device.
+ Assumes that the resulting destination rectangle is contained by the destination device.
+ @param aDest Logical coordinates of the position in the target that the result should be drawn to.
+ @param aSrcBase Base address of the source bitmap.
+ @param aSrcStride Length in bytes between scanlines of the source bitmap.
+ @param aSrcSize Size of the source bitmap in pixels.
+ @param aSrcRect The rectangular region of the source to be blitted.
+ @param aSrcDisplayMode Display mode of the source bitmap
+ @param aDrawMode Current draw mode
+ @param aShadowMode Current shadow mode
+ @return if display modes supported KErrNone, else KErrNotSupported.
+ */
+ virtual TInt FastBlendBitmap(const TPoint& aDest,const TUint32* aSrcBase,TInt aSrcStride,
+ const TSize& aSrcSize,const TRect& aSrcRect,TDisplayMode aSrcDisplayMode,
+ CGraphicsContext::TDrawMode aDrawMode,TInt aShadowMode) = 0;
+ /**
+ Performs blended blitting.
+ The interface can selectively supports various combinations of source and destination.
+ Assumes that aSrcRect is contained by the source device.
+ Assumes that the resulting destination rectangle is contained by the destination device.
+ @param aDest Logical coordinates of the position in the target that the result should be drawn to.
+ @param aSrcBase Base address of the source bitmap.
+ @param aSrcStride Length in bytes between scanlines of the source bitmap.
+ @param aSrcSize Size of the source bitmap in pixels.
+ @param aSrcRect The rectangular region of the source to be blitted.
+ @param aSrcDisplayMode Display mode of the source bitmap
+ @param aMaskBase Base address of the source bitmap.
+ @param aMaskStride Length in bytes between scanlines of the source bitmap.
+ @param aMaskDisplayMode Display mode of the source bitmap
+ @param aMaskSize Size of the source bitmap in pixels.
+ @param aInvertMask If true invert the logic of an EGray2 mask
+ @param aDrawMode Current draw mode
+ @param aShadowMode Current shadow mode
+ @return if display modes supported KErrNone, else KErrNotSupported.
+ */
+ virtual TInt FastBlendBitmapMasked(const TPoint& aDest, const TUint32* aSrcBase, TInt aSrcStride,
+ const TSize& aSrcSize, const TRect& aSrcRect, TDisplayMode aSrcDisplayMode,
+ const TUint32* aMaskBase, TInt aMaskStride, TDisplayMode aMaskDisplayMode, const TSize &aMaskSize,const TPoint &aMaskSrcPos, TBool aInvertMask,
+ CGraphicsContext::TDrawMode aDrawMode, TInt aShadowMode)=0;
+ /**
+ Performs scaled blended blitting.
+ The interface can selectively supports various combinations of source and destination.
+ Assumes that aClipRect is contained by the source device.
+ Assumes that the resulting destination rectangle is contained by the destination device.
+ @param aClipRect The target rectangle to clip drawing to
+ @param aDest Logical coordinates of the position in the target that the result should be drawn to.
+ @param aSrcRect Source rectangle
+ @param aSrcBase Base address of the source bitmap.
+ @param aSrcStride Length in bytes between scanlines of the source bitmap.
+ @param aSrcDisplayMode Display mode of the source bitmap
+ @param aSrcSize Size of the source bitmap in pixels.
+ @param aDrawMode Current draw mode
+ @param aShadowMode Current shadow mode
+ @return if display modes supported KErrNone, else KErrNotSupported.
+ */
+ virtual TInt FastBlendBitmapScaled(const TRect &aClipRect, const TRect& aDest,
+ const TRect& aSrcRect, const TUint32 *aSrcBase, TInt aSrcStride,
+ TDisplayMode aSrcDisplayMode, const TSize &aSrcSize,
+ CGraphicsContext::TDrawMode aDrawMode, TInt aShadowMode) = 0;
+ /**
+ Performs scaled blended blitting.
+ The interface can selectively supports various combinations of source and destination.
+ Assumes that aClipRect is contained by the source device.
+ Assumes that the resulting destination rectangle is contained by the destination device.
+ @param aClipRect The target rectangle to clip drawing to
+ @param aDest Logical coordinates of the position in the target that the result should be drawn to.
+ @param aSrcRect Source rectangle
+ @param aSrcBase Base address of the source bitmap.
+ @param aSrcStride Length in bytes between scanlines of the source bitmap.
+ @param aSrcDisplayMode Display mode of the source bitmap
+ @param aSrcSize Size of the source bitmap in pixels.
+ @param aMaskBase Base address of the source bitmap.
+ @param aMaskStride Length in bytes between scanlines of the source bitmap.
+ @param aMaskDisplayMode Display mode of the source bitmap
+ @param aMaskSize Size of the source bitmap in pixels.
+ @param aInvertMask If true invert the logic of an EGray2 mask
+ @param aDrawMode Current draw mode
+ @param aShadowMode Current shadow mode
+ @return if display modes supported KErrNone, else KErrNotSupported.
+ */
+ virtual TInt FastBlendBitmapMaskedScaled(const TRect &aClipRect, const TRect& aDest,
+ const TRect& aSrcRect, const TUint32 *aSrcBase, TInt aSrcStride,
+ TDisplayMode aSrcDisplayMode, const TSize &aSrcSize,
+ const TUint32* aMaskBase, TInt aMaskStride, TDisplayMode aMaskDisplayMode, const TSize &aMaskSize,TBool aInvertMask,
+ CGraphicsContext::TDrawMode aDrawMode, TInt aShadowMode) = 0;
+ };
+
+#endif//__BMALPHABLEND_H__