Browse Source

- dpi updates
- new font settings value, will reset font

sabrogden 8 years ago
parent
commit
ef7ee886b1
18 changed files with 203 additions and 246 deletions
  1. 10 49
      DPI.h
  2. 1 1
      DittoPopupWindow.cpp
  3. 71 52
      DittoWindow.cpp
  4. 1 0
      DittoWindow.h
  5. 1 1
      GdiImageDrawer.cpp
  6. 5 5
      Options.cpp
  7. 5 29
      OptionsGeneral.cpp
  8. 0 1
      OptionsGeneral.h
  9. 30 26
      QListCtrl.cpp
  10. 26 26
      QPasteWnd.cpp
  11. 3 3
      QRCodeViewer.cpp
  12. 6 6
      QuickPaste.cpp
  13. 2 1
      Resource.h
  14. 7 7
      SymbolEdit.cpp
  15. 1 1
      Theme.cpp
  16. 28 32
      ToolTipEx.cpp
  17. 4 4
      ToolTipEx.h
  18. 2 2
      WndEx.cpp

+ 10 - 49
DPI.h

@@ -3,44 +3,19 @@
 class CDPI
 {
 public:
-	CDPI() : _fInitialized(false), _dpiX(96), _dpiY(96) { }
-
-	void Update(int dpi) { _dpiX = dpi; _dpiY = dpi; }
-
-	// Get screen DPI.
-	int GetDPIX() { _Init(); return _dpiX; }
-	int GetDPIY() { _Init(); return _dpiY; }
-
-	// Convert between raw pixels and relative pixels.
-	int ScaleX(int x) { _Init(); return MulDiv(x, _dpiX, 96); }
-	int ScaleY(int y) { _Init(); return MulDiv(y, _dpiY, 96); }
-	int UnscaleX(int x) { _Init(); return MulDiv(x, 96, _dpiX); }
-	int UnscaleY(int y) { _Init(); return MulDiv(y, 96, _dpiY); }
-
-	// Determine the screen dimensions in relative pixels.
-	int ScaledScreenWidth() { return _ScaledSystemMetricX(SM_CXSCREEN); }
-	int ScaledScreenHeight() { return _ScaledSystemMetricY(SM_CYSCREEN); }
-
-	// Scale rectangle from raw pixels to relative pixels.
-	void ScaleRect(__inout RECT *pRect)
-	{
-		pRect->left = ScaleX(pRect->left);
-		pRect->right = ScaleX(pRect->right);
-		pRect->top = ScaleY(pRect->top);
-		pRect->bottom = ScaleY(pRect->bottom);
-	}
-	// Determine if screen resolution meets minimum requirements in relative
-	// pixels.
-	bool IsResolutionAtLeast(int cxMin, int cyMin) 
+	CDPI() : _fInitialized(false), m_dpi(96)
 	{ 
-		return (ScaledScreenWidth() >= cxMin) && (ScaledScreenHeight() >= cyMin); 
 	}
 
-	// Convert a point size (1/72 of an inch) to raw pixels.
-	int PointsToPixels(int pt) { _Init(); return MulDiv(pt, _dpiY, 72); }
+	void Update(int dpi) { m_dpi = dpi; }
 
-	int PixelsToPoints(int px) { _Init(); return MulDiv(px, 72, _dpiY); }
+	// Get screen DPI.
+	int GetDPI() { _Init(); return m_dpi; }
 
+	// Convert between raw pixels and relative pixels.
+	int Scale(int x) { _Init(); return MulDiv(x, m_dpi, 96); }
+	int UnScale(int x) { _Init(); return MulDiv(x, 96, m_dpi); }
+	
 	// Invalidate any cached metrics.
 	void Invalidate() { _fInitialized = false; }
 
@@ -52,28 +27,14 @@ private:
 			HDC hdc = GetDC(NULL);
 			if (hdc)
 			{
-				_dpiX = GetDeviceCaps(hdc, LOGPIXELSX);
-				_dpiY = GetDeviceCaps(hdc, LOGPIXELSY);
+				m_dpi = GetDeviceCaps(hdc, LOGPIXELSX);
 				ReleaseDC(NULL, hdc);
 			}
 			_fInitialized = true;
 		}
 	}
 
-	int _ScaledSystemMetricX(int nIndex) 
-	{ 
-		_Init(); 
-		return MulDiv(GetSystemMetrics(nIndex), 96, _dpiX); 
-	}
-
-	int _ScaledSystemMetricY(int nIndex) 
-	{ 
-		_Init(); 
-		return MulDiv(GetSystemMetrics(nIndex), 96, _dpiY); 
-	}
 private:
 	bool _fInitialized;
-
-	int _dpiX;
-	int _dpiY;
+	int m_dpi;
 };

+ 1 - 1
DittoPopupWindow.cpp

@@ -29,7 +29,7 @@ int CDittoPopupWindow::OnCreate(LPCREATESTRUCT lpCreateStruct)
 
 	CWndEx::SetCaptionOn(CAPTION_TOP, false, g_Opt.m_Theme.GetCaptionSize(), g_Opt.m_Theme.GetCaptionFontSize());
 		
-	m_font.CreateFont(-m_DittoWindow.m_dpi.PointsToPixels(12), 0, 0, 0, 400, 0, 0, 0, DEFAULT_CHARSET, 3, 2, 1, 34, _T("MS Sans Serif"));
+	m_font.CreateFont(-m_DittoWindow.m_dpi.Scale(12), 0, 0, 0, 400, 0, 0, 0, DEFAULT_CHARSET, 3, 2, 1, 34, _T("MS Sans Serif"));
 	m_textLabel.Create(_T("test"), WS_CHILD | WS_VISIBLE, CRect(0, 0, 0, 0), this);
 	m_textLabel.SetFont(&m_font);
 	

+ 71 - 52
DittoWindow.cpp

@@ -2,11 +2,11 @@
 #include ".\dittowindow.h"
 #include "CP_Main.h"
 #include "Options.h"
-
+#include <ShellScalingAPI.h>
 
 CDittoWindow::CDittoWindow(void)
 {
-	m_captionBorderWidth = m_dpi.ScaleX(25);
+	m_captionBorderWidth = m_dpi.Scale(25);
 
 	m_borderSize = 2;
 	m_bMouseOverChevron = false;
@@ -45,36 +45,53 @@ CDittoWindow::~CDittoWindow(void)
 
 void CDittoWindow::DoCreate(CWnd *pWnd)
 {
-	//EnableNonClientDpiScaling(pWnd->m_hWnd);
-
 	HMODULE hUser32 = LoadLibrary(_T("USER32.dll"));
 	if (hUser32)
 	{
+		//windows 10
 		typedef UINT(__stdcall *GetDpiForWindow)(HWND hwnd);
-
 		GetDpiForWindow getDpi = (GetDpiForWindow)GetProcAddress(hUser32, "GetDpiForWindow");
 		if (getDpi)
 		{
 			int dpi = getDpi(pWnd->m_hWnd);
 			m_dpi.Update(dpi);
 		}
+		else
+		{
+			//windows 8
+			auto monitor = MonitorFromWindow(pWnd->m_hWnd, MONITOR_DEFAULTTONEAREST);
+			HMODULE shCore = LoadLibrary(_T("Shcore.dll"));
+			if (shCore)
+			{
+				typedef HRESULT(__stdcall *GetDpiForMonitor)(HMONITOR, UINT, UINT*, UINT*);
+				GetDpiForMonitor monDpi = (GetDpiForMonitor)GetProcAddress(shCore, "GetDpiForMonitor");
+				if (monDpi)
+				{
+					UINT x = 0;
+					UINT y = 0;
+					monDpi(monitor, MDT_EFFECTIVE_DPI, &x, &y);
+
+					m_dpi.Update(x);
+				}
+			}
+		}
 	}	
 
-	m_VertFont.CreateFont(m_dpi.PointsToPixels(18), 0, -900, 0, 400, FALSE, FALSE, 0, DEFAULT_CHARSET,
+	m_VertFont.CreateFont(-m_dpi.Scale(19), 0, -900, 0, 400, FALSE, FALSE, 0, DEFAULT_CHARSET,
 							OUT_DEFAULT_PRECIS,	CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, 
 							DEFAULT_PITCH|FF_SWISS, _T("Segoe UI"));
 
-	m_HorFont.CreateFont(m_dpi.PointsToPixels(18), 0, 0, 0, 500, FALSE, FALSE, 0, DEFAULT_CHARSET,
+	m_HorFont.CreateFont(-m_dpi.Scale(19), 0, 0, 0, 500, FALSE, FALSE, 0, DEFAULT_CHARSET,
 						OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
 						DEFAULT_PITCH|FF_SWISS, _T("Segoe UI"));
 
 	SetTitleTextHeight(pWnd);
 	
-	m_closeButton.LoadStdImageDPI(m_dpi.GetDPIX(), Close_Black_16_16, Close_Black_20_20, Close_Black_24_24, Close_Black_28, Close_Black_32_32, _T("PNG"));
-	m_chevronRightButton.LoadStdImageDPI(m_dpi.GetDPIX(), ChevronRight_Black_16_16, ChevronRight_Black_20_20, ChevronRight_Black_24_24, ChevronRight_Black_28, ChevronRight_Black_32_32, _T("PNG"));
-	m_chevronLeftButton.LoadStdImageDPI(m_dpi.GetDPIX(), ChevronLeft_Black_16_16, ChevronLeft_Black_20_20, ChevronLeft_Black_24_24, ChevronLeft_Black_28, ChevronLeft_Black_32_32, _T("PNG"));
-	m_maximizeButton.LoadStdImageDPI(m_dpi.GetDPIX(), IDB_MAXIMIZE_16_16, maximize_20, maximize_24, maximize_28, maximize_32, _T("PNG"));
-	m_minimizeButton.LoadStdImageDPI(m_dpi.GetDPIX(), minimize_16, minimize_20, minimize_24, minimize_28, minimize_32, _T("PNG"));
+	m_closeButton.LoadStdImageDPI(m_dpi.GetDPI(), Close_Black_16_16, Close_Black_20_20, Close_Black_24_24, Close_Black_28, Close_Black_32_32, _T("PNG"));
+	m_chevronRightButton.LoadStdImageDPI(m_dpi.GetDPI(), ChevronRight_Black_16_16, ChevronRight_Black_20_20, ChevronRight_Black_24_24, ChevronRight_Black_28, ChevronRight_Black_32_32, _T("PNG"));
+	m_chevronLeftButton.LoadStdImageDPI(m_dpi.GetDPI(), ChevronLeft_Black_16_16, ChevronLeft_Black_20_20, ChevronLeft_Black_24_24, ChevronLeft_Black_28, ChevronLeft_Black_32_32, _T("PNG"));
+	m_maximizeButton.LoadStdImageDPI(m_dpi.GetDPI(), IDB_MAXIMIZE_16_16, maximize_20, maximize_24, maximize_28, maximize_32, _T("PNG"));
+	m_minimizeButton.LoadStdImageDPI(m_dpi.GetDPI(), minimize_16, minimize_20, minimize_24, minimize_28, minimize_32, _T("PNG"));
 	//m_windowIcon.LoadStdImageDPI(NewWindowIcon_24_14, NewWindowIcon_30, NewWindowIcon_36, NewWindowIcon_48, _T("PNG"));
 }
 
@@ -192,52 +209,52 @@ int CDittoWindow::IndexToPos(int index, bool horizontal)
 	case 0:
 		if (horizontal)
 		{
-			return m_dpi.ScaleX(24);
+			return m_dpi.Scale(24);
 		}
 		else
 		{
-			return m_dpi.ScaleY(8);
+			return m_dpi.Scale(8);
 		}
 		break;
 	case 1:
 		if (horizontal)
 		{
-			return m_dpi.ScaleX(48);
+			return m_dpi.Scale(48);
 		}
 		else
 		{
-			return m_dpi.ScaleY(32);
+			return m_dpi.Scale(32);
 		}
 		break;
 	case 2:
 
 		if (horizontal)
 		{
-			return m_dpi.ScaleX(72);
+			return m_dpi.Scale(72);
 		}
 		else
 		{
-			return m_dpi.ScaleY(56);
+			return m_dpi.Scale(56);
 		}
 		break;
 	case 3:
 		if (horizontal)
 		{
-			return m_dpi.ScaleX(96);
+			return m_dpi.Scale(96);
 		}
 		else
 		{
-			return m_dpi.ScaleY(80);
+			return m_dpi.Scale(80);
 		}
 		break;
 	case 4:
 		if (horizontal)
 		{
-			return m_dpi.ScaleX(104);
+			return m_dpi.Scale(104);
 		}
 		else
 		{
-			return m_dpi.ScaleY(104);
+			return m_dpi.Scale(104);
 		}
 		break;
 	}
@@ -262,8 +279,8 @@ void CDittoWindow::DoNcPaint(CWnd *pWnd)
 	// Draw the window border
 	CRect rcBorder(0, 0, lWidth, rcFrame.Height());
 
-	int border = m_dpi.ScaleX(2);
-	int widthHeight = m_dpi.ScaleX(16);
+	int border = m_dpi.Scale(2);
+	int widthHeight = m_dpi.Scale(16);
 
 	for (int x = 0; x < border; x++)
 	{
@@ -280,22 +297,22 @@ void CDittoWindow::DoNcPaint(CWnd *pWnd)
 
 	if (m_bDrawClose)
 	{
-		iconArea += m_dpi.ScaleX(32);
+		iconArea += m_dpi.Scale(32);
 		closeIndex = index++;
 	}
 	if (m_bDrawChevron)
 	{
-		iconArea += m_dpi.ScaleX(32);
+		iconArea += m_dpi.Scale(32);
 		chevronIndex = index++;
 	}
 	if (m_bDrawMaximize)
 	{
-		iconArea += m_dpi.ScaleX(32);
+		iconArea += m_dpi.Scale(32);
 		maxIndex = index++;
 	}
 	if (m_bDrawMinimize)
 	{
-		iconArea += m_dpi.ScaleX(32);
+		iconArea += m_dpi.Scale(32);
 		minIndex = index++;
 	}
 	
@@ -309,7 +326,7 @@ void CDittoWindow::DoNcPaint(CWnd *pWnd)
 		rightRect.SetRect(rcBorder.right - (m_captionBorderWidth - border), rcBorder.top, rcBorder.right, rcBorder.top + IndexToPos(index, false));
 		leftRect.SetRect(rcBorder.right - (m_captionBorderWidth - border), rcBorder.top + IndexToPos(index, false), rcBorder.right, rcBorder.bottom);
 		
-		textRect.SetRect(rcBorder.right, rightRect.bottom + m_dpi.ScaleX(10), rcBorder.right - m_captionBorderWidth, rcBorder.bottom - m_dpi.ScaleX(1));
+		textRect.SetRect(rcBorder.right, rightRect.bottom + m_dpi.Scale(10), rcBorder.right - m_captionBorderWidth, rcBorder.bottom - m_dpi.Scale(1));
 
 		int left = rightRect.left;
 		int right = rightRect.right;
@@ -327,7 +344,7 @@ void CDittoWindow::DoNcPaint(CWnd *pWnd)
 		m_crMinimizeBT.SetRect(left, top, right, top + widthHeight);
 
 
-		m_crWindowIconBT.SetRect(rcBorder.right - m_dpi.ScaleX(24), rcBorder.bottom - m_dpi.ScaleX(28), rcBorder.right - m_dpi.ScaleX(2), rcBorder.bottom);
+		m_crWindowIconBT.SetRect(rcBorder.right - m_dpi.Scale(24), rcBorder.bottom - m_dpi.Scale(28), rcBorder.right - m_dpi.Scale(2), rcBorder.bottom);
 
 		bVertical = TRUE;
 	}
@@ -336,7 +353,7 @@ void CDittoWindow::DoNcPaint(CWnd *pWnd)
 		rightRect.SetRect(rcBorder.left, rcBorder.top, rcBorder.left + m_captionBorderWidth - border, rcBorder.top + IndexToPos(index, false));
 		leftRect.SetRect(rcBorder.left, rcBorder.top + IndexToPos(index, false), rcBorder.left + m_captionBorderWidth - border, rcBorder.bottom);
 
-		textRect.SetRect(rcBorder.left + m_captionBorderWidth - m_dpi.ScaleX(0), rightRect.bottom + m_dpi.ScaleX(10), rcBorder.left - m_dpi.ScaleX(5), rcBorder.bottom - m_dpi.ScaleX(1));
+		textRect.SetRect(rcBorder.left + m_captionBorderWidth - m_dpi.Scale(0), rightRect.bottom + m_dpi.Scale(10), rcBorder.left - m_dpi.Scale(5), rcBorder.bottom - m_dpi.Scale(1));
 
 		int left = rightRect.left;
 		int right = rightRect.right;
@@ -353,13 +370,13 @@ void CDittoWindow::DoNcPaint(CWnd *pWnd)
 		top = IndexToPos(minIndex, false);
 		m_crMinimizeBT.SetRect(left, top, right, top + widthHeight);
 
-		m_crWindowIconBT.SetRect(rcBorder.left + m_dpi.ScaleX(0), rcBorder.bottom - m_dpi.ScaleX(28), rcBorder.left + m_dpi.ScaleX(25), rcBorder.bottom);
+		m_crWindowIconBT.SetRect(rcBorder.left + m_dpi.Scale(0), rcBorder.bottom - m_dpi.Scale(28), rcBorder.left + m_dpi.Scale(25), rcBorder.bottom);
 
 		bVertical = TRUE;
 	}
 	if (m_captionPosition == CAPTION_TOP)
 	{
-		leftRect.SetRect(rcBorder.left, rcBorder.top, rcBorder.right - IndexToPos(index-1, true)- m_dpi.ScaleX(8), m_captionBorderWidth);
+		leftRect.SetRect(rcBorder.left, rcBorder.top, rcBorder.right - IndexToPos(index-1, true)- m_dpi.Scale(8), m_captionBorderWidth);
 		rightRect.SetRect(leftRect.right, rcBorder.top, rcBorder.right, m_captionBorderWidth);
 
 		textRect.SetRect(leftRect.right, leftRect.top, leftRect.right, leftRect.bottom);
@@ -378,14 +395,14 @@ void CDittoWindow::DoNcPaint(CWnd *pWnd)
 		
 		left = rcBorder.right - IndexToPos(minIndex, true);
 		m_crMinimizeBT.SetRect(left, top, left + widthHeight, bottom);
-				left = rcBorder.left + m_dpi.ScaleX(10);
-		m_crWindowIconBT.SetRect(left, top, left + m_dpi.ScaleX(24), bottom);
+				left = rcBorder.left + m_dpi.Scale(10);
+		m_crWindowIconBT.SetRect(left, top, left + m_dpi.Scale(24), bottom);
 		
 		bVertical = FALSE;
 	}
 	if (m_captionPosition == CAPTION_BOTTOM)
 	{
-		leftRect.SetRect(rcBorder.left, rcBorder.bottom- m_captionBorderWidth - border, rcBorder.right - IndexToPos(index - 1, true) - m_dpi.ScaleX(8), rcBorder.bottom);
+		leftRect.SetRect(rcBorder.left, rcBorder.bottom- m_captionBorderWidth - border, rcBorder.right - IndexToPos(index - 1, true) - m_dpi.Scale(8), rcBorder.bottom);
 		rightRect.SetRect(leftRect.right, rcBorder.bottom - m_captionBorderWidth - border, rcBorder.right, rcBorder.bottom);
 
 		textRect.SetRect(leftRect.right, leftRect.top, leftRect.right, leftRect.bottom);
@@ -405,8 +422,8 @@ void CDittoWindow::DoNcPaint(CWnd *pWnd)
 		left = rcBorder.right - IndexToPos(minIndex, true);
 		m_crMinimizeBT.SetRect(left, top, left + widthHeight, bottom);
 
-		left = rcBorder.left + m_dpi.ScaleX(10);
-		m_crWindowIconBT.SetRect(left, top, left + m_dpi.ScaleX(24), bottom);
+		left = rcBorder.left + m_dpi.Scale(10);
+		m_crWindowIconBT.SetRect(left, top, left + m_dpi.Scale(24), bottom);
 
 		bVertical = FALSE;
 	}
@@ -442,7 +459,7 @@ void CDittoWindow::DoNcPaint(CWnd *pWnd)
 	{
 		CRect size(0, 0, 0, 0);
 		dc.DrawText(csText, size, DT_CALCRECT);
-		textRect.left = textRect.right - size.Width() - m_dpi.ScaleX(10);
+		textRect.left = textRect.right - size.Width() - m_dpi.Scale(10);
 
 		flags |= DT_VCENTER;
 	}
@@ -455,7 +472,7 @@ void CDittoWindow::DoNcPaint(CWnd *pWnd)
 		int offset = rectWidth / 2 - m_titleTextHeight / 2;
 		//textRect.right += 30;
 		//I don't understand where the 4 is coming from but it's always 4 pixals from the right so adjust for this
-		textRect.left -= (offset - m_dpi.ScaleX(4));		
+		textRect.left -= (offset - m_dpi.Scale(4));		
 
 		int k = 0;
 	}
@@ -726,13 +743,15 @@ bool CDittoWindow::DoPreTranslateMessage(MSG* pMsg)
 
 void CDittoWindow::SetCaptionOn(CWnd *pWnd, int nPos, bool bOnstartup, int captionSize, int captionFontSize)
 {
+	m_captionFontSize = captionFontSize;
+
 	m_VertFont.Detach();
-	m_VertFont.CreateFont(m_dpi.PointsToPixels(captionFontSize), 0, -900, 0, 400, FALSE, FALSE, 0, DEFAULT_CHARSET,
+	m_VertFont.CreateFont(-m_dpi.Scale(captionFontSize), 0, -900, 0, 400, FALSE, FALSE, 0, DEFAULT_CHARSET,
 		OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
 		DEFAULT_PITCH | FF_SWISS, _T("Segoe UI"));
 
 	m_HorFont.Detach();
-	m_HorFont.CreateFont(m_dpi.PointsToPixels(captionFontSize), 0, 0, 0, 500, FALSE, FALSE, 0, DEFAULT_CHARSET,
+	m_HorFont.CreateFont(-m_dpi.Scale(captionFontSize), 0, 0, 0, 500, FALSE, FALSE, 0, DEFAULT_CHARSET,
 		OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
 		DEFAULT_PITCH | FF_SWISS, _T("Segoe UI"));
 
@@ -741,7 +760,7 @@ void CDittoWindow::SetCaptionOn(CWnd *pWnd, int nPos, bool bOnstartup, int capti
 	m_captionPosition = nPos;
 
 	int oldWidth = m_captionBorderWidth;
-	m_captionBorderWidth = m_dpi.ScaleX(captionSize);	
+	m_captionBorderWidth = m_dpi.Scale(captionSize);	
 		
 	if(!bOnstartup)
 	{
@@ -894,34 +913,34 @@ void CDittoWindow::OnDpiChanged(CWnd *pParent, int dpi)
 {
 	m_dpi.Update(dpi);
 
-	m_captionBorderWidth = m_dpi.ScaleX(25);
-	m_borderSize = m_dpi.ScaleX(2);
+	m_captionBorderWidth = m_dpi.Scale(25);
+	m_borderSize = m_dpi.Scale(2);
 
 	m_VertFont.Detach();
 	m_HorFont.Detach();
 
-	m_VertFont.CreateFont(m_dpi.PointsToPixels(18), 0, -900, 0, 400, FALSE, FALSE, 0, DEFAULT_CHARSET,
+	m_VertFont.CreateFont(-m_dpi.Scale(m_captionFontSize), 0, -900, 0, 400, FALSE, FALSE, 0, DEFAULT_CHARSET,
 		OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
 		DEFAULT_PITCH | FF_SWISS, _T("Segoe UI"));
 
-	m_HorFont.CreateFont(m_dpi.PointsToPixels(18), 0, 0, 0, 500, FALSE, FALSE, 0, DEFAULT_CHARSET,
+	m_HorFont.CreateFont(-m_dpi.Scale(m_captionFontSize), 0, 0, 0, 500, FALSE, FALSE, 0, DEFAULT_CHARSET,
 		OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
 		DEFAULT_PITCH | FF_SWISS, _T("Segoe UI"));
 
 	m_closeButton.Reset();
-	m_closeButton.LoadStdImageDPI(m_dpi.GetDPIX(), Close_Black_16_16, Close_Black_20_20, Close_Black_24_24, Close_Black_28, Close_Black_32_32, _T("PNG"));
+	m_closeButton.LoadStdImageDPI(m_dpi.GetDPI(), Close_Black_16_16, Close_Black_20_20, Close_Black_24_24, Close_Black_28, Close_Black_32_32, _T("PNG"));
 
 	m_chevronRightButton.Reset();
-	m_chevronRightButton.LoadStdImageDPI(m_dpi.GetDPIX(), ChevronRight_Black_16_16, ChevronRight_Black_20_20, ChevronRight_Black_24_24, ChevronRight_Black_28, ChevronRight_Black_32_32, _T("PNG"));
+	m_chevronRightButton.LoadStdImageDPI(m_dpi.GetDPI(), ChevronRight_Black_16_16, ChevronRight_Black_20_20, ChevronRight_Black_24_24, ChevronRight_Black_28, ChevronRight_Black_32_32, _T("PNG"));
 	
 	m_chevronLeftButton.Reset();
-	m_chevronLeftButton.LoadStdImageDPI(m_dpi.GetDPIX(), ChevronLeft_Black_16_16, ChevronLeft_Black_20_20, ChevronLeft_Black_24_24, ChevronLeft_Black_28, ChevronLeft_Black_32_32, _T("PNG"));
+	m_chevronLeftButton.LoadStdImageDPI(m_dpi.GetDPI(), ChevronLeft_Black_16_16, ChevronLeft_Black_20_20, ChevronLeft_Black_24_24, ChevronLeft_Black_28, ChevronLeft_Black_32_32, _T("PNG"));
 
 	m_maximizeButton.Reset();
-	m_maximizeButton.LoadStdImageDPI(m_dpi.GetDPIX(), IDB_MAXIMIZE_16_16, maximize_20, maximize_24, maximize_28, maximize_32, _T("PNG"));
+	m_maximizeButton.LoadStdImageDPI(m_dpi.GetDPI(), IDB_MAXIMIZE_16_16, maximize_20, maximize_24, maximize_28, maximize_32, _T("PNG"));
 
 	m_minimizeButton.Reset();
-	m_minimizeButton.LoadStdImageDPI(m_dpi.GetDPIX(), minimize_16, minimize_20, minimize_24, minimize_28, minimize_32, _T("PNG"));
+	m_minimizeButton.LoadStdImageDPI(m_dpi.GetDPI(), minimize_16, minimize_20, minimize_24, minimize_28, minimize_32, _T("PNG"));
 
 	SetTitleTextHeight(pParent);
 

+ 1 - 0
DittoWindow.h

@@ -79,6 +79,7 @@ public:
 	bool m_useCustomWindowTitle;
 
 	int m_captionBorderWidth;
+	int m_captionFontSize;
 
 	int m_captionPosition;
 	int m_borderSize;

+ 1 - 1
GdiImageDrawer.cpp

@@ -97,7 +97,7 @@ void CGdiImageDrawer::Draw(CDC* pScreenDC, CDPI &dpi, CWnd *pWnd, int posX, int
 	//Draw the png file
 	if (mouseDown)
 	{
-		int one = dpi.ScaleX(1);
+		int one = dpi.Scale(1);
 		posX += one;
 		posY += one;
 	}

+ 5 - 5
Options.cpp

@@ -1386,7 +1386,7 @@ BOOL CGetSetOptions::GetFont(LOGFONT &font)
 {
 	if(m_bFromIni && !m_bInConversion)
 	{
-		GetProfileFont("DisplayFont5", font);
+		GetProfileFont("DisplayFont6", font);
 
 		//Return true if there is a font name
 		//other wise load the default font below
@@ -1398,7 +1398,7 @@ BOOL CGetSetOptions::GetFont(LOGFONT &font)
 	else
 	{
 		DWORD dwLength = 0;
-		LPVOID lpVoid = GetProfileData("DisplayFont5", dwLength);
+		LPVOID lpVoid = GetProfileData("DisplayFont6", dwLength);
 		if(lpVoid)
 		{
 			if(sizeof(font) == dwLength)
@@ -1419,7 +1419,7 @@ BOOL CGetSetOptions::GetFont(LOGFONT &font)
 	}
 
 	ZeroMemory(&font, sizeof(font));
-	font.lfHeight = -10;
+	font.lfHeight = -13;
 	font.lfWeight = 400;
 	font.lfCharSet = 1;
 	STRCPY(font.lfFaceName, _T("Segoe UI"));
@@ -1430,11 +1430,11 @@ void CGetSetOptions::SetFont(LOGFONT &font)
 {
 	if(m_bFromIni)
 	{
-		SetProfileFont("DisplayFont5", font);
+		SetProfileFont("DisplayFont6", font);
 	}
 	else
 	{	
-		SetProfileData("DisplayFont5", &font, sizeof(LOGFONT));
+		SetProfileData("DisplayFont6", &font, sizeof(LOGFONT));
 	}
 }
 

+ 5 - 29
OptionsGeneral.cpp

@@ -120,16 +120,7 @@ BOOL COptionsGeneral::OnInitDialog()
 	CString csPath = CGetSetOptions::GetDBPath(false);
 	m_ePath.SetWindowText(csPath);
 	
-	if (CGetSetOptions::GetFont(m_LogFont))
-	{
-		m_Font.CreateFontIndirect(&m_LogFont);
-		m_btFont.SetFont(&m_Font);
-	}
-	else
-	{
-		CFont *ft = m_btFont.GetFont();
-		ft->GetLogFont(&m_LogFont);
-	}
+	CGetSetOptions::GetFont(m_LogFont);	
 
 	CString cs;
 	cs.Format(_T("Font - %s (%d)"), m_LogFont.lfFaceName, GetFontSize(m_hWnd, m_LogFont));
@@ -536,26 +527,17 @@ void COptionsGeneral::OnBnClickedButtonTheme()
 
 void COptionsGeneral::OnBnClickedButtonDefaultFault()
 {
-	CFont *ft = m_btDefaultButton.GetFont();
-	ft->GetLogFont(&m_LogFont);
 
 	memset(&m_LogFont, 0, sizeof(m_LogFont));
 
-	m_LogFont.lfHeight = -10;
+	m_LogFont.lfHeight = -13;
 	m_LogFont.lfWeight = 400;
 	m_LogFont.lfCharSet = 1;
 	STRCPY(m_LogFont.lfFaceName, _T("Segoe UI"));
-
-	m_Font.DeleteObject();
-	m_Font.CreateFontIndirect(&m_LogFont);
-
-	m_btFont.SetFont(&m_Font);
-
+		
 	CString cs;
 	cs.Format(_T("Font - %s (%d)"), m_LogFont.lfFaceName, GetFontSize(m_hWnd, m_LogFont));
-	m_btFont.SetWindowText(cs);
-
-	this->SetFont(&m_Font);
+	m_btFont.SetWindowText(cs);	
 }
 
 int COptionsGeneral::GetFontSize(HWND hWnd, const LOGFONT& lf)
@@ -586,14 +568,8 @@ void COptionsGeneral::OnBnClickedButtonFont()
 	CFontDialog dlg(&m_LogFont, (CF_TTONLY | CF_SCREENFONTS), 0, this);
 	if (dlg.DoModal() == IDOK)
 	{
-		m_Font.DeleteObject();
-
 		memcpy(&m_LogFont, dlg.m_cf.lpLogFont, sizeof(LOGFONT));
-
-		m_Font.CreateFontIndirect(&m_LogFont);
-
-		m_btFont.SetFont(&m_Font);
-
+				
 		CString cs;
 		cs.Format(_T("Font - %s (%d)"), m_LogFont.lfFaceName, GetFontSize(m_hWnd, m_LogFont));
 		m_btFont.SetWindowText(cs);

+ 0 - 1
OptionsGeneral.h

@@ -68,7 +68,6 @@ protected:
 	COptionsSheet *m_pParent;
 	CString m_csTitle;
 	CBrush m_brush;
-	CFont m_Font;
 	LOGFONT m_LogFont;
 	CFont m_envVarFont;
 	

+ 30 - 26
QListCtrl.cpp

@@ -276,7 +276,7 @@ void CQListCtrl::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
 	GetTextMetrics(hDC, &tm);
 	if (m_windowDpi != NULL)
 	{
-		lpMeasureItemStruct->itemHeight = ((tm.tmHeight + tm.tmExternalLeading) * m_linesPerRow) + m_windowDpi->ScaleX(ROW_BOTTOM_BORDER);
+		lpMeasureItemStruct->itemHeight = ((tm.tmHeight + tm.tmExternalLeading) * m_linesPerRow) + m_windowDpi->Scale(ROW_BOTTOM_BORDER);
 		m_rowHeight = lpMeasureItemStruct->itemHeight;
 	}
 	SelectObject(hDC, hFontOld);
@@ -377,11 +377,11 @@ void CQListCtrl::OnCustomdrawList(NMHDR* pNMHDR, LRESULT* pResult)
 		{
 			CRect pastedRect(rcItem);
 			pastedRect.left++;
-			pastedRect.right = rcItem.left + m_windowDpi->ScaleX(3);
+			pastedRect.right = rcItem.left + m_windowDpi->Scale(3);
 				
 			pDC->FillSolidRect(pastedRect, g_Opt.m_Theme.ClipPastedColor());
 
-			rcText.left += m_windowDpi->ScaleX(4);
+			rcText.left += m_windowDpi->Scale(4);
 		}
 		        		
 		// set firstTenNum to the first ten number (1-10) corresponding to
@@ -391,7 +391,7 @@ void CQListCtrl::OnCustomdrawList(NMHDR* pNMHDR, LRESULT* pResult)
 		
 		if( m_bShowTextForFirstTenHotKeys && firstTenNum > 0 )
 		{
-			rcText.left += m_windowDpi->ScaleX(12);
+			rcText.left += m_windowDpi->Scale(12);
 		}
 		
 		bool drawInGroupIcon = true;
@@ -411,23 +411,23 @@ void CQListCtrl::OnCustomdrawList(NMHDR* pNMHDR, LRESULT* pResult)
 			if(strSymbols.Find(_T("<group>")) >= 0) //group 
 			{
 				m_groupFolder.Draw(pDC, *m_windowDpi, this, rcText.left, rcText.top, false, false);
-				rcText.left += m_groupFolder.ImageWidth() + m_windowDpi->ScaleX(2);
+				rcText.left += m_groupFolder.ImageWidth() + m_windowDpi->Scale(2);
 			}
 			if (strSymbols.Find(_T("<noautodelete>")) >= 0) //don't auto delete
 			{
 				m_dontDeleteImage.Draw(pDC, *m_windowDpi, this, rcText.left, rcText.top, false, false);
-				rcText.left += m_dontDeleteImage.ImageWidth() + m_windowDpi->ScaleX(2);
+				rcText.left += m_dontDeleteImage.ImageWidth() + m_windowDpi->Scale(2);
 			}
 			if (strSymbols.Find(_T("<shortcut>")) >= 0) // has shortcut
 			{
 				m_shortCutImage.Draw(pDC, *m_windowDpi, this, rcText.left, rcText.top, false, false);
-				rcText.left += m_shortCutImage.ImageWidth() + m_windowDpi->ScaleX(2);
+				rcText.left += m_shortCutImage.ImageWidth() + m_windowDpi->Scale(2);
 			}
 			if (drawInGroupIcon &&
 				strSymbols.Find(_T("<ingroup>")) >= 0) // in group
 			{
 				m_inFolderImage.Draw(pDC, *m_windowDpi, this, rcText.left, rcText.top, false, false);
-				rcText.left += m_inFolderImage.ImageWidth() + m_windowDpi->ScaleX(2);
+				rcText.left += m_inFolderImage.ImageWidth() + m_windowDpi->Scale(2);
 			}
 			if (strSymbols.Find(_T("<qpastetext>")) >= 0) // has quick paste text
 			{
@@ -435,7 +435,7 @@ void CQListCtrl::OnCustomdrawList(NMHDR* pNMHDR, LRESULT* pResult)
 			if (strSymbols.Find(_T("<sticky>")) >= 0) //sticky clip
 			{
 				m_stickyImage.Draw(pDC, *m_windowDpi, this, rcText.left, rcText.top, false, false);
-				rcText.left += m_stickyImage.ImageWidth() + m_windowDpi->ScaleX(2);
+				rcText.left += m_stickyImage.ImageWidth() + m_windowDpi->Scale(2);
 			}			
 		}
 		
@@ -476,9 +476,9 @@ void CQListCtrl::OnCustomdrawList(NMHDR* pNMHDR, LRESULT* pResult)
 			if (m_showIfClipWasPasted)
 				extraFromClipWasPaste = 3;
 			
-			crHotKey.right = crHotKey.left + m_windowDpi->ScaleX(11);
-			crHotKey.left += m_windowDpi->ScaleX(1 + extraFromClipWasPaste);
-			crHotKey.top += m_windowDpi->ScaleX(1 + extraFromClipWasPaste);
+			crHotKey.right = crHotKey.left + m_windowDpi->Scale(11);
+			crHotKey.left += m_windowDpi->Scale(1 + extraFromClipWasPaste);
+			crHotKey.top += m_windowDpi->Scale(1 + extraFromClipWasPaste);
 			
 			HFONT hOldFont = (HFONT)pDC->SelectObject(m_SmallFont);
 			COLORREF localOldTextColor = pDC->SetTextColor(g_Opt.m_Theme.ListSmallQuickPasteIndexColor());
@@ -488,8 +488,8 @@ void CQListCtrl::OnCustomdrawList(NMHDR* pNMHDR, LRESULT* pResult)
 						
 			pDC->DrawText(cs, crHotKey, DT_BOTTOM);
 			
-			pDC->MoveTo(CPoint(rcItem.left + m_windowDpi->ScaleX(8 + extraFromClipWasPaste), rcItem.top));
-			pDC->LineTo(CPoint(rcItem.left + m_windowDpi->ScaleX(8 + extraFromClipWasPaste), rcItem.bottom));
+			pDC->MoveTo(CPoint(rcItem.left + m_windowDpi->Scale(8 + extraFromClipWasPaste), rcItem.top));
+			pDC->LineTo(CPoint(rcItem.left + m_windowDpi->Scale(8 + extraFromClipWasPaste), rcItem.bottom));
 			
 			pDC->SelectObject(hOldFont);
 			pDC->SetTextColor(localOldTextColor);
@@ -1005,6 +1005,10 @@ bool CQListCtrl::ShowFullDescription(bool bFromAuto, bool fromNextPrev)
 		m_pToolTip->SetClipId(clipId);
 		m_pToolTip->SetClipRow(clipRow);
 		m_pToolTip->SetSearchText(m_searchText);
+		LOGFONT lf;
+		m_Font.GetLogFont(&lf);
+		lf.lfHeight = m_windowDpi->UnScale(lf.lfHeight);
+		m_pToolTip->SetLogFont(&lf, FALSE);
 
 		m_pToolTip->SetClipData(_T(""));
 		m_pToolTip->SetToolTipText(_T(""));  
@@ -1416,8 +1420,8 @@ void CQListCtrl::OnTimer(UINT_PTR nIDEvent)
 				this->GetWindowRect(&crWindow);
 
 				//Adjust for the v-scroll bar being off of the screen
-				crWindow.right -= m_windowDpi->ScaleX(GetSystemMetrics(SM_CXVSCROLL));
-				crWindow.bottom -= m_windowDpi->ScaleX(::GetSystemMetrics(SM_CXHSCROLL));
+				crWindow.right -= m_windowDpi->Scale(GetSystemMetrics(SM_CXVSCROLL));
+				crWindow.bottom -= m_windowDpi->Scale(::GetSystemMetrics(SM_CXHSCROLL));
 
 				//Check and see if we are still in the cursor area
 				if(MouseInScrollBarArea(crWindow, cursorPos))
@@ -1498,8 +1502,8 @@ void CQListCtrl::OnMouseMove(UINT nFlags, CPoint point)
 		this->GetWindowRect(&crWindow);
 		ScreenToClient(&crWindow);
 
-		crWindow.right -= m_windowDpi->ScaleX(::GetSystemMetrics(SM_CXVSCROLL));
-		crWindow.bottom -= m_windowDpi->ScaleX(::GetSystemMetrics(SM_CXHSCROLL));
+		crWindow.right -= m_windowDpi->Scale(::GetSystemMetrics(SM_CXVSCROLL));
+		crWindow.bottom -= m_windowDpi->Scale(::GetSystemMetrics(SM_CXHSCROLL));
 
 		if(MouseInScrollBarArea(crWindow, point))
 		{
@@ -1528,8 +1532,8 @@ bool CQListCtrl::MouseInScrollBarArea(CRect crWindow, CPoint point)
 	CRect crRight(crWindow);
 	CRect crBottom(crWindow);	
 
-	crRight.left = crRight.right - m_windowDpi->ScaleX(::GetSystemMetrics(SM_CXVSCROLL));
-	crBottom.top = crBottom.bottom - m_windowDpi->ScaleY(::GetSystemMetrics(SM_CYHSCROLL));
+	crRight.left = crRight.right - m_windowDpi->Scale(::GetSystemMetrics(SM_CXVSCROLL));
+	crBottom.top = crBottom.bottom - m_windowDpi->Scale(::GetSystemMetrics(SM_CYHSCROLL));
 
 	/*CString cs;
 	cs.Format(_T("point.x: %d, Width: %d, Height: %d\n"), point.x, crWindow.Width(), crWindow.Height());
@@ -1645,25 +1649,25 @@ void CQListCtrl::SetDpiInfo(CDPI *dpi)
 	m_windowDpi = dpi;
 
 	m_groupFolder.Reset();
-	m_groupFolder.LoadStdImageDPI(m_windowDpi->GetDPIX(), IDB_OPEN_FOLDER_16_16, IDB_OPEN_FOLDER_20_20, IDB_OPEN_FOLDER_24_24, IDB_OPEN_FOLDER_24_24, IDB_OPEN_FOLDER_32_32, _T("PNG"));
+	m_groupFolder.LoadStdImageDPI(m_windowDpi->GetDPI(), IDB_OPEN_FOLDER_16_16, IDB_OPEN_FOLDER_20_20, IDB_OPEN_FOLDER_24_24, IDB_OPEN_FOLDER_24_24, IDB_OPEN_FOLDER_32_32, _T("PNG"));
 
 	m_dontDeleteImage.Reset();
-	m_dontDeleteImage.LoadStdImageDPI(m_windowDpi->GetDPIX(), IDB_YELLOW_STAR_16_16, IDB_YELLOW_STAR_20_20, IDB_YELLOW_STAR_24_24, IDB_YELLOW_STAR_24_24, IDB_YELLOW_STAR_32_32, _T("PNG"));
+	m_dontDeleteImage.LoadStdImageDPI(m_windowDpi->GetDPI(), IDB_YELLOW_STAR_16_16, IDB_YELLOW_STAR_20_20, IDB_YELLOW_STAR_24_24, IDB_YELLOW_STAR_24_24, IDB_YELLOW_STAR_32_32, _T("PNG"));
 
 	m_inFolderImage.Reset();
-	m_inFolderImage.LoadStdImageDPI(m_windowDpi->GetDPIX(), IDB_IN_FOLDER_16_16, IDB_IN_FOLDER_20_20, IDB_IN_FOLDER_24_24, IDB_IN_FOLDER_24_24, IDB_IN_FOLDER_32_32, _T("PNG"));
+	m_inFolderImage.LoadStdImageDPI(m_windowDpi->GetDPI(), IDB_IN_FOLDER_16_16, IDB_IN_FOLDER_20_20, IDB_IN_FOLDER_24_24, IDB_IN_FOLDER_24_24, IDB_IN_FOLDER_32_32, _T("PNG"));
 
 	m_shortCutImage.Reset();
-	m_shortCutImage.LoadStdImageDPI(m_windowDpi->GetDPIX(), IDB_KEY_16_16, IDB_KEY_20_20, IDB_KEY_24_24, IDB_KEY_24_24, IDB_KEY_32_32, _T("PNG"));
+	m_shortCutImage.LoadStdImageDPI(m_windowDpi->GetDPI(), IDB_KEY_16_16, IDB_KEY_20_20, IDB_KEY_24_24, IDB_KEY_24_24, IDB_KEY_32_32, _T("PNG"));
 
 	m_stickyImage.Reset();
-	m_stickyImage.LoadStdImageDPI(m_windowDpi->GetDPIX(), IDB_STICKY_16_16, IDB_STICKY_20_20, IDB_STICKY_24_24, IDB_STICKY_24_24, IDB_STICKY_32_32, _T("PNG"));
+	m_stickyImage.LoadStdImageDPI(m_windowDpi->GetDPI(), IDB_STICKY_16_16, IDB_STICKY_20_20, IDB_STICKY_24_24, IDB_STICKY_24_24, IDB_STICKY_32_32, _T("PNG"));
 
 	DeleteObject(m_SmallFont);
 
 	LOGFONT lf;
 
-	lf.lfHeight = m_windowDpi->PointsToPixels(-7);
+	lf.lfHeight = m_windowDpi->Scale(-7);
 	lf.lfWidth = 0;
 	lf.lfEscapement = 0;
 	lf.lfOrientation = 0;

+ 26 - 26
QPasteWnd.cpp

@@ -341,10 +341,10 @@ int CQPasteWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
 	SetSearchImages();
 	m_search.LoadPastSearches(CGetSetOptions::GetPastSearchXml());
 
-	CRect rcEditArea(m_DittoWindow.m_dpi.ScaleX(4), m_DittoWindow.m_dpi.ScaleY(2), m_DittoWindow.m_dpi.ScaleX(20), m_DittoWindow.m_dpi.ScaleY(2));
+	CRect rcEditArea(m_DittoWindow.m_dpi.Scale(4), m_DittoWindow.m_dpi.Scale(2), m_DittoWindow.m_dpi.Scale(20), m_DittoWindow.m_dpi.Scale(2));
 	//m_search.SetBorder(rcEditArea);
 
-	CRect rcCloseArea(m_DittoWindow.m_dpi.ScaleX(85), m_DittoWindow.m_dpi.ScaleY(3), m_DittoWindow.m_dpi.ScaleX(99), m_DittoWindow.m_dpi.ScaleY(15));
+	CRect rcCloseArea(m_DittoWindow.m_dpi.Scale(85), m_DittoWindow.m_dpi.Scale(3), m_DittoWindow.m_dpi.Scale(99), m_DittoWindow.m_dpi.Scale(15));
 	//m_search.SetButtonArea(rcCloseArea);
 
     // Create the header control
@@ -365,18 +365,18 @@ int CQPasteWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
 
     m_ShowGroupsFolderBottom.Create(NULL, WS_CHILD | BS_OWNERDRAW | WS_TABSTOP, CRect(0, 0, 0, 0), this, ID_SHOW_GROUPS_BOTTOM);
     //m_ShowGroupsFolderBottom.LoadBitmaps(IDB_CLOSED_FOLDER, IDB_CLOSED_FOLDER_PRESSED, IDB_CLOSED_FOLDER_FOCUSED);
-	m_ShowGroupsFolderBottom.LoadStdImageDPI(m_DittoWindow.m_dpi.GetDPIX(), open_folder_24, open_folder_30, open_folder_36, open_folder_42, open_folder_48, _T("PNG"));
+	m_ShowGroupsFolderBottom.LoadStdImageDPI(m_DittoWindow.m_dpi.GetDPI(), open_folder_24, open_folder_30, open_folder_36, open_folder_42, open_folder_48, _T("PNG"));
     m_ShowGroupsFolderBottom.ShowWindow(SW_SHOW);
 	m_ShowGroupsFolderBottom.SetToolTipText(theApp.m_Language.GetString(_T("GroupsTooltip"), _T("Groups")));
 	m_ShowGroupsFolderBottom.ModifyStyle(WS_TABSTOP, 0);
 	
     m_BackButton.Create(NULL, WS_CHILD | BS_OWNERDRAW | WS_TABSTOP, CRect(0, 0, 0, 0), this, ID_BACK_BUTTON);
-	m_BackButton.LoadStdImageDPI(m_DittoWindow.m_dpi.GetDPIX(), return_16, return_20, return_24, return_28, return_32, _T("PNG"));
+	m_BackButton.LoadStdImageDPI(m_DittoWindow.m_dpi.GetDPI(), return_16, return_20, return_24, return_28, return_32, _T("PNG"));
 	m_BackButton.ModifyStyle(WS_TABSTOP, 0);
     m_BackButton.ShowWindow(SW_SHOW);
 
 	m_systemMenu.Create(NULL, WS_CHILD | BS_OWNERDRAW | WS_TABSTOP, CRect(0, 0, 0, 0), this, ID_SYSTEM_BUTTON);
-	m_systemMenu.LoadStdImageDPI(m_DittoWindow.m_dpi.GetDPIX(), system_menu_2_24, system_menu_2_30, system_menu_2_36, system_menu_2_42, system_menu_2_48, _T("PNG"));
+	m_systemMenu.LoadStdImageDPI(m_DittoWindow.m_dpi.GetDPI(), system_menu_2_24, system_menu_2_30, system_menu_2_36, system_menu_2_42, system_menu_2_48, _T("PNG"));
 	m_systemMenu.ModifyStyle(WS_TABSTOP, 0);
 	m_systemMenu.ShowWindow(SW_SHOW);
 		
@@ -545,11 +545,11 @@ void CQPasteWnd::SetSearchImages()
 {
 	//int iSourceImageDPIToUse = 96; // We will assume 96 by default.
 
-	//if (m_DittoWindow.m_dpi.GetDPIX() > 144) 
+	//if (m_DittoWindow.m_dpi.GetDPI() > 144) 
 	//	iSourceImageDPIToUse = 192;
-	//else if (m_DittoWindow.m_dpi.GetDPIX() > 120) 
+	//else if (m_DittoWindow.m_dpi.GetDPI() > 120) 
 	//	iSourceImageDPIToUse = 144;
-	//else if (m_DittoWindow.m_dpi.GetDPIX() > 96) 
+	//else if (m_DittoWindow.m_dpi.GetDPI() > 96) 
 	//	iSourceImageDPIToUse = 120;
 
 	//// Now select the right resource to load.
@@ -599,10 +599,10 @@ void CQPasteWnd::MoveControls()
         m_stGroup.ShowWindow(SW_SHOW);
         m_BackButton.ShowWindow(SW_SHOW);
 
-		m_BackButton.MoveWindow(m_DittoWindow.m_dpi.ScaleX(2), m_DittoWindow.m_dpi.ScaleY(2), m_DittoWindow.m_dpi.ScaleX(16), m_DittoWindow.m_dpi.ScaleY(16));
-		m_stGroup.MoveWindow(m_DittoWindow.m_dpi.ScaleX(24), m_DittoWindow.m_dpi.ScaleY(2), cx - m_DittoWindow.m_dpi.ScaleX(20), m_DittoWindow.m_dpi.ScaleY(16));
+		m_BackButton.MoveWindow(m_DittoWindow.m_dpi.Scale(2), m_DittoWindow.m_dpi.Scale(2), m_DittoWindow.m_dpi.Scale(16), m_DittoWindow.m_dpi.Scale(16));
+		m_stGroup.MoveWindow(m_DittoWindow.m_dpi.Scale(24), m_DittoWindow.m_dpi.Scale(2), cx - m_DittoWindow.m_dpi.Scale(20), m_DittoWindow.m_dpi.Scale(16));
 
-		topOfListBox = m_DittoWindow.m_dpi.ScaleY(20);
+		topOfListBox = m_DittoWindow.m_dpi.Scale(20);
 	}
 	else
 	{
@@ -618,14 +618,14 @@ void CQPasteWnd::MoveControls()
 	}*/
 
     int nWidth = cx;
-	int listBoxBottomOffset = m_DittoWindow.m_dpi.ScaleY(searchRowStart);
+	int listBoxBottomOffset = m_DittoWindow.m_dpi.Scale(searchRowStart);
 	
 	int extraSize = 0;
 
 	if(m_showScrollBars == false &&
 		g_Opt.m_showScrollBar == false)
 	{
-		extraSize = m_DittoWindow.m_dpi.ScaleX(::GetSystemMetrics(SM_CXVSCROLL));
+		extraSize = m_DittoWindow.m_dpi.Scale(::GetSystemMetrics(SM_CXVSCROLL));
 
 		CRgn rgnRect;
 		CRect r;
@@ -637,17 +637,17 @@ void CQPasteWnd::MoveControls()
 	}
 
 	m_lstHeader.MoveWindow(0, topOfListBox, cx+extraSize, cy - listBoxBottomOffset-topOfListBox + extraSize+1);
-	m_search.MoveWindow(m_DittoWindow.m_dpi.ScaleX(34), cy - m_DittoWindow.m_dpi.ScaleY(searchRowStart-5), cx - m_DittoWindow.m_dpi.ScaleX(70), m_DittoWindow.m_dpi.ScaleY(23));
+	m_search.MoveWindow(m_DittoWindow.m_dpi.Scale(34), cy - m_DittoWindow.m_dpi.Scale(searchRowStart-5), cx - m_DittoWindow.m_dpi.Scale(70), m_DittoWindow.m_dpi.Scale(23));
 
-	m_systemMenu.MoveWindow(cx - m_DittoWindow.m_dpi.ScaleX(30), cy - m_DittoWindow.m_dpi.ScaleX(28), m_DittoWindow.m_dpi.ScaleX(24), m_DittoWindow.m_dpi.ScaleY(24));
+	m_systemMenu.MoveWindow(cx - m_DittoWindow.m_dpi.Scale(30), cy - m_DittoWindow.m_dpi.Scale(28), m_DittoWindow.m_dpi.Scale(24), m_DittoWindow.m_dpi.Scale(24));
 
-	m_ShowGroupsFolderBottom.MoveWindow(m_DittoWindow.m_dpi.ScaleX(4), cy - m_DittoWindow.m_dpi.ScaleX(28), m_DittoWindow.m_dpi.ScaleX(24), m_DittoWindow.m_dpi.ScaleY(24));
+	m_ShowGroupsFolderBottom.MoveWindow(m_DittoWindow.m_dpi.Scale(4), cy - m_DittoWindow.m_dpi.Scale(28), m_DittoWindow.m_dpi.Scale(24), m_DittoWindow.m_dpi.Scale(24));
 
 	/*if (g_Opt.m_bShowPersistent &&
 		g_Opt.m_bShowAlwaysOnTopWarning)
 	{
 		m_alwaysOnToWarningStatic.ShowWindow(SW_SHOW);
-		m_alwaysOnToWarningStatic.MoveWindow(m_DittoWindow.m_dpi.ScaleX(2), cy - m_DittoWindow.m_dpi.ScaleY(18), cx - m_DittoWindow.m_dpi.ScaleY(4), m_DittoWindow.m_dpi.ScaleY(17));
+		m_alwaysOnToWarningStatic.MoveWindow(m_DittoWindow.m_dpi.Scale(2), cy - m_DittoWindow.m_dpi.Scale(18), cx - m_DittoWindow.m_dpi.Scale(4), m_DittoWindow.m_dpi.Scale(17));
 	}
 	else*/
 	{
@@ -807,7 +807,7 @@ void CQPasteWnd::SaveWindowSize()
 		CRect rect;
 		GetWindowRectEx(&rect);
 		CSize s = rect.Size();
-		CGetSetOptions::SetQuickPasteSize(CSize(m_DittoWindow.m_dpi.UnscaleX(s.cx), m_DittoWindow.m_dpi.UnscaleX(s.cy)));
+		CGetSetOptions::SetQuickPasteSize(CSize(m_DittoWindow.m_dpi.UnScale(s.cx), m_DittoWindow.m_dpi.UnScale(s.cy)));
 		CGetSetOptions::SetQuickPastePoint(rect.TopLeft());
 	}
 }
@@ -2018,18 +2018,18 @@ void CQPasteWnd::UpdateFont()
 {
     LOGFONT lf;
     CGetSetOptions::GetFont(lf);
-	lf.lfHeight = m_DittoWindow.m_dpi.PointsToPixels(lf.lfHeight);
+	lf.lfHeight = m_DittoWindow.m_dpi.Scale(lf.lfHeight);
     m_lstHeader.SetLogFont(lf);
 
 	m_SearchFont.Detach();
-	m_SearchFont.CreateFont(-m_DittoWindow.m_dpi.PointsToPixels(12), 0, 0, 0, 400, 0, 0, 0, DEFAULT_CHARSET, 3, 2, 1, 34, _T("Segoe UI"));
+	m_SearchFont.CreateFont(-m_DittoWindow.m_dpi.Scale(15), 0, 0, 0, 400, 0, 0, 0, DEFAULT_CHARSET, 3, 2, 1, 34, _T("Segoe UI"));
 	m_search.SetFont(&m_SearchFont);
 	m_search.SetPromptFont(m_SearchFont);
 
 	m_GroupTree.SetFont(&m_SearchFont);
 
 	m_groupFont.Detach();
-	m_groupFont.CreateFont(-m_DittoWindow.m_dpi.PointsToPixels(8), 0, 0, 0, 400, 0, 1, 0, DEFAULT_CHARSET, 3, 2, 1, 34, _T("Segoe UI"));
+	m_groupFont.CreateFont(-m_DittoWindow.m_dpi.Scale(12), 0, 0, 0, 400, 0, 1, 0, DEFAULT_CHARSET, 3, 2, 1, 34, _T("Segoe UI"));
 	m_stGroup.SetFont(&m_groupFont);
 	m_stGroup.SetBkColor(g_Opt.m_Theme.MainWindowBG());
 	m_stGroup.SetTextColor(RGB(127, 127, 127));
@@ -2500,13 +2500,13 @@ void CQPasteWnd::OnMenuQuickoptionsFont()
     LOGFONT lf;
     pFont->GetLogFont(&lf);
 
-	lf.lfHeight = m_DittoWindow.m_dpi.PixelsToPoints(lf.lfHeight);
+	lf.lfHeight = m_DittoWindow.m_dpi.UnScale(lf.lfHeight);
 
     CFontDialog dlg(&lf);
     if(dlg.DoModal() == IDOK)
     {
         CGetSetOptions::SetFont(*dlg.m_cf.lpLogFont);
-		(*dlg.m_cf.lpLogFont).lfHeight = m_DittoWindow.m_dpi.PointsToPixels((*dlg.m_cf.lpLogFont).lfHeight);
+		(*dlg.m_cf.lpLogFont).lfHeight = m_DittoWindow.m_dpi.Scale((*dlg.m_cf.lpLogFont).lfHeight);
         m_lstHeader.SetLogFont(*dlg.m_cf.lpLogFont);
 		this->SetLinesPerRow(CGetSetOptions::GetLinesPerRow(), true, true);
     }
@@ -6678,13 +6678,13 @@ LRESULT CQPasteWnd::OnDpiChanged(WPARAM wParam, LPARAM lParam)
 		SWP_NOZORDER | SWP_NOACTIVATE);
 	
 	m_systemMenu.Reset();
-	m_systemMenu.LoadStdImageDPI(m_DittoWindow.m_dpi.GetDPIX(), system_menu_2_24, system_menu_2_30, system_menu_2_36, system_menu_2_42, system_menu_2_48, _T("PNG"));
+	m_systemMenu.LoadStdImageDPI(m_DittoWindow.m_dpi.GetDPI(), system_menu_2_24, system_menu_2_30, system_menu_2_36, system_menu_2_42, system_menu_2_48, _T("PNG"));
 
 	m_BackButton.Reset();
-	m_BackButton.LoadStdImageDPI(m_DittoWindow.m_dpi.GetDPIX(), return_16, return_20, return_24, return_28, return_32, _T("PNG"));
+	m_BackButton.LoadStdImageDPI(m_DittoWindow.m_dpi.GetDPI(), return_16, return_20, return_24, return_28, return_32, _T("PNG"));
 
 	m_ShowGroupsFolderBottom.Reset();
-	m_ShowGroupsFolderBottom.LoadStdImageDPI(m_DittoWindow.m_dpi.GetDPIX(), open_folder_24, open_folder_30, open_folder_36, open_folder_42, open_folder_48, _T("PNG"));
+	m_ShowGroupsFolderBottom.LoadStdImageDPI(m_DittoWindow.m_dpi.GetDPI(), open_folder_24, open_folder_30, open_folder_36, open_folder_42, open_folder_48, _T("PNG"));
 	
 	m_search.OnDpiChanged();		
 	m_lstHeader.OnDpiChanged();	

+ 3 - 3
QRCodeViewer.cpp

@@ -128,7 +128,7 @@ void QRCodeViewer::MoveControls()
 
 	if(m_desc.m_hWnd != NULL)
 	{
-		m_desc.MoveWindow(m_DittoWindow.m_dpi.ScaleX(5), cy - m_DittoWindow.m_dpi.ScaleX(m_descRowHeight) - m_DittoWindow.m_dpi.ScaleX(5), cx - m_DittoWindow.m_dpi.ScaleX(10), m_DittoWindow.m_dpi.ScaleX(m_descRowHeight));
+		m_desc.MoveWindow(m_DittoWindow.m_dpi.Scale(5), cy - m_DittoWindow.m_dpi.Scale(m_descRowHeight) - m_DittoWindow.m_dpi.Scale(5), cx - m_DittoWindow.m_dpi.Scale(10), m_DittoWindow.m_dpi.Scale(m_descRowHeight));
 	}
 }
 
@@ -138,7 +138,7 @@ void QRCodeViewer::OnPaint()
 
 	CRect thisRect;
 	GetClientRect(thisRect);
-	thisRect.bottom -= m_DittoWindow.m_dpi.ScaleX(m_descRowHeight) - m_DittoWindow.m_dpi.ScaleX(5);
+	thisRect.bottom -= m_DittoWindow.m_dpi.Scale(m_descRowHeight) - m_DittoWindow.m_dpi.Scale(5);
 	
 	int width = thisRect.Width() - (CGetSetOptions::GetQRCodeBorderPixels() * 2);
 	int height = min(width, (thisRect.Height() - (CGetSetOptions::GetQRCodeBorderPixels() * 2)));
@@ -296,7 +296,7 @@ LRESULT QRCodeViewer::OnDpiChanged(WPARAM wParam, LPARAM lParam)
 
 	MoveControls();
 
-	m_logFont.lfHeight = m_DittoWindow.m_dpi.PointsToPixels(m_originalFontHeight);
+	m_logFont.lfHeight = m_DittoWindow.m_dpi.Scale(m_originalFontHeight);
 
 	m_font.Detach();
 	m_font.CreateFontIndirect(&m_logFont);

+ 6 - 6
QuickPaste.cpp

@@ -235,8 +235,8 @@ void CQuickPaste::ShowQPasteWnd(CWnd *pParent, bool bAtPrevPos, bool bFromKeyboa
 		{
 			if (adjustRect)
 			{
-				crRect.right = crRect.left + m_pwndPaste->m_DittoWindow.m_dpi.ScaleX(crRect.Width());
-				crRect.bottom = crRect.top + m_pwndPaste->m_DittoWindow.m_dpi.ScaleY(crRect.Height());
+				crRect.right = crRect.left + m_pwndPaste->m_DittoWindow.m_dpi.Scale(crRect.Width());
+				crRect.bottom = crRect.top + m_pwndPaste->m_DittoWindow.m_dpi.Scale(crRect.Height());
 			}
 
 			m_pwndPaste->MoveWindow(crRect);
@@ -251,8 +251,8 @@ void CQuickPaste::ShowQPasteWnd(CWnd *pParent, bool bAtPrevPos, bool bFromKeyboa
 		{
 			if (adjustRect)
 			{
-				crRect.right = crRect.left + m_pwndPaste->m_DittoWindow.m_dpi.ScaleX(crRect.Width());
-				crRect.bottom = crRect.top + m_pwndPaste->m_DittoWindow.m_dpi.ScaleY(crRect.Height());
+				crRect.right = crRect.left + m_pwndPaste->m_DittoWindow.m_dpi.Scale(crRect.Width());
+				crRect.bottom = crRect.top + m_pwndPaste->m_DittoWindow.m_dpi.Scale(crRect.Height());
 			}
 			m_pwndPaste->MoveWindow(crRect);
 		}
@@ -348,8 +348,8 @@ void CQuickPaste::OnScreenResolutionChange()
 		CGetSetOptions::GetQuickPastePoint(point);
 		CGetSetOptions::GetQuickPasteSize(csSize);
 
-		csSize.cx = m_pwndPaste->m_DittoWindow.m_dpi.ScaleX(csSize.cx);
-		csSize.cy = m_pwndPaste->m_DittoWindow.m_dpi.ScaleY(csSize.cy);
+		csSize.cx = m_pwndPaste->m_DittoWindow.m_dpi.Scale(csSize.cx);
+		csSize.cy = m_pwndPaste->m_DittoWindow.m_dpi.Scale(csSize.cy);
 
 		m_pwndPaste->MoveWindow(point.x, point.y, csSize.cx, csSize.cy);
 	}

+ 2 - 1
Resource.h

@@ -715,6 +715,7 @@
 #define ID_IMPORT_IMPORTCOPIEDFILE      32941
 #define ID_FIRST_ALWAYSONTOP            32942
 #define ID_CLIPORDER_MOVETOLAST         32943
+#define ID_QUICKOPTIONS_                32944
 
 // Next default values for new objects
 // 
@@ -722,7 +723,7 @@
 #ifndef APSTUDIO_READONLY_SYMBOLS
 #define _APS_3D_CONTROLS                     1
 #define _APS_NEXT_RESOURCE_VALUE        340
-#define _APS_NEXT_COMMAND_VALUE         32944
+#define _APS_NEXT_COMMAND_VALUE         32945
 #define _APS_NEXT_CONTROL_VALUE         2172
 #define _APS_NEXT_SYMED_VALUE           104
 #endif

+ 7 - 7
SymbolEdit.cpp

@@ -428,7 +428,7 @@ void CSymbolEdit::RecalcLayout()
 	{
 		if (m_windowDpi != NULL)
 		{
-			SetMargins(4, m_windowDpi->ScaleX(34));
+			SetMargins(m_windowDpi->Scale(4), m_windowDpi->Scale(34));
 		}
 	}
 }
@@ -507,7 +507,7 @@ void CSymbolEdit::OnPaint()
 	if (text.GetLength() == 0 && m_strPromptText.GetLength() > 0)
 	{
 		//if we aren't showing the close icon, then use the full space
-		textRect.right += m_windowDpi->ScaleX(16);
+		textRect.right += m_windowDpi->Scale(16);
 		//textRect.right -= LOWORD(margins);
 
 		oldFont = dc.SelectObject(&m_fontPrompt);
@@ -522,8 +522,8 @@ void CSymbolEdit::OnPaint()
 	int right = rect.right;
 	if ((text.GetLength() > 0 || this == GetFocus()))
 	{
-		m_searchesButtonRect.SetRect(rect.right - m_windowDpi->ScaleX(18), 0, rect.right, rect.bottom);
-		right = rect.right - m_windowDpi->ScaleX(18);
+		m_searchesButtonRect.SetRect(rect.right - m_windowDpi->Scale(18), 0, rect.right, rect.bottom);
+		right = rect.right - m_windowDpi->Scale(18);
 		m_searchesButton.Draw(&dc, *m_windowDpi, this, m_searchesButtonRect.left, 4, m_mouseHoveringOverSearches, m_mouseDownOnSearches);
 	}
 	else
@@ -536,7 +536,7 @@ void CSymbolEdit::OnPaint()
 	{
 		OutputDebugString(_T("showing close button\n"));
 
-		m_closeButtonRect.SetRect(right - m_windowDpi->ScaleX(16), 0, right, rect.bottom);
+		m_closeButtonRect.SetRect(right - m_windowDpi->Scale(16), 0, right, rect.bottom);
 		m_closeButton.Draw(&dc, *m_windowDpi, this, m_closeButtonRect.left, 4, m_mouseHoveringOverClose, m_mouseDownOnClose);
 	}
 	else
@@ -777,10 +777,10 @@ void CSymbolEdit::SetDpiInfo(CDPI *dpi)
 	m_windowDpi = dpi; 
 
 	m_closeButton.Reset();
-	m_closeButton.LoadStdImageDPI(m_windowDpi->GetDPIX(), search_close_16, Search_20, Search_24, Search_28, Search_32, _T("PNG"));
+	m_closeButton.LoadStdImageDPI(m_windowDpi->GetDPI(), search_close_16, Search_20, Search_24, Search_28, Search_32, _T("PNG"));
 
 	m_searchesButton.Reset();
-	m_searchesButton.LoadStdImageDPI(m_windowDpi->GetDPIX(), down_16, down_20, down_24, down_28, down_32, _T("PNG"));
+	m_searchesButton.LoadStdImageDPI(m_windowDpi->GetDPI(), down_16, down_20, down_24, down_28, down_32, _T("PNG"));
 
 	RecalcLayout();
 }

+ 1 - 1
Theme.cpp

@@ -61,7 +61,7 @@ void CTheme::LoadDefaults()
 	m_descriptionWindowText = RGB(0, 0, 0);
 
 	m_captionSize = 25;
-	m_captionFontSize = 18;
+	m_captionFontSize = 19;
 }
 
 bool CTheme::Load(CString csTheme, bool bHeaderOnly, bool bCheckLastWriteTime)

+ 28 - 32
ToolTipEx.cpp

@@ -108,19 +108,16 @@ BOOL CToolTipEx::Create(CWnd *pParentWnd)
 	m_RichEdit.SetEventMask(m_RichEdit.GetEventMask() | ENM_SELCHANGE | ENM_LINK | ENM_MOUSEEVENTS | ENM_SCROLLEVENTS);
 	m_RichEdit.SetAutoURLDetect(TRUE);
 
-
-	ApplyWordWrap();
-
-    SetLogFont(GetSystemToolTipFont(), FALSE);
+	ApplyWordWrap();	   
 
 	m_optionsButton.Create(NULL, WS_CHILD | BS_OWNERDRAW | WS_TABSTOP, CRect(0, 0, 0, 0), this, 2);
-	m_optionsButton.LoadStdImageDPI(m_DittoWindow.m_dpi.GetDPIX(), IDB_COG_16_16, IDB_COG_20_20, IDB_COG_24_24, cog_28, IDB_COG_32_32, _T("PNG"));
+	m_optionsButton.LoadStdImageDPI(m_DittoWindow.m_dpi.GetDPI(), IDB_COG_16_16, IDB_COG_20_20, IDB_COG_24_24, cog_28, IDB_COG_32_32, _T("PNG"));
 	m_optionsButton.SetToolTipText(theApp.m_Language.GetString(_T("DescriptionOptionsTooltip"), _T("Description Options")));
 	m_optionsButton.ShowWindow(SW_SHOW);
 
 	m_clipDataStatic.Create(_T("some text"), WS_CHILD | WS_VISIBLE | SS_SIMPLE, CRect(0, 0, 0, 0), this, 3);
 
-	m_clipDataFont.CreateFont(-m_DittoWindow.m_dpi.PointsToPixels(8), 0, 0, 0, 400, 0, 0, 0, DEFAULT_CHARSET, 3, 2, 1, 34, _T("Segoe UI"));
+	m_clipDataFont.CreateFont(-m_DittoWindow.m_dpi.Scale(8), 0, 0, 0, 400, 0, 0, 0, DEFAULT_CHARSET, 3, 2, 1, 34, _T("Segoe UI"));
 	m_clipDataStatic.SetFont(&m_clipDataFont);
 	m_clipDataStatic.SetBkColor(g_Opt.m_Theme.DescriptionWindowBG());
 	m_clipDataStatic.SetTextColor(RGB(80, 80, 80));
@@ -154,8 +151,8 @@ BOOL CToolTipEx::Show(CPoint point)
 		rect.top = point.y;
 		CSize size;
 		CGetSetOptions::GetDescWndSize(size);
-		rect.right = rect.left + m_DittoWindow.m_dpi.ScaleX(size.cx);
-		rect.bottom = rect.top + m_DittoWindow.m_dpi.ScaleY(size.cy);
+		rect.right = rect.left + m_DittoWindow.m_dpi.Scale(size.cx);
+		rect.bottom = rect.top + m_DittoWindow.m_dpi.Scale(size.cy);
 
 		EnsureWindowVisible(&rect);
 	}
@@ -310,7 +307,7 @@ void CToolTipEx::SaveWindowSize()
 		}
 
 		CSize s = rect.Size();
-		CGetSetOptions::SetDescWndSize(CSize(m_DittoWindow.m_dpi.UnscaleX(s.cx), m_DittoWindow.m_dpi.UnscaleX(s.cy)));
+		CGetSetOptions::SetDescWndSize(CSize(m_DittoWindow.m_dpi.UnScale(s.cx), m_DittoWindow.m_dpi.UnScale(s.cy)));
 		CGetSetOptions::SetDescWndPoint(rect.TopLeft());
 
 		OutputDebugString(_T("Saving tooltip size"));
@@ -508,6 +505,8 @@ CRect CToolTipEx::GetBoundsRect()
 		CString longestString;
         do
         {
+			nNumLines++;
+
             int newStart = m_csText.Find(_T("\n"), nStart);
 			if (newStart < 0)
 			{
@@ -528,7 +527,7 @@ CRect CToolTipEx::GetBoundsRect()
 				longestLength = length;
 			}           
 
-            nNumLines++;
+            
 			nStart = newStart + 1;
         }
         while(nStart >= 0 && nNumLines < 100);
@@ -604,23 +603,6 @@ CString CToolTipEx::GetFieldFromString(CString ref, int nIndex, TCHAR ch)
     return ref.Mid(nOldStart, nEnd - nOldStart - 1);
 }
 
-LPLOGFONT CToolTipEx::GetSystemToolTipFont()
-{
-    static LOGFONT LogFont;
-
-    NONCLIENTMETRICS ncm;
-    ncm.cbSize = sizeof(NONCLIENTMETRICS);
-    if(!SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS),
-       &ncm, 0))
-    {
-        return FALSE;
-    }
-
-    memcpy(&LogFont, &(ncm.lfStatusFont), sizeof(LOGFONT));
-
-    return  &LogFont;
-}
-
 BOOL CToolTipEx::SetLogFont(LPLOGFONT lpLogFont, BOOL bRedraw /*=TRUE*/)
 {
     ASSERT(lpLogFont);
@@ -634,6 +616,10 @@ BOOL CToolTipEx::SetLogFont(LPLOGFONT lpLogFont, BOOL bRedraw /*=TRUE*/)
     // Store font as the global default
     memcpy(&LogFont, lpLogFont, sizeof(LOGFONT));
 
+	m_fontHeight = lpLogFont->lfHeight;
+
+	LogFont.lfHeight = m_DittoWindow.m_dpi.Scale(LogFont.lfHeight);
+
     // Create the actual font object
     m_Font.DeleteObject();
     m_Font.CreateFontIndirect(&LogFont);
@@ -672,13 +658,13 @@ void CToolTipEx::MoveControls()
 {
 	CRect cr;
 	GetClientRect(cr);
-	cr.DeflateRect(0, 0, 0, m_DittoWindow.m_dpi.ScaleY(21));
+	cr.DeflateRect(0, 0, 0, m_DittoWindow.m_dpi.Scale(21));
 	m_RichEdit.MoveWindow(cr);
 	m_imageViewer.MoveWindow(cr);
 
-	m_optionsButton.MoveWindow(cr.left, cr.bottom + m_DittoWindow.m_dpi.ScaleY(2), m_DittoWindow.m_dpi.ScaleX(17), m_DittoWindow.m_dpi.ScaleY(17));
+	m_optionsButton.MoveWindow(cr.left, cr.bottom + m_DittoWindow.m_dpi.Scale(2), m_DittoWindow.m_dpi.Scale(17), m_DittoWindow.m_dpi.Scale(17));
 
-	m_clipDataStatic.MoveWindow(cr.left + m_DittoWindow.m_dpi.ScaleX(19), cr.bottom + m_DittoWindow.m_dpi.ScaleY(2), cr.Width() - cr.left + m_DittoWindow.m_dpi.ScaleX(19), m_DittoWindow.m_dpi.ScaleY(17));
+	m_clipDataStatic.MoveWindow(cr.left + m_DittoWindow.m_dpi.Scale(19), cr.bottom + m_DittoWindow.m_dpi.Scale(2), cr.Width() - cr.left + m_DittoWindow.m_dpi.Scale(19), m_DittoWindow.m_dpi.Scale(17));
 
 	this->Invalidate();
 
@@ -1187,14 +1173,24 @@ LRESULT CToolTipEx::OnDpiChanged(WPARAM wParam, LPARAM lParam)
 		SWP_NOZORDER | SWP_NOACTIVATE);
 
 	m_optionsButton.Reset();
-	m_optionsButton.LoadStdImageDPI(m_DittoWindow.m_dpi.GetDPIX(), IDB_COG_16_16, IDB_COG_20_20, IDB_COG_24_24, cog_28, IDB_COG_32_32, _T("PNG"));
+	m_optionsButton.LoadStdImageDPI(m_DittoWindow.m_dpi.GetDPI(), IDB_COG_16_16, IDB_COG_20_20, IDB_COG_24_24, cog_28, IDB_COG_32_32, _T("PNG"));
 
 	m_clipDataFont.Detach();
-	m_clipDataFont.CreateFont(-m_DittoWindow.m_dpi.PointsToPixels(8), 0, 0, 0, 400, 0, 0, 0, DEFAULT_CHARSET, 3, 2, 1, 34, _T("Segoe UI"));
+	m_clipDataFont.CreateFont(-m_DittoWindow.m_dpi.Scale(8), 0, 0, 0, 400, 0, 0, 0, DEFAULT_CHARSET, 3, 2, 1, 34, _T("Segoe UI"));
 	m_clipDataStatic.SetFont(&m_clipDataFont);
 	m_clipDataStatic.SetBkColor(g_Opt.m_Theme.DescriptionWindowBG());
 	m_clipDataStatic.SetTextColor(RGB(80, 80, 80));
 
+	LOGFONT lf;
+	m_Font.GetLogFont(&lf);
+	lf.lfHeight = m_DittoWindow.m_dpi.Scale(m_fontHeight);
+
+	// Create the actual font object
+	m_Font.DeleteObject();
+	m_Font.CreateFontIndirect(&lf);
+
+	m_RichEdit.SetFont(&m_Font);
+
 	this->MoveControls();
 	this->Invalidate();
 	this->UpdateWindow();

+ 4 - 4
ToolTipEx.h

@@ -53,6 +53,8 @@ public:
 	void DoSearch();
 	void MoveControls();
 
+	BOOL SetLogFont(LPLOGFONT lpLogFont, BOOL bRedraw /*=TRUE*/);
+
 
 // Overrides
 	// ClassWizard generated virtual function overrides
@@ -71,6 +73,7 @@ protected:
 	CRect m_rectMargin;
 	CString m_csText;
 	CFont m_Font;
+	int m_fontHeight;
 	CString m_csRTF;
 	CRichEditCtrlEx m_RichEdit;
 	CWnd *m_pNotifyWnd;
@@ -92,12 +95,9 @@ protected:
 	bool m_bMaxSetTimer;
 	int m_lDelayMaxSeconds;
 	SnapWindow m_snap;
-	
 
 protected:
-	CString GetFieldFromString(CString ref, int nIndex, TCHAR ch);
-	BOOL SetLogFont(LPLOGFONT lpLogFont, BOOL bRedraw /*=TRUE*/);
-	LPLOGFONT GetSystemToolTipFont();
+	CString GetFieldFromString(CString ref, int nIndex, TCHAR ch);	
 	BOOL IsCursorInToolTip();
 	void HighlightSearchText();	
 	void ApplyWordWrap();

+ 2 - 2
WndEx.cpp

@@ -104,8 +104,8 @@ int CWndEx::OnCreate(LPCREATESTRUCT lpCreateStruct)
 	SetWindowPos(NULL,
 		lpCreateStruct->x,
 		lpCreateStruct->y,
-		m_DittoWindow.m_dpi.ScaleX(lpCreateStruct->cx),
-		m_DittoWindow.m_dpi.ScaleY(lpCreateStruct->cy),
+		m_DittoWindow.m_dpi.Scale(lpCreateStruct->cx),
+		m_DittoWindow.m_dpi.Scale(lpCreateStruct->cy),
 		SWP_NOZORDER | SWP_NOACTIVATE);
 
 	SetCaptionColorActive(false, TRUE);