--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtopt/VGRenderer/SWVG/src/swopenvgtargetsurfaceimpl.cpp Wed Jun 23 19:13:25 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;
+ }