svgtopt/VGRenderer/PseudoVG/src/PseodoVGRendererImpl.cpp
branchRCL_3
changeset 39 1902ade171ab
parent 38 db5c883ad1c5
--- a/svgtopt/VGRenderer/PseudoVG/src/PseodoVGRendererImpl.cpp	Tue Aug 31 16:06:58 2010 +0300
+++ b/svgtopt/VGRenderer/PseudoVG/src/PseodoVGRendererImpl.cpp	Wed Sep 01 12:20:46 2010 +0100
@@ -39,6 +39,7 @@
     iHandle             = 1;
     iCommonHeaderLength = 0;
     iCommonHeader = 0;
+    iVgErrorCode = VG_NO_ERROR;
     }
 
 CPseodoVGRendererImpl::~CPseodoVGRendererImpl()
@@ -232,6 +233,9 @@
 
 TUint CPseodoVGRendererImpl::vgCreatePaint()
     {
+    if(iVgErrorCode != VG_NO_ERROR)
+        return VG_INVALID_HANDLE;
+    
     iHandle++;
     EncodeInt8(EvgCreatePaint);
     EncodeInt32(iHandle);
@@ -244,6 +248,10 @@
 TUint CPseodoVGRendererImpl::vgCreatePath(TInt pathFormat, TInt datatype, TReal32 scale, TReal32 bias,
         TInt segmentCapacityHint, TInt coordCapacityHint, TInt capabilities)
     {
+    if(iVgErrorCode != VG_NO_ERROR)
+        return VG_INVALID_HANDLE;
+    
+        
     iHandle++;
     EncodeInt8(EvgCreatePath);
     EncodeInt32(pathFormat);
@@ -383,7 +391,7 @@
     EncodeInt16(capabilities);
 
 #ifdef VGRENDERER_LOG
-    LogvgDrawPath(paintModes,0);   
+    LogvgDrawPath(path,0);   
 #endif
 
     }
@@ -460,6 +468,9 @@
 
 TUint CPseodoVGRendererImpl::vgCreateImage(TInt format, TInt width, TInt height, TInt allowedQuality)
     {
+    if(iVgErrorCode != VG_NO_ERROR)
+        return VG_INVALID_HANDLE;
+    
     iHandle++;
     EncodeInt8(EvgCreateImage);
     EncodeInt32(format);
@@ -467,6 +478,9 @@
     EncodeInt32(height);
     EncodeInt8(allowedQuality);
     EncodeInt32(iHandle);
+#ifdef VGRENDERER_LOG
+    iLog.WriteFormat(_L("vgcreateimage"));
+#endif
     return iHandle;
     }
 
@@ -479,6 +493,9 @@
     {
     EncodeInt8(EvgDrawImage);
     EncodeInt32(image);
+#ifdef VGRENDERER_LOG
+    iLog.WriteFormat(_L("vgdrawimage"));
+#endif
     }
 
 void CPseodoVGRendererImpl::vgClearImage(TUint image, TInt x, TInt y, TInt width, TInt height)
@@ -489,6 +506,9 @@
     EncodeInt32(y);
     EncodeInt32(width);
     EncodeInt32(height);
+#ifdef VGRENDERER_LOG
+    iLog.WriteFormat(_L("vgclearimage"));
+#endif    
     }
 
 void CPseodoVGRendererImpl::vgImageSubData(TUint image, const void * data, TInt dataStride,
@@ -623,6 +643,9 @@
 
         EncodeData(dstData, dataLength);
         delete [] dstData;
+#ifdef VGRENDERER_LOG
+        iLog.WriteFormat(_L("vgimagesubdata"));
+#endif        
         }
     else
         {
@@ -648,6 +671,9 @@
     {
     EncodeInt8(EvgDestroyImage);
     EncodeInt32(aHandle);
+#ifdef VGRENDERER_LOG
+    iLog.WriteFormat(_L("vgdestroyimage"));
+#endif    
     }
 
 void CPseodoVGRendererImpl::vgDestroyPaint(TUint /*aHandle*/)
@@ -667,8 +693,7 @@
 
 TInt CPseodoVGRendererImpl::vgGetError()
     {
-    //TODO
-    return 0;
+   return iVgErrorCode;
     }
 
 MVGSurfaceImpl* CPseodoVGRendererImpl::CreateVGSurfaceL(TInt /*aOption*/)
@@ -708,10 +733,13 @@
 
 TInt CPseodoVGRendererImpl::EncodeData(const TAny *aData, TUint aLength)
     {
-    TInt result = KErrNone;
-    TPtr8 lPtr( iEncodedData->Des() );
-    TInt encodedDataLength      = lPtr.Length() + aLength;
-    TInt encodedDataMaxLength   = lPtr.MaxLength();
+
+    if(iVgErrorCode==VG_NO_ERROR)
+        {
+        TInt result = KErrNone;
+        TPtr8 lPtr( iEncodedData->Des() );
+        TInt encodedDataLength      = lPtr.Length() + aLength;
+        TInt encodedDataMaxLength   = lPtr.MaxLength();
 
     if (encodedDataLength >= encodedDataMaxLength)
         {
@@ -726,7 +754,12 @@
         lPtr.Append((TUint8*)(aData), aLength);
         }
 
-    return result;
+        return result;
+        }
+    else
+        {
+        return iVgErrorCode;
+        }
     }
 
 TInt CPseodoVGRendererImpl::ExpandEncodedData(TUint aNewLength)
@@ -740,6 +773,7 @@
     if (tmpBuf == 0)
         {
         result = KErrNoMemory;
+        iVgErrorCode = VG_OUT_OF_MEMORY_ERROR;
         }
 
     else
@@ -757,6 +791,17 @@
 
 void CPseodoVGRendererImpl::EmptyEncodedData()
     {
+    iVgErrorCode = VG_NO_ERROR;
+    if(iEncodedData->Length() > CPseodoVGRendererImpl::ENCODEDDATALENGTH)
+        {
+        delete iEncodedData;    
+        iEncodedData = HBufC8::New(CPseodoVGRendererImpl::ENCODEDDATALENGTH);
+        if(!iEncodedData)
+            {
+            iVgErrorCode = VG_OUT_OF_MEMORY_ERROR;
+            return;
+            }
+        }
     TPtr8 lPtr( iEncodedData->Des() );
     lPtr.Zero();
     WriteHeader();