svgtopt/VGRenderer/SWVG/src/swopenvgtargetsurfaceimpl.cpp
branchRCL_3
changeset 17 db5c883ad1c5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtopt/VGRenderer/SWVG/src/swopenvgtargetsurfaceimpl.cpp	Tue Aug 31 16:06:58 2010 +0300
@@ -0,0 +1,226 @@
+/*
+ * Copyright (c) 2003 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:  CSWVGTargetSurfaceImpl source file
+ *
+*/
+
+#include "swopenvgtargetSurfaceImpl.h"
+    
+#include <platform/vg/vgcontext.h>
+
+#include <svgtbitmap.h>
+
+CSWVGTargetSurfaceImpl::CSWVGTargetSurfaceImpl()
+    {
+    }
+
+CSWVGTargetSurfaceImpl::~CSWVGTargetSurfaceImpl()
+    {
+    }
+
+CSWVGTargetSurfaceImpl* CSWVGTargetSurfaceImpl::NewL()
+    {
+    CSWVGTargetSurfaceImpl* self = CSWVGTargetSurfaceImpl::NewLC();
+    CleanupStack::Pop();
+    return self;
+    }
+
+CSWVGTargetSurfaceImpl* CSWVGTargetSurfaceImpl::NewLC()
+    {
+    CSWVGTargetSurfaceImpl* self = new (ELeave) CSWVGTargetSurfaceImpl();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+inline void CSWVGTargetSurfaceImpl::ConstructL()
+    {
+    }
+
+TInt CSWVGTargetSurfaceImpl::InitializeSurface(TSize aSize, TInt aColorSpace)
+    {
+    iSize = aSize;
+    TInt vgError = ::VGIInitialize(aSize.iWidth,aSize.iHeight, (VGIColorSpace)aColorSpace);
+    return MapOpenVGErrorToSymbianError(vgError);
+    }
+
+void CSWVGTargetSurfaceImpl::SetConfiguration(TInt /*aOption*/, const TAny* /*aValue*/)
+    {    
+    }
+
+TInt CSWVGTargetSurfaceImpl::CreateSurface(TInt /*aDisplayMode*/, RWindow */*aSurface*/, CFbsBitmap */*aBitmap*/)
+    { 
+    return KErrNotSupported;
+    }
+
+TInt CSWVGTargetSurfaceImpl::CreateSurface(TInt /*aDisplayMode*/, RWindow */*aSurface*/, CSvgtBitmap */*aBitmap*/)
+    {
+    return KErrNone;
+    }
+
+TInt CSWVGTargetSurfaceImpl::ResizeSurface(TSize aSize)
+    {
+    iSize = aSize;
+    TInt vgError = ::VGIResize(aSize.iWidth,aSize.iHeight);
+    return MapOpenVGErrorToSymbianError(vgError);
+    }
+
+TInt CSWVGTargetSurfaceImpl::CopyBitmap(TInt /*aDisplayMode*/, TInt /*aMaskMode*/, CFbsBitmap */*aBitmap*/, CFbsBitmap */*aMask*/, TSize /*aSize*/)
+    {
+    return KErrNotSupported;
+    }
+TInt CSWVGTargetSurfaceImpl::CopyBitmap(TInt /*aDisplayMode*/,TInt /*aMaskMode*/,CSvgtBitmap *aBitmap, CSvgtBitmap *aMask, TSize /*aSize*/)
+    {
+    VGIColorBufferFormat format = 
+            (VGIColorBufferFormat)MapSymbianDisplayModeToOpenVG( (TDisplayMode)aBitmap->DisplayMode() );
+    
+    TInt vgError = KErrNone;
+    if(aMask) 
+        {
+        vgError = ::VGICopyToTarget(format, 
+                    aBitmap->Stride(), aBitmap->BitmapBuffer(), 
+                    aMask->Stride(), aMask->BitmapBuffer(), 
+                    VGI_SKIP_TRANSPARENT_PIXELS);
+        }
+    else
+        {
+        vgError = ::VGICopyToTarget(format, 
+                    aBitmap->Stride(), aBitmap->BitmapBuffer(), 
+                    0, NULL, 
+                    VGI_COPY_TRANSPARENT_PIXELS);
+        }
+        
+    return MapOpenVGErrorToSymbianError(vgError);
+    }
+
+TInt CSWVGTargetSurfaceImpl::PrepareToBindClientBuffer()
+    {
+    return KErrNone;
+    }
+
+TInt CSWVGTargetSurfaceImpl::BindClientBuffer(TInt buffer)
+    {
+    return MapOpenVGErrorToSymbianError(::VGIBindToImage(buffer));
+    }
+  
+TInt CSWVGTargetSurfaceImpl::UnBindClientBuffer()
+    {
+    return MapOpenVGErrorToSymbianError(::VGIUnBindImage());
+    }
+
+void CSWVGTargetSurfaceImpl::TerminateSurface()
+    {
+    ::VGITerminate();
+    }
+
+TInt CSWVGTargetSurfaceImpl::MapSymbianDisplayModeToOpenVG( TDisplayMode aMode) const
+    {
+    VGIColorBufferFormat format;
+    switch( aMode )
+    {
+    case EColor16MA:
+        format = VGI_COLOR_BUFFER_FORMAT_ARGB8888;
+        break;
+
+    case EColor16MU:
+        format = VGI_COLOR_BUFFER_FORMAT_XRGB8888;
+        break;
+
+    case EColor16MAP:
+        format = VGI_COLOR_BUFFER_FORMAT_ARGB8888_PRE;
+        break;
+        
+    case EColor16M:
+        format = VGI_COLOR_BUFFER_FORMAT_RGB888;
+        break;
+
+    case EColor64K:
+        format = VGI_COLOR_BUFFER_FORMAT_RGB565;
+        break;
+
+    case EColor4K:
+        format = VGI_COLOR_BUFFER_FORMAT_XRGB4444;
+        break;
+
+    default:
+        return KErrNotSupported;
+    }
+    return format;
+    }
+
+TInt CSWVGTargetSurfaceImpl::MapOpenVGErrorToSymbianError( TInt aError ) const
+    {
+    TInt error = KErrNone;
+    switch (aError)
+        {
+        case VGI_OK:
+            {
+            error = KErrNone;
+            break;
+            }
+        case VG_OUT_OF_MEMORY_ERROR:
+        case VGI_ERROR_OUT_OF_MEMORY:
+            {
+            error = KErrNoMemory;
+            break;
+            }
+        case VG_ILLEGAL_ARGUMENT_ERROR:
+        case VGI_ERROR_INVALID_ARGUMENTS:
+            {
+            error = KErrArgument;
+            break;
+            }
+        case VGI_ERROR_ALREADY_EXISTS:
+            {
+            error = KErrAlreadyExists;
+            break;
+            }
+        case VG_UNSUPPORTED_PATH_FORMAT_ERROR:
+        case VGI_ERROR_COLORSPACE_NOT_SUPPORTED:
+        case VG_UNSUPPORTED_IMAGE_FORMAT_ERROR:
+        case VGI_ERROR_NOT_SUPPORTED:
+            {
+            error = KErrNotSupported;
+            break;
+            }
+        case VGI_ERROR_ILLEGAL_IMAGE_HANDLE:
+            {
+            error = KErrBadHandle;
+            break;
+            }
+        case VG_IMAGE_IN_USE_ERROR:
+        case VGI_ERROR_IMAGE_IN_USE:
+            {
+            error = KErrInUse;
+            break;
+            }
+        case VGI_ERROR_ILLEGAL_OPERATION:
+            {
+            error = KErrPermissionDenied;
+            break;
+            }
+        case VG_BAD_HANDLE_ERROR:
+        case VG_PATH_CAPABILITY_ERROR:
+            {
+            error = KErrUnknown;
+            break;
+            }
+        default:
+            {
+            error = KErrUnknown;
+            }
+        }
+
+    return error;
+    }