Living a High-DPI desktop lifestyle can be painful on Windows
hanselman.com
hanselman.com
For one, you can't just throw hires bitmaps into a resource section of .exe and expect them to magically work. There needs to be code that looks at current DPI and picks matching bitmap.
For two, standard DPI levels are 96, 120, 144 and 192, but guess what? All other values in between and above 192 are game too. In fact, there's a nice little slider in the Control Panel that encourages you to put it somewhere in between. This means that your code either needs to rescale bitmaps to match these odd DPIs or use the largest one that fits. In either case the result will look like butt.
For three - the dialog layout. If your dialogs have text that's longer than 3-4 words, the chances are that it will either overflow, underflow or wrap differently under different DPIs. This in turn means that you need to test dialog appearance with at least 4 different font sizes and Tahoma 8px for Windows XP. Do you know how hard it is to word a longish sentence so that it would fill about the same space with all 5 combinations? Really damn hard and very time consuming.
But wait! There's more.
Every app icon needs to exist in at least 9 sizes, like so - http://imgur.com/5Pe2ZV0 - and this would still miss some cases where Windows will scale an arbitrary chosen icon image and use it.
It really is a mess. However this is not something unexpected if you've been writing for Windows for a while. This mess is a routine.
I don't understand that one. If the text is going to be a different size because it's scaled with the DPI, then hasnt the dialog itself scaled equally as well?
In practice, this is not sufficiently accurate to accommodate text size differences when going from one font/size to another. It's just too crude.
For example - http://imgur.com/STtd8OQ
Top is SegoeUI/9pt, standard for DPI of 96.
Middle is SegoeUI/10pt, standard for DPI of 125.
Bottom is Tahoma/8pt, standard for XP at 96.
See how bottom two trim "practice"? That shouldn't be happening, but it does.This makes it quite impossible for an application to implement a general solution to the problem. You pretty much have to treat HiDPI as another translation of the GUI with respect to sizing things.
I actually tested this several months ago for one my projects and it was about 5% (on a sample of few hundreds). That's a very respectable 1 in 20. Not that I disagree with your ROI point, it's just that playing well with non-default DPIs becomes progressively more important now.
Apple new this was coming and for years have demanded icons, images, and artwork to be provided in high resolution. They developed assets for their own software in high resolution before retina displays ever hit the market.
Contrast to this article where Microsoft's own Visual Studio (one of the "best cases" mentioned by this article) doesn't even have Hi-DPI icons. Microsoft's own software displays blurry icons and it's listed as a "best case."
Apple also pushed Intel very hard on driver support for their integrated graphics. Rewriting the driver-level image scaling to ensure that discrete and integrated GPUs produced identical images, again before retina displays ever came on market, to allow for seamless switching between GPUs on their hardware.
This sort of foresight was necessary to pull off the high density display introduction as smoothly as they did.
Same goes for multiple monitors, which "just worked" when Apple introduced their high density displays. You could connect a regular monitor to your laptop and drag windows across. The DPI and art assets adjusted dynamically. This is something Windows is only just now getting around to fixing in version 8.1.
This is a few years old now, but is still one of the better explanations of the issues involved in modern font rasterization, with emphasis on how Microsoft's likely held back the entire industry by only realistically supporting widget fonts at the standard 96ppi. Really, anything other than the stock Arial 10pt/96ppi is going to cause layout issues.
In an effort to very-aggressively hint that font so it looks consistent, they throw out horizontal accuracy by rounding to pixel boundaries. Per-letter. Ouch.
The best part of the paper, though, is this image that moves the sentence to the right exactly 1/10 pixel each line:
http://www.antigrain.com/research/font_rasterization/sample_...
That's all you need to know about high DPI support in Windows, in a nutshell.
There was a time when 320x200 graphics with 256 colors was amazing. Would 800x600 have been considered "high DPI" back then?
Or in the time were people were playing Duke Nukem 3D at 640x480 pixels, would they have considered 1920x1280 to be "high DPI"?
Windows has transitioned all the way from 640x480 in Windows 3.11 to the resolutions of today, why would there be a problem with just another step up?
What is "high" DPI today? What will it be tomorrow?
However at the common "high" density used in cellphones these days, 320+ DPI or so, artifacts in non-AA fonts are still visible (not always, or to everybody, but sometimes anyway).
So, at least, there are some cases where higher-density than today could yield some benefit.
Net step would indeed be disabling anti aliasing
Also, there is the fact that you can move your face closer to the screen to look at something small. The eye can resolve over 800 ppi at 4". Finally, the fact that the eye can resolve say 300 ppi at a particular distance doesn't mean that's the best resolution for the underlying screen. If you want to render without tricks like anti-aliasing, you want to have enough resolution so that you avoid visible artifacts. E.g. imagine rendering two adjacent thin diagonal lines separated by 0.3 arc-minutes (the spatial resolution of the eye). You want enough resolution so that you can render those lines without their touching anywhere.
I'd say that all displays with a resolution (here I mean dpi) so high that its uncomfortable to use with current desktop programs are "High-DPI". Once the software is changed to allow arbitrary dpi scaling, there will be no barrier, so there is no low or high dpi anymore, just higher dpi. (And ultimatively, as soon as you can't see individual dots anymore, it won't make sense to increase the dpi further.)
Eventually it doesn't make sense to make denser panels because you don't see the difference anymore. This next generation of displays definitely isn't there yet, but it is "high" as in "we're getting there".
I personally can't wait until we cap out pixel density, because then we can get variable refresh rate and color accuracy back. I want my 300 PPI vbr up to 120hz 10 bit color panel monitor for $300!
The transitioning all the way down from 320x200 to today was possible because the same character was always readable, even though it previously covered half of the screen.
Windows has had the DPI selector ever since 3.1 (or even 3.0), but because nobody traditionally tweaked the settings, nobody bothered to make their apps look right and because nobody bothered to make the apps look right, nobody tweaked the settings because running higher DPI modes was breaking apps all over the place.
Mac OS did this too - I think in the 10.4 timeframe there was an option to actually switch into a higher DPI mode and many of the OS-internal UI assets were vector images. They probably noticed that it will never work out, so they opted to go for a hack:
With the exact quadrupling of the resolution, we got a solution that works mostly transparently for the applications. They still think they are drawing with a one-pixel resolution, so the burden of getting this right moved from the app makers to the OS maker.
Even if an application has no modifications for retina displays, it will look mostly right (minus some blurring issues for pixel art). There will be no scaling issues, no texts will be cropped and everything will be scaled by the same factor.
If you want to 'optimize' your app for retina, all you do is provide higher resolution bitmaps and you're mostly fine.
The exception is some text-editors (sublime) and browsers (chrome) that were doing some manual text rendering, not relying on the OS API. These had to be fixed manually, but there really weren't that many applications like that.
Yes, the way Windows does it is probably more "purist". Yes, the way Windows does it allows for arbitrary scaling factors (also sub 200%).
But it doesn't work in practice.
Yes. The Apple solution is a hack. Yes, it doesn't allow scaling to arbitrary factors. Yes, providing 2x bitmaps instead of one vector image is annoying.
But it works in practice.
On a retina mac, you'd never see the issues the OP complained about seeing on their Windows machine. What you get there might be superior from a technical standpoint, but it all boils down to an ugly half-working mess because developers just don't bother to get it right.
I'm not excluding myself here. I've done a few windows apps and I f'ed up high dpi modes as many times as everybody else - also because my development environment (Delphi) made some assumptions that just didn't work well with high-dpi modes.
Getting HDPI right on Windows (Desktop): Really hard and thus not worth it for most developers. Getting HDPI right on the Mac: Trivially easy.
For example, my MBPR 13" is set to the setting between "Best (Retina)" (which is the exact 2x, 1280x800 I think) and "More space") (which is 1.52x, 1680x1050), so I get 1.77x the space (1440x900). You control the DPI there and everything remains nice and sharp.
Apps aren't even aware of this scaling, so everything works perfectly well.
That's why I wouldn't call that arbitrary scaling. If they could offer it using their method, I'm sure they would.
And of course, you can see this without any 3rd party software if you connect it to a monitor or projector with a weird resolution and enable mirror mode.
If Sony is planning to release a HiDPI Windows laptop, whether it works well is a problem for who? Sony? Microsoft? Every Windows app developer ever?
If Apple releases a laptop with a Retina display, it's Apple's problem. No ifs or buts. Everyone knows exactly where the buck stops.
I think they also realise that our current "2x" solution is our future software's "1x" scale factor. When Apple's line of hardware is retina-only, we'll probably see them drop support for the distinction between 1x and 2x. Everything will simply become designed for the current density.
I posted a separate comment to the effect that the Apple solution also allows using both hi- and regular-DPI displays simultaneously with no issues.
But in practice, the human eye has limits so density is not going to increase forever, and we only have a known, finite set of displays to support. So just provide bitmaps for the display densities that matter. Boom. Problem solved.
(Probably forever, depending on how much you believe the "retina" marketing claim -- the difference between the type on e.g. a retina display mac and a magazine seems small enough to me that I could easily imagine a push to "super-retina" not happening in my lifetime.)
That is how it (should) work in Windows too. All applications that do not explicitly claim to be DPI aware get just bitmap scaled, just like on OSX.
The real problem is that tons of applications claim to be DPI aware, but in reality are not. The reason Apple does not have these kind of issues is that their Retina thing is more recent and thus there are no legacy apps that claim to be DPI aware.
I don't believe that is true. If you render text using the right high-level OS X APIs, your OS-provided vectors are rendered natively without being bitmap scaled.
WPF can do this just fine also, but few apps are written in WPF :p (well, WinRT inherits this nice property). GDI, I'm not sure....
That isn't what happens for Cocoa apps on OSX, though. Non-retina-aware apps aren't bitmap scaled; the Cocoa UI stuff is still scaled up properly (XBench, which had its last release in 2006 targeting MacOS 10.3, looks perfectly sharp on an rMBP, for instance). It's just non-standard stuff that may be a problem.
Not actually true. Many games are fairly messed up in either windowed, full-screen, or both noises. Usually it's because of a bad middleware toolkit that either enables the Retina backbuffer our not but the OpenGL scaling doesn't match the window scale. Especially prominent in games that use the older, Carbon method of exclusive full screen mode.
Aside: full screen games manage to be even worse on OS X than on Windows. That takes effort. (Games as full screen spaces is a really nice, usable concept, but the performance hit is so nasty nobody wants to support it instead of the invasive and messy Core Video tour.)
Mavericks treats multiple displays as unique desktops now, to enable for example separate Full Screen modes for each display.
There was, though the assets were big scalable bitmaps, not vectors (even on modern HiDPI Macs, the UI assets are still way too big). John Siracusa covers a lot of this (and complains about it not being used) in his MacOS reviews.
> Yes. The Apple solution is a hack. Yes, it doesn't allow scaling to arbitrary factors.
It actually does, through a _really_ horrible hack. Say you want 1680x1050 _point_ resolution on a 2880x1800 MBP. You can select that; what the OS then does is draws at 3360x2100, then scales it down to 2880x1800. Sounds horrible, but generally works very nicely.
It's worth noting, by the way, that Metro scaling works much like MacOS scaling; it's only the desktop that uses the older style.
Apple basically made everyone rewrite their apps instead of doing something sane - though admittedly they never had real support for multi-dpi, so perhaps that's an at least understandable solution.
Microsoft have always had support for changing the DPI in the operating system, but in Windows 8.1 instead of reusing that support and improving the code so that you don't need to log out and back in to change DPI they instead started doing Retina-style scaling - but far worse.
High-DPI apps (edit: non-Metro, I should clarify) in Windows 8.1 actually don't look good on a low-DPI screen. (You need an e.g. Retina main screen and a standard external monitor to experience this.) Sure, they look a lot better than the pixelly stuff on the main screen, but instead of rendering at standard DPI Windows instead renders at high DPI and linearly scales down the resulting image in the window manager, resulting in text that looks strangely off because it has been rendered at high DPI with appropriate hinting and then scaled down.
This is not to mention what happens when you have a program half on one monitor, half on the other... it's either tiny on one screen or humungous on the other. Retina at least does this beautifully.
They did not make everyone rewrite their apps. The only apps that actually needed to change were the ones that were rendering text without using the Text rendering APIs of the OS (a small minority of apps).
Everything else just worked totally fine.
Yes, some icons might have been blurry, but functionality-wise everything was fine.
This is in contrast to Windows where switching to HiDPI mode usually means cut-off texts, invisible buttons (pushed out of the dialogs they are in) and, as noted by the OP, sometimes a mish-mash of correct and incorrect rendering within the same window.
You tell us you were shocked by how it was handled by Apple, so what would you have done differently? How would you have solved the issue in a way that requires even less work by app developers?
Honest question. I really can't imagine a better solution than what Apple has done, but then again, the bulk of my knowledge is in databases, web servers, web applications and devops, so I'm sure I miss something that you can see. Hence I'm asking.
Well at least Adobe is consistent. The Flash Installer is awful on OS X as well. For example, say you've disabled the translucent menu bar - you'll notice it's drawn translucent when the Flash Installer is the foreground app. (Nevermind the fact that the installer is a just an annoying wrapper around the OS X installer that seems to do nothing more than force you to quit your open browsers before it will continue. With some digging you can actually find where it's downloaded the real installer pkg, double-click that pkg to install it, then quit the wrapper.)
> "Do you have any examples of high-DPI frustration on the Desktop? Upload them to ImgUr.com and link to them in the comments!"
Yeah... your blog post looks like shit on my MacBook Pro... all your screenshots are blurry messes.
Because I'm using Chrome? It has a very good sharpening filter.
Another application that definitely deserves mentioning is Chrome. It looks absolutely terrible. It's really blurry and browsing the web for even a couple of minutes really strains my eyes. If you run high DPI Windows, you're going to need a different browser than Chrome (Firefox looks fine but unsurprisingly does not perform so well at such a high resolution. Internet Explorer is actually not a bad choice - high res and fast)
The url bar and tabs will be a bit small but the page content will look good.
Adobe has historically been bad at playing well with Windows. They like to reimplement large parts of the UI.
Never tried first hand, hope to have a chance with the Retina MacBook Pro I'm buying at the end of March.
However GUI elements of most programs are still specified using pixels, so buttons, menus and some icons might look "tight" around the text if the theme is sized using pixels. Recent GTK/QT versions do support point units, so it mostly depends on the theme you choose. These toolkits also always (historically) had resizable dialogs, contrarily to window and mac, so even with "bad" support for high DPI, the text will be readable and the interface will be scalable.
Legacy apps, such as WindowMaker dockapps (which are historically sized as 64x64) though will be unreadable. Frankly, I can already cannot read them anymore.
Given the configurability of most programs, I would say it's really not a problem. Most of the other programs will be adapted very quickly.
But then there's the problem when you open an app which is not native GTK/Gnome, for example Libre Office, where the fonts look OK but the icons are minuscule.
The Desktop itself and the Gnome applications look awesome on high DPIs.
Also Firefox works flawlessly, though on Linux you have to manually set the option "layout.css.devPixelsPerPx" on about:config.
But, yeah, a few applications can't deal with it.
Gnome terminal looks good though :) Many Gnome apps are fine, but Gnome 3 itself has problem.s
I think it should be an easy fix since Chrome OS already supports hidpi displays.
At least some work has been done recently:
https://codereview.chromium.org/27156003/
http://src.chromium.org/viewvc/chrome/trunk/src/ui/base/reso...
So maybe Chrome 33-34?
https://github-camo.global.ssl.fastly.net/52b6558796f033771c...
Elementary doesn't. They don't support high-DPI.
Even the metro Apps I can't use.
I'd need a 50ft display! It's another facet of display/accessibility issues.
I had high hopes after Media Centre, that Windows would get this right. And bought Windows 8.0 specifically for this purpose. Disappointing. I'm forever going over to the TV and my neck hates it.
Personally I think part of the solution is to change the menuing system, breaking it out from the window. If I can at least use the menus/controls on apps I have a good chance of using them.
1. Calibrate ClearType to use as little color as possible (use the system magnifier to help); this way, when apps get scaled the text is just blurry rather than blurry with odd color-fringing.
2. For apps that are incompatible but suitably configurable, set their compatibility mode to disable HiDPI scaling and then set their font sizes (or default zoom) to be larger. This works well for Chrome and Skype, at least.
3. For those times when you momentarily have trouble, remember that the windows key and the plus key will zoom your whole desktop.
I'm sure they figured that as amazing as the resolutions of the original NeXT monitor was (1120×832 in 1988), in the future it would be greatly exceeded. Not to mention they wanted to be able to use the same routines to draw to a 300 or 600dpi printed paper as a 72dpi or whatever monitors were at the time.
After all, Windows 1.0 had to run on 320x200 CGA adapters -- complete with non-square pixels.
Stop whinging about non-existent problems.
I couldn't figure out what the problem was, and googling was no help until I stumbled across the dumbest advice I'd ever seen: change the text scaling. Once I set it back to 100%, the game loaded fine. Frustrating, because at 100% I couldn't read any of the other text, which meant that if I wanted to play the game I basically had to navigate by icon and give up on reading dialogue boxes unless I wanted to sit on my coffee table instead of my couch.
Particularly working with media (DSLR images or 1080p video), it is difficult to scale GUI to a readable level while viewing the media itself at an un-scaled 1:1 pixel level. Do any editing suites for photo/video do this well? I'm talking about an un-scaled video window with a GUI that scales/wraps to an arbitrary window/screen size...
Both OS-X and Windows solutions are a hack.
A screenshot of the Icon Catalog: http://techpubs.sgi.com/library/dynaweb_docs/0650/SGI_Admin/...
And the docs for IconSmith, used to draw icons: http://techpubs.sgi.com/library/tpl/cgi-bin/getdoc.cgi/0650/...
And Motif was used for all the widgets, I guess that would make it vector-based.
We've been using pixels as size units for no reason other than laziness.
Wait, what?!? Vector rendering matured before bitmaps were common place. They are faster and use less memory, that's why programmers of the 70's and 80's loved to use them.
Bitmaps are easier. That's the only reason people use them. And only in a world where everybody gets images on the same size and resolution.
My wife does a lot of pixel redlining at her job: the artifacts they produce are all done in Illustrator, a vector program. And believe me, they would love to leave them as vectors...less work for them! However, they must be converted to bitmaps and manually redlined to eliminate sub-pixel alignment problems.
Bitmaps are not easier, otherwise the designers would be cranking out pixels directly in Photoshop and not Illustrator. The fact that NO ONE has produced a decent general purpose vector renderer that avoids pixel artifacts, even a non real-time one, means that my wife will be redlining for quite a few more years. Even font rendering (arguably simpler than icons) requires substantial hinting to be effectively resolution independent.
The other problems: elements that vanish, such as lines and thin structural rectangles, would require some pixel-related restrictions in their definition. I'm not sure vector programs are able to deal with them right now, but it would be useful.
In Windows versions prior to 8.1 the UI wouldn't let you do this for 64-bit executables, only 32-bit ones. For 64-bit apps the checkbox to disable dpi scaling was greyed out, even though if you set the key in the registry (using the same key that the UI would set for 32-bit apps) it would work just fine for 64-bit apps too.
In 8.1 they fixed this stupidity and the compatibility tab UI will work for any app regardless of being 32 ot 64 bit.
On another note I really want that laptop!!
Set the compatability to disable scaling for hidpi. Then just set the text in settings to be 26pt.
I know have a retina looking IDE on my Ativ Book 9 Plus.
Every time I've upgraded my monitor, I've found it easier. If you don't want a window to be wider than a certain point, don't make it wider. Myself, whenever I see apple users, I see them with these tiny narrow windows with nothing else on screen, which I have never understood.
That said, I always value vertical resolution - I have never bought a 1920x1080 monitor as 1600x1200 is so much nicer, or 1920x1200 for the wider aspect ratio.
He is not complaining about the windows being to wide, he is complaining about the scaling that Windows 8 applies when it detects a High DPI screen, that makes every element inside a window either too large or too small, or sometimes both, breaking the original design and fluidity of the application and rendering it unusable.
And your point about Apple users..well, I don't know what was your point about Apple users.