在介紹優麒麟操作系統高分屏解決方案之前,我們有必要了解幾個概念:
- 分辨率:指給定的距離(或面積)内"點"或"像素"的數量。有時被稱為"解析度"。常用的描述分辨率的單位有:DPI(點每英寸)和 PPI(像素每英寸)。
- DPI (Dots Per Inch):常用于描述打印圖像上每英寸的墨點數量,可以理解為 dpi 是打印機通過墨粉成滴将圖像呈現在紙張上的一種表達方式;每英寸上 dots 數會影響打印的細節和整體質量;當我們設計的圖像要進行物理打印時,打印機将使用 DPI,不同型号和樣式的打印機都會根據其設置産生自己的唯一 DPI。

DPI圖片
- PPI (Pixels Per Inch):通常用于描述數字圖像的分辨率,表示屏幕可以顯示的固定像素數和數字圖像中像素的密度;PPI 計算公式 =√(x^2 y^2)/z,x為長度像素數,y為寬度像素數,z為屏幕尺寸;由于曆史原因我們現在平時所說的軟件像素應該是 PPI,中文意思是每英寸像素數,在系統中修改的 DPI 其實就是這個 PPI。
對于電腦而言,PPI 有三個層次:
1)顯示器 PPI,這是硬件,其 PPI 是出廠固定的,不可以更改的;
2)操作系統 PPI,操作系統可以将顯示器設置成自己的分辨率,作為用戶,對我們視覺有影響的是這個分辨率;

PPI圖片
接下來開始進入主題。随着顯示器質量的提高,高分屏逐漸增多,很多用戶平時使用的機器都是2k屏甚至是4k屏,顯示器分辨率變大後,同樣的物理尺寸下可以表示更多的點。

優麒麟高分屏下自研應用的顯示效果

優麒麟高分屏下第三方應用的顯示效果
優麒麟系統上分别對于 Qt 與 GTK 這兩平台上所寫應用進行了适配工作。
Qt 平台Qt 提供了以下方式來在應用程序中處理高DPI的支持:
- QT_AUTO_SCREEN_SCALE_FACTOR 根據顯示器的像素密度啟用自動縮放。這不會更改磅号字體的大小,多個屏幕可能會獲得不同的比例因子。
- QT_SCALE_FACTOR 定義整個應用程序的全局比例因子,包括字體的大小。
- QT_SCREEN_SCALE_FACTORS 指定每個屏幕的比例因子,這不會更改字體的大小。
- 從 Qt 5.6 開始引入了 Qt::AA_EnableHighDpiScaling 屬性,使得應用程序自動檢測顯示器的像素密度來實現自動縮放;而 Qt::AA_DisableHighDpiScaling 屬性用于關閉應用程序的縮放,不管上述三個變量的值為如何。
- 從 Qt 5.14 引入了環境變量 QT_ENABLE_HIGHDPI_SCALING 替換舊有的 QT_AUTO_SCREEN_SCALE_FACTOR,可以用來檢測顯示器的像素密度來實現自動縮放 。
一個關于高DPI術語表:
|
術語 |
定義 |
|
Device Independent Pixels |
應用程序使用像素,取決于操作系統獲取Qt的縮放比例 |
|
Device Pixels |
顯示器的像素 |
|
Device Pixel Ratio |
适用于操作系統或者Qt的比例系數 |
|
Logical DPI |
将字體大小轉換為以像素為單位的字體大小的分辨率,标準值為96,128,192... |
|
Physical DPI |
即顯示器的物理分辨率 |
對于 GTK 的程序,有以下兩種環境變量用于生效:
- GDK_SCALE:以整數倍來縮放UI元素。
- GDK_DPI_SCALE:用于補償通過GDK_SCALE進行縮放後應用程序的字體分辨率。
最後還需要介紹一些關于 Xresources 的知識,在 ~/.Xresources 文件中設置 xft.dpi 幾乎可以縮放所有 Xorg 應用程序的字體,例如:xft.dpi: 192,這将會把字體放大兩倍,系統中默認 dpi 為 96。
介紹以上三種縮放方式,每一種方式都有自己的作用(縮放UI或文本),因此我們需要将他們适當的結合起來,整理成如下的一個表格:
|
應用程序 |
Xresources |
GTK環境變量 |
QT環境變量 |
|
Firefox&&Chrome |
UI&&文本 |
UI&&文本 | |
|
GTK Apps |
文本 |
UI&&文本 | |
|
常規 Xorg Apps |
文本 | ||
|
QT Apps |
文本 |
UI&&文本 |
在優麒麟系統中結合以上三種方式的特點,将縮放接口統一整合到了 ukui-settings-daemon 之中,從而實現在高分屏下的縮放效果,縮放接口為:
gsettings set org.ukui.SettingsDaemon.plugins.xsettings scaling-factor 縮放倍數
以上就是對優麒麟高清屏支持縮放技術的介紹,後續将為大家帶來更多優麒麟操作系統的開發經驗分享。
,








