Bug fix for Igor7 HDF5 Browser

I have found and fixed some bugs in the Igor7 version of the HDF5 browser that made it misbehave on high-resolution Windows displays. This fix will be part of an upcoming Igor Pro 7.07 release.

If you have experienced problems where some of the controls do not fit in the HDF5 browser window, download and install this file:

NOTE: This is for Igor7 only. It is not compatible with Igor6 and is not needed in Igor6.

To install, quit Igor7, and replace "C:\Program Files\WaveMetrics\Igor Pro 7 Folder\WaveMetrics Procedures\File Input Output\HDF5 Browser.ipf" with the contents of the referenced zip file.

I have tested successfully this in the following configurations using a Windows 10 laptop with 3140 x 2160 physical pixels:

Windows 10 1920 x 1080 - 100% (96 DPI)

Windows 10 1920 x 1080 - 125% (120 DPI)

Windows 10 3840 x 2160 - 225%

Windows 10 3840 x 2160 - 250%

In Windows 10, these are set using the Display app which you can open by typing "Display" in the Windows 10 task bar search field and then selecting "Change display settings". After changing display settings, you must restart the machine.

"1920 x 1080" is one-half the physical number of pixels in each dimension and simulates a standard-resolution display. You set this using the "Resolution" popup menu in Display Settings.

"100%", "125%", and so on are settings that you enter in the "Change the size of text, apps, and other items" popup menu in Display Settings.


When you resize an HDF5 browser window, the HDF5ResizeBrowser routine runs and adjusts the positions of controls. The main change that was required to get this to work correctly at high resolution on Windows was to change this:

GetWindow $browserName wsizeDC

to this:

if (PanelResolution(browserName) == 72)
    GetWindow $browserName wsizeDC  // Igor6 compatibility mode (or running on Macintosh) - we need pixels, not points
    GetWindow $browserName wsize    // 1.21: We need points, not pixels, if not in compatibility mode

The reason this is needed is complicated. Basically, the advent of high-resolution windows displays required that we change the interpretation of panel coordinates from pixels to points in Igor7. However, for backward compatibility, Igor7 operates in a compatibility mode when running at standard resolution (96 DPI). For further discussion, execute:
DisplayHelpTopic "Control Panel Resolution on Windows"

The change shown above is required because, when running in compatibility mode at standard resolution, Igor7 expects coordinates in units of 96-DPI pixels which is what wsizeDC returns. But when not running in compatibility mode, Igor7 expects coordinates in points, which is what wsize returns.