guestrendering/guestopenvg/src/vgpaint.cpp
branchbug235_bringup_0
changeset 24 a3f46bb01be2
parent 14 acbd4400e82b
--- a/guestrendering/guestopenvg/src/vgpaint.cpp	Thu Sep 16 12:43:44 2010 +0100
+++ b/guestrendering/guestopenvg/src/vgpaint.cpp	Mon Sep 20 14:29:05 2010 +0100
@@ -1,429 +1,429 @@
-// Copyright (c) 2010 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:
-// Client-side state information for Open VG handle based objects
-
-#include "vgstate.h"
-#include "remotefunctioncall.h"
-#include "openvgrfc.h"
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////
-// CVgPaintInfo
-/////////////////////////////////////////////////////////////////////////////////////////////
-
-CVgPaintInfo* CVgPaintInfo::New()
-	{
-	RHeap* clientHeap = CVghwUtils::SwitchToVghwHeap();
-	CVgPaintInfo* self = new CVgPaintInfo();
-	CVghwUtils::SwitchFromVghwHeap(clientHeap);
-	return self;
-	}
-
-
-CVgPaintInfo::~CVgPaintInfo()
-	{}
-
-
-CVgPaintInfo::CVgPaintInfo() :
-		CVgHandleBase(EVgHandleForPaint),
-		iPaintType(VG_PAINT_TYPE_COLOR), iColorRampSpreadMode(VG_COLOR_RAMP_SPREAD_PAD),
-		iColorRampPremultiplied(VG_TRUE), iPatternTilingMode(VG_TILE_FILL)
-	{}
-
-
-TBool CVgPaintInfo::DestroyObject(MVgContext& aVgContext)
-	{
-	VGPANIC_ASSERT_DEBUG(iIsDestroyed, EVgPanicTemp);
-	OPENVG_TRACE("  CVgPaintInfo::DestroyObject HostHandle=0x%x", iHostHandle);
-
-	if (iHostHandle)
-		{
-		RemoteFunctionCallData data; OpenVgRFC vgApiData(data);
-		vgApiData.Init(OpenVgRFC::EvgDestroyPaint, RemoteFunctionCallData::EOpRequest);
-		vgApiData.AppendParam(iHostHandle);
-		aVgContext.ExecuteVgCommand(vgApiData);
-		}
-
-	return ETrue;
-	}
-
-
-VGint CVgPaintInfo::GetParameterVectorSize(MVgContext& aVgContext, VGint aParamType)
-	{
-	switch (aParamType)
-		{
-		case VG_PAINT_TYPE:
-		case VG_PAINT_COLOR_RAMP_SPREAD_MODE:
-		case VG_PAINT_COLOR_RAMP_PREMULTIPLIED:
-		case VG_PAINT_PATTERN_TILING_MODE:
-			return 1;
-
-		case VG_PAINT_COLOR:
-		case VG_PAINT_LINEAR_GRADIENT:
-			return 4;
-
-		case VG_PAINT_COLOR_RAMP_STOPS:
-			return 10000; // note: finite limit due to Guest serialisation limits 
-
-		case VG_PAINT_RADIAL_GRADIENT:
-			return 5;
-		}
-
-	// invalid ParamType
-	aVgContext.SetVgError(VG_ILLEGAL_ARGUMENT_ERROR);
-	return 0;
-	}
-
-
-VGfloat CVgPaintInfo::GetParameterf(MVgContext& aVgContext, VGint aParamType)
-	{
-	switch (aParamType)
-		{
-		case VG_PAINT_TYPE:
-			return (VGfloat) iPaintType;
-		case VG_PAINT_COLOR_RAMP_SPREAD_MODE:
-			return (VGfloat) iColorRampSpreadMode;
-		case VG_PAINT_PATTERN_TILING_MODE:
-			return (VGfloat) iPatternTilingMode;
-		case VG_PAINT_COLOR_RAMP_PREMULTIPLIED:
-			return (VGfloat) iColorRampPremultiplied;
-		case VG_PAINT_COLOR:
-		case VG_PAINT_COLOR_RAMP_STOPS:
-		case VG_PAINT_LINEAR_GRADIENT:
-		case VG_PAINT_RADIAL_GRADIENT:
-			return HostVgGetParameterf(aVgContext, aParamType);
-		}
-
-	// invalid ParamType
-	aVgContext.SetVgError(VG_ILLEGAL_ARGUMENT_ERROR);
-	return 0;
-	}
-
-
-VGint CVgPaintInfo::GetParameteri(MVgContext& aVgContext, VGint aParamType)
-	{
-	switch (aParamType)
-		{
-		case VG_PAINT_TYPE:
-			return iPaintType;
-		case VG_PAINT_COLOR_RAMP_SPREAD_MODE:
-			return iColorRampSpreadMode;
-		case VG_PAINT_PATTERN_TILING_MODE:
-			return iPatternTilingMode;
-		case VG_PAINT_COLOR_RAMP_PREMULTIPLIED:
-			return iColorRampPremultiplied;
-		case VG_PAINT_COLOR:
-		case VG_PAINT_COLOR_RAMP_STOPS:
-		case VG_PAINT_LINEAR_GRADIENT:
-		case VG_PAINT_RADIAL_GRADIENT:
-			return HostVgGetParameteri(aVgContext, aParamType);
-		}
-
-	// invalid ParamType
-	aVgContext.SetVgError(VG_ILLEGAL_ARGUMENT_ERROR);
-	return 0;
-	}
-
-
-void CVgPaintInfo::GetParameterfv(MVgContext& aVgContext, VGint aParamType, VGint aCount, VGfloat * aValues)
-	{
-	if (aCount > 0)
-		{
-		// vSize = 0 means the ParamType is not valid for this object, and VG error is already set 
-		VGint vSize = GetParameterVectorSize(aVgContext, aParamType);
-		if (vSize == 0)
-			{ // VG Error already set
-			return;
-			}
-
-		if ( (aCount <= vSize) )
-			{
-			switch (aParamType)
-				{
-				case VG_PAINT_TYPE:
-					*aValues = (VGfloat) iPaintType;
-					return;
-				case VG_PAINT_COLOR_RAMP_SPREAD_MODE:
-					*aValues = (VGfloat) iColorRampSpreadMode;
-					return;
-				case VG_PAINT_PATTERN_TILING_MODE:
-					*aValues = (VGfloat) iPatternTilingMode;
-					return;
-				case VG_PAINT_COLOR_RAMP_PREMULTIPLIED:
-					*aValues = (VGfloat) iColorRampPremultiplied;
-					return;
-				case VG_PAINT_COLOR:
-				case VG_PAINT_COLOR_RAMP_STOPS:
-				case VG_PAINT_LINEAR_GRADIENT:
-				case VG_PAINT_RADIAL_GRADIENT:
-					HostVgGetParameterfv(aVgContext, aParamType, aCount, aValues);
-					return;
-				}
-			}
-		}
-
-	// invalid ParamType
-	aVgContext.SetVgError(VG_ILLEGAL_ARGUMENT_ERROR);
-	return;
-	}
-
-
-void CVgPaintInfo::GetParameteriv(MVgContext& aVgContext, VGint aParamType, VGint aCount, VGint * aValues)
-	{
-	if (aCount > 0)
-		{
-		// vSize = 0 means the ParamType is not valid for this object, and VG error is already set 
-		VGint vSize = GetParameterVectorSize(aVgContext, aParamType);
-		if (vSize == 0)
-			{ // VG Error already set
-			return;
-			}
-
-		if ( (aCount <= vSize) )
-			{
-			switch (aParamType)
-				{
-				case VG_PAINT_TYPE:
-					*aValues = iPaintType;
-					return;
-				case VG_PAINT_COLOR_RAMP_SPREAD_MODE:
-					*aValues = iColorRampSpreadMode;
-					return;
-				case VG_PAINT_PATTERN_TILING_MODE:
-					*aValues = iPatternTilingMode;
-					return;
-				case VG_PAINT_COLOR_RAMP_PREMULTIPLIED:
-					*aValues = iColorRampPremultiplied;
-					return;
-				case VG_PAINT_COLOR:
-				case VG_PAINT_COLOR_RAMP_STOPS:
-				case VG_PAINT_LINEAR_GRADIENT:
-				case VG_PAINT_RADIAL_GRADIENT:
-					HostVgGetParameteriv(aVgContext, aParamType, aCount, aValues);
-					return;
-				}
-			}
-		}
-
-	// invalid ParamType
-	aVgContext.SetVgError(VG_ILLEGAL_ARGUMENT_ERROR);
-	return;
-	}
-
-
-void CVgPaintInfo::SetParameterf(MVgContext& aVgContext, VGint aParamType, VGfloat aValue)
-	{
-	switch (aParamType)
-		{
-		case VG_PAINT_TYPE:
-		case VG_PAINT_COLOR_RAMP_SPREAD_MODE:
-		case VG_PAINT_PATTERN_TILING_MODE:
-		case VG_PAINT_COLOR_RAMP_PREMULTIPLIED:
-			SetParameteri(aVgContext, aParamType, (VGint) aValue);
-			return;
-			// **** desireable: add full checks for valid Values
-		case VG_PAINT_COLOR:
-		case VG_PAINT_COLOR_RAMP_STOPS:
-		case VG_PAINT_LINEAR_GRADIENT:
-		case VG_PAINT_RADIAL_GRADIENT:
-			HostVgSetParameterf(aVgContext, aParamType, aValue);
-			return;
-		}
-	aVgContext.SetVgError(VG_ILLEGAL_ARGUMENT_ERROR); // invalid or Read-Only parameter
-	}
-
-
-void CVgPaintInfo::SetParameteri(MVgContext& aVgContext, VGint aParamType, VGint aValue)
-	{
-	switch (aParamType)
-		{
-		case VG_PAINT_TYPE:
-			if ( (aValue >= VG_PAINT_TYPE_COLOR) && (aValue <= VG_PAINT_TYPE_PATTERN) )
-				{
-				iPaintType = (VGPaintType) aValue;
-				HostVgSetParameteri(aVgContext, aParamType, aValue);
-				return;
-				}
-			break;
-		case VG_PAINT_COLOR_RAMP_SPREAD_MODE:
-			if ( (aValue >= VG_COLOR_RAMP_SPREAD_PAD) && (aValue <= VG_COLOR_RAMP_SPREAD_REFLECT) )
-				{
-				iColorRampSpreadMode = (VGColorRampSpreadMode) aValue;
-				HostVgSetParameteri(aVgContext, aParamType, aValue);
-				return;
-				}
-			break;
-		case VG_PAINT_PATTERN_TILING_MODE:
-			if ( (aValue >= VG_TILE_FILL) && (aValue <= VG_TILE_REFLECT) )
-				{
-				iPatternTilingMode = (VGTilingMode) aValue;
-				HostVgSetParameteri(aVgContext, aParamType, aValue);
-				return;
-				}
-			break;
-		case VG_PAINT_COLOR_RAMP_PREMULTIPLIED:
-			if ( (aValue == VG_FALSE) || (aValue == VG_TRUE) )
-				{
-				iColorRampPremultiplied = (VGboolean) aValue;
-				HostVgSetParameteri(aVgContext, aParamType, aValue);
-				return;
-				}
-			break;
-			// **** desireable: add full checks for valid Values
-		case VG_PAINT_COLOR:
-		case VG_PAINT_COLOR_RAMP_STOPS:
-		case VG_PAINT_LINEAR_GRADIENT:
-		case VG_PAINT_RADIAL_GRADIENT:
-			HostVgSetParameteri(aVgContext, aParamType, aValue);
-			return;
-		}
-	aVgContext.SetVgError(VG_ILLEGAL_ARGUMENT_ERROR); // invalid or Read-Only parameter
-	}
-
-
-void CVgPaintInfo::SetParameterfv(MVgContext& aVgContext, VGint aParamType, VGint aCount, const VGfloat * aValues)
-	{
-	VGint vSize = GetParameterVectorSize(aVgContext, aParamType);
-	if (vSize > 0)
-		{
-		if ( (aCount == 0) && (aValues == NULL) )
-			{ // pointless but legal according to Open VG 1.1 spec
-			return;
-			}
-
-		if ( (aCount > 0) && (aCount <= vSize) )
-			{
-			switch (aParamType)
-				{
-				case VG_PAINT_TYPE:
-				case VG_PAINT_COLOR_RAMP_SPREAD_MODE:
-				case VG_PAINT_PATTERN_TILING_MODE:
-				case VG_PAINT_COLOR_RAMP_PREMULTIPLIED:
-					SetParameteri(aVgContext, aParamType, (VGint) *aValues);
-					return;
-				case VG_PAINT_COLOR:
-				case VG_PAINT_COLOR_RAMP_STOPS:
-				case VG_PAINT_LINEAR_GRADIENT:
-				case VG_PAINT_RADIAL_GRADIENT:
-					HostVgSetParameterfv(aVgContext, aParamType, aCount, aValues);
-					return;
-				}
-			}
-		// VGPaint parameter is Read-Only or should have a smaller vector
-		aVgContext.SetVgError(VG_ILLEGAL_ARGUMENT_ERROR); 
-		}
-	}
-
-
-void CVgPaintInfo::SetParameteriv(MVgContext& aVgContext, VGint aParamType, VGint aCount, const VGint * aValues)
-	{
-	VGint vSize = GetParameterVectorSize(aVgContext, aParamType);
-	if (vSize > 0)
-		{
-		if ( (aCount == 0) && (aValues == NULL) )
-			{ // pointless but legal according to Open VG 1.1 spec
-			return;
-			}
-
-		if ( (aCount > 0) && (aCount <= vSize) )
-			{
-			switch (aParamType)
-				{
-				case VG_PAINT_TYPE:
-				case VG_PAINT_COLOR_RAMP_SPREAD_MODE:
-				case VG_PAINT_PATTERN_TILING_MODE:
-				case VG_PAINT_COLOR_RAMP_PREMULTIPLIED:
-					SetParameteri(aVgContext, aParamType, *aValues);
-					return;
-				case VG_PAINT_COLOR:
-				case VG_PAINT_COLOR_RAMP_STOPS:
-				case VG_PAINT_LINEAR_GRADIENT:
-				case VG_PAINT_RADIAL_GRADIENT:
-					HostVgSetParameteriv(aVgContext, aParamType, aCount, aValues);
-					return;
-				}
-			}
-		// VGPaint parameter is Read-Only or should have a smaller vector
-		aVgContext.SetVgError(VG_ILLEGAL_ARGUMENT_ERROR);
-		}
-	}
-
-
-void CVgPaintInfo::SetPaint(MVgContext& aVgContext, VGbitfield aPaintModes)
-	{
-	RemoteFunctionCallData data; OpenVgRFC vgApiData(data);
-	vgApiData.Init(OpenVgRFC::EvgSetPaint, RemoteFunctionCallData::EOpRequest);
-	vgApiData.AppendParam(iHostHandle);
-	vgApiData.AppendParam(aPaintModes);
-	aVgContext.ExecuteVgCommand(vgApiData);
-	}
-
-
-//static
-void CVgPaintInfo::ResetPaint(MVgContext& aVgContext)
-	{
-	RemoteFunctionCallData data; OpenVgRFC vgApiData(data);
-	vgApiData.Init(OpenVgRFC::EvgSetPaint, RemoteFunctionCallData::EOpRequest);
-	vgApiData.AppendParam(VG_INVALID_HANDLE);
-	const VGuint KZero = 0; 
-	vgApiData.AppendParam(KZero);
-	aVgContext.ExecuteVgCommand(vgApiData);
-	}
-
-
-void CVgPaintInfo::SetColor(MVgContext& aVgContext, VGuint aRgba)
-	{
-	RemoteFunctionCallData data; OpenVgRFC vgApiData(data);
-	vgApiData.Init(OpenVgRFC::EvgSetColor, RemoteFunctionCallData::EOpRequest);
-	vgApiData.AppendParam(iHostHandle);
-	vgApiData.AppendParam(aRgba);
-	aVgContext.ExecuteVgCommand(vgApiData);
-	}
-
-
-VGuint CVgPaintInfo::GetColor(MVgContext& aVgContext)
-	{
-	RemoteFunctionCallData data; OpenVgRFC vgApiData(data);
-	vgApiData.Init(OpenVgRFC::EvgGetColor);
-	vgApiData.AppendParam(iHostHandle);
-	VGPANIC_ASSERT_DEBUG(vgApiData.Data().Header().iOpType == RemoteFunctionCallData::EOpRequestWithReply, EVgPanicNotReplyOpcode);
-	aVgContext.ExecuteVgCommand(vgApiData);
-	return vgApiData.ReturnValue();
-	}
-
-
-void CVgPaintInfo::PaintPattern(MVgContext& aVgContext, CVgImageInfo* aPatternInfo)
-	{
-	RemoteFunctionCallData data; OpenVgRFC vgApiData(data);
-	vgApiData.Init(OpenVgRFC::EvgPaintPattern, RemoteFunctionCallData::EOpRequest);
-	vgApiData.AppendParam(iHostHandle);
-	TUint64 sgId(0L);
-	if (aPatternInfo == NULL)
-		{
-		vgApiData.AppendParam(VG_INVALID_HANDLE);
-		}
-	else
-		{
-		vgApiData.AppendParam(aPatternInfo->HostHandle());
-		if (aPatternInfo->IsEglSibling())
-			{
-			sgId = aPatternInfo->SgImageId();
-			}
-		}
-	vgApiData.AppendTUint64(sgId);
-	aVgContext.ExecuteVgCommand(vgApiData);
-	}
-
-
-// end of file vgpaint.cpp
+// Copyright (c) 2010 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:
+// Client-side state information for Open VG handle based objects
+
+#include "vgstate.h"
+#include "remotefunctioncall.h"
+#include "openvgrfc.h"
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+// CVgPaintInfo
+/////////////////////////////////////////////////////////////////////////////////////////////
+
+CVgPaintInfo* CVgPaintInfo::New()
+	{
+	RHeap* clientHeap = CVghwUtils::SwitchToVghwHeap();
+	CVgPaintInfo* self = new CVgPaintInfo();
+	CVghwUtils::SwitchFromVghwHeap(clientHeap);
+	return self;
+	}
+
+
+CVgPaintInfo::~CVgPaintInfo()
+	{}
+
+
+CVgPaintInfo::CVgPaintInfo() :
+		CVgHandleBase(EVgHandleForPaint),
+		iPaintType(VG_PAINT_TYPE_COLOR), iColorRampSpreadMode(VG_COLOR_RAMP_SPREAD_PAD),
+		iColorRampPremultiplied(VG_TRUE), iPatternTilingMode(VG_TILE_FILL)
+	{}
+
+
+TBool CVgPaintInfo::DestroyObject(MVgContext& aVgContext)
+	{
+	VGPANIC_ASSERT_DEBUG(iIsDestroyed, EVgPanicTemp);
+	OPENVG_TRACE("  CVgPaintInfo::DestroyObject HostHandle=0x%x", iHostHandle);
+
+	if (iHostHandle)
+		{
+		RemoteFunctionCallData data; OpenVgRFC vgApiData(data);
+		vgApiData.Init(OpenVgRFC::EvgDestroyPaint, RemoteFunctionCallData::EOpRequest);
+		vgApiData.AppendParam(iHostHandle);
+		aVgContext.ExecuteVgCommand(vgApiData);
+		}
+
+	return ETrue;
+	}
+
+
+VGint CVgPaintInfo::GetParameterVectorSize(MVgContext& aVgContext, VGint aParamType)
+	{
+	switch (aParamType)
+		{
+		case VG_PAINT_TYPE:
+		case VG_PAINT_COLOR_RAMP_SPREAD_MODE:
+		case VG_PAINT_COLOR_RAMP_PREMULTIPLIED:
+		case VG_PAINT_PATTERN_TILING_MODE:
+			return 1;
+
+		case VG_PAINT_COLOR:
+		case VG_PAINT_LINEAR_GRADIENT:
+			return 4;
+
+		case VG_PAINT_COLOR_RAMP_STOPS:
+			return 10000; // note: finite limit due to Guest serialisation limits 
+
+		case VG_PAINT_RADIAL_GRADIENT:
+			return 5;
+		}
+
+	// invalid ParamType
+	aVgContext.SetVgError(VG_ILLEGAL_ARGUMENT_ERROR);
+	return 0;
+	}
+
+
+VGfloat CVgPaintInfo::GetParameterf(MVgContext& aVgContext, VGint aParamType)
+	{
+	switch (aParamType)
+		{
+		case VG_PAINT_TYPE:
+			return (VGfloat) iPaintType;
+		case VG_PAINT_COLOR_RAMP_SPREAD_MODE:
+			return (VGfloat) iColorRampSpreadMode;
+		case VG_PAINT_PATTERN_TILING_MODE:
+			return (VGfloat) iPatternTilingMode;
+		case VG_PAINT_COLOR_RAMP_PREMULTIPLIED:
+			return (VGfloat) iColorRampPremultiplied;
+		case VG_PAINT_COLOR:
+		case VG_PAINT_COLOR_RAMP_STOPS:
+		case VG_PAINT_LINEAR_GRADIENT:
+		case VG_PAINT_RADIAL_GRADIENT:
+			return HostVgGetParameterf(aVgContext, aParamType);
+		}
+
+	// invalid ParamType
+	aVgContext.SetVgError(VG_ILLEGAL_ARGUMENT_ERROR);
+	return 0;
+	}
+
+
+VGint CVgPaintInfo::GetParameteri(MVgContext& aVgContext, VGint aParamType)
+	{
+	switch (aParamType)
+		{
+		case VG_PAINT_TYPE:
+			return iPaintType;
+		case VG_PAINT_COLOR_RAMP_SPREAD_MODE:
+			return iColorRampSpreadMode;
+		case VG_PAINT_PATTERN_TILING_MODE:
+			return iPatternTilingMode;
+		case VG_PAINT_COLOR_RAMP_PREMULTIPLIED:
+			return iColorRampPremultiplied;
+		case VG_PAINT_COLOR:
+		case VG_PAINT_COLOR_RAMP_STOPS:
+		case VG_PAINT_LINEAR_GRADIENT:
+		case VG_PAINT_RADIAL_GRADIENT:
+			return HostVgGetParameteri(aVgContext, aParamType);
+		}
+
+	// invalid ParamType
+	aVgContext.SetVgError(VG_ILLEGAL_ARGUMENT_ERROR);
+	return 0;
+	}
+
+
+void CVgPaintInfo::GetParameterfv(MVgContext& aVgContext, VGint aParamType, VGint aCount, VGfloat * aValues)
+	{
+	if (aCount > 0)
+		{
+		// vSize = 0 means the ParamType is not valid for this object, and VG error is already set 
+		VGint vSize = GetParameterVectorSize(aVgContext, aParamType);
+		if (vSize == 0)
+			{ // VG Error already set
+			return;
+			}
+
+		if ( (aCount <= vSize) )
+			{
+			switch (aParamType)
+				{
+				case VG_PAINT_TYPE:
+					*aValues = (VGfloat) iPaintType;
+					return;
+				case VG_PAINT_COLOR_RAMP_SPREAD_MODE:
+					*aValues = (VGfloat) iColorRampSpreadMode;
+					return;
+				case VG_PAINT_PATTERN_TILING_MODE:
+					*aValues = (VGfloat) iPatternTilingMode;
+					return;
+				case VG_PAINT_COLOR_RAMP_PREMULTIPLIED:
+					*aValues = (VGfloat) iColorRampPremultiplied;
+					return;
+				case VG_PAINT_COLOR:
+				case VG_PAINT_COLOR_RAMP_STOPS:
+				case VG_PAINT_LINEAR_GRADIENT:
+				case VG_PAINT_RADIAL_GRADIENT:
+					HostVgGetParameterfv(aVgContext, aParamType, aCount, aValues);
+					return;
+				}
+			}
+		}
+
+	// invalid ParamType
+	aVgContext.SetVgError(VG_ILLEGAL_ARGUMENT_ERROR);
+	return;
+	}
+
+
+void CVgPaintInfo::GetParameteriv(MVgContext& aVgContext, VGint aParamType, VGint aCount, VGint * aValues)
+	{
+	if (aCount > 0)
+		{
+		// vSize = 0 means the ParamType is not valid for this object, and VG error is already set 
+		VGint vSize = GetParameterVectorSize(aVgContext, aParamType);
+		if (vSize == 0)
+			{ // VG Error already set
+			return;
+			}
+
+		if ( (aCount <= vSize) )
+			{
+			switch (aParamType)
+				{
+				case VG_PAINT_TYPE:
+					*aValues = iPaintType;
+					return;
+				case VG_PAINT_COLOR_RAMP_SPREAD_MODE:
+					*aValues = iColorRampSpreadMode;
+					return;
+				case VG_PAINT_PATTERN_TILING_MODE:
+					*aValues = iPatternTilingMode;
+					return;
+				case VG_PAINT_COLOR_RAMP_PREMULTIPLIED:
+					*aValues = iColorRampPremultiplied;
+					return;
+				case VG_PAINT_COLOR:
+				case VG_PAINT_COLOR_RAMP_STOPS:
+				case VG_PAINT_LINEAR_GRADIENT:
+				case VG_PAINT_RADIAL_GRADIENT:
+					HostVgGetParameteriv(aVgContext, aParamType, aCount, aValues);
+					return;
+				}
+			}
+		}
+
+	// invalid ParamType
+	aVgContext.SetVgError(VG_ILLEGAL_ARGUMENT_ERROR);
+	return;
+	}
+
+
+void CVgPaintInfo::SetParameterf(MVgContext& aVgContext, VGint aParamType, VGfloat aValue)
+	{
+	switch (aParamType)
+		{
+		case VG_PAINT_TYPE:
+		case VG_PAINT_COLOR_RAMP_SPREAD_MODE:
+		case VG_PAINT_PATTERN_TILING_MODE:
+		case VG_PAINT_COLOR_RAMP_PREMULTIPLIED:
+			SetParameteri(aVgContext, aParamType, (VGint) aValue);
+			return;
+			// **** desireable: add full checks for valid Values
+		case VG_PAINT_COLOR:
+		case VG_PAINT_COLOR_RAMP_STOPS:
+		case VG_PAINT_LINEAR_GRADIENT:
+		case VG_PAINT_RADIAL_GRADIENT:
+			HostVgSetParameterf(aVgContext, aParamType, aValue);
+			return;
+		}
+	aVgContext.SetVgError(VG_ILLEGAL_ARGUMENT_ERROR); // invalid or Read-Only parameter
+	}
+
+
+void CVgPaintInfo::SetParameteri(MVgContext& aVgContext, VGint aParamType, VGint aValue)
+	{
+	switch (aParamType)
+		{
+		case VG_PAINT_TYPE:
+			if ( (aValue >= VG_PAINT_TYPE_COLOR) && (aValue <= VG_PAINT_TYPE_PATTERN) )
+				{
+				iPaintType = (VGPaintType) aValue;
+				HostVgSetParameteri(aVgContext, aParamType, aValue);
+				return;
+				}
+			break;
+		case VG_PAINT_COLOR_RAMP_SPREAD_MODE:
+			if ( (aValue >= VG_COLOR_RAMP_SPREAD_PAD) && (aValue <= VG_COLOR_RAMP_SPREAD_REFLECT) )
+				{
+				iColorRampSpreadMode = (VGColorRampSpreadMode) aValue;
+				HostVgSetParameteri(aVgContext, aParamType, aValue);
+				return;
+				}
+			break;
+		case VG_PAINT_PATTERN_TILING_MODE:
+			if ( (aValue >= VG_TILE_FILL) && (aValue <= VG_TILE_REFLECT) )
+				{
+				iPatternTilingMode = (VGTilingMode) aValue;
+				HostVgSetParameteri(aVgContext, aParamType, aValue);
+				return;
+				}
+			break;
+		case VG_PAINT_COLOR_RAMP_PREMULTIPLIED:
+			if ( (aValue == VG_FALSE) || (aValue == VG_TRUE) )
+				{
+				iColorRampPremultiplied = (VGboolean) aValue;
+				HostVgSetParameteri(aVgContext, aParamType, aValue);
+				return;
+				}
+			break;
+			// **** desireable: add full checks for valid Values
+		case VG_PAINT_COLOR:
+		case VG_PAINT_COLOR_RAMP_STOPS:
+		case VG_PAINT_LINEAR_GRADIENT:
+		case VG_PAINT_RADIAL_GRADIENT:
+			HostVgSetParameteri(aVgContext, aParamType, aValue);
+			return;
+		}
+	aVgContext.SetVgError(VG_ILLEGAL_ARGUMENT_ERROR); // invalid or Read-Only parameter
+	}
+
+
+void CVgPaintInfo::SetParameterfv(MVgContext& aVgContext, VGint aParamType, VGint aCount, const VGfloat * aValues)
+	{
+	VGint vSize = GetParameterVectorSize(aVgContext, aParamType);
+	if (vSize > 0)
+		{
+		if ( (aCount == 0) && (aValues == NULL) )
+			{ // pointless but legal according to Open VG 1.1 spec
+			return;
+			}
+
+		if ( (aCount > 0) && (aCount <= vSize) )
+			{
+			switch (aParamType)
+				{
+				case VG_PAINT_TYPE:
+				case VG_PAINT_COLOR_RAMP_SPREAD_MODE:
+				case VG_PAINT_PATTERN_TILING_MODE:
+				case VG_PAINT_COLOR_RAMP_PREMULTIPLIED:
+					SetParameteri(aVgContext, aParamType, (VGint) *aValues);
+					return;
+				case VG_PAINT_COLOR:
+				case VG_PAINT_COLOR_RAMP_STOPS:
+				case VG_PAINT_LINEAR_GRADIENT:
+				case VG_PAINT_RADIAL_GRADIENT:
+					HostVgSetParameterfv(aVgContext, aParamType, aCount, aValues);
+					return;
+				}
+			}
+		// VGPaint parameter is Read-Only or should have a smaller vector
+		aVgContext.SetVgError(VG_ILLEGAL_ARGUMENT_ERROR); 
+		}
+	}
+
+
+void CVgPaintInfo::SetParameteriv(MVgContext& aVgContext, VGint aParamType, VGint aCount, const VGint * aValues)
+	{
+	VGint vSize = GetParameterVectorSize(aVgContext, aParamType);
+	if (vSize > 0)
+		{
+		if ( (aCount == 0) && (aValues == NULL) )
+			{ // pointless but legal according to Open VG 1.1 spec
+			return;
+			}
+
+		if ( (aCount > 0) && (aCount <= vSize) )
+			{
+			switch (aParamType)
+				{
+				case VG_PAINT_TYPE:
+				case VG_PAINT_COLOR_RAMP_SPREAD_MODE:
+				case VG_PAINT_PATTERN_TILING_MODE:
+				case VG_PAINT_COLOR_RAMP_PREMULTIPLIED:
+					SetParameteri(aVgContext, aParamType, *aValues);
+					return;
+				case VG_PAINT_COLOR:
+				case VG_PAINT_COLOR_RAMP_STOPS:
+				case VG_PAINT_LINEAR_GRADIENT:
+				case VG_PAINT_RADIAL_GRADIENT:
+					HostVgSetParameteriv(aVgContext, aParamType, aCount, aValues);
+					return;
+				}
+			}
+		// VGPaint parameter is Read-Only or should have a smaller vector
+		aVgContext.SetVgError(VG_ILLEGAL_ARGUMENT_ERROR);
+		}
+	}
+
+
+void CVgPaintInfo::SetPaint(MVgContext& aVgContext, VGbitfield aPaintModes)
+	{
+	RemoteFunctionCallData data; OpenVgRFC vgApiData(data);
+	vgApiData.Init(OpenVgRFC::EvgSetPaint, RemoteFunctionCallData::EOpRequest);
+	vgApiData.AppendParam(iHostHandle);
+	vgApiData.AppendParam(aPaintModes);
+	aVgContext.ExecuteVgCommand(vgApiData);
+	}
+
+
+//static
+void CVgPaintInfo::ResetPaint(MVgContext& aVgContext)
+	{
+	RemoteFunctionCallData data; OpenVgRFC vgApiData(data);
+	vgApiData.Init(OpenVgRFC::EvgSetPaint, RemoteFunctionCallData::EOpRequest);
+	vgApiData.AppendParam(VG_INVALID_HANDLE);
+	const VGuint KZero = 0; 
+	vgApiData.AppendParam(KZero);
+	aVgContext.ExecuteVgCommand(vgApiData);
+	}
+
+
+void CVgPaintInfo::SetColor(MVgContext& aVgContext, VGuint aRgba)
+	{
+	RemoteFunctionCallData data; OpenVgRFC vgApiData(data);
+	vgApiData.Init(OpenVgRFC::EvgSetColor, RemoteFunctionCallData::EOpRequest);
+	vgApiData.AppendParam(iHostHandle);
+	vgApiData.AppendParam(aRgba);
+	aVgContext.ExecuteVgCommand(vgApiData);
+	}
+
+
+VGuint CVgPaintInfo::GetColor(MVgContext& aVgContext)
+	{
+	RemoteFunctionCallData data; OpenVgRFC vgApiData(data);
+	vgApiData.Init(OpenVgRFC::EvgGetColor);
+	vgApiData.AppendParam(iHostHandle);
+	VGPANIC_ASSERT_DEBUG(vgApiData.Data().Header().iOpType == RemoteFunctionCallData::EOpRequestWithReply, EVgPanicNotReplyOpcode);
+	aVgContext.ExecuteVgCommand(vgApiData);
+	return vgApiData.ReturnValue();
+	}
+
+
+void CVgPaintInfo::PaintPattern(MVgContext& aVgContext, CVgImageInfo* aPatternInfo)
+	{
+	RemoteFunctionCallData data; OpenVgRFC vgApiData(data);
+	vgApiData.Init(OpenVgRFC::EvgPaintPattern, RemoteFunctionCallData::EOpRequest);
+	vgApiData.AppendParam(iHostHandle);
+	TUint64 sgId(0L);
+	if (aPatternInfo == NULL)
+		{
+		vgApiData.AppendParam(VG_INVALID_HANDLE);
+		}
+	else
+		{
+		vgApiData.AppendParam(aPatternInfo->HostHandle());
+		if (aPatternInfo->IsEglSibling())
+			{
+			sgId = aPatternInfo->SgImageId();
+			}
+		}
+	vgApiData.AppendTUint64(sgId);
+	aVgContext.ExecuteVgCommand(vgApiData);
+	}
+
+
+// end of file vgpaint.cpp