getaspectratio

From ZDoom Wiki
Jump to navigation Jump to 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
#define ASPECT_17_10 1.7

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;
		case 5: return ASPECT_17_10;
	}
	if(nowidescreen)
	{
		if(!tft)
			return ASPECT_4_3;
		if(height * ASPECT_5_4 == width<<16)
			return ASPECT_5_4;
		else
			return ASPECT_4_3;
	}
	if(abs((abs(height * ASPECT_16_9)>>16) - width) < 10)
	{
		return ASPECT_16_9;
	}
	if(abs((abs(height * ASPECT_17_10)>>16) - width) < 10)
	{
		return ASPECT_17_10;
	}
	if(abs((abs(height * ASPECT_16_10)>>16) - width) < 60)
	{
		if((width == 320 && height == 200) || (width == 640 && height == 400))
			return ASPECT_4_3;
		return ASPECT_16_10;
	}
	if((height * ASPECT_5_4)>>16 == width && tft)
	{
		return ASPECT_5_4;
	}
	return ASPECT_4_3;
}