【发布时间】:2016-10-30 02:59:07
【问题描述】:
我想在Gtk::Layout 中使用自定义绘图。也就是说,我正在使用 Gtk3 (GTKmm 3.14.0) 的 C++ 绑定,并且我在自定义绘图顶部的“画布”上嵌入了小部件。基本上这工作得很好。
现在问题与滚动有关。 Gtk::Layout 可以放在Gtk::ScrolledWindow 中,当可滚动区域设置为大于可见分配时,将显示滚动条。不幸的是,这些滚动条只影响嵌入小部件的位置,而我的自定义绘图仍保持在窗口内的固定位置。
这意味着,Gtk::Allocation 和 cairo 上下文似乎都与可见区域相关,而不是与扩展的虚拟“画布”相关。我可以通过访问滚动条的调整来解决这个问题,然后相应地翻译 cairo 上下文......
我的问题是:
- 这是处理此类可滚动绘图的正确方法吗?
- 或者有什么方法可以让框架为我完成这项工作?
【问题讨论】:
-
我理解正确吗:您是直接在
Gtk::Layout内绘图?我认为你不应该这样做。如果你想画一些东西,你应该使用developer.gnome.org/gtkmm/unstable/classGtk_1_1DrawingArea.html -
不应该?请阅读文档
-
引用developer.gnome.org/gtkmm/unstable/… Gtk::Layout:包含子小部件和/或自定义绘图的无限可滚动区域。 Gtk::Layout 与 Gtk::DrawingArea 类似,因为它是“空白板”,默认情况下除了绘制空白背景之外什么都不做。不同之处在于它支持原生滚动(您可以直接将其添加到 Gtk::ScrolledWindow),并且它可以包含子小部件,因为它是 Gtk::Container。但是,如果您只是要绘图,则 Gtk::DrawingArea 是更好的选择,因为它的开销较低。
-
对不起。这对我来说实际上是新闻。我只见过人们在绘制其他小部件时被告知“使用 GtkDrawinArea”。
-
由于 GtkLayout 本身就知道如何滚动,我认为您唯一的选择是查询调整。不过,不是 100% 确定。
标签: scroll drawing gtk3 cairo gtkmm3