gtkmm3中的变更
gtkmm-3.0是gtkmm API的旧版本它依旧能与gtkmm-2.4和新的gtkmm-4.0 API并行安装。gtkmm-2.4 API的最新版本是gtkmm 2.24。gtkmm3于gtkmm2之间并没有重大的改变,但确实存在一些微小的变动,这些变动导致无法做到令他们保持二进制兼容。如果你从未用过gtkmm-2.4 API 则你可以放心的忽略本章。
gtkmm3库调用libgtkmm-3.0而不是libgtkmm-2.4 并将其的头文件安装于类似的目录下,所以你的pkg-config应该检索gtkmm-3.0而不是gtkmm-2.4。
gtkmm3添加了一些新的类:
Gtk::AppChooser,Gtk::AppChooserButton,Gtk::AppChooserDialog允许用户选择已安装的应用程序用以打开特定类型的内容。
Gtk::Grid是一个新的容器部件他将在未来完全替换Gtk::Box和Gtk::Table。它根据它的子项的属性而不是自身的布局属性对子项进行排列。
与Gtk::CheckButton相比Gtk::Switch更明确的显示开/关状态。例如,在允许用户激活硬件的时候,他可能很有用。
gtkmm3还对API进行了一些小的变更,在移植gtkmm-2.4的代码的时候你可能会遇到这些变更。这是一个简短的清单:
Gtk::IconView, Gtk::TreeView::Column和Gtk::ComboBox使用Gtk::CellLayout,现在有Gtk::CellArea可以用于指示CellRenderer的排列与对齐方式的详情。
Gtk::ComboBox现在从CellLayout派生,从而使更容易对Gtk::CellRenderer进行布局与对齐。
Gtk::Adjustment和Gtk::IconSet类和Gdk::Cursor类现在通过Glib::RefPtr使用。
Gtk::Box, Gtk::ButtonBox,Gtk::IconView, Gtk::Paned, Gtk::ProgressBar, Gtk::ScaleButton, Gtk::Scrollbar和Gtk::Separator现在从Gtk::Orientable派生,允许在不使用派生类(例如Gtk::HBox)的情况指定其方向(垂直或者水平)。
Gtk::IconView, Gtk::TextView, Gtk::TreeView和其他部件派生自Scrollable而不使用他们自己的方法,例如get_vadjustment()拥有自己的set_scroll_adjustments信号。
Gtk::Style和Gtk::Rc已被删除,由Gtk::StyleContext和Gtk::StyleProvider替换,例如Gtk::CssProvider。
Widget::on_expose_event()被Widget::on_draw()取代,通过提供的Cairo::Context使用cairomm进行绘制,并且不需要你自己调用Cairo::Context::clip()。
Color被Gdk::RGBA替代,添加alpha分量以支持透明度。Colormap与其笨拙的颜色分配方式一并被删除。
Gdk::Pixmap和Gdk::Bitmap现在被Gdk::Pixbuf所取代。
Gdk::Drawable被删除,与其有关的方法被移动到了Gdk::Window。
我们现在使用std::vector而不是使用中间类型(*Handle)以使API更加的清晰。
在gtkmm 3.0中我们删除了所有弃用的API,尽管在gtkmm 3.x版本中出现了新的被弃用的API。
将源代码迁移到gtkmm-3.0的第一步,你应该通过定义GTKMM_DISABLE_DEPRECATED宏以检查你是否使用了在gtkmm-2.4中被弃用的API,然后删除他们。有一些autotools宏可以在编译时帮助你通过构建。访问gtkmm3移植Wiki了解更多详情。