Cambios en gtkmm 3

gtkmm-3.0 es una versión nueva de la API gtkmm que se instala en paralelo con la API gtkmm-2.4, más vieja. La última versión de la API gtkmm-2.4 fue gtkmm 2.24. gtkmm 3 no tiene diferencias fundamentales importantes con respecto a gtkmm 2, pero hace varios cambios pequeños que no fueron posibles mientras se mantenía la compatibilidad de los binarios. Si nunca ha usado la API gtkmm-2.4, entonces puede ignorar con seguridad este capítulo.

La biblioteca de gtkmm 3 se llama libgtkmm-3.0, en vez de libgtkmm-2.4 e instala sus archivos de cabecera en una carpeta versionada similarmente, por lo que su verificación pkg-config debería buscar gtkmm-3.0 en vez de gtkmm-2.4.

gtkmm 3 añadió algunas clases nuevas:

  1. Gtk::AppChooser, Gtk::AppChooserButton, Gtk::AppChooserDialog permiten al usuario seleccionar una aplicación instalada para abrir un determinado tipo de contenido.

  2. Gtk::Grid es un widget contenedor nuevo que eventualmente reemplazará a Gtk::Box y a Gtk::Table. Ordena a sus hijos de acuerdo a sus propiedades en lugar de sus propios detalles de disposición.

  3. Gtk::Switch muestra los estados Encendido/Apagado más explícitamente que Gtk::CheckBox. Puede ser útil, por ejemplo, al permitir a los usuarios activar hardware.

gtkmm 3 también hizo varios cambios pequeños a la API, que probablemente encontrará cuando porte código que usaba gtkmm-2.4. Aquí hay una lista corta:

  1. Gtk::CellLayout, usada por Gtk::IconView, Gtk::TreeView::Column y Gtk::ComboBox ahora tiene una Gtk::CellArea, que puede usarse para especificar más detalles acerca de cómo las CellRenderer se ordenan y alinean.

  2. Gtk::ComboBox ahora deriva de CellLayout, permitiendo una disposición y alineación más fácil de sus Gtk::CellRenderer.

  3. Gtk::Adjustment, IconSet y Gdk::Cursor se usan ahora a través de Glib::RefPtr.

  4. Gtk::Box, Gtk::ButtonBox, Gtk::IconView, Gtk::Paned, Gtk::ProgressBar, Gtk::ScaleButton, Gtk::Scrollbar y Gtk::Separator ahora derivan de Gtk::Orientable, permitiendo especificar su orientación (vertical u horizontal) sin requerir el uso de una clase derivada como Gtk::HBox.

  5. Gtk::IconView, Gtk::TextView, Gtk::TreeView y otros widgets derivan de Scrollable en vez de tener sus propios métodos como get_vadjustment() y su propia señal set_scroll_adjustments.

  6. Gtk::Style y Gtk::Rc se quitaron y se reemplazaron por Gtk::StyleContext, y Gtk::StyleProvider, así como Gtk::CssProvider.

  7. Widget::on_expose_event() se reemplazó por Widget::on_draw(), que asume que cairomm se usa para dibujar, a través del Cairo::Context provisto y no requiere que llame a Cairo::Context::clip().

  8. Gdk::RGBA reemplaza a Color, añadiendo un componente alfa para la opacidad. Colormap se eliminó, junto con su molesto uso para asignar colores.

  9. Gdk::Pixmap y Gdk::Bitmap se eliminaron en favor de Gdk::Pixbuf.

  10. Gdk::Drawable se quitó, y sus métodos se movieron a Gdk::Window.

  11. Ahora se usa std::vector en muchos métodos en vez de los tipos intermedios *Handle para hacer a la API más clara.

Toda la API obsoleta se quitó en gtkmm 3.0, sin embargo, se marcarán más partes como obsoletas en versiones futuras.

As a first step to porting your source code to gtkmm-3.0 you should probably ensure that your application builds with the deprecated gtkmm-2.4 API disabled, by defining macro such as GTKMM_DISABLE_DEPRECATED. There are some autotools macros that can help with this by defining them optionally at build time. See the gtkmm 3 porting wiki page for more details.