uifw/EikStd/dlgsrc/aknrecordinggc.cpp
branchRCL_3
changeset 4 8ca85d2f0db7
parent 0 2f259fa3e83a
child 23 3d340a0166ff
--- a/uifw/EikStd/dlgsrc/aknrecordinggc.cpp	Tue Feb 02 01:00:49 2010 +0200
+++ b/uifw/EikStd/dlgsrc/aknrecordinggc.cpp	Fri Feb 19 23:04:46 2010 +0200
@@ -25,6 +25,7 @@
 #include <e32err.h>
 
 #include "aknrecordinggc.h"
+#include "akntrace.h"
 
 #ifdef _DEBUG
 _LIT( KOverFlow, "Array overflow" );
@@ -64,10 +65,12 @@
 //
 CAknRecordingGc::~CAknRecordingGc()
     {
+    _AKNTRACE_FUNC_ENTER;
     iLines.ResetAndDestroy();
     delete iOffScreenBmp;
     delete iBitGc;
     delete iBitmapDevice;
+    _AKNTRACE_FUNC_EXIT;
     }
     
 
@@ -77,6 +80,11 @@
 //
 void CAknRecordingGc::FlushBuffer( const TRect& aRect, TInt aLineToSkip )
     {
+    _AKNTRACE_FUNC_ENTER;
+    _AKNTRACE( "The rect of FlushBuffer are ( %d, %d ) ( %d, %d )", 
+    		aRect.iTl.iX, aRect.iTl.iY, 
+    		aRect.iBr.iX, aRect.iBr.iY );
+    _AKNTRACE( "[%s][%s]aLineToSkip: [%d]", "CAknRecordingGc", __FUNCTION__, aLineToSkip );
     if ( iLines.Count() == 0 )
         {
         return;
@@ -167,9 +175,20 @@
                     case CBufferItem::EDrawRect:
                         gc->DrawRect( item->iRect );
                         break;
+                        
                     case CBufferItem::EClear:
                         gc->Clear( item->iRect );
                         break;
+                        
+                    case CBufferItem::EDrawLine:
+                        // EDrawLine is used for separator line only and it
+                        // should be skipped for the last visible item.
+                        if ( i < iLines.Count() - 1 
+                                && realRect.iBr.iY < aRect.iBr.iY )
+                            {
+                            gc->DrawLine( item->iRect.iTl, item->iRect.iBr );
+                            }
+                        break;
                     }
                 }
                 
@@ -192,6 +211,7 @@
         {
         iRealGc->BitBlt( TPoint( 0, 0 ), iOffScreenBmp, TRect( 0, 0, 360, 500 ) );
         }
+    _AKNTRACE_FUNC_EXIT;
     }
 
 
@@ -212,10 +232,12 @@
 //
 void CAknRecordingGc::PrepareForNewLineL( const TRect& aRect )
     {
+    _AKNTRACE_FUNC_ENTER;
     CLineData* newLine = new ( ELeave ) CLineData;
     newLine->iRect = aRect;
     iLines.AppendL( newLine );
     iCurrentLine = iLines.Count() - 1;
+    _AKNTRACE_FUNC_EXIT;
     }
 
 
@@ -225,6 +247,8 @@
 //
 void CAknRecordingGc::ReplaceLineL( TInt aLine )
     {
+    _AKNTRACE_FUNC_ENTER;
+    _AKNTRACE( "[%s][%s]aLine: [%d].", "CAknRecordingGc", __FUNCTION__, aLine );
     if (  aLine < iLines.Count() )
         {
         TRect rect( iLines[aLine]->iRect );
@@ -236,6 +260,7 @@
         }
         
     iCurrentLine = aLine;
+    _AKNTRACE_FUNC_EXIT;
     }
 
 
@@ -255,11 +280,14 @@
 //
 void CAknRecordingGc::InsertLineL( TInt aLine, const TRect& aRect )
     {
+    _AKNTRACE_FUNC_ENTER;
+    _AKNTRACE( "[%s][%s]aLine: [%d].", "CAknRecordingGc", __FUNCTION__, aLine );
     CLineData* newLine = new ( ELeave ) CLineData;
     newLine->iRect = aRect;
     
     iLines.Insert( newLine, aLine );
     iCurrentLine = aLine;
+    _AKNTRACE_FUNC_EXIT;
     }
 
 
@@ -314,11 +342,14 @@
 //
 void CAknRecordingGc::DeleteLine( TInt aLine )
     {
+    _AKNTRACE_FUNC_ENTER;
+    _AKNTRACE( "[%s][%s]aLine: [%d].", "CAknRecordingGc", __FUNCTION__, aLine );
     if ( aLine != -1 && aLine < iLines.Count() )
         {
         delete iLines[aLine];
         iLines.Remove( aLine );
         }
+    _AKNTRACE_FUNC_EXIT;
     }
 
 
@@ -636,9 +667,15 @@
 // From class CWindowGc
 // ---------------------------------------------------------------------------
 //
-void CAknRecordingGc::DrawLine( const TPoint& /*aPoint1*/, 
-    const TPoint& /*aPoint2*/ )
+void CAknRecordingGc::DrawLine( const TPoint& aPoint1, 
+    const TPoint& aPoint2 )
     {
+    _AKNTRACE_FUNC_ENTER;
+    CBufferItem* buffer = BufferItem();
+    buffer->iType = CBufferItem::EDrawLine;
+    buffer->iRect.iTl = aPoint1;
+    buffer->iRect.iBr = aPoint2;
+    _AKNTRACE_FUNC_EXIT;
     }
     
     
@@ -895,6 +932,7 @@
     const CFbsBitmap* aBitmap, const TRect& aSourceRect, 
     const CFbsBitmap* aMaskBitmap, TBool aInvertMask )
     {
+    _AKNTRACE_FUNC_ENTER;
     if ( !iUseBitGc )
         {
         CBufferItem* buffer = BufferItem();
@@ -919,6 +957,7 @@
         {
         iBitGc->BitBltMasked( aPoint, aBitmap, aSourceRect, aMaskBitmap, aInvertMask );
         }
+    _AKNTRACE_FUNC_EXIT;
     }
     
     
@@ -1091,6 +1130,7 @@
 TInt CAknRecordingGc::APIExtension( TUid aUid, TAny*& /*aOutput*/,
     TAny* aInput )
     {
+    _AKNTRACE_FUNC_ENTER;
     if (aUid == KDrawTextInContextUid)
         {
         __ASSERT_DEBUG( aInput, User::Panic(KBadArgument, KErrArgument ));
@@ -1101,10 +1141,12 @@
         TPtrC textToDraw = contextParam->iText.Mid( params->iStart, 
                                                     params->iEnd - params->iStart );
         DrawText(textToDraw, contextParam->iPosition);
+		_AKNTRACE_FUNC_EXIT;
         return KErrNone;
         }
     else
         {
+		_AKNTRACE_FUNC_EXIT;
         return KErrNotSupported;
         }
     }