我需要一个简单的图像查看器小部件来显示一个Pixbuf,其缩放系数可以使用滚轮更改(仅限整数因子,最近邻插值),放大时应调整滚动位置以使当前中心或鼠标位置将成为原点。单击并拖动鼠标应相应地移动表面;基本上是eog
或evince
做什么。
曾经有一个用于GTK2的外部 gtk-image-viewer 组件,但我还没有找到任何其他内容......
所以我尝试实现自己的,这就是我走了多远:
struct ZoomableImage : public Gtk::Scrollable, public Gtk::DrawingArea {
ZoomableImage() {
auto h = get_hadjustment();
}
};
导致警告
gtk_scrollable_get_hadjustment: assertion `GTK_IS_SCROLLABLE (scrollable)' failed
我找不到任何关于如何在GTKmm中继承接口的正确文档,标题隐藏了doxygen的构造函数,该构造函数应该被调用基类的init()
函数的结果?!一些示例初始化Glib::ObjectBase(typeid(ZoomableImage))
,这只会增加更多错误。
(我的想法是将我的ZoomableImage放在ScrolledWindow中,它应该为我提供H / V调整,范围从0到图像的实际高度/宽度,在on_draw
中,我会读取调整值,应用缩放系数并相应地绘制Pixbuf。这有意义吗?)