epoc32/include/graphicsaccelerator.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
parent 2 2fe1408b6811
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
     1 // Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
     2 // All rights reserved.
     3 // This component and the accompanying materials are made available
     4 // under the terms of "Eclipse Public License v1.0"
     5 // which accompanies this distribution, and is available
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
     7 //
     8 // Initial Contributors:
     9 // Nokia Corporation - initial contribution.
    10 //
    11 // Contributors:
    12 //
    13 // Description:
    14 //
    15 
    16 #ifndef __GRAPHICSACCELERATOR_H__
    17 #define __GRAPHICSACCELERATOR_H__
    18 
    19 #include <e32std.h>
    20 #include <gdi.h>
    21 
    22 //
    23 // Bitmaps
    24 //
    25 
    26 // Forward references
    27 class CFbsBitmap;
    28 class TAcceleratedBitmapSpec;
    29 
    30 /**
    31 A data structure that holds the information needed to directly access a bitmap.
    32 
    33 The bitmap can be a hardware bitmap (RHardwareBitmap), or an ordinary bitmap 
    34 (CFbsBitmap). An object of this class is filled by calling TAcceleratedBitmapSpec::GetInfo().
    35 
    36 @see RHardwareBitmap
    37 @see CFbsBitmap
    38 @see TAcceleratedBitmapSpec::GetInfo() 
    39 @publishedAll
    40 @released
    41 */
    42 class TAcceleratedBitmapInfo
    43 	{
    44 public:
    45 	/** The display mode of the bitmap. */
    46 	TDisplayMode	iDisplayMode;
    47 
    48 	/** The address of the start of the bitmap. */
    49 	TUint8*			iAddress;
    50 	
    51 	/** The width and height of the bitmap in pixels. */
    52 	TSize			iSize;
    53 	
    54 	/** The address offset (in bytes) between successive lines in a bitmap.
    55 	If the bitmap is compressed the line pitch has no meaning so this data
    56 	member is set to the negation of the compression type. In the case of
    57 	an extended bitmap it is -EProprietaryCompression. */
    58 	TInt			iLinePitch;
    59 	
    60 	/** The shift required to obtain the number of bits needed to represent one pixel
    61 	in the bitmap. The number of bits per pixel is calculated as 1 << iPixelShift.
    62 	In the case of an extended bitmap this data member is set to the bitmap type UID. */
    63 	TInt			iPixelShift;
    64 	
    65 	union
    66 		{
    67 		/** The physical address of the start of the bitmap. This is the address which a
    68 		hardware graphics accelerator will use and is zero if the bitmap is not accessible
    69 		to hardware graphics accelerators. Invalid in the case of an extended bitmap. */
    70 		TUint8*		iPhysicalAddress;
    71 		/** In the case of an extended bitmap, the size of the raw bitmap data. */
    72 		TInt		iDataSize;
    73 		};
    74 	};
    75 
    76 /**
    77 The interface to a hardware bitmap.
    78 
    79 This is a bitmap that can be drawn to by graphics acceleration hardware. It 
    80 is stored in a contiguous area of physical memory.
    81 
    82 After creating the hardware bitmap, it can be passed to CHardwareGraphicsAccelerator::NewL().
    83 
    84 @see CHardwareGraphicsAccelerator::NewL() 
    85 @publishedAll
    86 @released
    87 */
    88 class RHardwareBitmap
    89 	{
    90 	friend class CBitwiseBitmap;
    91 	friend class CFbsScreenDevice;
    92 public:
    93 
    94     /** Default constructor. */
    95 	inline RHardwareBitmap();
    96 
    97     /** Constructor taking the handle of an existing RHardwareBitmap to duplicate it. */
    98 	inline RHardwareBitmap(TInt aHandle);
    99 	
   100 	/** 
   101 	Gets the information needed for accessing a bitmap directly into TAcceleratedBitmapInfo structure.
   102 
   103 	@param aInfo On return, holds the information needed to directly access the	bitmap.
   104 	@return KErrNone if sucessful, otherwise one of the system error codes, including 
   105 	KErrUnknown if the object's type is ENoBitmap. 
   106 	*/
   107 	IMPORT_C TInt GetInfo(TAcceleratedBitmapInfo& aInfo) const;
   108 private:
   109 	IMPORT_C TInt SetAsScreenReference(TInt aScreen=-1);
   110 	IMPORT_C TInt Create(TDisplayMode aDisplayMode, TSize aSize, TUid aCreatorUid);
   111 	IMPORT_C void Destroy();
   112 public:
   113 	
   114 	/** The bitmap's handle; assigned during construction. This is used to identify 
   115 	the bitmap. */
   116 	TInt iHandle;	// Must be only member data
   117 	};
   118 
   119 	/** Default constructor. Initialises the handle to zero. */
   120 inline RHardwareBitmap::RHardwareBitmap()
   121 	: iHandle(0)
   122 	{}
   123 
   124 	/** Constructor taking the handle of an existing RHardwareBitmap to duplicate.
   125 	@param aHandle The RHardwareBitmap handle to duplicate. */
   126 inline RHardwareBitmap::RHardwareBitmap(TInt aHandle)
   127 	: iHandle(aHandle)
   128 	{}
   129 
   130 /**
   131 Maintains a count of the number of locks made on a bitmap through a TAcceleratedBitmapSpec 
   132 object.
   133 
   134 Passed as a parameter to TAcceleratedBitmapSpec::Lock() and TAcceleratedBitmapSpec::Unlock().
   135 
   136 @see TAcceleratedBitmapSpec 
   137 @publishedAll
   138 @released
   139 */
   140 class TBitmapLockCount
   141 	{
   142 	friend class TAcceleratedBitmapSpec;
   143 public:
   144 	
   145 	/** Default constructor. Initialises the lock count to zero. */
   146 	inline TBitmapLockCount() : iCount(0) {}
   147 private:
   148 	inline TInt Inc() { return iCount++; }
   149 	inline TInt Dec() { return --iCount; }
   150 private:
   151 	TInt iCount;
   152 	};
   153 
   154 
   155 /**
   156 A utility class that provides access to the contents of a bitmap.
   157 
   158 The bitmap can be a hardware bitmap (RHardwareBitmap), or an ordinary bitmap 
   159 (CFbsBitmap). An object of this class is used as a parameter by several accelerated 
   160 graphics operations, e.g. TGopBitBlt, to specify the source bitmap for the 
   161 operation. 
   162 @publishedAll
   163 @released
   164 */
   165 class TAcceleratedBitmapSpec
   166 	{
   167 public:
   168 	// Constructors
   169 	inline TAcceleratedBitmapSpec();
   170 	IMPORT_C TAcceleratedBitmapSpec(CFbsBitmap* aBitmap);
   171 	IMPORT_C TAcceleratedBitmapSpec(RHardwareBitmap aBitmap);
   172 	// Bitmap access (use with caution, see documentation)
   173 	
   174 	IMPORT_C TInt GetInfo(TAcceleratedBitmapInfo& aInfo) const;
   175 	inline void Lock(TBitmapLockCount& aCount);
   176 	inline void Lock(TBitmapLockCount& aCount,TAcceleratedBitmapInfo& aInfo);
   177 	inline void	Unlock(TBitmapLockCount& aCount);
   178 
   179 	// enums
   180 	/** Identifies the type of the bitmap.
   181 
   182 	Type() returns this value.
   183 
   184 	@see CFbsBitmap */
   185 	enum TAcceleratedBitmapType
   186 		{
   187 	/** The object was created using the default constructor, and has no type. */
   188 		ENoBitmap,
   189 	
   190 	/** The bitmap is of type CFbsBitmap.
   191 	
   192 	@see CFbsBitmap */
   193 		EFbsBitmap,
   194 	
   195 	/** The bitmap is of type RHardwareBitmap.
   196 	
   197 	@see RHardwareBitmap */
   198 		EHardwareBitmap,
   199 		};
   200 	enum TAcceleratedBitmapLock
   201 		{
   202 		EBitmapIsStatic,
   203 		EBitmapNeedsLocking,
   204 		};
   205 	// Getters
   206 	inline TAcceleratedBitmapType	Type() const;
   207 	inline TInt						Handle() const;
   208 private:
   209 	IMPORT_C void DoLock(TBitmapLockCount& aCount);
   210 	IMPORT_C void DoLock(TBitmapLockCount& aCount,TAcceleratedBitmapInfo& aInfo);
   211 	IMPORT_C void DoUnlock(TBitmapLockCount& aCount);
   212 private:
   213 	TUint8	iType;			// TAcceleratedBitmapType
   214 	TUint8	iLockStatus;	// TAcceleratedBitmapLock
   215 	TUint8	iSpare1;
   216 	TUint8	iSpare2;
   217 	TInt	iHandle;
   218 	};
   219 
   220 	/** Default constructor. 
   221 	Use one of the other constructor overloads instead. */
   222 inline TAcceleratedBitmapSpec::TAcceleratedBitmapSpec()
   223 	: iType(ENoBitmap), iLockStatus(EBitmapIsStatic)
   224 	{}
   225 
   226 	/** Prevents a bitmap from moving in memory. Lock() should be called before accessing 
   227 	the bitmap and Unlock() immediately afterwards. Although it is not necessary 
   228 	to lock and unlock some types of bitmap, it is a small overhead, and it is 
   229 	recommended that you always do it.
   230 	
   231 	If a bitmap is already locked, all uses of the Lock() and Unlock() methods 
   232 	within the same thread must use the same TBitmapLockCount object, even if 
   233 	Lock() and Unlock() are called by different instances of TAcceleratedBitmapSpec.
   234 	
   235 	@param aCount Maintains a count of the number of locks made on the bitmap. */
   236 inline void TAcceleratedBitmapSpec::Lock(TBitmapLockCount& aCount)
   237 	{ if(iLockStatus==EBitmapNeedsLocking) DoLock(aCount); }
   238 
   239 	/** Prevents a bitmap from moving in memory. Lock() should be called before accessing 
   240 	the bitmap and Unlock() immediately afterwards. Although it is not necessary 
   241 	to lock and unlock some types of bitmap, it is a small overhead, and it is 
   242 	recommended that you always do it. Also updates a TAcceleratedBitmapInfo structure 
   243 	with any information that may have changed, (typically the bitmap's memory 
   244 	address).
   245 	
   246 	If a bitmap is already locked, all uses of the Lock() and Unlock() methods 
   247 	within the same thread must use the same TBitmapLockCount object, even if 
   248 	Lock() and Unlock() are called by different instances of TAcceleratedBitmapSpec.
   249 	
   250 	@param aCount Maintains a count of the number of locks made on the bitmap.
   251 	@param aInfo On return, contains the new address of the start of the bitmap. */
   252 inline void TAcceleratedBitmapSpec::Lock(TBitmapLockCount& aCount,TAcceleratedBitmapInfo& aInfo)
   253 	{ if(iLockStatus==EBitmapNeedsLocking) DoLock(aCount,aInfo); }
   254 
   255 	/** Frees a bitmap after a call to Lock().  A call to Unlock() must be made for each corresponding
   256 	call to Lock(). This function should be called as soon as any bitmap access has finished. If, after
   257 	the Unlock() operation, no more calls to Lock() are outstanding on the bitmap, the bitmap is free to
   258 	be moved in memory again.
   259 	
   260 	If a bitmap is already locked, all uses of the Lock() and Unlock() methods 
   261 	within the same thread must use the same TBitmapLockCount object, even if 
   262 	Lock() and Unlock() are called by different instances of TAcceleratedBitmapSpec.
   263 	
   264 	@param aCount Maintains a count of the number of locks made on the bitmap. */
   265 inline void	TAcceleratedBitmapSpec::Unlock(TBitmapLockCount& aCount)
   266 	{ if(iLockStatus==EBitmapNeedsLocking) DoUnlock(aCount); }
   267 
   268 	/** Returns the type of the bitmap. The type is assigned during construction.
   269 	
   270 	@return The type of bitmap. */
   271 inline TAcceleratedBitmapSpec::TAcceleratedBitmapType TAcceleratedBitmapSpec::Type() const
   272 	{ return (TAcceleratedBitmapSpec::TAcceleratedBitmapType)iType; }
   273 
   274 	/** Returns the handle to the bitmap.
   275 	
   276 	@return The handle to the bitmap. */
   277 inline TInt TAcceleratedBitmapSpec::Handle() const
   278 	{ return iHandle; }
   279 
   280 //
   281 // Accelerator capabilities
   282 //
   283 
   284 
   285 /**
   286 Enumerates the four transparency types.
   287 
   288 ETransparentPixel and ETransparentColor are used with a pixel value or a TRgb 
   289 respectively.
   290 
   291 @see TGopTransparency
   292 @see TGraphicsAcceleratorCaps::iTransparency 
   293 @publishedAll
   294 @released
   295 */
   296 enum TTransparencyType
   297 	{
   298 	
   299 	/** Any pixel that has all bits equal to zero is treated as transparent. */
   300 	ETransparentPixelZero,
   301 	
   302 	/** Any pixel that is equal to the pixel value passed to the TGopTransparency constructor 
   303 	is treated as transparent. */
   304 	ETransparentPixel,
   305 	
   306 	/** Any pixel that is equal to the TRgb value passed to the TGopTransparency constructor 
   307 	is treated as transparent. */
   308 	ETransparentColor,
   309 	
   310 	/** In 16 bits per pixel display mode, which uses 5 bits each for red, green and 
   311 	blue, the most significant bit is an Alpha value. Alpha=0 means the pixel 
   312 	is transparent, Alpha=1 means the pixel is fully opaque. */
   313 	ETransparent1555,
   314 	};
   315 
   316 /** 
   317 Stores the capabilities of a graphics accelerator.
   318 
   319 All of the member enums except TMaskBitmapCaps define flags that are stored 
   320 as public data of type TUint. Only TMaskBitmapCaps takes sequential values, 
   321 so its values are mutually exclusive.
   322 
   323 An object of this class is returned by CGraphicsAccelerator::Capabilities() 
   324 or by GenericCapabilities(), which is implemented by CSoftwareGraphicsAccelerator 
   325 and CHardwareGraphicsAccelerator.
   326 
   327 @see CGraphicsAccelerator::Capabilities() 
   328 @publishedAll
   329 @released
   330 */
   331 class TGraphicsAcceleratorCaps
   332 	{
   333 public:
   334     /** Clipping capabilities. Used by the iClipping member.
   335 
   336     @see CGraphicsAccelerator::Operation() */
   337 	enum TClipCaps	// Bit flags
   338 		{
   339 		EClipToBitmap = 1,	// Will always clip all operations to the bitmap
   340 	
   341 	    /** The accelerator supports the Operation() methods which take clipping rectangles 
   342 	    as parameters.
   343 	
   344 	    @see CGraphicsAccelerator::Operation() */
   345 		EClipping = 2		// Is able to clip operations to a region
   346 		};
   347 
   348 /** Enumerates the capabilities relating to operations taking a bitmap mask parameter, 
   349 for instance TGopBitBltMasked. These are mutually exclusive values used by 
   350 the iMaskType member. */
   351 	enum TMaskBitmapCaps	// Enum
   352 		{
   353 	/** No masked operations are supported. */
   354 		EMaskBitmapNone = 0,
   355 	
   356 	/** The mask bitmap can be in any display mode at all. */
   357 		EMaskBitmapAnyDisplayMode,
   358 	
   359 	/** The mask bitmap must be in the same display mode as the destination bitmap. */
   360 		EMaskBitmapMatchingDisplayMode,
   361 	
   362 	/** The mask bitmap must be in EGray2 display mode. */
   363 		EMaskBitmapGray2,
   364 		};
   365 
   366 /** Bit flags for the capabilities relating to operations that use an alpha channel 
   367 (TGopBitBltAlphaChannel and TGopScaledBitBltAlphaChannel). These flags are 
   368 used by the iAlphaChannel member. */
   369 	enum TAlphaChannelCaps	//Bit flags
   370     	{
   371 	/** The accelerator can draw bitmaps with 4 bits each for the alpha value and the 
   372 	red, green and blue components. */
   373 		EAlpha4444 = 1,	// Bitmaps with 4 bits for Alpha value and Red, Green, Blue components
   374 	
   375 	/** The accelerator can draw bitmaps with 8 bits each for the alpha value and the 
   376 	red, green and blue components. */
   377 		EAlpha8888 = 2, // Bitmaps with 8 bits for Alpha value and Red, Green, Blue components
   378 	
   379 	/** The accelerator can draw bitmaps with 1 bit for the alpha value and and 5 bits 
   380 	for the red, green and blue components. */
   381 		EAlpha1555 = 4, // Bitmaps with 1 bit for Alpha value and 5 bits for Red, Green, and Blue
   382 		};
   383 
   384 /** Bit flags for the capabilities relating to operations which take an alpha bitmap 
   385 parameter, for instance TGopBitBltAlphaBitmap. These flags are used by the 
   386 iAlphaBitmap member. */
   387 	enum TAlphaBitmapCaps	//Bit flags
   388     	{
   389 	/** For 256 greyscale bitmaps, the value of each pixel in the alpha bitmap (from 
   390 	0 to 255) is used as the alpha value. */
   391 		EAlphaBitmapGray256 = 1,
   392 	
   393 	/** An EColor16M bitmap may be used as the alpha bitmap. The red, green and blue 
   394 	values for each pixel in this bitmap are used as the alpha values for the 
   395 	red, green and blue components of the corresponding pixel in the source bitmap. */
   396 		EAlphaBitmapColor16M = 2,
   397 	
   398 	/** The alpha bitmap must have the same display mode as the source bitmap. */
   399 		EAlphaBitmapMatchingMode = 4,	// Alpha bitmap must be same mode as source
   400 		};
   401 
   402 /** Indicates whether there is a restriction on the sizes of bitmaps that can be 
   403 used in bitmap patterns.
   404 
   405 This is one of the possible values for the iPatternSizes member.
   406 
   407 @see TGopFillPattern */
   408 	enum TPatternSizeCaps	//Bit flags
   409 		{
   410 	/** There is no restriction on the dimensions of bitmap patterns. */
   411 		EPatternSizeAny = 0xFFFFFFFF,
   412 		};
   413 
   414 /** Bit flags for the capabilities relating to operations that draw a fill pattern 
   415 using a bitmap, for instance TGopFilledRectWithPatern. They are used in the 
   416 iPattern member. */
   417 	enum TPatternCaps	//Bit flags
   418 		{
   419 	/** The pattern bitmap can be in any display mode. */
   420 		EPatternAnyDisplayMode = 1,			// Patterns can be in any supported display mode
   421 	
   422 	/** The pattern bitmap must be in the same display mode as the destination. */
   423 		EPatternMatchingDisplayMode = 2,	// Pattern must be in same displ mode as target
   424 	
   425 	/** The pattern bitmap must be square (width==height). */
   426 		EPatternMustBeSquare = 4,			// The pattern must be square (width==height)
   427 		};
   428 		
   429 /** Bit flags for how self-crossing polygons are filled.
   430 
   431 @see CGraphicsContext::TFillRule */
   432 	enum TPolygonCaps	// Bit flags for fill rules (see CGraphicsContext::TFillRule)
   433 		{
   434 	/** Only areas with odd winding numbers are filled. */
   435 		EPolygonFillAlternate = 1,
   436 	
   437 	/** All areas with a winding number greater than zero are filled.
   438 	
   439 	@see CGraphicsContext::TFillRule */
   440 		EPolygonFillWinding = 2,
   441 		};
   442 
   443 	 		
   444 /** Bit flags for the specifying the supported rendering orientations. 
   445 @see  CFbsBitGc::TGraphicsOrientation */
   446  	enum TOrientationCaps
   447  		{
   448  		/** Normal orientation is supported. */
   449  		EOrientationCapNormal = 1,
   450  		/** A 90 degree rotation is supported. */
   451  		EOrientationCapRotated90 = 2,
   452  		/** A 180 degree rotation is supported. */
   453  		EOrientationCapRotated180 = 4,
   454  		/** A 270 degree rotation is supported. */
   455  		EOrientationCapRotated270 = 8,
   456  		/** All orientations are supported. */ 
   457  		EOrientationCapAll = EOrientationCapNormal|EOrientationCapRotated90|EOrientationCapRotated180|EOrientationCapRotated270
   458  		};
   459 
   460  	/** The size of this class in bytes. */
   461 	TInt			iStructureSize;	// The size of this class
   462 	
   463 	/** The version number of the API. */
   464 	TInt			iVersion;		// == 1 to specify current API
   465 	
   466 	/** Optional UID to identify the vendor of the graphics accelerator. This UID can 
   467 	be used to recognise a particular accelerator, enabling code to use any custom 
   468 	graphics operations and capabilities that it knows the accelerator provides. */
   469 	TUid			iVendorUid;		// Optional ID
   470 	
   471 	/** A bit mask of the supported display modes for the bitmap passed to the graphics 
   472 	accelerator's NewL(). Uses the least significant 11 bits as flags for each 
   473 	TDisplayMode supported. For instance, to check whether the EColor256 display 
   474 	mode is available, use the expression iDisplayModes & (1 << EColor256).
   475 	
   476 	@see TDisplayMode */
   477 	TUint			iDisplayModes;	// One bit for each TDisplayMode enumeration
   478 	
   479 	/** Indicates whether the Operation() methods which take clipping rectangles as 
   480 	parameters are supported.
   481 	
   482 	@see TClipCaps */
   483 	TUint			iClipping;		// TClipCaps bit flags
   484 	
   485 	/** Specifies the display mode restrictions for bitmap masks. These are mutually 
   486 	exclusive values.
   487 	
   488 	@see TMaskBitmapCaps */
   489 	TMaskBitmapCaps	iMaskType;		// Mask type used
   490 	
   491 	/** Specifies the transparency types supported. Uses a bit flag for each TTransparencyType 
   492 	supported.
   493 	
   494 	@see TTransparencyType */
   495 	TUint			iTransparency;	// Bit flag for each TTransparencyType supported
   496 	
   497 	/** Specifies the capabilities relating to operations that use an alpha channel. Uses a bit flag for
   498 	each TAlphaChannelCaps supported.
   499 	
   500 	@see TAlphaChannelCaps */
   501 	TUint			iAlphaChannel;	// TAlphaChannelCaps bit flags
   502 	
   503 	/** Specifies the supported alpha bitmap types. Uses a bit flag for each TAlphaBitmapCaps 
   504 	supported.
   505 	
   506 	@see TAlphaBitmapCaps */
   507 	TUint			iAlphaBitmap;	// TAlphaBitmapCaps bit flags
   508 	
   509 	/** Specifies the sizes of bitmaps that can be used in bitmap patterns.
   510 	
   511 	This is a bitmask for each power of 2, or EPatternSizeAny. For example, if 
   512 	bitmaps used in patterns can only have a width or height of 16 pixels then 
   513 	this value should be set to 16. If patterns can have dimensions of 16, 32, 
   514 	64, 128 or 256, then this value would equal the sum of these, (i.e. bits 4, 
   515 	5, 6, 7 and 8 would be set).  If this value is equal to EPatternSizeAny, there
   516 	are no restrictions on the size of patterns that can be used.
   517 	
   518 	@see TPatternSizeCaps */
   519 	TUint			iPatternSizes;	// a mask bit for each power of 2, or EPatternSizeAny
   520 	
   521 	/** Specifies the supported bitmap types for fill patterns. Uses a bit flag for 
   522 	each TPatternCaps supported.
   523 	
   524 	@see TPatternCaps */
   525 	TUint			iPattern;		// TPatternCaps bit flags
   526 	
   527 	/** Specifies the supported fill rules for self crossing polygons. Uses a bit flag 
   528 	for each TPolygonCaps supported.
   529 	
   530 	@see TPolygonCaps */
   531 	TUint			iPolygon;		// TPolygonCaps bit flags
   532 	
   533  	/** 
   534  	iReserved[0] specifies the supported rendering orientations.Uses a bit flags
   535  	for each TOrientationCaps supported.	
   536  	@see TOrientationCaps 
   537  	iReserved[1]-iReserved[3] are reserved for future use. All should be set to zero.
   538  	*/
   539  	TUint			iReserved[4];
   540 	};
   541 
   542 
   543 //
   544 // TGraphicsOperation
   545 //
   546 
   547 /**
   548 Abstract base class for all graphics operations.
   549 
   550 Derived classes encapsulate all the arguments needed by a given graphics operation. 
   551 An object of one of the derived classes is passed as a parameter to CGraphicsAccelerator::Operation(). 
   552 The member functions and enum defined in this class are not used directly 
   553 in third party code.
   554 
   555 @see CGraphicsAccelerator::Operation() 
   556 @publishedAll
   557 @released
   558 */
   559 class TGraphicsOperation
   560 	{
   561 public:
   562 	enum TGopFunction
   563 		{								// Require arguments commented below here
   564 
   565 		EFilledRect,					// (TRect,TRgb)
   566 		EFilledRectUsingDrawMode,		// (TRect,TRgb,CGraphicsContext:TDrawMode)
   567 		EFilledRectWithPattern,			// (TRect,TGopFillPattern)
   568 		EInvertRect,					// (TRect)
   569 		EFadeRect,						// (TRect,TGopFadeParams)
   570 
   571 		EBitBlt,						// (TPoint,TAcceleratedBitmapSpec,TRect&)
   572 		EBitBltMasked,					// (TPoint,TAcceleratedBitmapSpec,TRect&,TAcceleratedBitmapSpec aMask)
   573 		EBitBltTransparent,				// (TPoint,TAcceleratedBitmapSpec,TRect&,TGopTransparency)
   574 		EBitBltAlphaChannel,			// (TPoint,TAcceleratedBitmapSpec,TRect&)
   575 		EBitBltAlphaBitmap,				// (TPoint,TAcceleratedBitmapSpec,TRect&,TAcceleratedBitmapSpec aAlpha)
   576 
   577 		EScaledBitBlt,					// (TRect,TAcceleratedBitmapSpec,TRect&)
   578 		EScaledBitBltMasked,			// (TRect,TAcceleratedBitmapSpec,TRect&,TAcceleratedBitmapSpec aMask)
   579 		EScaledBitBltTransparent,		// (TRect,TAcceleratedBitmapSpec,TRect&,TGopTransparency)
   580 		EScaledBitBltAlphaChannel,		// (TRect,TAcceleratedBitmapSpec,TRect&)
   581 		EScaledBitBltAlphaBitmap,		// (TRect,TAcceleratedBitmapSpec,TRect&,TAcceleratedBitmapSpec aAlpha)
   582 
   583 		EFilledPolygon,					// (TRGb aColor,CGraphicsContext::TFillRule aFillRule,TInt aNumPoints,TPoint[])
   584 		EFilledPolygonWithPattern,		// (TGopFillPattern,CGraphicsContext::TFillRule aFillRule,TInt aNumPoints,TPoint[])
   585 		EAlphaBlendTwoBitmaps,			// (TPoint,TAcceleratedBitmapSpec aSrce1,TAcceleratedBitmapSpec aSrce2,TRect&,TAcceleratedBitmapSpec aAlpha)
   586 		EAlphaBlendOneBitmap,			// (TPoint,TAcceleratedBitmapSpec aSrce,TRect&,TAcceleratedBitmapSpec aAlpha)
   587 		EChunkTest,
   588 		EVirtualAddressTest,
   589 		};
   590 public:
   591 	// Getters
   592 	inline TGopFunction Function() const	{ return iFunction; }
   593 	inline TInt Size() const				{ return iSize; }
   594 	// Utility functions 
   595 	inline TGraphicsOperation* Next() const;
   596 	inline void Append(TInt aNumBytes,TAny* aData);
   597 protected:
   598 	inline TGraphicsOperation(TGopFunction aFunction, TInt aArgSize);
   599 	inline TGraphicsOperation() {}
   600 protected:
   601 	TGopFunction iFunction;
   602 	TInt iSize;  // Total size of derived class
   603 	};
   604 
   605 inline TGraphicsOperation::TGraphicsOperation(TGopFunction aFunction, TInt aSize)
   606 	: iFunction(aFunction) , iSize(aSize) {}
   607 
   608 inline TGraphicsOperation* TGraphicsOperation::Next() const
   609 	{ return (TGraphicsOperation*)((TUint8*)this+iSize); }
   610 
   611 inline void TGraphicsOperation::Append(TInt aNumBytes,TAny* aData)
   612 	{
   613 	Mem::Copy(Next(),aData,aNumBytes);
   614 	iSize += aNumBytes;
   615 	}
   616 
   617 
   618 //
   619 // Graphics accelerator
   620 //
   621 
   622 /**
   623 Abstract base class for 2D graphics accelerators.
   624 
   625 This class can be derived from to provide accelerated implementations of some 
   626 common 2D graphics algorithms. Support for accelerated 2D graphics has been 
   627 integrated into existing classes in the Graphics API for instance CFbsBitGc, 
   628 so that existing code does not need to be altered, but a graphics accelerator 
   629 can be used directly by applications. The accelerated 2D graphics operations 
   630 may be implemented in software, hardware, or both. 
   631 @publishedAll
   632 @released
   633 */
   634 class CGraphicsAccelerator : public CBase
   635 	{
   636 public:
   637 	// Return the capabilities of this accelerator
   638 	
   639 	/** Returns the capabilities of the graphics accelerator.
   640 	
   641 	@return The capabilities of the accelerator. */
   642 	virtual const TGraphicsAcceleratorCaps* Capabilities() = 0;
   643 
   644 	// Perform a graphics operation
   645 	
   646 	/** Requests the graphics accelerator to perform a single graphics operation.
   647 	
   648 	@param aOperation An instance of a TGraphicsOperation-derived class that identifies 
   649 	the graphics operation to be performed.
   650 	@return KErrNone if successful, otherwise one of the system error codes. The 
   651 	function should return KErrNotSupported if the accelerator does not support 
   652 	the requested operation. */
   653 	virtual TInt Operation(const TGraphicsOperation& aOperation) = 0;
   654 	
   655 	/** Requests the graphics accelerator perform a single graphics operation within 
   656 	a clipping region.  This version is of Operation() is only usable if the 
   657 	accelerator capabilities returned by Capabilities() indicate that clipping to a region
   658 	is supported.
   659 	
   660 	@param aOperation An instance of a TGraphicsOperation-derived class that identifies 
   661 	the graphics operation to be performed.
   662 	@param aNumClipRects The number of rectangles in the clipping region.
   663 	@param aClipRects A pointer to the first rectangle in the clipping region.
   664 	@return KErrNone if successful, otherwise one of the system error codes. The 
   665 	function should return KErrNotSupported if the accelerator does not support 
   666 	the requested operation.
   667 	@see TGraphicsAcceleratorCaps::iClipping */
   668 	virtual TInt Operation(const TGraphicsOperation& aOperation,TInt aNumClipRects,TRect* aClipRects) = 0;
   669 	
   670 	// Process a buffer of TGraphicsOperation. (Each operation immediately follows the
   671 	// one preceding it in the buffer)
   672 	
   673 	/** Requests the graphics accelerator perform one or more graphics operations contained 
   674 	in a buffer.
   675 	
   676 	The underlying implementation may be able to process a group of graphics operations 
   677 	more efficiently than if Operation() was called for each individually.
   678 	
   679 	This function should be implemented as if Operation() was called in turn for 
   680 	each operation contained in the buffer. Each operation should be carried out 
   681 	immediately after the one preceding it. If a method returns an error, the 
   682 	length of aBuffer should be set to indicate the number of operations that 
   683 	have been successfully processed. In this case, the operation in which the 
   684 	error occurred will be indicated by the memory address &aBuffer[aBuffer.Length()].
   685 	
   686 	@param aBuffer A descriptor which holds a concatenation of graphics operations 
   687 	(TGraphicsOperation-derived objects).
   688 	@return KErrNone if successful, otherwise one of the system error codes. The 
   689 	function should return KErrNotSupported if the accelerator does not support 
   690 	any of the requested operations. */
   691 	virtual TInt Operation(TDes8& aBuffer) = 0;
   692 	
   693 	/** Requests the graphics accelerator perform one or more graphics operations within 
   694 	a clipping region.  This version is of Operation() is only usable if the 
   695 	accelerator capabilities returned by Capabilities() indicate that clipping to a region
   696 	is supported.
   697 	
   698 	The underlying implementation may be able to process a group of graphics operations 
   699 	more efficiently than if Operation() was called for each individually.
   700 	
   701 	This function should be implemented as if Operation() was called in turn for 
   702 	each operation contained in the buffer. Each operation should be carried out 
   703 	immediately after the one preceding it. If a method returns an error, the 
   704 	length of aBuffer should be set to indicate the number of operations that 
   705 	have been successfully processed. In this case, the operation in which the 
   706 	error occurred will be indicated by the memory address &aBuffer[aBuffer.Length()].
   707 	
   708 	@param aBuffer A descriptor which holds a concatenation of graphics operations 
   709 	(TGraphicsOperation objects).
   710 	@param aNumClipRects The number of rectangles in the clipping region.
   711 	@param aClipRects A pointer to the first rectangle in the clipping region.
   712 	@return KErrNone if successful, otherwise one of the system error codes. The 
   713 	function should return KErrNotSupported if the accelerator does not support 
   714 	any of the requested operations.
   715 	@see TGraphicsAcceleratorCaps::iClipping */
   716 	virtual TInt Operation(TDes8& aBuffer,TInt aNumClipRects,TRect* aClipRects) = 0;
   717 public:
   718 	// Reserved virtual functions for future use
   719 	virtual void Reserved_1() = 0;
   720 	virtual void Reserved_2() = 0;
   721 	virtual void Reserved_3() = 0;
   722 	virtual void Reserved_4() = 0;
   723 	};
   724 
   725 
   726 
   727 /**
   728 A factory for creating 2D graphics accelerator objects whose graphics operations 
   729 are implemented in software.
   730 
   731 Objects of derived classes can write to all types of bitmap, not just hardware 
   732 bitmaps. Note that graphics accelerators may support only a subset of all 
   733 graphics operations. 
   734 @publishedAll
   735 @released
   736 */
   737 class CSoftwareGraphicsAccelerator : public CGraphicsAccelerator
   738 	{
   739 public:
   740 	// Create a new CSoftwareGraphicsAccelerator for use with a given bitmap
   741 	IMPORT_C static CSoftwareGraphicsAccelerator* NewL(CFbsBitmap* aBitmap);
   742 
   743 	// Get the non-bitmap-specific capabilities of the hardware accelerator.
   744 	IMPORT_C static const TGraphicsAcceleratorCaps* GenericCapabilities();
   745 public:
   746 	// From CGraphicsAccelerator
   747 	virtual const TGraphicsAcceleratorCaps* Capabilities() = 0;
   748 	virtual TInt Operation(const TGraphicsOperation& aOperation) = 0;
   749 	virtual TInt Operation(const TGraphicsOperation& aOperation,TInt aNumClipRects,TRect* aClipRects) = 0;
   750 	virtual TInt Operation(TDes8& aBuffer) = 0;
   751 	virtual TInt Operation(TDes8& aBuffer,TInt aNumClipRects,TRect* aClipRects) = 0;
   752 	// From CGraphicsAccelerator
   753 	virtual void Reserved_1() = 0;
   754 	virtual void Reserved_2() = 0;
   755 	virtual void Reserved_3() = 0;
   756 	virtual void Reserved_4() = 0;
   757 	};
   758 
   759 
   760 /**
   761 A factory for creating 2D graphics accelerator objects whose graphics operations 
   762 are implemented in hardware, software or a mixture of both.
   763 
   764 Objects of derived classes can only write to hardware bitmaps (RHardwareBitmap). 
   765 Note that graphics accelerators may support only a subset of all graphics 
   766 operations.
   767 
   768 @see RHardwareBitmap 
   769 @publishedAll
   770 @released
   771 */
   772 class CHardwareGraphicsAccelerator : public CGraphicsAccelerator
   773 	{
   774 public:
   775 	/**
   776 	Create a new CHardwareGraphicsAccelerator for use with a given hardware bitmap.
   777 	
   778 	Do not use, link against scdv.lib.
   779 	
   780 	@param aBitmap A bitmap that can be drawn by graphics acceleration hardware. 
   781 	               It can be any bitmap.
   782 	@return Reference to hardware graphics accelerator object.
   783 	*/
   784 	IMPORT_C static CHardwareGraphicsAccelerator* NewL(RHardwareBitmap aBitmap);
   785 	
   786 	/**
   787 	Gets the generic capabilities of the accelerator, including the supported display modes 
   788 	for the bitmap passed to NewL().
   789 	
   790 	Do not use, link against scdv.lib.
   791 	
   792 	@return Generic capabilities for software graphics accelerators.	
   793 	*/
   794 	IMPORT_C static const TGraphicsAcceleratorCaps* GenericCapabilities();
   795 public:
   796 	// From CGraphicsAccelerator
   797 	virtual const TGraphicsAcceleratorCaps* Capabilities() = 0;
   798 	virtual TInt Operation(const TGraphicsOperation& aOperation) = 0;
   799 	virtual TInt Operation(const TGraphicsOperation& aOperation,TInt aNumClipRects,TRect* aClipRects) = 0;
   800 	virtual TInt Operation(TDes8& aBuffer) = 0;
   801 	virtual TInt Operation(TDes8& aBuffer,TInt aNumClipRects,TRect* aClipRects) = 0;
   802 	// From CGraphicsAccelerator
   803 	virtual void Reserved_1() = 0;
   804 	virtual void Reserved_2() = 0;
   805 	virtual void Reserved_3() = 0;
   806 	virtual void Reserved_4() = 0;
   807 	};
   808 
   809 //
   810 // Classes used as arguments to graphics operations
   811 //
   812 
   813 /**
   814 A pattern represented by a bitmap that is used by a graphics accelerator to 
   815 fill a rectangle or polygon.
   816 
   817 An object of this class is specified when constructing a TGopFilledRectWithPattern 
   818 or TGopFilledPolygonWithPattern. The types and sizes of fill pattern bitmaps 
   819 supported by the accelerator are given by TGraphicsAcceleratorCaps::iPattern 
   820 and TGraphicsAcceleratorCaps::iPatternSizes respectively.
   821 
   822 @see TGopFilledRectWithPattern
   823 @see TGopFilledPolygonWithPattern
   824 @see TGraphicsAcceleratorCaps::iPatternSizes
   825 @see TGraphicsAcceleratorCaps::iPattern 
   826 @publishedAll
   827 @released
   828 */
   829 class TGopFillPattern
   830 	{
   831 public:
   832 	
   833 	/** Provides a handle to the bitmap, and other information needed to draw it. */
   834 	TAcceleratedBitmapSpec	iBitmap;
   835 	
   836 	/** The origin of the pattern. This is the position at which to draw the pixel at 
   837 	the top left hand corner of the bitmap around which copies of the bitmap are 
   838 	"tiled" to form the pattern. It is relative to the top left hand corner of 
   839 	the rectangle being filled, so specify 0,0 if you want the bitmaps drawn flush 
   840 	with the top and left hand sides of the rectangle. */
   841 	TPoint					iOrigin;
   842 	};
   843 
   844 /**
   845 Specifies the amount of fading for all the pixels in a rectangular area.
   846 
   847 Fading changes colours so that they are closer to white or closer to black. 
   848 To make colours whiter, increase iOffset; to use a smaller range of colours, 
   849 reduce iScale. Fading uses the following formula (where C is a red, green 
   850 or blue value in a TRgb):
   851 
   852 colour component C = ( ( iScale * C ) / 256 )+iOffset;
   853 
   854 For example:
   855 - to fade to white, specify iScale=128, iOffset=128
   856 - to fade to black, specify iScale=128, iOffset=0
   857 - for no change, specify iScale=256, iOffset=0
   858 
   859 An object of this class is specified when constructing a TGopFadeRect.
   860 
   861 @see TGopFadeRect
   862 @publishedAll
   863 @released
   864 */
   865 class TGopFadeParams	// color component C = ( ( iScale * C ) >> 8 )+iOffset;
   866 	{
   867 public:
   868 	
   869 	/** Specifies the degree of fading, maximum=256. */
   870 	TInt iScale;
   871 	
   872 	/** The fading offset. Specifies whether to fade to black or to white. */
   873 	TInt iOffset;
   874 	};
   875 
   876 /**
   877 Specifies which pixels should be treated as transparent in a bitblt operation 
   878 that supports transparency.
   879 
   880 This is used by the TGopBitBltTransparent and TGopScaledBitBltTransparent 
   881 graphics operations.
   882 
   883 For the possible transparency types, see the TTransparencyType enumeration.
   884 
   885 An object of this class is specified when constructing a TGopBitBltTransparent or
   886 TGopScaledBitBltTransparent.
   887 
   888 @see TTransparencyType
   889 @see TGopBitBltTransparent
   890 @see TGopScaledBitBltTransparent 
   891 @publishedAll
   892 @released
   893 */
   894 class TGopTransparency
   895 	{
   896 public:
   897 	
   898 	/** Constructor with a transparency type. iParam is initialised to zero.
   899 	
   900 	@param aType The transparency type. */
   901 	inline TGopTransparency(TTransparencyType aType)	: iType(aType), iParam(0) {}
   902 	
   903 	/** Constructor with a pixel value. The type is initialised to ETransparentPixel. 
   904 	Any pixel that has a value equal to aPixelValue is treated as transparent. 
   905 	aPixelValue is the bit pattern of the pixel as stored in the bitmap.
   906 	
   907 	@param aPixelValue The pixel value. */
   908 	inline TGopTransparency(TInt aPixelValue)			: iType(ETransparentPixel), iParam(aPixelValue) {}
   909 	
   910 	/** Constructor with a TRgb value. The type is initialised to ETransparentColor. 
   911 	Any pixel that has a color of aRgb is treated as transparent.
   912 	
   913 	@param aRgb The TRgb value. */
   914 	inline TGopTransparency(TRgb aRgb)					: iType(ETransparentColor), iParam(aRgb.Value()) {}
   915 	
   916 	/** Gets the colour that is treated as transparent. This is the value of iParam 
   917 	as a TRgb.
   918 	
   919 	@return The colour that is treated as transparent. */
   920 	inline TRgb Color()	const							{ return TRgb(iParam); }
   921 	
   922 	/** Gets the value of the colour as a TInt that is treated as transparent. This 
   923 	is the value of iParam.
   924 	
   925 	@return The colour that is treated as transparent. This is the bit pattern 
   926 	of the colour as stored in the bitmap. */
   927 	inline TInt Pixel()	const							{ return iParam; }
   928 public:
   929 	
   930 	/** The transparency type. */
   931 	TTransparencyType	iType;
   932 	
   933 	/** Holds the value of the colour/pixel that is treated as transparent. */
   934 	TUint32				iParam;
   935 	};
   936 
   937 
   938 //
   939 // Wrapper classes for graphics operation arguments
   940 //
   941 
   942 #ifdef __WINS__
   943 #pragma warning(disable : 4355) // Disable warning - 'this' : used in base member initializer list
   944 #endif
   945 
   946 /**
   947 An accelerated graphics operation that fills a rectangular area with a colour.
   948 
   949 The data members are all initialised on construction. Objects of this class 
   950 can be passed to a graphics accelerator's Operation() function either individually, 
   951 or in a buffer. 
   952 @publishedAll
   953 @released
   954 */
   955 class TGopFilledRect : public TGraphicsOperation
   956 	{
   957 public:
   958 	/** Constructor with a rectangle and a colour.
   959 	@param aRect The rectangle to fill.
   960 	@param aColor The fill colour. */
   961 	inline TGopFilledRect(const TRect& aRect,TRgb aColor)
   962 			: TGraphicsOperation(EFilledRect,sizeof(*this)), iRect(aRect) , iColor(aColor) {}
   963 public:
   964 	
   965 	/** The rectangle to fill. */
   966 	TRect	iRect;
   967 	
   968 	/** The fill colour. */
   969 	TRgb	iColor;
   970 	};
   971 
   972 /**
   973 An accelerated graphics operation that fills a rectangular area with a colour, 
   974 whilst performing a bitwise logical operation with the pixels in the region, 
   975 for instance AND, OR, Exclusive OR.
   976 
   977 The bitwise logical operation is specified in the draw mode. The data members 
   978 are all initialised on construction. Objects of this class can be passed to 
   979 a graphics accelerator's Operation() function either individually, or in a 
   980 buffer.
   981 @publishedAll
   982 @released
   983 */
   984 class TGopFilledRectUsingDrawMode : public TGraphicsOperation
   985 	{
   986 public:
   987 	/** Constructor with a rectangle, a colour and a draw mode.
   988 	@param aRect The rectangle to fill.
   989 	@param aColor The fill colour.
   990 	@param aDrawMode The draw mode. */
   991 	inline TGopFilledRectUsingDrawMode(const TRect& aRect,TRgb aColor,CGraphicsContext::TDrawMode aDrawMode)
   992 		: TGraphicsOperation(EFilledRectUsingDrawMode,sizeof(*this)), iRect(aRect) , iColor(aColor) , iDrawMode(aDrawMode) {}
   993 public:
   994 	
   995 	/** The rectangle to fill. */
   996 	TRect						iRect;
   997 	
   998 	/** The fill colour. */
   999 	TRgb						iColor;
  1000 	
  1001 	/** The draw mode. */
  1002 	CGraphicsContext::TDrawMode	iDrawMode;
  1003 	};
  1004 
  1005 /**
  1006 An accelerated graphics operation that fills a rectangular area with a pattern.
  1007 
  1008 The pattern consists of multiple copies of a bitmap, drawn tiled around an 
  1009 origin. Objects of this class can be passed to a graphics accelerator's Operation() 
  1010 function either individually, or in a buffer. 
  1011 
  1012 @see TGopFillPattern
  1013 @publishedAll
  1014 @released
  1015 */
  1016 class TGopFilledRectWithPattern : public TGraphicsOperation
  1017 	{
  1018 public:
  1019 	/** Constructor with a rectangle and a pattern.
  1020 	@param aRect The rectangle to fill.
  1021 	@param aPattern Specifies the handle to the bitmap to use for the pattern, 
  1022 	and the origin for the pattern. */
  1023 	inline TGopFilledRectWithPattern(const TRect& aRect,TGopFillPattern aPattern)
  1024 		: TGraphicsOperation(EFilledRectWithPattern,sizeof(*this)), iRect(aRect) , iPattern(aPattern) {}
  1025 public:
  1026 	
  1027 	/** The rectangle to fill. */
  1028 	TRect			iRect;
  1029 	
  1030 	/** Specifies the handle to the bitmap to use for the pattern and the origin for 
  1031 	the pattern. */
  1032 	TGopFillPattern iPattern;
  1033 	};
  1034 
  1035 /**
  1036 An accelerated graphics operation that inverts the colour of all pixels in 
  1037 a rectangular area.
  1038 
  1039 Objects of this class can be passed to a graphics accelerator's Operation() 
  1040 function either individually, or in a buffer. 
  1041 @publishedAll
  1042 @released
  1043 */
  1044 class TGopInvertRect : public TGraphicsOperation
  1045 	{
  1046 public:
  1047 	/** Constructor with a rectangle.
  1048 	@param aRect The rectangle in which to invert the colours. */
  1049 	inline TGopInvertRect(const TRect& aRect)
  1050 		: TGraphicsOperation(EInvertRect,sizeof(*this)), iRect(aRect) {}
  1051 public:
  1052 	
  1053 	/** The rectangle in which to invert the colours. */
  1054 	TRect	iRect;
  1055 	};
  1056 
  1057 /**
  1058 An accelerated graphics operation that fades the pixels in a rectangular area.
  1059 
  1060 Objects of this class can be passed to a graphics accelerator's Operation() 
  1061 function either individually, or in a buffer. 
  1062 @publishedAll
  1063 @released
  1064 */
  1065 class TGopFadeRect : public TGraphicsOperation
  1066 	{
  1067 public:
  1068 	/** Constructor with a rectangle and fade parameters.
  1069 	@param aRect The rectangle to fade.
  1070 	@param aFade The fade parameters. */
  1071 	inline TGopFadeRect(const TRect& aRect, const TGopFadeParams aFade)
  1072 		: TGraphicsOperation(EFadeRect,sizeof(*this)), iRect(aRect), iFade(aFade) {}
  1073 public:
  1074 	
  1075 	/** The rectangle to fade. */
  1076 	TRect			iRect;
  1077 	
  1078 	/** The fade parameters. */
  1079 	TGopFadeParams	iFade;
  1080 	};
  1081 
  1082 /**
  1083 An accelerated graphics operation that copies a rectangular region of one bitmap 
  1084 into another.
  1085 
  1086 The data members are all initialised on construction. Objects of this class 
  1087 can be passed to a graphics accelerator's Operation() function either individually, 
  1088 or in a buffer. 
  1089 @publishedAll
  1090 @released
  1091 */
  1092 class TGopBitBlt : public TGraphicsOperation
  1093 	{
  1094 public:
  1095 	/** Constructor with a position, a source bitmap handle and a rectangle.
  1096 	@param aDestination The destination for the top left hand corner of the portion 
  1097 	of the source bitmap.
  1098 	@param aSourceBitmap A handle to the source bitmap, and other information needed 
  1099 	to draw it.
  1100 	@param aSourceRect A rectangle within the source bitmap. Its coordinates are relative 
  1101 	to the top left of the source bitmap. Defines the part of the source bitmap to be copied. */
  1102 	inline TGopBitBlt(const TPoint& aDestination, TAcceleratedBitmapSpec aSourceBitmap, TRect& aSourceRect)
  1103 		: TGraphicsOperation(EBitBlt,sizeof(*this)), iDestination(aDestination), iSourceBitmap(aSourceBitmap), iSourceRect(aSourceRect) {}
  1104 public:
  1105 	
  1106 	/** The destination for the top left hand corner of the portion of the source bitmap. */
  1107 	TPoint					iDestination;
  1108 	
  1109 	/** A handle to the source bitmap, and other information needed to draw it. */
  1110 	TAcceleratedBitmapSpec	iSourceBitmap;
  1111 	
  1112 	/** A rectangle defining all or a part of the bitmap to be copied. */
  1113 	TRect					iSourceRect;
  1114 	};
  1115 
  1116 /**
  1117 An accelerated graphics operation that copies a rectangular region of one bitmap 
  1118 into another, using a third bitmap as a mask.
  1119 
  1120 The mask must be the same size as the source bitmap. The parts of the source 
  1121 bitmap that are drawn are the areas that are black in the mask.
  1122 
  1123 The data members are all initialised on construction. Objects of this class 
  1124 can be passed to a graphics accelerator's Operation() function either individually, 
  1125 or in a buffer.
  1126 
  1127 @see TGraphicsAcceleratorCaps::iMaskType 
  1128 @publishedAll
  1129 @released
  1130 */
  1131 class TGopBitBltMasked : public TGraphicsOperation
  1132 	{
  1133 public:
  1134 	/** Constructor with a position, a source bitmap handle, a rectangle and a mask bitmap handle.
  1135 	@param aDestination The destination for the top left hand corner of the portion 
  1136 	of the source bitmap.
  1137 	@param aSourceBitmap A handle to the source bitmap, and other information needed 
  1138 	to draw it.
  1139 	@param aSourceRect A rectangle within the source bitmap. Its coordinates are relative 
  1140 	to the top left of the bitmap. Defines the part of the source bitmap to be copied.
  1141 	@param aMask A handle to the mask bitmap. The parts of the source bitmap 
  1142 	that are drawn are the areas that are black in the mask bitmap. */
  1143 	inline TGopBitBltMasked(const TPoint& aDestination, TAcceleratedBitmapSpec aSourceBitmap, TRect& aSourceRect, TAcceleratedBitmapSpec aMask)
  1144 		: TGraphicsOperation(EBitBltMasked,sizeof(*this)), iDestination(aDestination), iSourceBitmap(aSourceBitmap), iSourceRect(aSourceRect), iMask(aMask) {}
  1145 public:
  1146 	
  1147 	/** The destination for the top left hand corner of the portion of the bitmap. */
  1148 	TPoint					iDestination;
  1149 	
  1150 	/** A handle to the source bitmap, and other information needed to draw it. */
  1151 	TAcceleratedBitmapSpec	iSourceBitmap;
  1152 	
  1153 	/** A rectangle defining all or a part of the bitmap to be copied. */
  1154 	TRect					iSourceRect;
  1155 	
  1156 	/** A handle to the source bitmap mask. */
  1157 	TAcceleratedBitmapSpec	iMask;
  1158 	};
  1159 
  1160 /**
  1161 An accelerated graphics operation that copies a rectangular region of one bitmap 
  1162 into another, with some transparent pixels in the bitmap.
  1163 
  1164 The data members are all initialised on construction. Objects of this class 
  1165 can be passed to a graphics accelerator's Operation() function either individually, 
  1166 or in a buffer.
  1167 
  1168 @see TGraphicsAcceleratorCaps::iTransparency 
  1169 @see TGopTransparency
  1170 @publishedAll
  1171 @released
  1172 */
  1173 class TGopBitBltTransparent : public TGraphicsOperation
  1174 	{
  1175 public:
  1176 	/** Constructor with a destination, a handle to the source bitmap, a rectangle 
  1177 	and a specification for which pixels should be treated as transparent.
  1178 	
  1179 	@param aDestination The destination for the top left hand corner of the portion 
  1180 	of the source bitmap.
  1181 	@param aSourceBitmap A handle to the source bitmap, and other information needed 
  1182 	to draw it.
  1183 	@param aSourceRect A rectangle within the source bitmap. Its coordinates are 
  1184 	relative to the top left of the bitmap. Defines the part of the source bitmap to 
  1185 	be copied.
  1186 	@param aTransparency A specification for which pixels in the source bitmap should
  1187 	be treated as transparent. */
  1188 	inline TGopBitBltTransparent(const TPoint& aDestination, TAcceleratedBitmapSpec aSourceBitmap, TRect& aSourceRect, TGopTransparency aTransparency)
  1189 		: TGraphicsOperation(EBitBltTransparent,sizeof(*this)), iDestination(aDestination), iSourceBitmap(aSourceBitmap), iSourceRect(aSourceRect), iTransparency(aTransparency) {}
  1190 public:
  1191 	
  1192 	/** The destination for the top left hand corner of the portion of the bitmap. */
  1193 	TPoint					iDestination;
  1194 	
  1195 	/** A handle to the source bitmap, and other information needed to draw it. */
  1196 	TAcceleratedBitmapSpec	iSourceBitmap;
  1197 	
  1198 	/** A rectangle defining all or a part of the bitmap to be copied. */
  1199 	TRect					iSourceRect;
  1200 	
  1201 	/** A specification for which pixels should be treated as transparent. */
  1202 	TGopTransparency		iTransparency;
  1203 	};
  1204 
  1205 /**
  1206 An accelerated graphics operation that copies a rectangular region of one bitmap 
  1207 into another, using alpha blending. 
  1208 
  1209 The alpha value is part of each pixel in the source bitmap. For instance, 
  1210 a 32 bits per pixel bitmap may have 8 bits for each of the alpha, red, green 
  1211 and blue values.
  1212 
  1213 Supported bitmap formats with an alpha-channel are given in by
  1214 TGraphicsAcceleratorCaps::iAlphaChannel.
  1215 
  1216 The data members are all initialised on construction. Objects of this class 
  1217 can be passed to a graphics accelerator's Operation() function either individually, 
  1218 or in a buffer.
  1219 
  1220 @see TGraphicsAcceleratorCaps::iAlphaChannel 
  1221 @publishedAll
  1222 @released
  1223 */
  1224 class TGopBitBltAlphaChannel : public TGraphicsOperation
  1225 	{
  1226 public:
  1227 	/** Constructor with a position, a bitmap handle and a rectangle.
  1228 	@param aDestination The destination for the top left hand corner of the portion 
  1229 	of the source bitmap.
  1230 	@param aSourceBitmap A handle to the source bitmap, and other information needed 
  1231 	to draw it.
  1232 	@param aSourceRect A rectangle within the source bitmap. Its coordinates are relative 
  1233 	to the top left of the source bitmap. Defines the part of the source bitmap to be copied. */
  1234 	inline TGopBitBltAlphaChannel(const TPoint& aDestination, TAcceleratedBitmapSpec aSourceBitmap, TRect& aSourceRect)
  1235 		: TGraphicsOperation(EBitBltAlphaChannel,sizeof(*this)), iDestination(aDestination), iSourceBitmap(aSourceBitmap), iSourceRect(aSourceRect) {}
  1236 public:
  1237 	
  1238 	/** The destination for the top left hand corner of the portion of the bitmap. */
  1239 	TPoint					iDestination;
  1240 	
  1241 	/** A handle to the source bitmap, and other information needed to access it. */
  1242 	TAcceleratedBitmapSpec	iSourceBitmap;
  1243 	
  1244 	/** A rectangle defining all or a part of the bitmap to be copied. */
  1245 	TRect					iSourceRect;
  1246 	};
  1247 
  1248 /**
  1249 An accelerated graphics operation that copies a rectangular region of one bitmap 
  1250 into another using alpha blending values provided in a third bitmap.
  1251 
  1252 The way alpha blending works is as follows: if the alpha value is the maximum, 
  1253 the source pixel is opaque, in other words, the full colour of the pixel is 
  1254 written to the destination. If the alpha value is zero, the source pixel is 
  1255 fully transparent, and the destination is left unaltered. Values in-between 
  1256 cause blending with the following formula:
  1257 
  1258 Destination = Source*Alpha/max_Alpha + Destination*(max_Alpha-Alpha)/max_Alpha
  1259 
  1260 Colour alpha-bitmaps specify red, green and blue alpha values for each pixel, 
  1261 greyscale bitmaps specify a single alpha value for each pixel. The maximum 
  1262 alpha value depends on the bitmap's display mode. For example, 255 is the 
  1263 maximum for an EGray256 or EColor16M bitmap. The maximum is less for bitmaps 
  1264 which use fewer bits per colour component.
  1265 
  1266 Supported bitmap formats than can be used as alpha bitmaps are given in 
  1267 TGraphicsAcceleratorCaps::iAlphaBitmap.
  1268 
  1269 Objects of this class can be passed to a graphics accelerator's Operation() 
  1270 function either individually, or in a buffer.
  1271 
  1272 @see TGraphicsAcceleratorCaps::iAlphaBitmap 
  1273 @publishedAll
  1274 @released
  1275 */
  1276 class TGopBitBltAlphaBitmap : public TGraphicsOperation
  1277 	{
  1278 public:
  1279 	/** Constructor with a position, two bitmap specs and a rectangle.
  1280 	@param aDestination The destination for the top left hand corner of the portion 
  1281 	of the source bitmap.
  1282 	@param aSourceBitmap A handle to the source bitmap, and other information needed 
  1283 	to draw it.
  1284 	@param aSourceRect A rectangle within the source bitmap. Its coordinates are relative 
  1285 	to the top left of the source bitmap. Defines the part of the source bitmap to be copied.
  1286 	@param aAlphaBitmap A handle to the alpha bitmap, the bitmap that contains 
  1287 	alpha blending values. */
  1288 	inline TGopBitBltAlphaBitmap(const TPoint& aDestination, TAcceleratedBitmapSpec aSourceBitmap, TRect& aSourceRect, TAcceleratedBitmapSpec aAlphaBitmap)
  1289 		: TGraphicsOperation(EBitBltAlphaBitmap,sizeof(*this)), iDestination(aDestination), iSourceBitmap(aSourceBitmap), iSourceRect(aSourceRect), iAlphaBitmap(aAlphaBitmap) {}
  1290 public:
  1291 	
  1292 	/** The destination for the top left hand corner of the portion of the source bitmap. */
  1293 	TPoint					iDestination;
  1294 	
  1295 	/** A handle to the source bitmap, and other information needed to access it. */
  1296 	TAcceleratedBitmapSpec	iSourceBitmap;
  1297 	
  1298 	/** A rectangle defining the part of the source bitmap to be copied. */
  1299 	TRect					iSourceRect;
  1300 	
  1301 	/** A handle to the alpha bitmap, the bitmap that contains alpha blending values. */
  1302 	TAcceleratedBitmapSpec	iAlphaBitmap;
  1303 	};
  1304 
  1305 /**
  1306 An accelerated graphics operation that copies a rectangular region of two bitmaps 
  1307 to a destination, using alpha blending values provided in a third bitmap to blend the 
  1308 corresponding entries in the first and second bitmaps.
  1309 
  1310 The way alpha blending works is as follows: if the alpha value is the maximum, 
  1311 the pixel from the first source is opaque, in other words, the full colour of 
  1312 the pixel is written to the destination. If the alpha value is zero, the pixel 
  1313 from the first source is fully transparent, in other words, the full colour of
  1314 the pixel in the second source is used. Values in-between cause blending with 
  1315 the following formula:
  1316 
  1317 Destination = Source1*Alpha/max_Alpha + Source2*(max_Alpha-Alpha)/max_Alpha
  1318 
  1319 Colour alpha bitmaps specify red, green and blue alpha values for each pixel, 
  1320 greyscale bitmaps specify a single alpha value for each pixel. The maximum 
  1321 alpha value depends on the bitmap's display mode. For example, 255 is the 
  1322 maximum for an EGray256 or EColor16M bitmap. The maximum is less for bitmaps 
  1323 which use fewer bits per colour component.
  1324 
  1325 Supported bitmap formats than can be used as alpha bitmaps are given in 
  1326 TGraphicsAcceleratorCaps::iAlphaBitmap.
  1327 
  1328 Objects of this class can be passed to a graphics accelerator's Operation() 
  1329 function either individually, or in a buffer.
  1330 
  1331 @see TGraphicsAcceleratorCaps::iAlphaBitmap 
  1332 @publishedAll
  1333 @released
  1334 */
  1335 class TGopAlphaBlendTwoBitmaps : public TGraphicsOperation
  1336 	{
  1337 public:
  1338 	/** 
  1339 	Constructor with a position, three bitmap specs and a rectangle.
  1340 	@param aDestination The destination for the top left hand corner of the portion 
  1341 	of the source bitmaps.
  1342 	@param aSourceBmp1 A handle to the first of the source bitmaps, and other information 
  1343 	needed to draw it.
  1344 	@param aSourceBmp2 A handle to the second of the source bitmaps, and other information 
  1345 	needed to draw it.
  1346 	@param aSourceRect A rectangle within the source bitmaps. Its coordinates are relative 
  1347 	to the top left of the bitmap. Defines the part of the bitmap to be copied.
  1348 	@param aSourcePt2 The point in the second source bitmap from which we take pixels to blend
  1349 	@param aAlphaBitmap A handle to the alpha bitmap, the bitmap that contains 
  1350 	alpha blending values.
  1351 	@param aAlphaPt The point in the alpha bitmap from which we take pixels to blend
  1352 	 */	
  1353 	inline TGopAlphaBlendTwoBitmaps(const TPoint& aDestination,TAcceleratedBitmapSpec aSourceBmp1,TAcceleratedBitmapSpec aSourceBmp2,TRect& aSourceRect,const TPoint& aSrcPt2,TAcceleratedBitmapSpec aAlphaBmp, const TPoint& aAlphaPt)
  1354 		: TGraphicsOperation(EAlphaBlendTwoBitmaps,sizeof(*this)), iDestination(aDestination), iSourceBmp1(aSourceBmp1), iSourceBmp2(aSourceBmp2), iSourceRect(aSourceRect), iSrcPt2(aSrcPt2), iAlphaBmp(aAlphaBmp), iAlphaPt(aAlphaPt) {}
  1355 public:
  1356 	
  1357 	/** The destination for the top left hand corner of the portion of the source bitmaps. */
  1358 	TPoint					iDestination;
  1359 	
  1360 	/** A handle to the first source bitmap, and other information needed to access it. */
  1361 	TAcceleratedBitmapSpec	iSourceBmp1;
  1362 	
  1363 	/** A handle to the second source bitmap, and other information needed to access it. */
  1364 	TAcceleratedBitmapSpec	iSourceBmp2;
  1365 	
  1366 	/** A rectangle defining the part of the source bitmaps to be copied. */
  1367 	TRect					iSourceRect;
  1368 	
  1369 	/** The point in the second source bitmap from which we take pixels to blend. */ 
  1370 	TPoint					iSrcPt2;
  1371 	
  1372 	/** A handle to the alpha bitmap, the bitmap that contains alpha blending values. */
  1373 	TAcceleratedBitmapSpec	iAlphaBmp;
  1374 	
  1375 	/** The point in the alpha bitmap from which we take pixels to blend. */ 
  1376 	TPoint					iAlphaPt;
  1377 	};
  1378 	
  1379 /**
  1380 An accelerated graphics operation that copies a rectangular region of a bitmap blended
  1381 with the screen image to the screen, using alpha blending values provided in an alpha bitmap 
  1382 to blend the corresponding entries in the bitmap and on the screen.
  1383 
  1384 The way alpha blending works is as follows: if the alpha value is the maximum, 
  1385 the pixel from the source bitmap is opaque, in other words, the full colour of 
  1386 the pixel is written to the destination. If the alpha value is zero, the pixel 
  1387 from the source bitmap is fully transparent, in other words, the full colour of
  1388 the pixel on the screen is used. Values in-between cause blending with the 
  1389 following formula:
  1390 
  1391 Destination = Source*Alpha/max_Alpha + Screen*(max_Alpha-Alpha)/max_Alpha
  1392 
  1393 Colour alpha bitmaps specify red, green and blue alpha values for each pixel, 
  1394 greyscale bitmaps specify a single alpha value for each pixel. The maximum 
  1395 alpha value depends on the bitmap's display mode. For example, 255 is the 
  1396 maximum for an EGray256 or EColor16M bitmap. The maximum is less for bitmaps 
  1397 which use fewer bits per colour component.
  1398 
  1399 Supported bitmap formats than can be used as alpha bitmaps are given in 
  1400 TGraphicsAcceleratorCaps::iAlphaBitmap.
  1401 
  1402 Objects of this class can be passed to a graphics accelerator's Operation() 
  1403 function either individually, or in a buffer.
  1404 
  1405 @see TGraphicsAcceleratorCaps::iAlphaBitmap 
  1406 @publishedAll
  1407 @released
  1408 */
  1409 class TGopAlphaBlendOneBitmap : public TGraphicsOperation
  1410 	{
  1411 public:
  1412 	/** 
  1413 	Constructor with a position, two bitmap specs and a rectangle.
  1414 	@param aDestination The destination for the top left hand corner of the portion 
  1415 	of the source bitmap.
  1416 	@param aSourceBmp A handle to the source bitmap, and other information needed 
  1417 	to draw it.
  1418 	@param aSourceRect A rectangle within the source bitmap. Its coordinates are relative 
  1419 	to the top left of the source bitmap. Defines the part of the source bitmap to be copied.
  1420 	@param aAlphaBitmap A handle to the alpha bitmap, the bitmap that contains 
  1421 	alpha blending values.
  1422 	@param aAlphaPt The point in the alpha bitmap from which we take pixels to blend
  1423 	 */
  1424 	
  1425 	
  1426 	inline TGopAlphaBlendOneBitmap(const TPoint& aDestination,TAcceleratedBitmapSpec aSourceBmp,TRect& aSourceRect,TAcceleratedBitmapSpec aAlphaBmp, const TPoint& aAlphaPt)
  1427 		: TGraphicsOperation(EAlphaBlendOneBitmap,sizeof(*this)), iDestination(aDestination), iSourceBmp(aSourceBmp), iSourceRect(aSourceRect), iAlphaBmp(aAlphaBmp), iAlphaPt(aAlphaPt) {}
  1428 public:
  1429 	
  1430 	/** The destination for the top left hand corner of the portion of the source bitmap. */
  1431 	TPoint					iDestination;
  1432 	
  1433 	/** A handle to the source bitmap, and other information needed to access it. */
  1434 	TAcceleratedBitmapSpec	iSourceBmp;
  1435 	
  1436 	/** A rectangle defining the part of the bitmap to be copied. */
  1437 	TRect					iSourceRect;
  1438 	
  1439 	/** A handle to the alpha bitmap, the bitmap that contains alpha blending values. */
  1440 	TAcceleratedBitmapSpec	iAlphaBmp;
  1441 	
  1442 	/** Position of the first pixel in the alpha bitmap to be used for alpha blending. */ 
  1443 	TPoint					iAlphaPt;
  1444 	};
  1445 
  1446 /**
  1447 An accelerated graphics operation that copies a rectangular region of one bitmap 
  1448 into a different sized region of another.
  1449 
  1450 The data members are all initialised on construction. Objects of this class 
  1451 can be passed to a graphics accelerator's Operation() function either individually, 
  1452 or in a buffer. 
  1453 @publishedAll
  1454 @released
  1455 */
  1456 class TGopScaledBitBlt : public TGraphicsOperation
  1457 	{
  1458 public:
  1459 	/** Constructor with a destination rectangle, a handle to the source bitmap and 
  1460 	a source rectangle.
  1461 	@param aDestination The destination for the portion of the source bitmap. If necessary, 
  1462 	the source bitmap portion is resized to fit into this rectangle.
  1463 	@param aSourceBitmap A handle to the source bitmap, and other information needed 
  1464 	to draw it.
  1465 	@param aSourceRect A rectangle within the source bitmap. Its coordinates are relative 
  1466 	to the top left of the source bitmap. Defines the part of the source bitmap to be copied. */
  1467 	inline TGopScaledBitBlt(const TRect& aDestination, TAcceleratedBitmapSpec aSourceBitmap, TRect& aSourceRect)
  1468 		: TGraphicsOperation(EScaledBitBlt,sizeof(*this)), iDestination(aDestination), iSourceBitmap(aSourceBitmap), iSourceRect(aSourceRect) {}
  1469 public:
  1470 
  1471 	/** The destination rectangle for the portion of the source bitmap. */
  1472 	TRect					iDestination;
  1473 	
  1474 	/** A handle to the source bitmap. */
  1475 	TAcceleratedBitmapSpec	iSourceBitmap;
  1476 	
  1477 	/** A rectangle defining all or a part of the source bitmap to be copied. */
  1478 	TRect					iSourceRect;
  1479 	};
  1480 
  1481 /**
  1482 An accelerated graphics operation that copies a rectangular region of one bitmap 
  1483 into a different sized region of another, using a third bitmap as a mask. 
  1484 
  1485 The mask must be the same size as the source bitmap. The parts of the source 
  1486 bitmap that are drawn are the areas that are black in the mask.
  1487 
  1488 The data members are all initialised on construction. Objects of this class 
  1489 can be passed to a graphics accelerator's Operation() function either individually, 
  1490 or in a buffer.
  1491 
  1492 @see TGraphicsAcceleratorCaps::iMaskType 
  1493 @publishedAll
  1494 @released
  1495 */
  1496 class TGopScaledBitBltMasked : public TGraphicsOperation
  1497 	{
  1498 public:
  1499 	/** Constructor with a source and destination rectangle, and handles to the source 
  1500 	and mask bitmaps.
  1501 	
  1502 	@param aDestination The destination for the portion of the source bitmap. If necessary, 
  1503 	the source bitmap portion is resized to fit into this rectangle.
  1504 	@param aSourceBitmap A handle to the source bitmap, and other information needed 
  1505 	to draw it.
  1506 	@param aSourceRect A rectangle within the source bitmap. Its coordinates are relative 
  1507 	to the top left of the source bitmap. Defines the part of the source bitmap to be copied.
  1508 	@param aMask A handle to the mask bitmap. */
  1509 	inline TGopScaledBitBltMasked(const TRect& aDestination, TAcceleratedBitmapSpec aSourceBitmap, TRect& aSourceRect, TAcceleratedBitmapSpec aMask)
  1510 		: TGraphicsOperation(EScaledBitBltMasked,sizeof(*this)), iDestination(aDestination), iSourceBitmap(aSourceBitmap), iSourceRect(aSourceRect), iMask(aMask) {}
  1511 public:
  1512 	
  1513 	/** The destination rectangle for the portion of the bitmap. */
  1514 	TRect					iDestination;
  1515 	
  1516 	/** A handle to the source bitmap. */
  1517 	TAcceleratedBitmapSpec	iSourceBitmap;
  1518 	
  1519 	/** A rectangle defining all or a part of the source bitmap to be copied. */
  1520 	TRect					iSourceRect;
  1521 	
  1522 	/** A handle to the source bitmap mask. */
  1523 	TAcceleratedBitmapSpec	iMask;
  1524 	};
  1525 
  1526 /**
  1527 An accelerated graphics operation that copies a rectangular region of one bitmap 
  1528 into a different sized region of another, with some transparent pixels in 
  1529 the source bitmap.
  1530 
  1531 The data members are all initialised on construction. Objects of this class 
  1532 can be passed to a graphics accelerator's Operation() function either individually, 
  1533 or in a buffer.
  1534 
  1535 @see TGraphicsAcceleratorCaps::iTransparency 
  1536 @see TGopTransparency 
  1537 @publishedAll
  1538 @released
  1539 */
  1540 class TGopScaledBitBltTransparent : public TGraphicsOperation
  1541 	{
  1542 public:
  1543 	/** Constructor with destination and source rectangles, a handle to the source 
  1544 	bitmap and a specification for which pixels should be treated as transparent.
  1545 	
  1546 	@param aDestination The destination for the portion of the source bitmap. If necessary, 
  1547 	the source bitmap portion is resized to fit into this rectangle.
  1548 	@param aSourceBitmap A handle to the source bitmap, and other information needed 
  1549 	to draw it.
  1550 	@param aSourceRect A rectangle within the source bitmap. Its coordinates are 
  1551 	relative to the top left of the source bitmap. Defines the part of the source bitmap to 
  1552 	be copied.
  1553 	@param aTransparency A specification for which pixels in the source bitmap should be treated as 
  1554 	transparent. */
  1555 	inline TGopScaledBitBltTransparent(const TRect& aDestination, TAcceleratedBitmapSpec aSourceBitmap, TRect& aSourceRect, TGopTransparency aTransparency)
  1556 		: TGraphicsOperation(EScaledBitBltTransparent,sizeof(*this)), iDestination(aDestination), iSourceBitmap(aSourceBitmap), iSourceRect(aSourceRect), iTransparency(aTransparency) {}
  1557 public:
  1558 	
  1559 	/** The destination rectangle for the portion of the source bitmap. */
  1560 	TRect					iDestination;
  1561 	
  1562 	/** A handle to the source bitmap. */
  1563 	TAcceleratedBitmapSpec	iSourceBitmap;
  1564 	
  1565 	/** A rectangle defining all or a part of the source bitmap to be copied. */
  1566 	TRect					iSourceRect;
  1567 	
  1568 	/** A specification for which pixels in the source bitmap should be treated as transparent. */
  1569 	TGopTransparency		iTransparency;
  1570 	};
  1571 
  1572 /**
  1573 An accelerated graphics operation that copies a rectangular region of one bitmap 
  1574 into a different sized region of another using alpha blending. The alpha value 
  1575 is part of each pixel in the source bitmap.
  1576 
  1577 Supported bitmap formats with an alpha-channel are given in by
  1578 TGraphicsAcceleratorCaps::iAlphaChannel.
  1579 
  1580 The data members are all initialised on construction. Objects of this class 
  1581 can be passed to a graphics accelerator's Operation() function either individually, 
  1582 or in a buffer.
  1583 
  1584 @see TGraphicsAcceleratorCaps::iAlphaChannel 
  1585 @publishedAll
  1586 @released
  1587 */
  1588 class TGopScaledBitBltAlphaChannel : public TGraphicsOperation
  1589 	{
  1590 public:
  1591 	/** Constructor with a destination rectangle, a handle to the source bitmap and 
  1592 	a source rectangle.
  1593 	
  1594 	@param aDestination The destination for the portion of the source bitmap. If necessary, 
  1595 	the source bitmap portion is resized to fit into this rectangle.
  1596 	@param aSourceBitmap A handle to the source bitmap, and other information needed 
  1597 	to draw it.
  1598 	@param aSourceRect A rectangle within the source bitmap. Its coordinates are relative 
  1599 	to the top left of the source bitmap. Defines the part of the source bitmap to be copied. */
  1600 	inline TGopScaledBitBltAlphaChannel(const TRect& aDestination, TAcceleratedBitmapSpec aSourceBitmap, TRect& aSourceRect)
  1601 		: TGraphicsOperation(EScaledBitBltAlphaChannel,sizeof(*this)), iDestination(aDestination), iSourceBitmap(aSourceBitmap), iSourceRect(aSourceRect) {}
  1602 public:
  1603 	
  1604 	/** The destination for the portion of the source bitmap. */
  1605 	TRect					iDestination;
  1606 	
  1607 	/** A handle to the source bitmap, and other information needed to draw it. */
  1608 	TAcceleratedBitmapSpec	iSourceBitmap;
  1609 	
  1610 	/** A rectangle defining the part of the source bitmap to be copied. */
  1611 	TRect					iSourceRect;
  1612 	};
  1613 
  1614 /**
  1615 An accelerated graphics operation that copies a rectangular region of one bitmap 
  1616 into a different sized region of another using alpha blending values provided 
  1617 in a third bitmap.
  1618 
  1619 The data members are all initialised on construction. Objects of this class 
  1620 can be passed to a graphics accelerator's Operation() function either individually, 
  1621 or in a buffer.
  1622 
  1623 @see TGraphicsAcceleratorCaps::iAlphaBitmap 
  1624 @publishedAll
  1625 @released
  1626 */
  1627 class TGopScaledBitBltAlphaBitmap : public TGraphicsOperation
  1628 	{
  1629 public:
  1630 	/** Constructor with a source and destination rectangle and two bitmap handles.
  1631 	
  1632 	@param aDestination The destination for the portion of the source bitmap. If necessary, 
  1633 	the source bitmap portion is resized to fit into this rectangle.
  1634 	@param aSourceBitmap A handle to the source bitmap, and other information needed 
  1635 	to draw it.
  1636 	@param aSourceRect A rectangle within the source bitmap. Its coordinates are relative 
  1637 	to the top left of the source bitmap. Defines the part of the source bitmap to be copied.
  1638 	@param aAlphaBitmap A handle to the bitmap that contains alpha blending values. */
  1639 	inline TGopScaledBitBltAlphaBitmap(const TRect& aDestination, TAcceleratedBitmapSpec aSourceBitmap, TRect& aSourceRect, TAcceleratedBitmapSpec aAlphaBitmap)
  1640 		: TGraphicsOperation(EScaledBitBltAlphaBitmap,sizeof(*this)), iDestination(aDestination), iSourceBitmap(aSourceBitmap), iSourceRect(aSourceRect), iAlphaBitmap(aAlphaBitmap) {}
  1641 public:
  1642 	
  1643 	/** The destination for the portion of the bitmap. */
  1644 	TRect					iDestination;
  1645 	
  1646 	/** A handle to the source bitmap, and other information needed to draw it. */
  1647 	TAcceleratedBitmapSpec	iSourceBitmap;
  1648 	
  1649 	/** A rectangle defining the part of the source bitmap to be copied. */
  1650 	TRect					iSourceRect;
  1651 	
  1652 	/** A handle to the bitmap that contains alpha blending values. */
  1653 	TAcceleratedBitmapSpec	iAlphaBitmap;
  1654 	};
  1655 
  1656 /**
  1657 An accelerated graphics operation that fills a polygon with a colour.
  1658 
  1659 AddPoints() must be called to specify the polygon to be filled. Objects of 
  1660 this class can be passed to a graphics accelerator's Operation() function 
  1661 either individually, or in a buffer.
  1662 
  1663 How a graphics accelerator can fill polygons is given by TGraphicsAcceleratorCaps::iPolygon.
  1664 
  1665 @see TGraphicsAcceleratorCaps::iPolygon 
  1666 @publishedAll
  1667 @released
  1668 */
  1669 class TGopFilledPolygon : public TGraphicsOperation
  1670 	{
  1671 public:
  1672 	/** Constructor with a fill rule and a fill colour. The number of points is initialised 
  1673 	to zero.
  1674  	
  1675 	@param aColor The fill colour.
  1676 	@param aFillRule Bit flags for how self-crossing polygons are filled. */
  1677 	inline TGopFilledPolygon(TRgb aColor, CGraphicsContext::TFillRule aFillRule)
  1678 		: TGraphicsOperation(EFilledPolygon,sizeof(*this)), iColor(aColor), iFillRule(aFillRule), iNumPoints(0) {}
  1679 	inline void AddPoints(TInt aNumPoints, TPoint* aPoints);
  1680 public:
  1681 	
  1682 	/** The fill colour. */
  1683 	TRgb						iColor;
  1684 	
  1685 	/** Bit flags for how self-crossing polygons are filled.
  1686 	
  1687 	@see CGraphicsContext::TFillRule */
  1688 	CGraphicsContext::TFillRule iFillRule;
  1689 	
  1690 	/** The number of points in the polygon. */
  1691 	TInt						iNumPoints;
  1692 	};
  1693 
  1694 /** Specifies the polygon to be filled as a number of 2D point coordinates.
  1695 
  1696 AddPoints() should only be called once the TGopFilledPolygon object has been stored
  1697 into a buffer.  There must be enough room in the buffer after the TGopFilledPolygon
  1698 object to hold aNumPoints TPoint sized structures.  This is because the points are
  1699 copied into the memory space directly following the TGopFilledPolygon object.
  1700 
  1701 @param aNumPoints The number of points in the polygon.
  1702 @param aPoints Pointer to the first point in the polygon. */
  1703 inline void TGopFilledPolygon::AddPoints(TInt aNumPoints, TPoint* aPoints)
  1704 	{ Append(aNumPoints*sizeof(TPoint),aPoints); iNumPoints += aNumPoints; }
  1705 
  1706 /** 
  1707 An accelerated graphics operation that fills a polygon with a pattern held 
  1708 in another bitmap.
  1709 
  1710 AddPoints() must be called to specify the polygon to be filled. Objects of 
  1711 this class can be passed to a graphics accelerator's Operation() function 
  1712 either individually, or in a buffer.
  1713 
  1714 @see TGraphicsAcceleratorCaps::iPolygon 
  1715 @see TGopFillPattern
  1716 @publishedAll
  1717 @released
  1718 */
  1719 class TGopFilledPolygonWithPattern : public TGraphicsOperation
  1720 	{
  1721 public:
  1722 	/** Constructor with a fill pattern and a fill rule. The number of points is initialised 
  1723 	to zero.
  1724  	
  1725 	@param aPattern The fill pattern.
  1726 	@param aFillRule Bit flags for how self-crossing polygons are filled. */
  1727 	inline TGopFilledPolygonWithPattern(TGopFillPattern aPattern, CGraphicsContext::TFillRule aFillRule)
  1728 		: TGraphicsOperation(EFilledPolygonWithPattern,sizeof(*this)), iPattern(aPattern), iFillRule(aFillRule), iNumPoints(0) {}
  1729 	inline void AddPoints(TInt aNumPoints, TPoint* aPoints);
  1730 public:
  1731 	
  1732 	/** The pattern of bitmaps that is used to fill the polygon. */
  1733 	TGopFillPattern				iPattern;
  1734 	
  1735 	/** Bit flags for how self-crossing polygons are filled.
  1736 	
  1737 	@see CGraphicsContext::TFillRule */
  1738 	CGraphicsContext::TFillRule iFillRule;
  1739 	
  1740 	/** The number of points in the polygon. */
  1741 	TInt						iNumPoints;
  1742 	};
  1743 
  1744 /** Specifies the polygon to be filled as a number of 2D point coordinates.
  1745 
  1746 AddPoints() should only be called once the TGopFilledPolygonWithPattern object has been stored
  1747 into a buffer.  There must be enough room in the buffer after the TGopFilledPolygonWithPattern
  1748 object to hold aNumPoints TPoint sized structures.  This is because the points are
  1749 copied into the memory space directly following the TGopFilledPolygonWithPattern object.
  1750 
  1751 @param aNumPoints The number of points in the polygon.
  1752 @param aPoints Pointer to the first point in the polygon. */
  1753 inline void TGopFilledPolygonWithPattern::AddPoints(TInt aNumPoints, TPoint* aPoints)
  1754 	{ Append(aNumPoints*sizeof(TPoint),aPoints); iNumPoints += aNumPoints; }
  1755 
  1756 
  1757 
  1758 #endif