0

我想要完成的是计算我的应用程序主要在屏幕上的 dpi(或者,在我的情况下,dpmm)。据我所知,现代的方法是调用gdk::Monitor::get_height_mmand gdk::Monitor::get_width_mm

所以,从 开始window: gtk::Window,我试图让 Monitor 像这样:

let screen = window.get_display().and_then(|display| get_monitor_at_window(&window));

但是,gtk::Window没有IsA<gdk::Window>实现:

8 |     window.get_display().and_then(|display| display.get_monitor_at_window(&window));
  |                                                                           ^^^^^^^ the trait `glib::IsA<gdk::auto::window::Window>` is not implemented for `gtk::Window`
  |
  = help: the following implementations were found:
            <gtk::Window as glib::IsA<glib::Object>>
            <gtk::Window as glib::IsA<gtk::Bin>>
            <gtk::Window as glib::IsA<gtk::Buildable>>
            <gtk::Window as glib::IsA<gtk::Container>>
          and 2 others

那么,从gtk::Window窗口所在的屏幕到毫米宽和高的路径是什么?

4

1 回答 1

2

Agtk::Window与 a 不同gdk::Window。前者更像是“窗口”的概念,而后者更好地映射到 X 窗口的概念。在其他显示协议中,这些也称为“表面”,这就是它在 GTK 4 中重命名的原因,也是为了消除这种混淆。

在任何情况下,要在 GTK 中获取小部件的底层表面/窗口,您可以调用get_window()它的方法(在 gtk-rs 中,这是gtk::WidgetExt特征的一部分)

于 2021-05-22T17:11:59.257 回答