Uploaded image for project: 'NetBeans'
  1. NetBeans
  2. NETBEANS-1227

Mark Windows launcher binary as per-monitor DPI aware

VotersWatch issueWatchersLinkUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    Description

      As of Java 10.0.2, support for HiDPI monitors on Windows is quite good. All the standard Swing components appear in high resolution, and Graphics2D surfaces are automatically scaled appropriately for whichever monitor their containing window is located on, including when windows are dragged between monitors in a mixed-DPI multi-monitor setting.

      For this to work, however, the EXE file that launches NetBeans must contain a manifest that declares the application to be DPI-aware. Such a manifest currently exists in java.exe and javaw.exe, but not in the custom netbeans64.exe launcher. A workaround for the missing manifest is to right click the "bin\netbeans64.exe" file, or whichever shortcut is being used to open NetBeans, go to the "Compatibility" tab, click "Change high DPI settings", "Override high DPI scaling behavior", and select scaling performed by "Application".

      An appropriate manifest should be added to netbeans64.exe to declare NetBeans as per-monitor DPI aware.

      To see how the manifest should be declared, we can dump the manifest of javaw.exe:

       

      <?xml version="1.0"?>
      <assembly xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" manifestVersion="1.0">
       <assemblyIdentity name="javaw.exe" version="10.0.2.0" processorArchitecture="X86" type="win32"/>
       <description>Java(TM) SE process</description>
       <!-- More stuff goes here. --->
       <asmv3:application>
       <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
       <dpiAware>true/PM</dpiAware>
       </asmv3:windowsSettings>
       </asmv3:application>
       <!-- More stuff goes here. --->
      </assembly>
      

      This reveals that Java 10.0.2 considers itself DPI-aware at the "Per Monitor V1" level (see the Microsoft documentation linked below). The NetBeans launcher binary should declare the same.

      References:
      https://docs.microsoft.com/en-us/windows/desktop/hidpi/high-dpi-desktop-application-development-on-windows
      https://msdn.microsoft.com/en-us/library/windows/desktop/mt846517(v=vs.85).aspx
      https://docs.microsoft.com/en-us/windows/desktop/sbscs/application-manifests
      https://blogs.msdn.microsoft.com/mithuns/2009/12/16/random-how-to-quickly-view-a-binarys-embedded-manifest
      https://docs.microsoft.com/en-us/sysinternals/downloads/sigcheck

       

      Attachments

        1. SmallIconsRun.png
          114 kB
          Christian Lenz

        Issue Links

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            Unassigned Unassigned
            ebakke Eirik Bakke
            Votes:
            1 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Time Tracking

                Estimated:
                Original Estimate - Not Specified
                Not Specified
                Remaining:
                Remaining Estimate - 0h
                0h
                Logged:
                Time Spent - 2h 20m
                2h 20m

                Slack

                  Issue deployment