https://bugs.winehq.org/show_bug.cgi?id=52354
--- Comment #15 from Tim Clem tclem@codeweavers.com --- It seems like making WineContentView layer-hosting (rather than layer-backed) fixes the retina issue. That makes a certain amount of sense - the docs say that AppKit takes a "hands off" approach to hosted layers, so whatever is basically ignoring contentsScale doesn't happen in that case. A small downside of being "hands off" is that (AFAICT) layer-hosting views aren't eligible for -updateLayer. Though I suppose that's not a big deal since that wasn't working as intended High Sierra anyway.
Attached are two patches that get this going for me on High Sierra with effectively no changes on OS versions after that. On High Sierra and earlier, I manually make a CALayer for the view and set its delegate to the view itself. -setNeedsDisplayInRect on the view forwards to the layer, which eventually triggers the -displayLayer: delegate call. That just calls -updateLayer, since that's the functionality we want. On Mojave and later, we let the view make its own layer, skip the unnecessary forwarding in setNeedsDisplay, and -updateLayer is called directly.
Chip, what are you thoughts on this approach? And Dean, would you mind kicking the tires a bit? The oldest OS I have available is High Sierra, so I'm curious how this fares before that.