GNOME shell has supported hi-dpi monitors for while. Currently, we only allow to scale windows by integral factors (typically 2). This proves somewhat limiting as there are many systems that are just in between the dpi ranges that are good for scale factor 2, or unscaled.
To improve this situation, we want to allow scaling by fractional values, e.g. 3/2, or 2/1.3333. The way this will work is that we ask applications to scale up by 3, and then the compositor scales down by 2 on the way to the framebuffer. E.g. for an 800x600 window, the application will send 2400x1800 pixels, and the compositor will send 1200x900 pixels to the framebuffer.
This way we can end up with nominally fractional window sizes on the framebuffer, but that is not an issue for output.
For input, we already have subpixel precision, so we can easily transform input coordinates the other way.
* Control-center: Allow setting fractional scale values, per-monitor
- Split the fractional scale into upscale and downscale. Pass the upscale to applications, and handle the downscaling on the way to the framebuffer
- For input, do the inverse scaling
- For screenshots: Should avoid 'partial pixel' seams
- For xwayland clients: Not sure if there are any extra complications for these