epoc32/include/bitstd.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.
williamr@2
     1
// Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
williamr@2
     2
// All rights reserved.
williamr@2
     3
// This component and the accompanying materials are made available
williamr@4
     4
// under the terms of "Eclipse Public License v1.0"
williamr@2
     5
// which accompanies this distribution, and is available
williamr@4
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
williamr@2
     7
//
williamr@2
     8
// Initial Contributors:
williamr@2
     9
// Nokia Corporation - initial contribution.
williamr@2
    10
//
williamr@2
    11
// Contributors:
williamr@2
    12
//
williamr@2
    13
// Description:
williamr@2
    14
//
williamr@2
    15
williamr@2
    16
#ifndef __BITSTD_H__
williamr@2
    17
#define __BITSTD_H__
williamr@2
    18
williamr@2
    19
#include <e32std.h>
williamr@2
    20
#include <gdi.h>
williamr@2
    21
#include <fbs.h>
williamr@2
    22
#include <bitbase.h>
williamr@2
    23
williamr@4
    24
#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
williamr@4
    25
#include <bitgdi/bitgcextradata.h>
williamr@4
    26
#endif
williamr@4
    27
williamr@2
    28
// For use when testing the code, allows the fast blending to be disabled so back to back comparisons
williamr@2
    29
// can done be to check either timing or exact output.
williamr@2
    30
//#define __ALLOW_FAST_BLEND_DISABLE__
williamr@2
    31
williamr@2
    32
/**
williamr@2
    33
 @publishedAll
williamr@2
    34
 @released 
williamr@2
    35
*/
williamr@2
    36
class CFbsBitGcFont : public CFbsFont
williamr@2
    37
	{
williamr@2
    38
public:
williamr@2
    39
	IMPORT_C CFbsBitGcFont();
williamr@2
    40
	IMPORT_C virtual ~CFbsBitGcFont();
williamr@2
    41
	IMPORT_C CBitmapFont* Address() const;
williamr@2
    42
	IMPORT_C TInt Duplicate(TInt aHandle);
williamr@2
    43
	IMPORT_C void Reset();
williamr@2
    44
	IMPORT_C void operator=(const CFbsBitGcFont& aFont);
williamr@2
    45
protected:
williamr@2
    46
	TBool iCopy;
williamr@2
    47
	};
williamr@2
    48
williamr@2
    49
williamr@2
    50
/**
williamr@2
    51
A bitmap managed by the font and bitmap server.
williamr@2
    52
@publishedAll
williamr@2
    53
@released 
williamr@2
    54
*/
williamr@2
    55
class CFbsBitGcBitmap : public CFbsBitmap
williamr@2
    56
williamr@2
    57
	{
williamr@2
    58
public:
williamr@2
    59
	IMPORT_C CBitwiseBitmap* Address() const;
williamr@2
    60
	IMPORT_C void LockHeap() const;
williamr@2
    61
	IMPORT_C void UnlockHeap() const;
williamr@2
    62
	};
williamr@2
    63
williamr@2
    64
/**
williamr@2
    65
 @publishedAll
williamr@2
    66
 @released 
williamr@2
    67
*/
williamr@2
    68
class TEllipse
williamr@2
    69
	{
williamr@2
    70
public:
williamr@2
    71
	/**	
williamr@2
    72
	Enumeration for the ellipse production life cycle
williamr@2
    73
	*/
williamr@2
    74
	enum TEllipseStatus
williamr@2
    75
		{
williamr@2
    76
		/**
williamr@2
    77
		Ellipse has been initialised but has no area
williamr@2
    78
		*/
williamr@2
    79
		EInitialised,
williamr@2
    80
		/**
williamr@2
    81
		The ellipse is drawn as two parabolas. These are in two sectors, the top and bottom
williamr@2
    82
		half of the rectangle. The first sector means the top parabola has been produced.
williamr@2
    83
		*/
williamr@2
    84
		EFirstSector,
williamr@2
    85
		/**
williamr@2
    86
		The parabola that occupies the bottom half of the rectangle has been produced. 
williamr@2
    87
		*/
williamr@2
    88
		ESecondSector,
williamr@2
    89
		/**
williamr@2
    90
		The ellipse is complete
williamr@2
    91
		*/
williamr@2
    92
		EComplete,
williamr@2
    93
		/**
williamr@2
    94
		The ellipse has either a height or width of two units or less
williamr@2
    95
		and so takes the appearance of a line
williamr@2
    96
		*/
williamr@2
    97
		ELine
williamr@2
    98
		};
williamr@2
    99
public:
williamr@2
   100
	IMPORT_C void Construct(const TRect& aRect);
williamr@2
   101
	IMPORT_C TBool SingleStep(TPoint& aTopLeft,TPoint& aTopRight,TPoint& aBottomLeft,TPoint& aBottomRight);
williamr@2
   102
	IMPORT_C TBool NextStep(TPoint& aTopLeft,TPoint& aTopRight,TPoint& aBottomLeft,TPoint& aBottomRight);
williamr@2
   103
	IMPORT_C TPoint Intersection(const TRect& aRect,const TPoint& aPoint);
williamr@2
   104
protected:
williamr@2
   105
	IMPORT_C TBool Output(TPoint& aTopLeft,TPoint& aTopRight,TPoint& aBottomLeft,TPoint& aBottomRight);
williamr@2
   106
protected:
williamr@2
   107
	TEllipseStatus iStatus;
williamr@2
   108
	TInt iA;
williamr@2
   109
	TInt iB;
williamr@2
   110
	TInt64 iASquared;
williamr@2
   111
	TInt64 iBSquared;
williamr@2
   112
	TInt64 iASquBSqu;
williamr@2
   113
	TInt iX;
williamr@2
   114
	TInt iY;
williamr@2
   115
	TInt iXAdj;
williamr@2
   116
	TInt iYAdj;
williamr@2
   117
	TPoint iOffset;
williamr@2
   118
	TInt64 iD1;
williamr@2
   119
	TInt64 iD2;
williamr@2
   120
	};
williamr@2
   121
williamr@2
   122
/**
williamr@2
   123
 @publishedAll
williamr@2
   124
 @released 
williamr@2
   125
*/
williamr@2
   126
class CPolygonFiller : public CBase
williamr@2
   127
williamr@2
   128
	{
williamr@2
   129
public:
williamr@2
   130
williamr@2
   131
	/**
williamr@2
   132
	Describes how pixels are to be displayed in the polygon. aUsage should be select to
williamr@2
   133
	one of these values before CPolygonFiller::Construct is used.
williamr@2
   134
	*/
williamr@2
   135
	enum TUsage
williamr@2
   136
		{
williamr@2
   137
		/**
williamr@2
   138
		A request for all pixel runs in sequential order
williamr@2
   139
		*/
williamr@2
   140
		EGetAllPixelRunsSequentially,
williamr@2
   141
		/**
williamr@2
   142
		A request for all pixel runs in sequential order but only for specified lines.
williamr@2
   143
		*/
williamr@2
   144
		EGetPixelRunsSequentiallyForSpecifiedScanLines
williamr@2
   145
		};
williamr@2
   146
public:
williamr@2
   147
	IMPORT_C CPolygonFiller();
williamr@2
   148
	IMPORT_C ~CPolygonFiller();
williamr@2
   149
	IMPORT_C void Construct(const CArrayFix<TPoint>* aPointArray,CGraphicsContext::TFillRule aFillRule,TUsage aUsage=EGetAllPixelRunsSequentially); // N.B. this cannot fail
williamr@2
   150
	IMPORT_C void Construct(const TPoint* aPointList,TInt aNumPoints, CGraphicsContext::TFillRule aFillRule, TUsage aUsage=EGetAllPixelRunsSequentially); // N.B. this cannot fail
williamr@2
   151
	IMPORT_C void Reset();
williamr@2
   152
	IMPORT_C void GetNextPixelRun(TBool& aExists, TInt& aScanLine, TInt& aStart, TInt& aEnd);
williamr@2
   153
	IMPORT_C void GetNextPixelRunOnSpecifiedScanLine(TBool& aExists, TInt aScanLine, TInt& aStart, TInt& aEnd);
williamr@2
   154
private: // data-types for the fast algorithm
williamr@2
   155
	struct SFastEdge
williamr@2
   156
		{
williamr@2
   157
		TInt upperVertex;
williamr@2
   158
		TInt lowerVertex;
williamr@2
   159
		TInt firstVertex;
williamr@2
   160
		};
williamr@2
   161
	struct SFastScanLineIntersection;
williamr@2
   162
	struct SFastActiveEdge
williamr@2
   163
		{
williamr@2
   164
		SFastEdge* edgePtr;
williamr@2
   165
		TLinearDDA lineGenerator;
williamr@2
   166
		SFastScanLineIntersection* scanLineIntersectionPtr;
williamr@2
   167
		};
williamr@2
   168
	struct SFastScanLineIntersection
williamr@2
   169
		{
williamr@2
   170
		TInt firstPixel;
williamr@2
   171
		TInt lastPixel;
williamr@2
   172
		SFastActiveEdge* activeEdgePtr;
williamr@2
   173
		};
williamr@2
   174
private: // data-types for the slow algorithm
williamr@2
   175
	struct SSlowScanLineIntersection
williamr@2
   176
		{
williamr@2
   177
		TInt firstPixel;
williamr@2
   178
		TInt lastPixel;
williamr@2
   179
		TInt firstVertexOfEdge;
williamr@2
   180
		};
williamr@2
   181
private: // data-types for both algorithms
williamr@2
   182
	struct SFastData
williamr@2
   183
		{
williamr@2
   184
		TPoint* vertexList;
williamr@2
   185
		SFastEdge* edgeList;
williamr@2
   186
		SFastActiveEdge* activeEdgeList;
williamr@2
   187
		SFastScanLineIntersection* scanLineIntersectionList;
williamr@2
   188
		TInt numActiveEdges;
williamr@2
   189
		TInt numScanLineIntersections;
williamr@2
   190
		TInt nextEdgeToActivate;
williamr@2
   191
		};
williamr@2
   192
	struct SSlowData
williamr@2
   193
		{
williamr@2
   194
		enum {EStoreSize=8};
williamr@2
   195
		TLinearDDA lineGenerator;
williamr@2
   196
		SSlowScanLineIntersection scanLineIntersectionList[EStoreSize];
williamr@2
   197
		TInt numIntersectionsWithSameFirstPixelPreviouslyMet;
williamr@2
   198
		TInt numIntersectionsWithSameFirstPixelMetThisTime;
williamr@2
   199
		TInt numScanLineIntersections;
williamr@2
   200
		TBool scanLineComplete;
williamr@2
   201
		TInt firstPixelOfLastIntersectionInPrevBuffer;
williamr@2
   202
		};
williamr@2
   203
private:
williamr@2
   204
	void Construct(CGraphicsContext::TFillRule aFillRule,TUsage aUsage);
williamr@2
   205
	void FastHandleVertexIntersection(TInt& aCurrentActiveEdge, TBool aIsLowerVertex);
williamr@2
   206
	void SetFastIntersection(SFastActiveEdge& aActiveEdge, SFastScanLineIntersection& aScanLineIntersection);
williamr@2
   207
	void SlowHandleVertexIntersection(SSlowScanLineIntersection& aScanLineIntersection, TInt& aVertexStartingCurrentEdge,TBool aIsLowerVertex);
williamr@2
   208
	void JumpToCurrentScanLine(TLinearDDA& aLineGenerator, const TPoint& aUpper, const TPoint& aLower,TPoint& aStartPos, TPoint& aEndPos) const;
williamr@2
   209
	const TPoint& Point(TInt aIndex);
williamr@2
   210
private:
williamr@2
   211
	const CArrayFix<TPoint>* iPointArray; // not owned by the class
williamr@2
   212
	const TPoint* iPointList; // not owned by the class
williamr@2
   213
	CGraphicsContext::TFillRule iFillRule;
williamr@2
   214
	TBool iUseFastAlgorithm;
williamr@2
   215
	TInt iNumVertexes;
williamr@2
   216
	TBool iToggler; // used by EAlternate fill-rule
williamr@2
   217
	TInt iNestingLevel; // used by EWinding fill-rule
williamr@2
   218
	TInt iScanLineIntersection;
williamr@2
   219
	TInt iRightMostPixelOnScanLine;
williamr@2
   220
	TInt iFirstVertex;
williamr@2
   221
	TBool iPolygonIsAllHorizontal;
williamr@2
   222
	TInt iFirstScanLine;
williamr@2
   223
	TInt iLastScanLine;
williamr@2
   224
	TInt iCurrentScanLine;
williamr@2
   225
	SFastData iFastData;
williamr@2
   226
	SSlowData iSlowData;
williamr@2
   227
private:
williamr@2
   228
	friend class TCompareEdgesUpperY;
williamr@2
   229
	friend class TCompareActiveEdgesFirstVertex;
williamr@2
   230
	friend class TCompareScanLineIntersectionsFirstPixel;
williamr@2
   231
	friend class TSwapEdges;
williamr@2
   232
	friend class TSwapActiveEdges;
williamr@2
   233
	friend class TSwapScanLineIntersections;
williamr@2
   234
	};
williamr@2
   235
williamr@2
   236
class CFbsDevice;
williamr@4
   237
class CFbsDrawDevice;
williamr@2
   238
class TOpenFontCharMetrics;
williamr@2
   239
class CGraphicsAccelerator;
williamr@2
   240
class CWsBitmap;
williamr@2
   241
class MFastBlend;
williamr@4
   242
class CFbsRasterizer;
williamr@4
   243
class CFbsBitGcExtraData;
williamr@2
   244
williamr@2
   245
/** 
williamr@2
   246
Concrete implementation of a bitmapped graphics context.
williamr@2
   247
williamr@2
   248
The class provides new functionality, and implementations of the pure virtual 
williamr@2
   249
functions defined in CGraphicsContext and CBitmapContext. 
williamr@2
   250
@publishedAll
williamr@2
   251
@released
williamr@2
   252
*/
williamr@2
   253
class CFbsBitGc : public CBitmapContext
williamr@2
   254
	{
williamr@2
   255
public:
williamr@2
   256
williamr@2
   257
williamr@2
   258
/** Defines possible rotation values. */
williamr@2
   259
	enum TGraphicsOrientation
williamr@2
   260
		{
williamr@2
   261
	/** Normal orientation is supported. */
williamr@2
   262
		EGraphicsOrientationNormal,
williamr@2
   263
	/** A 90 degree rotation is supported. */
williamr@2
   264
		EGraphicsOrientationRotated90,
williamr@2
   265
	/** A 180 degree rotation is supported. */
williamr@2
   266
		EGraphicsOrientationRotated180,
williamr@2
   267
	/** A 270 degree rotation is supported. */
williamr@2
   268
		EGraphicsOrientationRotated270
williamr@2
   269
		};
williamr@2
   270
public:
williamr@2
   271
	IMPORT_C static CFbsBitGc* NewL();
williamr@2
   272
	IMPORT_C virtual ~CFbsBitGc();
williamr@2
   273
	IMPORT_C void Activate(CFbsDevice* aDevice);
williamr@2
   274
	IMPORT_C void ActivateNoJustAutoUpdate(CFbsDevice* aDevice);
williamr@2
   275
	IMPORT_C void BitBlt(const TPoint& aPoint,const CFbsBitGc& aGc);
williamr@2
   276
	IMPORT_C void BitBlt(const TPoint& aPoint,const CFbsBitGc& aGc,const TRect& aSourceRect);
williamr@2
   277
	IMPORT_C void BitBlt(const TPoint& aPoint,const CFbsBitmap* aBitmap);
williamr@2
   278
	IMPORT_C void BitBlt(const TPoint& aPoint,const CFbsBitmap* aBitmap,const TRect& aSourceRect);
williamr@2
   279
	IMPORT_C void BitBltMasked(const TPoint& aPoint,const CFbsBitmap* aBitmap,const TRect& aSourceRect,const CFbsBitmap* aMaskBitmap,TBool aInvertMask);
williamr@2
   280
	IMPORT_C void CancelClipping();
williamr@2
   281
	IMPORT_C void CancelClippingRect();
williamr@2
   282
	IMPORT_C void CancelClippingRegion();
williamr@2
   283
	IMPORT_C void Clear();
williamr@2
   284
	IMPORT_C void Clear(const TRect& aRect);
williamr@2
   285
	IMPORT_C void CopyRect(const TPoint& aOffset,const TRect& aRect);
williamr@2
   286
	IMPORT_C void CopySettings(const CFbsBitGc& aGc);
williamr@2
   287
	IMPORT_C CGraphicsDevice* Device() const;
williamr@2
   288
	IMPORT_C void DiscardBrushPattern();
williamr@2
   289
	IMPORT_C void DiscardFont();
williamr@2
   290
	IMPORT_C void DrawArc(const TRect& aRect,const TPoint& aStart,const TPoint& aEnd);
williamr@2
   291
	IMPORT_C void DrawPie(const TRect& aRect,const TPoint& aStart,const TPoint& aEnd);
williamr@2
   292
	IMPORT_C void DrawBitmap(const TPoint& aTopLeft,const CFbsBitmap* aSource);
williamr@2
   293
	IMPORT_C void DrawBitmap(const TRect& aDestRect,const CFbsBitmap* aSource);
williamr@2
   294
	IMPORT_C void DrawBitmap(const TRect& aDestRect,const CFbsBitmap* aSource,const TRect& aSourceRect);
williamr@2
   295
	IMPORT_C void DrawBitmapMasked(const TRect& aDestRect,const CFbsBitmap* aBitmap,const TRect& aSourceRect,const CFbsBitmap* aMaskBitmap,TBool aInvertMask);
williamr@2
   296
	IMPORT_C void DrawBitmapMasked(const TRect& aDestRect,const CWsBitmap* aBitmap,const TRect& aSourceRect,const CWsBitmap* aMaskBitmap,TBool aInvertMask);
williamr@2
   297
	IMPORT_C void DrawRoundRect(const TRect& aRect,const TSize& aEllipse);
williamr@2
   298
	IMPORT_C void DrawPolyLine(const CArrayFix<TPoint>* aPointList);
williamr@2
   299
	IMPORT_C void DrawPolyLineNoEndPoint(const CArrayFix<TPoint>* aPointList);
williamr@2
   300
	IMPORT_C void DrawPolyLine(const TPoint* aPointList,TInt aNumPoints);
williamr@2
   301
	IMPORT_C void DrawPolyLineNoEndPoint(const TPoint* aPointList,TInt aNumPoints);
williamr@2
   302
	IMPORT_C TInt DrawPolygon(const CArrayFix<TPoint>* aPointList,CGraphicsContext::TFillRule aFillRule=CGraphicsContext::EAlternate);
williamr@2
   303
	IMPORT_C TInt DrawPolygon(const TPoint* aPointList,TInt aNumPoints,CGraphicsContext::TFillRule aFillRule=CGraphicsContext::EAlternate);
williamr@2
   304
	IMPORT_C void DrawEllipse(const TRect& aRect);
williamr@2
   305
	IMPORT_C void DrawLine(const TPoint& aStart,const TPoint& aEnd);
williamr@2
   306
	IMPORT_C void DrawLineTo(const TPoint& aPoint);
williamr@2
   307
	IMPORT_C void DrawLineBy(const TPoint& aVector);
williamr@2
   308
	IMPORT_C void DrawRect(const TRect& aRect);
williamr@2
   309
	IMPORT_C void DrawText(const TDesC& aText);
williamr@2
   310
	IMPORT_C void DrawText(const TDesC& aText,const TPoint& aPosition);
williamr@2
   311
	IMPORT_C void DrawText(const TDesC& aText,const TRect& aBox);
williamr@2
   312
	IMPORT_C void DrawText(const TDesC& aText,const TRect& aBox,TInt aBaselineOffset,TTextAlign aHrz=ELeft,TInt aMargin=0);
williamr@2
   313
	IMPORT_C void DrawText(const TDesC& aText,const TRect& aBox,TInt aBaselineOffset,TInt aTextWidth,TTextAlign aHrz=ELeft,TInt aMargin=0);
williamr@2
   314
	IMPORT_C void DrawTextVertical(const TDesC& aText,TBool aUp);
williamr@2
   315
	IMPORT_C void DrawTextVertical(const TDesC& aText,const TPoint& aPosition,TBool aUp);
williamr@2
   316
	IMPORT_C void DrawTextVertical(const TDesC& aText,const TRect& aBox,TBool aUp);
williamr@2
   317
	IMPORT_C void DrawTextVertical(const TDesC& aText,const TRect& aBox,TInt aBaselineOffset,TBool aUp,TTextAlign aVert=ELeft,TInt aMargin=0);
williamr@2
   318
	IMPORT_C void DrawTextVertical(const TDesC& aText,const TRect& aBox,TInt aBaselineOffset,TInt aTextWidth,TBool aUp,TTextAlign aVert=ELeft,TInt aMargin=0);
williamr@2
   319
	IMPORT_C void MapColors(const TRect& aRect,const TRgb* aColors,TInt aNumPairs=2,TBool aMapForwards=ETrue);
williamr@2
   320
	IMPORT_C void MoveTo(const TPoint& aPoint);
williamr@2
   321
	IMPORT_C void MoveBy(const TPoint& aVector);
williamr@2
   322
	IMPORT_C void OrientationsAvailable(TBool aOrientation[4]);
williamr@2
   323
	IMPORT_C void Plot(const TPoint& aPoint);
williamr@2
   324
	IMPORT_C void RectDrawnTo(TRect& aRect);
williamr@2
   325
	IMPORT_C void Reset();
williamr@2
   326
	IMPORT_C void Resized();
williamr@2
   327
	IMPORT_C void SetBrushColor(const TRgb& aColor);
williamr@2
   328
	IMPORT_C void SetBrushOrigin(const TPoint& aOrigin);
williamr@2
   329
	IMPORT_C void SetBrushStyle(TBrushStyle aBrushStyle);
williamr@2
   330
	IMPORT_C void SetClippingRegion(const TRegion* aRegion);
williamr@2
   331
	IMPORT_C void SetClippingRect(const TRect& aRect);
williamr@2
   332
	IMPORT_C void SetDitherOrigin(const TPoint& aPoint);
williamr@2
   333
	IMPORT_C void SetDrawMode(TDrawMode);
williamr@2
   334
	IMPORT_C void SetOrigin(const TPoint& aPoint=TPoint(0,0));
williamr@2
   335
	IMPORT_C void SetPenColor(const TRgb& aColor);
williamr@2
   336
	IMPORT_C void SetPenStyle(TPenStyle);
williamr@2
   337
	IMPORT_C void SetPenSize(const TSize& aSize);
williamr@2
   338
	IMPORT_C void SetCharJustification(TInt aExcessWidth,TInt aNumGaps);
williamr@2
   339
	IMPORT_C void SetWordJustification(TInt aExcessWidth,TInt aNumChars);
williamr@2
   340
	IMPORT_C void SetUnderlineStyle(TFontUnderline aUnderlineStyle);
williamr@2
   341
	IMPORT_C void SetUserDisplayMode(TDisplayMode aDisplayMode);
williamr@2
   342
	IMPORT_C void SetStrikethroughStyle(TFontStrikethrough aStrikethroughStyle);
williamr@2
   343
	IMPORT_C void SetShadowMode(TBool aShadowMode = EFalse);
williamr@2
   344
	inline void SetFadeMode(TBool aFadeMode = EFalse);			//Deprecated
williamr@2
   345
	inline void SetFadingParameters(TUint8 aBlackMap = 0);		//Deprecated
williamr@2
   346
	IMPORT_C void SetFaded(TBool aFaded);		//Virtual from CBitmapContext
williamr@2
   347
	IMPORT_C void SetFadingParameters(TUint8 aBlackMap,TUint8 aWhiteMap);	//Virtual from CBitmapContext
williamr@2
   348
	IMPORT_C TBool SetOrientation(TGraphicsOrientation aOrientation);
williamr@2
   349
	IMPORT_C void ShadowArea(const TRegion* aRegion);
williamr@2
   350
	IMPORT_C void FadeArea(const TRegion* aRegion);
williamr@2
   351
	IMPORT_C void UpdateJustification(const TDesC& aText);
williamr@2
   352
	IMPORT_C void UpdateJustificationVertical(const TDesC& aText,TBool aUp);
williamr@2
   353
	IMPORT_C void UseBrushPattern(const CFbsBitmap* aBitmap);
williamr@2
   354
	IMPORT_C TInt UseBrushPattern(TInt aFbsBitmapHandle);
williamr@2
   355
	IMPORT_C void UseFont(const CFont* aFont);
williamr@2
   356
	IMPORT_C TInt UseFont(TInt aFontHandle);
williamr@2
   357
	IMPORT_C void UseFontNoDuplicate(const CFbsBitGcFont* aFont);
williamr@2
   358
	IMPORT_C TBool IsBrushPatternUsed() const;
williamr@2
   359
	IMPORT_C TBool IsFontUsed() const;
williamr@2
   360
	inline static TInt16 Load16(const TUint8* aPtr) { return TInt16(aPtr[0]+(aPtr[1]<<8)); }
williamr@2
   361
	IMPORT_C TInt AlphaBlendBitmaps(const TPoint& aDestPt,
williamr@2
   362
									const CFbsBitmap* aSrcBmp1,
williamr@2
   363
									const CFbsBitmap* aSrcBmp2,
williamr@2
   364
									const TRect& aSrcRect1,
williamr@2
   365
									const TPoint& aSrcPt2,
williamr@2
   366
									const CFbsBitmap* aAlphaBmp,
williamr@2
   367
									const TPoint& aAlphaPt);
williamr@2
   368
	IMPORT_C TInt AlphaBlendBitmaps(const TPoint& aDestPt,
williamr@2
   369
									const CFbsBitmap* aSrcBmp,
williamr@2
   370
									const TRect& aSrcRect,
williamr@2
   371
									const CFbsBitmap* aAlphaBmp,
williamr@2
   372
									const TPoint& aAlphaPt);
williamr@2
   373
	IMPORT_C void ExternalizeL(RWriteStream& aWriteStream);
williamr@2
   374
	IMPORT_C void InternalizeL(RReadStream& aReadStream);
williamr@2
   375
	IMPORT_C TInt SetClippingRegion(const TRegion& aRegion);
williamr@2
   376
williamr@2
   377
	IMPORT_C TInt AlphaBlendBitmaps(const TPoint& aDestPt,
williamr@2
   378
											const CWsBitmap* aSrcBmp,
williamr@2
   379
											const TRect& aSrcRect,
williamr@2
   380
											const CWsBitmap* aAlphaBmp,
williamr@2
   381
											const TPoint& aAlphaPt);
williamr@2
   382
	IMPORT_C TRgb BrushColor();
williamr@2
   383
	IMPORT_C TRgb PenColor();	
williamr@2
   384
	IMPORT_C void ChangeDevice(CFbsDevice* aDevice);
williamr@4
   385
	// New DrawText API's that take in extra paramemters such as context. Extensible.
williamr@4
   386
	IMPORT_C void DrawText(const TDesC& aText,const TTextParameters* aParam);
williamr@4
   387
	IMPORT_C void DrawText(const TDesC& aText,const TTextParameters* aParam,const TPoint& aPosition);
williamr@4
   388
	IMPORT_C void DrawText(const TDesC& aText,const TTextParameters* aParam,const TRect& aBox);
williamr@4
   389
	IMPORT_C void DrawText(const TDesC& aText,const TTextParameters* aParam,const TRect& aBox,TInt aBaselineOffset,TTextAlign aHrz=ELeft,TInt aMargin=0);
williamr@4
   390
	IMPORT_C void DrawText(const TDesC& aText,const TTextParameters* aParam,const TRect& aBox,TInt aBaselineOffset,TInt aTextWidth,TTextAlign aHrz=ELeft,TInt aMargin=0);
williamr@4
   391
	IMPORT_C void DrawTextVertical(const TDesC& aText,const TTextParameters* aParam,TBool aUp);
williamr@4
   392
	IMPORT_C void DrawTextVertical(const TDesC& aText,const TTextParameters* aParam,const TPoint& aPosition,TBool aUp);
williamr@4
   393
	IMPORT_C void DrawTextVertical(const TDesC& aText,const TTextParameters* aParam,const TRect& aBox,TBool aUp);
williamr@4
   394
	IMPORT_C void DrawTextVertical(const TDesC& aText,const TTextParameters* aParam,const TRect& aBox,TInt aBaselineOffset,TBool aUp,TTextAlign aVert=ELeft,TInt aMargin=0);
williamr@4
   395
	IMPORT_C void DrawTextVertical(const TDesC& aText,const TTextParameters* aParam,const TRect& aBox,TInt aBaselineOffset,TInt aTextWidth,TBool aUp,TTextAlign aVert=ELeft,TInt aMargin=0);
williamr@4
   396
	IMPORT_C void UpdateJustification(const TDesC& aText,const TTextParameters* aParam);
williamr@4
   397
	IMPORT_C void UpdateJustificationVertical(const TDesC& aText,const TTextParameters* aParam,TBool aUp);
williamr@2
   398
private:
williamr@2
   399
	CFbsBitGc();
williamr@2
   400
	void AddRect(const TRect& aRect);
williamr@2
   401
	TBool AnalyseEllipse(const TRect& rc, TPoint& srad, TPoint& erad, TInt& startq, TInt& endq, TBool* quads);
williamr@2
   402
	void BitMultiply(TUint32* aBinaryDataPtr,TInt aBitLength,TInt aMultiplier);
williamr@2
   403
	void CheckDevice() const;
williamr@2
   404
	TBool CheckDevice(const TRect& aRect) const;
williamr@2
   405
	TUint32* ClipBinaryArray(TUint32* aArray,TUint32* aArrayLimit,TInt aArrayWordWd,TInt& aDataWd,TInt& aDataHt,TPoint& aPos);
williamr@2
   406
	void ClipFillLine(TPoint,TPoint);
williamr@2
   407
	void CopyCharWord(TUint32* aBinaryDataPtr,const TUint8* aData,TInt aBitShift);
williamr@2
   408
	void CopyCharLine(TUint32* aBinaryDataPtr,TInt aBufferWords,const TUint8* aData,TInt aBitShift,TInt aCharWidth);
williamr@4
   409
	void DrawText(const TDesC& aText,const TTextParameters* aParam,const TPoint& aPosition,TTextAlign aAlignment,
williamr@2
   410
				  CFont::TTextDirection aDirection,const TRect* aBox = NULL);
williamr@2
   411
	void DoBitBlt(const TPoint& aDest,CFbsDevice* aDevice,const TRect& aSourceRect);
williamr@2
   412
	void DoBitBlt(const TPoint& aDest,CBitwiseBitmap* aBitmap,TUint32* aBase,TInt aStride,const TRect& aSourceRect);
williamr@2
   413
	void DoBitBltMasked(const TPoint& aDest,CBitwiseBitmap* aSourceBitmap,TUint32* aSourceBase,const TRect& aSourceRect,CBitwiseBitmap* aMaskBitmap,TUint32* aMaskBase,TBool aInvertMask,const TPoint& aDitherOrigin,TInt aShadowMode);
williamr@2
   414
	void DoBitBltMaskedFlicker(const TPoint& aDest,CBitwiseBitmap* aSourceBitmap,TUint32* aSourceBase,const TRect& aSourceRect,CBitwiseBitmap* aMaskBitmap,TUint32* aMaskBase,TBool aInvertMask,const TPoint& aDitherOrigin,TInt aShadowMode);
williamr@2
   415
	void DoBitBltMaskedNonFlicker(const TPoint& aDest,CBitwiseBitmap* aSourceBitmap,TUint32* aSourceBase,const TRect& aSourceRect,CBitwiseBitmap* aMaskBitmap,TUint32* aMaskBase,TBool aInvertMask,const TPoint& aDitherOrigin,TInt aShadowMode);
williamr@2
   416
	void DoBitBltMaskedNonFlickerSolid(const TPoint& aDest,CBitwiseBitmap* aSourceBitmap,TUint32* aSourceBase,const TRect& aSourceRect,CBitwiseBitmap* aMaskBitmap,TUint32* aMaskBase,TBool aInvertMask,const TPoint& aDitherOrigin,TInt aShadowMode);
williamr@2
   417
	void DoBitBltMaskedNonFlickerPatterned(const TPoint& aDest,CBitwiseBitmap* aSourceBitmap,TUint32* aSourceBase,const TRect& aSourceRect,CBitwiseBitmap* aMaskBitmap,TUint32* aMaskBase,TBool aInvertMask,const TPoint& aDitherOrigin,TInt aShadowMode);
williamr@4
   418
	void DoBitBltAlpha(const TPoint& aDest, CBitwiseBitmap* aSourceBitmap,
williamr@4
   419
					   TUint32* aSourceBase, const TRect& aSourceRect,
williamr@4
   420
					   CBitwiseBitmap* aMaskBitmap, TUint32* aMaskBase,
williamr@4
   421
					   const TPoint& aAlphaPoint, TInt aShadowMode, TBool aInvertMask);
williamr@2
   422
	void DoBitBltAlpha(const TPoint& aDestPt,
williamr@2
   423
					   const CBitwiseBitmap* aSrcBmp1,
williamr@2
   424
					   TUint32* aSrcBmpDataAddr1,
williamr@2
   425
					   const CBitwiseBitmap* aSrcBmp2,
williamr@2
   426
					   TUint32* aSrcBmpDataAddr2,
williamr@2
   427
					   const CBitwiseBitmap* aAlphaBmp,
williamr@2
   428
					   TUint32* aAlphaBmpDataAddr,
williamr@2
   429
					   const TRect& aSrcRect1,
williamr@2
   430
					   const TPoint& aSrcPt2,
williamr@2
   431
					   const TPoint& aAlphaPt,
williamr@2
   432
					   TInt aShadowMode);
williamr@2
   433
	void DoCopyRect(const TPoint&,const TRect&);
williamr@2
   434
	void DoDrawBitmap(const TRect&,CBitwiseBitmap*,TUint32* aBase,TInt aStride,const TRect&,const TPoint& aDitherOrigin);
williamr@2
   435
	void DoDrawBitmapMasked(const TRect& aDestRect,CBitwiseBitmap* aSourceBitmap,TUint32* aSourceBase,const TRect& aSourceRect,CBitwiseBitmap* aMaskBitmap,TUint32* aMaskBase,TBool aInvertMask,const TPoint& aDitherOrigin);
williamr@2
   436
	void DoDrawLine(TPoint aStart,TPoint aEnd,TBool aDrawStartPoint);
williamr@2
   437
	void DoDrawDottedWideLine(const TPoint& pt1,const TPoint& pt2,TBool drawstart,const TRect& screenrect);
williamr@2
   438
	void DoDrawSolidWideLine(const TPoint& pt1,const TPoint& pt2,TBool drawstart,const TRect& screenrect);
williamr@4
   439
	void DoDrawText(CFont::TPositionParam& aParam,const TInt aEnd);
williamr@2
   440
	void DoDrawCharacter(const TPoint& aTopLeft,const TSize& aDataSize,const TUint8* aData);
williamr@4
   441
	void DoDrawTextEx(CFont::TPositionParam& aParam,const CBitmapFont* font,const TInt aEnd, const TInt aUnderlineStrikethroughOffset);
williamr@2
   442
	void DoDrawCharacterEx(const TPoint& aTopLeft,const TSize& aDataSize,const TUint8* aData,
williamr@2
   443
		TBool aBold,TBool aItalic,TInt aSemiAscent);
williamr@4
   444
	void DoDrawCharacterAntiAliased(const TPoint& aTopLeft,const TSize& aDataSize,const TUint8* aData, const TGlyphBitmapType aGlyphType);
williamr@4
   445
	void DoDrawTextLarge(CFont::TPositionParam& aParam,const CBitmapFont* font,const TInt aEnd);
williamr@2
   446
	void DoDrawCharacterLarge(const TPoint& aTopLeft,const TSize& aDataSize,const TUint8* aData,
williamr@2
   447
		TBool aBold,TBool aItalic,TInt aSemiAscent,TInt aWidthFactor,TInt aHeightFactor);
williamr@2
   448
	void DoDrawCharacterExLarge(const TPoint& aTopLeft,const TSize& aDataSize,const TUint8* aData,
williamr@2
   449
		TBool aBold,TBool aItalic,TInt aSemiAscent,TInt aWidthFactor,TInt aHeightFactor);
williamr@2
   450
	void DoDrawCharacterMultiplied(const TPoint& aTopLeft,const TSize& aDataSize,const TUint8* aData,
williamr@2
   451
		TBool aBold,TBool aItalic,TInt aSemiAscent,TInt aWidthMultiplier,TInt aHeightMultiplier);
williamr@4
   452
	void DoDrawTextVertical(CFont::TPositionParam& aParam,const CBitmapFont* font,TBool aUp,const TInt aEnd);
williamr@2
   453
	void DoDrawCharacterVertical(const TPoint& aTopLeft,const TSize& aDataSize,const TUint8* aData,
williamr@2
   454
		TBool aBold,TBool aItalic,TInt aSemiAscent,TInt aWidthFactor,TInt aHeightFactor,TBool aUp);
williamr@4
   455
	void DoDrawCharacterVerticalAntiAliased(const TPoint& aTopLeft,const TSize& aDataSize,const TUint8* aData,TBool aUp, TGlyphBitmapType aGlyphBitmapType);
williamr@2
   456
	void DoPlot(const TPoint& pt);
williamr@2
   457
	void EllipseFill(const TRect& aRect);
williamr@2
   458
	void EllipseOutline(const TRect& aRect);
williamr@2
   459
	void EllipseOutlineWide(const TRect& aRect);
williamr@2
   460
	void GetStrikethroughMetrics(TInt& aTop,TInt& aBottom);
williamr@2
   461
	void OutputCharLine(TPoint aPrintPos,TUint32* aBuffer,TInt aDataLength,TInt aNum,TBool aBold,TInt aWidthFactor,TInt aHeightFactor);
williamr@2
   462
	void OutputCharLineMultiplied(TPoint aPrintPos,TUint32* aBuffer,TInt aDataLength,TInt aNum,TBool aBold,TInt aWidthMultiplier,TInt aHeightMultiplier);
williamr@2
   463
	void OutputCharLineVertical(TPoint aPrintPos,TUint32* aBuffer,TInt aDataLength,TInt aNum,TBool aBold,TInt aWidthFactor,TInt aHeightFactor,TBool aUp);
williamr@2
   464
	void PenAllocate();
williamr@2
   465
	void PenDrawClipped(TPoint aPoint);
williamr@2
   466
	void PenDrawDeferred(TPoint aPoint,TInt* aArray,TInt aFirstElement);
williamr@2
   467
	void PieArcOutline(const TRect& aRect,const TPoint& aStartRadius,const TPoint& aEndRadius,TBool aDoPie);
williamr@2
   468
	void PieFill(const TRect& ellrect, const TPoint& aStartIntersect, const TPoint& aEndIntersect,
williamr@2
   469
		TInt aStartQuadrant, TInt aEndQuadrant, const TBool* aQuadrants);
williamr@2
   470
	void PieShell(const TRect& ellrect, const TPoint& startradius, const TPoint& endradius,
williamr@2
   471
		const TBool* quads, TInt startquad, TInt endquad);
williamr@2
   472
	void PieTriangles(TBool aInside,const TPoint& aStart,const TPoint& aEnd);
williamr@2
   473
	void PieSliver(const TRect& ellrect,const TPoint& startradius,const TPoint& endradius,TInt quad);
williamr@2
   474
	void PolyFill(const CArrayFix<TPoint>* aPointList,TFillRule aFillRule);
williamr@2
   475
	void PolyFillLarge(const CArrayFix<TPoint>* aPointList,TFillRule aFillRule);
williamr@2
   476
	void PolyFill(const TPoint* aPointList,TInt aNumPoints,TFillRule aFillRule);
williamr@2
   477
	void PolyFillLarge(const TPoint* aPointList,TInt aNumPoints,TFillRule aFillRule);
williamr@2
   478
	void PolyOutline(const CArrayFix<TPoint>* aPointList);
williamr@2
   479
	void PolyOutline(const TPoint* aPointList,TInt aNumPoints);
williamr@2
   480
	void RectFill(const TRect& aRect);
williamr@2
   481
	void RoundRectFill(const TRect& aRect,TSize aSize);
williamr@2
   482
	void RoundRectOutline(const TRect& aRect,TSize aSize);
williamr@2
   483
	void SetupDevice() const;
williamr@2
   484
	void ShadowFadeArea(const TRegion* aRegion,TInt8 aShadowMode);
williamr@2
   485
	TBool UserClipRect(TRect& aRect);
williamr@2
   486
	CGraphicsAccelerator* GraphicsAccelerator();
williamr@2
   487
	TUint MemoryOffsetForPixelPitch(TUint aX, TDisplayMode aDisplayMode);
williamr@2
   488
	TUint32* GetScanLineOffsetPtr(CBitwiseBitmap* aSrce, TUint32*& aSlptr, TInt aLength, TPoint aPixel,TUint32* aBase, TLineScanningPosition& aLineScanningPosition, TUint aXOffset);
williamr@2
   489
	void APIExGetUnderlineMetrics(TAny*& aOutput);
williamr@2
   490
	TInt APIExSetShadowColor(TAny* aShadowColor);
williamr@2
   491
	TInt APIExGetShadowColor(TAny*& aShadowColor);
williamr@2
   492
	TInt FastBlendInterface(const CBitwiseBitmap* aSource, const CBitwiseBitmap* aMask, MFastBlend*& aFastBlend) const;
williamr@2
   493
	TInt APIExIsFbsBitGc(TAny*& aIsCFbsBitGc);
williamr@4
   494
	TDisplayMode ScanLineBufferDisplayMode(CFbsDrawDevice* aDrawDevice);
williamr@4
   495
	TInt BaselineCorrection();
williamr@4
   496
	CFbsRasterizer* PrepareRasterizerForExtendedBitmap(const CFbsBitmap& aBitmap);
williamr@4
   497
	CFbsRasterizer* PrepareRasterizerForExtendedBitmap(const CFbsBitmap& aBitmap, const TRect& aDestRect, const TPoint& aOffset);
williamr@4
   498
	CFbsRasterizer* PrepareRasterizerForExtendedBitmap(const CFbsBitmap& aBitmap, const TRect& aDestRect, const TRect& aSourceRect);
williamr@2
   499
protected:
williamr@2
   500
	/** This function should not be used by externals but must retain the
williamr@2
   501
	same ordinal number to maintain BC, thus is exported.*/
williamr@2
   502
	IMPORT_C TInt APIExtension(TUid aUid, TAny*& aOutput, TAny* aInput);
williamr@2
   503
	
williamr@2
   504
private:
williamr@2
   505
	IMPORT_C void Reserved_CGraphicsContext_2();
williamr@2
   506
williamr@2
   507
	IMPORT_C void Reserved_CBitmapContext_1();
williamr@2
   508
	IMPORT_C void Reserved_CBitmapContext_2();
williamr@2
   509
	IMPORT_C void Reserved_CBitmapContext_3();
williamr@2
   510
	
williamr@2
   511
	IMPORT_C virtual void Reserved_CFbsBitGc_1();	
williamr@2
   512
	IMPORT_C virtual void Reserved_CFbsBitGc_2();	
williamr@2
   513
	IMPORT_C virtual void Reserved_CFbsBitGc_3();	
williamr@2
   514
	IMPORT_C virtual void Reserved_CFbsBitGc_4();	
williamr@2
   515
	IMPORT_C virtual void Reserved_CFbsBitGc_5();	
williamr@2
   516
	
williamr@2
   517
private:
williamr@2
   518
	CFbsBitGcBitmap iBrushBitmap;
williamr@2
   519
	TBool iBrushUsed;
williamr@2
   520
	TRgb iBrushColor;
williamr@2
   521
	TPoint iBrushOrigin;
williamr@2
   522
	TBrushStyle iBrushStyle;
williamr@2
   523
	TRect iClipRect;
williamr@2
   524
	TRegionFix<1> iDefaultRegion;
williamr@2
   525
	const TRegion* iDefaultRegionPtr;
williamr@2
   526
	TRect iUserClipRect;
williamr@2
   527
	CFbsDevice* iDevice;
williamr@2
   528
	TPoint iDitherOrigin;
williamr@2
   529
	TInt iDotLength;
williamr@2
   530
	TInt iDotMask;
williamr@2
   531
	TInt iDotParam;
williamr@2
   532
	TInt iDotDirection;
williamr@2
   533
	TDrawMode iDrawMode;
williamr@2
   534
	TRect iDrawnTo;
williamr@2
   535
	CFbsBitGcFont iFont;
williamr@2
   536
	TInt iCharJustExcess;
williamr@2
   537
	TInt iCharJustNum;
williamr@2
   538
	TInt iWordJustExcess;
williamr@2
   539
	TInt iWordJustNum;
williamr@2
   540
	TPoint iLastPrintPosition;
williamr@2
   541
	TPoint iLinePosition;
williamr@2
   542
	TPoint iOrigin;
williamr@2
   543
	CFbsBitGcExtraData* iFbsBitGcExtraData;
williamr@2
   544
	TRgb iPenColor;
williamr@2
   545
	TPenStyle iPenStyle;
williamr@2
   546
	TSize iPenSize;
williamr@2
   547
	TInt8 iShadowMode;
williamr@2
   548
	TInt8 iAutoUpdateJustification;
williamr@2
   549
	TUint8 iFadeBlackMap;
williamr@2
   550
	TUint8 iFadeWhiteMap;
williamr@2
   551
	TFontStrikethrough iStrikethrough;
williamr@2
   552
	TFontUnderline iUnderline;
williamr@2
   553
	TDisplayMode iUserDisplayMode;
williamr@2
   554
	RRegion iClippingRegion;
williamr@2
   555
#if defined(__ALLOW_FAST_BLEND_DISABLE__)
williamr@2
   556
	TBool iFastBlendDisabled;
williamr@2
   557
#endif
williamr@2
   558
	};
williamr@2
   559
williamr@2
   560
inline void CFbsBitGc::SetFadeMode(TBool aFadeMode /*=EFalse*/)
williamr@2
   561
	{SetFaded(aFadeMode);}
williamr@2
   562
inline void CFbsBitGc::SetFadingParameters(TUint8 aBlackMap /*=0*/)
williamr@2
   563
	{SetFadingParameters(aBlackMap,255);}		//255 is the value of white map when not fading
williamr@2
   564
williamr@2
   565
#endif
williamr@4
   566