• Morten Johan Sørvig's avatar
    Introduce cross platform high-dpi scaling · a705b4ec
    Morten Johan Sørvig authored
    
    Add a coordinate scaling layer to QtGui, which supports 'devicePixelRatio'
    type high-dpi on all platforms, in production and also for
    development and testing purposes.
    
    High-DPI scaling is opt-in, by setting environment variables:
        QT_SCALE_FACTOR - sets a global scale factor
        QT_AUTO_SCREEN_SCALE_FACTOR - sets per-screen scale factors,
            where the scale factors are provided by the platform plugin.
    
    This QtGui scaling can be used instead of or in addition to scaling
    done by the window system. This distinction is not visible to
    applications [when they use Qt API], which will see a change in
    the value returned by the devicePixelRatio() accessors as usual.
    
    Introduce a new (private to Qt) coordinate system: native pixels.
    The coordinate system stack now looks like:
        device-independent pixels (app, upper parts of Qt)
        native pixels (lower parts of Qt Gui, platform plugins)
        device pixels (backing stores and OpenGL)
    
    Add private QHighDpi namespace with scaling functions that convert
    between device-independent pixels and native pixels:
        T toNativePixels(T, QWindow *);
        T fromNativePixels(T, QWindow *);
    
    Add scaling calls the QWindow (and friends) cross-platform implementation,
    around the calls to QPlatformWindow functions. QPlatformWindow now uses
    native coordinates - platform code remains largely unchanged since native
    coordinates are window system coordinates.
    
    QWindow now uses (possibly) scaled coordinates. This means that
    platform plugins no longer can rely on QWindow::geometry() and
    related functions. QPlatformWindow::windowGeometry() and other
    convenience functions have been added for use when the platform
    plugin needs to convert scaled geometry to native geometry.
    
    Add Qt::AA_NoHighDpiScaling, which can be use to disable any
    scaling in QtGui, effectively ignoring the environment variables.
    (Note that this does not disable any scaling done by the window
    system.)
    
    Contributions from Friedemann and Paul.
    
    Task-number: QTBUG-46615
    Change-Id: I673bbd69c130e73b13cce83be11bfb28f580bf60
    Reviewed-by: default avatarLars Knoll <lars.knoll@theqtcompany.com>
    a705b4ec