os/graphics/graphicsdeviceinterface/bitgdi/sbit/GRAPHICS.CPP
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
     1 // Copyright (c) 1997-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 #include <fntstore.h>
    17 #include <bitmap.h>
    18 #include <bitstd.h>
    19 #include <bitdev.h>
    20 #include "BITPANIC.H"
    21 #include <bitdraw.h>
    22 #include <graphics/fbsrasterizer.h>
    23 #include "bitgcextradata.h"
    24 
    25 
    26 /** Clears a rectangular area.
    27 
    28 The cleared area is filled with the current brush colour.The function
    29 provides a concrete implementation of the pure virtual function
    30 CBitmapContext::Clear(const TRect& aRect). The function
    31 behaviour is the same as documented in that class. */	
    32 EXPORT_C void CFbsBitGc::Clear(const TRect& aRect)
    33     {
    34 	if (CheckDevice(aRect))
    35 		return;
    36 
    37 	TRect rcpy(aRect);
    38 	rcpy.Move(iOrigin);
    39 	if (UserClipRect(rcpy))
    40 		return;
    41 
    42 	TBrushStyle tempbrushstyle = iBrushStyle;
    43 	iBrushStyle = ESolidBrush;
    44 
    45 	SetupDevice();
    46 	iDevice->DrawingBegin();
    47 	RectFill(rcpy);
    48 	iDevice->DrawingEnd();
    49 
    50 	iBrushStyle = tempbrushstyle;
    51 	}
    52 
    53 
    54 
    55 /** Clears the whole bitmap or a rectangular area of a bitmap.
    56 
    57 The cleared area is filled with the current brush colour.
    58 
    59 The function provides a concrete implementation of the pure virtual function 
    60 CBitmapContext::Clear(). The function behaviour is the same as documented 
    61 in that class. 
    62 
    63 @see CBitmapContext::Clear() */
    64 EXPORT_C void CFbsBitGc::Clear()
    65 	{
    66 	TRect deviceRect;
    67 	iDevice->iDrawDevice->GetDrawRect(deviceRect);
    68 	if ((iOrigin.iX!=0) || (iOrigin.iY!=0))
    69 		{
    70 		deviceRect.Move(-iOrigin);
    71 		}
    72 	Clear(deviceRect);
    73 	}
    74 
    75 /** Draws a single point.
    76 
    77 The point is drawn with the current pen settings using the current
    78 drawing mode.The function provides a concrete implementation of the
    79 pure virtual function CGraphicsContext::Plot(). The
    80 function behaviour is the same as documented in that class. */
    81 EXPORT_C void CFbsBitGc::Plot(const TPoint& aPoint)
    82 	{
    83 	if (iPenStyle == ENullPen || (iPenSize.iWidth == 0 && iPenSize.iHeight == 0))
    84 		return;
    85 
    86 	CheckDevice();
    87 
    88 	TRect plotRect(aPoint + iOrigin,TSize(1,1));
    89 	plotRect.Grow((iPenSize.iWidth >> 1) + 1,(iPenSize.iHeight >> 1) + 1);
    90 	if (!plotRect.Intersects(iUserClipRect))
    91 		return;
    92 
    93 	SetupDevice();
    94 	iDevice->DrawingBegin();
    95 	DoPlot(aPoint);
    96 	iDevice->DrawingEnd();
    97 	}
    98 
    99 void CFbsBitGc::DoPlot(const TPoint& aPoint)
   100 	{
   101 	CFbsDrawDevice* drawDevice = iDevice->iDrawDevice;
   102 
   103 	const TSize oneByOne(1,1);
   104 	const TPoint point(aPoint + iOrigin);
   105 
   106 	TRect temp(point,oneByOne);
   107 	if (iPenSize.iWidth > 1 || iPenSize.iHeight > 1)
   108 		temp.Grow(iPenSize.iWidth >> 1,iPenSize.iHeight >> 1);
   109 	AddRect(temp);
   110 
   111 	const CGraphicsContext::TPenStyle penStyle = iPenStyle;
   112 	iPenStyle = CGraphicsContext::ESolidPen;
   113 
   114 #if defined(_DEBUG)
   115 	TRect deviceRect;
   116 	drawDevice->GetDrawRect(deviceRect);
   117 #endif
   118 
   119 	const TInt limit = iDefaultRegionPtr->Count();
   120 	for (TInt count = 0; count < limit; count++)
   121 		{
   122 		iClipRect = (*iDefaultRegionPtr)[count];
   123 		if (!iClipRect.Intersects(temp))
   124 			continue;
   125 
   126 		iClipRect.Intersection(temp);
   127 		if (UserClipRect(iClipRect))
   128 			continue;
   129 
   130 		if (iPenSize == oneByOne)
   131 			{
   132 			if (iClipRect.Contains(point))
   133 				{
   134 				BG_ASSERT_DEBUG(point.iX >= deviceRect.iTl.iX, EBitgdiPanicOutOfBounds);
   135 				BG_ASSERT_DEBUG(point.iY >= deviceRect.iTl.iY, EBitgdiPanicOutOfBounds);
   136 				BG_ASSERT_DEBUG(point.iX <= deviceRect.iBr.iX, EBitgdiPanicOutOfBounds);
   137 				BG_ASSERT_DEBUG(point.iY <= deviceRect.iBr.iY, EBitgdiPanicOutOfBounds);
   138 
   139 				drawDevice->WriteRgb(point.iX,point.iY,iPenColor,iDrawMode);
   140 				}
   141 			}
   142 		else if (iPenSize.iWidth > 0 && iPenSize.iHeight > 0)
   143 			PenDrawClipped(point);
   144 
   145 		drawDevice->UpdateRegion(iClipRect);
   146 		}
   147 
   148 	iPenStyle = penStyle;
   149 	}
   150 
   151 
   152 /** Sets the shadow area.
   153 
   154 @param aRegion The region defining the shadow area. */
   155 EXPORT_C void CFbsBitGc::ShadowArea(const TRegion* aRegion)
   156 	{
   157 	ShadowFadeArea(aRegion,CFbsDrawDevice::EShadow);
   158 	}
   159 
   160  
   161 /** Sets the fade area.
   162 
   163 @param aRegion The region defining the fade area. */
   164 EXPORT_C void CFbsBitGc::FadeArea(const TRegion* aRegion)
   165 	{
   166 	ShadowFadeArea(aRegion,CFbsDrawDevice::EFade);
   167 	}
   168 
   169 void CFbsBitGc::ShadowFadeArea(const TRegion* aRegion,TInt8 aShadowMode)
   170 	{
   171 	if (!aRegion || aRegion->CheckError())
   172 		return;
   173 
   174 	CFbsDrawDevice* drawDevice = iDevice->iDrawDevice;
   175 
   176 	CheckDevice();
   177 
   178 	TRect deviceRect;
   179 	drawDevice->GetDrawRect(deviceRect);
   180 
   181 	TInt8 shadowMode = iShadowMode;
   182 	iShadowMode = aShadowMode;
   183 
   184 	CGraphicsAccelerator* ga = GraphicsAccelerator();
   185 
   186 	SetupDevice();
   187 	iDevice->DrawingBegin();
   188 
   189 	const TInt limit = aRegion->Count();
   190 	TInt count;
   191     //use Graphics accelerator if available
   192 	if(ga)
   193 		{
   194 		if(iShadowMode & CFbsDrawDevice::EFade)
   195 			{
   196 	        TInt gaOperationResult = KErrUnknown;
   197             iDevice->DrawingEnd();
   198 
   199 			TGopFadeParams gopFadeParams;
   200 			gopFadeParams.iScale = iFadeWhiteMap-iFadeBlackMap+1;
   201 			gopFadeParams.iOffset = iFadeBlackMap;
   202 
   203 			for (count = 0; count < limit; count++)
   204 				{
   205 				iClipRect = (*aRegion)[count];
   206 				iClipRect.Move(iOrigin);
   207 				if(!iClipRect.Intersects(deviceRect))
   208 					continue;
   209 
   210 				iClipRect.Intersection(deviceRect);
   211 				AddRect(iClipRect);
   212 
   213 				gaOperationResult = ga->Operation(TGopFadeRect(iClipRect,gopFadeParams));
   214 				if(gaOperationResult != KErrNone)
   215 					break;
   216 				}
   217 			if(gaOperationResult == KErrNone)
   218 				goto finish;
   219 			iDevice->DrawingBegin();
   220 			}
   221 		}
   222 
   223     //use graphics contex
   224 	for (count = 0; count < limit; count++)
   225 		{
   226 		iClipRect = (*aRegion)[count];
   227 		iClipRect.Move(iOrigin);
   228 		if(!iClipRect.Intersects(deviceRect))
   229 			continue;
   230 
   231 		iClipRect.Intersection(deviceRect);
   232 		AddRect(iClipRect);
   233 
   234 		drawDevice->ShadowArea(iClipRect);
   235 		drawDevice->UpdateRegion(iClipRect);
   236 		}
   237 
   238 	iDevice->DrawingEnd();
   239 
   240 finish:
   241 	iShadowMode = shadowMode;
   242 	}
   243 
   244 // if iBrushBitmap is an extended bitmap, PrepareRasterizerForExtendedBitmap() must have been called before this method
   245 void CFbsBitGc::ClipFillLine(TPoint aLeft,TPoint aRight)
   246 	{
   247 	if (iBrushStyle == ENullBrush || 
   248 		aLeft.iY < iClipRect.iTl.iY || aLeft.iY >= iClipRect.iBr.iY)
   249 		return;
   250 
   251 	aLeft.iX = Max(aLeft.iX,iClipRect.iTl.iX);
   252 	aRight.iX = Min(aRight.iX,iClipRect.iBr.iX-1);
   253 	if (aLeft.iX > aRight.iX)
   254 		return;
   255 
   256 	BG_ASSERT_DEBUG(iUserClipRect.Contains(aLeft),EBitgdiPanicOutOfBounds);
   257 
   258 	TInt xcoord = aLeft.iX;
   259 	TInt length = aRight.iX - aLeft.iX + 1;
   260 	TPoint origin(iOrigin + iBrushOrigin);
   261 
   262 	BG_ASSERT_DEBUG(aLeft.iX + length <= iUserClipRect.iBr.iX,EBitgdiPanicOutOfBounds);
   263 
   264 	CFbsDrawDevice* drawDevice = iDevice->iDrawDevice;
   265 
   266 	switch(iBrushStyle)
   267 		{
   268 	case ESolidBrush:
   269 		drawDevice->WriteRgbMulti(aLeft.iX,aLeft.iY,length,1,iBrushColor,iDrawMode);
   270 		return;
   271 	case EPatternedBrush:
   272 		{
   273 		CBitwiseBitmap* brushBitmap = iBrushBitmap.Address();
   274 		BG_ASSERT_ALWAYS(iBrushUsed,EBitgdiPanicInvalidBitmap);
   275 		BG_ASSERT_ALWAYS(brushBitmap != NULL,EBitgdiPanicInvalidBitmap);
   276 
   277 		TRect sourcerect(aLeft,TSize(length,1));
   278 		sourcerect.Move(-origin);
   279 		DoBitBlt(aLeft,brushBitmap,iBrushBitmap.DataAddress(),iBrushBitmap.DataStride(),sourcerect);
   280 		return;
   281 		}
   282 	case EHorizontalHatchBrush:
   283 		drawDevice->WriteRgbMulti(aLeft.iX,aLeft.iY,length,1,iBrushColor,iDrawMode);
   284 		if (Abs((aLeft.iY - origin.iY) % 3) == 2)
   285 			drawDevice->WriteRgbMulti(aLeft.iX,aLeft.iY,length,1,iPenColor,iDrawMode);
   286 		return;
   287 	case EVerticalHatchBrush:
   288 		drawDevice->WriteRgbMulti(aLeft.iX,aLeft.iY,length,1,iBrushColor,iDrawMode);
   289 		while (Abs((xcoord - origin.iX) % 3) != 2)
   290 			xcoord++;
   291 		for (; xcoord < aLeft.iX + length; xcoord += 3)
   292 			drawDevice->WriteRgb(xcoord,aLeft.iY,iPenColor,iDrawMode);
   293 		return;
   294 	case ESquareCrossHatchBrush:
   295 		drawDevice->WriteRgbMulti(aLeft.iX,aLeft.iY,length,1,iBrushColor,iDrawMode);
   296 		if (Abs((aLeft.iY - origin.iY) % 3) == 2)
   297 			drawDevice->WriteRgbMulti(aLeft.iX,aLeft.iY,length,1,iPenColor,iDrawMode);
   298 		else
   299 			{
   300 			while (Abs((xcoord - origin.iX) % 3) != 2)
   301 				xcoord++;
   302 			for (; xcoord < aLeft.iX + length; xcoord += 3)
   303 				drawDevice->WriteRgb(xcoord,aLeft.iY,iPenColor,iDrawMode);
   304 			}
   305 		return;
   306 	case EForwardDiagonalHatchBrush:
   307 		{
   308 		drawDevice->WriteRgbMulti(aLeft.iX,aLeft.iY,length,1,iBrushColor,iDrawMode);
   309 		TInt diff = (origin.iX + origin.iY - aLeft.iX - aLeft.iY) % 3;
   310 		if (diff < 0)
   311 			diff += 3;
   312 		xcoord += diff;
   313 		for (; xcoord < aLeft.iX + length; xcoord += 3)
   314 			drawDevice->WriteRgb(xcoord,aLeft.iY,iPenColor,iDrawMode);
   315 		}
   316 		return;
   317 	case ERearwardDiagonalHatchBrush:
   318 		{
   319 		drawDevice->WriteRgbMulti(aLeft.iX,aLeft.iY,length,1,iBrushColor,iDrawMode);
   320 		TInt diff = (origin.iX - origin.iY - aLeft.iX + aLeft.iY) % 3;
   321 		if (diff < 0)
   322 			diff += 3;
   323 		xcoord += diff;
   324 		for (; xcoord < aLeft.iX + length; xcoord += 3)
   325 			drawDevice->WriteRgb(xcoord,aLeft.iY,iPenColor,iDrawMode);
   326 		}
   327 		return;
   328 	case EDiamondCrossHatchBrush:
   329 		{
   330 		drawDevice->WriteRgbMulti(aLeft.iX,aLeft.iY,length,1,iBrushColor,iDrawMode);
   331 		TInt sum = aLeft.iX + aLeft.iY - origin.iX - origin.iY;
   332 		for (; xcoord < aLeft.iX + length; xcoord++,sum++)
   333 			if ((sum & 1) == 0 && ((sum & 3) != 0 || ((xcoord-origin.iX) & 1) == 1))
   334 				drawDevice->WriteRgb(xcoord,aLeft.iY,iPenColor,iDrawMode);
   335 		}
   336 		return;
   337 	default:
   338 		return;
   339 		}
   340 	}
   341 
   342 void CFbsBitGc::PenAllocate()
   343 	{
   344 	iFbsBitGcExtraData->ResetPenArray();
   345 	if (iPenSize.iWidth == 1 && iPenSize.iHeight == 1)
   346 		return;
   347 
   348 	const TInt doublepenheight = iPenSize.iHeight << 1;
   349 
   350 	TInt* penArray = new TInt[doublepenheight];
   351 	if (!penArray)
   352 		return;
   353 
   354 	iFbsBitGcExtraData->SetPenArray(penArray);
   355 
   356 	if (iPenSize.iWidth == 1 || iPenSize.iWidth == 2 || iPenSize.iHeight == 1 || iPenSize.iHeight == 2)
   357 		{
   358 		TInt* bitGcPenArray = iFbsBitGcExtraData->PenArray();
   359 		for (TInt count = 0; count < iPenSize.iHeight; count += 2)
   360 			{
   361 			bitGcPenArray[doublepenheight - count - 2] = 0;
   362 			bitGcPenArray[doublepenheight - count - 1] = iPenSize.iWidth - 1;
   363 			bitGcPenArray[count] = 0;
   364 			bitGcPenArray[count + 1] = iPenSize.iWidth - 1;
   365 			}
   366 		}
   367 	else
   368 		{
   369 		TPoint tl,tr,bl,br;
   370 		TEllipse ellipse;
   371 		ellipse.Construct(TRect(iPenSize));
   372 		TInt* bitGcPenArray = iFbsBitGcExtraData->PenArray();
   373 		for (TInt count = 0; count < iPenSize.iHeight; count += 2)
   374 			{
   375 			//coverity[check_return]
   376 			//coverity[unchecked_value]
   377 			ellipse.NextStep(tl,tr,bl,br);
   378 			bitGcPenArray[doublepenheight - count - 2] = bl.iX;
   379 			bitGcPenArray[doublepenheight - count - 1] = br.iX;
   380 			bitGcPenArray[count] = tl.iX;
   381 			bitGcPenArray[count + 1] = tr.iX;
   382 			}
   383 		}
   384 	}
   385 
   386 void CFbsBitGc::PenDrawClipped(TPoint aPoint)
   387 	{
   388 	BG_ASSERT_DEBUG(iPenSize.iWidth > 0,EBitgdiPanicZeroLength);
   389 	BG_ASSERT_DEBUG(iPenSize.iHeight > 0,EBitgdiPanicZeroLength);
   390 
   391 	aPoint.iX -= ((iPenSize.iWidth - 1) >> 1);
   392 	aPoint.iY -= ((iPenSize.iHeight - 1) >> 1);
   393 
   394 	BG_ASSERT_DEBUG(iClipRect.iTl.iX >= iUserClipRect.iTl.iX,EBitgdiPanicOutOfBounds);
   395 	BG_ASSERT_DEBUG(iClipRect.iTl.iY >= iUserClipRect.iTl.iY,EBitgdiPanicOutOfBounds);
   396 	BG_ASSERT_DEBUG(iClipRect.iBr.iX <= iUserClipRect.iBr.iX,EBitgdiPanicOutOfBounds);
   397 	BG_ASSERT_DEBUG(iClipRect.iBr.iY <= iUserClipRect.iBr.iY,EBitgdiPanicOutOfBounds);
   398 
   399 	CFbsDrawDevice* drawDevice = iDevice->iDrawDevice;
   400 
   401 	if (iPenSize.iWidth == 1 && iPenSize.iHeight == 1)
   402 		{
   403 		if (iPenStyle == CGraphicsContext::ESolidPen || (iDotMask & (1 << (iDotParam % iDotLength))))
   404 			if (iClipRect.Contains(aPoint))
   405 				drawDevice->WriteRgb(aPoint.iX,aPoint.iY,iPenColor,iDrawMode);
   406 		}
   407 	else if (iFbsBitGcExtraData->PenArray())
   408 		{
   409 		TInt ycoord = aPoint.iY;
   410 		const TInt maxdim = Max(iPenSize.iWidth,iPenSize.iHeight);
   411 		const TInt doublepenheight = iPenSize.iHeight << 1;
   412 
   413 		if (iPenStyle == CGraphicsContext::ESolidPen || (iDotMask & (1 << ((iDotParam / maxdim) % iDotLength))))
   414 			{
   415 			for (TInt ix = 0; ix < doublepenheight; ycoord++,ix += 2)
   416 				{
   417 				if (ycoord >= iClipRect.iTl.iY && ycoord < iClipRect.iBr.iY)
   418 					{
   419 					TInt left = aPoint.iX + iFbsBitGcExtraData->PenArray()[ix];
   420 					TInt right = aPoint.iX + iFbsBitGcExtraData->PenArray()[ix+1];
   421 					if (left < iClipRect.iTl.iX)
   422 						left = iClipRect.iTl.iX;
   423 					if (right >= iClipRect.iBr.iX)
   424 						right = iClipRect.iBr.iX - 1;
   425 					if (left <= right)
   426 						drawDevice->WriteRgbMulti(left,ycoord,right - left + 1,1,iPenColor,CGraphicsContext::EDrawModePEN);
   427 					}
   428 				}
   429 			}
   430 		}
   431 	else
   432 		{
   433 		TPoint tl,tr,bl,br;
   434 		TEllipse ellipse;
   435 		ellipse.Construct(TRect(aPoint,iPenSize));
   436 		while (!ellipse.NextStep(tl,tr,bl,br))
   437 			{
   438 			if (tl.iY >= iClipRect.iTl.iY && tl.iY < iClipRect.iBr.iY)
   439 				{
   440 				if (tl.iX < iClipRect.iTl.iX)
   441 					tl.iX = iClipRect.iTl.iX;
   442 				if (tr.iX >= iClipRect.iBr.iX)
   443 					tr.iX = iClipRect.iBr.iX-1;
   444 				if (tl.iX <= tr.iX)
   445 					drawDevice->WriteRgbMulti(tl.iX,tl.iY,tr.iX - tl.iX + 1,1,iPenColor,CGraphicsContext::EDrawModePEN);
   446 				}
   447 			if (bl.iY >= iClipRect.iTl.iY && bl.iY < iClipRect.iBr.iY)
   448 				{
   449 				if (bl.iX < iClipRect.iTl.iX)
   450 					bl.iX = iClipRect.iTl.iX;
   451 				if (br.iX >= iClipRect.iBr.iX)
   452 					br.iX = iClipRect.iBr.iX - 1;
   453 				if (bl.iX <= br.iX)
   454 					drawDevice->WriteRgbMulti(bl.iX,bl.iY,br.iX - bl.iX + 1,1,iPenColor,CGraphicsContext::EDrawModePEN);
   455 				}
   456 			}
   457 
   458 		if (tl.iY == bl.iY && tl.iY >= iClipRect.iTl.iY && tl.iY < iClipRect.iBr.iY)
   459 			{
   460 			if (tl.iX < iClipRect.iTl.iX)
   461 				tl.iX = iClipRect.iTl.iX;
   462 			if (tr.iX >= iClipRect.iBr.iX)
   463 				tr.iX = iClipRect.iBr.iX - 1;
   464 			if (tl.iX <= tr.iX)
   465 				drawDevice->WriteRgbMulti(tl.iX,tl.iY,tr.iX - tl.iX + 1,1,iPenColor,CGraphicsContext::EDrawModePEN);
   466 			}
   467 		}
   468 	}
   469 
   470 void CFbsBitGc::PenDrawDeferred(TPoint aPoint,TInt* aArray,TInt aFirstElement)
   471 	{
   472 	BG_ASSERT_DEBUG(iFbsBitGcExtraData->PenArray(),EBitgdiPanicZeroLength);
   473 	BG_ASSERT_DEBUG(iPenSize.iWidth > 0,EBitgdiPanicZeroLength);
   474 	BG_ASSERT_DEBUG(iPenSize.iHeight > 0,EBitgdiPanicZeroLength);
   475 	BG_ASSERT_DEBUG(iClipRect.iTl.iX >= iUserClipRect.iTl.iX,EBitgdiPanicOutOfBounds);
   476 	BG_ASSERT_DEBUG(iClipRect.iTl.iY >= iUserClipRect.iTl.iY,EBitgdiPanicOutOfBounds);
   477 	BG_ASSERT_DEBUG(iClipRect.iBr.iX <= iUserClipRect.iBr.iX,EBitgdiPanicOutOfBounds);
   478 	BG_ASSERT_DEBUG(iClipRect.iBr.iY <= iUserClipRect.iBr.iY,EBitgdiPanicOutOfBounds);
   479 
   480 	aPoint.iX -= ((iPenSize.iWidth - 1) >> 1);
   481 	const TInt doublepenheight = iPenSize.iHeight << 1;
   482 
   483 	for (TInt ix = 0; ix < doublepenheight; ix++,aFirstElement++)
   484 		{
   485 		if (aFirstElement == doublepenheight)
   486 			aFirstElement = 0;
   487 		TInt newval = aPoint.iX + iFbsBitGcExtraData->PenArray()[ix];
   488 		if (newval < aArray[aFirstElement])
   489 			aArray[aFirstElement] = newval;
   490 
   491 		ix++;
   492 		aFirstElement++;
   493 		newval = aPoint.iX + iFbsBitGcExtraData->PenArray()[ix];
   494 		if (newval > aArray[aFirstElement])
   495 			aArray[aFirstElement] = newval;
   496 		}
   497 	}
   498 
   499 //Default implementation of reserved virtual
   500 EXPORT_C void CFbsBitGc::Reserved_CGraphicsContext_2()
   501 	{
   502 	CBitmapContext::Reserved_CGraphicsContext_2();
   503 	}
   504 
   505 //Default implementation of reserved virtual
   506 EXPORT_C void CFbsBitGc::Reserved_CBitmapContext_1()
   507 	{
   508 	CBitmapContext::Reserved_CBitmapContext_1();
   509 	}
   510 
   511 //Default implementation of reserved virtual
   512 EXPORT_C void CFbsBitGc::Reserved_CBitmapContext_2()
   513 	{
   514 	CBitmapContext::Reserved_CBitmapContext_2();
   515 	}
   516 
   517 //Default implementation of reserved virtual
   518 EXPORT_C void CFbsBitGc::Reserved_CBitmapContext_3()
   519 	{
   520 	CBitmapContext::Reserved_CBitmapContext_3();
   521 	}
   522 
   523 //Default implementation of reserved virtual
   524 EXPORT_C void CFbsBitGc::Reserved_CFbsBitGc_1()
   525 	{
   526 	}
   527 
   528 //Default implementation of reserved virtual
   529 EXPORT_C void CFbsBitGc::Reserved_CFbsBitGc_2()
   530 	{
   531 	}
   532 
   533 //Default implementation of reserved virtual
   534 EXPORT_C void CFbsBitGc::Reserved_CFbsBitGc_3()
   535 	{
   536 	}
   537 
   538 //Default implementation of reserved virtual
   539 EXPORT_C void CFbsBitGc::Reserved_CFbsBitGc_4()
   540 	{
   541 	}
   542 
   543 //Default implementation of reserved virtual
   544 EXPORT_C void CFbsBitGc::Reserved_CFbsBitGc_5()
   545 	{
   546 	}