mirror of
https://github.com/holub/mame
synced 2025-04-24 09:20:02 +03:00
Fix repetitive monitor updates. By design, MAME has an issue setting
aspect correctly on monitor resolution changes. This needs to be addressed separately. [Couriersud]
This commit is contained in:
parent
4e4d2c8ce9
commit
eb7b5c027e
@ -285,8 +285,6 @@ void sdl_monitor_info::refresh()
|
||||
|
||||
float osd_monitor_info::aspect()
|
||||
{
|
||||
// refresh the monitor information and compute the aspect
|
||||
refresh();
|
||||
// FIXME: returning 0 looks odd, video_config is bad
|
||||
if (video_config.keepaspect)
|
||||
{
|
||||
|
@ -115,17 +115,19 @@ public:
|
||||
|
||||
virtual ~osd_monitor_info() { }
|
||||
|
||||
virtual void refresh() = 0;
|
||||
|
||||
const void *oshandle() { return m_handle; }
|
||||
|
||||
const osd_rect &position_size() { refresh(); return m_pos_size; }
|
||||
const osd_rect &usuable_position_size() { refresh(); return m_usuable_pos_size; }
|
||||
const osd_rect &position_size() { return m_pos_size; }
|
||||
const osd_rect &usuable_position_size() { return m_usuable_pos_size; }
|
||||
|
||||
const char *devicename() { refresh(); return m_name[0] ? m_name : "UNKNOWN"; }
|
||||
const char *devicename() { return m_name[0] ? m_name : "UNKNOWN"; }
|
||||
|
||||
float aspect();
|
||||
|
||||
void set_aspect(const float a) { m_aspect = a; }
|
||||
bool is_primary() { refresh(); return m_is_primary; }
|
||||
bool is_primary() { return m_is_primary; }
|
||||
|
||||
osd_monitor_info * next() { return m_next; } // pointer to next monitor in list
|
||||
|
||||
@ -135,7 +137,6 @@ public:
|
||||
// FIXME: should be private!
|
||||
osd_monitor_info *m_next; // pointer to next monitor in list
|
||||
protected:
|
||||
virtual void refresh() = 0;
|
||||
osd_rect m_pos_size;
|
||||
osd_rect m_usuable_pos_size;
|
||||
bool m_is_primary;
|
||||
|
@ -113,6 +113,7 @@ void windows_osd_interface::video_exit()
|
||||
win_monitor_info::win_monitor_info(const HMONITOR handle, const char *monitor_device, float aspect)
|
||||
: osd_monitor_info(&m_handle, monitor_device, aspect), m_handle(handle)
|
||||
{
|
||||
refresh();
|
||||
}
|
||||
|
||||
win_monitor_info::~win_monitor_info()
|
||||
@ -138,6 +139,7 @@ void win_monitor_info::refresh()
|
||||
osd_free(temp);
|
||||
|
||||
m_pos_size = RECT_to_osd_rect(m_info.rcMonitor);
|
||||
printf("%d %d\n", m_pos_size.width(), m_pos_size.height());
|
||||
m_usuable_pos_size = RECT_to_osd_rect(m_info.rcWork);
|
||||
m_is_primary = ((m_info.dwFlags & MONITORINFOF_PRIMARY) != 0);
|
||||
(void)result; // to silence gcc 4.6
|
||||
@ -151,8 +153,6 @@ void win_monitor_info::refresh()
|
||||
|
||||
float osd_monitor_info::aspect()
|
||||
{
|
||||
// refresh the monitor information and compute the aspect
|
||||
refresh();
|
||||
// FIXME: returning 0 looks odd, video_config is bad
|
||||
if (video_config.keepaspect)
|
||||
{
|
||||
|
@ -110,17 +110,19 @@ public:
|
||||
|
||||
virtual ~osd_monitor_info() { }
|
||||
|
||||
virtual void refresh() = 0;
|
||||
|
||||
const void *oshandle() { return m_handle; }
|
||||
|
||||
const osd_rect &position_size() { refresh(); return m_pos_size; }
|
||||
const osd_rect &usuable_position_size() { refresh(); return m_usuable_pos_size; }
|
||||
const osd_rect &position_size() { return m_pos_size; }
|
||||
const osd_rect &usuable_position_size() { return m_usuable_pos_size; }
|
||||
|
||||
const char *devicename() { refresh(); return m_name[0] ? m_name : "UNKNOWN"; }
|
||||
const char *devicename() { return m_name[0] ? m_name : "UNKNOWN"; }
|
||||
|
||||
float aspect();
|
||||
|
||||
void set_aspect(const float a) { m_aspect = a; }
|
||||
bool is_primary() { refresh(); return m_is_primary; }
|
||||
bool is_primary() { return m_is_primary; }
|
||||
|
||||
osd_monitor_info * next() { return m_next; } // pointer to next monitor in list
|
||||
|
||||
@ -130,7 +132,6 @@ public:
|
||||
// FIXME: should be private!
|
||||
osd_monitor_info *m_next; // pointer to next monitor in list
|
||||
protected:
|
||||
virtual void refresh() = 0;
|
||||
osd_rect m_pos_size;
|
||||
osd_rect m_usuable_pos_size;
|
||||
bool m_is_primary;
|
||||
|
@ -1447,6 +1447,17 @@ LRESULT CALLBACK win_window_info::video_window_proc(HWND wnd, UINT message, WPAR
|
||||
window->maximize_window();
|
||||
break;
|
||||
|
||||
// maximum size set
|
||||
case WM_DISPLAYCHANGE:
|
||||
/* FIXME: The current codebase has an issue with setting aspect
|
||||
* ratios correctly after display change. set_aspect should
|
||||
* be set_forced_aspect and on a refresh this forced aspect should
|
||||
* be preserved if set. If not, the standard aspect calculation
|
||||
* should be used.
|
||||
*/
|
||||
window->m_monitor->refresh();
|
||||
break;
|
||||
|
||||
// set focus: if we're not the primary window, switch back
|
||||
// commented out ATM because this prevents us from resizing secondary windows
|
||||
// case WM_SETFOCUS:
|
||||
|
Loading…
Reference in New Issue
Block a user