DPI Scaling in HD Multi-Monitor Configurations

I decided to enhance my workspace by buying a nice large monitor (largest that can fit in my desk) for when I’m working on my Surface on a task at home. This Surface is definitely powerful enough for any work I can throw at it, so why not enjoy a nice large dual-screen setup. Here it is:

My desk in my home office. Surface connected to Dell monitor with official Microsoft HDMI adapter.

Now to demonstrate these issues, you’ll need to be familiar with DPI. Like a great many higher-end PC’s today, the Surface has a very high resolution (Apple uses the trademark “Retina Display” to refer to their HD screens). So although the Surface screen is much smaller, it actually has 50% more pixels than the large Dell monitor.

For this reason, if you took a full-screen screenshot, it would look like this (this and all images are at actual resolution, click any for the full size version). The right side monitor is the default monitor (so when the Dell is plugged in, it’s the default monitor and shows the lock screen, taskbar notification area/clock, and other dialogs by default).

Click to view actual original photo. So many pixels, this basic screenshot saved in the default Paint PNG format is over 6 MB. If you’re in my office, you’d say the right monitor was twice as big, but in pixels it’s puny.

Quick Primer

You can read all about the historical details online, but suffice to say Windows has recently made some changes to better handle this type of display setup. When dragging a window from one monitor to the other, it adjusts the size in a much-appreciated attempt to keep the content at a consistent apparent physical size (the size if I measured the image with a real-world ruler against the screen). I say this is appreciated because otherwise, anything moved to the Surface screen would appear to me to shrink by 50%. Consider that a large part of the interface is at a 9 point font, and moving that to the Surface, already physically smaller monitor, causes it to appear as a 4.5 point font (as in, nearly (definitely for me) impossible to read at normal viewing distance.

Instead, this automatic sizing blows up the image a proportional amount so it looks about the same size to our eyes. Although it’s a nifty trick to be sure, the current implementation is a bit lacking. The quality of the scaled image of the window can is quite poor. Fonts in the window appear blurry or fuzzy. Not terribly so, but noticeably so. Microsoft developer consultant Pat Altimore wrote a great post explaining the blurring problem with DPI scaling back in 2010. Back then you had to reboot to change your scale, and although we have on-the-fly rescaling now as you move content between monitors, the blurring problem remains with all the same constraints Pat outlines.

Best Solution: No DPI Scaling At All

With some monitors like the Surface Pro 3, there are some tricks you can use to kill the blur. As Microsoft DirectX Product manager Danchar puts it, Windows makes some assumptions about the typical viewing distance based on the monitor’s physical size when choosing how much to scale the screen. But because of how high resolution flat panel monitors handle images at specific resolutions, you can actually skip any scaling at all and let your video card do all the work. Danchar’s post is also an excellent modern follow-up to Pat’s 2010 article and I highly recommend it. This is what I use on my Surface Pro 3 because it negates the “hot swap monitor” problem.

Problem Number 1: Hot-Swapping Monitors

This one is another that has been plaguing me since I first tried connecting an extra screen to my Surface, and is a problem for Windows 8.1 as well as 10. Fortunately Danchar mentioned that windows has amazing “monitor topology” management and can remember to change your resolution of an internal display upon the trigger of dis/connecting an external one. It sounds too good to be true that my correct configuration should work better with his method than the default, and I can’t wait to try his suggested method to this annoyance as well.

With automatic per-screen scaling turned on, the scale is not properly applied when connecting or disconnecting an external display. When I first attach my Surface, everything on the Dell monitor appears too large, especially Windows’s own interface. Here’s how my Dell monitor appeared when I first plugged in my Surface to it (I was already logged into the Surface).

Already logged into my Surface, I attach my Dell monitor and this is what the screen looks like.

This is entirely too large. It may not be apparent from the screen you’re reading this one, but trust me when I saw that this is not natural to be squeezed for space this bad on a monitor this large. You’ll also observe that the icons in the notification area on the taskbar are blurry and jagged. They don’t re-draw to scale properly until you log off and back on (Windows of old used to require a reboot but they’ve gotten it down to a re-login these days).

After I log off and back on (and open the same programs to demonstrate), you see what this monitor should look like, and the icons are now crisp and clear in the image below. Again all images on this post are available at full size, click to view the true full-resolution versions.

After logging off and back on, there’s a little more breathing room.

If you’re fortunate enough to have a display capable of Danchar’s trick, I highly recommend it. As for the annoyance of apps not sizing properly when dragging or title bar buttons moving, I’ve submitted feedback in the Windows 10 Technical Preview, forums, and internally.

Problem Number 2: Modern Apps in Windows 10 TP

The latest Windows 10 builds fails to handle the on-the-fly resize properly for modern Windows apps. I’m hoping this one gets solved, but I haven’t seen it called out anywhere yet. For legacy (desktop) programs, the scaling continues to work the same as before. The program is drawn at native resolution off-screen in the video system, and rendered at 2x the size by the DWM (aka Aero) engine. Not the best quality, but manageable. You’ve seen this if you’ve ever owned a Retina iPad or iPhone and you had to 2x scale an app to make it fill the screen, resulting in a slightly-blurry app. At least until the app developers released high-res versions. Some Windows programs have been rebuilt in high-DPI over the recent years, but not many. And for some reason, the Windows shell UI (Explorer folders, taskbar, dialogs, bundled utilities like Notepad) still use the legacy scaling and appear slightly blurry when it adjusts the size on the fly.

With modern Windows Store apps, the blur problem is gone for everyone. Like Apple’s next generation of high-res apps, the modern Windows Store apps scale without blurring and look crisp on a screen of any size or definition.

Buggy in Windows 10 Preview Builds. Unfortunately there is a current bug where the size is not scaled. When you drag a modern app from my Dell monitor, the 96 DPI monitor, over to the Surface’s 216 DPI screen, the app’s physical size gets larger as I expect, and looks beautiful. But upon dragging it back to the low-res monitor, the physical size of the window is maintained. The content inside resizes appropriately, but the actual window frame stays the 2x large size, meaning the bottom-half of the window is out of view, off my screen, and there’s no way to even grab it to resize it back up vertically.

This is demoed in this very rough video clip I originally made to describe this obscure issue to a friend.

I have no idea why, but Windows 10 also oddly shifts the display of the title bar buttons when resizing the app. You’ll notice the Notepad screenshot running from the Surface screen (left) appears slightly blurry in the menus (as expect) but the title bar is being rendered by the Desktop Windows Manager itself after the window’s actual program area is blown up and resized in the video system, so it appears crisp. But why do the title bar buttons move, and make it harder for me to target with my pointer? Paul Fitt is spinning in his grave.

Why does the title bar buttons move when I move a monitor to another screen? Surface left, Dell monitor right (Surface screenshot scaled to same apparent physical size).

Hopefully these issues are resolved in Windows 10. Given the focus of Windows 10 for phones to be able to plugin to external displays and use them as a desktop, I imagine there is much work focused on improving mult-mon in Windows. Time will tell.