From: <sv...@op...> - 2024-11-11 22:48:43
|
Author: sagamusix Date: Mon Nov 11 23:48:37 2024 New Revision: 22165 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22165 Log: [Fix] Fix status bar pane sizes in mixed-DPI setup (and minimum width of first pane for high-DPI in general). Modified: trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Mainfrm.h Modified: trunk/OpenMPT/mptrack/MainFrm.cpp ============================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp Mon Nov 11 23:14:22 2024 (r22164) +++ trunk/OpenMPT/mptrack/MainFrm.cpp Mon Nov 11 23:48:37 2024 (r22165) @@ -175,9 +175,9 @@ CInputHandler *CMainFrame::m_InputHandler = nullptr; -static UINT indicators[] = +static constexpr UINT StatusBarIndicators[] = { - ID_SEPARATOR, // status line indicator + ID_SEPARATOR, // status line indicator ID_INDICATOR_XINFO, ID_INDICATOR_INFO, ID_INDICATOR_USER, @@ -301,8 +301,8 @@ if (!m_wndToolBar.Create(this)) return -1; if (!m_wndStatusBar.Create(this)) return -1; if (!m_wndTree.Create(this, IDD_TREEVIEW, CBRS_LEFT|CBRS_BORDER_RIGHT, IDD_TREEVIEW)) return -1; - m_wndStatusBar.SetIndicators(indicators, mpt::saturate_cast<int>(std::size(indicators))); - m_wndStatusBar.SetPaneInfo(0, ID_SEPARATOR, SBPS_STRETCH, 256); + m_wndStatusBar.SetIndicators(StatusBarIndicators, static_cast<int>(std::size(StatusBarIndicators))); + SetupStatusBarSizes(); m_wndToolBar.Init(this); m_wndTree.RecalcLayout(); @@ -338,6 +338,7 @@ auto result = Default(); RecreateImageLists(); + SetupStatusBarSizes(); m_wndTree.RecalcLayout(); return result; } @@ -363,6 +364,26 @@ } +void CMainFrame::SetupStatusBarSizes() +{ + m_wndStatusBar.SetPaneInfo(0, ID_SEPARATOR, SBPS_STRETCH, HighDPISupport::ScalePixels(256, m_hWnd)); + + CDC *dc = GetDC(); + MPT_ASSERT(m_hGUIFont.m_hObject); + auto oldFont = dc->SelectObject(m_hGUIFont); // GetFont() seem to give us the font for the previous DPI right after the DPI change + for(size_t i = 0; i < std::size(StatusBarIndicators); i++) + { + if(StatusBarIndicators[i] == ID_SEPARATOR) + continue; + CString text; + VERIFY(text.LoadString(StatusBarIndicators[i])); + m_wndStatusBar.SetPaneInfo(static_cast<int>(i), StatusBarIndicators[i], SBPS_NORMAL, dc->GetTextExtent(text).cx); + } + dc->SelectObject(oldFont); + ReleaseDC(dc); +} + + BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { return CMDIFrameWnd::PreCreateWindow(cs); Modified: trunk/OpenMPT/mptrack/Mainfrm.h ============================================================================== --- trunk/OpenMPT/mptrack/Mainfrm.h Mon Nov 11 23:14:22 2024 (r22164) +++ trunk/OpenMPT/mptrack/Mainfrm.h Mon Nov 11 23:48:37 2024 (r22165) @@ -376,6 +376,7 @@ static void AddToolBarMenuEntries(CMenu &menu); void RecreateImageLists(); + void SetupStatusBarSizes(); public: void UpdateMRUList(); |