X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fgraphics%2Fdisplay.cpp;h=de5a06952a58e8efa8f3e956ee0f949126775426;hb=d163b3628fee61ea4acad0e9429aab904b03bf70;hp=deaa5b560e7819db973b1f6a9fc2d94068bdf65e;hpb=e09c2211539f417474b1d3226f56f021938329bf;p=libs%2Fgui.git diff --git a/source/graphics/display.cpp b/source/graphics/display.cpp index deaa5b5..de5a069 100644 --- a/source/graphics/display.cpp +++ b/source/graphics/display.cpp @@ -17,6 +17,40 @@ void Display::remove_window(Window &wnd) priv->windows.erase(wnd.get_private().window); } +const VideoMode &Display::get_desktop_mode() const +{ + if(!primary_monitor || !primary_monitor->desktop_mode) + throw logic_error("no desktop mode"); + return *primary_monitor->desktop_mode; +} + +void Display::restore_mode() +{ + for(list::const_iterator i=monitors.begin(); i!=monitors.end(); ++i) + if(i->desktop_mode) + set_mode(*i->desktop_mode, false); +} + +const VideoMode *Display::find_mode(const VideoMode &mode) const +{ + for(list::const_iterator i=modes.begin(); i!=modes.end(); ++i) + { + if(mode.monitor && i->monitor!=mode.monitor) + continue; + if(mode.rate && i->rate!=mode.rate) + continue; + if(i->width==mode.width && i->height==mode.height) + return &*i; + } + + return 0; +} + +const VideoMode *Display::find_mode(unsigned width, unsigned height) const +{ + return find_mode(VideoMode(width, height)); +} + void Display::tick() { check_error();