Ändringar i gtkmm 3

gtkmm-3.0 är en gammal version av gtkmm-API:t som installeras parallellt med det ännu äldre gtkmm-2.4-API:t och det nya gtkmm-4.0-API:t. Den senaste versionen av gtkmm-2.4-API:t var gtkmm 2.24. gtkmm 3 har inga större fundamentala skillnader mot gtkmm 2 men gör flera små ändringar som inte var möjliga att göra samtidigt som binär kompatibilitet behölls. Om du aldrig använt gtkmm-2.4-API:t kan du lugnt ignorera detta kapitel.

Biblioteket för gtkmm 3 kallas libgtkmm-3.0 snarare än libgtkmm-2.4 och installerar sina huvuden i en katalog med liknande version, så din pkg-config-kontroll ska fråga efter gtkmm-3.0 snarare än gtkmm-2.4.

gtkmm 3 lade till några nya klasser:

  1. Gtk::AppChooser, Gtk::AppChooserButton och Gtk::AppChooserDialog låter användaren välja ett installerat program som ska öppna en viss typ av innehåll.

  2. Gtk::Grid är en ny behållarkomponent som med tiden kommer ersätta Gtk::Box och Gtk::Table. Den arrangerar sina underliggande komponenter enligt komponenternas egenskaper snarare än sina egna layoutdetaljer.

  3. Gtk::Switch visar På/Av-tillstånd tydligare än Gtk::CheckButton. Det kan exempelvis vara användbart när användare tillåts aktivera hårdvara.

gtkmm 3 gjorde också flera små ändringar till API:t som du troligen kommer stöta på när du porterar kod som använt gtkmm-2.4. Här är en kort lista:

  1. Gtk::CellLayout som används av Gtk::IconView, Gtk::TreeView::Column och Gtk::ComboBox har nu en Gtk::CellArea som kan användas för att ange mer detaljer om hur CellRenderer-renderarna arrangeras och justeras.

  2. Gtk::ComboBox härleds nu från CellLayout, vilket tillåter lättare layout och justering av dess Gtk::CellRenderer-renderare.

  3. Gtk::Adjustment, IconSet och Gdk::Cursor används nu via Glib::RefPtr.

  4. Gtk::Box, Gtk::ButtonBox, Gtk::IconView, Gtk::Paned, Gtk::ProgressBar, Gtk::ScaleButton, Gtk::Scrollbar och Gtk::Separator härleds nu från Gtk::Orientable vilket låter deras orientering (vertikal eller horisontell) anges utan att kräva användningen av en härledd klass som Gtk::HBox.

  5. Gtk::IconView, Gtk::TextView, Gtk::TreeView och andra komponenter härleds från Scrollable i stället för att ha egna metoder som get_vadjustment() och i stället för att ha sin egen set_scroll_adjustments-signal.

  6. Gtk::Style och Gtk::Rc togs bort, ersatta av Gtk::StyleContext och olika Gtk::StyleProvider-klasser, som Gtk::CssProvider.

  7. Widget::on_expose_event() ersattes av Widget::on_draw(), vilken antar att cairomm används för ritning genom tillhandahållen Cairo::Context och inte kräver att du anropar Cairo::Context::clip().

  8. Gdk::RGBA ersätter Color, vilket lägger till en alfakomponent för opacitet. Colormap togs bort, tillsammans med sin klumpiga användning för att allokera färger.

  9. Gdk::Pixmap och Gdk::Bitmap togs bort till förmån för Gdk::Pixbuf.

  10. Gdk::Drawable togs bort, dess metoder har flyttat till Gdk::Window.

  11. Vi använder nu std::vector i flera metoder i stället för mellanliggande *Handle-typer för att göra API:t tydligare.

Alla föråldrade API:er togs bort i gtkmm 3.0, men nya föråldringar har gjorts i senare gtkmm 3.x-versioner.

Som ett första steg för att portera din källkod till gtkmm-3.0 bör du troligen säkerställa att ditt program går bygga med det föråldrade gtkmm-2.4-API:t inaktiverat, genom att definiera makron som GTKMM_DISABLE_DEPRECATED. Det finns några autotools-makron som kan hjälpa till med detta genom att valfritt definiera dem vid byggtid. Se wikisidan för portering till gtkmm 3 för mer detaljer.