Added experimental ManifestDPIAwareness attribute so we can declare PerMonitorV2 awareness
git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@6899 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
parent
ca009c196b
commit
9f91316be0
10 changed files with 41 additions and 17 deletions
|
@ -285,6 +285,10 @@ Accepts variables. If variables are used, they must be initialized before the li
|
|||
|
||||
\c \\<b\\>notset\\</b\\>|true|false
|
||||
|
||||
\# Note: PerMonitor is not documented because it is not fully supported yet, we need to handle WM_DPICHANGED
|
||||
\# Example: ManifestDPIAware System ; System DPI on Vista/7/8/8.1/10(<10.1607(AU))
|
||||
\# Example: ManifestDPIAwareness "PerMonitorV2,System" ; PMv2 on 10.1703(CU)+, System on 10.1607(AU)
|
||||
|
||||
Declare that the installer is DPI-aware. A DPI-aware application is not scaled by the DWM (DPI virtualization) so the text is never blurry. NSIS does not scale the bitmap used by the tree control on the component page and some plugins might have compatibility issues so make sure that you test your installer at different DPI settings if you select \e{true}.
|
||||
|
||||
See \W{http://msdn.microsoft.com/en-us/library/dd464660}{MSDN} for more information about DPI-aware applications.
|
||||
|
|
|
@ -2384,7 +2384,7 @@ int CEXEBuild::SetManifest()
|
|||
try {
|
||||
init_res_editor();
|
||||
// This should stay ANSI
|
||||
string manifest = manifest::generate(manifest_comctl, manifest_exec_level, manifest_dpiaware, manifest_sosl);
|
||||
string manifest = manifest::generate(manifest_comctl, manifest_exec_level, manifest_dpiaware, manifest_dpiawareness.c_str(), manifest_sosl);
|
||||
|
||||
if (manifest == "")
|
||||
return PS_OK;
|
||||
|
|
|
@ -670,6 +670,7 @@ class CEXEBuild {
|
|||
manifest::comctl manifest_comctl;
|
||||
manifest::exec_level manifest_exec_level;
|
||||
manifest::dpiaware manifest_dpiaware;
|
||||
tstring manifest_dpiawareness;
|
||||
manifest::SupportedOSList manifest_sosl;
|
||||
|
||||
CResourceEditor *res_editor;
|
||||
|
|
|
@ -402,20 +402,20 @@ FORCE_INLINE int NSISCALL ui_doinstall(void)
|
|||
|
||||
#ifdef NSIS_CONFIG_LICENSEPAGE
|
||||
{ // load richedit DLL
|
||||
static const CHAR riched20[]=("RichEd20");
|
||||
static const CHAR riched32[]=("RichEd32");
|
||||
static const CHAR riched20[]=("RichEd20"); // v2..3 DLL
|
||||
static const CHAR riched32[]=("RichEd32"); // v1 DLL
|
||||
#ifdef UNICODE
|
||||
static const TCHAR richedit20t[]=_T("RichEdit20W");
|
||||
#else
|
||||
static const TCHAR richedit20t[]=_T("RichEdit20A");
|
||||
#endif
|
||||
static const TCHAR richedit[]=_T("RichEdit");
|
||||
static const TCHAR richedit[]=_T("RichEdit"); // v1 class
|
||||
if (!LoadSystemLibrary(riched20))
|
||||
{
|
||||
LoadSystemLibrary(riched32); // Win95 only ships with v1.0, NT4 has v2.0: web.archive.org/web/20030607222419/http://msdn.microsoft.com/library/en-us/shellcc/platform/commctls/richedit/richeditcontrols/aboutricheditcontrols.asp
|
||||
}
|
||||
|
||||
// make richedit20a/w point to RICHEDIT
|
||||
// Register RichEdit20A/W as a RICHEDIT clone (for Win95)
|
||||
if (!GetClassInfo(NULL,richedit20t,&wc))
|
||||
{
|
||||
GetClassInfo(NULL,richedit,&wc);
|
||||
|
|
|
@ -34,11 +34,11 @@ TCHAR g_log_file[1024];
|
|||
#endif
|
||||
#endif
|
||||
|
||||
// *** DO NOT DECLARE MORE VARIABLES INSIDE THIS PRAGMAS ***
|
||||
// *** DO NOT DECLARE MORE VARIABLES INSIDE THESE PRAGMAS ***
|
||||
// This will produce a special section called ".ndata" (stands for nsis data)
|
||||
// this way makensis during build time, can search for this section by name
|
||||
// and change the virtual size of this section
|
||||
// which result in extra memory for extra variables without code to do allocation :)
|
||||
// which results in extra memory for extra variables without code to do allocation :)
|
||||
// nsis then removes the "DISCARDABLE" style from section (for safe)
|
||||
#ifdef _MSC_VER
|
||||
# pragma bss_seg(NSIS_VARS_SECTION)
|
||||
|
|
|
@ -91,7 +91,7 @@ bool SupportedOSList::append(const TCHAR* osid)
|
|||
}
|
||||
|
||||
|
||||
string generate(comctl comctl_selection, exec_level exec_level_selection, dpiaware dpia, SupportedOSList& sosl)
|
||||
string generate(comctl comctl_selection, exec_level exec_level_selection, dpiaware dpia, const TCHAR*dpia2, SupportedOSList& sosl)
|
||||
{
|
||||
bool default_or_empty_sosl = sosl.isdefaultlist() || !sosl.getcount();
|
||||
if (comctl_selection == comctl_old && exec_level_selection == exec_level_none && default_or_empty_sosl && dpiaware_notset == dpia)
|
||||
|
@ -149,11 +149,22 @@ string generate(comctl comctl_selection, exec_level exec_level_selection, dpiawa
|
|||
xml += "</application></compatibility>";
|
||||
}
|
||||
|
||||
if (dpiaware_notset != dpia)
|
||||
if (dpiaware_notset != dpia || *dpia2)
|
||||
{
|
||||
xml += "<application xmlns=\"urn:schemas-microsoft-com:asm.v3\"><windowsSettings><dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">";
|
||||
xml += dpiaware_false != dpia ? "true" : "false";
|
||||
xml += "</dpiAware></windowsSettings></application>";
|
||||
xml += "<application xmlns=\"urn:schemas-microsoft-com:asm.v3\"><windowsSettings>";
|
||||
if (dpiaware_notset != dpia)
|
||||
{
|
||||
xml += "<dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">";
|
||||
xml += dpia >= dpiaware_permonitor ? "True/PM" : dpiaware_false != dpia ? "true" : "false";
|
||||
xml += "</dpiAware>";
|
||||
}
|
||||
if (*dpia2)
|
||||
{
|
||||
xml += "<dpiAwareness xmlns=\"http://schemas.microsoft.com/SMI/2016/WindowsSettings\">";
|
||||
xml += TtoCString(dpia2);
|
||||
xml += "</dpiAwareness>";
|
||||
}
|
||||
xml += "</windowsSettings></application>";
|
||||
}
|
||||
|
||||
xml += "</assembly>";
|
||||
|
|
|
@ -42,7 +42,8 @@ namespace manifest
|
|||
{
|
||||
dpiaware_notset,
|
||||
dpiaware_false,
|
||||
dpiaware_true,
|
||||
dpiaware_true, // System DPI on Vista+
|
||||
dpiaware_permonitor // System DPI on Vista/7/8, PerMonitor on 8.1+
|
||||
};
|
||||
|
||||
class SupportedOSList
|
||||
|
@ -78,7 +79,7 @@ namespace manifest
|
|||
}
|
||||
};
|
||||
|
||||
std::string generate(comctl, exec_level, dpiaware, SupportedOSList&);
|
||||
std::string generate(comctl, exec_level, dpiaware, const TCHAR*, SupportedOSList&);
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -2242,15 +2242,20 @@ int CEXEBuild::doCommand(int which_token, LineParser &line)
|
|||
return PS_OK;
|
||||
|
||||
case TOK_MANIFEST_DPIAWARE:
|
||||
switch(line.gettoken_enum(1,_T("none\0notset\0true\0false\0")))
|
||||
switch(line.gettoken_enum(1,_T("none\0notset\0false\0true\0system\0permonitor\0")))
|
||||
{
|
||||
case 0: // A lot of attributes use "none" so we support that along with the documented value
|
||||
case 1: manifest_dpiaware = manifest::dpiaware_notset; break;
|
||||
case 2: manifest_dpiaware = manifest::dpiaware_true; break;
|
||||
case 3: manifest_dpiaware = manifest::dpiaware_false; break;
|
||||
case 2: manifest_dpiaware = manifest::dpiaware_false; break;
|
||||
case 3: // "True" == "System DPI"
|
||||
case 4: manifest_dpiaware = manifest::dpiaware_true; break;
|
||||
case 5: manifest_dpiaware = manifest::dpiaware_permonitor; break;
|
||||
default: PRINTHELP();
|
||||
}
|
||||
return PS_OK;
|
||||
case TOK_MANIFEST_DPIAWARENESS:
|
||||
manifest_dpiawareness = line.gettoken_str(1);
|
||||
return PS_OK;
|
||||
|
||||
case TOK_MANIFEST_SUPPORTEDOS:
|
||||
{
|
||||
|
|
|
@ -248,6 +248,7 @@ static tokenType tokenlist[TOK__LAST] =
|
|||
{TOK_XPSTYLE,_T("XPStyle"),1,0,_T("(on|off)"),TP_GLOBAL},
|
||||
{TOK_REQEXECLEVEL,_T("RequestExecutionLevel"),1,0,_T("none|user|highest|admin"),TP_GLOBAL},
|
||||
{TOK_MANIFEST_DPIAWARE,_T("ManifestDPIAware"),1,0,_T("notset|true|false"),TP_GLOBAL},
|
||||
{TOK_MANIFEST_DPIAWARENESS,_T("ManifestDPIAwareness"),1,0,_T("comma_separated_string"),TP_GLOBAL},
|
||||
{TOK_MANIFEST_SUPPORTEDOS,_T("ManifestSupportedOS"),1,-1,_T("none|all|WinVista|Win7|Win8|Win8.1|Win10|{GUID} [...]"),TP_GLOBAL},
|
||||
{TOK_P_PACKEXEHEADER,_T("!packhdr"),2,0,_T("temp_file_name command_line_to_compress_that_temp_file"),TP_ALL},
|
||||
{TOK_P_FINALIZE,_T("!finalize"),1,2,_T("command_with_%1 [<OP retval>]"),TP_ALL},
|
||||
|
|
|
@ -64,6 +64,7 @@ enum
|
|||
TOK_XPSTYLE,
|
||||
TOK_REQEXECLEVEL,
|
||||
TOK_MANIFEST_DPIAWARE,
|
||||
TOK_MANIFEST_DPIAWARENESS,
|
||||
TOK_MANIFEST_SUPPORTEDOS,
|
||||
TOK_CHANGEUI,
|
||||
TOK_ADDBRANDINGIMAGE,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue