如何以编程方式正确实现屏幕旋转?

如何以编程方式正确实现屏幕旋转?

我需要以编程方式获取屏幕旋转。我正在使用 Qt 和 X 扩展 XRandr。我正在尝试以下操作:

Display *dpy;
Window root;
XRRScreenConfiguration *conf;
Rotation rotation;

int screen;

dpy = QX11Info::display();
root =  QX11Info::appRootWindow();
conf = XRRGetScreenInfo(dpy, root);
screen = DefaultScreen(dpy);
XRRRotations(dpy, screen, &rotation);

qDebug() << "CURRENT ROTATION:" << rotation;

问题在于,无论当前屏幕方向如何(通过 Ubuntu 的显示设置应用程序设置),CURRENT ROTATION 输出始终为 1。

有人知道为什么吗?

谢谢

答案1

我终于找到了答案。我正在使用 Qt。一些调用来自 Qt,用于获取 X11 的窗口和屏幕。

Display *dpy;
Window root = this->winId();
dpy = QX11Info::display();

XRRScreenResources *scrres = XRRGetScreenResources(dpy, root);
XRRCrtcInfo *crtcInfo = XRRGetCrtcInfo(dpy, scrres, *scrres->crtcs);

crtcInfo->rotation can be 1, 2, 4, or 8

希望这对将来的某人有所帮助。

相关内容