Αλλαγές στη gtkmm 3

Η gtkmm-3.0 είναι μια νέα έκδοση της API της gtkmm που εγκαθίσταται παράλληλα με την παλιότερη API της gtkmm-2.4. Η τελευταία έκδοση της API της gtkmm-2.4 ήταν η gtkmm 2.24. Η gtkmm 3 δεν έχει κύριες θεμελιακές διαφορές με την gtkmm 2, αλλά κάνει πολλές μικρές αλλαγές που δεν ήταν δυνατές κατά τη διατήρηση δυαδικής συμβατότητας. Αν δεν έχετε ποτέ χρησιμοποιήσει την API της gtkmm-2.4, τότε μπορείτε να αγνοήσετε με ασφάλεια αυτό το κεφάλαιο.

Η βιβλιοθήκη της 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 εμφανίζει καταστάσεις ναι/όχι πιο σαφώς από την Gtk::CheckBox. Μπορεί να είναι χρήσιμη, για παράδειγμα, όταν επιτρέπει στους χρήστες να ενεργοποιούν υλικό.

Η 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 πιο σαφή.

Όλες οι παρωχημένες API αφαιρέθηκαν στην gtkmm 3.0, αν και θα υπάρχουν νέα παρωχημένα στις μελλοντικές εκδόσεις.

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