You can subscribe to this list here.
2006 |
Jan
|
Feb
|
Mar
(1) |
Apr
(1) |
May
|
Jun
(1) |
Jul
|
Aug
(10) |
Sep
|
Oct
|
Nov
|
Dec
(3) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2007 |
Jan
(1) |
Feb
(2) |
Mar
(3) |
Apr
(2) |
May
(10) |
Jun
(2) |
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
(3) |
Dec
|
2008 |
Jan
(6) |
Feb
(4) |
Mar
(5) |
Apr
(2) |
May
(1) |
Jun
(1) |
Jul
(4) |
Aug
(6) |
Sep
(2) |
Oct
(9) |
Nov
(1) |
Dec
(4) |
2009 |
Jan
(9) |
Feb
(2) |
Mar
(2) |
Apr
(2) |
May
(6) |
Jun
(18) |
Jul
(33) |
Aug
(39) |
Sep
(33) |
Oct
(24) |
Nov
(23) |
Dec
(22) |
2010 |
Jan
(29) |
Feb
(32) |
Mar
(51) |
Apr
(17) |
May
(31) |
Jun
(21) |
Jul
(32) |
Aug
(28) |
Sep
(35) |
Oct
(27) |
Nov
(11) |
Dec
(13) |
2011 |
Jan
(14) |
Feb
(13) |
Mar
(27) |
Apr
(27) |
May
(28) |
Jun
(20) |
Jul
(43) |
Aug
(52) |
Sep
(66) |
Oct
(61) |
Nov
(11) |
Dec
(8) |
2012 |
Jan
(20) |
Feb
(30) |
Mar
(38) |
Apr
(21) |
May
(33) |
Jun
(21) |
Jul
(25) |
Aug
(9) |
Sep
(24) |
Oct
(42) |
Nov
(27) |
Dec
(41) |
2013 |
Jan
(20) |
Feb
(35) |
Mar
(156) |
Apr
(298) |
May
(258) |
Jun
(201) |
Jul
(105) |
Aug
(60) |
Sep
(193) |
Oct
(245) |
Nov
(280) |
Dec
(194) |
2014 |
Jan
(63) |
Feb
(202) |
Mar
(200) |
Apr
(23) |
May
(53) |
Jun
(105) |
Jul
(18) |
Aug
(26) |
Sep
(110) |
Oct
(187) |
Nov
(97) |
Dec
(74) |
2015 |
Jan
(45) |
Feb
(55) |
Mar
(116) |
Apr
(116) |
May
(193) |
Jun
(164) |
Jul
(50) |
Aug
(111) |
Sep
(98) |
Oct
(71) |
Nov
(103) |
Dec
(63) |
2016 |
Jan
(33) |
Feb
(101) |
Mar
(182) |
Apr
(139) |
May
(140) |
Jun
(103) |
Jul
(165) |
Aug
(286) |
Sep
(208) |
Oct
(127) |
Nov
(97) |
Dec
(54) |
2017 |
Jan
(64) |
Feb
(335) |
Mar
(202) |
Apr
(212) |
May
(139) |
Jun
(127) |
Jul
(294) |
Aug
(154) |
Sep
(170) |
Oct
(152) |
Nov
(156) |
Dec
(62) |
2018 |
Jan
(168) |
Feb
(237) |
Mar
(196) |
Apr
(174) |
May
(174) |
Jun
(161) |
Jul
(127) |
Aug
(88) |
Sep
(149) |
Oct
(66) |
Nov
(52) |
Dec
(135) |
2019 |
Jan
(146) |
Feb
(126) |
Mar
(104) |
Apr
(58) |
May
(60) |
Jun
(28) |
Jul
(197) |
Aug
(129) |
Sep
(141) |
Oct
(148) |
Nov
(63) |
Dec
(100) |
2020 |
Jan
(74) |
Feb
(37) |
Mar
(59) |
Apr
(154) |
May
(194) |
Jun
(133) |
Jul
(313) |
Aug
(197) |
Sep
(49) |
Oct
(162) |
Nov
(143) |
Dec
(57) |
2021 |
Jan
(120) |
Feb
(107) |
Mar
(314) |
Apr
(157) |
May
(524) |
Jun
(169) |
Jul
(72) |
Aug
(133) |
Sep
(135) |
Oct
(146) |
Nov
(198) |
Dec
(325) |
2022 |
Jan
(409) |
Feb
(249) |
Mar
(138) |
Apr
(95) |
May
(102) |
Jun
(221) |
Jul
(66) |
Aug
(120) |
Sep
(192) |
Oct
(131) |
Nov
(53) |
Dec
(171) |
2023 |
Jan
(357) |
Feb
(82) |
Mar
(168) |
Apr
(218) |
May
(196) |
Jun
(86) |
Jul
(115) |
Aug
(49) |
Sep
(190) |
Oct
(102) |
Nov
(45) |
Dec
(76) |
2024 |
Jan
(86) |
Feb
(50) |
Mar
(324) |
Apr
(209) |
May
(197) |
Jun
(232) |
Jul
(194) |
Aug
(247) |
Sep
(219) |
Oct
(266) |
Nov
(328) |
Dec
(304) |
2025 |
Jan
(191) |
Feb
(115) |
Mar
(137) |
Apr
(32) |
May
(126) |
Jun
(403) |
Jul
(202) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <sv...@op...> - 2024-11-13 21:36:12
|
Author: sagamusix Date: Wed Nov 13 21:20:48 2024 New Revision: 22179 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22179 Log: Merged revision(s) 22177-22178 from trunk/OpenMPT: [Fix] Don't limit update tooltip horizontal position to right border of main window if the toolbar is floating. ........ [Fix] Pass the correct rect to update tooltip. Doesn't appear to make a difference in practice. ........ Modified: branches/OpenMPT-1.31/ (props changed) branches/OpenMPT-1.31/mptrack/Mainbar.cpp Modified: branches/OpenMPT-1.31/mptrack/Mainbar.cpp ============================================================================== --- branches/OpenMPT-1.31/mptrack/Mainbar.cpp Wed Nov 13 21:20:21 2024 (r22178) +++ branches/OpenMPT-1.31/mptrack/Mainbar.cpp Wed Nov 13 21:20:48 2024 (r22179) @@ -474,8 +474,12 @@ GetToolBarCtrl().GetRect(ID_UPDATE_AVAILABLE, &rect); CPoint pt = rect.CenterPoint(); ClientToScreen(&pt); - CMainFrame::GetMainFrame()->GetWindowRect(rect); - LimitMax(pt.x, rect.right); + if(!IsFloating()) + { + CRect windowRect; + CMainFrame::GetMainFrame()->GetWindowRect(windowRect); + LimitMax(pt.x, windowRect.right); + } return m_tooltip.ShowUpdate(*this, newVersion, infoURL, rect, pt, ID_UPDATE_AVAILABLE); } |
From: <sv...@op...> - 2024-11-13 21:36:08
|
Author: sagamusix Date: Wed Nov 13 21:20:21 2024 New Revision: 22178 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22178 Log: [Fix] Pass the correct rect to update tooltip. Doesn't appear to make a difference in practice. Modified: trunk/OpenMPT/mptrack/Mainbar.cpp Modified: trunk/OpenMPT/mptrack/Mainbar.cpp ============================================================================== --- trunk/OpenMPT/mptrack/Mainbar.cpp Wed Nov 13 21:03:12 2024 (r22177) +++ trunk/OpenMPT/mptrack/Mainbar.cpp Wed Nov 13 21:20:21 2024 (r22178) @@ -493,8 +493,9 @@ ClientToScreen(&pt); if(!IsFloating()) { - CMainFrame::GetMainFrame()->GetWindowRect(rect); - LimitMax(pt.x, rect.right); + CRect windowRect; + CMainFrame::GetMainFrame()->GetWindowRect(windowRect); + LimitMax(pt.x, windowRect.right); } return m_tooltip.ShowUpdate(*this, newVersion, infoURL, rect, pt, ID_UPDATE_AVAILABLE); |
From: <sv...@op...> - 2024-11-13 21:26:08
|
Author: sagamusix Date: Wed Nov 13 21:31:04 2024 New Revision: 22181 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22181 Log: [New] Tree view can now also be placed on the right side of the window. [Fix] In the main menu, the checkboxes for main toolbar readout visibility were not updated. Modified: trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Mainbar.cpp trunk/OpenMPT/mptrack/Mainbar.h trunk/OpenMPT/mptrack/Mainfrm.h trunk/OpenMPT/mptrack/TrackerSettings.cpp trunk/OpenMPT/mptrack/TrackerSettings.h trunk/OpenMPT/mptrack/resource.h Modified: trunk/OpenMPT/mptrack/MainFrm.cpp ============================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp Wed Nov 13 21:26:44 2024 (r22180) +++ trunk/OpenMPT/mptrack/MainFrm.cpp Wed Nov 13 21:31:04 2024 (r22181) @@ -138,6 +138,7 @@ ON_COMMAND(ID_MAINBAR_SHOW_ROWSPERBEAT, &CMainFrame::OnToggleMainBarShowRowsPerBeat) ON_COMMAND(ID_MAINBAR_SHOW_GLOBALVOLUME, &CMainFrame::OnToggleMainBarShowGlobalVolume) ON_COMMAND(ID_MAINBAR_SHOW_VUMETER, &CMainFrame::OnToggleMainBarShowVUMeter) + ON_COMMAND(ID_TREEVIEW_ON_LEFT, &CMainFrame::OnToggleTreeViewOnLeft) #ifdef MPT_ENABLE_PLAYBACK_TEST_MENU ON_COMMAND(ID_CREATE_MIXERDUMP, &CMainFrame::OnCreateMixerDump) @@ -300,7 +301,7 @@ EnableDocking(CBRS_ALIGN_ANY); 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; + if (!m_wndTree.Create(this, IDD_TREEVIEW, TrackerSettings::Instance().treeViewOnLeft ? CBRS_LEFT : CBRS_RIGHT, IDD_TREEVIEW)) return -1; m_wndStatusBar.SetIndicators(StatusBarIndicators, static_cast<int>(std::size(StatusBarIndicators))); SetupStatusBarSizes(); m_wndToolBar.Init(this); @@ -2545,6 +2546,7 @@ { menu.AppendMenu(MF_STRING, ID_VIEW_TOOLBAR, m_InputHandler->GetMenuText(ID_VIEW_TOOLBAR)); menu.AppendMenu(MF_STRING, IDD_TREEVIEW, m_InputHandler->GetMenuText(IDD_TREEVIEW)); + menu.AppendMenu(MF_STRING | (TrackerSettings::Instance().treeViewOnLeft ? MF_CHECKED : 0), ID_TREEVIEW_ON_LEFT, _T("Tree View on &Left")); const FlagSet<MainToolBarItem> visibleItems = TrackerSettings::Instance().mainToolBarVisibleItems.Get(); @@ -2560,12 +2562,28 @@ } -void CMainFrame::OnToggleMainBarShowOctave() { m_wndToolBar.ToggleVisibility(MainToolBarItem::Octave); } -void CMainFrame::OnToggleMainBarShowTempo() { m_wndToolBar.ToggleVisibility(MainToolBarItem::Tempo); } -void CMainFrame::OnToggleMainBarShowSpeed() { m_wndToolBar.ToggleVisibility(MainToolBarItem::Speed); } -void CMainFrame::OnToggleMainBarShowRowsPerBeat() { m_wndToolBar.ToggleVisibility(MainToolBarItem::RowsPerBeat); } -void CMainFrame::OnToggleMainBarShowGlobalVolume() { m_wndToolBar.ToggleVisibility(MainToolBarItem::GlobalVolume); } -void CMainFrame::OnToggleMainBarShowVUMeter() { m_wndToolBar.ToggleVisibility(MainToolBarItem::VUMeter); } +void CMainFrame::OnToggleMainBarShowOctave() { OnToggleMainBarItem(MainToolBarItem::Octave, ID_MAINBAR_SHOW_OCTAVE); } +void CMainFrame::OnToggleMainBarShowTempo() { OnToggleMainBarItem(MainToolBarItem::Tempo, ID_MAINBAR_SHOW_TEMPO); } +void CMainFrame::OnToggleMainBarShowSpeed() { OnToggleMainBarItem(MainToolBarItem::Speed, ID_MAINBAR_SHOW_SPEED); } +void CMainFrame::OnToggleMainBarShowRowsPerBeat() { OnToggleMainBarItem(MainToolBarItem::RowsPerBeat, ID_MAINBAR_SHOW_ROWSPERBEAT); } +void CMainFrame::OnToggleMainBarShowGlobalVolume() { OnToggleMainBarItem(MainToolBarItem::GlobalVolume, ID_MAINBAR_SHOW_GLOBALVOLUME); } +void CMainFrame::OnToggleMainBarShowVUMeter() { OnToggleMainBarItem(MainToolBarItem::VUMeter, ID_MAINBAR_SHOW_VUMETER); } + +void CMainFrame::OnToggleMainBarItem(MainToolBarItem item, UINT menuID) +{ + const bool visible = m_wndToolBar.ToggleVisibility(item); + GetMenu()->CheckMenuItem(menuID, MF_BYCOMMAND | (visible ? MF_CHECKED : 0)); +} + + +void CMainFrame::OnToggleTreeViewOnLeft() +{ + const bool left = !TrackerSettings::Instance().treeViewOnLeft; + TrackerSettings::Instance().treeViewOnLeft = left; + m_wndTree.SetBarOnLeft(left); + RecalcLayout(); + GetMenu()->CheckMenuItem(ID_TREEVIEW_ON_LEFT, MF_BYCOMMAND | (left ? MF_CHECKED : 0)); +} LRESULT CMainFrame::OnCustomKeyMsg(WPARAM wParam, LPARAM lParam) @@ -2635,14 +2653,11 @@ case kcSpeedIncrease: case kcSpeedDecrease: case kcViewToggle: - { - CModDoc *modDoc = GetActiveDoc(); - if(modDoc) - return GetActiveDoc()->OnCustomKeyMsg(wParam, lParam); - else if(wParam == kcPlayPauseSong || wParam == kcPlayStopSong || wParam == kcStopSong) - StopPreview(); - break; - } + if(CModDoc *modDoc = GetActiveDoc()) + return modDoc->OnCustomKeyMsg(wParam, lParam); + else if(wParam == kcPlayPauseSong || wParam == kcPlayStopSong || wParam == kcStopSong) + StopPreview(); + break; case kcSwitchToInstrLibrary: if(!m_wndTree.IsVisible()) Modified: trunk/OpenMPT/mptrack/Mainbar.cpp ============================================================================== --- trunk/OpenMPT/mptrack/Mainbar.cpp Wed Nov 13 21:26:44 2024 (r22180) +++ trunk/OpenMPT/mptrack/Mainbar.cpp Wed Nov 13 21:31:04 2024 (r22181) @@ -448,12 +448,13 @@ } -void CMainToolBar::ToggleVisibility(MainToolBarItem item) +bool CMainToolBar::ToggleVisibility(MainToolBarItem item) { FlagSet<MainToolBarItem> visibleItems = TrackerSettings::Instance().mainToolBarVisibleItems.Get(); visibleItems.flip(item); TrackerSettings::Instance().mainToolBarVisibleItems = visibleItems.value().as_enum(); RefreshToolbar(); + return visibleItems[item]; } @@ -1091,8 +1092,10 @@ CSize sz; m_sizeDefault.cx = width; m_sizeDefault.cy = 32767; - sz.cx = width + TREEVIEW_PADDING; - if(sz.cx < 4) sz.cx = 4; + const int padding = TREEVIEW_PADDING; + sz.cx = width + padding; + if(sz.cx < padding + 1) + sz.cx = padding + 1; sz.cy = 32767; return sz; } @@ -1101,6 +1104,7 @@ void CModTreeBar::DoMouseMove(CPoint pt) { CRect rect; + GetClientRect(&rect); if((m_dwStatus & (MTB_CAPTURE|MTB_DRAGGING)) && (::GetCapture() != m_hWnd)) { @@ -1112,27 +1116,32 @@ { if(m_pModTree) { - m_pModTree->GetWindowRect(&rect); - pt.y += rect.Height(); + CRect windowRect; + m_pModTree->GetWindowRect(&windowRect); + pt.y += windowRect.Height(); } - GetClientRect(&rect); pt.y -= ptDragging.y; - if(pt.y < 0) pt.y = 0; - if(pt.y > rect.Height()) pt.y = rect.Height(); - if((!(m_dwStatus & MTB_TRACKER)) || (pt.y != (int)m_nTrackPos)) + pt.y = std::clamp(static_cast<int>(pt.y), 0, rect.Height()); + if((!(m_dwStatus & MTB_TRACKER)) || (pt.y != static_cast<int>(m_nTrackPos))) { - if(m_dwStatus & MTB_TRACKER) OnInvertTracker(m_nTrackPos); + if(m_dwStatus & MTB_TRACKER) + OnInvertTracker(m_nTrackPos); m_nTrackPos = pt.y; OnInvertTracker(m_nTrackPos); m_dwStatus |= MTB_TRACKER; } } else { - pt.x -= ptDragging.x - m_cxOriginal + TREEVIEW_PADDING; - if(pt.x < 0) pt.x = 0; - if((!(m_dwStatus & MTB_TRACKER)) || (pt.x != (int)m_nTrackPos)) + pt.x -= ptDragging.x; + if(BarOnLeft()) + pt.x += (m_cxOriginal - TREEVIEW_PADDING); + else + pt.x = m_cxOriginal - pt.x; + pt.x = std::max(pt.x, LONG(0)); + if((!(m_dwStatus & MTB_TRACKER)) || (pt.x != static_cast<int>(m_nTrackPos))) { - if(m_dwStatus & MTB_TRACKER) OnInvertTracker(m_nTrackPos); + if(m_dwStatus & MTB_TRACKER) + OnInvertTracker(m_nTrackPos); m_nTrackPos = pt.x; OnInvertTracker(m_nTrackPos); m_dwStatus |= MTB_TRACKER; @@ -1142,9 +1151,17 @@ { UINT nCursor = 0; - GetClientRect(&rect); - rect.left = rect.right - 2; - rect.right = rect.left + 5; + const int padding = TREEVIEW_PADDING; + const int extraPadding = HighDPISupport::ScalePixels(2, m_hWnd); + if(BarOnLeft()) + { + rect.left = rect.right - extraPadding; + rect.right = rect.left + padding + extraPadding; + } else + { + rect.left -= extraPadding; + rect.right = rect.left + padding + extraPadding; + } if(rect.PtInRect(pt)) { nCursor = AFX_IDC_HSPLITBAR; @@ -1154,8 +1171,8 @@ m_pModTree->GetWindowRect(&rect); rect.right = rect.Width(); rect.left = 0; - rect.top = rect.Height()-1; - rect.bottom = rect.top + 5; + rect.top = rect.Height() - extraPadding; + rect.bottom = rect.top + padding + extraPadding; if(rect.PtInRect(pt)) { nCursor = AFX_IDC_VSPLITBAR; @@ -1164,19 +1181,21 @@ if(nCursor) { UINT nDir = (nCursor == AFX_IDC_VSPLITBAR) ? MTB_VERTICAL : 0; - BOOL bLoad = FALSE; + bool load = false; if(!(m_dwStatus & MTB_CAPTURE)) { m_dwStatus |= MTB_CAPTURE; SetCapture(); - bLoad = TRUE; + load = true; } else { - if(nDir != (m_dwStatus & MTB_VERTICAL)) bLoad = TRUE; + if(nDir != (m_dwStatus & MTB_VERTICAL)) + load = true; } m_dwStatus &= ~MTB_VERTICAL; m_dwStatus |= nDir; - if(bLoad) SetCursor(theApp.LoadCursor(nCursor)); + if(load) + SetCursor(theApp.LoadCursor(nCursor)); } else { if(m_dwStatus & MTB_CAPTURE) @@ -1222,10 +1241,9 @@ { GetClientRect(&rect); int cyavail = rect.Height() - padding; - if(cyavail < 4) cyavail = 4; - int ratio = (m_nTrackPos << 8) / cyavail; - if(ratio < 0) ratio = 0; - if(ratio > 256) ratio = 256; + if(cyavail < padding + 1) + cyavail = padding + 1; + int ratio = std::clamp(static_cast<int>(m_nTrackPos * 256) / cyavail, 0, 256); m_nTreeSplitRatio = ratio; TrackerSettings::Instance().glTreeSplitRatio = ratio; RecalcLayout(); @@ -1233,7 +1251,8 @@ { GetWindowRect(&rect); m_nTrackPos += padding; - if(m_nTrackPos < 4) m_nTrackPos = 4; + if(m_nTrackPos < static_cast<UINT>(padding + 1)) + m_nTrackPos = padding + 1; CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); if((m_nTrackPos != (UINT)rect.Width()) && (pMainFrm)) { @@ -1272,14 +1291,18 @@ CRect rect; GetClientRect(&rect); + const int padding = TREEVIEW_PADDING + 1; if(m_dwStatus & MTB_VERTICAL) { rect.top = x; - rect.bottom = rect.top + 4; + rect.bottom = rect.top + padding; } else { - rect.left = x; - rect.right = rect.left + 4; + if(BarOnLeft()) + rect.left = x; + else + rect.left = rect.right - x; + rect.right = rect.left + padding; } ClientToScreen(&rect); pMainFrm->ScreenToClient(&rect); @@ -1288,11 +1311,11 @@ CDC* pDC = pMainFrm->GetDC(); // invert the brush pattern (looks just like frame window sizing) CBrush* pBrush = CDC::GetHalftoneBrush(); - HBRUSH hOldBrush = NULL; - if(pBrush != NULL) + HBRUSH hOldBrush = nullptr; + if(pBrush != nullptr) hOldBrush = (HBRUSH)SelectObject(pDC->m_hDC, pBrush->m_hObject); pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(), PATINVERT); - if(hOldBrush != NULL) + if(hOldBrush != nullptr) SelectObject(pDC->m_hDC, hOldBrush); ReleaseDC(pDC); } @@ -1323,6 +1346,13 @@ } +void CModTreeBar::SetBarOnLeft(const bool left) +{ + SetBarStyle(left ? CBRS_LEFT : CBRS_RIGHT); + SetWindowPos(nullptr, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOSIZE | SWP_FRAMECHANGED | SWP_DRAWFRAME); +} + + //////////////////////////////////////////////////////////////////////////////////////////////////// // CModTreeBar message handlers @@ -1331,8 +1361,11 @@ CDialogBar::OnNcCalcSize(bCalcValidRects, lpncsp); if(lpncsp) { - lpncsp->rgrc[0].right -= TREEVIEW_PADDING; - if(lpncsp->rgrc[0].right < lpncsp->rgrc[0].left) lpncsp->rgrc[0].right = lpncsp->rgrc[0].left; + if(BarOnLeft()) + lpncsp->rgrc[0].right -= TREEVIEW_PADDING; + else + lpncsp->rgrc[0].left += TREEVIEW_PADDING; + lpncsp->rgrc[0].right = std::max(lpncsp->rgrc[0].left, lpncsp->rgrc[0].right); } } @@ -1342,9 +1375,13 @@ CRect rect; GetWindowRect(&rect); - rect.DeflateRect(1,1); - rect.right -= TREEVIEW_PADDING; - if(!rect.PtInRect(point)) return HTBORDER; + rect.DeflateRect(1, 1); + if(BarOnLeft()) + rect.right -= TREEVIEW_PADDING; + else + rect.left += TREEVIEW_PADDING; + if(!rect.PtInRect(point)) + return HTBORDER; return CDialogBar::OnNcHitTest(point); } @@ -1358,8 +1395,12 @@ // Assumes there is no other non-client items rect.right -= rect.left; rect.bottom -= rect.top; + rect.left = 0; rect.top = 0; - rect.left = rect.right - TREEVIEW_PADDING; + if(BarOnLeft()) + rect.left = rect.right - TREEVIEW_PADDING; + else + rect.right = rect.left + TREEVIEW_PADDING; if((rect.left < rect.right) && (rect.top < rect.bottom)) { CDC *pDC = GetWindowDC(); Modified: trunk/OpenMPT/mptrack/Mainbar.h ============================================================================== --- trunk/OpenMPT/mptrack/Mainbar.h Wed Nov 13 21:26:44 2024 (r22180) +++ trunk/OpenMPT/mptrack/Mainbar.h Wed Nov 13 21:31:04 2024 (r22181) @@ -124,7 +124,7 @@ bool ShowUpdateInfo(const CString &newVersion, const CString &infoURL, bool showHighLight); void RemoveUpdateInfo(); - void ToggleVisibility(MainToolBarItem item); + bool ToggleVisibility(MainToolBarItem item); protected: void RefreshToolbar(); @@ -196,6 +196,9 @@ void StartTreeFilter(CModTree &source); + void SetBarOnLeft(const bool left); + bool BarOnLeft() { return (GetBarStyle() & CBRS_ALIGN_LEFT); } + protected: //{{AFX_VIRTUAL(CModTreeBar) CSize CalcFixedLayout(BOOL bStretch, BOOL bHorz) override; Modified: trunk/OpenMPT/mptrack/Mainfrm.h ============================================================================== --- trunk/OpenMPT/mptrack/Mainfrm.h Wed Nov 13 21:26:44 2024 (r22180) +++ trunk/OpenMPT/mptrack/Mainfrm.h Wed Nov 13 21:31:04 2024 (r22181) @@ -35,6 +35,7 @@ struct UpdateCheckResult; struct UpdateHint; struct MODPLUGDIB; +enum class MainToolBarItem : uint8; enum SoundDeviceStopMode : int; namespace SoundDevice { class Base; @@ -253,7 +254,7 @@ void SetMidiRecordWnd(HWND hwnd) { m_hWndMidi = hwnd; } HWND GetMidiRecordWnd() const { return m_hWndMidi; } - static int ApplyVolumeRelatedSettings(const DWORD &dwParam1, const BYTE midivolume); + static int ApplyVolumeRelatedSettings(const DWORD &dwParam1, const uint8 midivolume); // static functions public: @@ -453,6 +454,8 @@ afx_msg void OnToggleMainBarShowRowsPerBeat(); afx_msg void OnToggleMainBarShowGlobalVolume(); afx_msg void OnToggleMainBarShowVUMeter(); + afx_msg void OnToggleMainBarItem(MainToolBarItem item, UINT menuID); + afx_msg void OnToggleTreeViewOnLeft(); afx_msg void OnCreateMixerDump(); afx_msg void OnVerifyMixerDump(); Modified: trunk/OpenMPT/mptrack/TrackerSettings.cpp ============================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.cpp Wed Nov 13 21:26:44 2024 (r22180) +++ trunk/OpenMPT/mptrack/TrackerSettings.cpp Wed Nov 13 21:31:04 2024 (r22181) @@ -209,6 +209,7 @@ , defaultRainbowChannelColors(conf, UL_("Display"), UL_("DefaultChannelColors"), DefaultChannelColors::Random) , commentsFont(conf, UL_("Display"), UL_("Comments Font"), FontSetting(UL_("Courier New"), 120)) , mainToolBarVisibleItems(conf, UL_("Display"), UL_("MainToolBarVisibleItems"), MainToolBarItem::Default) + , treeViewOnLeft(conf, UL_("Display"), UL_("TreeViewOnLeft"), true) // Misc , defaultModType(conf, UL_("Misc"), UL_("DefaultModType"), MOD_TYPE_IT) , defaultNewFileAction(conf, UL_("Misc"), UL_("DefaultNewFileAction"), nfDefaultFormat) Modified: trunk/OpenMPT/mptrack/TrackerSettings.h ============================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.h Wed Nov 13 21:26:44 2024 (r22180) +++ trunk/OpenMPT/mptrack/TrackerSettings.h Wed Nov 13 21:31:04 2024 (r22181) @@ -716,6 +716,7 @@ Setting<FontSetting> commentsFont; Setting<MainToolBarItem> mainToolBarVisibleItems; + Setting<bool> treeViewOnLeft; // Misc Modified: trunk/OpenMPT/mptrack/resource.h ============================================================================== --- trunk/OpenMPT/mptrack/resource.h Wed Nov 13 21:26:44 2024 (r22180) +++ trunk/OpenMPT/mptrack/resource.h Wed Nov 13 21:31:04 2024 (r22181) @@ -1178,6 +1178,7 @@ #define ID_MAINBAR_SHOW_ROWSPERBEAT 36040 #define ID_MAINBAR_SHOW_GLOBALVOLUME 36041 #define ID_MAINBAR_SHOW_VUMETER 36042 +#define ID_TREEVIEW_ON_LEFT 36043 #define ID_SELECTINST 36100 // From here: Command range [ID_SELECTINST, ID_SELECTINST + MAX_INSTRUMENTS] #define ID_PLUG_RECORDAUTOMATION 37003 |
From: <sv...@op...> - 2024-11-13 21:21:12
|
Author: sagamusix Date: Wed Nov 13 21:03:12 2024 New Revision: 22177 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22177 Log: [Fix] Don't limit update tooltip horizontal position to right border of main window if the toolbar is floating. Modified: trunk/OpenMPT/mptrack/Mainbar.cpp Modified: trunk/OpenMPT/mptrack/Mainbar.cpp ============================================================================== --- trunk/OpenMPT/mptrack/Mainbar.cpp Wed Nov 13 18:14:52 2024 (r22176) +++ trunk/OpenMPT/mptrack/Mainbar.cpp Wed Nov 13 21:03:12 2024 (r22177) @@ -491,8 +491,11 @@ GetToolBarCtrl().GetRect(ID_UPDATE_AVAILABLE, &rect); CPoint pt = rect.CenterPoint(); ClientToScreen(&pt); - CMainFrame::GetMainFrame()->GetWindowRect(rect); - LimitMax(pt.x, rect.right); + if(!IsFloating()) + { + CMainFrame::GetMainFrame()->GetWindowRect(rect); + LimitMax(pt.x, rect.right); + } return m_tooltip.ShowUpdate(*this, newVersion, infoURL, rect, pt, ID_UPDATE_AVAILABLE); } |
From: <sv...@op...> - 2024-11-13 21:06:12
|
Author: sagamusix Date: Wed Nov 13 21:26:44 2024 New Revision: 22180 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22180 Log: [Imp] Main toolbar: Allow toolbar to break after every readout in vertical mode, to allow for more sensical vertical configurations. Don't leave an empty space in the toolbar if all the readouts are disabled. Modified: trunk/OpenMPT/mptrack/Mainbar.cpp trunk/OpenMPT/mptrack/Mainbar.h Modified: trunk/OpenMPT/mptrack/Mainbar.cpp ============================================================================== --- trunk/OpenMPT/mptrack/Mainbar.cpp Wed Nov 13 21:20:48 2024 (r22179) +++ trunk/OpenMPT/mptrack/Mainbar.cpp Wed Nov 13 21:26:44 2024 (r22180) @@ -118,37 +118,29 @@ rect.top = n; } wnd.SetWindowPos(nullptr, rect.left, rect.top, 0, 0, SWP_NOZORDER | SWP_NOACTIVATE | SWP_NOSIZE); - wnd.ShowWindow(SW_SHOW); } - } else - { - SetButtonInfo(index, ID_SEPARATOR, TBBS_SEPARATOR, 1); - if(wnd.m_hWnd) - wnd.ShowWindow(SW_HIDE); } + if(wnd.m_hWnd) + wnd.ShowWindow(show ? SW_SHOW : SW_HIDE); + SetButtonVisibility(index, show); } -void CToolBarEx::ChangeCtrlStyle(LONG lStyle, BOOL bSetStyle) +void CToolBarEx::EnableFlatButtons(bool flat) { - if(m_hWnd) - { - LONG lStyleOld = GetWindowLong(m_hWnd, GWL_STYLE); - if(bSetStyle) - lStyleOld |= lStyle; - else - lStyleOld &= ~lStyle; - SetWindowLong(m_hWnd, GWL_STYLE, lStyleOld); - SetWindowPos(NULL, 0, 0, 0, 0, SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE); - Invalidate(); - } + ModifyStyle(flat ? 0 : TBSTYLE_FLAT, flat ? TBSTYLE_FLAT : 0); + Invalidate(); } -void CToolBarEx::EnableFlatButtons(BOOL bFlat) +void CToolBarEx::SetButtonVisibility(int index, bool visible) { - m_bFlatButtons = bFlat ? true : false; - ChangeCtrlStyle(TBSTYLE_FLAT, bFlat); + auto style = GetButtonStyle(index); + if(visible) + style &= ~TBBS_HIDDEN; + else + style |= TBBS_HIDDEN; + SetButtonStyle(index, style); } @@ -160,18 +152,23 @@ PLAYCMD_INDEX = 10, // Play / Pause EDITOCTAVE_INDEX = 13, // Base Octave SPINOCTAVE_INDEX = EDITOCTAVE_INDEX + 1, // Spin Base Octave - TEMPOTEXT_INDEX = SPINOCTAVE_INDEX + 1, // Static "Tempo:" + DIVOCTAVE_INDEX = SPINOCTAVE_INDEX + 1, // Divider for vertical mode + TEMPOTEXT_INDEX = DIVOCTAVE_INDEX + 1, // Static "Tempo:" EDITTEMPO_INDEX = TEMPOTEXT_INDEX + 1, // Edit Tempo SPINTEMPO_INDEX = EDITTEMPO_INDEX + 1, // Spin Tempo - SPEEDTEXT_INDEX = SPINTEMPO_INDEX + 1, // Static "Speed:" + DIVTEMPO_INDEX = SPINTEMPO_INDEX + 1, // Divider for vertical mode + SPEEDTEXT_INDEX = DIVTEMPO_INDEX + 1, // Static "Speed:" EDITSPEED_INDEX = SPEEDTEXT_INDEX + 1, // Edit Speed SPINSPEED_INDEX = EDITSPEED_INDEX + 1, // Spin Speed - RPBTEXT_INDEX = SPINSPEED_INDEX + 1, // Static "Rows/Beat:" + DIVSPEED_INDEX = SPINSPEED_INDEX + 1, // Divider for vertical mode + RPBTEXT_INDEX = DIVSPEED_INDEX + 1, // Static "Rows/Beat:" EDITRPB_INDEX = RPBTEXT_INDEX + 1, // Edit Speed SPINRPB_INDEX = EDITRPB_INDEX + 1, // Spin Speed - GLOBALVOLTEXT_INDEX = SPINRPB_INDEX + 1, // Static "Rows/Beat:" + DIVRPB_INDEX = SPINRPB_INDEX + 1, // Divider for vertical mode + GLOBALVOLTEXT_INDEX = DIVRPB_INDEX + 1, // Static "Rows/Beat:" EDITGLOBALVOL_INDEX = GLOBALVOLTEXT_INDEX + 1, // Edit Speed SPINGLOBALVOL_INDEX = EDITGLOBALVOL_INDEX + 1, // Spin Speed + DIVGLOBALVOL_INDEX = SPINGLOBALVOL_INDEX + 1, // Divider at end VUMETER_INDEX = SPINGLOBALVOL_INDEX + 6, // VU Meters }; @@ -204,15 +201,19 @@ ID_SEPARATOR, ID_SEPARATOR, // Octave ID_SEPARATOR, + ID_SEPARATOR, // Divider for vertical mode ID_SEPARATOR, // Tempo ID_SEPARATOR, ID_SEPARATOR, + ID_SEPARATOR, // Divider for vertical mode ID_SEPARATOR, // Speed ID_SEPARATOR, ID_SEPARATOR, + ID_SEPARATOR, // Divider for vertical mode ID_SEPARATOR, // Rows Per Beat ID_SEPARATOR, ID_SEPARATOR, + ID_SEPARATOR, // Divider for vertical mode ID_SEPARATOR, // Global Volume ID_SEPARATOR, ID_SEPARATOR, @@ -330,7 +331,6 @@ CDC *dc = GetDC(); if(!m_font.m_hObject) HighDPISupport::CreateGUIFont(m_font, m_hWnd); - const auto hFont = reinterpret_cast<WPARAM>(m_font.m_hObject); const double scaling = HighDPISupport::GetDpiForWindow(m_hWnd) / 96.0; const int imgSize = HighDPISupport::ScalePixels(16, m_hWnd), btnSizeX = HighDPISupport::ScalePixels(23, m_hWnd), btnSizeY = HighDPISupport::ScalePixels(22, m_hWnd); m_ImageList.Create(IDB_MAINBAR, 16, 16, IMGLIST_NUMIMAGES, 1, dc, scaling, false); @@ -359,19 +359,19 @@ const int textPaddingX = HighDPISupport::ScalePixels(10, m_hWnd), textPaddingY = HighDPISupport::ScalePixels(4, m_hWnd), textMinHeight = HighDPISupport::ScalePixels(20, m_hWnd); for(auto &info : TextWnds) { + info.wnd.SetFont(&m_font, FALSE); const auto size = dc->GetTextExtent(info.measureText); const int width = size.cx + textPaddingX; const int height = std::max(static_cast<int>(size.cy) + textPaddingY, textMinHeight); // For some reason, DeferWindowPos doesn't work here - info.wnd.SendMessage(WM_SETFONT, hFont, FALSE); - info.wnd.SetWindowPos(nullptr, 0, 0, width, height, SWP_NOMOVE | SWP_NOZORDER | SWP_NOREPOSITION | SWP_NOACTIVATE); + info.wnd.SetWindowPos(nullptr, 0, 0, width, height, SWP_NOMOVE | SWP_NOZORDER | SWP_NOREPOSITION | SWP_NOACTIVATE | SWP_NOCOPYBITS); } dc->SelectObject(oldFont); ReleaseDC(dc); GetToolBarCtrl().SetImageList(&m_ImageList); GetToolBarCtrl().SetDisabledImageList(&m_ImageListDisabled); - SendMessage(WM_SETFONT, hFont, TRUE); + SetFont(&m_font); SetSizes(CSize(btnSizeX, btnSizeY), CSize(imgSize, imgSize)); @@ -386,9 +386,6 @@ m_SpinSpeed.SetWindowPos(nullptr, 0, 0, spinnerWidth, spinnerHeight, SWP_NOMOVE | SWP_NOZORDER | SWP_NOREPOSITION | SWP_NOACTIVATE); m_SpinRowsPerBeat.SetWindowPos(nullptr, 0, 0, spinnerWidth, spinnerHeight, SWP_NOMOVE | SWP_NOZORDER | SWP_NOREPOSITION | SWP_NOACTIVATE); m_SpinGlobalVolume.SetWindowPos(nullptr, 0, 0, spinnerWidth, spinnerHeight, SWP_NOMOVE | SWP_NOZORDER | SWP_NOREPOSITION | SWP_NOACTIVATE); - - // VU Meter - m_VuMeter.SetWindowPos(nullptr, 0, 0, VUMETER_WIDTH, VUMETER_HEIGHT, SWP_NOMOVE | SWP_NOZORDER); } @@ -420,22 +417,27 @@ UpdateControl(visibleItems[MainToolBarItem::Octave], m_EditOctave, EDITOCTAVE_INDEX, IDC_EDIT_BASEOCTAVE); UpdateControl(visibleItems[MainToolBarItem::Octave], m_SpinOctave, SPINOCTAVE_INDEX, IDC_SPIN_BASEOCTAVE); + SetButtonVisibility(DIVOCTAVE_INDEX, m_bVertical && visibleItems[MainToolBarItem::Octave]); UpdateControl(visibleItems[MainToolBarItem::Tempo], m_StaticTempo, TEMPOTEXT_INDEX, IDC_TEXT_CURRENTTEMPO); UpdateControl(visibleItems[MainToolBarItem::Tempo], m_EditTempo, EDITTEMPO_INDEX, IDC_EDIT_CURRENTTEMPO); UpdateControl(visibleItems[MainToolBarItem::Tempo], m_SpinTempo, SPINTEMPO_INDEX, IDC_SPIN_CURRENTTEMPO); + SetButtonVisibility(DIVTEMPO_INDEX, m_bVertical && visibleItems[MainToolBarItem::Tempo]); UpdateControl(visibleItems[MainToolBarItem::Speed], m_StaticSpeed, SPEEDTEXT_INDEX, IDC_TEXT_CURRENTSPEED); UpdateControl(visibleItems[MainToolBarItem::Speed], m_EditSpeed, EDITSPEED_INDEX, IDC_EDIT_CURRENTSPEED); UpdateControl(visibleItems[MainToolBarItem::Speed], m_SpinSpeed, SPINSPEED_INDEX, IDC_SPIN_CURRENTSPEED); + SetButtonVisibility(DIVSPEED_INDEX, m_bVertical && visibleItems[MainToolBarItem::Speed]); UpdateControl(visibleItems[MainToolBarItem::RowsPerBeat], m_StaticRowsPerBeat, RPBTEXT_INDEX, IDC_TEXT_RPB); UpdateControl(visibleItems[MainToolBarItem::RowsPerBeat], m_EditRowsPerBeat, EDITRPB_INDEX, IDC_EDIT_RPB); UpdateControl(visibleItems[MainToolBarItem::RowsPerBeat], m_SpinRowsPerBeat, SPINRPB_INDEX, IDC_SPIN_RPB); + SetButtonVisibility(DIVRPB_INDEX, m_bVertical && visibleItems[MainToolBarItem::RowsPerBeat]); UpdateControl(visibleItems[MainToolBarItem::GlobalVolume], m_StaticGlobalVolume, GLOBALVOLTEXT_INDEX, IDC_TEXT_GLOBALVOL); UpdateControl(visibleItems[MainToolBarItem::GlobalVolume], m_EditGlobalVolume, EDITGLOBALVOL_INDEX, IDC_EDIT_GLOBALVOL); UpdateControl(visibleItems[MainToolBarItem::GlobalVolume], m_SpinGlobalVolume, SPINGLOBALVOL_INDEX, IDC_SPIN_GLOBALVOL); + SetButtonVisibility(DIVGLOBALVOL_INDEX, visibleItems.test_any_except(MainToolBarItem::VUMeter)); m_VuMeter.SetOrientation(!m_bVertical); if(m_bVertical) Modified: trunk/OpenMPT/mptrack/Mainbar.h ============================================================================== --- trunk/OpenMPT/mptrack/Mainbar.h Wed Nov 13 21:20:48 2024 (r22179) +++ trunk/OpenMPT/mptrack/Mainbar.h Wed Nov 13 21:26:44 2024 (r22180) @@ -59,7 +59,7 @@ class CToolBarEx: public CToolBar { protected: - bool m_bVertical = false, m_bFlatButtons = false; + bool m_bVertical = false; public: CToolBarEx() {} @@ -67,8 +67,8 @@ public: void UpdateControl(bool show, CWnd &wnd, int index, int id, int height = 0); - void ChangeCtrlStyle(LONG lStyle, BOOL bSetStyle); - void EnableFlatButtons(BOOL bFlat); + void EnableFlatButtons(bool flat); + void SetButtonVisibility(int index, bool visible); public: //{{AFX_VIRTUAL(CToolBarEx) |
From: <sv...@op...> - 2024-11-13 17:15:05
|
Author: manx Date: Wed Nov 13 18:14:52 2024 New Revision: 22176 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22176 Log: [Fix] build: Makefile: DJGPP: GCC -m3dnowa implies 3dnowext and mmxext. K6-2+ and K6-3+ only support 3dnowext though. Modified: trunk/OpenMPT/build/make/config-djgpp.mk Modified: trunk/OpenMPT/build/make/config-djgpp.mk ============================================================================== --- trunk/OpenMPT/build/make/config-djgpp.mk Wed Nov 13 13:45:33 2024 (r22175) +++ trunk/OpenMPT/build/make/config-djgpp.mk Wed Nov 13 18:14:52 2024 (r22176) @@ -223,8 +223,7 @@ generic/586 := $(XXX) -march=i586 $(FPU_387) -mtune=pentium $(OPT_UARCH_SCAL) # Intel Pentium, AMD K5 generic/586-mmx := $(XX_) -march=pentium-mmx $(FPU_MMX) -mtune=pentium-mmx $(OPT_UARCH_SCAL_64) # Intel Pentium-MMX, AMD K6, IDT WinChip-C6, Rise mP6 -generic/586-3dnow := $(XX_) -march=k6-2 $(FPU_3DNOW) -mtune=k6-2 $(OPT_UARCH_SCAL_64) # AMD K6-2..K6-3, IDT WinChip-2, VIA-C3-Samuel..VIA C3-Ezra -generic/586-3dnowa := $(___) -march=k6-3 $(FPU_3DNOWA) -mtune=k6-3 $(OPT_UARCH_SCAL_64) # AMD K6-2+..K6-3+ +generic/586-3dnow := $(XX_) -march=k6-2 $(FPU_3DNOW) -mtune=k6-2 $(OPT_UARCH_SCAL_64) # AMD K6-2..K6-3+, IDT WinChip-2, VIA-C3-Samuel..VIA C3-Ezra generic/686 := $(___) -march=pentiumpro $(FPU_387) -mtune=pentiumpro $(OPT_UARCH_OOOE) # Intel Pentium-Pro generic/686-mmx := $(XXX) -march=i686 $(FPU_MMX) -mtune=pentium2 $(OPT_UARCH_OOOE_64) # Intel Pentium-2.., AMD Bulldozer.., VIA C3-Nehemiah.., Cyrix 6x86MX.., Transmeta Crusoe.., NSC Geode-GX1.. @@ -284,8 +283,8 @@ amd/k6 := $(XX_) -march=k6 $(FPU_MMX) -mtune=k6 $(OPT_UARCH_OOOE_64) --param l1-cache-size=32 --param l2-cache-size=$(CACHE_S7) amd/k6-2 := $(XXX) -march=k6-2 $(FPU_3DNOW) -mtune=k6-2 $(OPT_UARCH_OOOE_64) --param l1-cache-size=32 --param l2-cache-size=$(CACHE_SS7) amd/k6-3 := $(___) -march=k6-3 $(FPU_3DNOW) -mtune=k6-3 $(OPT_UARCH_OOOE_64) --param l1-cache-size=32 --param l2-cache-size=256 -amd/k6-2+ := $(___) -march=k6-3 $(FPU_3DNOWA) -mtune=k6-3 $(OPT_UARCH_OOOE_64) --param l1-cache-size=32 --param l2-cache-size=128 -amd/k6-3+ := $(___) -march=k6-3 $(FPU_3DNOWA) -mtune=k6-3 $(OPT_UARCH_OOOE_64) --param l1-cache-size=32 --param l2-cache-size=256 +amd/k6-2+ := $(___) -march=k6-3 $(FPU_3DNOW) -mtune=k6-3 $(OPT_UARCH_OOOE_64) --param l1-cache-size=32 --param l2-cache-size=128 +amd/k6-3+ := $(___) -march=k6-3 $(FPU_3DNOW) -mtune=k6-3 $(OPT_UARCH_OOOE_64) --param l1-cache-size=32 --param l2-cache-size=256 amd/athlon := $(XX_) -march=athlon $(FPU_3DNOWA) -mtune=athlon $(OPT_UARCH_OOOE_64) --param l1-cache-size=64 --param l2-cache-size=$(CACHE_ATHLON) amd/athlon-xp := $(XXX) -march=athlon-xp $(FPU_3DASSE) -mtune=athlon-xp $(OPT_UARCH_OOOE_128) --param l1-cache-size=64 --param l2-cache-size=$(CACHE_ATHLONXP) amd/athlon64 := $(X__) -march=k8 $(FPU_SSE2) -mtune=k8 $(OPT_UARCH_OOOE_128) --param l1-cache-size=64 --param l2-cache-size=$(CACHE_ATHLON64) |
From: <sv...@op...> - 2024-11-13 12:45:52
|
Author: manx Date: Wed Nov 13 13:45:33 2024 New Revision: 22175 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22175 Log: Merged revision(s) 22173 from trunk/OpenMPT: [Ref] mpt/base/detect_compiler.hpp: Detect VS2022 17.12. ........ Modified: branches/OpenMPT-1.30/ (props changed) branches/OpenMPT-1.30/src/mpt/base/detect_compiler.hpp Modified: branches/OpenMPT-1.30/src/mpt/base/detect_compiler.hpp ============================================================================== --- branches/OpenMPT-1.30/src/mpt/base/detect_compiler.hpp Wed Nov 13 13:45:04 2024 (r22174) +++ branches/OpenMPT-1.30/src/mpt/base/detect_compiler.hpp Wed Nov 13 13:45:33 2024 (r22175) @@ -50,7 +50,9 @@ #elif defined(_MSC_VER) #define MPT_COMPILER_MSVC 1 -#if (_MSC_VER >= 1941) +#if (_MSC_VER >= 1942) +#define MPT_COMPILER_MSVC_VERSION MPT_COMPILER_MAKE_VERSION2(2022, 12) +#elif (_MSC_VER >= 1941) #define MPT_COMPILER_MSVC_VERSION MPT_COMPILER_MAKE_VERSION2(2022, 11) #elif (_MSC_VER >= 1940) #define MPT_COMPILER_MSVC_VERSION MPT_COMPILER_MAKE_VERSION2(2022, 10) |
From: <sv...@op...> - 2024-11-13 12:45:15
|
Author: manx Date: Wed Nov 13 13:45:04 2024 New Revision: 22174 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22174 Log: Merged revision(s) 22173 from trunk/OpenMPT: [Ref] mpt/base/detect_compiler.hpp: Detect VS2022 17.12. ........ Modified: branches/OpenMPT-1.31/ (props changed) branches/OpenMPT-1.31/src/mpt/base/detect_compiler.hpp Modified: branches/OpenMPT-1.31/src/mpt/base/detect_compiler.hpp ============================================================================== --- branches/OpenMPT-1.31/src/mpt/base/detect_compiler.hpp Wed Nov 13 13:44:21 2024 (r22173) +++ branches/OpenMPT-1.31/src/mpt/base/detect_compiler.hpp Wed Nov 13 13:45:04 2024 (r22174) @@ -50,7 +50,9 @@ #elif defined(_MSC_VER) #define MPT_COMPILER_MSVC 1 -#if (_MSC_VER >= 1941) +#if (_MSC_VER >= 1942) +#define MPT_COMPILER_MSVC_VERSION MPT_COMPILER_MAKE_VERSION2(2022, 12) +#elif (_MSC_VER >= 1941) #define MPT_COMPILER_MSVC_VERSION MPT_COMPILER_MAKE_VERSION2(2022, 11) #elif (_MSC_VER >= 1940) #define MPT_COMPILER_MSVC_VERSION MPT_COMPILER_MAKE_VERSION2(2022, 10) |
From: <sv...@op...> - 2024-11-13 12:44:32
|
Author: manx Date: Wed Nov 13 13:44:21 2024 New Revision: 22173 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22173 Log: [Ref] mpt/base/detect_compiler.hpp: Detect VS2022 17.12. Modified: trunk/OpenMPT/src/mpt/base/detect_compiler.hpp Modified: trunk/OpenMPT/src/mpt/base/detect_compiler.hpp ============================================================================== --- trunk/OpenMPT/src/mpt/base/detect_compiler.hpp Tue Nov 12 23:43:54 2024 (r22172) +++ trunk/OpenMPT/src/mpt/base/detect_compiler.hpp Wed Nov 13 13:44:21 2024 (r22173) @@ -50,7 +50,9 @@ #elif defined(_MSC_VER) #define MPT_COMPILER_MSVC 1 -#if (_MSC_VER >= 1941) +#if (_MSC_VER >= 1942) +#define MPT_COMPILER_MSVC_VERSION MPT_COMPILER_MAKE_VERSION2(2022, 12) +#elif (_MSC_VER >= 1941) #define MPT_COMPILER_MSVC_VERSION MPT_COMPILER_MAKE_VERSION2(2022, 11) #elif (_MSC_VER >= 1940) #define MPT_COMPILER_MSVC_VERSION MPT_COMPILER_MAKE_VERSION2(2022, 10) |
From: <sv...@op...> - 2024-11-12 22:44:01
|
Author: sagamusix Date: Tue Nov 12 23:43:54 2024 New Revision: 22172 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22172 Log: [Mod] IT: Maybe IT 2.14 can actually save files without edit history. I am finding quite a few of them, but they have a valid edit timer... Modify the detection accordingly. Modified: trunk/OpenMPT/soundlib/Load_it.cpp Modified: trunk/OpenMPT/soundlib/Load_it.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp Tue Nov 12 23:33:45 2024 (r22171) +++ trunk/OpenMPT/soundlib/Load_it.cpp Tue Nov 12 23:43:54 2024 (r22172) @@ -1266,7 +1266,7 @@ } else if(fileHeader.cwtv == 0 && madeWithTracker.empty()) { madeWithTracker = UL_("Unknown"); - } else if(fileHeader.cwtv >= 0x0208 && fileHeader.cwtv <= 0x0214 && m_FileHistory.empty() && madeWithTracker.empty()) + } else if(fileHeader.cwtv >= 0x0208 && fileHeader.cwtv <= 0x0214 && !fileHeader.reserved && m_FileHistory.empty() && madeWithTracker.empty()) { // Any file made with IT starting from v2.07 onwards should have an edit history madeWithTracker = UL_("Unknown"); |
From: <sv...@op...> - 2024-11-12 22:33:53
|
Author: sagamusix Date: Tue Nov 12 23:33:45 2024 New Revision: 22171 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22171 Log: [Imp] IT: Don't show files claiming to be made with IT 2.08+ as IT-made if they have no edit history. Modified: trunk/OpenMPT/soundlib/Load_it.cpp Modified: trunk/OpenMPT/soundlib/Load_it.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp Tue Nov 12 23:20:09 2024 (r22170) +++ trunk/OpenMPT/soundlib/Load_it.cpp Tue Nov 12 23:33:45 2024 (r22171) @@ -1266,6 +1266,10 @@ } else if(fileHeader.cwtv == 0 && madeWithTracker.empty()) { madeWithTracker = UL_("Unknown"); + } else if(fileHeader.cwtv >= 0x0208 && fileHeader.cwtv <= 0x0214 && m_FileHistory.empty() && madeWithTracker.empty()) + { + // Any file made with IT starting from v2.07 onwards should have an edit history + madeWithTracker = UL_("Unknown"); } else if(fileHeader.cmwt < 0x0300 && madeWithTracker.empty()) { madeWithTracker = GetImpulseTrackerVersion(fileHeader.cwtv, fileHeader.cmwt); |
From: <sv...@op...> - 2024-11-12 22:20:22
|
Author: sagamusix Date: Tue Nov 12 23:20:09 2024 New Revision: 22170 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22170 Log: [Fix] IT: Ignore sample data in slots that don't have the "sample data present" flag set, if the file vaguely looks IT-made. There's a bug in IT that sometimes doesn't reset the sample length after deleting a sample (presumably). For most files this does not make an audible difference, because such sample slots are typically unused, or the sample offset pointer points at the end of the file anyway. However, a small handful of files references these deleted samples in pattern data, so a lot of unwanted noise can be heard. See https://www.un4seen.com/forum/?topic=20542.0 for reference. Modified: trunk/OpenMPT/soundlib/ITTools.cpp trunk/OpenMPT/soundlib/Load_it.cpp Modified: trunk/OpenMPT/soundlib/ITTools.cpp ============================================================================== --- trunk/OpenMPT/soundlib/ITTools.cpp Tue Nov 12 19:01:02 2024 (r22169) +++ trunk/OpenMPT/soundlib/ITTools.cpp Tue Nov 12 23:20:09 2024 (r22170) @@ -530,10 +530,9 @@ // Convert an ITSample to OpenMPT's internal sample representation. uint32 ITSample::ConvertToMPT(ModSample &mptSmp) const { - if(memcmp(id, "IMPS", 4)) - { - return 0; - } + // IT does not check for the IMPS magic, and some bad XM->IT converter out there doesn't write the magic bytes for empty sample slots. + //if(memcmp(id, "IMPS", 4)) + // return 0; mptSmp.Initialize(MOD_TYPE_IT); mptSmp.SetDefaultCuePoints(); // For old IT/MPTM files Modified: trunk/OpenMPT/soundlib/Load_it.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp Tue Nov 12 19:01:02 2024 (r22169) +++ trunk/OpenMPT/soundlib/Load_it.cpp Tue Nov 12 23:20:09 2024 (r22170) @@ -784,6 +784,19 @@ bool possibleXMconversion = false; + // There's a bug in IT somewhere that resets the "sample data present" flag in sample headers, but keeps the sample length + // of a previously deleted sample (presumably). + // As old ModPlug versions didn't set this flag under some circumstances (if a sample wasn't referenced by any instruments in instrument mode), + // and because there appear to be some external tools that forget to set this flag at all, we only respect the flag if the file + // vaguely looks like it was saved with IT. Some files that play garbage data if we don't do this: + // astral projection.it by Lord Jon Ray + // classic illusions.it by Blackstar + // deep in dance.it by Simply DJ + // There are many more such files but they don't reference the broken samples in their pattern data, or the sample data pointer + // points right to the end of the file, so in both cases no audible problem can be observed. + const bool muteBuggySamples = !interpretModPlugMade && fileHeader.cwtv >= 0x0100 && fileHeader.cwtv <= 0x0217 + && (fileHeader.cwtv < 0x0207 || fileHeader.reserved != 0); + // Reading Samples m_nSamples = std::min(static_cast<SAMPLEINDEX>(fileHeader.smpnum), static_cast<SAMPLEINDEX>(MAX_SAMPLES - 1)); bool lastSampleCompressed = false, anyADPCM = false; @@ -792,9 +805,10 @@ ITSample sampleHeader; if(smpPos[i] > 0 && file.Seek(smpPos[i]) && file.ReadStruct(sampleHeader)) { - // IT does not check for the IMPS magic, and some bad XM->IT converter out there doesn't write the magic bytes for empty sample slots. ModSample &sample = Samples[i + 1]; size_t sampleOffset = sampleHeader.ConvertToMPT(sample); + if(muteBuggySamples && !(sampleHeader.flags & ITSample::sampleDataPresent)) + sample.nLength = 0; m_szNames[i + 1] = mpt::String::ReadBuf(mpt::String::spacePadded, sampleHeader.name); |
From: <sv...@op...> - 2024-11-12 18:11:00
|
Author: sagamusix Date: Tue Nov 12 19:01:02 2024 New Revision: 22169 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22169 Log: Merged revision(s) 22168 from trunk/OpenMPT: [Fix] Keyboard config: Don't allow shortcut editor to become active by double-clicking when no valid shortcut is selected. ........ Modified: branches/OpenMPT-1.31/ (props changed) branches/OpenMPT-1.31/mptrack/KeyConfigDlg.cpp Modified: branches/OpenMPT-1.31/mptrack/KeyConfigDlg.cpp ============================================================================== --- branches/OpenMPT-1.31/mptrack/KeyConfigDlg.cpp Tue Nov 12 19:00:41 2024 (r22168) +++ branches/OpenMPT-1.31/mptrack/KeyConfigDlg.cpp Tue Nov 12 19:01:02 2024 (r22169) @@ -542,9 +542,9 @@ { m_cmbKeyChoice.SetWindowText(_T("")); m_eCustHotKey.SetWindowText(_T("")); - m_bKeyDown.SetCheck(0); - m_bKeyHold.SetCheck(0); - m_bKeyUp.SetCheck(0); + m_bKeyDown.SetCheck(BST_UNCHECKED); + m_bKeyHold.SetCheck(BST_UNCHECKED); + m_bKeyUp.SetCheck(BST_UNCHECKED); m_curCommand = kcNull; } @@ -587,9 +587,9 @@ m_curKeyChoice = choice; m_forceUpdate = true; m_eCustHotKey.SetKey(ModNone, 0); - m_bKeyDown.SetCheck(0); - m_bKeyHold.SetCheck(0); - m_bKeyUp.SetCheck(0); + m_bKeyDown.SetCheck(BST_UNCHECKED); + m_bKeyHold.SetCheck(BST_UNCHECKED); + m_bKeyUp.SetCheck(BST_UNCHECKED); return; } @@ -664,7 +664,7 @@ ClientToScreen(&point); CRect rect; m_eCustHotKey.GetWindowRect(rect); - if(m_eCustHotKey.IsBypassed() && rect.PtInRect(point)) + if(m_curCommand != kcNull && m_eCustHotKey.IsBypassed() && rect.PtInRect(point)) EnableKeyChoice(true); else CPropertyPage::OnLButtonDblClk(flags, point); |
From: <sv...@op...> - 2024-11-12 18:00:48
|
Author: sagamusix Date: Tue Nov 12 19:00:41 2024 New Revision: 22168 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22168 Log: [Fix] Keyboard config: Don't allow shortcut editor to become active by double-clicking when no valid shortcut is selected. Modified: trunk/OpenMPT/mptrack/KeyConfigDlg.cpp Modified: trunk/OpenMPT/mptrack/KeyConfigDlg.cpp ============================================================================== --- trunk/OpenMPT/mptrack/KeyConfigDlg.cpp Tue Nov 12 18:57:25 2024 (r22167) +++ trunk/OpenMPT/mptrack/KeyConfigDlg.cpp Tue Nov 12 19:00:41 2024 (r22168) @@ -650,9 +650,9 @@ { m_cmbKeyChoice.SetWindowText(_T("")); m_eCustHotKey.SetWindowText(_T("")); - m_bKeyDown.SetCheck(0); - m_bKeyHold.SetCheck(0); - m_bKeyUp.SetCheck(0); + m_bKeyDown.SetCheck(BST_UNCHECKED); + m_bKeyHold.SetCheck(BST_UNCHECKED); + m_bKeyUp.SetCheck(BST_UNCHECKED); m_curCommand = kcNull; } @@ -695,9 +695,9 @@ m_curKeyChoice = choice; m_forceUpdate = true; m_eCustHotKey.SetKey(ModNone, 0); - m_bKeyDown.SetCheck(0); - m_bKeyHold.SetCheck(0); - m_bKeyUp.SetCheck(0); + m_bKeyDown.SetCheck(BST_UNCHECKED); + m_bKeyHold.SetCheck(BST_UNCHECKED); + m_bKeyUp.SetCheck(BST_UNCHECKED); return; } @@ -772,7 +772,7 @@ ClientToScreen(&point); CRect rect; m_eCustHotKey.GetWindowRect(rect); - if(m_eCustHotKey.IsBypassed() && rect.PtInRect(point)) + if(m_curCommand != kcNull && m_eCustHotKey.IsBypassed() && rect.PtInRect(point)) EnableKeyChoice(true); else CPropertyPage::OnLButtonDblClk(flags, point); |
From: <sv...@op...> - 2024-11-12 17:57:37
|
Author: sagamusix Date: Tue Nov 12 18:57:25 2024 New Revision: 22167 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22167 Log: [Imp] Main toolbar: Completely disable keyboard focus on song readouts when song is not playing. Modified: trunk/OpenMPT/mptrack/Mainbar.cpp Modified: trunk/OpenMPT/mptrack/Mainbar.cpp ============================================================================== --- trunk/OpenMPT/mptrack/Mainbar.cpp Tue Nov 12 18:55:16 2024 (r22166) +++ trunk/OpenMPT/mptrack/Mainbar.cpp Tue Nov 12 18:57:25 2024 (r22167) @@ -510,6 +510,7 @@ { // Update Info m_updating = true; + const CWnd *focus = GetFocus(); if(pSndFile) { // Update play/pause button @@ -517,12 +518,12 @@ SetButtonInfo(PLAYCMD_INDEX, ID_PLAYER_PAUSE, TBBS_BUTTON, TOOLBAR_IMAGE_PAUSE); // Update Speed int nSpeed = pSndFile->m_PlayState.m_nMusicSpeed; - const CWnd *focus = GetFocus(); if(nSpeed != m_currentSpeed && focus != &m_EditSpeed) { if(m_currentSpeed < 0) { m_EditSpeed.SetReadOnly(FALSE); + m_EditSpeed.EnableWindow(TRUE); m_SpinSpeed.EnableWindow(TRUE); } m_currentSpeed = nSpeed; @@ -534,6 +535,7 @@ if(m_currentTempo <= TEMPO(0, 0)) { m_EditTempo.SetReadOnly(FALSE); + m_EditTempo.EnableWindow(TRUE); m_SpinTempo.EnableWindow(TRUE); } @@ -546,6 +548,7 @@ if(m_currentRowsPerBeat < 0) { m_EditRowsPerBeat.SetReadOnly(FALSE); + m_EditRowsPerBeat.EnableWindow(TRUE); m_SpinRowsPerBeat.EnableWindow(TRUE); } @@ -560,6 +563,7 @@ static_assert(MAX_GLOBAL_VOLUME <= 999); m_EditGlobalVolume.SetLimitText(3); m_EditGlobalVolume.SetReadOnly(FALSE); + m_EditGlobalVolume.EnableWindow(TRUE); m_SpinGlobalVolume.EnableWindow(TRUE); } @@ -574,6 +578,7 @@ m_currentTempo.Set(0); m_EditTempo.SetWindowText(_T("---")); m_EditTempo.SetReadOnly(); + m_EditTempo.EnableWindow(FALSE); m_SpinTempo.EnableWindow(FALSE); SetButtonInfo(PLAYCMD_INDEX, ID_PLAYER_PLAY, TBBS_BUTTON, TOOLBAR_IMAGE_PLAY); } @@ -582,6 +587,7 @@ m_currentSpeed = -1; m_EditSpeed.SetWindowText(_T("---")); m_EditSpeed.SetReadOnly(); + m_EditSpeed.EnableWindow(FALSE); m_SpinSpeed.EnableWindow(FALSE); } if(m_currentRowsPerBeat != -1) @@ -589,6 +595,7 @@ m_currentRowsPerBeat = -1; m_EditRowsPerBeat.SetWindowText(_T("---")); m_EditRowsPerBeat.SetReadOnly(); + m_EditRowsPerBeat.EnableWindow(FALSE); m_SpinRowsPerBeat.EnableWindow(FALSE); } if(m_currentGlobalVolume != -1) @@ -596,9 +603,14 @@ m_currentGlobalVolume = -1; m_EditGlobalVolume.SetWindowText(_T("---")); m_EditGlobalVolume.SetReadOnly(); + m_EditGlobalVolume.EnableWindow(FALSE); m_SpinGlobalVolume.EnableWindow(FALSE); } } + // If focus was on a now-disabled input field, move it somewhere else + if(focus && !focus->IsWindowEnabled() && focus->GetParent() == this) + CMainFrame::GetMainFrame()->SetFocus(); + m_updating = false; } |
From: <sv...@op...> - 2024-11-12 17:55:23
|
Author: sagamusix Date: Tue Nov 12 18:55:16 2024 New Revision: 22166 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22166 Log: [Mod] Fix a few key command names. Modified: trunk/OpenMPT/mptrack/CommandSet.cpp Modified: trunk/OpenMPT/mptrack/CommandSet.cpp ============================================================================== --- trunk/OpenMPT/mptrack/CommandSet.cpp Mon Nov 11 23:48:37 2024 (r22165) +++ trunk/OpenMPT/mptrack/CommandSet.cpp Tue Nov 12 18:55:16 2024 (r22166) @@ -578,7 +578,7 @@ {1009, kcTransposeOctUp, _T("Transpose +1 Octave")}, {1010, kcTransposeOctDown, _T("Transpose -1 Octave")}, {1011, kcSelectChannel, _T("Select Channel / Select All")}, - {1012, kcPatternAmplify, _T("Amplify selection")}, + {1012, kcPatternAmplify, _T("Amplify Selection")}, {1013, kcPatternSetInstrument, _T("Apply current instrument")}, {1014, kcPatternInterpolateVol, _T("Interpolate Volume")}, {1015, kcPatternInterpolateEffect, _T("Interpolate Effect")}, @@ -623,10 +623,10 @@ {1054, kcNextPattern, _T("Next Pattern")}, {1055, kcPrevPattern, _T("Previous Pattern")}, //{1056, kcClearSelection, _T("Wipe selection")}, - {1057, kcClearRow, _T("Clear row")}, - {1058, kcClearField, _T("Clear field")}, - {1059, kcClearRowStep, _T("Clear row and step")}, - {1060, kcClearFieldStep, _T("Clear field and step")}, + {1057, kcClearRow, _T("Clear Row")}, + {1058, kcClearField, _T("Clear Field")}, + {1059, kcClearRowStep, _T("Clear Row and Step")}, + {1060, kcClearFieldStep, _T("Clear Field and Step")}, {1061, kcDeleteRow, _T("Delete Row(s)")}, {1062, kcShowNoteProperties, _T("Show Note Properties")}, {1063, kcShowEditMenu, _T("Show Context (Right-Click) Menu")}, @@ -1065,15 +1065,15 @@ {1661, kcPatternShrinkSelection, _T("Shrink selection")}, {1662, kcTogglePluginEditor, _T("Toggle channel's plugin editor")}, {1663, kcToggleFollowSong, _T("Toggle follow song")}, - {1664, kcClearFieldITStyle, _T("Clear field (IT Style)")}, - {1665, kcClearFieldStepITStyle, _T("Clear field and step (IT Style)")}, + {1664, kcClearFieldITStyle, _T("Clear Field (IT Style)")}, + {1665, kcClearFieldStepITStyle, _T("Clear Field and Step (IT Style)")}, {1666, kcSetFXextension, _T("Parameter Extension Command")}, {1667 | KeyCommand::Hidden, kcNoteCutOld, _T("Note Cut")}, // Legacy {1668 | KeyCommand::Hidden, kcNoteOffOld, _T("Note Off")}, // Legacy {1669, kcViewAddPlugin, _T("View Plugin Manager")}, {1670, kcViewChannelManager, _T("View Channel Manager")}, {1671, kcCopyAndLoseSelection, _T("Copy and lose selection")}, - {1672, kcNewPattern, _T("Insert new pattern")}, + {1672, kcNewPattern, _T("Insert New Pattern")}, {1673, kcSampleLoad, _T("Load Sample")}, {1674, kcSampleSave, _T("Save Sample")}, {1675, kcSampleNew, _T("New Sample")}, @@ -1376,12 +1376,12 @@ {KeyCommand::Hidden, kcDataEntryDownStop, _T("Stop Data Entry -1")}, {KeyCommand::Hidden, kcDataEntryUpCoarseStop, _T("Stop Data Entry Up (Coarse)")}, {KeyCommand::Hidden, kcDataEntryDownCoarseStop, _T("Stop Data Entry Down (Coarse)")}, - {2058, kcPrevOrderAtMeasureEnd, _T("Previous Order (Transition at end of current measure")}, - {2059, kcNextOrderAtMeasureEnd, _T("Next Order (Transition at end of current measure")}, - {2060, kcPrevOrderAtBeatEnd, _T("Previous Order (Transition at end of current beat")}, - {2061, kcNextOrderAtBeatEnd, _T("Next Order (Transition at end of current beat")}, - {2062, kcPrevOrderAtRowEnd, _T("Previous Order (Transition at end of current row")}, - {2063, kcNextOrderAtRowEnd, _T("Next Order (Transition at end of current row")}, + {2058, kcPrevOrderAtMeasureEnd, _T("Previous Order (Transition at end of current measure)")}, + {2059, kcNextOrderAtMeasureEnd, _T("Next Order (Transition at end of current measure)")}, + {2060, kcPrevOrderAtBeatEnd, _T("Previous Order (Transition at end of current beat)")}, + {2061, kcNextOrderAtBeatEnd, _T("Next Order (Transition at end of current beat)")}, + {2062, kcPrevOrderAtRowEnd, _T("Previous Order (Transition at end of current row)")}, + {2063, kcNextOrderAtRowEnd, _T("Next Order (Transition at end of current row)")}, {2064, kcOrderlistQueueAtPatternEnd, _T("Queue Pattern (Transition at end of current pattern)")}, {2065, kcOrderlistQueueAtMeasureEnd, _T("Queue Pattern (Transition at end of current measure)")}, {2066, kcOrderlistQueueAtBeatEnd, _T("Queue Pattern (Transition at end of current beat)")}, |
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(); |
From: <sv...@op...> - 2024-11-11 22:14:29
|
Author: sagamusix Date: Mon Nov 11 23:14:22 2024 New Revision: 22164 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22164 Log: [Mod] Main toolbar: Give keyboard focus back to last active view after using spinners, like it used to work before. Modified: trunk/OpenMPT/mptrack/Mainbar.cpp Modified: trunk/OpenMPT/mptrack/Mainbar.cpp ============================================================================== --- trunk/OpenMPT/mptrack/Mainbar.cpp Mon Nov 11 23:00:20 2024 (r22163) +++ trunk/OpenMPT/mptrack/Mainbar.cpp Mon Nov 11 23:14:22 2024 (r22164) @@ -609,7 +609,10 @@ CToolBarEx::OnVScroll(nCode, nPos, pScrollBar); // Avoid auto-setting input focus to edit control - pScrollBar->SetFocus(); + if(auto *activeView = CMainFrame::GetMainFrame()->GetActiveView(); activeView != nullptr) + activeView->SetFocus(); + else + pScrollBar->SetFocus(); short int oct = (short int)m_SpinOctave.GetPos(); if((oct >= MIN_BASEOCTAVE) && ((int)oct != m_currentOctave)) |
From: <sv...@op...> - 2024-11-11 22:00:32
|
Author: sagamusix Date: Mon Nov 11 23:00:20 2024 New Revision: 22163 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22163 Log: [Fix] MED: Import notes that exceed NOTE_MAX. This makes the missing note in "megaball - title (1).mmd1" appear. MED Soundstudio on Windows and Amiga disagree about how these notes should be handled (Amiga plays them at a very low frequency, which is what we copy). Modified: trunk/OpenMPT/soundlib/Load_med.cpp Modified: trunk/OpenMPT/soundlib/Load_med.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_med.cpp Mon Nov 11 20:37:12 2024 (r22162) +++ trunk/OpenMPT/soundlib/Load_med.cpp Mon Nov 11 23:00:20 2024 (r22163) @@ -632,7 +632,11 @@ if(note >= NOTE_MIDDLEC + 2 * 12) needInstruments = true; - if(note >= NOTE_MIN && note <= NOTE_MAX) + if(note > NOTE_MIN + 131) + note -= 108; + else if(note > NOTE_MAX) + note -= mpt::align_down(note - (NOTE_MAX - 11), 12); + if(note >= NOTE_MIN) m->note = static_cast<ModCommand::NOTE>(note); if(!cmd && !param1) |
From: <sv...@op...> - 2024-11-11 19:37:19
|
Author: sagamusix Date: Mon Nov 11 20:37:12 2024 New Revision: 22162 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22162 Log: [Fix] Tempo Swing Dialog: Controls were not sized correctly when moving them to a screen with different DPI, and they lost their intended font. Apparently this is related to the controls no being directly parented in the dialog. Modified: trunk/OpenMPT/mptrack/TempoSwingDialog.cpp trunk/OpenMPT/mptrack/TempoSwingDialog.h Modified: trunk/OpenMPT/mptrack/TempoSwingDialog.cpp ============================================================================== --- trunk/OpenMPT/mptrack/TempoSwingDialog.cpp Mon Nov 11 20:36:11 2024 (r22161) +++ trunk/OpenMPT/mptrack/TempoSwingDialog.cpp Mon Nov 11 20:37:12 2024 (r22162) @@ -30,12 +30,72 @@ } +struct TempoSwingMeasurements +{ + enum + { + edRowLabelWidth = 64, // Label "Row 999:" + edSliderWidth = 220, // Setting slider + edSliderHeight = 20, // Setting slider + edValueLabelWidth = 64, // Label "100%" + edPaddingX = 8, // Spacing between elements + edPaddingY = 4, // Spacing between elements + edPaddingTop = 64, // Spacing from top of dialog + edRowHeight = edSliderHeight + edPaddingY, // Height of one set of controls + edFooterHeight = 32, // Buttons + edScrollbarWidth = 16, // Width of optional scrollbar + }; + + const int rowLabelWidth; + const int sliderWidth; + const int sliderHeight; + const int valueLabelWidth; + const int paddingX; + const int paddingY; + const int paddingTop; + const int rowHeight; + const int footerHeight; + const int scrollbarWidth; + + TempoSwingMeasurements(HWND hWnd) + : rowLabelWidth(HighDPISupport::ScalePixels(edRowLabelWidth, hWnd)) + , sliderWidth(HighDPISupport::ScalePixels(edSliderWidth, hWnd)) + , sliderHeight(HighDPISupport::ScalePixels(edSliderHeight, hWnd)) + , valueLabelWidth(HighDPISupport::ScalePixels(edValueLabelWidth, hWnd)) + , paddingX(HighDPISupport::ScalePixels(edPaddingX, hWnd)) + , paddingY(HighDPISupport::ScalePixels(edPaddingY, hWnd)) + , paddingTop(HighDPISupport::ScalePixels(edPaddingTop, hWnd)) + , rowHeight(HighDPISupport::ScalePixels(edRowHeight, hWnd)) + , footerHeight(HighDPISupport::ScalePixels(edFooterHeight, hWnd)) + , scrollbarWidth(HighDPISupport::ScalePixels(edScrollbarWidth, hWnd)) + { + } + + + CRect RowLabelRect(const CRect rect) const noexcept + { + return CRect{rect.left, rect.top, rect.right, rect.top + rowHeight}; + } + + CRect ValueLabelRect(const CRect rect) const noexcept + { + return CRect{rect.right - valueLabelWidth, rect.top, rect.right, rect.top + sliderHeight}; + } + + CRect ValueSliderRect(const CRect rect) const noexcept + { + return CRect{rect.left + rowLabelWidth, rect.top, rect.right - valueLabelWidth, rect.top + sliderHeight}; + } +}; + + + BEGIN_MESSAGE_MAP(CTempoSwingDlg, DialogBase) //{{AFX_MSG_MAP(CTempoSwingDlg) ON_WM_VSCROLL() - ON_COMMAND(IDC_BUTTON1, &CTempoSwingDlg::OnReset) - ON_COMMAND(IDC_BUTTON2, &CTempoSwingDlg::OnUseGlobal) - ON_COMMAND(IDC_CHECK1, &CTempoSwingDlg::OnToggleGroup) + ON_COMMAND(IDC_BUTTON1, &CTempoSwingDlg::OnReset) + ON_COMMAND(IDC_BUTTON2, &CTempoSwingDlg::OnUseGlobal) + ON_COMMAND(IDC_CHECK1, &CTempoSwingDlg::OnToggleGroup) ON_EN_CHANGE(IDC_EDIT1, &CTempoSwingDlg::OnGroupChanged) //}}AFX_MSG_MAP END_MESSAGE_MAP() @@ -66,49 +126,9 @@ BOOL CTempoSwingDlg::OnInitDialog() { - struct Measurements - { - enum - { - edRowLabelWidth = 64, // Label "Row 999:" - edSliderWidth = 220, // Setting slider - edSliderHeight = 20, // Setting slider - edValueLabelWidth = 64, // Label "100%" - edPaddingX = 8, // Spacing between elements - edPaddingY = 4, // Spacing between elements - edPaddingTop = 64, // Spacing from top of dialog - edRowHeight = edSliderHeight + edPaddingY, // Height of one set of controls - edFooterHeight = 32, // Buttons - edScrollbarWidth = 16, // Width of optional scrollbar - }; - - const int rowLabelWidth; - const int sliderWidth; - const int sliderHeight; - const int valueLabelWidth; - const int paddingX; - const int paddingY; - const int paddingTop; - const int rowHeight; - const int footerHeight; - const int scrollbarWidth; - - Measurements(HWND hWnd) - : rowLabelWidth(HighDPISupport::ScalePixels(edRowLabelWidth, hWnd)) - , sliderWidth(HighDPISupport::ScalePixels(edSliderWidth, hWnd)) - , sliderHeight(HighDPISupport::ScalePixels(edSliderHeight, hWnd)) - , valueLabelWidth(HighDPISupport::ScalePixels(edValueLabelWidth, hWnd)) - , paddingX(HighDPISupport::ScalePixels(edPaddingX, hWnd)) - , paddingY(HighDPISupport::ScalePixels(edPaddingY, hWnd)) - , paddingTop(HighDPISupport::ScalePixels(edPaddingTop, hWnd)) - , rowHeight(HighDPISupport::ScalePixels(edRowHeight, hWnd)) - , footerHeight(HighDPISupport::ScalePixels(edFooterHeight, hWnd)) - , scrollbarWidth(HighDPISupport::ScalePixels(edScrollbarWidth, hWnd)) - { } - }; - DialogBase::OnInitDialog(); - Measurements m(m_hWnd); + + TempoSwingMeasurements m{m_hWnd}; CRect windowRect, rect; GetWindowRect(windowRect); GetClientRect(rect); @@ -146,26 +166,27 @@ m_scrollBar.ShowWindow(SW_HIDE); } - rect.DeflateRect(m.paddingX, 0/* m.paddingTop*/, m.paddingX + m.scrollbarWidth, 0); + rect.DeflateRect(m.paddingX, 0, m.paddingX + m.scrollbarWidth, 0); GetDlgItem(IDC_BUTTON2)->ShowWindow((m_pattern != PATTERNINDEX_INVALID) ? SW_SHOW : SW_HIDE); m_controls.resize(m_tempoSwing.size()); + CFont *font = GetFont(); for(size_t i = 0; i < m_controls.size(); i++) { m_controls[i] = std::make_unique<RowCtls>(); auto &r = m_controls[i]; // Row label - r->rowLabel.Create(MPT_CFORMAT("Row {}:")(i + 1), WS_CHILD | WS_VISIBLE | SS_CENTERIMAGE, CRect(rect.left, rect.top, rect.right, rect.top + m.rowHeight), &m_container); - r->rowLabel.SetFont(GetFont()); + r->rowLabel.Create(MPT_CFORMAT("Row {}:")(i + 1), WS_CHILD | WS_VISIBLE | SS_CENTERIMAGE, m.RowLabelRect(rect), &m_container); + r->rowLabel.SetFont(font); // Value label - r->valueLabel.Create(_T("100%"), WS_CHILD | WS_VISIBLE | SS_CENTERIMAGE, CRect(rect.right - m.valueLabelWidth, rect.top, rect.right, rect.top + m.sliderHeight), &m_container); - r->valueLabel.SetFont(GetFont()); + r->valueLabel.Create(_T("100%"), WS_CHILD | WS_VISIBLE | SS_CENTERIMAGE, m.ValueLabelRect(rect), &m_container); + r->valueLabel.SetFont(font); // Value slider - r->valueSlider.Create(WS_CHILD | WS_VISIBLE | WS_TABSTOP | TBS_TOOLTIPS | TBS_AUTOTICKS, CRect(rect.left + m.rowLabelWidth, rect.top, rect.right - m.valueLabelWidth, rect.top + m.sliderHeight), &m_container, 0xFFFF); - r->valueSlider.SetFont(GetFont()); + r->valueSlider.Create(WS_CHILD | WS_VISIBLE | WS_TABSTOP | TBS_TOOLTIPS | TBS_AUTOTICKS, m.ValueSliderRect(rect), &m_container, 0xFFFF); + r->valueSlider.SetFont(font); r->valueSlider.SetRange(-SliderResolution / 2, SliderResolution / 2); r->valueSlider.SetTicFreq(SliderResolution / 8); r->valueSlider.SetPageSize(SliderResolution / 8); @@ -174,7 +195,7 @@ rect.MoveToY(rect.top + m.rowHeight); } - ((CSpinButtonCtrl *)GetDlgItem(IDC_SPIN1))->SetRange32(1, static_cast<int>(m_tempoSwing.size())); + static_cast<CSpinButtonCtrl *>(GetDlgItem(IDC_SPIN1))->SetRange32(1, static_cast<int>(m_tempoSwing.size())); SetDlgItemInt(IDC_EDIT1, m_groupSize); OnToggleGroup(); @@ -188,18 +209,47 @@ { auto wnd = GetDlgItem(i); wnd->GetWindowRect(buttonRect); - wnd->SetWindowPos(nullptr, buttonRect.left - windowRect.left - cxEdge, rect.top, 0, 0, SWP_NOSIZE | SWP_NOOWNERZORDER); + wnd->SetWindowPos(nullptr, buttonRect.left - windowRect.left - cxEdge, rect.top, 0, 0, SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOZORDER); } } windowRect.bottom += displayHeight + m.paddingTop + m.footerHeight; - SetWindowPos(nullptr, 0, 0, windowRect.Width(), windowRect.Height(), SWP_NOMOVE | SWP_NOOWNERZORDER); + SetWindowPos(nullptr, 0, 0, windowRect.Width(), windowRect.Height(), SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER); EnableToolTips(); return TRUE; } +void CTempoSwingDlg::OnDPIChanged() +{ + DialogBase::OnDPIChanged(); + + // For some reason, these controls are not sized automatically and lose their intended font because they are parented in the static text field... + TempoSwingMeasurements m{m_hWnd}; + CFont *font = GetFont(); + auto dwp = ::BeginDeferWindowPos(static_cast<int>(m_controls.size() * 3)); + CRect rect; + m_container.GetClientRect(rect); + rect.DeflateRect(m.paddingX, 0, m.paddingX + m.scrollbarWidth, 0); + for(auto &r: m_controls) + { + r->rowLabel.SetFont(font); + r->valueLabel.SetFont(font); + r->valueSlider.SetFont(font); + + const CRect rowLabelRect = m.RowLabelRect(rect); + const CRect valueLabelRect = m.ValueLabelRect(rect); + const CRect valueSliderRect = m.ValueSliderRect(rect); + ::DeferWindowPos(dwp, r->rowLabel, nullptr, rowLabelRect.left, rowLabelRect.top, rowLabelRect.Width(), rowLabelRect.Height(), SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOCOPYBITS); + ::DeferWindowPos(dwp, r->valueLabel, nullptr, valueLabelRect.left, valueLabelRect.top, valueLabelRect.Width(), valueLabelRect.Height(), SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOCOPYBITS); + ::DeferWindowPos(dwp, r->valueSlider, nullptr, valueSliderRect.left, valueSliderRect.top, valueSliderRect.Width(), valueSliderRect.Height(), SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOCOPYBITS); + rect.MoveToY(rect.top + m.rowHeight); + } + ::EndDeferWindowPos(dwp); +} + + void CTempoSwingDlg::OnOK() { DialogBase::OnOK(); @@ -243,9 +293,9 @@ void CTempoSwingDlg::OnReset() { - for(size_t i = 0; i < m_controls.size(); i++) + for(auto &control : m_controls) { - m_controls[i]->valueSlider.SetPos(0); + control->valueSlider.SetPos(0); } m_container.OnHScroll(0, 0, reinterpret_cast<CScrollBar *>(&(m_controls[0]->valueSlider))); } @@ -258,7 +308,7 @@ OnReset(); return; } - for(size_t i = 0; i < m_tempoSwing.size(); i++) + for(size_t i = 0; i < m_controls.size(); i++) { m_controls[i]->SetValue(m_sndFile.m_tempoSwing[i % m_sndFile.m_tempoSwing.size()]); } Modified: trunk/OpenMPT/mptrack/TempoSwingDialog.h ============================================================================== --- trunk/OpenMPT/mptrack/TempoSwingDialog.h Mon Nov 11 20:36:11 2024 (r22161) +++ trunk/OpenMPT/mptrack/TempoSwingDialog.h Mon Nov 11 20:37:12 2024 (r22162) @@ -32,6 +32,7 @@ afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar *pScrollBar); afx_msg BOOL OnToolTipNotify(UINT, NMHDR *pNMHDR, LRESULT *); + DECLARE_MESSAGE_MAP() }; @@ -65,6 +66,7 @@ protected: void DoDataExchange(CDataExchange* pDX) override; BOOL OnInitDialog() override; + void OnDPIChanged() override; void OnOK() override; void OnCancel() override; void OnClose(); @@ -73,6 +75,7 @@ afx_msg void OnToggleGroup(); afx_msg void OnGroupChanged(); afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar *pScrollBar); + DECLARE_MESSAGE_MAP() }; |
From: <sv...@op...> - 2024-11-11 19:36:28
|
Author: sagamusix Date: Mon Nov 11 20:36:11 2024 New Revision: 22161 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22161 Log: Merged revision(s) 22160 from trunk/OpenMPT: [Fix] Tempo Swing Dialog: Call into correct base class message table. This caused a crash in DPI-aware mode when moving the dialog to a monitor with a different DPI. ........ Modified: branches/OpenMPT-1.31/ (props changed) branches/OpenMPT-1.31/mptrack/TempoSwingDialog.cpp Modified: branches/OpenMPT-1.31/mptrack/TempoSwingDialog.cpp ============================================================================== --- branches/OpenMPT-1.31/mptrack/TempoSwingDialog.cpp Mon Nov 11 20:35:34 2024 (r22160) +++ branches/OpenMPT-1.31/mptrack/TempoSwingDialog.cpp Mon Nov 11 20:36:11 2024 (r22161) @@ -353,7 +353,7 @@ // Scrollable container for the sliders -BEGIN_MESSAGE_MAP(CTempoSwingDlg::SliderContainer, CDialog) +BEGIN_MESSAGE_MAP(CTempoSwingDlg::SliderContainer, CStatic) //{{AFX_MSG_MAP(CTempoSwingDlg::SliderContainer) ON_WM_HSCROLL() ON_NOTIFY_EX(TTN_NEEDTEXT, 0, &CTempoSwingDlg::SliderContainer::OnToolTipNotify) |
From: <sv...@op...> - 2024-11-11 19:35:46
|
Author: sagamusix Date: Mon Nov 11 20:35:34 2024 New Revision: 22160 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22160 Log: [Fix] Tempo Swing Dialog: Call into correct base class message table. This caused a crash in DPI-aware mode when moving the dialog to a monitor with a different DPI. Modified: trunk/OpenMPT/mptrack/TempoSwingDialog.cpp Modified: trunk/OpenMPT/mptrack/TempoSwingDialog.cpp ============================================================================== --- trunk/OpenMPT/mptrack/TempoSwingDialog.cpp Mon Nov 11 20:07:05 2024 (r22159) +++ trunk/OpenMPT/mptrack/TempoSwingDialog.cpp Mon Nov 11 20:35:34 2024 (r22160) @@ -356,7 +356,7 @@ // Scrollable container for the sliders -BEGIN_MESSAGE_MAP(CTempoSwingDlg::SliderContainer, DialogBase) +BEGIN_MESSAGE_MAP(CTempoSwingDlg::SliderContainer, CStatic) //{{AFX_MSG_MAP(CTempoSwingDlg::SliderContainer) ON_WM_HSCROLL() ON_NOTIFY_EX(TTN_NEEDTEXT, 0, &CTempoSwingDlg::SliderContainer::OnToolTipNotify) |
From: <sv...@op...> - 2024-11-11 19:07:17
|
Author: sagamusix Date: Mon Nov 11 20:07:05 2024 New Revision: 22159 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22159 Log: [Fix] GetWindowPlacement/SetWindowPlacement is also broken on mixed-DPI setups. Use the same workaround that is apparently good enough for Microsoft's own code by temporarily switching to a DPI-unaware context (https://blogs.windows.com/windowsdeveloper/2016/10/24/high-dpi-scaling-improvements-for-desktop-applications-and-mixed-mode-dpi-scaling-in-the-windows-10-anniversary-update/). Modified: trunk/OpenMPT/mptrack/HighDPISupport.cpp trunk/OpenMPT/mptrack/HighDPISupport.h trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/TrackerSettings.cpp Modified: trunk/OpenMPT/mptrack/HighDPISupport.cpp ============================================================================== --- trunk/OpenMPT/mptrack/HighDPISupport.cpp Mon Nov 11 19:57:12 2024 (r22158) +++ trunk/OpenMPT/mptrack/HighDPISupport.cpp Mon Nov 11 20:07:05 2024 (r22159) @@ -43,7 +43,7 @@ }; -enum MPT_DPI_AWARENESS_CONTEXT +enum MPT_DPI_AWARENESS_CONTEXT : intptr_t { MPT_DPI_AWARENESS_CONTEXT_UNAWARE = -1, MPT_DPI_AWARENESS_CONTEXT_SYSTEM_AWARE = -2, @@ -164,10 +164,29 @@ } -HighDPISupport::DPIAwarenessBypass::DPIAwarenessBypass() +bool HighDPISupport::SetWindowPlacement(HWND hwnd, const WINDOWPLACEMENT &wpl) +{ + // https://blogs.windows.com/windowsdeveloper/2016/10/24/high-dpi-scaling-improvements-for-desktop-applications-and-mixed-mode-dpi-scaling-in-the-windows-10-anniversary-update/ + // What is not mentioned there: The first SetWindowPlacement call will restore the window to the wrong dimensions if it's not on the main screen... + HighDPISupport::DPIAwarenessBypass bypass{HighDPISupport::Mode::LowDpi}; + ::SetWindowPlacement(hwnd, &wpl); + return ::SetWindowPlacement(hwnd, &wpl) != FALSE; +} + + +bool HighDPISupport::GetWindowPlacement(HWND hwnd, WINDOWPLACEMENT &wpl) +{ + // https://blogs.windows.com/windowsdeveloper/2016/10/24/high-dpi-scaling-improvements-for-desktop-applications-and-mixed-mode-dpi-scaling-in-the-windows-10-anniversary-update/ + HighDPISupport::DPIAwarenessBypass bypass{HighDPISupport::Mode::LowDpi}; + wpl.length = sizeof(WINDOWPLACEMENT); + return ::GetWindowPlacement(hwnd, &wpl) != FALSE; +} + + +HighDPISupport::DPIAwarenessBypass::DPIAwarenessBypass(Mode forceMode) { if(auto instance = GetHighDPISupportData(); instance->m_SetThreadDpiAwarenessContext) - m_previous = instance->m_SetThreadDpiAwarenessContext(HANDLE(MPT_DPI_AWARENESS_CONTEXT_SYSTEM_AWARE)); + m_previous = instance->m_SetThreadDpiAwarenessContext(HANDLE((forceMode == Mode::HighDpi) ? MPT_DPI_AWARENESS_CONTEXT_SYSTEM_AWARE : MPT_DPI_AWARENESS_CONTEXT_UNAWARE)); } Modified: trunk/OpenMPT/mptrack/HighDPISupport.h ============================================================================== --- trunk/OpenMPT/mptrack/HighDPISupport.h Mon Nov 11 19:57:12 2024 (r22158) +++ trunk/OpenMPT/mptrack/HighDPISupport.h Mon Nov 11 20:07:05 2024 (r22159) @@ -43,6 +43,11 @@ void CreateGUIFont(CFont &font, HWND hwnd); + // Normalized to 96 DPI to avoid issues in mixed-DPI contexts + bool SetWindowPlacement(HWND hwnd, const WINDOWPLACEMENT &wpl); + // Normalized to 96 DPI to avoid issues in mixed-DPI contexts + bool GetWindowPlacement(HWND hwnd, WINDOWPLACEMENT &wpl); + // Applies DPI scaling factor to some given size MPT_FORCEINLINE int ScalePixels(int pixels, HWND hwnd) { @@ -58,7 +63,7 @@ class DPIAwarenessBypass { public: - DPIAwarenessBypass(); + DPIAwarenessBypass(Mode forceMode = Mode::HighDpi); ~DPIAwarenessBypass(); private: Modified: trunk/OpenMPT/mptrack/MainFrm.cpp ============================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp Mon Nov 11 19:57:12 2024 (r22158) +++ trunk/OpenMPT/mptrack/MainFrm.cpp Mon Nov 11 20:07:05 2024 (r22159) @@ -2725,13 +2725,13 @@ void CMainFrame::OnShowWindow(BOOL bShow, UINT /*nStatus*/) { static bool firstShow = true; - if (bShow && !IsWindowVisible() && firstShow) + if(bShow && !IsWindowVisible() && firstShow) { firstShow = false; WINDOWPLACEMENT wpl; GetWindowPlacement(&wpl); wpl = theApp.GetSettings().Read<WINDOWPLACEMENT>(U_("Display"), U_("WindowPlacement"), wpl); - SetWindowPlacement(&wpl); + HighDPISupport::SetWindowPlacement(m_hWnd, wpl); } } Modified: trunk/OpenMPT/mptrack/TrackerSettings.cpp ============================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.cpp Mon Nov 11 19:57:12 2024 (r22158) +++ trunk/OpenMPT/mptrack/TrackerSettings.cpp Mon Nov 11 20:07:05 2024 (r22159) @@ -12,6 +12,7 @@ #include "stdafx.h" #include "TrackerSettings.h" #include "ExceptionHandler.h" +#include "HighDPISupport.h" #include "Mainfrm.h" #include "Moddoc.h" #include "Mpdlgs.h" @@ -1304,10 +1305,8 @@ void TrackerSettings::SaveSettings() { - WINDOWPLACEMENT wpl; - wpl.length = sizeof(WINDOWPLACEMENT); - CMainFrame::GetMainFrame()->GetWindowPlacement(&wpl); + HighDPISupport::GetWindowPlacement(*CMainFrame::GetMainFrame(), wpl); conf.Write<WINDOWPLACEMENT>(UL_("Display"), UL_("WindowPlacement"), wpl); conf.Write<int32>(UL_("Pattern Editor"), UL_("NumClipboards"), mpt::saturate_cast<int32>(PatternClipboard::GetClipboardSize())); |
From: <sv...@op...> - 2024-11-11 18:57:20
|
Author: sagamusix Date: Mon Nov 11 19:57:12 2024 New Revision: 22158 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22158 Log: [Fix] Previous commit accidentally broke encoding. Modified: trunk/OpenMPT/mptrack/mptrack.rc Modified: trunk/OpenMPT/mptrack/mptrack.rc ============================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc Mon Nov 11 19:52:34 2024 (r22157) +++ trunk/OpenMPT/mptrack/mptrack.rc Mon Nov 11 19:57:12 2024 (r22158) @@ -2285,11 +2285,11 @@ GROUPBOX "Volume Ramping",IDC_STATIC,6,60,276,72 EDITTEXT IDC_RAMPING_IN,12,72,36,12,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER CONTROL "",IDC_SPIN2,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,42,66,11,14 - LTEXT "µs &up",IDC_STATIC,54,72,22,12,SS_CENTERIMAGE + LTEXT "s &up",IDC_STATIC,54,72,22,12,SS_CENTERIMAGE EDITTEXT IDC_EDIT_VOLRAMP_SAMPLES_UP,90,72,90,12,ES_AUTOHSCROLL | ES_READONLY EDITTEXT IDC_RAMPING_OUT,12,90,36,12,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER CONTROL "",IDC_SPIN3,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,42,84,11,14 - LTEXT "µs &down",IDC_STATIC,54,92,28,11,SS_CENTERIMAGE + LTEXT "s &down",IDC_STATIC,54,92,28,11,SS_CENTERIMAGE EDITTEXT IDC_EDIT_VOLRAMP_SAMPLES_DOWN,90,90,90,12,ES_AUTOHSCROLL | ES_READONLY PUSHBUTTON "&Reset to Defaults",IDC_BUTTON1,12,110,72,14 GROUPBOX "Behaviour",IDC_STATIC,6,150,276,30 |
From: <sv...@op...> - 2024-11-11 18:52:41
|
Author: sagamusix Date: Mon Nov 11 19:52:34 2024 New Revision: 22157 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22157 Log: [Fix] Fix a few more cut-off labels at some high-DPI scaling values. Modified: trunk/OpenMPT/mptrack/mptrack.rc Modified: trunk/OpenMPT/mptrack/mptrack.rc ============================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc Mon Nov 11 19:43:27 2024 (r22156) +++ trunk/OpenMPT/mptrack/mptrack.rc Mon Nov 11 19:52:34 2024 (r22157) @@ -325,17 +325,17 @@ PUSHBUTTON "Change...",IDC_BUTTON3,192,78,42,12 END -IDD_CLIPBOARD DIALOGEX 0, 0, 166, 201 +IDD_CLIPBOARD DIALOGEX 0, 0, 183, 201 STYLE DS_SETFONT | DS_FIXEDSYS | DS_CENTERMOUSE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME EXSTYLE WS_EX_TOOLWINDOW CAPTION "Clipboard Manager" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - LISTBOX IDC_LIST1,6,6,156,156,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + LISTBOX IDC_LIST1,6,6,168,156,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP LTEXT "Number of clipboards:",IDC_STATIC,6,168,114,12,SS_CENTERIMAGE - EDITTEXT IDC_EDIT1,126,168,36,12,ES_AUTOHSCROLL | ES_NUMBER + EDITTEXT IDC_EDIT1,138,168,36,12,ES_AUTOHSCROLL | ES_NUMBER CONTROL "",IDC_SPIN1,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | WS_TABSTOP,150,171,11,11 - LTEXT "Click an entry to make it the current clipboard.",IDC_STATIC,6,186,156,14 + LTEXT "Click an entry to make it the current clipboard.",IDC_STATIC,6,186,168,14 END IDD_INPUT DIALOGEX 0, 0, 166, 66 @@ -776,7 +776,7 @@ IDD_CLIPBOARD, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 159 + RIGHTMARGIN, 176 TOPMARGIN, 7 BOTTOMMARGIN, 194 END @@ -1657,7 +1657,7 @@ CONTROL "&Amiga Frequency Limits",IDC_CHECK_AMIGALIMITS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,120,78,108,10 LTEXT "&Mix Levels:",IDC_TEXT_MIXMODE,12,116,48,8 COMBOBOX IDC_COMBO_MIXLEVELS,60,114,108,51,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "&Tempo Mode:",IDC_TEXT_TEMPOMODE,12,196,44,8 + LTEXT "&Tempo Mode:",IDC_TEXT_TEMPOMODE,12,196,48,8 COMBOBOX IDC_COMBO_TEMPOMODE,62,194,82,77,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "Configure S&wing",IDC_BUTTON1,62,212,82,12 LTEXT "Rows per beat",IDC_TEXT_ROWSPERBEAT,180,196,66,8 @@ -1989,35 +1989,35 @@ EDITTEXT IDC_EDIT_STATISTICS,12,233,264,38,ES_MULTILINE | ES_AUTOHSCROLL | ES_READONLY | NOT WS_TABSTOP END -IDD_MIDIMACRO DIALOGEX 0, 0, 359, 335 +IDD_MIDIMACRO DIALOGEX 0, 0, 369, 335 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Zxx Macro Configuration" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - DEFPUSHBUTTON "OK",IDOK,300,6,50,14 - PUSHBUTTON "Cancel",IDCANCEL,300,24,50,14 - PUSHBUTTON "Set as default",IDC_BUTTON1,300,42,50,14 - PUSHBUTTON "Reset",IDC_BUTTON2,300,60,50,14 - GROUPBOX "Parametered Macro (Z00-Z7F)",IDC_STATIC,6,6,288,272 - LTEXT "Modify macro:",IDC_STATIC,13,221,47,8 - COMBOBOX IDC_COMBO1,13,231,48,103,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Type:",IDC_STATIC,64,221,47,8 - COMBOBOX IDC_COMBO2,64,231,111,79,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Value:",IDC_STATIC,177,221,47,8 - EDITTEXT IDC_EDIT1,177,231,110,12,ES_AUTOHSCROLL - GROUPBOX "Generate Macro:",IDC_STATIC,13,246,274,28 + DEFPUSHBUTTON "OK",IDOK,312,6,50,14 + PUSHBUTTON "Cancel",IDCANCEL,312,24,50,14 + PUSHBUTTON "Set as default",IDC_BUTTON1,312,42,50,14 + PUSHBUTTON "Reset",IDC_BUTTON2,312,60,50,14 + GROUPBOX "Parametered Macro (Z00-Z7F)",IDC_STATIC,6,6,300,272 + LTEXT "Modify macro:",IDC_STATIC,13,221,53,8 + COMBOBOX IDC_COMBO1,13,231,53,103,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Type:",IDC_STATIC,74,221,48,8 + COMBOBOX IDC_COMBO2,74,231,108,79,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Value:",IDC_STATIC,188,221,69,8 + EDITTEXT IDC_EDIT1,188,231,107,12,ES_AUTOHSCROLL + GROUPBOX "Generate Macro:",IDC_STATIC,13,246,281,28 LTEXT "Plugin/Param:",IDC_GENMACROLABEL,19,259,41,8 COMBOBOX IDC_MACROPLUG,66,257,114,111,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - COMBOBOX IDC_MACROPARAM,186,257,97,126,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - GROUPBOX "Fixed Macros (Z80-ZFF)",IDC_STATIC,6,282,288,50 + COMBOBOX IDC_MACROPARAM,186,257,102,126,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + GROUPBOX "Fixed Macros (Z80-ZFF)",IDC_STATIC,6,282,300,50 RTEXT "Preset:",IDC_STATIC,12,298,37,8 COMBOBOX IDC_COMBO3,54,296,173,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP RTEXT "Customize:",IDC_STATIC,12,316,36,8 COMBOBOX IDC_COMBO4,54,314,48,101,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP - RTEXT "Value:",IDC_STATIC,114,316,24,8 + RTEXT "Value:",IDC_STATIC,108,316,30,8 EDITTEXT IDC_EDIT2,144,314,116,12,ES_AUTOHSCROLL COMBOBOX IDC_MACROCC,66,257,114,111,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "Macro Help",IDC_BUTTON3,300,84,50,14 + PUSHBUTTON "Macro Help",IDC_BUTTON3,312,84,50,14 END IDD_CHORDEDIT DIALOGEX 0, 0, 321, 122 @@ -2066,9 +2066,9 @@ LTEXT "&Instrument:",IDC_STATIC,12,18,67,8 CONTROL "Spin1",IDC_SPIN1,"msctls_updown32",0x0,12,28,11,12 COMBOBOX IDC_COMBO1,25,28,221,114,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "MIDI &Channel:",IDC_STATIC,12,48,46,8 + LTEXT "MIDI &Channel:",IDC_STATIC,12,48,84,8 COMBOBOX IDC_COMBO2,12,58,84,114,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "MIDI &Program / Percussion:",IDC_STATIC,102,48,97,8 + LTEXT "MIDI &Program / Percussion:",IDC_STATIC,102,48,144,8 COMBOBOX IDC_COMBO3,102,58,144,114,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Allow instruments to overlap on same &MIDI channel",IDC_CHECK1, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,78,234,10 @@ -2285,11 +2285,11 @@ GROUPBOX "Volume Ramping",IDC_STATIC,6,60,276,72 EDITTEXT IDC_RAMPING_IN,12,72,36,12,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER CONTROL "",IDC_SPIN2,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,42,66,11,14 - LTEXT "s &up",IDC_STATIC,54,72,22,12,SS_CENTERIMAGE + LTEXT "µs &up",IDC_STATIC,54,72,22,12,SS_CENTERIMAGE EDITTEXT IDC_EDIT_VOLRAMP_SAMPLES_UP,90,72,90,12,ES_AUTOHSCROLL | ES_READONLY EDITTEXT IDC_RAMPING_OUT,12,90,36,12,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER CONTROL "",IDC_SPIN3,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,42,84,11,14 - LTEXT "s &down",IDC_STATIC,54,92,28,11,SS_CENTERIMAGE + LTEXT "µs &down",IDC_STATIC,54,92,28,11,SS_CENTERIMAGE EDITTEXT IDC_EDIT_VOLRAMP_SAMPLES_DOWN,90,90,90,12,ES_AUTOHSCROLL | ES_READONLY PUSHBUTTON "&Reset to Defaults",IDC_BUTTON1,12,110,72,14 GROUPBOX "Behaviour",IDC_STATIC,6,150,276,30 @@ -2470,7 +2470,7 @@ IDD_MIDIMACRO, DIALOG BEGIN LEFTMARGIN, 4 - RIGHTMARGIN, 355 + RIGHTMARGIN, 365 TOPMARGIN, 4 BOTTOMMARGIN, 330 END @@ -2716,6 +2716,11 @@ BEGIN 0 END + +IDD_MODDOC_MODTYPE AFX_DIALOG_LAYOUT +BEGIN + 0 +END #ifdef APSTUDIO_INVOKED |