在介紹優麒麟作業系統高分屏解決方案之前,我們有必要了解幾個概念:
解析度:指給定的距離(或面積)內"點"或"畫素"的數量。有時被稱為"解析度"。常用的描述解析度的單位有: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 的知識,在 ~/.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 縮放倍數
以上就是對優麒麟高畫質屏支援縮放技術的介紹,後續將為大家帶來更多優麒麟作業系統的開發經驗分享。