X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fgraphics%2Fwindows%2Fdisplay.cpp;h=61fe9837d6d1db0e4cc9f7da8edcbd1f02e9c3bd;hb=b397d792478fe965f8a608e84c32d6764fe7a07c;hp=6553a8c692163772ca877e09fa1f26a8d6834271;hpb=0913ba6fdd0e28740e0b521f275b9ce82c4a1b7a;p=libs%2Fgui.git diff --git a/source/graphics/windows/display.cpp b/source/graphics/windows/display.cpp index 6553a8c..61fe983 100644 --- a/source/graphics/windows/display.cpp +++ b/source/graphics/windows/display.cpp @@ -9,8 +9,11 @@ namespace Graphics { Display::Display(const string &): primary_monitor(0), - priv(new Private) + priv(new Private), + focus_window(0) { + static ErrorDialog err_dlg(0); + for(unsigned i=0;; ++i) { DISPLAY_DEVICE adapter_dev; @@ -24,6 +27,7 @@ Display::Display(const string &): monitors.push_back(Monitor()); Monitor &monitor = monitors.back(); monitor.index = monitors.size()-1; + monitor.name = adapter_dev.DeviceString; priv->monitors.push_back(adapter_dev.DeviceName); if(adapter_dev.StateFlags&DISPLAY_DEVICE_PRIMARY_DEVICE) @@ -42,30 +46,37 @@ Display::Display(const string &): mode.index = modes.size(); mode.monitor = &monitor; mode.rate = info.dmDisplayFrequency; - if(find_matching_mode(mode)) + if(find_mode(mode)) continue; modes.push_back(mode); monitor.video_modes.push_back(&modes.back()); if(have_current && info.dmPelsWidth==current.dmPelsWidth && info.dmPelsHeight==current.dmPelsHeight && info.dmDisplayFrequency==current.dmDisplayFrequency) - monitor.desktop_mode = &modes.back(); + monitor.desktop_settings.mode = &modes.back(); } + + monitor.current_settings = monitor.desktop_settings; } } Display::~Display() { + delete priv; } void Display::set_mode(const VideoMode &requested_mode, bool) { - const VideoMode *mode = find_matching_mode(requested_mode); + const VideoMode *mode = find_mode(requested_mode); if(!mode) throw unsupported_video_mode(requested_mode); DEVMODE info; + info.dmDeviceName[0] = 0; + info.dmSpecVersion = DM_SPECVERSION; + info.dmDriverVersion = 0; info.dmSize = sizeof(DEVMODE); + info.dmDriverExtra = 0; info.dmFields = DM_PELSWIDTH|DM_PELSHEIGHT; info.dmPelsWidth = mode->width; info.dmPelsHeight = mode->height; @@ -81,7 +92,7 @@ void Display::set_mode(const VideoMode &requested_mode, bool) for(list::iterator i=monitors.begin(); i!=monitors.end(); ++i) if(&*i==mode->monitor) - i->current_mode = mode; + i->current_settings.mode = mode; } bool Display::process_events() @@ -89,6 +100,7 @@ bool Display::process_events() MSG msg; if(PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) { + TranslateMessage(&msg); DispatchMessage(&msg); return true; }