使用 gtk3 API 获取系统 UIScale 因子

问题描述

我正在开发一个使用 gtk3 进行窗口和事件处理的 SDK。我正在尝试使用 gtk3 API 查找系统 UIScale。在 hidpi 屏幕上,比例可以大于 1.0。我希望 gtk_window_get_scale_factor 会返回正确的比例因子,但它总是返回 1,即使我将比例设置为 2.0。

我知道 gtk 了解比例因子,因为 gtk 本机应用程序正在正确缩放。我已经运行了 gtk3-demo,它正在根据系统 UIScale 正确缩放。有人可以帮助我使用 gtk3 API 获取缩放因子吗?

PS:使用这些步骤设置比例。转到“设置->显示->比例”并使比例为2.0。我正在 Fedora 32 和 Ubuntu 20.04 上对此进行测试。

解决方法

如果您要查找的是 DPI 比例(通常由 GDK_DPI_SCALE 环境变量设置),我将使用以下代码片段的变体:


static gdouble get_dpi_scale(GdkScreen *screen)
{
    gdouble dpi = gdk_screen_get_resolution(screen);
    GtkSettings *settings = gtk_settings_get_default();
    gint xft_dpi = 0;

    g_object_get(settings,"gtk-xft-dpi",&xft_dpi,NULL);
    g_return_val_if_fail(xft_dpi > 0,0);

    return dpi / xft_dpi;
}