From: <sag...@us...> - 2014-12-31 17:43:49
|
Revision: 4692 http://sourceforge.net/p/modplug/code/4692 Author: saga-games Date: 2014-12-31 17:43:42 +0000 (Wed, 31 Dec 2014) Log Message: ----------- [Imp] Make pattern headers DPI-aware. Modified Paths: -------------- trunk/OpenMPT/mptrack/Draw_pat.cpp trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/View_pat.h Modified: trunk/OpenMPT/mptrack/Draw_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Draw_pat.cpp 2014-12-31 11:35:42 UTC (rev 4691) +++ trunk/OpenMPT/mptrack/Draw_pat.cpp 2014-12-31 17:43:42 UTC (rev 4692) @@ -123,14 +123,22 @@ int oldx = m_szCell.cx, oldy = m_szCell.cy; m_szHeader.cx = ROWHDR_WIDTH; m_szHeader.cy = COLHDR_HEIGHT; + m_szPluginHeader.cx = 0; + m_szPluginHeader.cy = m_Status[psShowPluginNames] ? PLUGNAME_HEIGHT : 0; if(m_Status[psShowVUMeters]) m_szHeader.cy += VUMETERS_HEIGHT; - if(m_Status[psShowPluginNames]) m_szHeader.cy += PLUGNAME_HEIGHT; m_szCell.cx = 4 + pfnt->nEltWidths[0]; if (m_nDetailLevel >= PatternCursor::instrColumn) m_szCell.cx += pfnt->nEltWidths[1]; if (m_nDetailLevel >= PatternCursor::volumeColumn) m_szCell.cx += pfnt->nEltWidths[2]; if (m_nDetailLevel >= PatternCursor::effectColumn) m_szCell.cx += pfnt->nEltWidths[3] + pfnt->nEltWidths[4]; m_szCell.cy = pfnt->nHeight; + const int dpiX = ::GetDeviceCaps(GetDC()->m_hDC, LOGPIXELSX); + const int dpiY = ::GetDeviceCaps(GetDC()->m_hDC, LOGPIXELSY); + m_szHeader.cx = MulDiv(m_szHeader.cx, dpiX, 96); + m_szHeader.cy = MulDiv(m_szHeader.cy, dpiY, 96); + m_szPluginHeader.cy = MulDiv(m_szPluginHeader.cy, dpiY, 96); + m_szHeader.cy += m_szPluginHeader.cy; + if(oldy != m_szCell.cy) { m_Dib.SetSize(m_Dib.GetWidth(), m_szCell.cy); @@ -218,7 +226,7 @@ } if (pt.x < 0) pt.x = 0; - pt.x += ROWHDR_WIDTH; + pt.x += Util::ScalePixels(ROWHDR_WIDTH, GetDC()); pt.y = (cursor.GetRow() - yofs + m_nMidRow) * m_szCell.cy; if (pt.y < 0) pt.y = 0; @@ -459,6 +467,10 @@ ASSERT(pDC); UpdateSizes(); if ((pModDoc = GetDocument()) == nullptr) return; + + const int dpiY = ::GetDeviceCaps(pDC->m_hDC, LOGPIXELSY); + const int vuHeight = MulDiv(VUMETERS_HEIGHT, dpiY, 96); + GetClientRect(&rcClient); hdc = pDC->m_hDC; oldpen = SelectPen(hdc, CMainFrame::penDarkGray); @@ -510,7 +522,7 @@ ::FillRect(hdc, &r, CMainFrame::brushText); } - rect.bottom = rect.top + COLHDR_HEIGHT; + rect.bottom = rect.top + MulDiv(COLHDR_HEIGHT, dpiY, 96); CRect insRect; insRect.SetRect(xpaint, ypaint, xpaint+nColumnWidth / 8 + 3, ypaint + 16); @@ -536,13 +548,13 @@ { OldVUMeters[ncolhdr] = 0; DrawChannelVUMeter(hdc, rect.left + 1, rect.bottom, ncolhdr); - rect.top+=VUMETERS_HEIGHT; - rect.bottom+=VUMETERS_HEIGHT; + rect.top += vuHeight; + rect.bottom += vuHeight; } if(m_Status[psShowPluginNames]) { - rect.top+=PLUGNAME_HEIGHT; - rect.bottom+=PLUGNAME_HEIGHT; + rect.top += m_szPluginHeader.cy; + rect.bottom += m_szPluginHeader.cy; mixPlug = sndFile.ChnSettings[ncolhdr].nMixPlugin; if (mixPlug) wsprintf(s, "%d: %s", mixPlug, (sndFile.m_MixPlugins[mixPlug - 1]).pMixPlugin ? (sndFile.m_MixPlugins[mixPlug - 1]).GetName() : "[empty]"); @@ -1664,11 +1676,12 @@ const bool isPlaying = (pMainFrm->GetFollowSong(pModDoc) == m_hWnd); int x = m_szHeader.cx; CHANNELINDEX nChn = static_cast<CHANNELINDEX>(xofs); + const int yPos = rcClient.top + MulDiv(COLHDR_HEIGHT, ::GetDeviceCaps(hdc, LOGPIXELSY), 96); while ((nChn < pModDoc->GetNumChannels()) && (x < rcClient.right)) { ChnVUMeters[nChn] = (WORD)pnotify->pos[nChn]; if ((!isPlaying) || pnotify->type[Notification::Stop]) ChnVUMeters[nChn] = 0; - DrawChannelVUMeter(hdc, x + 1, rcClient.top + COLHDR_HEIGHT, nChn); + DrawChannelVUMeter(hdc, x + 1, rcClient.top + yPos, nChn); nChn++; x += m_szCell.cx; } Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2014-12-31 11:35:42 UTC (rev 4691) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2014-12-31 17:43:42 UTC (rev 4692) @@ -32,8 +32,6 @@ OPENMPT_NAMESPACE_BEGIN -#define PLUGNAME_HEIGHT 16 //rewbs.patPlugName - #pragma warning(disable:4244) //"conversion from 'type1' to 'type2', possible loss of data" FindReplace CViewPattern::m_findReplace = @@ -495,7 +493,7 @@ xofs = GetXScrollPos(); yofs = GetYScrollPos(); rect.SetRect(m_szHeader.cx, 0, m_szHeader.cx + GetColumnWidth() /*- 2*/, m_szHeader.cy); - plugRect.SetRect(m_szHeader.cx, m_szHeader.cy-PLUGNAME_HEIGHT, m_szHeader.cx + GetColumnWidth() - 2, m_szHeader.cy); //rewbs.patPlugNames + plugRect.SetRect(m_szHeader.cx, m_szHeader.cy - m_szPluginHeader.cy, m_szHeader.cx + GetColumnWidth() - 2, m_szHeader.cy); //rewbs.patPlugNames const CHANNELINDEX nmax = pSndFile->GetNumChannels(); // Checking channel headers @@ -707,7 +705,7 @@ { // Open quick channel properties dialog if we're middle-clicking a channel header. CPoint point(GET_X_LPARAM(pMsg->lParam), GET_Y_LPARAM(pMsg->lParam)); - if(point.y < m_szHeader.cy - (m_Status[psShowPluginNames] ? PLUGNAME_HEIGHT : 0)) + if(point.y < m_szHeader.cy - m_szPluginHeader.cy) { PatternCursor cursor = GetPositionFromPoint(point); if(cursor.GetChannel() < GetDocument()->GetNumChannels()) @@ -1138,7 +1136,7 @@ PatternCursor pointCursor(GetPositionFromPoint(point)); SetCapture(); - if(point.x >= m_szHeader.cx && point.y <= m_szHeader.cy - (m_Status[psShowPluginNames] ? PLUGNAME_HEIGHT : 0)) + if(point.x >= m_szHeader.cx && point.y <= m_szHeader.cy - m_szPluginHeader.cy) { // Click on channel header if (nFlags & MK_CONTROL) @@ -1435,7 +1433,7 @@ //------ Plugin Header Menu --------- : if(m_Status[psShowPluginNames] && - (pt.y > m_szHeader.cy-PLUGNAME_HEIGHT) && (pt.y < m_szHeader.cy)) + (pt.y > m_szHeader.cy - m_szPluginHeader.cy) && (pt.y < m_szHeader.cy)) { BuildPluginCtxMenu(hMenu, nChn, pSndFile); } Modified: trunk/OpenMPT/mptrack/View_pat.h =================================================================== --- trunk/OpenMPT/mptrack/View_pat.h 2014-12-31 11:35:42 UTC (rev 4691) +++ trunk/OpenMPT/mptrack/View_pat.h 2014-12-31 17:43:42 UTC (rev 4692) @@ -159,7 +159,7 @@ CFastBitmap m_Dib; CEditCommand *m_pEditWnd; CPatternGotoDialog *m_pGotoWnd; - SIZE m_szHeader, m_szCell; + CSize m_szHeader, m_szPluginHeader, m_szCell; UINT m_nMidRow, m_nSpacing, m_nAccelChar, m_nLastPlayedRow, m_nLastPlayedOrder; FlagSet<PatternStatus> m_Status; ROWINDEX m_nPlayRow; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |