uiacceltk/hitchcock/coretoolkit/src/HuiCanvasCmdBufferReader.cpp
changeset 0 15bf7259bb7c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uiacceltk/hitchcock/coretoolkit/src/HuiCanvasCmdBufferReader.cpp	Tue Feb 02 07:56:43 2010 +0200
@@ -0,0 +1,275 @@
+/*
+* Copyright (c) 2006-2008 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:   
+*
+*/
+
+
+
+#include "uiacceltk/HuiCanvasCmdBufferReader.h"
+#include "uiacceltk/HuiUtil.h"
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+CHuiCanvasCmdBufferReader::CHuiCanvasCmdBufferReader()
+    {	    
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CHuiCanvasCmdBufferReader::~CHuiCanvasCmdBufferReader()
+    {
+    iStream.Close();	
+    
+    delete iCachedText;
+    }
+    
+// ---------------------------------------------------------------------------
+// InitL
+// ---------------------------------------------------------------------------
+//
+void CHuiCanvasCmdBufferReader::Init( TPtr8& aDes,TInt aLength)
+    {
+    iStream.Close();
+    if (aDes.Ptr())
+        {
+        iStream.Open( aDes.Ptr(), aLength );
+		delete iCachedText;
+        iCachedText = NULL;
+        iBasePtr = &aDes;
+#ifdef _DEBUG
+        iBufferIndex = 0;
+        iBufferLength = aLength;
+#endif
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// ReadInt32L
+// ---------------------------------------------------------------------------
+//
+void CHuiCanvasCmdBufferReader::ReadInt32L( TInt& aValue )
+        {
+        aValue = iStream.ReadInt32L();
+#ifdef _DEBUG
+    iBufferIndex += sizeof(TInt32);
+#endif
+        }
+
+// ---------------------------------------------------------------------------
+// ReadPointL
+// ---------------------------------------------------------------------------
+//
+void CHuiCanvasCmdBufferReader::ReadPointL( TPoint& aPoint )
+    {
+    iStream.ReadL( (TUint8*)&(aPoint.iX), sizeof( TInt32 ) * 2 );
+    }
+// ---------------------------------------------------------------------------
+// ReadRectL
+// ---------------------------------------------------------------------------
+//
+void CHuiCanvasCmdBufferReader::ReadRectL( TRect& aRect )
+    {
+    iStream.ReadL( (TUint8*)&(aRect.iTl.iX), sizeof( TInt32) * 4 );
+    }
+
+// ---------------------------------------------------------------------------
+// ReadBitmapLC
+// ---------------------------------------------------------------------------
+//
+void CHuiCanvasCmdBufferReader::ReadBitmapLC( CFbsBitmap*& aBitmap )
+    {
+    TInt uid;
+    ReadInt32L( uid );
+    aBitmap = new(ELeave)CFbsBitmap;
+    CleanupStack::PushL( aBitmap );
+    
+    //TODO:Bitmap cache, check if bitmap is already in cache. Avoid call to Duplicate
+    //TODO: Cache needs to remove stuff, if not used.
+    
+    aBitmap->Duplicate( uid );
+    }
+
+// ---------------------------------------------------------------------------
+// ReadBitmapHandleL
+// ---------------------------------------------------------------------------
+//
+void CHuiCanvasCmdBufferReader::ReadBitmapHandleL( TInt& aBitmapHandle  )
+    {
+    aBitmapHandle = iStream.ReadInt32L();        
+    }
+     
+// ---------------------------------------------------------------------------
+// ReadTextL
+// ---------------------------------------------------------------------------
+//
+TBool CHuiCanvasCmdBufferReader::ReadTextL( TPtr& aText , THuiCanvasTextParameters& aTextParameters )
+    {
+    TInt length = 0;
+    TBool useCachedText = iStream.ReadInt8L();
+    if ( !useCachedText )
+        {
+        length = iStream.ReadInt32L() / 2 ;
+        TInt startPadding = iStream.ReadInt8L();
+        TInt endPadding = iStream.ReadInt8L();
+
+        TInt offset = iStream.Source()->TellL( MStreamBuf::ERead ).Offset() + startPadding;
+        TPtr16 ptr = TPtr16( (TUint16*)( (TInt)iBasePtr->Ptr() + offset ), length, length );
+        aText.Set( ptr );
+
+        iStream.Source()->SeekL( MStreamBuf::ERead, TStreamPos( offset + length * 2 + endPadding ));
+        if ( !iCachedText )
+            {
+            iCachedText = new(ELeave)TPtr16( ptr );
+            }
+        else
+            {
+            iCachedText->Set( ptr );
+            }
+        }
+    else 
+        {
+        aText.Set( *iCachedText );
+        }
+    TInt8 textParameters = iStream.ReadInt8L();
+    switch ( textParameters )
+        {
+        case 1:
+            {
+            // Is there text parameters
+            aTextParameters.iStart = iStream.ReadInt32L();
+            aTextParameters.iEnd = iStream.ReadInt32L();
+            aTextParameters.iFlags = iStream.ReadUint16L();
+            if ( aTextParameters.iStart >= aTextParameters.iEnd )
+                {
+                return EFalse;
+                }
+            break;
+            }
+        case 2:
+            {
+            aTextParameters.iStart = 0;
+            aTextParameters.iEnd = length / 2;
+            aTextParameters.iFlags = 0;
+            break;
+            }
+        default: // 0
+            {
+            aTextParameters.iStart = 0;
+            aTextParameters.iEnd = KMaxTInt;
+            aTextParameters.iFlags = 0;
+            break;
+            }
+        }
+    return ETrue;
+    }
+
+// ---------------------------------------------------------------------------
+// ReadPointArrayL, NOT TESTED
+// ---------------------------------------------------------------------------
+//
+void CHuiCanvasCmdBufferReader::ReadPointArrayL( CArrayFix<TPoint>*& aPointArray )
+    {
+    TInt count = iStream.ReadInt32L();
+    TInt index = 0;
+    aPointArray = new(ELeave)CArrayFixFlat<TPoint>(count);
+    CleanupStack::PushL( aPointArray );
+    while( index < count )
+        {
+        TPoint point = TPoint(0,0);
+        ReadPointL( point );
+        aPointArray->AppendL( point );
+        index++;
+        }
+    CleanupStack::Pop( aPointArray );
+    }
+
+// ---------------------------------------------------------------------------
+// ReadPointArrayL, NOT TESTED
+// ---------------------------------------------------------------------------
+//
+void CHuiCanvasCmdBufferReader::ReadPointArrayL( TPoint*& aPointArray, TInt& aNumPoints )
+    {
+    ReadInt32L( aNumPoints );
+    TInt index = 0;
+    aPointArray = new(ELeave)TPoint[aNumPoints];
+    CleanupStack::PushL( aPointArray );
+        
+    while( index < aNumPoints )
+        {
+        TPoint* point = new(ELeave)TPoint();
+        CleanupStack::PushL( point );
+        ReadPointL( *point );
+        aPointArray[index]= *point;
+        CleanupStack::Pop( point );
+        index++;
+        }
+    CleanupStack::Pop( aPointArray );
+    }
+
+// ---------------------------------------------------------------------------
+// ReadPointArrayL - NOT TESTED
+// ---------------------------------------------------------------------------
+//
+void CHuiCanvasCmdBufferReader::DeletePointArrayL( TPoint*& aPointArray, TInt& aNumPoints )
+    {
+    TInt index = 0;
+    while( index < aNumPoints )
+        {
+        delete &(aPointArray[index]);
+        index++;
+        }
+    delete aPointArray;
+    aPointArray = NULL;
+    }
+
+// ---------------------------------------------------------------------------
+// ReadRegionL
+// ---------------------------------------------------------------------------
+//
+void CHuiCanvasCmdBufferReader::ReadRegionL( RRegion& aRegion )
+    {
+    aRegion.Clear();
+    TRect rect;
+    TInt count;
+    ReadInt32L( count );// rect count
+    for (TInt i = 0 ; i < count ; i++ )
+        {
+        ReadRectL( rect );
+        aRegion.AddRect( rect );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// ReadColorL
+// ---------------------------------------------------------------------------
+//
+void CHuiCanvasCmdBufferReader::ReadColorL( TRgb& aColor )
+    {
+    aColor.SetInternal( iStream.ReadUint32L());
+    }
+
+// ---------------------------------------------------------------------------
+// Stream
+// ---------------------------------------------------------------------------
+//
+RMemReadStream& CHuiCanvasCmdBufferReader::Stream()
+    {
+    return iStream;    
+    }
+