diff options
Diffstat (limited to 'win32/ScintillaWin.cxx')
-rw-r--r-- | win32/ScintillaWin.cxx | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx index 01ffcbe76..046ff7f10 100644 --- a/win32/ScintillaWin.cxx +++ b/win32/ScintillaWin.cxx @@ -96,6 +96,10 @@ #define WM_UNICHAR 0x0109 #endif +#ifndef WM_DPICHANGED +#define WM_DPICHANGED 0x02E0 +#endif + #ifndef UNICODE_NOCHAR #define UNICODE_NOCHAR 0xFFFF #endif @@ -282,6 +286,8 @@ class ScintillaWin : unsigned int linesPerScroll; ///< Intellimouse support int wheelDelta; ///< Wheel delta from roll + UINT dpi = 72; + HRGN hRgnUpdate; bool hasOKText; @@ -337,6 +343,8 @@ class ScintillaWin : Sci::Position TargetAsUTF8(char *text) const; Sci::Position EncodedFromUTF8(const char *utf8, char *encoded) const; + void CheckDpiChanged(); + bool PaintDC(HDC hdc); sptr_t WndPaint(); @@ -847,6 +855,14 @@ Sci::Position ScintillaWin::EncodedFromUTF8(const char *utf8, char *encoded) con } } +void ScintillaWin::CheckDpiChanged() { + const UINT dpiNow = DpiForWindow(wMain.GetID()); + if (dpi != dpiNow) { + dpi = dpiNow; + InvalidateStyleData(); + } +} + bool ScintillaWin::PaintDC(HDC hdc) { if (technology == SC_TECHNOLOGY_DEFAULT) { AutoSurface surfaceWindow(hdc, this); @@ -877,6 +893,7 @@ bool ScintillaWin::PaintDC(HDC hdc) { } sptr_t ScintillaWin::WndPaint() { + CheckDpiChanged(); //ElapsedPeriod ep; // Redirect assertions to debug output and save current state @@ -1897,6 +1914,10 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam InvalidateStyleData(); break; + case WM_DPICHANGED: + InvalidateStyleRedraw(); + break; + case WM_CONTEXTMENU: return ShowContextMenu(iMessage, wParam, lParam); |