windowing/windowserver/nga/CLIENT/RGC.CPP
branchRCL_3
changeset 18 57c618273d5c
parent 0 5d03bc08d59c
child 19 bbf46f59e123
equal deleted inserted replaced
17:e375a7921169 18:57c618273d5c
  1418 end of the text.
  1418 end of the text.
  1419 @see CGraphicsContext::DrawText() */
  1419 @see CGraphicsContext::DrawText() */
  1420 	{
  1420 	{
  1421 	iPimpl->WriteAnyPendingStateChanges();
  1421 	iPimpl->WriteAnyPendingStateChanges();
  1422 	TWsGcCmdDrawText printText(aPos,aBuf.Length());
  1422 	TWsGcCmdDrawText printText(aPos,aBuf.Length());
       
  1423     __ASSERT_ALWAYS(((aBuf.Size()+sizeof(printText))<=EClientBufferMaxSize),Panic(EW32PanicSizeNotExpected));    
  1423 	WriteTextCommand(&printText,sizeof(printText),aBuf,EWsGcOpDrawText,EWsGcOpDrawTextPtr);
  1424 	WriteTextCommand(&printText,sizeof(printText),aBuf,EWsGcOpDrawText,EWsGcOpDrawTextPtr);
  1424 	}
  1425 	}
  1425 
  1426 
  1426 EXPORT_C void CWindowGc::DrawText(const TDesC &aBuf,const TRect &aBox,TInt aBaselineOffset,TTextAlign aHoriz,TInt aLeftMrg)
  1427 EXPORT_C void CWindowGc::DrawText(const TDesC &aBuf,const TRect &aBox,TInt aBaselineOffset,TTextAlign aHoriz,TInt aLeftMrg)
  1427 /** Draws horizontal text within a cleared box.
  1428 /** Draws horizontal text within a cleared box.
  1450 	if (aBuf.Size()<(TInt)(iBuffer->BufferSize()-sizeof(TWsCmdHeader)-sizeof(TWsGcCmdBoxTextOptimised2))) 
  1451 	if (aBuf.Size()<(TInt)(iBuffer->BufferSize()-sizeof(TWsCmdHeader)-sizeof(TWsGcCmdBoxTextOptimised2))) 
  1451 		{
  1452 		{
  1452 		if (aHoriz==ELeft && aLeftMrg==0)
  1453 		if (aHoriz==ELeft && aLeftMrg==0)
  1453 			{
  1454 			{
  1454 			TWsGcCmdBoxTextOptimised1 boxTextOpt1(aBox,aBaselineOffset,aBuf.Length());
  1455 			TWsGcCmdBoxTextOptimised1 boxTextOpt1(aBox,aBaselineOffset,aBuf.Length());
       
  1456 			__ASSERT_ALWAYS(((aBuf.Size()+sizeof(boxTextOpt1))<=EClientBufferMaxSize),Panic(EW32PanicSizeNotExpected)); 
  1455 			Write(&boxTextOpt1,sizeof(boxTextOpt1),aBuf.Ptr(),aBuf.Size(),EWsGcOpDrawBoxTextOptimised1);
  1457 			Write(&boxTextOpt1,sizeof(boxTextOpt1),aBuf.Ptr(),aBuf.Size(),EWsGcOpDrawBoxTextOptimised1);
  1456 			}
  1458 			}
  1457 		else
  1459 		else
  1458 			{
  1460 			{
  1459 			TWsGcCmdBoxTextOptimised2 boxTextOpt2(aBox,aBaselineOffset,aHoriz,aLeftMrg,aBuf.Length());
  1461 			TWsGcCmdBoxTextOptimised2 boxTextOpt2(aBox,aBaselineOffset,aHoriz,aLeftMrg,aBuf.Length());
       
  1462 			__ASSERT_ALWAYS(((aBuf.Size()+sizeof(boxTextOpt2))<=EClientBufferMaxSize),Panic(EW32PanicSizeNotExpected)); 
  1460 			Write(&boxTextOpt2,sizeof(boxTextOpt2),aBuf.Ptr(),aBuf.Size(),EWsGcOpDrawBoxTextOptimised2);
  1463 			Write(&boxTextOpt2,sizeof(boxTextOpt2),aBuf.Ptr(),aBuf.Size(),EWsGcOpDrawBoxTextOptimised2);
  1461 			}
  1464 			}
  1462 		}
  1465 		}
  1463 	else
  1466 	else
  1464 		{
  1467 		{
  1465 		TWsGcCmdBoxText boxText(aBox,aBaselineOffset,aHoriz,aLeftMrg,aBuf.Length(),iPimpl->iFont->TextWidthInPixels(aBuf));
  1468 		TWsGcCmdBoxText boxText(aBox,aBaselineOffset,aHoriz,aLeftMrg,aBuf.Length(),iPimpl->iFont->TextWidthInPixels(aBuf));
       
  1469 		__ASSERT_ALWAYS(((aBuf.Size()+sizeof(boxText))<=EClientBufferMaxSize),Panic(EW32PanicSizeNotExpected)); 
  1466 		WriteTextCommand(&boxText,sizeof(boxText),aBuf,EWsGcOpDrawBoxText,EWsGcOpDrawBoxTextPtr);
  1470 		WriteTextCommand(&boxText,sizeof(boxText),aBuf,EWsGcOpDrawBoxText,EWsGcOpDrawBoxTextPtr);
  1467 		}
  1471 		}
  1468 	}
  1472 	}
  1469 
  1473 
  1470 TInt CWindowGc::APIExDrawText(const TDesC& aBuf,const TTextParameters* aParam,const TPoint& aPos)
  1474 TInt CWindowGc::APIExDrawText(const TDesC& aBuf,const TTextParameters* aParam,const TPoint& aPos)
  1471 	{
  1475 	{
  1472 	iPimpl->WriteAnyPendingStateChanges();
  1476 	iPimpl->WriteAnyPendingStateChanges();
  1473 	TWsGcCmdDrawTextInContext printTextInContext(aPos,aBuf.Length(),aParam->iStart,aParam->iEnd);
  1477 	TWsGcCmdDrawTextInContext printTextInContext(aPos,aBuf.Length(),aParam->iStart,aParam->iEnd);
       
  1478 	__ASSERT_ALWAYS(((aBuf.Size()+sizeof(printTextInContext))<=EClientBufferMaxSize),Panic(EW32PanicSizeNotExpected)); 
  1474 	WriteTextCommand(&printTextInContext,sizeof(printTextInContext),aBuf,EWsGcOpDrawTextInContext,EWsGcOpDrawTextInContextPtr);
  1479 	WriteTextCommand(&printTextInContext,sizeof(printTextInContext),aBuf,EWsGcOpDrawTextInContext,EWsGcOpDrawTextInContextPtr);
  1475 	return KErrNone;
  1480 	return KErrNone;
  1476 	}
  1481 	}
  1477 	
  1482 	
  1478 TInt CWindowGc::APIExDrawText(const TDesC& aBuf,const TTextParameters* aParam,const TRect& aBox,TInt aBaselineOffset,TTextAlign aHoriz,TInt aLeftMrg)
  1483 TInt CWindowGc::APIExDrawText(const TDesC& aBuf,const TTextParameters* aParam,const TRect& aBox,TInt aBaselineOffset,TTextAlign aHoriz,TInt aLeftMrg)
  1481 	if (aBuf.Size()<(TInt)(iBuffer->BufferSize()-sizeof(TWsCmdHeader)-sizeof(TWsGcCmdBoxTextInContextOptimised2))) 
  1486 	if (aBuf.Size()<(TInt)(iBuffer->BufferSize()-sizeof(TWsCmdHeader)-sizeof(TWsGcCmdBoxTextInContextOptimised2))) 
  1482 		{
  1487 		{
  1483 		if (aHoriz==ELeft && aLeftMrg==0)
  1488 		if (aHoriz==ELeft && aLeftMrg==0)
  1484 			{
  1489 			{
  1485 			TWsGcCmdBoxTextInContextOptimised1 boxTextOpt1(aBox,aBaselineOffset,aBuf.Length(),aParam->iStart,aParam->iEnd);
  1490 			TWsGcCmdBoxTextInContextOptimised1 boxTextOpt1(aBox,aBaselineOffset,aBuf.Length(),aParam->iStart,aParam->iEnd);
       
  1491 			__ASSERT_ALWAYS(((aBuf.Size()+sizeof(boxTextOpt1))<=EClientBufferMaxSize),Panic(EW32PanicSizeNotExpected)); 
  1486 			Write(&boxTextOpt1,sizeof(boxTextOpt1),aBuf.Ptr(),aBuf.Size(),EWsGcOpDrawBoxTextInContextOptimised1);
  1492 			Write(&boxTextOpt1,sizeof(boxTextOpt1),aBuf.Ptr(),aBuf.Size(),EWsGcOpDrawBoxTextInContextOptimised1);
  1487 			}
  1493 			}
  1488 		else
  1494 		else
  1489 			{
  1495 			{
  1490 			TWsGcCmdBoxTextInContextOptimised2 boxTextOpt2(aBox,aBaselineOffset,aHoriz,aLeftMrg,aBuf.Length(),aParam->iStart,aParam->iEnd);
  1496 			TWsGcCmdBoxTextInContextOptimised2 boxTextOpt2(aBox,aBaselineOffset,aHoriz,aLeftMrg,aBuf.Length(),aParam->iStart,aParam->iEnd);
       
  1497 			__ASSERT_ALWAYS(((aBuf.Size()+sizeof(boxTextOpt2))<=EClientBufferMaxSize),Panic(EW32PanicSizeNotExpected)); 
  1491 			Write(&boxTextOpt2,sizeof(boxTextOpt2),aBuf.Ptr(),aBuf.Size(),EWsGcOpDrawBoxTextInContextOptimised2);
  1498 			Write(&boxTextOpt2,sizeof(boxTextOpt2),aBuf.Ptr(),aBuf.Size(),EWsGcOpDrawBoxTextInContextOptimised2);
  1492 			}
  1499 			}
  1493 		}
  1500 		}
  1494 	else
  1501 	else
  1495 		{
  1502 		{
  1496 		TWsGcCmdBoxTextInContext boxText(aBox,aBaselineOffset,aHoriz,aLeftMrg,aBuf.Length(),iPimpl->iFont->TextWidthInPixels(aBuf),aParam->iStart,aParam->iEnd);
  1503 		TWsGcCmdBoxTextInContext boxText(aBox,aBaselineOffset,aHoriz,aLeftMrg,aBuf.Length(),iPimpl->iFont->TextWidthInPixels(aBuf),aParam->iStart,aParam->iEnd);
       
  1504 		__ASSERT_ALWAYS(((aBuf.Size()+sizeof(boxText))<=EClientBufferMaxSize),Panic(EW32PanicSizeNotExpected)); 
  1497 		WriteTextCommand(&boxText,sizeof(boxText),aBuf,EWsGcOpDrawBoxTextInContext,EWsGcOpDrawBoxTextInContextPtr);
  1505 		WriteTextCommand(&boxText,sizeof(boxText),aBuf,EWsGcOpDrawBoxTextInContext,EWsGcOpDrawBoxTextInContextPtr);
  1498 		}
  1506 		}
  1499 	return KErrNone;
  1507 	return KErrNone;
  1500 	}
  1508 	}
  1501 EXPORT_C void CWindowGc::DrawTextVertical(const TDesC& aText,const TPoint& aPos,TBool aUp)
  1509 EXPORT_C void CWindowGc::DrawTextVertical(const TDesC& aText,const TPoint& aPos,TBool aUp)
  1507 @param aPos Point of origin of the text baseline. 
  1515 @param aPos Point of origin of the text baseline. 
  1508 @param aUp Direction. ETrue for up, EFalse for down. */
  1516 @param aUp Direction. ETrue for up, EFalse for down. */
  1509 	{
  1517 	{
  1510 	iPimpl->WriteAnyPendingStateChanges();
  1518 	iPimpl->WriteAnyPendingStateChanges();
  1511 	TWsGcCmdDrawTextVertical printText(aPos,aText.Length(),aUp);
  1519 	TWsGcCmdDrawTextVertical printText(aPos,aText.Length(),aUp);
       
  1520 	__ASSERT_ALWAYS(((aText.Size()+sizeof(printText))<=EClientBufferMaxSize),Panic(EW32PanicSizeNotExpected)); 
  1512 	WriteTextCommand(&printText,sizeof(printText),aText,EWsGcOpDrawTextVertical,EWsGcOpDrawTextVerticalPtr);
  1521 	WriteTextCommand(&printText,sizeof(printText),aText,EWsGcOpDrawTextVertical,EWsGcOpDrawTextVerticalPtr);
  1513 	}
  1522 	}
  1514 
  1523 
  1515 EXPORT_C void CWindowGc::DrawTextVertical(const TDesC& aText,const TRect& aBox,TInt aBaselineOffset,TBool aUp,TTextAlign aVert,TInt aMargin)
  1524 EXPORT_C void CWindowGc::DrawTextVertical(const TDesC& aText,const TRect& aBox,TInt aBaselineOffset,TBool aUp,TTextAlign aVert,TInt aMargin)
  1516 /** Draws text vertically in the specified direction, within a box of the specified 
  1525 /** Draws text vertically in the specified direction, within a box of the specified 
  1533 	boxText.up=aUp;
  1542 	boxText.up=aUp;
  1534 	boxText.vert=aVert;
  1543 	boxText.vert=aVert;
  1535 	boxText.margin=aMargin;
  1544 	boxText.margin=aMargin;
  1536 	boxText.length=aText.Length();
  1545 	boxText.length=aText.Length();
  1537 	boxText.width=iPimpl->iFont->TextWidthInPixels(aText);
  1546 	boxText.width=iPimpl->iFont->TextWidthInPixels(aText);
       
  1547 	__ASSERT_ALWAYS(((aText.Size()+sizeof(boxText))<=EClientBufferMaxSize),Panic(EW32PanicSizeNotExpected)); 
  1538 	WriteTextCommand(&boxText,sizeof(boxText),aText,EWsGcOpDrawBoxTextVertical,EWsGcOpDrawBoxTextVerticalPtr);
  1548 	WriteTextCommand(&boxText,sizeof(boxText),aText,EWsGcOpDrawBoxTextVertical,EWsGcOpDrawBoxTextVerticalPtr);
  1539 	}
  1549 	}
  1540 
  1550 
  1541 TInt CWindowGc::APIExDrawTextVertical(const TDesC& aText,const TTextParameters* aParam,const TPoint& aPos,TBool aUp)
  1551 TInt CWindowGc::APIExDrawTextVertical(const TDesC& aText,const TTextParameters* aParam,const TPoint& aPos,TBool aUp)
  1542 	{
  1552 	{
  1543 	iPimpl->WriteAnyPendingStateChanges();
  1553 	iPimpl->WriteAnyPendingStateChanges();
  1544 	TWsGcCmdDrawTextInContextVertical printText(aPos,aText.Length(),aUp,aParam->iStart,aParam->iEnd);
  1554 	TWsGcCmdDrawTextInContextVertical printText(aPos,aText.Length(),aUp,aParam->iStart,aParam->iEnd);
       
  1555 	__ASSERT_ALWAYS(((aText.Size()+sizeof(printText))<=EClientBufferMaxSize),Panic(EW32PanicSizeNotExpected)); 
  1545 	WriteTextCommand(&printText,sizeof(printText),aText,EWsGcOpDrawTextInContextVertical,EWsGcOpDrawTextInContextVerticalPtr);
  1556 	WriteTextCommand(&printText,sizeof(printText),aText,EWsGcOpDrawTextInContextVertical,EWsGcOpDrawTextInContextVerticalPtr);
  1546 	return KErrNone;
  1557 	return KErrNone;
  1547 	}
  1558 	}
  1548 
  1559 
  1549 TInt CWindowGc::APIExDrawTextVertical(const TDesC& aText,const TTextParameters* aParam,const TRect& aBox,TInt aBaselineOffset,TBool aUp,TTextAlign aVert,TInt aMargin)
  1560 TInt CWindowGc::APIExDrawTextVertical(const TDesC& aText,const TTextParameters* aParam,const TRect& aBox,TInt aBaselineOffset,TBool aUp,TTextAlign aVert,TInt aMargin)
  1556 	boxText.margin=aMargin;
  1567 	boxText.margin=aMargin;
  1557 	boxText.length=aText.Length();
  1568 	boxText.length=aText.Length();
  1558 	boxText.width=iPimpl->iFont->TextWidthInPixels(aText);
  1569 	boxText.width=iPimpl->iFont->TextWidthInPixels(aText);
  1559 	boxText.start = aParam->iStart;
  1570 	boxText.start = aParam->iStart;
  1560 	boxText.end = aParam->iEnd;
  1571 	boxText.end = aParam->iEnd;
       
  1572 	__ASSERT_ALWAYS(((aText.Size()+sizeof(boxText))<=EClientBufferMaxSize),Panic(EW32PanicSizeNotExpected)); 
  1561 	WriteTextCommand(&boxText,sizeof(boxText),aText,EWsGcOpDrawBoxTextInContextVertical,EWsGcOpDrawBoxTextInContextVerticalPtr);
  1573 	WriteTextCommand(&boxText,sizeof(boxText),aText,EWsGcOpDrawBoxTextInContextVertical,EWsGcOpDrawBoxTextInContextVerticalPtr);
  1562 	return KErrNone;
  1574 	return KErrNone;
  1563 	}
  1575 	}
  1564 
  1576 
  1565 //========================Extra functions============================
  1577 //========================Extra functions============================