From b52984369df0ba311a7f7106086d30a799e3bb61 Mon Sep 17 00:00:00 2001 From: Kavindra Palaraja <kpalaraja@luxoft.com> Date: Tue, 24 Sep 2019 14:50:41 +0200 Subject: [PATCH] docs: Cleanup old documentation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Use active voice to improve readability * Restructure the topic to reduce the number of sections * Simplify parts of the content to make it easier to skim Change-Id: Ic8b327acfc3c3d6435324ba219bd5eebcd9d159a Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io> --- doc/src/highdpi.qdoc | 250 ++++++++++++++++++++----------------------- 1 file changed, 118 insertions(+), 132 deletions(-) diff --git a/doc/src/highdpi.qdoc b/doc/src/highdpi.qdoc index 7658f024..79144efb 100644 --- a/doc/src/highdpi.qdoc +++ b/doc/src/highdpi.qdoc @@ -27,95 +27,89 @@ /*! \page highdpi.html \title High DPI Displays - \brief Concepts of High DPI Displays + \brief Describes the concepts in high DPI displays. - \section1 High DPI Displays + High DPI displays have increased pixel density, compared to standard DPI displays. - High DPI Displays are displays with increased pixel density compared to standard - DPI displays. + Pixel density is measured in Dots per Inch (DPI) or Pixels per Inch (PPI), and is determined by + the number of display pixels and their size. Consequently, the number of pixels alone isn't + enough to determine if a display falls into the high-DPI category. - This pixel density is measured in Dots per Inch (DPI) or Pixels Per Inch (PPI), - and is determined by the number of display pixels and physical size. This means that - the number of pixels alone is not enough to determine if a display falls into the - high-DPI category. + A 4K monitor has a fixed number of pixels (~8M), however its DPI varies between 185 (23 inches) + and 110 (40 inches). The former is around twice the standard 96 DPI desktop resolution; the + latter barely exceeds this resolution. - A 4K monitor has a fixed number of pixels (~8M), however the DPI varies between 185 - (23 inch) and 110 (40 inch). The former is around 2x standard 96 DPI desktop resolution, - while the latter is barely over it. + \section2 Challenges with High DPI - \section2 Issues with High DPI - - High DPI Displays cause a number of issues for existing applications: + High DPI displays bring about some challenges for existing applications: \list - \li Applications using UI designs with fixed coordinates look small. - The combination of font size specification in points and other sizes in - pixels is particularly problematic since points are independent of the monitor - resolution. For example, a frame of 40x20 pixels around the text "hello" - using a 12pt font looks correct on low resolution monitors, - but the frame will be too small on high DPI monitors, causing the text - to be clipped. - - \li Applications must adapt to situations where users have multiple displays with - varying resolution. For example, they might use a 4K monitor for the - document window of an image editor and a low resolution monitor for the - tool box. + \li \b{Applications using UI designs with fixed coordinates look small} + \br The combination of specifying font size in points and other sizes in pixels is + particularly problematic because points are independent from the monitor's resolution. + For example, suppose we have a frame of 40x20 pixels around the text "hello". If we use + a 12pt font, it would look correct on low resolution monitors. But, on high DPI + monitors, the frame would be too small, resulting in the text being clipped. + + \li \b{Applications must adapt to situations where users have multiple displays with + varying resolutions} + \br For example, a user might use a 4K monitor for the document window of an image + editor but a low resolution monitor for the tool box. \endlist - The traditional approach to supporting high DPI has been one where Qt scaled fonts - automatically, and then provided a DPI value that application code could use - to scale the rest of the UI. + Traditionally, to support high DPI, Qt scales fonts automatically and provides a DPI value + that application code can use to scale the rest of the UI. - \section2 Qt High DPI Support Overview + \section2 High DPI Support on a System Level - Qt supports a high DPI mode where the main coordinate system is virtualized and - made independent of the display pixel density. This mode is implemented by some - operating systems (\macos, iOS). In addition, Qt contains an implementation which - may be used where operating system support is missing. + Qt supports a high DPI mode where the main coordinate system is virtualized and made independent + from the display pixel density. Some operating systems, like \macOS and iOS implement this mode. + Additionally, if an operating system doesn't support this mode, Qt has an implementation to + fallback on. - Geometry is now specified in device independent pixels. This includes widget and - item geometry, event geometry, desktop, window and screen geometry, and animation - velocities. Rendered output is in device pixels, which corresponds to the display - resolution. The ratio between the device independent and device pixel coordinate - systems is the devicePixelRatio. + Now, geometry is specified in device independent pixels. This includes widget and item geometry, + event geometry, desktop, window and screen geometry, as well as animation velocities. The output + is rendered in device pixels, which corresponds to the display resolution. The \e devicePixelRatio + is the ratio between the device independent pixels and the device pixel coordinate system. - Applications mostly work with device independent pixels. Notable exceptions are - OpenGL and code that works with raster graphics. + Typically, most applications work with device independent pixels; except for OpenGL and code for + raster graphics. \section2 Operating System Support - The operating systems supported by Qt offer the following support for high DPI displays: + The Qt-supported operating systems offer the following for high DPI displays: \section3 \macos and iOS - The Apple platforms implement scaling and coordinate system virtualization in the - in the operating system. Normally, no special configuration is required. + The Apple platforms implement scaling and coordinate system virtualization in the operating + system. Normally, no special configuration is required. + + On \macos, high-DPI support is enabled by settings in the \c{Info.plist} file; so make sure + these settings are present. - \note On \macos, high-DPI support is enabled by settings in the Info.plist file. - Make sure they are present. \code <key>NSPrincipalClass</key> <string>NSApplication</string> <key>NSHighResolutionCapable</key> <string>True</string> \endcode - Newer versions of qmake will generate Info.plist's with the NSPrincipalClass key, - which is sufficient since NSHighResolutionCapable is true by default. - \note \macos and iOS may apply further virtualization such that device pixels do not - correspond 1:1 to display pixels. This happens on the iPhone 6+ and on \macos configured - with 'display scaling' enabled. + Newer versions of qmake will generate an \c{Info.plist} file with the NSPrincipalClass key; + this is sufficient since NSHighResolutionCapable is true by default. + + \note Both \macos and iOS may apply further virtualization, such that device pixels no longer + correspond to display pixels 1:1. This happens on the iPhone 6+ and on \macos configured with + "display scaling" enabled. \section3 Microsoft Windows - \section4 Scaling + \b Scaling - The user can choose a scaling factor from the control panel or via context menu. - This works by making the functions for querying the system metrics return - different values for standard font sizes, sizes of window borders, and so on. - It does not perform any actual scaling. + Users choose a scaling factor from the \uicontrol{Control Panel} or via the context menu. This + works by making the functions for querying the system metrics return different values for + standard font sizes, sizes of window borders, and so on. It doesn't perform any actual scaling. - \section4 DPI Awareness + \b DPI Awareness An application on Windows can assume one of the following levels of "DPI Awareness": @@ -126,107 +120,105 @@ \row \li DPI Unaware - \li This level has been introduced in Windows Vista. Windows will pretend to the - application that it is running on a standard display of 96 DPI of 1920x1080 - and scale the application accordingly. It is intended to accommodate older - applications designed for low DPI displays. Some artifacts may result from - this type of scaling. + \li This level was introduced in Windows Vista. To the application, Windows pretends + as if it's running on a standard display of 96 DPI of 1920x1080 and scales the + application accordingly. It's intended to accommodate older applications designed + for low DPI displays. This type of scaling may result in some artifacts. \row \li System-DPI Aware - \li This level has been introduced in Windows Vista. It differs from - \e{Per-Monitor DPI Aware} only when multiple monitors are connected. - Windows will calculate a scaling suitable for all connected monitors. + \li This level was introduced in Windows Vista. It differs from + \e{Per-Monitor DPI Aware} only when multiple monitors are connected. Windows + calculates a scaling that's suitable for all monitors connected. \row \li Per-Monitor DPI Aware - \li This level has been introduced in Windows 8.1. Windows does not perform - any scaling at all. - + \li This level was introduced in Windows 8.1. Windows does not perform any scaling at + all. \endtable - Qt applications by default are \e{Per-Monitor DPI Aware} on Windows 8.1 or \e{System-DPI Aware} - on older versions of Windows. As of Qt 5.4, the level can be specified by passing a parameter - to the platform plugin (see \l{Using qt.conf}): + By default, Qt applications are set to \e{Per-Monitor DPI Aware} on Windows 8.1 or + \e{System-DPI Aware} on older Windows versions. As of Qt 5.4, this level can be specified via + a parameter to the platform plugin: \code <application> -platform windows:dpiawareness=0,1,2 \endcode + For more information, see \l{Using qt.conf}. + \section2 High DPI Support in Qt + Qt provides the following ways for you to handle high DPI support in your application. + \list - \li Ability to provide pixmaps or artwork for high resolution: + \li The ability to provide pixmaps or artwork for high resolution. For more details, see \l{Drawing High Resolution Versions of Pixmaps and Images}. - \li Qt 5.6 supports cross-platform high-DPI scaling for legacy applications, - similar to the scaling done natively by \macos. This allows applications written - for low-DPI screens to run unchanged on high-DPI devices. This feature is - opt-in, and can be enabled by the following environment variables: + \li Qt 5.6 supports cross-platform high-DPI scaling for legacy applications, similar to + the scaling done natively in \macos. This allows applications written for low DPI + screens to run unchanged on high DPI devices. This feature is opt-in, and can be + enabled using the following environment variables: \list - \li \c QT_AUTO_SCREEN_SCALE_FACTOR [boolean] enables automatic scaling, - based on the pixel density of the monitor. This will not change the size - of point sized fonts, since point is a physical unit of measure. Multiple - screens may get different scale factors. + based on the monitor's pixel density. This won't change the size of point-sized + fonts, since point is a physical measurement unit. Multiple screens may get + different scale factors. - \li \c QT_SCALE_FACTOR [numeric] defines a global scale - factor for the whole application, including point sized fonts. + \li \c QT_SCALE_FACTOR [numeric] defines a global scale factor for the whole + application, including point-sized fonts. - \li \c QT_SCREEN_SCALE_FACTORS [list] specifies scale factors - for each screen. This will not change the size - of point sized fonts. This environment variable is + \li \c QT_SCREEN_SCALE_FACTORS [list] specifies scale factors for each screen. + This won't change the size of point-sized fonts. The environment variable is mainly useful for debugging, or to work around monitors with wrong \l {https://en.wikipedia.org/wiki/Extended_Display_Identification_Data} {EDID information}(Extended Display Identification Data). - The format can be either a semicolon-separated list of scale - factors in the same order as QGuiApplication::screens(), or a - semicolon-separated list of \c name=value pairs, where \c - name is the same as QScreen::name(). - - \endlist + The format can either be a semicolon-separated list of scale factors in the same + order as QGuiApplication::screens(), or a semicolon-separated list of \c name=value + pairs, where \c name is the same as QScreen::name(). + \endlist - While the macOS style fully supports high-DPI, the Windows desktop style - currently has some limitations with certain scale factors. In these cases, - consider using the Fusion style instead, which aims to support high-DPI in - all cases. + While the \macOS style fully supports high-DPI, the Windows desktop style currently has + some limitations with certain scale factors. In these cases, consider using the Fusion + style instead, which supports high-DPI in all cases. - \note Non-integer scale factors may cause significant - scaling/painting artifacts. + \note Non-integer scale factors may cause significant scaling/painting artifacts. - \li The application attribute \c Qt::AA_EnableHighDpiScaling, introduced in Qt 5.6, - enables automatic scaling based on the pixel density of the monitor. + \li The \c Qt::AA_EnableHighDpiScaling application attribute, introduced in Qt 5.6, + enables automatic scaling based on the monitor's pixel density. - \li The application attribute \c Qt::AA_DisableHighDpiScaling, introduced in Qt 5.6, - turns off all scaling. This is intended for applications that need to use - actual window system coordinates, regardless of environment variables. This - attribute takes priority over Qt::AA_EnableHighDpiScaling. + \li The \c Qt::AA_DisableHighDpiScaling application attribute, introduced in Qt 5.6, + turns off all scaling. This is intended for applications that require actual window + system coordinates, regardless of environment variables. This attribute takes priority + over Qt::AA_EnableHighDpiScaling. - \li An experimental implementation of high-DPI scaling was introduced in Qt 5.4. - It was enabled by the environment variable \c QT_DEVICE_PIXEL_RATIO, which - could be set to a numerical scale factor or \c "auto". This variable is - deprecated in Qt 5.6. + \li In Qt 5.4, there was an experimental implementation of high DPI scaling introduced via + the \c QT_DEVICE_PIXEL_RATIO environment variable, that you could set to a numerical + scale factor or \c auto. This variable was deprecated in Qt 5.6. \endlist - \section2 Migration of Existing Applications + \section2 Migrate Existing Applications - In order to get an application designed for low DPI values running on a high - resolution monitors quickly, consider one of the scaling options (let the - application run as \e{DPI Unaware} on Windows or set the environment - variable \c QT_AUTO_SCREEN_SCALE_FACTOR to \c "1". These options may incur - some scaling or painting artifacts, though. + To get an application designed for low DPI values running on high resolution monitors quickly, + consider one of the following: - In the longer term, the application should be adapted to run unmodified: + \list + \li let the application run as \e{DPI Unaware} on Windows + \li set the \c QT_AUTO_SCREEN_SCALE_FACTOR environment variable to \c 1. + + However, these options may result in some scaling or painting artifacts. + + In the long term, the application should be adapted to run unmodified: \list \li Always use the qreal versions of the QPainter drawing API. - \li Size windows and dialogs in relation to the screen size. - \li Replace hard-coded sizes in layouts and drawing code - by values calculated from font metrics or screen size. + \li Size windows and dialogs in relation to the corresponding screen size. + \li Replace hard-coded sizes in layouts and drawing code with values calculated from font + metrics or screen size. \endlist - \section2 Glossary Of High DPI Terms + \section2 Glossary \table \header @@ -235,34 +227,28 @@ \row \li Device Independent Pixels - \li Pixels used by application (user space), subject to scaling by the operating + \li The pixels that an application uses (user space), subject to scaling by the operating system or Qt. \row \li Device Pixels - \li Pixels of the display device. + \li The display device's pixels. \row \li Device Pixel Ratio - \li Scale factor applied by the operating system or Qt. + \li The scale factor that either the operating system or Qt applies. \row \li Logical DPI - \li Resolution used for converting font sizes defined in points to font sizes in pixels. - Typically one of the standard values 96, 128, .. 192. + \li The resolution used to convert font sizes defined in points to font sizes in pixels. + The standard values are 96, 128, ... 192. \row \li Physical DPI - \li Physical resolution obtained by dividing the size of the monitor by - the number of pixels. - - \row - \li Retina Display - \li See \l{http://en.wikipedia.org/wiki/Retina_Display}{Wikipedia on Retina Displays} - + \li The physical resolution obtained by dividing the size of the monitor by the number + of pixels. \row \li User Space - \li The coordinate space the application uses (Device Independent Pixels). - + \li The coordinate space that an application uses in Device Independent Pixels. \endtable */ -- GitLab