Zoom level / text size in Windows

In Windows 10, my Igor 9 looks too small.

I can right-click and change Zoom level on the command line and history, but not in the menus.

I played with Misc -> Settings -> Miscellaneous -> Disable High DPI Scaling, but that didn't do the trick.

Am I missing something? I'm struggling to read the menus, in order to figure this out.

What is the value of your Windows size setting (Settings => System => Display => Scale and Layout)? Igor should scale all elements with this setting. If you are at 100%, this may look pretty small on large displays. Try to set a higher value and see if this is better.

It is 150%.

I previously used this setting to modify Igor, but now I can't see any changes.

On my LAPTOP screen I see Igor with large text, but on my EXTERNAL docked monitor I don't.

Please execute:

DisplayHelpTopic "Windows High-DPI Recommendations"

This gives our recommendations for a setup similar to what you describe.

I believe the Scale and Layout setting is set for each monitor separately. So when you have your external monitor attached you might want to check this setting again after clicking on the external one (I guess this will be display 2 then). The setting might be 100% here.

In reply to by aclight

aclight wrote:

Please execute:

DisplayHelpTopic "Windows High-DPI Recommendations"

This gives our recommendations for a setup similar to what you describe.


@aclight, this brought up the following instructions for me:

 

Quote:

  1. Connect the external standard-resolution monitor.
  2. Open the Display settings page. You can do this by right-clicking the Start menu, choosing Settings, clicking System, and selecting Display in the lefthand pane.
  3. In the Multiple Displays setting, near the bottom of the pane, select Extend These Displays.
  4. Click the Identify link below the diagram of your displays at the top of the pane to confirm which display is which. For these instructions, we assume that display #1 is the high-resolution built-in display and display #2 is a standard-resolution external monitor.
  5. Click the box representing the built-in high-resolution display (display #1 for this example).
  6. Set Resolution to the recommended value, such as 3840 x 2160.
  7. Set Scale and Layout to the recommended value, which may be 200%, 225%, or 250% depending on your hardware.
  8. Check the Make This My Main Display checkbox near the bottom of the pane.
  9. Close the settings control panel.
  10. Reboot your machine twice. To get the best results, you must reboot your machine 2 times after any changes to the display settings.
  11. Go to Misc -> Miscellaneous Settings -> Miscellaneous (section at left), and enable the option 'Disable High-DPI Scaling'. Then restart Igor.
  12. After your machine restarts twice, start Igor. Except for occasional minor glitches, it should work properly.

Step #11 inserted in bold was not part of my Igor 8.04 instructions. I tested this and found that it was necessary to solve my menu scaling issue. I had tested this before and it was not sufficient by itself. 

Thanks!

Well, that 150% scaling is problematic because the Qt framework (wrongly) assumes integer scaling. If you can get along with 100% or 200% that may give better results.

In my experience, this was more common on laptop monitors, and is less common recently.

I continue to struggle a bit with this.

For example, I normally work with a high-dpi external. So I set everything up for that. But today I am on my laptop screen, and now most of my saved window positions from previous work are awkward. Graphs that were publication ready now don't fit on the screen.

As another example, one of the Igor-built software panels I use (community software) doesn't fit on my external monitor screen and I can't see how to resize it.

I think both of these issues would be fixed by a global option to rescale windows. Is there one?

Does it help if you magnify the graphs / panels: Go to Graph / Panel => Expansion and set the desired zoom level. Yes, you have to do this for all graphs / panels manually. But you can quickly click on each window and (re-)invoke the respective commands, e.g., ...

ModifyPanel expand=0.75
ModifyGraph expand=0.75

Or is does this not work for you? As far as I know, there is currently no setting to zoom everything. I usually save everything to fit the smallest screen I have even when I temporarily work on a big screen where I look at the graphs in detail.

I thought this would work for Igor 9, but it has some issues:

function SetWindowsMagnification(variable value, [string parent])
    if (ParamIsDefault(parent))
        wave/T wlist = ListToTextWave(WinList("*",";",""), ";")
    else
        wave/T wlist = ListToTextWave(ChildWindowList(parent), ";")
    endif
    for (string strWin : wList)
        switch (WinType(strWin))
            case 1:
                ModifyGraph/W=$strWin expand=value/100
                // use recursion because panel subwindows are not adjusted
                SetWindowsMagnification(value, parent=strWin)
                break
            case 3:
                ModifyLayout/W=$strWin mag=value/100
                break
            case 5:
                Notebook $strWin magnification=value
                break
            case 7:
                // this doesn't seem to work properly for
                // panel subwindows with graph parents.
                ModifyPanel/W=$strWin expand=value/100
                break
        endswitch
    endfor
end

usage: SetWindowsMagnification(120)

Tony, just FYI: I had also noticed that external panels attached to graphs have issues with expansion and already sent a support message. I'll keep you updated how this goes. Also, there might be some functionality in normal panels which is not programmed with the expansion factor in mind and may break (although probably somewhat rare).

I have not tested, and the instructions are not quite clear but ...

Does the $strWin string have the proper syntax within the switch case 7 call to designate it as being attached to a HOST# graph??? IOW, what is returned within wlist for a panel that is attached externally to a graph versus a panel that is free-standing? If I understand correctly, if the call to WinList does not return the full HOST# designation in it to designate external windows attached on graphs, case 7 will fail.

In reply to by jjweimer

SetWindowsMagnification(50) is supposed to set the magnification level of all graphs, panels, notebooks and layouts to 50%.

The function is recursive for subwindows of graphs, and in the case of subwindows the optional parent parameter is set so that WinList is replaced by ChildWindowList, so the subwindow syntax should not be a problem.

As chozo pointed out, there seems to be some buggy behaviour when subwindows are redrawn with different magnification.

 

In reply to by tony

tony wrote:

I thought this would work for Igor 9, but it has some issues:

[...]

Thanks for posting Tony. If the issues are limited to external panels attached to graphs then the function is very useful for many other cases in my community.

I totally forgot about this thread. The issue with external panels has already been fixed in the nightly. Now the code should work for anything (I haven't tested the particular code posted here, though).

I have finally obtained and installed Igor 9. It's still very awkward to work with my laptop (~14", 1920 x 1080p, 150% scale recommended by Windows) and external monitor (~17", 1920 x 1080p, 100% scale recommended).

The Command window, Window Browser, and Procedure window often end up off-screen or half off-screen when I switch between monitors. 

I imagine that this isn't necessarily Igor's fault, but a result of Igor's floating window design. But no other program I use suffers from this problem.

It may not be an ideal solution, but this will clean things up:

DoIgorMenu "Control", "Retrieve All Windows"

In reply to by jcor

jcor wrote:

I have finally obtained and installed Igor 9. It's still very awkward to work with my laptop (~14", 1920 x 1080p, 150% scale recommended by Windows) and external monitor (~17", 1920 x 1080p, 100% scale recommended).

If your vision is good enough that you can comfortably use your laptop monitor at 100% (possibly even 125%) scaling, I think you'll find that Igor will work much better.

Also, earlier you mentioned that enabling the 'Disable High-DPI Scaling' option in Miscellaneous Settings->Miscellaneous helped. If you had that setting enabled in IP8 when you first ran IP9, the preference should have been copied to IP9. But you might check your IP9 settings to see if this option is enabled, and if not give that a try.

@aclight, I've been using my laptop and external at 100% scale with High DPI Scaling disabled.  This makes it tolerable to work... i.e., I can create an experiment on my external monitor, then open it later on my laptop and not find everything impossible to access.

Meanwhile, I have been struggling to place popup dialogs in a reasonable position. If I manually resize e.g. the ModifyGraph dialog box, it doesn't save its settings. Same for modifying lines and shapes on a plot.

Suddenly using Igor is an incredibly clunky experience for me... It's really slowing me down!

In reply to by jcor

jcor wrote:

If I manually resize e.g. the ModifyGraph dialog box, it doesn't save its settings. Same for modifying lines and shapes on a plot.

You mean that the built-in ModifyGraph dialog doesn't remember size and position? It does for me (IP9, mac).

It seems to remember the wrong position and not be changable, when I am using High DPI Scaling.