我想让我的应用程序(纯粹在 X11 中)具有高 DPI 感知能力。为了做到这一点,我需要一种方法来找出在显示设置中配置的系统比例因子。有没有办法从 X11 应用程序中获得这个系统比例因子,而无需求助于 GTK 等更高级别的 API?
FWIW,我检查了 GTK 源代码,看看gdk_window_get_scale_factor()它是怎么做的,它似乎读取了一个名为GDK_SCALE. 然而,这个环境变量在我的系统上根本不存在,即使我在我的 4K 显示器上将缩放比例设置为 1.75。
那么如何以编程方式检索系统缩放因子?
为了回答我自己的问题,我现在尝试了三种方法:
DisplayWidth/Height和DisplayWidthMM/HeightMMxdpyinfo输出两者都不会返回正确的 DPI。相反,Xft.dpiXresource 似乎是这个问题的关键。Xft.dpi似乎总是带有正确的 DPI,因此我们只需读取它即可获得系统比例因子。
这是从这里获取的一些来源:
#include <X11/Xlib.h>
#include <X11/Xatom.h>
#include <X11/Xresource.h>
double _glfwPlatformGetMonitorDPI(_GLFWmonitor* monitor)
{
char *resourceString = XResourceManagerString(_glfw.x11.display);
XrmDatabase db;
XrmValue value;
char *type = NULL;
double dpi = 0.0;
XrmInitialize(); /* Need to initialize the DB before calling Xrm* functions */
db = XrmGetStringDatabase(resourceString);
if (resourceString) {
printf("Entire DB:\n%s\n", resourceString);
if (XrmGetResource(db, "Xft.dpi", "String", &type, &value) == True) {
if (value.addr) {
dpi = atof(value.addr);
}
}
}
printf("DPI: %f\n", dpi);
return dpi;
}
Run Code Online (Sandbox Code Playgroud)
这对我有用。
| 归档时间: |
|
| 查看次数: |
1137 次 |
| 最近记录: |