os/graphics/graphicsdeviceinterface/directgdi/test/tdrawtext.cpp
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
     1 // Copyright (c) 2007-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 "tdrawtext.h"
    17 #include <graphics/directgdiengine.h>
    18 #include <graphics/directgdicontext.h>
    19 
    20 
    21 LOCAL_C void CleanCache(TAny* aPtr)
    22 	{
    23 	MFontGlyphImageStorage* glyphImageStorage = reinterpret_cast<MFontGlyphImageStorage*> (aPtr);
    24 	glyphImageStorage->CleanGlyphImageCache();
    25 	}
    26 
    27 /**
    28 Default text drawing target size
    29 */
    30 const TSize KDrawTextDefaultSize(640, 400);
    31 
    32 /**
    33 Test text
    34 */
    35 _LIT16(KPangram, "The quick brown fox jumps over the lazy dog");
    36 _LIT16(KAbcd,"Abcd");
    37 
    38 
    39 CTDrawText::CTDrawText()
    40 	{
    41 	SetTestStepName(KTDirectGdiDrawTextStep);
    42 	}
    43 
    44 CTDrawText::~CTDrawText()
    45 	{
    46 	if(iFont)
    47 		{
    48 		ReleaseFont(iFont);		
    49 		}
    50 	}
    51 
    52 
    53 /** 
    54 Override of base class pure virtual
    55 Our implementation only gets called if the base class doTestStepPreambleL() did
    56 not leave. That being the case, the current test result value will be EPass.
    57 @leave Gets system wide error code
    58 @return TVerdict code
    59 */	
    60 TVerdict CTDrawText::doTestStepL()
    61 	{
    62 	// Test for each target pixel format
    63 	for(TInt targetPixelFormatIndex = iTargetPixelFormatArray.Count() - 1; targetPixelFormatIndex >= 0 ; targetPixelFormatIndex--)
    64 		{
    65 		iTestParams.iTargetPixelFormat = iTargetPixelFormatArray[targetPixelFormatIndex];
    66 			
    67 		SetTargetL(iTestParams.iTargetPixelFormat, EOneContextOneTarget, KDrawTextDefaultSize);
    68 
    69 		iFont = GetFont();
    70 		User::LeaveIfNull(iFont);
    71 			
    72 		RunTestsL();
    73 		// only run OOM tests for one target pixel format to prevent duplication of tests
    74 		if (targetPixelFormatIndex == 0)
    75 			{
    76 			RunOomTestsL();  //from base class
    77 			}
    78 
    79 		if(iFont)
    80 			{
    81 			ReleaseFont(iFont);
    82 			iFont = NULL;
    83 			}
    84 		}
    85 	CloseTMSGraphicsStep();
    86 	return TestStepResult();
    87 	}
    88 
    89 /**
    90 Override of base class virtual
    91 @leave Gets system wide error code
    92 @return - TVerdict code
    93 */
    94 TVerdict CTDrawText::doTestStepPreambleL()
    95 	{			
    96 	CTDirectGdiStepBase::doTestStepPreambleL();	
    97 	return TestStepResult();
    98 	}
    99 
   100 /**
   101 @SYMTestCaseID  	
   102 	GRAPHICS-DIRECTGDI-TEXT-0001
   103 	
   104 @SYMPREQ 			
   105 	PREQ39
   106 
   107 @SYMREQ
   108 	REQ9195
   109 	REQ9201 
   110 	REQ9202 
   111 	REQ9222 
   112 	REQ9223 
   113 	REQ9236 
   114 	REQ9237
   115 	
   116 @SYMTestCaseDesc	
   117 	Basic test for text drawing with basic and valid parameters.
   118 	
   119 @SYMTestPriority	
   120 	Critical
   121 	
   122 @SYMTestStatus 		
   123 	Implemented
   124 	  
   125 @SYMTestActions 	
   126 	Test the DrawText() and DrawTextVertical() functions for text drawing using either BitGDI or DirectGDI gc.
   127 	  
   128 @SYMTestExpectedResults 
   129 	Valid bitmap should be created. This bitmap should be the same as a reference bitmap.
   130 	
   131 */
   132 void CTDrawText::TestBasicFunctionality()
   133 	{
   134 	_LIT(KTestName, "Text-Basic"); 
   135 	if(!iRunningOomTests)
   136 		{
   137 		INFO_PRINTF1(KTestName);
   138 		}
   139 	
   140 	ResetGc();
   141 	
   142 	iGc->SetFont(iFont);
   143 	TEST(iGc->HasFont());
   144 	iGc->SetPenColor(TRgb(0, 0, 0));
   145 	
   146 	//1.down
   147 	
   148 	iGc->DrawTextVertical(KPangram,NULL,TPoint(10,10),EFalse);
   149 	
   150 	iGc->DrawTextVertical(KAbcd, NULL, EFalse);
   151 	
   152 	TRect rect(30,10,50,400);
   153 	TInt baseline = rect.Width() / 2 + iFont->AscentInPixels() / 2;
   154 	iGc->DrawTextVertical(KPangram,NULL,rect,baseline,EFalse);
   155 	
   156 	rect.SetRect(50,10,80,400);
   157 	baseline = rect.Width() / 2 + iFont->AscentInPixels() / 2;
   158 	iGc->DrawTextVertical(KPangram,NULL,rect,baseline,10,EFalse);
   159 	
   160 	rect.SetRect(50,100,80,400);
   161 	iGc->DrawTextVertical(KAbcd,NULL,rect,EFalse);
   162 	
   163 	//2.up
   164 	
   165 	iGc->DrawTextVertical(KPangram,NULL,TPoint(105,390),ETrue);
   166 	
   167 	iGc->DrawTextVertical(KAbcd,NULL,ETrue);
   168 	
   169 	rect.SetRect(110,10,140,390);
   170 	baseline = rect.Width() / 2 + iFont->AscentInPixels() / 2;
   171 	iGc->DrawTextVertical(KPangram,NULL,rect,baseline,ETrue);
   172 	
   173 	rect.SetRect(140,10,160,390);
   174 	baseline = rect.Width() / 2 + iFont->AscentInPixels() / 2;
   175 	iGc->DrawTextVertical(KPangram,NULL,rect,baseline,10,ETrue);
   176 	
   177 	rect.SetRect(140,10,160,200);
   178 	iGc->DrawTextVertical(KAbcd,NULL,rect,ETrue);
   179 	
   180 	//horizontal
   181 	iGc->DrawText(KPangram,NULL,TPoint(170, 25));
   182 	
   183 	iGc->DrawText(KAbcd,NULL);
   184 	
   185 	rect.SetRect(170,30,640,50);
   186 	baseline = rect.Height() / 2 + iFont->AscentInPixels() / 2;
   187 	iGc->DrawText(KPangram,NULL,rect,baseline);
   188 		
   189 	rect.SetRect(170,30,640,50);
   190 	iGc->DrawText(KAbcd,NULL,rect);
   191 	
   192 	
   193 	iGc->ResetFont();
   194 
   195 	TESTNOERROR(iGc->GetError());
   196 	TEST(KErrNone == WriteTargetOutput(iTestParams, TPtrC(KTestName)));
   197 	}
   198 
   199 /**
   200 @SYMTestCaseID  	
   201 	GRAPHICS-DIRECTGDI-TEXT-0002
   202 	
   203 @SYMPREQ 			
   204 	PREQ39
   205 
   206 @SYMREQ
   207 	REQ9195
   208 	REQ9201 
   209 	REQ9202 
   210 	REQ9222 
   211 	REQ9223 
   212 	REQ9236 
   213 	REQ9237
   214 	
   215 @SYMTestCaseDesc	
   216 	Test for text positioning and clipping in a rendering target. 
   217 	Only horizontal drawing direction is taken into consideration.
   218 	
   219 @SYMTestPriority	
   220 	Critical
   221 	
   222 @SYMTestStatus 		
   223 	Implemented  
   224 	
   225 @SYMTestActions 	
   226 	 Loop over all versions od DrawText() method.
   227 	 Using each one draw a text "text" on screen at various positions.
   228 	 Increment position from (-50,-50) up to target width+50 and target heigh+50
   229 	 to test boundary cases as well. 
   230 	 
   231 @SYMTestExpectedResults 
   232 	Valid bitmap should be created. This bitmap should be the same as a reference bitmap.
   233 */
   234 void CTDrawText::TestTextPositioning()
   235 	{
   236 	_LIT(KTestName, "Text-Positioning"); 
   237 	if(!iRunningOomTests)
   238 		{
   239 		INFO_PRINTF1(KTestName);
   240 		}
   241 	
   242 	_LIT(KText, "test");
   243 	for(TInt funcNum=0; funcNum<4; funcNum++)
   244 		{
   245 		
   246 		ResetGc();
   247 		
   248 		iGc->SetFont(iFont);
   249 		TEST(iGc->HasFont());
   250 		iGc->SetPenColor(TRgb(0, 0, 0));
   251 		
   252 		TPositionIterator posIterator(-50, KDrawTextDefaultSize.iWidth+50, 30, -50, KDrawTextDefaultSize.iHeight+50, 13);
   253 		posIterator.Begin();
   254 		
   255 		do
   256 			{
   257 			switch(funcNum)
   258 				{
   259 				case 0:
   260 					{
   261 					// void DrawText(const TDesC& aText);
   262 					iGc->Reset();
   263 					iGc->SetFont(iFont);
   264 					TEST(iGc->HasFont());
   265 					iGc->SetPenColor(TRgb(0, 0, 0));
   266 					iGc->SetOrigin(TPoint(posIterator.iPosX+posIterator.iIndexY, posIterator.iPosY+posIterator.iIndexX));
   267 					iGc->DrawText(KText,NULL);
   268 					break;
   269 					}
   270 
   271 				case 1:
   272 					{
   273 					// void DrawText(const TDesC& aText, const TPoint& aPosition)
   274 					iGc->DrawText(KText,NULL,TPoint(posIterator.iPosX+posIterator.iIndexY, posIterator.iPosY+posIterator.iIndexX));
   275 					break;
   276 					}
   277 
   278 				case 2:
   279 					{
   280 					// void DrawText(const TDesC& aText, const TRect& aBox)
   281 					iGc->Reset();
   282 					iGc->SetFont(iFont);
   283 					TEST(iGc->HasFont());
   284 					iGc->SetPenColor(TRgb(0, 0, 0));
   285 					TPoint pos(posIterator.iPosX+posIterator.iIndexY, posIterator.iPosY+posIterator.iIndexX);
   286 					iGc->SetOrigin(pos);
   287 					TRect box(-pos, KDrawTextDefaultSize);
   288 					iGc->DrawText(KText,NULL,box);
   289 					break;
   290 					}
   291 					
   292 				case 3:
   293 					{
   294 					// void DrawText(const TDesC& aText, const TRect& aBox, TInt aBaselineOffset, 
   295 					//		DirectGdi::TTextAlign aAlignment = DirectGdi::ELeft, TInt aMargin = 0)
   296 					TRect rect(TPoint(posIterator.iPosX+posIterator.iIndexY, posIterator.iPosY+posIterator.iIndexX), TSize(32, 13) );
   297 					iGc->DrawText(KText, NULL, rect, 13, DirectGdi::ELeft, 1);
   298 					break;
   299 					}
   300 				}
   301 			}
   302 		while(posIterator.Next());
   303 		
   304 		TESTNOERROR(iGc->GetError());
   305 		TBuf<40> tname;
   306 		tname.Format(_L("%S%d"), &KTestName, funcNum);
   307 		TEST(KErrNone == WriteTargetOutput(iTestParams, tname));
   308 		
   309 		iGc->ResetFont();
   310 		}
   311 	}
   312 
   313 
   314 /**
   315 @SYMTestCaseID  	
   316 	GRAPHICS-DIRECTGDI-TEXT-0003
   317 	
   318 @SYMPREQ 			
   319 	PREQ39
   320 
   321 @SYMREQ
   322 	REQ9195
   323 	REQ9201 
   324 	REQ9202 
   325 	REQ9222 
   326 	REQ9223 
   327 	REQ9236 
   328 	REQ9237
   329 	
   330 @SYMTestCaseDesc	
   331 	Test for clipping text based on the box parameter.
   332 	
   333 @SYMTestPriority	
   334 	Critical
   335 	
   336 @SYMTestStatus 		
   337 	Implemented  
   338 	
   339 @SYMTestActions
   340 	Set the origin to a non-zero position. 
   341 	Draw a text "text" on screen at various positions using
   342 	incremented box size.
   343 	
   344 @SYMTestExpectedResults 
   345 	Valid bitmap should be created. This bitmap should be the same as a reference bitmap.
   346 */
   347 void CTDrawText::TestTextBox()
   348 	{	
   349 	_LIT(KTestName, "Text-BoxClipping"); 
   350 	if(!iRunningOomTests)
   351 		{
   352 		INFO_PRINTF1(KTestName);
   353 		}
   354 	
   355 	ResetGc();
   356 
   357 	iGc->SetOrigin(TPoint(2, -2));
   358 	iGc->SetFont(iFont);
   359 	TEST(iGc->HasFont());
   360 	iGc->SetPenColor(TRgb(0, 0, 0));
   361 	iGc->SetBrushStyle(DirectGdi::ESolidBrush);
   362 	iGc->SetBrushColor(TRgb(150, 150, 150));
   363 
   364 	_LIT(KText, "test");
   365 
   366 	TInt baseline = 2 + iFont->FontMaxAscent()/2;
   367 	TPositionIterator posIterator(0, KDrawTextDefaultSize.iWidth, 50, 0, KDrawTextDefaultSize.iHeight, 13);
   368 	posIterator.Begin();
   369 	
   370 	do
   371 		{
   372 		TRect rect(TPoint(posIterator.iPosX, posIterator.iPosY), TSize(posIterator.iIndexY, posIterator.iIndexX));
   373 		if(!rect.IsEmpty())
   374 			{
   375 			iGc->DrawText(KText, NULL, rect, baseline);
   376 			}
   377 		}
   378 	while(posIterator.Next());
   379 	
   380 	iGc->ResetFont();
   381 
   382 	TESTNOERROR(iGc->GetError());
   383 	TEST(KErrNone == WriteTargetOutput(iTestParams, TPtrC(KTestName)));
   384 	}
   385 
   386 
   387 /**
   388 @SYMTestCaseID  	
   389 	GRAPHICS-DIRECTGDI-TEXT-0004
   390 	
   391 @SYMPREQ 			
   392 	PREQ39
   393 
   394 @SYMREQ
   395 	REQ9195
   396 	REQ9201 
   397 	REQ9202 
   398 	REQ9222 
   399 	REQ9223 
   400 	REQ9236 
   401 	REQ9237
   402 	
   403 @SYMTestCaseDesc	
   404 	Test for positioning vertical text in a rendering target.
   405 	Only vertical drawing direction is taken into consideration.
   406 	
   407 @SYMTestPriority	
   408 	Critical
   409 	
   410 @SYMTestStatus 		
   411 	Implemented  
   412 	
   413 @SYMTestActions
   414  	Loop over all versions od DrawTextVertical() method.
   415 	Using each one draw a text "text" on screen at various positions.
   416 	Increment position from (-50,-70) up to target width+50 and target heigh+70
   417 	to test boundary cases as well. 
   418 	
   419 @SYMTestExpectedResults 
   420 	Test should perform graphics operations successfully.
   421 */
   422 void CTDrawText::TestTextPositioningVertical(TBool aUp)
   423 	{	
   424 	_LIT(KTestName, "Text-PositioningVertical"); 
   425 	if(!iRunningOomTests)
   426 		{
   427 		INFO_PRINTF1(KTestName);
   428 		}
   429 	
   430 	_LIT(KText, "test");
   431 
   432 	for(TInt funcNum = 0; funcNum<5; funcNum++)
   433 		{
   434 		
   435 		ResetGc();
   436 
   437 		iGc->SetFont(iFont);
   438 		TEST(iGc->HasFont());
   439 		iGc->SetPenColor(TRgb(0, 0, 0));
   440 		
   441 		TPositionIterator posIterator(-50, KDrawTextDefaultSize.iWidth+50, 10, -70, KDrawTextDefaultSize.iHeight+70, 30);
   442 		posIterator.Begin();
   443 		
   444 		do
   445 			{
   446 			switch(funcNum)
   447 				{
   448 				case 0:
   449 					{
   450 					// void DrawTextVertical(const TDesC& aText, TBool aUp)
   451 					iGc->Reset();
   452 					iGc->SetFont(iFont);
   453 					TEST(iGc->HasFont());
   454 					iGc->SetPenColor(TRgb(0, 0, 0));
   455 					iGc->SetOrigin(TPoint(posIterator.iPosX+posIterator.iIndexY, posIterator.iPosY+posIterator.iIndexX));
   456 					iGc->DrawTextVertical(KText, NULL, aUp);
   457 					break;
   458 					}
   459 
   460 				case 1:
   461 					{
   462 					// void DrawTextVertical(const TDesC& aText, const TPoint& aPosition, TBool aUp)
   463 					iGc->DrawTextVertical(KText, NULL, TPoint(posIterator.iPosX+posIterator.iIndexY, posIterator.iPosY+posIterator.iIndexX), aUp);
   464 					break;
   465 					}
   466 
   467 				case 2:
   468 					{
   469 					// void DrawTextVertical(const TDesC& aText, const TRect& aBox, TBool aUp)
   470 					iGc->Reset();
   471 					iGc->SetFont(iFont);
   472 					TEST(iGc->HasFont());
   473 					iGc->SetPenColor(TRgb(0, 0, 0));
   474 					TPoint pos(posIterator.iPosX+posIterator.iIndexY, posIterator.iPosY+posIterator.iIndexX);
   475 					iGc->SetOrigin(pos);
   476 					TRect box(-pos, KDrawTextDefaultSize);
   477 					iGc->DrawTextVertical(KText, NULL, box, aUp);
   478 					break;
   479 					}
   480 					
   481 				case 3:
   482 					{
   483 					// void DrawTextVertical(const TDesC& aText, const TRect& aBox, TInt aBaselineOffset, 
   484 					//		TBool aUp, DirectGdi::TTextAlign aVerticalAlignment = DirectGdi::ELeft, TInt aMargin = 0)
   485 					TRect rect(TPoint(posIterator.iPosX+posIterator.iIndexY, posIterator.iPosY+posIterator.iIndexX),TSize(13, 32));
   486 					iGc->DrawTextVertical(KText, NULL, rect, 12, aUp,DirectGdi::ELeft, 0);
   487 					break;
   488 					}
   489 					
   490 				case 4:
   491 					{
   492 					// void DrawTextVertical(const TDesC& aText, const TRect& aBox, TInt aBaselineOffset, 
   493 					//		TInt aTextWidth, TBool aUp, DirectGdi::TTextAlign aVerticalAlignment = DirectGdi::ELeft, TInt aMargin = 0)
   494 					TRect rect(TPoint(posIterator.iPosX+posIterator.iIndexY, posIterator.iPosY+posIterator.iIndexX),TSize(13, 32));
   495 					iGc->DrawTextVertical(KText, NULL, rect, 12, 4, aUp, DirectGdi::ELeft, 0);
   496 					break;
   497 					}
   498 				}
   499 			}
   500 		while(posIterator.Next());
   501 		
   502 		TESTNOERROR(iGc->GetError());
   503 	
   504 		_LIT(KUp, "up");
   505 		_LIT(KDown, "down");
   506 	
   507 		TBuf<40> tname;
   508 		tname.Format(_L("%S%d%S"), &KTestName, funcNum, aUp ? &KUp : &KDown);
   509 		TESTNOERROR(WriteTargetOutput(iTestParams, tname));
   510 		
   511 		iGc->ResetFont();
   512 		}
   513 	}
   514 
   515 
   516 /**
   517 @SYMTestCaseID  	
   518 	GRAPHICS-DIRECTGDI-TEXT-0005
   519 	
   520 @SYMPREQ 			
   521 	PREQ39
   522 
   523 @SYMREQ
   524 	REQ9195
   525 	REQ9201 
   526 	REQ9202 
   527 	REQ9222 
   528 	REQ9223 
   529 	REQ9236 
   530 	REQ9237
   531 	
   532 @SYMTestCaseDesc	
   533 	Test for clipping text based on the clipping rectangle parameter.
   534 	
   535 @SYMTestPriority	
   536 	Critical
   537 	
   538 @SYMTestStatus 		
   539 	Implemented  
   540 	
   541 @SYMTestActions
   542     Set the origin to a non-zero position.
   543  	Draw a text "text" on screen at various positions using
   544 	incremented box size.
   545 	
   546 @SYMTestExpectedResults 
   547 	Valid bitmap should be created. This bitmap should be the same as a reference bitmap.
   548 */
   549 void CTDrawText::TestTextBoxVertical()
   550 	{	
   551 	_LIT(KTestName, "Text-BoxClippingVertical"); 
   552 	if(!iRunningOomTests)
   553 		{
   554 		INFO_PRINTF1(KTestName);
   555 		}
   556 	
   557 	ResetGc();
   558 
   559 	iGc->SetFont(iFont);
   560 	TEST(iGc->HasFont());
   561 	iGc->SetPenColor(TRgb(0, 0, 0));
   562 	iGc->SetBrushStyle(DirectGdi::ESolidBrush);
   563 	iGc->SetBrushColor(TRgb(150, 150, 150));
   564 	iGc->SetOrigin(TPoint(2, -2));
   565 
   566 	_LIT(KText, "test");
   567 
   568 	TInt baseline = 2 + iFont->FontMaxAscent()/2;
   569 	
   570 	TPositionIterator posIterator(0, KDrawTextDefaultSize.iWidth, 14, 0, KDrawTextDefaultSize.iHeight, 40);
   571 	posIterator.Begin();
   572 	
   573 	do
   574 		{
   575 		TRect rect(TPoint(posIterator.iPosX, posIterator.iPosY), TSize(posIterator.iIndexY, posIterator.iIndexX));
   576 		if(!rect.IsEmpty())
   577 			{
   578 			iGc->DrawTextVertical(KText, NULL, rect, baseline, EFalse);
   579 			}
   580 		}
   581 	while(posIterator.Next());
   582 	
   583 	iGc->ResetFont();
   584 
   585 	TESTNOERROR(iGc->GetError());
   586 	TEST(KErrNone == WriteTargetOutput(iTestParams, TPtrC(KTestName)));
   587 	}
   588 
   589 
   590 /**
   591 @SYMTestCaseID  	
   592 	GRAPHICS-DIRECTGDI-TEXT-0006
   593 	
   594 @SYMPREQ 			
   595 	PREQ39
   596 
   597 @SYMREQ
   598 	REQ9195
   599 	REQ9201 
   600 	REQ9202 
   601 	REQ9222 
   602 	REQ9223 
   603 	REQ9236 
   604 	REQ9237
   605 	
   606 @SYMTestCaseDesc	
   607 	Testing usage of pen colour, brush colour, style and pattern.
   608 	
   609 @SYMTestPriority	
   610 	Critical
   611 	
   612 @SYMTestStatus 		
   613 	Implemented 
   614 	
   615 @SYMTestActions 	
   616 	Test pen and brush parameters with text drawing methods.
   617 	Use color and brush style tables to generate various combinations
   618 	of pen color, brush color and brush style. Text drawing on screen
   619 	describes current color and style settings.  
   620 	*NOTE extended for DEF133363-Zero length text causes no brush pattern to be drawn
   621 	
   622 @SYMTestExpectedResults 
   623 	Valid bitmap should be created. This bitmap should be the same as a reference bitmap.
   624 */
   625 void CTDrawText::TestPenBrushL()
   626 	{
   627 	_LIT(KTestName, "Text-PenBrush"); 
   628 	if(!iRunningOomTests)
   629 		{
   630 		INFO_PRINTF1(KTestName);
   631 		}
   632 
   633 	_LIT(KTxtPenBrushStyle,"PenColor-BrushColor-BrushStyle");
   634 	_LIT(KTxtDash,"-");
   635 	
   636 	CFbsBitmap* bitmap = CreateCheckedBoardBitmapL(iTestParams.iTargetPixelFormat, (TSize(100, 100)));
   637 	TESTL(bitmap != NULL);
   638 	CleanupStack::PushL(bitmap);
   639 
   640 	ResetGc();
   641 	
   642 	iGc->SetBrushPattern(*bitmap);
   643 	
   644 	iGc->SetFont(iFont);
   645 	TEST(iGc->HasFont());
   646 
   647 	TPoint point(22,10);
   648 	TRect rect;
   649 	TInt ii,baseline;
   650 	
   651 	//vertical
   652 	for(ii = 0; ii<16; ii++)
   653 		{
   654 		iGc->SetPenColor(KColor16Table[ii%16]);
   655 		point.iX =26 + ii*17;
   656 		iGc->DrawTextVertical(KColor16TableNames[ii%16],NULL,point,EFalse);
   657 		}
   658 
   659 	point.SetXY(3,110);
   660 	iGc->SetPenColor(KRgbBlack);
   661 	iGc->DrawTextVertical(KTxtPenBrushStyle,NULL,point,EFalse);
   662 	point.SetXY(20,110);
   663 	for(ii = 0; ii<16; ii++)
   664 		{
   665 		point.iX =20+ii*17;
   666 		TBuf<200> txtbuf;
   667 		iGc->SetPenColor(KColor16Table[ii%16]);
   668 		txtbuf.Append(KColor16TableNames[ii%16]);
   669 		txtbuf.Append(KTxtDash);
   670 		
   671 		iGc->SetBrushColor(KColor16Table[(5*ii+1)%16]);
   672 		txtbuf.Append(KColor16TableNames[(5*ii+1)%16]);
   673 		txtbuf.Append(KTxtDash);
   674 		
   675 		iGc->SetBrushStyle(KBrushStyleTable[(2*ii+1)%9]);
   676 		txtbuf.Append(KBrushStyleTableNames[(2*ii+1)%9]);
   677 		
   678 		if (ii == 6 || ii == 7 || ii == 8)
   679 			{	//for DEF133363
   680 			txtbuf.SetLength(0);
   681 			}
   682 		
   683 		rect.SetRect(point.iX,point.iY,point.iX+17,point.iY+290);
   684 		baseline = rect.Width() / 2 + iFont->AscentInPixels() / 2;
   685 		iGc->DrawTextVertical(txtbuf,NULL,rect,baseline,EFalse);
   686 		}
   687 
   688 	//horizontal
   689 	point.SetXY(300,17);
   690 	iGc->SetPenColor(KRgbBlack);
   691 	iGc->DrawText(KTxtPenBrushStyle,NULL,point);
   692 	for(ii=0; ii<16; ii++)
   693 		{
   694 		point.iY = 20+ii*17;
   695 		TBuf<200> txtbuf;
   696 		iGc->SetPenColor(KColor16Table[ii%16]);
   697 		txtbuf.Append(KColor16TableNames[ii%16]);
   698 		txtbuf.Append(KTxtDash);
   699 
   700 		iGc->SetBrushColor(KColor16Table[(3*ii+5)%16]);
   701 		txtbuf.Append(KColor16TableNames[(3*ii+5)%16]);
   702 		txtbuf.Append(KTxtDash);
   703 
   704 		iGc->SetBrushStyle(KBrushStyleTable[(5*ii+3)%9]);
   705 		txtbuf.Append(KBrushStyleTableNames[(5*ii+3)%9]);
   706 		
   707 		if (ii == 9 || ii == 10 || ii == 11)
   708 			{	//for DEF133363
   709 			txtbuf.SetLength(0);
   710 			}
   711 
   712 		rect.SetRect(point.iX,point.iY,point.iX+290,point.iY+17);
   713 		baseline = rect.Height() / 2 + iFont->AscentInPixels() / 2;
   714 		iGc->DrawText(txtbuf,NULL,rect,baseline);	
   715 		}
   716 
   717 	for(ii=0; ii<16; ii++)
   718 		{
   719 		point.iX = 300 + (ii%4)*80;
   720 		point.iY = 310 + (ii/4)*17;
   721 		iGc->SetPenColor(KColor16Table[ii%16]);
   722 		iGc->DrawText(KColor16TableNames[ii%16],NULL,point);
   723 		}
   724 
   725 
   726 	iGc->ResetFont();
   727 
   728 	CleanupStack::PopAndDestroy(bitmap);
   729 
   730 	TESTNOERROR(iGc->GetError());
   731 	TEST(KErrNone == WriteTargetOutput(iTestParams, TPtrC(KTestName)));
   732 	}
   733 
   734 /**
   735 @SYMTestCaseID  	
   736 	GRAPHICS-DIRECTGDI-TEXT-0007
   737 	
   738 @SYMPREQ 			
   739 	PREQ39
   740 
   741 @SYMREQ
   742 	REQ9195
   743 	REQ9201 
   744 	REQ9202 
   745 	REQ9222 
   746 	REQ9223 
   747 	REQ9236 
   748 	REQ9237
   749 	
   750 @SYMTestCaseDesc	
   751 	Test for alignment of text inside drawing box.
   752 	
   753 @SYMTestPriority	
   754 	Critical
   755 	
   756 @SYMTestStatus 		
   757 	Implemented 
   758 	
   759 @SYMTestActions 	
   760 	Call functions testing all combinations of parameters values given below:
   761 	aAlignment:
   762 		DGDI::ELeft,
   763 		DGDI::ECenter,
   764 		DGDI::ERight
   765 	aMargin:
   766 		-50,
   767 		0,
   768 		50
   769 	aUp:
   770 		ETrue,
   771 		EFalse
   772 	Use gray background box to show arguments impact. 
   773 
   774 @SYMTestExpectedResults 
   775 	Valid bitmap should be created. This bitmap should be the same as a reference bitmap.
   776 */
   777 void CTDrawText::TestAlign()
   778 	{
   779 	_LIT(KTestName, "Text-Alignment");
   780 	if(!iRunningOomTests)
   781 		{
   782 		INFO_PRINTF1(KTestName);
   783 		}
   784 
   785 	ResetGc();
   786 
   787 	iGc->SetFont(iFont);
   788 	TEST(iGc->HasFont());
   789 	iGc->SetPenColor(TRgb(0, 0, 0));
   790 	iGc->SetBrushStyle(DirectGdi::ESolidBrush);
   791 	iGc->SetBrushColor(KRgbGray);
   792 
   793 	_LIT(KMargin," Margin = ");
   794 	_LIT(KAlign,"Align = ");
   795 	TRect rect;
   796 	TInt baseline;
   797 
   798 	//vertical
   799 	for(TInt kk=0; kk<2; kk++) //loop over up and down directions
   800 		{
   801 		for(TInt ii=0; ii<3; ii++) // negative, zero and positive margin value
   802 			{
   803 			TInt margin = (-ii+1)*50;
   804 			for(TInt jj=0; jj<3; jj++) // ELeft, ECenter and ERight alignment values
   805 				{
   806 				rect.SetRect(kk*185+5+(3*ii+jj)*20 +1, 10, kk*185+25+(3*ii+jj)*20-1, 390);
   807 				baseline = rect.Width()/2 + iFont->AscentInPixels()/2 ;
   808 				TBuf<128> textbuf;
   809 				textbuf.Copy(KAlign);
   810 				textbuf.Append(KTextAlignTableNames[jj%3]);
   811 				textbuf.Append(KMargin);
   812 				textbuf.AppendNum(margin);
   813 				iGc->DrawTextVertical(textbuf,NULL,rect,baseline,kk!=0,KTextAlignTable[jj%3],margin);
   814 				}
   815 			}
   816 		}
   817 
   818 	//horizontal
   819 	for(TInt ii=0; ii<3; ii++) // negative, zero and positive margin value
   820 		{
   821 		TInt margin = (-ii+1)*40;
   822 		for(TInt jj=0; jj<3; jj++) // ELeft, ECenter and ERight alignment values
   823 			{
   824 			rect.SetRect(373, 30+(3*ii+jj)*20+1, 635, 50+(3*ii+jj)*20-1);
   825 			baseline = rect.Height()/2 + iFont->AscentInPixels()/2;
   826 			TBuf<128> textbuf;
   827 			textbuf.Copy(KAlign);
   828 			textbuf.Append(KTextAlignTableNames[jj%3]);
   829 			textbuf.Append(KMargin);
   830 			textbuf.AppendNum(margin);
   831 			iGc->DrawText(textbuf,NULL,rect,baseline,KTextAlignTable[jj%3],margin);
   832 			}
   833 		}
   834 
   835 	iGc->ResetFont();
   836 
   837 	TESTNOERROR(iGc->GetError());
   838 	TEST(KErrNone == WriteTargetOutput(iTestParams, TPtrC(KTestName)));
   839 	}
   840 
   841 /**
   842 @SYMTestCaseID  	
   843 	GRAPHICS-DIRECTGDI-TEXT-0008
   844 	
   845 @SYMPREQ 			
   846 	PREQ39
   847 
   848 @SYMREQ
   849 	REQ9195
   850 	REQ9201 
   851 	REQ9202 
   852 	REQ9222 
   853 	REQ9223 
   854 	REQ9236 
   855 	REQ9237
   856 	
   857 @SYMTestCaseDesc	
   858 	Testing justification of a text.
   859 	
   860 @SYMTestPriority	
   861 	Critical
   862 	
   863 @SYMTestStatus 		
   864 	Initial version 
   865 	
   866 @SYMTestActions 	
   867 	Test the effect of the following functions:
   868 	SetCharJustification()
   869 	SetWordJustification()
   870 	UpdateJustification()
   871 	UpdateJustificationVertical()
   872 	NoJustifyAutoUpdate() 
   873 	
   874 @SYMTestExpectedResults 
   875 	Valid bitmap should be created. This bitmap should be the same as a reference bitmap.
   876 
   877 */
   878 void CTDrawText::TestJustification()
   879 	{
   880 	_LIT(KTestName, "Text-Justification"); 
   881 	if(!iRunningOomTests)
   882 		{
   883 		INFO_PRINTF1(KTestName);
   884 		}
   885 
   886 	ResetGc();
   887 
   888 	iGc->SetFont(iFont);
   889 	TEST(iGc->HasFont());
   890 	iGc->SetPenColor(TRgb(0, 0, 0));
   891 
   892 	//vertical
   893 	TInt charExcessWidth = 30;
   894 	TInt charNumGaps = 30;
   895 	TInt wordExcessWidth = 100;
   896 	TInt wordNumChars = 5;
   897 
   898 	TRect rect;
   899 	TInt baseline, kk, jj;
   900 	for( kk=0; kk<2; kk++) //loop over up and down directions
   901 		{
   902 		for( jj=0; jj<4; jj++) 
   903 			{
   904 			iGc->SetCharJustification(charExcessWidth*(jj%2) , charNumGaps*(jj%2));
   905 			iGc->SetWordJustification(wordExcessWidth*(jj>>1), wordNumChars*(jj>>1));
   906 			rect.SetRect(10+(5*kk+jj)*20+1, 10, 30+(5*kk+jj)*20-1, 390);
   907 			baseline = rect.Width()/2 + iFont->AscentInPixels()/2;
   908 			iGc->DrawTextVertical(KPangram,NULL,rect,baseline,kk!=0);
   909 			}
   910 		}
   911 
   912 	//horizontal
   913 	for( jj=0; jj<4; jj++)
   914 		{
   915 		iGc->SetCharJustification(charExcessWidth*(jj%2) , charNumGaps*(jj%2));
   916 		iGc->SetWordJustification(wordExcessWidth*(jj>>1), wordNumChars*(jj>>1));
   917 		rect.SetRect(210, 10+jj*20+1, 640, 30+jj*20-1);
   918 		baseline = rect.Height()/2 + iFont->AscentInPixels()/2;
   919 		iGc->DrawText(KPangram,NULL,rect,baseline);
   920 		}
   921 
   922 	iGc->ResetFont();
   923 
   924 	TESTNOERROR(iGc->GetError());
   925 	TEST(KErrNone == WriteTargetOutput(iTestParams, TPtrC(KTestName)));
   926 	}
   927 
   928 /**
   929 @SYMTestCaseID  	
   930 	GRAPHICS-DIRECTGDI-TEXT-0009
   931 	
   932 @SYMPREQ 			
   933 	PREQ39
   934 
   935 @SYMREQ
   936 	REQ9195
   937 	REQ9201 
   938 	REQ9202 
   939 	REQ9222 
   940 	REQ9223 
   941 	REQ9236 
   942 	REQ9237
   943 	
   944 @SYMTestCaseDesc	
   945 	Testing usage of shadow colour, underline and strikethrough rendering using either BitGDI or DirectGDI gc.
   946 	
   947 @SYMTestPriority	
   948 	Critical
   949 	
   950 @SYMTestStatus 		
   951 	Implemented 
   952 	
   953 @SYMTestActions 	
   954 	Test the shadow colour, underline and strikethrough parameters for text drawing. 
   955 	
   956 @SYMTestExpectedResults 
   957 	Valid bitmap should be created. This bitmap should be the same as a reference bitmap.
   958 */
   959 void CTDrawText::TestShadowUnderStrike()
   960 	{
   961 	_LIT(KTestName, "Text-ShadowUnderlineStrikethrough"); 
   962 	if(!iRunningOomTests)
   963 		{
   964 		INFO_PRINTF1(KTestName);
   965 		}
   966 	
   967 	ResetGc();
   968 
   969 	iGc->SetFont(iFont);
   970 	TEST(iGc->HasFont());
   971 	iGc->SetPenColor(TRgb(0, 0, 0));
   972 
   973 	//look-up tables, simplifies below loops
   974 	const DirectGdi::TFontUnderline KFontUnderlineTable[]=
   975 		{
   976 		DirectGdi::EUnderlineOn,
   977 		DirectGdi::EUnderlineOff,
   978 		DirectGdi::EUnderlineOn,
   979 		DirectGdi::EUnderlineOff,
   980 		DirectGdi::EUnderlineOn,
   981 		};
   982 
   983 	const DirectGdi::TFontStrikethrough KFontStrikethroughTable[]=
   984 		{
   985 		DirectGdi::EStrikethroughOff,
   986 		DirectGdi::EStrikethroughOn,
   987 		DirectGdi::EStrikethroughOn,
   988 		DirectGdi::EStrikethroughOff,
   989 		DirectGdi::EStrikethroughOn,
   990 		};
   991 	
   992 	//vertical
   993 	TPoint position;
   994 	for(TInt ii=0; ii<2; ii++ ) //loop over up and down directions
   995 		{
   996 		position.SetXY(10+ii*100,10+ii*380);
   997 		for(TInt jj=0; jj<5; jj++)
   998 			{
   999 			iGc->SetUnderlineStyle(KFontUnderlineTable[jj%5]);
  1000 			iGc->SetStrikethroughStyle(KFontStrikethroughTable[jj%5]);
  1001 			if(jj==3)
  1002 				{
  1003 				iGc->SetTextShadowColor(TRgb(100,10,10));
  1004 				}
  1005 			iGc->DrawTextVertical(KPangram,NULL,position,ii!=0);
  1006 			position.iX+=20;
  1007 			}
  1008 		}
  1009 
  1010 	//horizontal
  1011 	position.SetXY(210,30);
  1012 	for(TInt jj=0; jj<5; jj++)
  1013 		{
  1014 		iGc->SetUnderlineStyle(KFontUnderlineTable[jj%5]);
  1015 		iGc->SetStrikethroughStyle(KFontStrikethroughTable[jj%5]);
  1016 		if(jj==3)
  1017 			{
  1018 			iGc->SetTextShadowColor(TRgb(100,10,10));
  1019 			}
  1020 		iGc->DrawText(KPangram,NULL,position);
  1021 		position.iY+=20;
  1022 		}
  1023 
  1024 	iGc->ResetFont();
  1025 
  1026 	TESTNOERROR(iGc->GetError());
  1027 	TEST(KErrNone == WriteTargetOutput(iTestParams, TPtrC(KTestName)));
  1028 	}
  1029 
  1030 /**
  1031 @SYMTestCaseID  	
  1032 	GRAPHICS-DIRECTGDI-TEXT-0010
  1033 	
  1034 @SYMPREQ 			
  1035 	PREQ39
  1036 
  1037 @SYMREQ
  1038 	REQ9195
  1039 	REQ9201 
  1040 	REQ9202 
  1041 	REQ9222 
  1042 	REQ9223 
  1043 	REQ9236 
  1044 	REQ9237
  1045 	
  1046 @SYMTestCaseDesc	
  1047 	Test for propper handling invalid arguments using either BitGDI or DirectGDI gc.
  1048 	
  1049 @SYMTestPriority	
  1050 	Critical
  1051 	
  1052 @SYMTestStatus 		
  1053 	Implemented 
  1054 	
  1055 @SYMTestActions 	
  1056 	Test for propper handling invalid arguments for text drawing using either BitGDI or DirectGDI gc.  
  1057 	
  1058 @SYMTestExpectedResults 
  1059 	Function shall detect invalid parameters and return. Nothing will be drawn on the target surface.
  1060 */
  1061 void CTDrawText::TestInvalidParamsL()
  1062 	{
  1063 	_LIT(KTestName, "Text-InvalidParameters"); 
  1064 	if(!iRunningOomTests)
  1065 		{
  1066 		INFO_PRINTF1(KTestName);
  1067 		}
  1068 	
  1069 	ResetGc();
  1070 
  1071 	iGc->SetFont(iFont);
  1072 	TEST(iGc->HasFont());
  1073 	iGc->SetPenColor(TRgb(0, 0, 0));
  1074 	
  1075 	//NullDescriptor - drawing an empty descriptor is not an error, DrawText()
  1076 	//and DrawTextVertical() should return silently in this case.
  1077 	//horizontal
  1078 	iGc->DrawText(KNullDesC, NULL, TPoint(10, 30));
  1079 	CheckErrorsL(KErrNone, KErrNone, (TText8*)__FILE__, __LINE__);
  1080 	iGc->DrawText(KNullDesC, NULL);
  1081 	CheckErrorsL(KErrNone, KErrNone, (TText8*)__FILE__, __LINE__);
  1082 	
  1083 	TRect rect(10,50,300,70);
  1084 	TInt baseline = rect.Height() / 2 + iFont->AscentInPixels() / 2;
  1085 	iGc->DrawText(KNullDesC,NULL,rect,baseline);
  1086 	CheckErrorsL(KErrNone, KErrNone, (TText8*)__FILE__, __LINE__);
  1087 	rect.SetRect(10,70,550,90);
  1088 	iGc->DrawText(KNullDesC,NULL,rect);
  1089 	CheckErrorsL(KErrNone, KErrNone, (TText8*)__FILE__, __LINE__);
  1090 
  1091 	//vertical
  1092 	iGc->DrawTextVertical(KNullDesC,NULL,TPoint(10,10),EFalse);
  1093 	CheckErrorsL(KErrNone, KErrNone, (TText8*)__FILE__, __LINE__);
  1094 	iGc->DrawTextVertical(KNullDesC,NULL,EFalse);
  1095 	CheckErrorsL(KErrNone, KErrNone, (TText8*)__FILE__, __LINE__);
  1096 	rect.SetRect(30,10,50,300);
  1097 	baseline = rect.Width() / 2 + iFont->AscentInPixels() / 2;
  1098 	iGc->DrawTextVertical(KNullDesC,NULL,rect,baseline,EFalse);
  1099 	CheckErrorsL(KErrNone, KErrNone, (TText8*)__FILE__, __LINE__);
  1100 	rect.SetRect(50,10,80,300);
  1101 	baseline = rect.Width() / 2 + iFont->AscentInPixels() / 2;
  1102 	iGc->DrawTextVertical(KNullDesC,NULL,rect,baseline,10,EFalse);
  1103 	CheckErrorsL(KErrNone, KErrNone, (TText8*)__FILE__, __LINE__);
  1104 	rect.SetRect(50,100,80,400);
  1105 	iGc->DrawTextVertical(KNullDesC,NULL,rect,EFalse);
  1106 	CheckErrorsL(KErrNone, KErrNone, (TText8*)__FILE__, __LINE__);
  1107 
  1108 	//invalid box
  1109 	for(TInt ii=1; ii<9; ii++)
  1110 		{
  1111 		rect.SetRect(220+(ii%3)*100, 100+(ii/3)*100, 320, 200);
  1112 		baseline = Abs(rect.Height())/2 + iFont->AscentInPixels()/2;
  1113 		iGc->DrawText(KPangram,NULL,rect,baseline);
  1114 		CheckErrorsL(KErrArgument, KErrNone, (TText8*)__FILE__, __LINE__);
  1115 		iGc->DrawText(KPangram,NULL,rect);
  1116 		CheckErrorsL(KErrArgument, KErrNone, (TText8*)__FILE__, __LINE__);
  1117 
  1118 		baseline = Abs(rect.Width())/2 + iFont->AscentInPixels() /2;
  1119 		iGc->DrawTextVertical(KPangram,NULL,rect,baseline,EFalse);
  1120 		CheckErrorsL(KErrArgument, KErrNone, (TText8*)__FILE__, __LINE__);
  1121 
  1122 		iGc->DrawTextVertical(KPangram,NULL,rect,EFalse);
  1123 		CheckErrorsL(KErrArgument, KErrNone, (TText8*)__FILE__, __LINE__);
  1124 
  1125 		iGc->DrawTextVertical(KPangram,NULL,rect,baseline,10,EFalse);
  1126 		CheckErrorsL(KErrArgument, KErrNone, (TText8*)__FILE__, __LINE__);
  1127 		}
  1128 		
  1129 	//invalid aAlignment
  1130 	rect.SetRect(10,320,300,540);
  1131 	baseline = rect.Height() / 2 + iFont->AscentInPixels() / 2;
  1132 	iGc->DrawText(KPangram,NULL,rect,baseline, (DirectGdi::TTextAlign) 5 );
  1133 	CheckErrorsL(KErrArgument, KErrNone, (TText8*)__FILE__, __LINE__);
  1134 
  1135 	rect.SetRect(540,10,560,350);
  1136 	baseline = rect.Width() /2 + iFont->AscentInPixels() / 2;
  1137 	iGc->DrawTextVertical(KPangram,NULL,rect,baseline,10, EFalse , (DirectGdi::TTextAlign) 5 );
  1138 	CheckErrorsL(KErrArgument, KErrNone, (TText8*)__FILE__, __LINE__);
  1139 	iGc->ResetFont();	
  1140 	}
  1141 	
  1142 /**
  1143 Override of base class pure virtual
  1144 Lists the tests to be run
  1145 */
  1146 void CTDrawText::RunTestsL()
  1147 	{
  1148 	MFontGlyphImageStorage* glyphStorage = NULL;
  1149 	iGc->GetInterface(TUid::Uid(KDirectGdiGetGlyphStorageUid), (TAny*&) glyphStorage);
  1150 	if(glyphStorage)
  1151 		{
  1152 		glyphStorage->CleanGlyphImageCache();
  1153 		CleanupStack::PushL(TCleanupItem(CleanCache, glyphStorage));
  1154 		}
  1155 	SetTestStepID(_L("GRAPHICS-DIRECTGDI-TEXT-0001"));
  1156 	TestBasicFunctionality();
  1157 	RecordTestResultL();
  1158 	if(!iRunningOomTests)
  1159 		{
  1160 		SetTestStepID(_L("GRAPHICS-DIRECTGDI-TEXT-0002"));
  1161 		TestTextPositioning();
  1162 		RecordTestResultL();
  1163 		SetTestStepID(_L("GRAPHICS-DIRECTGDI-TEXT-0003"));
  1164 		TestTextBox();
  1165 		RecordTestResultL();
  1166 		SetTestStepID(_L("GRAPHICS-DIRECTGDI-TEXT-0004"));
  1167 		TestTextPositioningVertical(EFalse);
  1168 		RecordTestResultL();
  1169 		SetTestStepID(_L("GRAPHICS-DIRECTGDI-TEXT-0004"));
  1170 		TestTextPositioningVertical(ETrue);
  1171 		RecordTestResultL();
  1172 		SetTestStepID(_L("GRAPHICS-DIRECTGDI-TEXT-0005"));
  1173 		TestTextBoxVertical();
  1174 		RecordTestResultL();
  1175 		SetTestStepID(_L("GRAPHICS-DIRECTGDI-TEXT-0008"));
  1176 		TestJustification();
  1177 		RecordTestResultL();
  1178 		SetTestStepID(_L("GRAPHICS-DIRECTGDI-TEXT-0009"));
  1179 		TestShadowUnderStrike();
  1180 		RecordTestResultL();
  1181 		SetTestStepID(_L("GRAPHICS-DIRECTGDI-TEXT-0007"));
  1182 		TestAlign();
  1183 		RecordTestResultL();
  1184 		SetTestStepID(_L("GRAPHICS-DIRECTGDI-TEXT-0006"));
  1185 		TestPenBrushL();
  1186 		RecordTestResultL();
  1187 		SetTestStepID(_L("GRAPHICS-DIRECTGDI-TEXT-0010"));
  1188 		TestInvalidParamsL();
  1189 		RecordTestResultL();
  1190 		}
  1191 
  1192 	if(glyphStorage)
  1193 		{
  1194 		glyphStorage->CleanGlyphImageCache();
  1195 		CleanupStack::Pop(glyphStorage);
  1196 		}
  1197 	}
  1198 
  1199 
  1200