Update to v104r14 release.

byuu says:

Changelog:

  - Emulator::Interface::videoResolution() -\> VideoResolution renamed
    to videoInformation() -\> VideoInformation
  - added double VideoInformation::refreshRate
  - higan: added `binary := (application|library)` — set this to
    `library` to produce a dynamic link library
  - higan: removed `-march=native` for macOS application builds; and for
    all library builds
  - higan: removed `console` build flag; uncomment  `link += -mwindows`
    instead
  - nall/GNUmakefile: `macosx` platform renamed `macos`
      - still need to do this for nall/intrinsics.hpp
  - Game Gear: return region=NTSC as the only option, so that the system
    frequency is always set correctly
  - hiro/cocoa: fixed typo [Sintendo]
  - hiro/Windows: removed GetDpiForMonitor, as it's Windows 8+ only; DPI
    is no longer per-monitor aware
  - icarus: core Icarus class now has virtual functions for
    directory::create, <file::exists>, <file::copy>, <file::write>
  - icarus: Sufami Turbo can import save RAM files now
  - icarus: setting `ICARUS_LIBRARY` define will compile icarus without
    main(), GUI components
  - ruby/video/Direct3D: choose the current monitor instead of top-left
    monitor for fullscreen exclusive [Cydrak]
  - ruby/video/Direct3D: do not set `WS_EX_TOPMOST` on fullscreen
    exclusive window [Cydrak]
      - this isn't necessary for exclusive mode, and it just makes
        getting out of the application more difficult
This commit is contained in:
Tim Allen
2017-09-24 11:01:48 +10:00
parent c63e6f2953
commit fbc58c70ae
55 changed files with 287 additions and 187 deletions

View File

@@ -27,7 +27,7 @@ auto pFont::family(const string& family) -> string {
auto pFont::create(const Font& font) -> HFONT {
return CreateFont(
-((font.size() ? font.size() : 8) * 96.0 / 72.0 + 0.5),
-(Application::scale(font.size() ? font.size() : 8) * 96.0 / 72.0 + 0.5),
0, 0, 0, font.bold() ? FW_BOLD : FW_NORMAL, font.italic(), 0, 0, 0, 0, 0, 0, 0,
utf16_t(family(font.family()))
);

View File

@@ -5,24 +5,19 @@ namespace hiro {
struct MonitorInfo {
uint monitor = 0;
uint primary = 0;
float dpiX = 0;
float dpiY = 0;
Geometry geometry;
uint index = 0;
};
static auto CALLBACK MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData) -> BOOL {
MonitorInfo& info = *(MonitorInfo*)dwData;
MONITORINFOEX mi{sizeof(MONITORINFOEX)};
MONITORINFOEX mi{};
mi.cbSize = sizeof(MONITORINFOEX);
GetMonitorInfo(hMonitor, &mi);
string displayName = (const char*)utf8_t(mi.szDevice);
if(displayName.beginsWith(R"(\\.\DISPLAYV)")) return true; //ignore pseudo-monitors
if(mi.dwFlags & MONITORINFOF_PRIMARY) info.primary = info.index;
if(info.monitor == info.index) {
UINT dpiX = 0, dpiY = 0;
GetDpiForMonitor(hMonitor, MDT_EFFECTIVE_DPI, &dpiX, &dpiY);
info.dpiX = dpiX;
info.dpiY = dpiY;
info.geometry = {lprcMonitor->left, lprcMonitor->top, lprcMonitor->right - lprcMonitor->left, lprcMonitor->bottom - lprcMonitor->top};
}
info.index++;
@@ -34,10 +29,11 @@ auto pMonitor::count() -> uint {
}
auto pMonitor::dpi(uint monitor) -> Position {
MonitorInfo info;
info.monitor = monitor;
EnumDisplayMonitors(nullptr, nullptr, MonitorEnumProc, (LPARAM)&info);
return {info.dpiX, info.dpiY};
HDC hdc = GetDC(0);
auto dpiX = (float)GetDeviceCaps(hdc, LOGPIXELSX);
auto dpiY = (float)GetDeviceCaps(hdc, LOGPIXELSY);
ReleaseDC(0, hdc);
return {dpiX, dpiY};
}
auto pMonitor::geometry(uint monitor) -> Geometry {

View File

@@ -173,7 +173,12 @@ auto Button_CustomDraw(HWND hwnd, PAINTSTRUCT& ps, bool bordered, bool checked,
SetTextColor(ps.hdc, GetSysColor(IsWindowEnabled(hwnd) ? COLOR_BTNTEXT : COLOR_GRAYTEXT));
auto hFont = pFont::create(font);
SelectObject(ps.hdc, hFont);
RECT rcText{textGeometry.x(), textGeometry.y(), textGeometry.x() + textGeometry.width(), textGeometry.y() + textGeometry.height()};
RECT rcText{
LONG(textGeometry.x()),
LONG(textGeometry.y()),
LONG(textGeometry.x() + textGeometry.width()),
LONG(textGeometry.y() + textGeometry.height())
};
DrawText(ps.hdc, wText, -1, &rcText, DT_NOPREFIX | DT_END_ELLIPSIS);
DeleteObject(hFont);
}

View File

@@ -31,9 +31,9 @@ auto pFrame::setGeometry(Geometry geometry) -> void {
auto size = pFont::size(hfont, state().text);
pWidget::setGeometry({
geometry.x(),
geometry.y() - (empty ? size.height() >> 1 : 0),
geometry.y() - (empty ? size.height() / 2 : 0),
geometry.width(),
geometry.height() + (empty ? size.height() >> 1 : 0)
geometry.height() + (empty ? size.height() / 2 : 0)
});
if(auto layout = state().layout) {
if(empty) size.setHeight(1);