// Convert Point size to Pixel size (Useful in gdi.Font() and such)
function Point2Pixel(pt, dpi) {
	return (pt * dpi / 72);
}

function RGBA(r, g, b, a) {
	return ((a << 24) | (r << 16) | (g << 8) | (b));
}

function RGB(r, g, b) {
	return (0xff000000 | (r << 16) | (g << 8) | (b));
}

function toRGB(col) { // returns an array like [192, 0, 0]
	var a = col - 0xFF000000;
	return [a >> 16, a >> 8 & 0xFF, a & 0xFF];
}

function getAlpha(colour) {
	return ((colour >> 24) & 0xff);
}

function getRed(colour) {
	return ((colour >> 16) & 0xff);
}

function getGreen(colour) {
	return ((colour >> 8) & 0xff);
}

function getBlue(colour) {
	return (colour & 0xff);
}

function setAlpha(colour, a) {
	return ((colour & 0x00ffffff) | (a << 24));
}

function setRed(colour, r) {
	return ((colour & 0xff00ffff) | (r << 16));
}

function setGreen(colour, g) {
	return ((colour & 0xffff00ff) | (g << 8));
}

function setBlue(colour, b) {
	return ((colour & 0xffffff00) | b);
}

// Helper function for DrawString() and MeasureString()
// args: h_align, v_align, trimming, flags
function StringFormat() {
	var h_align = 0, v_align = 0, trimming = 0, flags = 0;
	switch (arguments.length)
	{
	// fall-thru
	case 4:
		flags = arguments[3];
	case 3:
		trimming = arguments[2];
	case 2:
		v_align = arguments[1];
	case 1:
		h_align = arguments[0];
		break;
	default:
		return 0;
	}
	return ((h_align << 28) | (v_align << 24) | (trimming << 20) | flags);
}

// Based on human hearing curve
// 0 <= pos <= 1
// return a value value: -100 <= vol <= 0
function pos2vol(pos) {
	 return 50 * Math.log(0.99 * pos + 0.01) / Math.LN10;
}

// Inverse function of pos2vol()
function vol2pos(v){
	 return (Math.pow(10, v / 50) - 0.01) / 0.99;
}

// pre-calculated colours
var colours = {
	AliceBlue			: 0xFFF0F8FF,
	AntiqueWhite		 : 0xFFFAEBD7,
	Aqua				 : 0xFF00FFFF,
	Aquamarine		   : 0xFF7FFFD4,
	Azure				: 0xFFF0FFFF,
	Beige				: 0xFFF5F5DC,
	Bisque			   : 0xFFFFE4C4,
	Black				: 0xFF000000,
	BlanchedAlmond	   : 0xFFFFEBCD,
	Blue				 : 0xFF0000FF,
	BlueViolet		   : 0xFF8A2BE2,
	Brown				: 0xFFA52A2A,
	BurlyWood			: 0xFFDEB887,
	CadetBlue			: 0xFF5F9EA0,
	Chartreuse		   : 0xFF7FFF00,
	Chocolate			: 0xFFD2691E,
	Coral				: 0xFFFF7F50,
	CornflowerBlue	   : 0xFF6495ED,
	Cornsilk			 : 0xFFFFF8DC,
	Crimson			  : 0xFFDC143C,
	Cyan				 : 0xFF00FFFF,
	DarkBlue			 : 0xFF00008B,
	DarkCyan			 : 0xFF008B8B,
	DarkGoldenrod		: 0xFFB8860B,
	DarkGray			 : 0xFFA9A9A9,
	DarkGreen			: 0xFF006400,
	DarkKhaki			: 0xFFBDB76B,
	DarkMagenta		  : 0xFF8B008B,
	DarkOliveGreen	   : 0xFF556B2F,
	DarkOrange		   : 0xFFFF8C00,
	DarkOrchid		   : 0xFF9932CC,
	DarkRed			  : 0xFF8B0000,
	DarkSalmon		   : 0xFFE9967A,
	DarkSeaGreen		 : 0xFF8FBC8B,
	DarkSlateBlue		: 0xFF483D8B,
	DarkSlateGray		: 0xFF2F4F4F,
	DarkTurquoise		: 0xFF00CED1,
	DarkViolet		   : 0xFF9400D3,
	DeepPink			 : 0xFFFF1493,
	DeepSkyBlue		  : 0xFF00BFFF,
	DimGray			  : 0xFF696969,
	DodgerBlue		   : 0xFF1E90FF,
	Firebrick			: 0xFFB22222,
	FloralWhite		  : 0xFFFFFAF0,
	ForestGreen		  : 0xFF228B22,
	Fuchsia			  : 0xFFFF00FF,
	Gainsboro			: 0xFFDCDCDC,
	GhostWhite		   : 0xFFF8F8FF,
	Gold				 : 0xFFFFD700,
	Goldenrod			: 0xFFDAA520,
	Gray				 : 0xFF808080,
	Green				: 0xFF008000,
	GreenYellow		  : 0xFFADFF2F,
	Honeydew			 : 0xFFF0FFF0,
	HotPink			  : 0xFFFF69B4,
	IndianRed			: 0xFFCD5C5C,
	Indigo			   : 0xFF4B0082,
	Ivory				: 0xFFFFFFF0,
	Khaki				: 0xFFF0E68C,
	Lavender			 : 0xFFE6E6FA,
	LavenderBlush		: 0xFFFFF0F5,
	LawnGreen			: 0xFF7CFC00,
	LemonChiffon		 : 0xFFFFFACD,
	LightBlue			: 0xFFADD8E6,
	LightCoral		   : 0xFFF08080,
	LightCyan			: 0xFFE0FFFF,
	LightGoldenrodYellow : 0xFFFAFAD2,
	LightGray			: 0xFFD3D3D3,
	LightGreen		   : 0xFF90EE90,
	LightPink			: 0xFFFFB6C1,
	LightSalmon		  : 0xFFFFA07A,
	LightSeaGreen		: 0xFF20B2AA,
	LightSkyBlue		 : 0xFF87CEFA,
	LightSlateGray	   : 0xFF778899,
	LightSteelBlue	   : 0xFFB0C4DE,
	LightYellow		  : 0xFFFFFFE0,
	Lime				 : 0xFF00FF00,
	LimeGreen			: 0xFF32CD32,
	Linen				: 0xFFFAF0E6,
	Magenta			  : 0xFFFF00FF,
	Maroon			   : 0xFF800000,
	MediumAquamarine	 : 0xFF66CDAA,
	MediumBlue		   : 0xFF0000CD,
	MediumOrchid		 : 0xFFBA55D3,
	MediumPurple		 : 0xFF9370DB,
	MediumSeaGreen	   : 0xFF3CB371,
	MediumSlateBlue	  : 0xFF7B68EE,
	MediumSpringGreen	: 0xFF00FA9A,
	MediumTurquoise	  : 0xFF48D1CC,
	MediumVioletRed	  : 0xFFC71585,
	MidnightBlue		 : 0xFF191970,
	MintCream			: 0xFFF5FFFA,
	MistyRose			: 0xFFFFE4E1,
	Moccasin			 : 0xFFFFE4B5,
	NavajoWhite		  : 0xFFFFDEAD,
	Navy				 : 0xFF000080,
	OldLace			  : 0xFFFDF5E6,
	Olive				: 0xFF808000,
	OliveDrab			: 0xFF6B8E23,
	Orange			   : 0xFFFFA500,
	OrangeRed			: 0xFFFF4500,
	Orchid			   : 0xFFDA70D6,
	PaleGoldenrod		: 0xFFEEE8AA,
	PaleGreen			: 0xFF98FB98,
	PaleTurquoise		: 0xFFAFEEEE,
	PaleVioletRed		: 0xFFDB7093,
	PapayaWhip		   : 0xFFFFEFD5,
	PeachPuff			: 0xFFFFDAB9,
	Peru				 : 0xFFCD853F,
	Pink				 : 0xFFFFC0CB,
	Plum				 : 0xFFDDA0DD,
	PowderBlue		   : 0xFFB0E0E6,
	Purple			   : 0xFF800080,
	Red				  : 0xFFFF0000,
	RosyBrown			: 0xFFBC8F8F,
	RoyalBlue			: 0xFF4169E1,
	SaddleBrown		  : 0xFF8B4513,
	Salmon			   : 0xFFFA8072,
	SandyBrown		   : 0xFFF4A460,
	SeaGreen			 : 0xFF2E8B57,
	SeaShell			 : 0xFFFFF5EE,
	Sienna			   : 0xFFA0522D,
	Silver			   : 0xFFC0C0C0,
	SkyBlue			  : 0xFF87CEEB,
	SlateBlue			: 0xFF6A5ACD,
	SlateGray			: 0xFF708090,
	Snow				 : 0xFFFFFAFA,
	SpringGreen		  : 0xFF00FF7F,
	SteelBlue			: 0xFF4682B4,
	Tan				  : 0xFFD2B48C,
	Teal				 : 0xFF008080,
	Thistle			  : 0xFFD8BFD8,
	Tomato			   : 0xFFFF6347,
	Transparent		  : 0x00FFFFFF,
	Turquoise			: 0xFF40E0D0,
	Violet			   : 0xFFEE82EE,
	Wheat				: 0xFFF5DEB3,
	White				: 0xFFFFFFFF,
	WhiteSmoke		   : 0xFFF5F5F5,
	Yellow			   : 0xFFFFFF00,
	YellowGreen		  : 0xFF9ACD32
};
