#include "CVideoModeList.h"
#include "irrMath.h"
namespace irr
{
namespace video
{
CVideoModeList::CVideoModeList()
{
#ifdef _DEBUG
setDebugName("CVideoModeList");
#endif
Desktop.depth = 0;
Desktop.size = core::dimension2d<u32>(0,0);
}
void CVideoModeList::setDesktop(s32 desktopDepth, const core::dimension2d<u32>& desktopSize)
{
Desktop.depth = desktopDepth;
Desktop.size = desktopSize;
}
s32 CVideoModeList::getVideoModeCount() const
{
return (s32)VideoModes.size();
}
core::dimension2d<u32> CVideoModeList::getVideoModeResolution(s32 modeNumber) const
{
if (modeNumber < 0 || modeNumber > (s32)VideoModes.size())
return core::dimension2d<u32>(0,0);
return VideoModes[modeNumber].size;
}
core::dimension2d<u32> CVideoModeList::getVideoModeResolution(
const core::dimension2d<u32>& minSize,
const core::dimension2d<u32>& maxSize) const
{
u32 best=VideoModes.size();
if (best<2)
return getVideoModeResolution(0);
u32 i;
for (i=0; i<VideoModes.size(); ++i)
{
if (VideoModes[i].size.Width>=minSize.Width &&
VideoModes[i].size.Height>=minSize.Height &&
VideoModes[i].size.Width<=maxSize.Width &&
VideoModes[i].size.Height<=maxSize.Height)
best=i;
}
if (best<VideoModes.size())
return VideoModes[best].size;
const u32 minArea = minSize.getArea();
const u32 maxArea = maxSize.getArea();
u32 minDist = 0xffffffff;
best=0;
for (i=0; i<VideoModes.size(); ++i)
{
const u32 area = VideoModes[i].size.getArea();
const u32 dist = core::min_(abs(int(minArea-area)), abs(int(maxArea-area)));
if (dist<minDist)
{
minDist=dist;
best=i;
}
}
return VideoModes[best].size;
}
s32 CVideoModeList::getVideoModeDepth(s32 modeNumber) const
{
if (modeNumber < 0 || modeNumber > (s32)VideoModes.size())
return 0;
return VideoModes[modeNumber].depth;
}
const core::dimension2d<u32>& CVideoModeList::getDesktopResolution() const
{
return Desktop.size;
}
s32 CVideoModeList::getDesktopDepth() const
{
return Desktop.depth;
}
void CVideoModeList::addMode(const core::dimension2d<u32>& size, s32 depth)
{
SVideoMode m;
m.depth = depth;
m.size = size;
for (u32 i=0; i<VideoModes.size(); ++i)
{
if (VideoModes[i] == m)
return;
}
VideoModes.push_back(m);
VideoModes.sort();
}
}
}