Změny v gtkmm 3

gtkmm-3.0 is an old version of the gtkmm API that installs in parallel with the still older gtkmm-2.4 API and the new gtkmm-4.0 API. The last version of the gtkmm-2.4 API was gtkmm 2.24. gtkmm 3 has no major fundamental differences to gtkmm 2 but does make several small changes that were not possible while maintaining binary compatibility. If you never used the gtkmm-2.4 API then you can safely ignore this chapter.

Knihovna tvořící gtkmm 3.0 se nazývá libgtkmm-3.0 místo libgtkmm-2.4 a instaluje své hlavičkové soubory do obdobně verzované složky, takže se pkg-config může doptat na gtkmm-3.0 i gtkmm-2.4.

gtkmm 3 přidává některé nové třídy:

  1. Gtk::AppChooser, Gtk::AppChooserButton a Gtk::AppChooserDialog umožňují uživateli vybrat nainstalovanou aplikaci pro otevření konkrétního typu obsahu.

  2. Gtk::Grid je nový kontejnerový widget, který může případně nahradit Gtk::Box a Gtk::Table. Své potomky uspořádává přednostně podle jejich vlastností, místo nějakého svého daného rozvržení.

  3. Gtk::Switch displays On/Off states more explictly than Gtk::CheckButton. It may be useful, for instance, when allowing users to activate hardware.

gtkmm 3 má také několik menších změn v API, na které pravděpodobně narazíte při portování kódu, který používá gtkmm 2.4. Zde je jejich krátký seznam:

  1. Gtk::CellLayout používaná třídami Gtk::IconView, Gtk::TreeView::Column a Gtk::ComboBox má nyní Gtk::CellArea, kterou lze použít k přesnějšímu určení, jak jsou objekty CellRenderer uspořádané a zarovnané.

  2. Gtk::ComboBox nyní odvozuje z CellLayout, díky čemuž je rozvržení a zarovnání jeho instancí Gtk::CellRenderer snazší.

  3. Gtk::Adjustment, IconSet a Gdk::Cursor se teď používají přes Glib::RefPtr.

  4. Gtk::Box, Gtk::ButtonBox, Gtk::IconView, Gtk::Paned, Gtk::ProgressBar, Gtk::ScaleButton, Gtk::Scrollbar a Gtk::Separator jsou nyní odovozené z Gtk::Orientable, což umožňuje jejich otočení (svislé nebo vodorovné) určit bez požadavku na použití odvozené třídy, jako je Gtk::HBox.

  5. Gtk::IconView, Gtk::TextView, Gtk::TreeView a další widgety odvozují ze Scrollable, místo aby si definovali své vlastní metody, jako je get_vadjustment(), a místo aby měli svůj vlastní signál set_scroll_adjustments.

  6. Gtk::Style a Gtk::Rc byla odstraněny a nahrazují je třída Gtk::StyleContext a třídy Gtk::StyleProvider, jako je Gtk::CssProvider.

  7. Metoda Widget::on_expose_event() byla nahrazena pomocí Widget::on_draw(), která předpokládá, že pro kreslení je použita knihovna cairomm přes poskytovaný Cairo::Context a nevyžaduje volání Cairo::Context::clip().

  8. Gdk::RGBA nahrazuje Color, přičemž přidává komponentu alfa pro průhlednost. Colormap byla odstraněna, spolu s jejím nevhodným alokováním barev.

  9. Gdk::Pixmap a Gdk::Bitmap byly odstraněny ve prospěch Gdk::Pixbuf.

  10. Třída Gdk::Drawable byla odstraněn a jeho metody přesunuty do Gdk::Window.

  11. Nyní v několika metodách používáme std::vector místo mezilehlého typu *Handle, aby bylo API čistší.

All deprecated API was removed in gtkmm 3.0, though there have been new deprecations in later gtkmm 3.x versions.

Jako první krok při portování zdrojového kódu do gtkmm-3.0 byste asi měli zajistit, abys se vaše aplikace sestavila se zakázaným zavrženým API gtkmm-2.4 pomocí definice makra GTKMM_DISABLE_DEPRECATED. Existují některá makra v autotools, která vám to mohou usnadnit tím, že je volitelně definujete v době sestavení. Více podrobností viz wikistránka o portování na gtkmm 3.