diff -r 9be6eed35a80 -r db5c883ad1c5 svgtopt/VGRenderer/SWVG/src/swopenvgtargetsurfaceimpl.cpp --- /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 + +#include + +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; + }