getaspectratio

From ZDoom Wiki
Jump to: navigation, search

Returns the aspect ratio of the user's resolution by using nearly the same method ZDoom uses internally. Requires the abs function.

#define ASPECT_4_3 (4.0 / 3)
#define ASPECT_5_4 1.25
#define ASPECT_16_9 (16.0 / 9)
#define ASPECT_16_10 1.6

function int getaspectratio(void)
{
	int width = GetCVar("vid_defwidth");
	int height = GetCVar("vid_defheight");
	int nowidescreen = GetCVar("vid_nowidescreen");
	int tft = GetCVar("vid_tft");
	int aspect = GetCVar("vid_aspect");
	switch(aspect)
	{
		case 1:	return ASPECT_16_9;
		case 2:	return ASPECT_16_10;
		case 3:	return ASPECT_4_3;
		case 4:	return ASPECT_5_4;
	}
	if(nowidescreen)
	{
		if(!tft)
			return ASPECT_4_3;
		if(FixedMul(height<<16, FixedDiv(5.0, 4.0)) == width<<16)
			return ASPECT_5_4;
		else
			return ASPECT_4_3;
	}
	if(abs((abs(FixedMul(height<<16, FixedDiv(16.0, 9.0)))>>16) - width) < 10)
	{
		return ASPECT_16_9;
	}
	if(abs((abs(FixedMul(height<<16, FixedDiv(16.0, 10.0)))>>16) - width) < 60)
	{
		if((width == 320 && height == 200) || (width == 640 && height == 400))
			return ASPECT_4_3;
		return ASPECT_16_10;
	}
	if(FixedMul(height<<16, FixedDiv(5.0, 4.0))>>16 == width && tft)
	{
		return ASPECT_5_4;
	}
	return ASPECT_4_3;
}