The Old Way - Windows XP Scaling

As mentioned, Windows XP does have support for higher density displays, but the experience is rarely very good. Changing the DPI settings in Windows XP increases the font size and OS elements, making everything larger on the screen. It works up to a point, but if the system DPI setting is too high, many applications have issues. Even in XP, there’s an API that allows a developer to check what the fonts are set at and scale their forms as needed to make it work with that ratio of font. However, if an application doesn’t check the font DPI level, there are often problems: text boxes overlap UI elements, form fields have text spill out the top or bottom of the field, and other nasty ugliness.

   

Even the OS doesn’t scale very nicely. The minimize and close buttons become very large, title bars are very text heavy in look, and system tray icons are simply scaled up in size giving an aliased and blurry look to them. It’s technically a workable solution, but without extensive developer buy-in, it likely causes as many (or more) problems than it solves.

But Windows XP is now old news, and due to the low PPI displays of the time, it was generally not an issue. DPI scaling in XP was normally used if a person felt the text on the screen was too small, but in almost all cases a better solution was to simply lower the resolution of the monitor, even if it introduced blurriness to the LCD image.

A New Way - DPI Virtualization

Windows Vista introduced a new concept for dealing with applications that are not DPI aware – DPI Virtualization. Below 120 DPI the system would continue to utilize the XP scaling algorithm, but when the DPI settings in Windows are set above 120 DPI, DPI Virtualization is enabled. Any DPI-unaware application that request the DPI setting from the operating system with DPI Virtualization enabled are simply told that the DPI is set at 96 DPI – the base level. Windows then renders the application off screen and then dynamically upscales the application to whatever DPI setting is selected by the user.

While this certainly fixes the issue with fonts falling out of text boxes, it introduces some blurriness to the application. This is not an ideal situation, since the user experience is somewhat compromised. To get around this, Microsoft developed an API to declare that the application is in fact DPI aware on its own. Developers can call SetProcessDpiAwareness to declare that their application is DPI aware, and if so, Windows will not perform any scaling of the application. It’s then up to the application developers to decide how best to handle “non-standard” DPI settings.

Scaling Windows - Introduction Where It All Falls Apart
Comments Locked

114 Comments

View All Comments

  • Lundmark - Wednesday, April 16, 2014 - link

    People who like image quality should get a MacBook.
  • wwwcd - Wednesday, April 16, 2014 - link

    This numbers of DPI or/and PPI(which is the same thing) didn't make me satisfaction. I will wait for 8K(+) resolution for my next large dimensional PC/TV display.
  • aron9621 - Wednesday, April 16, 2014 - link

    Per display DPI scaling in Windows 8.1 is a joke. Try connecting a 180ppi Dell U2414Q and a 96ppi Dell 2413 to your computer, Windows is so dumb it doesn't even detect the correct DPI setting for the monitors, and worse, it doesn't allow you to change it. Oh yes, you can increase/decrease the DPI, but only for BOTH screens simultaneously, it doesn't matter if you have "Let me choose one scaling for all my displays" checked or unchecked, the only difference that setting makes is the way it breaks DPI unaware applications. So you are either stuck with one screen with normal elements and one with tiny ones, or with normal elements on the other screen and giant ones on the former one. And I yet have to figure out how Windows chooses which screen it opens the application on.
  • caywen - Friday, April 18, 2014 - link

    This. Windows seems to have no idea how big my 24" samsung monitor is. I even have samsung's monitor driver installed. In display settings, Windows thinks my Yoga 2 Pro's 13" screen is 4x larger than my 24", presumably because it's still assuming resolution == size.

    I really hope Microsoft fixes this. They should at least provide a way for us to say, "Windows, this monitor size is this big" and for Windows to say "righty ho, now I totally know this display's real DPI."

    I feel like Microsoft is fumbling the ball. They give developers every gun to shoot their foot with, and give users useless tools to mitigate it.
  • Gigaplex - Wednesday, April 16, 2014 - link

    "This application is the worst example of usability on a High DPI system that I’ve seen."

    I'd pick small elements over element cropping/overflow any day. It's especially annoying when OK/Cancel buttons on dialogs are off-screen because their location wasn't calculated correctly.
  • aeeroO - Wednesday, April 16, 2014 - link

    960x480 WHAT KIND OF SORCERY IS THAT? Every apple fanboy knows it's 960x640...Anand, where are you?
  • StrangerGuy - Wednesday, April 16, 2014 - link

    I find it especially baffling how could people even defend DPI laziness...in mid 2014.

    What, you don't like progress, or are you still living in 2000?
  • valhar2000 - Wednesday, April 16, 2014 - link

    So, once again, Microsoft gets blamed for the mistakes of other software developers. If only Adobe had a letter "s" in their name that could be easily replaced with a "$"...
  • e_sandrs - Wednesday, April 16, 2014 - link

    You could use the Euro sign for the e and/or the Thai Baht for the b and/or the Vietnam Dong for the d? That's the best I could do. :)

    A₫o฿€
  • berger0 - Wednesday, April 16, 2014 - link

    Anyone know a work around to fix Chrome? In Chrome 35 they removed the HiDPI flag. I found some post that had me put the flag in the registry, but chrome looks really bad now. Anyone else running Chrome Beta or Canary seeing this issue? I am running the YogaPro 2

Log in

Don't have an account? Sign up now