Windows setting "Fix scaling for apps" - what does it do?

In the Windows 10 settings (as of version 1809), there is a setting "Fix scaling for apps" (under Settings -> Display -> Advanced Scaling Settings), with a toggle switch that says:

Let Windows try to fix apps so they're not blurry

I understand that this changes how Windows and Windows apps handle high-DPI displays, but what exactly does it do?

I managed to fix a misbehaving app by toggling this switch, but I'd like to understand what exactly this setting does, so I can recognize any problems it may cause.

3 Answers

tl;dr: The setting controls GDI Scaling, a specific technique for scaling a program's display.

To understand what Windows does requires understanding how an operating system handles graphical displays.

A graphical program draws its graphics which is shapes, text and images, on a virtual surface. When it's time to display, the OS translates this virtual surface to the target device, which may be a display or a printer. This way, the program does not need to know and adapt to the display medium, as this part is handled by the OS and its drivers.

Newer high-resolution and high-DPI monitors have created the problem that the display of some programs might be too small for the user, requiring scaling. Microsoft has created for that the API for DPI-Aware graphics, so the display by the program is automatically adapted, but only a few programs really use this interface.

For programs that are not DPI-Aware (which is most of them), Microsoft has created automatic mechanisms to scale up the display. Its first mechanism of the kind (already present in Windows Vista) was based on image-resizing algorithms, meaning that Windows took the screen painted by the program and blew it up, in effect translating one drawn pixel into more than one. The result is the same as zooming into an image, the image is larger but will lose quality and will appear blurry.

Microsoft's second and latest attempt at solving the problem (introduced in Windows 10 V1703) is to intercept graphical operations (GDI) while the program is drawing on its virtual surface. Microsoft refers to this as GDI Scaling - see High DPI Desktop Application Development on Windows. For example, the program may write text using the font at 12 points. However, if the target is a screen that is scaled up by 150%, Windows will instead use a font that is set to 18 points, which gives perfectly readable results. Other drawing calls are intercepted similarly.

This method is invasive and may fail/interfere with the program in some cases (see e.g. Windows scaling issues for high-DPI devices), which is why Windows needs the user's permission to use it. Permissions can be given system-wide (the setting "Fix scaling for apps" you asked about), or for each program via the properties of the executable (Tab "Compatibility" / "Change high DPI settings").

6

Windows 10 can "zoom" software and apps which draw via GDI (including all parts of the operating system), scaling all vectorial elements to the desired percentage.

In example, setting a 150% scaling will resize 600x400 px window to 900x600 px; 32x32 px icons in the scaled window will be resized to 48x48 px; a button 8 px from top and 16 px from left will be moved 12 px from top and 24 px from left, and 12 points fonts will be draw as 18 points. Setting a 200% scaling will double the original parameters, and so on.

This will preserve the relative size and posizition of all elements making the items easier to read and to click or to touch, so customizing the scaling setting can be useful in several ways: 1) make the system and application more readable on high DPI screens 2) allow to adjust the size of items for people with poor eyesight 3) make the system more touch friendly as the touch is less accurate than clicking with mouse and requires more space between clickable items

This scaling mechanism (called "GDI Scaling") actually redraws the GDI output of the software/app on screen, and was introduced back with Vista - it is gaining traction in last decade as high-DPI and touch screens becomes increasingly common. It complements the older scaling method dating back to XP where the graphic output was treated as a bitmap image and scaled accordingly, which led scaled applications to look blurry and crearly distinguishable from native DPI-aware rendering, that's why the new mechanism is referred in terms of "Let Windows try to fix apps so they're not blurry".

Unfortunately GDI Scaling does not help for bitmap graphics, so these are still scaled as bitmaps - in the former example a 32x32 px icon will become 48x48 px, but it will be filled with the upscaled, inferior resolution 32x32px bitmap anyway.

Even worse some software may misbehave in various unpredictable ways if developers originally relied on assumptions that are broken by the system modifying GDI on the fly to scale the output on screen, so as a role of thumb when changing the scaling settings old software should be carefully tested. Therefore, GDI scaling can be controlled by the setting "Fix scaling for apps".

3

I ran into this problem recently. I would add to the above solutions, that this helps fix the scenario where your laptop has scaling enabled, and you want to run an application "un-scaled" on your secondary monitor(s).

In this example, the laptop is a high res screen and only 13in in size so scaling is necessary to read the smaller fonts, but I have multiple monitors attached through USB-C connection which are 24" standard HD and do not need scaling factor applied. By using the scaling function and setting the per application compatibility->Change high DPI settings function, I can remove scaling from the applications I typically run on the large monitors and leave it functional those I use on the laptop. Not a perfect fix, but helps in my scenario.

2

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like