ozone10 9 months ago committed by Don Ho
parent 2e4ad67dff
commit c8a2bcb6b0

@ -41,7 +41,7 @@ CXXFLAGS := -include $(GCC_DIRECTORY)/gcc-fixes.h -std=c++20
RC := $(CROSS_COMPILE)windres RC := $(CROSS_COMPILE)windres
RCFLAGS := RCFLAGS :=
CPP_PATH := $(SCINTILLA_DIRECTORY)/include $(LEXILLA_DIRECTORY)/include CPP_PATH := $(SCINTILLA_DIRECTORY)/include $(LEXILLA_DIRECTORY)/include
CPP_DEFINE := UNICODE _UNICODE OEMRESOURCE NOMINMAX _WIN32_WINNT=_WIN32_WINNT_WIN10 NTDDI_VERSION=NTDDI_WIN10_RS5 TIXML_USE_STL TIXMLA_USE_STL CPP_DEFINE := UNICODE _UNICODE OEMRESOURCE NOMINMAX _WIN32_WINNT=_WIN32_WINNT_WIN7 NTDDI_VERSION=NTDDI_WIN7 TIXML_USE_STL TIXMLA_USE_STL
LD := $(CXX) LD := $(CXX)
LDFLAGS := -municode -mwindows LDFLAGS := -municode -mwindows
LD_PATH := LD_PATH :=

@ -395,13 +395,13 @@ IF (WIN32)
if ( MSVC ) if ( MSVC )
#do not use for mingw builds #do not use for mingw builds
SET(CMAKE_CXX_FLAGS "/EHa /MP /W4") SET(CMAKE_CXX_FLAGS "/EHa /MP /W4")
SET(defs -DUNICODE -D_UNICODE -D_WIN32_WINNT=_WIN32_WINNT_WIN10 -DNTDDI_VERSION=NTDDI_WIN10_RS5 -D_USE_64BIT_TIME_T -DTIXML_USE_STL -DTIXMLA_USE_STL -DNOMINMAX -DOEMRESOURCE -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING ) SET(defs -DUNICODE -D_UNICODE -D_WIN32_WINNT=_WIN32_WINNT_WIN7 -DNTDDI_VERSION=NTDDI_WIN7 -D_USE_64BIT_TIME_T -DTIXML_USE_STL -DTIXMLA_USE_STL -DNOMINMAX -DOEMRESOURCE -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING )
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
else ( MSVC ) else ( MSVC )
# For possible MinGW compilation # For possible MinGW compilation
SET(CMAKE_CXX_FLAGS "-include../gcc/gcc-fixes.h -std=c++20 -fpermissive -municode") SET(CMAKE_CXX_FLAGS "-include../gcc/gcc-fixes.h -std=c++20 -fpermissive -municode")
SET(defs -DUNICODE -D_UNICODE -D_WIN32_WINNT=_WIN32_WINNT_WIN10 -DNTDDI_VERSION=NTDDI_WIN10_RS5 -D_USE_64BIT_TIME_T -DTIXML_USE_STL -DTIXMLA_USE_STL -DNOMINMAX -DOEMRESOURCE) SET(defs -DUNICODE -D_UNICODE -D_WIN32_WINNT=_WIN32_WINNT_WIN7 -DNTDDI_VERSION=NTDDI_WIN7 -D_USE_64BIT_TIME_T -DTIXML_USE_STL -DTIXMLA_USE_STL -DNOMINMAX -DOEMRESOURCE)
endif ( MSVC ) endif ( MSVC )
ENDIF (WIN32) ENDIF (WIN32)

@ -1600,20 +1600,10 @@ namespace NppDarkMode
void setMetricsForDpi(UINT dpi) void setMetricsForDpi(UINT dpi)
{ {
_dpi = dpi; _dpi = dpi;
if (NppDarkMode::isWindows10()) _xEdge = DPIManagerV2::getSystemMetricsForDpi(SM_CXEDGE, _dpi);
{ _yEdge = DPIManagerV2::getSystemMetricsForDpi(SM_CYEDGE, _dpi);
_xEdge = ::GetSystemMetricsForDpi(SM_CXEDGE, _dpi); _xScroll = DPIManagerV2::getSystemMetricsForDpi(SM_CXVSCROLL, _dpi);
_yEdge = ::GetSystemMetricsForDpi(SM_CYEDGE, _dpi); _yScroll = DPIManagerV2::getSystemMetricsForDpi(SM_CYVSCROLL, _dpi);
_xScroll = ::GetSystemMetricsForDpi(SM_CXVSCROLL, _dpi);
_yScroll = ::GetSystemMetricsForDpi(SM_CYVSCROLL, _dpi);
}
else
{
_xEdge = DPIManagerV2::scale(::GetSystemMetrics(SM_CXEDGE), _dpi);
_yEdge = DPIManagerV2::scale(::GetSystemMetrics(SM_CYEDGE), _dpi);
_xScroll = DPIManagerV2::scale(::GetSystemMetrics(SM_CXVSCROLL), _dpi);
_yScroll = DPIManagerV2::scale(::GetSystemMetrics(SM_CYVSCROLL), _dpi);
}
} }
}; };

@ -17,11 +17,54 @@
#include "dpiManagerV2.h" #include "dpiManagerV2.h"
template <typename P>
bool ptrFn(HMODULE handle, P& pointer, const char* name)
{
auto p = reinterpret_cast<P>(::GetProcAddress(handle, name));
if (p != nullptr)
{
pointer = p;
return true;
}
return false;
}
using fnGetDpiForSystem = UINT (WINAPI*)();
using fnGetDpiForWindow = UINT (WINAPI*)(HWND);
using fnGetSystemMetricsForDpi = int (WINAPI*)(int, UINT);
using fnSystemParametersInfoForDpi = BOOL(WINAPI*)(UINT, UINT, PVOID, UINT, UINT);
fnGetDpiForSystem _fnGetDpiForSystem = nullptr;
fnGetDpiForWindow _fnGetDpiForWindow = nullptr;
fnGetSystemMetricsForDpi _fnGetSystemMetricsForDpi = nullptr;
fnSystemParametersInfoForDpi _fnSystemParametersInfoForDpi = nullptr;
void DPIManagerV2::initDpiAPI()
{
HMODULE hUser32 = ::GetModuleHandleW(L"user32.dll");
if (hUser32)
{
ptrFn(hUser32, _fnGetDpiForSystem, "GetDpiForSystem");
ptrFn(hUser32, _fnGetDpiForWindow, "GetDpiForWindow");
ptrFn(hUser32, _fnGetSystemMetricsForDpi, "GetSystemMetricsForDpi");
ptrFn(hUser32, _fnSystemParametersInfoForDpi, "SystemParametersInfoForDpi");
}
}
int DPIManagerV2::getSystemMetricsForDpi(int nIndex, UINT dpi)
{
if (_fnGetSystemMetricsForDpi != nullptr)
{
return _fnGetSystemMetricsForDpi(nIndex, dpi);
}
return DPIManagerV2::scale(::GetSystemMetrics(nIndex), dpi);
}
UINT DPIManagerV2::getDpiForSystem() UINT DPIManagerV2::getDpiForSystem()
{ {
if (NppDarkMode::isWindows10()) if (_fnGetDpiForSystem != nullptr)
{ {
return ::GetDpiForSystem(); return _fnGetDpiForSystem();
} }
UINT dpi = USER_DEFAULT_SCREEN_DPI; UINT dpi = USER_DEFAULT_SCREEN_DPI;
@ -36,9 +79,9 @@ UINT DPIManagerV2::getDpiForSystem()
UINT DPIManagerV2::getDpiForWindow(HWND hWnd) UINT DPIManagerV2::getDpiForWindow(HWND hWnd)
{ {
if (NppDarkMode::isWindows10()) if (_fnGetDpiForWindow != nullptr)
{ {
const auto dpi = ::GetDpiForWindow(hWnd); const auto dpi = _fnGetDpiForWindow(hWnd);
if (dpi > 0) if (dpi > 0)
{ {
return dpi; return dpi;
@ -66,8 +109,8 @@ LOGFONT DPIManagerV2::getDefaultGUIFontForDpi(UINT dpi, FontType type)
LOGFONT lf{}; LOGFONT lf{};
NONCLIENTMETRICS ncm{}; NONCLIENTMETRICS ncm{};
ncm.cbSize = sizeof(NONCLIENTMETRICS); ncm.cbSize = sizeof(NONCLIENTMETRICS);
if (NppDarkMode::isWindows10() if (_fnSystemParametersInfoForDpi != nullptr
&& (::SystemParametersInfoForDpi(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0, dpi) != FALSE)) && (_fnSystemParametersInfoForDpi(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0, dpi) != FALSE))
{ {
result = 2; result = 2;
} }

@ -16,7 +16,7 @@
#pragma once #pragma once
#include "NppDarkMode.h" #include <windows.h>
class DPIManagerV2 class DPIManagerV2
{ {
@ -28,6 +28,10 @@ public:
enum class FontType { menu, status, message, caption, smcaption }; enum class FontType { menu, status, message, caption, smcaption };
static void initDpiAPI();
static int getSystemMetricsForDpi(int nIndex, UINT dpi);
static UINT getDpiForSystem(); static UINT getDpiForSystem();
static UINT getDpiForWindow(HWND hWnd); static UINT getDpiForWindow(HWND hWnd);
static UINT getDpiForParent(HWND hWnd) { static UINT getDpiForParent(HWND hWnd) {

@ -20,6 +20,7 @@
#include "MiniDumper.h" //Write dump files #include "MiniDumper.h" //Write dump files
#include "verifySignedfile.h" #include "verifySignedfile.h"
#include "NppDarkMode.h" #include "NppDarkMode.h"
#include "dpiManagerV2.h"
#include <memory> #include <memory>
typedef std::vector<std::wstring> ParamVector; typedef std::vector<std::wstring> ParamVector;
@ -502,6 +503,7 @@ int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE /*hPrevInstance
NppGUI & nppGui = nppParameters.getNppGUI(); NppGUI & nppGui = nppParameters.getNppGUI();
NppDarkMode::initDarkMode(); NppDarkMode::initDarkMode();
DPIManagerV2::initDpiAPI();
bool doUpdateNpp = nppGui._autoUpdateOpt._doAutoUpdate; bool doUpdateNpp = nppGui._autoUpdateOpt._doAutoUpdate;
bool doUpdatePluginList = nppGui._autoUpdateOpt._doAutoUpdate; bool doUpdatePluginList = nppGui._autoUpdateOpt._doAutoUpdate;

@ -25,7 +25,7 @@
<ItemDefinitionGroup Label="Globals"> <ItemDefinitionGroup Label="Globals">
<ClCompile> <ClCompile>
<AdditionalIncludeDirectories>..\src;..\src\MISC;..\src\MISC\Common;..\src\MISC\Exception;..\src\MISC\PluginsManager;..\src\MISC\Process;..\src\MISC\RegExt;..\src\MISC\md5;..\src\MISC\sha1;..\src\MISC\sha2;..\src\MISC\sha512;..\src\MISC\SysMsg;..\src\ScintillaComponent;..\src\Win32Explr;..\src\WinControls;..\src\WinControls\AboutDlg;..\src\WinControls\AnsiCharPanel;..\src\WinControls\ClipboardHistory;..\src\WinControls\ColourPicker;..\src\WinControls\ContextMenu;..\src\WinControls\DockingWnd;..\src\WinControls\DocumentMap;..\src\WinControls\FileBrowser;..\src\WinControls\FindCharsInRange;..\src\WinControls\FunctionList;..\src\WinControls\Grid;..\src\WinControls\ImageListSet;..\src\WinControls\OpenSaveFileDialog;..\src\WinControls\PluginsAdmin;..\src\WinControls\Preference;..\src\WinControls\ProjectPanel;..\src\WinControls\ReadDirectoryChanges;..\src\WinControls\shortcut;..\src\WinControls\SplitterContainer;..\src\WinControls\StaticDialog;..\src\WinControls\StaticDialog\RunDlg;..\src\WinControls\StatusBar;..\src\WinControls\TabBar;..\src\WinControls\TaskList;..\src\WinControls\ToolBar;..\src\WinControls\ToolTip;..\src\WinControls\TrayIcon;..\src\WinControls\TreeView;..\src\WinControls\VerticalFileSwitcher;..\src\WinControls\WindowsDlg;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>..\src;..\src\MISC;..\src\MISC\Common;..\src\MISC\Exception;..\src\MISC\PluginsManager;..\src\MISC\Process;..\src\MISC\RegExt;..\src\MISC\md5;..\src\MISC\sha1;..\src\MISC\sha2;..\src\MISC\sha512;..\src\MISC\SysMsg;..\src\ScintillaComponent;..\src\Win32Explr;..\src\WinControls;..\src\WinControls\AboutDlg;..\src\WinControls\AnsiCharPanel;..\src\WinControls\ClipboardHistory;..\src\WinControls\ColourPicker;..\src\WinControls\ContextMenu;..\src\WinControls\DockingWnd;..\src\WinControls\DocumentMap;..\src\WinControls\FileBrowser;..\src\WinControls\FindCharsInRange;..\src\WinControls\FunctionList;..\src\WinControls\Grid;..\src\WinControls\ImageListSet;..\src\WinControls\OpenSaveFileDialog;..\src\WinControls\PluginsAdmin;..\src\WinControls\Preference;..\src\WinControls\ProjectPanel;..\src\WinControls\ReadDirectoryChanges;..\src\WinControls\shortcut;..\src\WinControls\SplitterContainer;..\src\WinControls\StaticDialog;..\src\WinControls\StaticDialog\RunDlg;..\src\WinControls\StatusBar;..\src\WinControls\TabBar;..\src\WinControls\TaskList;..\src\WinControls\ToolBar;..\src\WinControls\ToolTip;..\src\WinControls\TrayIcon;..\src\WinControls\TreeView;..\src\WinControls\VerticalFileSwitcher;..\src\WinControls\WindowsDlg;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_WIN32_WINNT=_WIN32_WINNT_WIN10;NTDDI_VERSION=NTDDI_WIN10_RS5;_WINDOWS;OEMRESOURCE;NOMINMAX;_USE_64BIT_TIME_T;TIXML_USE_STL;TIXMLA_USE_STL;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT;_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WIN32;_WIN32_WINNT=_WIN32_WINNT_WIN7;NTDDI_VERSION=NTDDI_WIN7;_WINDOWS;OEMRESOURCE;NOMINMAX;_USE_64BIT_TIME_T;TIXML_USE_STL;TIXMLA_USE_STL;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT;_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ExceptionHandling>Async</ExceptionHandling> <ExceptionHandling>Async</ExceptionHandling>
<WarningLevel>Level4</WarningLevel> <WarningLevel>Level4</WarningLevel>
<TreatWarningAsError>true</TreatWarningAsError> <TreatWarningAsError>true</TreatWarningAsError>

Loading…
Cancel
Save