Αλλαγές στη 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.

Η βιβλιοθήκη της gtkmm 3 λέγεται libgtkmm-3.0 αντί για libgtkmm-2.4 και εγκαθιστά τις κεφαλίδες της σε έναν κατάλογο παρόμοιας έκδοσης, έτσι ο έλεγχος σας pkg-config πρέπει να ζητήσει για gtkmm-3.0 αντί για gtkmm-2.4.

Η gtkmm 3 πρόσθεσε μερικές νέες κλάσεις:

  1. Οι Gtk::AppChooser, Gtk::AppChooserButton, Gtk::AppChooserDialog επιτρέπουν την επιλογή μιας εγκατεστημένης εφαρμογής που θα ανοίξει έναν συγκεκριμένο τύπο περιεχομένου.

  2. Η Gtk::Grid είναι ένα νέο γραφικό συστατικό περιέκτη που θα αντικαταστήσει τελικά την Gtk::Box και την Gtk::Table. Ταξινομεί τα θυγατρικά της σύμφωνα με τις ιδιότητες αυτών των θυγατρικών αντί για τις δικές της λεπτομέρειες διάταξης.

  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 επίσης έκανε πολλές μικρές αλλαγές στην API, τις οποίες προφανώς θα αντιμετωπίσετε κατά τη μεταφορά κώδικα που χρησιμοποιήθηκε στο gtkmm-2.4. Να μια σύντομη λίστα:

  1. Gtk::CellLayout, χρησιμοποιήθηκε από Gtk::IconView, Gtk::TreeView::Column και Gtk::ComboBox, τώρα έχει μια Gtk::CellArea που μπορεί να χρησιμοποιηθεί για να ορίσει περισσότερες λεπτομέρειες τακτοποίησης και στοίχισης των CellRenderer.

  2. Το Gtk::ComboBox τώρα παράγεται από CellLayout, επιτρέποντας ευκολότερη διάταξη και στοίχιση των Gtk::CellRenderer του.

  3. Οι Gtk::Adjustment, IconSet και Gdk::Cursor χρησιμοποιούνται τώρα μέσα από Glib::RefPtr.

  4. Οι Gtk::Box, Gtk::ButtonBox, Gtk::IconView, Gtk::Paned, Gtk::ProgressBar, Gtk::ScaleButton, Gtk::Scrollbar και Gtk::Separator παράγονται τώρα από Gtk::Orientable, επιτρέποντας τον προσανατολισμό τους (κάθετο ή οριζόντιο) να οριστεί χωρίς αίτηση χρήσης παράγωγης κλάσης όπως Gtk::HBox.

  5. Gtk::IconView, Gtk::TextView, Gtk::TreeView και άλλα γραφικά συστατικά παράγονται από κυλιόμενα αντί να έχουν τις δικές τους μεθόδους όπως get_vadjustment() και αντί να έχουν το δικό τους σήμα set_scroll_adjustments.

  6. Οι Gtk::Style and Gtk::Rc αφαιρέθηκαν και αντικαταστάθηκαν με Gtk::StyleContext και Gtk::StyleProviders, όπως Gtk::CssProvider.

  7. Η Widget::on_expose_event() αντικαταστάθηκε από Widget::on_draw(), που υποθέτει ότι το cairomm χρησιμοποιείται για σχεδίαση, μέσα από την παρεχόμενη Cairo::Context και δεν σας ζητά να καλέσετε την Cairo::Context::clip().

  8. Η Gdk::RGBA αντικαθιστά την Color, προσθέτοντας ένα άλφα συστατικό για αδιαφάνεια. Η Colormap αφαιρέθηκε, μαζί με τη περίεργη χρήση της για κατανομή χρωμάτων.

  9. Οι Gdk::Pixmap και αφαιρέθηκαν Gdk::Bitmap υπέρ της Gdk::Pixbuf.

  10. Η Gdk::Drawable αφαιρέθηκε, με τις μεθόδους της να μετακινούνται στο Gdk::Window.

  11. Τώρα χρησιμοποιούμε std::vector σε αρκετές μεθόδους αντί για τους ενδιάμεσους τύπους *Handle για να κάνουμε την API πιο σαφή.

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

Ως πρώτο βήμα για μεταφορά του πηγαίου κώδικά σας στο gtkmm-3.0, θα πρέπει προφανώς να εξασφαλίσετε, ότι η εφαρμογή σας δομεί με την παρωχημένη gtkmm-2.4 με ανενεργή API, ορίζοντας μακροεντολή όπως GTK_DISABLE_DEPRECATED. Υπάρχουν μερικά αυτόματα εργαλεία μακροεντολών που μπορούν να βοηθήσουν με αυτό ορίζοντας τα προαιρετικά την ώρα δόμησης. Δείτε τη σελίδα wiki μεταφοράς gtkmm 3 για περισσότερες λεπτομέρειες.